@taskforcehq/taskforce 0.3.324 → 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 +2191 -540
- 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 +257 -151
- 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 +11 -12
- 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 +1684 -620
- 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 +62 -51
- package/dist/components/views/panels/PlanningDrawer.js +993 -314
- package/dist/components/views/planningScope.d.ts +4 -0
- package/dist/components/views/planningScope.js +12 -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 +516 -252
- 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 +1106 -396
- 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 +42 -6
- package/dist/hooks/workspace/workspaceLocalState.js +213 -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 -40
- 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 +104 -53
- package/dist/mcp/clientRegistry.d.ts +30 -0
- package/dist/mcp/clientRegistry.js +134 -0
- package/dist/mcp/collaborationRegistrar.js +21 -7
- package/dist/mcp/documentAssetRegistrar.js +227 -107
- package/dist/mcp/documentContentCommand.d.ts +94 -0
- package/dist/mcp/documentContentCommand.js +226 -0
- package/dist/mcp/documentHelpers.d.ts +14 -59
- package/dist/mcp/documentHelpers.js +52 -61
- 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 +86 -1
- package/dist/mcp/runtime.js +4562 -2270
- 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 +253 -101
- 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 +18 -0
- package/dist/mcp/toolProfiles.js +79 -0
- package/dist/mcp/toolRegistry.d.ts +102 -609
- package/dist/mcp/toolRegistry.js +108 -88
- 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/shared/taxonomyLibrary.js +1 -1
- 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 +596 -4
- 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 +2 -4
- 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/theme.js +1 -1
- 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 -37
- 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 -110
- package/dist/resources/templates/workflows/do.yaml +0 -88
- package/dist/resources/templates/workflows/evaluate.yaml +0 -117
- package/dist/resources/templates/workflows/execute.yaml +0 -159
- package/dist/resources/templates/workflows/plan.yaml +0 -119
- package/dist/resources/templates/workflows/review.yaml +0 -115
- 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-DvkbUHi0.js +0 -1
- package/dist/ui/assets/AnnotatedAttachmentWorkspace-BVKew-mH.css +0 -1
- package/dist/ui/assets/AnnotatedAttachmentWorkspace-jhOhxqHT.js +0 -3
- package/dist/ui/assets/ContextAttachmentManager-BAmEyLHL.js +0 -3
- package/dist/ui/assets/DocumentWorkspace-D4rJKXzd.css +0 -1
- package/dist/ui/assets/DocumentWorkspace-X-CpD5OO.js +0 -252
- package/dist/ui/assets/EntityActivityTimeline-DD33onAC.js +0 -1
- package/dist/ui/assets/EntityActivityTimeline-DyqvvhuF.css +0 -1
- package/dist/ui/assets/InitiativesModule-5nDXtIjf.js +0 -1
- package/dist/ui/assets/PlansPage-B8nDR1hQ.js +0 -1
- package/dist/ui/assets/PlansPage-DeAzWYTb.css +0 -1
- package/dist/ui/assets/TaskContextUpload-DrGrXJHm.js +0 -1
- package/dist/ui/assets/TaskSettings-BXVvZZwH.js +0 -9
- package/dist/ui/assets/WorkflowsModule-DWCGhEWT.js +0 -5
- package/dist/ui/assets/documentReferences-Crup321p.js +0 -1
- package/dist/ui/assets/index-B9k24Aym.js +0 -5
- package/dist/ui/assets/index-DNeR5dYW.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 -110
- package/src/resources/templates/workflows/do.yaml +0 -88
- package/src/resources/templates/workflows/evaluate.yaml +0 -117
- package/src/resources/templates/workflows/execute.yaml +0 -159
- package/src/resources/templates/workflows/plan.yaml +0 -119
- package/src/resources/templates/workflows/review.yaml +0 -115
- /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
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["assets/EntityActivityTimeline-pJ2ZjZ-k.js","assets/vendor-react-CKJs5o3c.js","assets/vendor-icons-B8ZNsH1g.js","assets/vendor-markdown-_lhNCyq-.js","assets/vendor-dnd-CJ-AjP-Y.js","assets/vendor-router-AqJMU8Lz.js","assets/EntityActivityTimeline-BfJbZRdl.css","assets/TaskContextUpload-bl4fOOUz.js","assets/ContextAttachmentManager-CMxSzHqc.js","assets/TaskContextUpload-Ds4LnDzV.css","assets/TaskSettings-xVsxSa0g.js","assets/TaskSettings-CnIBL_Eb.css","assets/AnnotatedAttachmentWorkspace-DHNYaNg6.js","assets/AssetTraySortControl-DphbyHVc.js","assets/AssetTraySortControl-B9k5caQW.css","assets/AnnotatedAttachmentWorkspace-CBRZ8rca.css","assets/DocumentWorkspace-BC7sy5TG.js","assets/DocumentWorkspace-BIBGBfd7.css","assets/TaskforceAgentsModule-CkAxW19K.js","assets/AiIdentityRosterCard-DB1BLO_j.js","assets/TaskforceAgentsModule-D6IC0S7Q.css","assets/WorkflowManagerModule-BKqIGVnF.js","assets/WorkflowManagerModule-DF10XENz.css","assets/AiProfilesModule-DPxQeF9N.js","assets/PlanningModule-t5GbvVR9.js","assets/PlanningModule-CeTqXMMz.css","assets/PlansPage-BVH_NfgT.js","assets/PlansPage-C2nkK2Bp.css"])))=>i.map(i=>d[i]);
|
|
2
|
+
import{r as o,j as n,R as Q,a as yc,b as dT}from"./vendor-react-CKJs5o3c.js";import{I as To,C as ad,a as dd,S as lg,F as uT,A as Xc,R as mi,L as Au,T as Lf,b as pk,c as gc,d as pT,P as Ko,e as hi,f as Xk,g as WS,h as Ln,i as sd,j as fT,k as mT,l as hT,m as $S,B as Yl,U as wu,n as FS,o as gT,X as fo,G as ev,p as pf,q as od,r as yT,s as US,t as Sf,D as kT,E as Bw,u as vT,v as Af,w as wT,x as zS,y as HS,z as bT,H as ST,K as AT,J as VS,M as CT,N as _T,O as IT,Q as TT,V as GS,W as xT,Y as tv,Z as lo,_ as KS,$ as RT,a0 as qS,a1 as PT,a2 as ET,a3 as NT,a4 as Py,a5 as jT,a6 as Ww,a7 as $w,a8 as MT,a9 as DT,aa as LT,ab as OT,ac as BT,ad as YS,ae as WT,af as Fw,ag as $T,ah as FT,ai as UT}from"./vendor-icons-B8ZNsH1g.js";import{s as zT,M as HT,r as Uw,a as VT}from"./vendor-markdown-_lhNCyq-.js";import{u as rv,a as Cf,P as nv,b as ZS,D as av,c as JS,S as sv,v as ov,d as iv,C as dg,e as cv,s as QS,K as XS,f as GT,p as KT,g as zw,h as qT,i as eA,j as YT}from"./vendor-dnd-CJ-AjP-Y.js";import{u as tA,a as rA,b as ZT,M as JT,N as Hw,B as QT}from"./vendor-router-AqJMU8Lz.js";(function(){const t=document.createElement("link").relList;if(t&&t.supports&&t.supports("modulepreload"))return;for(const s of document.querySelectorAll('link[rel="modulepreload"]'))a(s);new MutationObserver(s=>{for(const i of s)if(i.type==="childList")for(const l of i.addedNodes)l.tagName==="LINK"&&l.rel==="modulepreload"&&a(l)}).observe(document,{childList:!0,subtree:!0});function r(s){const i={};return s.integrity&&(i.integrity=s.integrity),s.referrerPolicy&&(i.referrerPolicy=s.referrerPolicy),s.crossOrigin==="use-credentials"?i.credentials="include":s.crossOrigin==="anonymous"?i.credentials="omit":i.credentials="same-origin",i}function a(s){if(s.ep)return;s.ep=!0;const i=r(s);fetch(s.href,i)}})();const bu="default",ug="General",po="task",XT=2,e0=[{value:bu,label:ug,icon:"Inbox"}],nA=[{value:po,label:"Task",icon:"CheckSquare",color:"blue-500"}],t0=[{value:XT,label:"Medium",color:"blue-500",icon:"Minus"}];function r0(){return e0.map(e=>({...e}))}function n0(){return nA.map(e=>({...e}))}function a0(e){const t=String(e||"").trim().toLowerCase();return nA.find(r=>r.value===t)}function aA(){return t0.map(e=>({...e}))}const s0={categories:r0(),types:n0(),priorities:aA(),taxonomies:[],apiEndpoint:"/api/taskforce/task",apiBaseUrl:void 0,cloudAuthBaseUrl:void 0,cloudMcpBaseUrl:void 0,wsBaseUrl:void 0,position:"bottom-right",offsetY:70,theme:"dawn",shortcut:"Alt+T",manualComplexityEnabled:!1,checklistDropdownEnabled:!0,showTaskCardStatusLabel:!1},o0=["light","dawn","dark","midnight"],Dh="dawn",i0=[{id:"light",label:"Light",family:"light",icon:"sun"},{id:"dawn",label:"Dawn",family:"light",icon:"wind"},{id:"dark",label:"Dark",family:"dark",icon:"moon"},{id:"midnight",label:"Midnight",family:"dark",icon:"sparkles"}],c0=new Set(o0),l0=new Set(i0.filter(e=>e.family==="light").map(e=>e.id));function d0(e){return typeof e=="string"&&c0.has(e)}function hu(e){if(typeof e!="string")return null;const t=e.trim().toLowerCase();return d0(t)?t:null}function sA(e){const t=hu(e);return t!==null&&l0.has(t)}function Lh(e){const t=typeof e=="number"?e:Number(e);if(!Number.isFinite(t))return null;const r=Math.floor(t);return r>0?r:null}const u0=new RegExp("(?<![\\w-])((?:IN|WS|D|I)-\\d+)(?![\\w-])","gi"),p0={IN:"initiative",WS:"workstream",D:"document",I:"image"};function oA(e){const r=String(e||"").trim().toUpperCase().match(/^(IN|WS|D|I)-(\d+)$/);if(!r)return null;const a=Lh(r[2]);return a?{kind:p0[r[1]],token:`${r[1]}-${a}`,referenceNumber:a}:null}function Cu(e,t){const r=Lh(typeof t=="object"&&t!==null?t.referenceNumber:t);return r?`${e}${r}`:""}function pg(e,t){const r=String(e||"").trim(),a=String(t||"").trim();if(!r||!a)return null;const s=r.replace(/[.*+?^${}()|[\]\\]/g,"\\$&"),i=a.match(new RegExp(`^${s}(\\d+)$`,"i"));return i?Lh(i[1]):null}function Of(e,t){return t?typeof t.referenceLabel=="string"&&t.referenceLabel.trim().length>0?t.referenceLabel.trim():Cu(e,t.referenceNumber):""}const lv="T-",fk="LT-",f0=/^task-[0-9a-f]{8}(?:-[0-9a-f]{4}){3}-[0-9a-f]{12}$/i,m0=/^task-\d{10,}-[a-z0-9]+$/i,h0=new RegExp("(?<![\\w-])((?:LT|T)-\\d+|task-(?:[0-9a-f]{8}(?:-[0-9a-f]{4}){3}-[0-9a-f]{12}|\\d{10,}-[a-z0-9]+))(?![\\w-])","gi");function iA(e){const t=String(e||"").trim();return fg(t)!==null||lA(t)!==null||f0.test(t)||m0.test(t)}function g0(e,t){const r=String(t||"").trim();if(!r||!iA(r))return null;const a=r.toLowerCase(),s=fg(r),i=lA(r),l=e.filter(c=>c.id.toLowerCase()===a||s!==null&&c.referenceNumber===s||i!==null&&c.localReferenceNumber===i?!0:hs(c).toLowerCase()===a);return l.length===1?l[0].id:null}function y0(e){const t=new Map,r=(s,i)=>{const l=String(s||"").trim().toLowerCase();if(l){if(!t.has(l)){t.set(l,i);return}t.get(l)!==i&&t.set(l,null)}};return e.forEach(s=>{r(s.id,s.id),s.referenceNumber&&r(cA(s.referenceNumber),s.id),s.localReferenceNumber&&r(dv(s.localReferenceNumber),s.id),r(hs(s),s.id)}),{revision:JSON.stringify(Array.from(t.entries()).sort(([s],[i])=>s.localeCompare(i))),resolve:s=>{const i=String(s||"").trim();return!i||!iA(i)?null:t.get(i.toLowerCase())??null}}}function cA(e){return Cu(lv,e)}function dv(e){return typeof e=="number"||e===null||e===void 0?Cu(fk,e):Cu(fk,{referenceNumber:e.localReferenceNumber??null})}function fg(e){return pg(lv,e)}function lA(e){return pg(fk,e)}function hs(e){if(!e)return"";if(typeof e.referenceLabel=="string"&&e.referenceLabel.trim().length>0)return e.referenceLabel.trim();const t=Of(lv,e);return t||dv(e.localReferenceNumber)}function k0(e){return!e?.referenceNumber&&!!e?.localReferenceNumber}function uv(e){return{label:hs(e),isProvisional:k0(e)}}aA();const v0={low:1,medium:2,high:3,critical:4,"on-hold":1};function w0(e){const t=String(e||"").trim().toLowerCase();return t==="blocked"||t==="on hold"||t==="on-hold"?"on-hold":t==="task"||t==="on-hold"||t==="in-progress"||t==="review"||t==="done"||t==="cancelled"?t:"task"}function Oh(e){if(typeof e=="number"&&Number.isFinite(e))return Math.max(1,Math.round(e));const t=Number(e);return Number.isFinite(t)?Math.max(1,Math.round(t)):v0[String(e||"").trim().toLowerCase()]??2}function xo(e){const t=typeof e.referenceNumber=="number"?e.referenceNumber:Number.isFinite(Number(e.referenceNumber))?Number(e.referenceNumber):null,r=typeof e.localReferenceNumber=="number"?e.localReferenceNumber:Number.isFinite(Number(e.localReferenceNumber))?Number(e.localReferenceNumber):null;return{...e,referenceNumber:t&&t>0?Math.floor(t):null,localReferenceNumber:r&&r>0?Math.floor(r):null,referenceLabel:typeof e.referenceLabel=="string"&&e.referenceLabel.trim().length>0?e.referenceLabel.trim():t?cA(t):dv(r),assignee:(()=>{const a=String(e.assignee||"").trim(),s=a.toLowerCase();return s==="agent"||s==="ai"?"agent":!a||s==="user"||s==="human"||s==="unassigned"||s==="none"||s==="null"?"unassigned":a})(),category:typeof e.category=="string"?e.category:e.category?.value||"default",type:(typeof e.type=="string"?e.type:e.type?.label||"task").toLowerCase(),priority:Oh(e.priority),complexity:typeof e.complexity=="number"?e.complexity:3,status:w0(e.status)}}function _f(e){return JSON.stringify(e)}function Vw(e,t){if(e.length===0)return t.length===0?e:t;const r=new Map(e.map(i=>[i.id,i]));let a=e.length!==t.length;const s=t.map((i,l)=>{const c=r.get(i.id),d=c&&_f(c)===_f(i)?c:i;return d!==e[l]&&(a=!0),d});return a?s:e}function b0(e,t,r){if(!e||typeof e!="object")return{tasks:t,archivedTasks:r};const a=xo(e),s=String(a.id||"").trim();if(!s)return{tasks:t,archivedTasks:r};const i=!!a.isArchived,l=i?{...a,isArchived:!0}:{...a,isArchived:!1},c=(i?r:t).find(h=>h.id===s),d=(i?t:r).some(h=>h.id===s);if(c&&!d&&_f(c)===_f(l))return{tasks:t,archivedTasks:r};const f=h=>[...h].sort((y,k)=>{const v=Date.parse(String(y.updatedAt||y.createdAt||"")),C=Date.parse(String(k.updatedAt||k.createdAt||""));if(Number.isFinite(v)&&Number.isFinite(C)&&v!==C)return C-v;if(Number.isFinite(v)!==Number.isFinite(C))return Number.isFinite(C)?1:-1;const S=Date.parse(String(k.createdAt||""))-Date.parse(String(y.createdAt||""));return Number.isFinite(S)&&S!==0?S:String(y.id).localeCompare(String(k.id))}),p=t.some(h=>h.id===s)?t.filter(h=>h.id!==s):t,g=r.some(h=>h.id===s)?r.filter(h=>h.id!==s):r;return i?{tasks:p,archivedTasks:f([...g,l])}:{tasks:f([...p,l]),archivedTasks:g}}function S0(e,t){if(!t.length||!e.length)return[];const r=new Set(t.map(s=>Number(s.value))),a=Array.from(new Set(e.map(s=>Number(s)).filter(s=>Number.isFinite(s)&&r.has(s))));return a.length>0?a:t.map(s=>Number(s.value))}function Ey(e,t){return t.some(r=>String(r)===String(e))}function A0(e,t){if(!e.length||!t.length)return e;const r=new Set(t.map(s=>s.value)),a=Array.from(new Set(e.filter(s=>r.has(s))));return a.length>0?a:t.map(s=>s.value)}const C0={taskForm:{commentsSectionTitle:"Activity & Comments",noComments:"No comments yet. Start the conversation!",noActivity:"No activity yet.",you:"You",commentPlaceholder:"Type a comment...",newActivity:"New activity",newActivityAriaLabel:"New activity. Scroll to latest.",scheduledLabel:"Scheduled:",dueLabel:"Due:",createdLabel:"Created:",updatedLabel:"Updated:",completedLabel:"Completed:",emptyValue:"—",dueBeforeScheduled:"Due date is before scheduled date.",overdue:"This task is overdue."},schedule:{},taskList:{searchPlaceholder:"Search tasks...",clearSearchTitle:"Clear search",categoryLabel:"Category",typeLabel:"Type",priorityLabel:"Priority",statusLabel:"Status",assigneeLabel:"Assignee",sortByLabel:"Sort By:",sortCreated:"Created",sortUpdated:"Updated",sortPriority:"Priority",sortDirectionDescTitle:"Sort: Last First",sortDirectionAscTitle:"Sort: First First",resetFiltersTitle:"Reset all filters",archiveAllTitle:"Archive all completed and cancelled tasks",noTasksToArchiveTitle:"No tasks to archive",archiveFinished:"Archive Finished",linksLabel:"Links",linksAll:"All",linksParents:"Parents",linksLinked:"Linked",linksUnlinked:"Unlinked",includeArchive:"Archived",noMatchingTasks:"No matching tasks",noActiveTasks:"No active tasks",addTaskToCategoryTitle:"Add task to {category}"},actionHeader:{saveChangesTitle:"Save Changes",update:"Update",copyTaskIdTitle:"Click to copy Task ID",startWorking:"Start Working",stopWorking:"Stop Working",unlockAndContinue:"Unlock & Continue Work",readyForReview:"Ready for Review",markComplete:"Mark Complete",unmarkComplete:"Unmark Complete",cancelTask:"Cancel Task",unmarkCancelled:"Unmark Cancelled",archiveNow:"Archive Now",completeTaskToArchive:"Complete task to archive",clearFormTitle:"Clear Form",clear:"Clear",addTaskTitle:"Add Task",addTask:"Add Task"},standalone:{searchPlaceholder:"Search tasks...",clearSearchTitle:"Clear search",sortLabel:"Sort:",sortCreated:"Created",sortUpdated:"Updated",sortPriority:"Priority",sortComplexity:"Complexity",sortDirectionDescTitle:"Sort: Last First",sortDirectionAscTitle:"Sort: First First",groupLabel:"Group:",groupCategory:"Category",groupType:"Type",groupPriority:"Priority",groupComplexity:"Complexity",groupAssignee:"Assignee",groupStatus:"Status",groupHierarchy:"Hierarchy",groupSchedule:"Schedule",showEmptyColumns:"Show Empty Columns",compressEmptyColumns:"Compress Empty Columns",hideEmptyColumns:"Hide Empty Columns",expandCards:"Expand Cards",compressCards:"Compress Cards",exitZenMode:"Exit Zen Mode",enterZenMode:"Enter Zen Mode",toggleFilters:"Toggle Filters",addTask:"Add Task",helpTutorial:"Help & Support",settings:"Settings",filtersCaps:"FILTERS:",categoryLabel:"Category",typeLabel:"Type",priorityLabel:"Priority",statusLabel:"Status",assigneeLabel:"Assignee",linksLabel:"Links:",chooseLinksTitle:"Choose which linked tasks are shown",linksAll:"All",linksParents:"Parents",linksLinked:"Linked",linksUnlinked:"Unlinked",includeArchiveTitle:"Include archived tasks",includeArchive:"Archived",clearFilters:"Clear Filters",noTasksMatchFilters:"No tasks match current filters.",showingWithLinksHint:"Showing: {parentFilterLabel}. Switch Links to All or clear filters.",visibleActiveTasksTitle:"Visible active tasks / total active tasks",totalActiveTasksTitle:"Total active tasks"},setup:{headingCheckFailed:"Setup Check Failed",headingGlobalRequired:"Global Setup Required",headingWorkspaceRequired:"Configure your new workspace.",subtitleUnreadable:"Taskforce could not read setup state. Retry to continue.",subtitleGlobalRequired:"Choose your default operating mode to continue.",subtitleWorkspaceRequired:"",runtimeLabel:"Runtime",workspaceTermProject:"Project",workspaceTermMission:"Mission",coreModeOption:"Core Mode: {workspaceLabel} planning defaults",operationsModeOption:"Operations Mode: Mission-first terminology and flows",workspaceNamePlaceholder:"{workspaceLabel} name",workspaceDescriptionPlaceholder:"{workspaceLabel} description (optional)",saving:"Saving...",saveGlobalSetup:"Save Global Setup",saveWorkspaceSetup:"Save {workspaceLabel} Setup",globalSetupSaved:"Global setup saved.",workspaceSetupSaved:"{workspaceLabel} setup saved.",saveFailedWithStatus:"Failed to save setup ({status})",saveFailed:"Failed to save setup.",saveWorkspaceFailed:"Failed to save workspace profile.",retrySetupCheck:"Retry Setup Check",signOut:"Sign Out"}},_0={taskForm:{commentsSectionTitle:"Actividad y comentarios",noComments:"Aun no hay comentarios. Inicia la conversacion.",noActivity:"Aun no hay actividad.",you:"Tu",commentPlaceholder:"Escribe un comentario...",newActivity:"Nueva actividad",newActivityAriaLabel:"Nueva actividad. Ir a la mas reciente.",scheduledLabel:"Programado:",dueLabel:"Vence:",createdLabel:"Creado:",updatedLabel:"Actualizado:",completedLabel:"Completado:",emptyValue:"—",dueBeforeScheduled:"La fecha de vencimiento es anterior a la fecha programada.",overdue:"Esta tarea esta vencida."},schedule:{},taskList:{searchPlaceholder:"Buscar tareas...",clearSearchTitle:"Limpiar busqueda",categoryLabel:"Categoria",typeLabel:"Tipo",priorityLabel:"Prioridad",statusLabel:"Estado",assigneeLabel:"Asignado a",sortByLabel:"Ordenar por:",sortCreated:"Creado",sortUpdated:"Actualizado",sortPriority:"Prioridad",sortDirectionDescTitle:"Orden: mas reciente primero",sortDirectionAscTitle:"Orden: mas antiguo primero",resetFiltersTitle:"Restablecer todos los filtros",archiveAllTitle:"Archivar todas las tareas completadas y canceladas",noTasksToArchiveTitle:"No hay tareas para archivar",archiveFinished:"Archivar finalizadas",linksLabel:"Vinculos",linksAll:"Todas",linksParents:"Padres",linksLinked:"Vinculadas",linksUnlinked:"Sin vinculo",includeArchive:"Incluir archivo",noMatchingTasks:"No hay tareas coincidentes",noActiveTasks:"No hay tareas activas",addTaskToCategoryTitle:"Agregar tarea a {category}"},actionHeader:{saveChangesTitle:"Guardar cambios",update:"Actualizar",copyTaskIdTitle:"Haz clic para copiar el ID de la tarea",startWorking:"Comenzar trabajo",stopWorking:"Detener trabajo",unlockAndContinue:"Desbloquear y continuar",readyForReview:"Lista para revision",markComplete:"Marcar como completada",unmarkComplete:"Quitar completada",cancelTask:"Cancelar tarea",unmarkCancelled:"Quitar cancelada",archiveNow:"Archivar ahora",completeTaskToArchive:"Completa la tarea para archivar",clearFormTitle:"Limpiar formulario",clear:"Limpiar",addTaskTitle:"Agregar tarea",addTask:"Agregar tarea"},standalone:{searchPlaceholder:"Buscar tareas...",clearSearchTitle:"Limpiar busqueda",sortLabel:"Orden:",sortCreated:"Creado",sortUpdated:"Actualizado",sortPriority:"Prioridad",sortComplexity:"Complejidad",sortDirectionDescTitle:"Orden: mas reciente primero",sortDirectionAscTitle:"Orden: mas antiguo primero",groupLabel:"Agrupar:",groupCategory:"Categoria",groupType:"Tipo",groupPriority:"Prioridad",groupComplexity:"Complejidad",groupAssignee:"Asignado a",groupStatus:"Estado",groupHierarchy:"Jerarquia",groupSchedule:"Calendario",showEmptyColumns:"Mostrar columnas vacias",compressEmptyColumns:"Comprimir columnas vacias",hideEmptyColumns:"Ocultar columnas vacias",expandCards:"Expandir tarjetas",compressCards:"Comprimir tarjetas",exitZenMode:"Salir del modo zen",enterZenMode:"Entrar en modo zen",toggleFilters:"Alternar filtros",addTask:"Agregar tarea",helpTutorial:"Ayuda y soporte",settings:"Configuracion",filtersCaps:"FILTROS:",categoryLabel:"Categoria",typeLabel:"Tipo",priorityLabel:"Prioridad",statusLabel:"Estado",assigneeLabel:"Asignado a",linksLabel:"Vinculos:",chooseLinksTitle:"Elige que tareas vinculadas se muestran",linksAll:"Todas",linksParents:"Padres",linksLinked:"Vinculadas",linksUnlinked:"Sin vinculo",includeArchiveTitle:"Incluir tareas archivadas",includeArchive:"Incluir archivo",clearFilters:"Limpiar filtros",noTasksMatchFilters:"Ninguna tarea coincide con los filtros actuales.",showingWithLinksHint:"Mostrando: {parentFilterLabel}. Cambia Vinculos a Todas o limpia filtros.",visibleActiveTasksTitle:"Tareas activas visibles / total de tareas activas",totalActiveTasksTitle:"Total de tareas activas"},setup:{headingCheckFailed:"Fallo en verificacion de configuracion",headingGlobalRequired:"Configuracion global requerida",headingWorkspaceRequired:"Configuracion del espacio requerida",subtitleUnreadable:"Taskforce no pudo leer el estado de configuracion. Reintenta para continuar.",subtitleGlobalRequired:"Elige tu modo operativo predeterminado para continuar.",subtitleWorkspaceRequired:"Configura el perfil de tu espacio para continuar.",runtimeLabel:"Entorno",workspaceTermProject:"Proyecto",workspaceTermMission:"Mision",coreModeOption:"Modo Core: valores predeterminados de planificacion para {workspaceLabel}",operationsModeOption:"Modo Operaciones: terminologia y flujos orientados a Mision",workspaceNamePlaceholder:"Nombre de {workspaceLabel}",workspaceDescriptionPlaceholder:"Descripcion de {workspaceLabel} (opcional)",saving:"Guardando...",saveGlobalSetup:"Guardar configuracion global",saveWorkspaceSetup:"Guardar configuracion de {workspaceLabel}",globalSetupSaved:"Configuracion global guardada.",workspaceSetupSaved:"Configuracion de {workspaceLabel} guardada.",saveFailedWithStatus:"Error al guardar la configuracion ({status})",saveFailed:"Error al guardar la configuracion.",saveWorkspaceFailed:"Error al guardar el perfil del espacio.",retrySetupCheck:"Reintentar verificacion",signOut:"Cerrar sesion"}},I0={taskForm:{commentsSectionTitle:"Atividade e comentarios",noComments:"Ainda nao ha comentarios. Inicie a conversa.",noActivity:"Ainda nao ha atividade.",you:"Voce",commentPlaceholder:"Digite um comentario...",newActivity:"Nova atividade",newActivityAriaLabel:"Nova atividade. Ir para a mais recente.",scheduledLabel:"Agendado:",dueLabel:"Vencimento:",createdLabel:"Criado:",updatedLabel:"Atualizado:",completedLabel:"Concluido:",emptyValue:"—",dueBeforeScheduled:"A data de vencimento e anterior a data agendada.",overdue:"Esta tarefa esta atrasada."},schedule:{},taskList:{searchPlaceholder:"Buscar tarefas...",clearSearchTitle:"Limpar busca",categoryLabel:"Categoria",typeLabel:"Tipo",priorityLabel:"Prioridade",statusLabel:"Status",assigneeLabel:"Atribuido para",sortByLabel:"Ordenar por:",sortCreated:"Criado",sortUpdated:"Atualizado",sortPriority:"Prioridade",sortDirectionDescTitle:"Ordem: mais recente primeiro",sortDirectionAscTitle:"Ordem: mais antigo primeiro",resetFiltersTitle:"Redefinir todos os filtros",archiveAllTitle:"Arquivar todas as tarefas concluidas e canceladas",noTasksToArchiveTitle:"Nao ha tarefas para arquivar",archiveFinished:"Arquivar finalizadas",linksLabel:"Vinculos",linksAll:"Todas",linksParents:"Pais",linksLinked:"Vinculadas",linksUnlinked:"Sem vinculo",includeArchive:"Incluir arquivo",noMatchingTasks:"Nenhuma tarefa correspondente",noActiveTasks:"Nenhuma tarefa ativa",addTaskToCategoryTitle:"Adicionar tarefa a {category}"},actionHeader:{saveChangesTitle:"Salvar alteracoes",update:"Atualizar",copyTaskIdTitle:"Clique para copiar o ID da tarefa",startWorking:"Iniciar trabalho",stopWorking:"Parar trabalho",unlockAndContinue:"Desbloquear e continuar",readyForReview:"Pronto para revisao",markComplete:"Marcar como concluida",unmarkComplete:"Desmarcar concluida",cancelTask:"Cancelar tarefa",unmarkCancelled:"Desmarcar cancelada",archiveNow:"Arquivar agora",completeTaskToArchive:"Conclua a tarefa para arquivar",clearFormTitle:"Limpar formulario",clear:"Limpar",addTaskTitle:"Adicionar tarefa",addTask:"Adicionar tarefa"},standalone:{searchPlaceholder:"Buscar tarefas...",clearSearchTitle:"Limpar busca",sortLabel:"Ordenar:",sortCreated:"Criado",sortUpdated:"Atualizado",sortPriority:"Prioridade",sortComplexity:"Complexidade",sortDirectionDescTitle:"Ordem: mais recente primeiro",sortDirectionAscTitle:"Ordem: mais antigo primeiro",groupLabel:"Agrupar:",groupCategory:"Categoria",groupType:"Tipo",groupPriority:"Prioridade",groupComplexity:"Complexidade",groupAssignee:"Atribuido para",groupStatus:"Status",groupHierarchy:"Hierarquia",groupSchedule:"Agenda",showEmptyColumns:"Mostrar colunas vazias",compressEmptyColumns:"Comprimir colunas vazias",hideEmptyColumns:"Ocultar colunas vazias",expandCards:"Expandir cards",compressCards:"Comprimir cards",exitZenMode:"Sair do modo zen",enterZenMode:"Entrar no modo zen",toggleFilters:"Alternar filtros",addTask:"Adicionar tarefa",helpTutorial:"Ajuda e suporte",settings:"Configuracoes",filtersCaps:"FILTROS:",categoryLabel:"Categoria",typeLabel:"Tipo",priorityLabel:"Prioridade",statusLabel:"Status",assigneeLabel:"Atribuido para",linksLabel:"Vinculos:",chooseLinksTitle:"Escolha quais tarefas vinculadas sao exibidas",linksAll:"Todas",linksParents:"Pais",linksLinked:"Vinculadas",linksUnlinked:"Sem vinculo",includeArchiveTitle:"Incluir tarefas arquivadas",includeArchive:"Incluir arquivo",clearFilters:"Limpar filtros",noTasksMatchFilters:"Nenhuma tarefa corresponde aos filtros atuais.",showingWithLinksHint:"Mostrando: {parentFilterLabel}. Mude Vinculos para Todas ou limpe os filtros.",visibleActiveTasksTitle:"Tarefas ativas visiveis / total de tarefas ativas",totalActiveTasksTitle:"Total de tarefas ativas"},setup:{headingCheckFailed:"Falha na verificacao da configuracao",headingGlobalRequired:"Configuracao global obrigatoria",headingWorkspaceRequired:"Configuracao do espaco obrigatoria",subtitleUnreadable:"Taskforce nao conseguiu ler o estado da configuracao. Tente novamente para continuar.",subtitleGlobalRequired:"Escolha seu modo operacional padrao para continuar.",subtitleWorkspaceRequired:"Configure o perfil do seu espaco para continuar.",runtimeLabel:"Ambiente",workspaceTermProject:"Projeto",workspaceTermMission:"Missao",coreModeOption:"Modo Core: padroes de planejamento para {workspaceLabel}",operationsModeOption:"Modo Operacoes: terminologia e fluxos orientados por Missao",workspaceNamePlaceholder:"Nome de {workspaceLabel}",workspaceDescriptionPlaceholder:"Descricao de {workspaceLabel} (opcional)",saving:"Salvando...",saveGlobalSetup:"Salvar configuracao global",saveWorkspaceSetup:"Salvar configuracao de {workspaceLabel}",globalSetupSaved:"Configuracao global salva.",workspaceSetupSaved:"Configuracao de {workspaceLabel} salva.",saveFailedWithStatus:"Falha ao salvar configuracao ({status})",saveFailed:"Falha ao salvar configuracao.",saveWorkspaceFailed:"Falha ao salvar perfil do espaco.",retrySetupCheck:"Tentar verificacao novamente",signOut:"Sair"}},dA=["en-US","es-419","pt-BR"],Bh="en-US",Ny={"en-US":C0,"es-419":_0,"pt-BR":I0},uA={en:"en-US",es:"es-419",pt:"pt-BR"};let ed=Bh;function T0(e){return e.split(".").filter(Boolean)}function jy(e,t){let r=e;for(const a of t){if(!r||typeof r!="object")return;r=r[a]}return typeof r=="string"?r:void 0}function pA(e){if(!e)return Bh;const t=dA.find(a=>a.toLowerCase()===e.toLowerCase());if(t)return t;const r=e.split("-")[0]?.toLowerCase()||"";return uA[r]||Bh}function My(e,t){return t?e.replace(/\{([^}]+)\}/g,(r,a)=>{const s=t[a];return s==null?"":String(s)}):e}function fA(){return ed}function x0(){return[...dA]}function mA(e){const t=pA(e);return ed=t,t}function R0(e){const t=typeof navigator<"u"?navigator.language:null;return ed=pA(t),ed}function _t(e,t){const r=T0(e),a=jy(Ny[ed],r);if(a)return My(a,t);const s=ed.split("-")[0]?.toLowerCase()||"",i=uA[s];if(i&&i!==ed){const c=jy(Ny[i],r);if(c)return My(c,t)}const l=jy(Ny[Bh],r);return l?My(l,t):e}const P0="default",id="bootstrap";function E0(e){let t=2166136261;for(let r=0;r<e.length;r+=1)t^=e.charCodeAt(r),t=Math.imul(t,16777619);return(t>>>0).toString(16).padStart(8,"0")}function mg(e){const t=String(e||"").trim().toLowerCase();return t?`${(t.replace(/[^a-z0-9._-]/g,"-").replace(/-+/g,"-").replace(/^-+|-+$/g,"")||"project").slice(0,56)}-${E0(t)}`:id}function pv(e){const t=String(e||"").trim().toLowerCase();if(!t)return id;const r=t.replace(/[^a-z0-9._-]/g,"-").replace(/-+/g,"-").replace(/^-+|-+$/g,"");return r?r.slice(0,96):id}function hA(e){const t=String(e||"").trim();return t?mg(t):id}function N0(e){return(e.runtimeMode==="cloud"?"cloud":"local")==="cloud"?id:hA(e.projectRoot)}function j0(e){if((e.runtimeMode==="cloud"?"cloud":"local")==="cloud"){const r=String(e.workspaceId||"").trim();return r&&!fv(r)?mg(`cloud-workspace:${r}`):id}return hA(e.projectRoot)}function fv(e){return String(e||"").trim().toLowerCase()===P0}const M0={local:{runtimeMode:"local",authSource:"cloud",workspaceMode:"single-local",workspaceSwitchingEnabled:!1},cloud:{runtimeMode:"cloud",authSource:"cloud",workspaceMode:"multi-cloud",workspaceSwitchingEnabled:!0}};function D0(e){return String(e||"").trim().toLowerCase()==="cloud"?"cloud":"local"}function L0(e){return M0[D0(e)]}const If={production:{appBaseUrl:"https://app.taskforcehq.ai",mcpBaseUrl:"https://mcp.taskforcehq.ai",label:"Production",themeToken:"production"},staging:{appBaseUrl:"https://staging-app.taskforcehq.ai",mcpBaseUrl:"https://staging-mcp.taskforcehq.ai",label:"Staging",themeToken:"staging"},performance:{appBaseUrl:"https://performance-app.taskforcehq.ai",mcpBaseUrl:"https://performance-mcp.taskforcehq.ai",label:"Performance",themeToken:"performance"}};function hg(e){const t=String(e||"").trim().toLowerCase();return t==="production"||t==="staging"||t==="performance"?t:null}function O0(e){return hg(e)||"production"}function Gw(e){return If[O0(String(e||""))]}function B0(e){const t=String(e||"").trim().toLowerCase();if(!t)return null;for(const[r,a]of Object.entries(If))if(new URL(a.appBaseUrl).hostname.toLowerCase()===t||new URL(a.mcpBaseUrl).hostname.toLowerCase()===t)return r;return null}function mv(e){const t=String(e||"").trim();if(!t)return null;try{return B0(new URL(t).hostname)}catch{return null}}function W0(e){const t=mv(e);return t?If[t].mcpBaseUrl:null}function Wl(e,t){return String(e[t]||"").trim()}function Kw(e,t,r){e.push(t),r?.(t)}function $0(e,t){const r=[],a=Wl(e,"ENV"),s=hg(a);if(s)return Kw(r,`[Taskforce compat] ENV=${a} is deprecated; set TASKFORCE_CLOUD_ENVIRONMENT=${s} instead.`,t),{cloudEnvironment:s,warnings:r};const i=[{key:"TASKFORCE_CLOUD_PROXY_BASE_URL",value:Wl(e,"TASKFORCE_CLOUD_PROXY_BASE_URL")},{key:"VITE_TASKFORCE_CLOUD_AUTH_BASE_URL",value:Wl(e,"VITE_TASKFORCE_CLOUD_AUTH_BASE_URL")},{key:"VITE_TASKFORCE_CLOUD_MCP_BASE_URL",value:Wl(e,"VITE_TASKFORCE_CLOUD_MCP_BASE_URL")},{key:"VITE_TASKFORCE_API_BASE_URL",value:Wl(e,"VITE_TASKFORCE_API_BASE_URL")},{key:"VITE_TASKFORCE_BASE_URL",value:Wl(e,"VITE_TASKFORCE_BASE_URL")},{key:"TASKFORCE_BASE_URL",value:Wl(e,"TASKFORCE_BASE_URL")}];for(const l of i){if(!l.value)continue;const c=mv(l.value);if(c)return Kw(r,`[Taskforce compat] ${l.key} is being used to infer TASKFORCE_CLOUD_ENVIRONMENT=${c}. Set TASKFORCE_CLOUD_ENVIRONMENT explicitly.`,t),{cloudEnvironment:c,warnings:r}}return{cloudEnvironment:null,warnings:r}}function Mi(e,t){return String(e[t]||"").trim()}function F0(e){return e.toLowerCase()==="cloud"?"cloud":"local"}function su(e){return String(e||"").trim().replace(/\/+$/,"")}function U0(e){return String(e||"").trim().replace(/\/+$/,"")}function uc(...e){for(const t of e)if(String(t||"").trim())return String(t||"").trim();return""}function z0(e,t={}){const r=[],a=b=>{r.push(b),t.onWarning?.(b)},s=F0(Mi(e,"TASKFORCE_RUNTIME_MODE")),i=hg(Mi(e,"TASKFORCE_CLOUD_ENVIRONMENT")),l=i?{cloudEnvironment:i}:$0(e,a),c=i||l.cloudEnvironment,d=su(String(t.requestBaseUrl||"")),f=su(uc(Mi(e,"VITE_TASKFORCE_BASE_URL"),Mi(e,"TASKFORCE_BASE_URL"))),p=su(Mi(e,"VITE_TASKFORCE_API_BASE_URL")),g=su(Mi(e,"VITE_TASKFORCE_CLOUD_AUTH_BASE_URL")),h=su(uc(Mi(e,"VITE_TASKFORCE_CLOUD_MCP_BASE_URL"),Mi(e,"TASKFORCE_CLOUD_MCP_BASE_URL"))),y=su(Mi(e,"TASKFORCE_CLOUD_PROXY_BASE_URL")),k=U0(Mi(e,"VITE_TASKFORCE_WS_BASE_URL")),v=c?If[c].appBaseUrl:"",C=c?If[c].mcpBaseUrl:"",S=uc(y,g,p,f,v),w=uc(h,C,S),_=uc(d,f,p,g,S),M=uc(d,p,f,S),R=uc(g,f,p,S),P=s==="local"?uc(k,d,p,f,y,g,v,S):uc(d,k,M,_,S);return{runtimeMode:s,cloudEnvironment:c,cloudBaseUrl:S,cloudMcpBaseUrl:w,baseUrl:_,apiBaseUrl:M,cloudAuthBaseUrl:R,wsBaseUrl:P,cloudAuthViaLocalProxy:s==="local"||!!y,warnings:r}}function hv(e){return z0({TASKFORCE_CLOUD_ENVIRONMENT:"",VITE_TASKFORCE_BASE_URL:e.VITE_TASKFORCE_BASE_URL,VITE_TASKFORCE_API_BASE_URL:e.VITE_TASKFORCE_API_BASE_URL,VITE_TASKFORCE_CLOUD_AUTH_BASE_URL:e.VITE_TASKFORCE_CLOUD_AUTH_BASE_URL,VITE_TASKFORCE_CLOUD_MCP_BASE_URL:e.VITE_TASKFORCE_CLOUD_MCP_BASE_URL,VITE_TASKFORCE_WS_BASE_URL:e.VITE_TASKFORCE_WS_BASE_URL})}function qw(e){const t=String(e.workspaceId||"default").trim().replace(/[^A-Za-z0-9_-]+/g,"-").replace(/^-+|-+$/g,"")||"default",r=Number.isFinite(Number(e.epoch))?Math.max(0,Math.floor(Number(e.epoch))):0,a=String(e.seed||"session").trim().replace(/[^A-Za-z0-9_-]+/g,"-").replace(/^-+|-+$/g,"")||"session",s=String(e.phase||"bootstrap").trim().replace(/[^A-Za-z0-9_-]+/g,"-").replace(/^-+|-+$/g,"")||"bootstrap";return`tfb-${a}-${t}-e${r}-${s}`}function Dy(e,t){const r=String(t||"").trim();if(!r)return e;const a=new Headers(e?.headers||void 0);return a.has("x-taskforce-bootstrap-trace-id")||a.set("x-taskforce-bootstrap-trace-id",r),{...e||{},headers:a}}function H0(e){const t=String(e.activeWorkspaceId||"").trim();return{email:e.email,password:e.password,...t&&t!=="default"?{workspaceId:t}:{}}}const Wh="unassigned",gA="agent",Bf="UserRound",gg="color-mix(in srgb, var(--text-helper) 68%, transparent)",V0="user",G0=/^[0-9a-f]{8,}$/i,td={value:Wh,label:"Unassigned",icon:Bf,color:gg,kind:"unassigned"};function yA(e){const t=String(e||"").trim().toLowerCase();return t===gA||t==="ai"||t.startsWith("ai-profile-")}function gv(e){const t=String(e||"").trim().toLowerCase();return!t||t===Wh||t==="none"||t==="null"||t===V0}function mk(e){return yA(e)?"agent":gv(e)?"unassigned":"member"}function K0(e){const t=String(e.displayName||"").trim(),r=String(e.email||"").trim().toLowerCase();return t||r||String(e.userId||"").trim()||"Workspace member"}function el(){return[{...td}]}function q0(e){const t=new Map;for(const r of e){const a=String(r.userId||"").trim();a&&t.set(a,{value:a,label:K0(r),icon:"User",color:"#22c55e",kind:"member",avatarUrl:typeof r.avatarUrl=="string"&&r.avatarUrl.trim().length>0?r.avatarUrl.trim():null})}return _u(Array.from(t.values()))}function _u(e){const t=new Map;for(const a of el())t.set(a.value,a);for(const a of Array.isArray(e)?e:[]){const s=String(a?.value||"").trim(),i=typeof a?.archivedAt=="string"?a.archivedAt.trim():"";!s||i||s===Wh||s===gA||t.set(s,{value:s,label:String(a.label||s).trim()||s,icon:String(a.icon||(a.kind==="agent"?"Bot":"User")),color:String(a.color||(a.kind==="agent"?"#8b5cf6":"#22c55e")),kind:a.kind==="agent"?"agent":"member",avatarUrl:typeof a.avatarUrl=="string"&&a.avatarUrl.trim().length>0?a.avatarUrl.trim():null,avatarRevision:Number.isFinite(Number(a.avatarRevision))?Math.max(0,Math.floor(Number(a.avatarRevision))):null,avatarUpdatedAt:typeof a.avatarUpdatedAt=="string"&&a.avatarUpdatedAt.trim().length>0?a.avatarUpdatedAt.trim():null,username:typeof a.username=="string"&&a.username.trim().length>0?a.username.trim():null,surfaceType:typeof a.surfaceType=="string"&&a.surfaceType.trim().length>0?a.surfaceType.trim():null,providerMetadata:a.providerMetadata&&typeof a.providerMetadata=="object"&&!Array.isArray(a.providerMetadata)?a.providerMetadata:null,archivedAt:null,createdAt:typeof a.createdAt=="string"&&a.createdAt.trim().length>0?a.createdAt.trim():null,updatedAt:typeof a.updatedAt=="string"&&a.updatedAt.trim().length>0?a.updatedAt.trim():null})}const r=[Wh];return Array.from(t.values()).sort((a,s)=>{const i=r.indexOf(a.value),l=r.indexOf(s.value);return i>=0||l>=0?i<0?1:l<0?-1:i-l:a.label.localeCompare(s.label,void 0,{sensitivity:"base"})})}function kA(e,t){const r=String(t||"").trim();if(!r||e.some(i=>i.value===r))return e;const a=r.replace(/^ai-profile-/i,"").replace(/[-_]+/g," ").replace(/\s+/g," ").trim(),s=a?a.split(" ").map(i=>i.charAt(0).toUpperCase()+i.slice(1)).join(" "):r;if(mk(r)==="agent"){const i=String(r).toLowerCase().startsWith("ai-profile-")&&a.split(" ").every(l=>G0.test(l));return _u([...e,{value:r,label:i?"AI":s||"AI",icon:"Bot",color:"#8b5cf6",kind:"agent"}])}return mk(r)==="member"?_u([...e,{value:r,label:s||r,icon:"User",color:"#22c55e",kind:"member"}]):e}function vA(e){const t=Array.isArray(e)?e.filter(Boolean):[];return _u(t)}function Tf(e,t){const r=String(e||"").trim(),s=vA(t).find(i=>i.value===r);return s?s.label:yA(r)?"AI":gv(r)?"Unassigned":r||"Unassigned"}const hk=1,wA="taskforce.workspaceContext.v2",Y0="taskforce.uiState.app.v1",Z0="taskforce.bootstrapDebug.v1",Yw=5e3,Um=new Map;function zm(e){return Array.from(new Set(e.map(t=>String(t??"").trim()).filter(t=>t.length>0))).sort()}function Iu(e){return!!(e&&typeof e=="object"&&!Array.isArray(e))}function Zl(e){if(Array.isArray(e))return Array.from(new Set(e.filter(t=>typeof t=="string").map(t=>t.trim()).filter(Boolean)))}function gk(e){if(Array.isArray(e))return Array.from(new Set(e.filter(t=>typeof t=="string"&&t.trim().length>0||typeof t=="number")))}function J0(e){if(!Iu(e))return;const t={};return Object.entries(e).forEach(([r,a])=>{const s=String(r||"").trim(),i=gk(a);!s||!i||(t[s]=i)}),t}function Q0(e){if(!Iu(e))return;const t={};return Object.entries(e).forEach(([r,a])=>{const s=String(r||"").trim();!s||typeof a!="boolean"||(t[s]=a)}),t}function X0(e){if(!Iu(e))return;const t={};return Object.entries(e).forEach(([r,a])=>{const s=String(r||"").trim();if(!s||typeof a!="string")return;const i=a.trim();i&&(t[s]=i)}),t}function ex(e){if(!Iu(e))return;const t=Zl(e.categories),r=Zl(e.types),a=Zl(e.priorities);if(!t||!r||!a)return;const s={};return Iu(e.taxonomies)&&Object.entries(e.taxonomies).forEach(([i,l])=>{const c=String(i||"").trim(),d=Zl(l);!c||!d||(s[c]=d)}),{categories:t,types:r,priorities:a,taxonomies:s}}function bA(e){if(!Iu(e))return null;const t={version:hk},r=["category","type","priority","assignee","status","complexity","schedule","docs"];e.groupBy==="approach"&&(t.groupBy="status"),typeof e.groupBy=="string"&&r.includes(e.groupBy)&&(t.groupBy=e.groupBy);const a=e.activeWorkspaceModule==="agents"?"aiProfiles":e.activeWorkspaceModule==="workflows"?"tasks":e.activeWorkspaceModule;typeof a=="string"&&["tasks","planning","docs","annotate","workflowManager","taskforceAgents","aiProfiles"].includes(a)&&(t.activeWorkspaceModule=a),(e.emptyColumnMode==="show"||e.emptyColumnMode==="collapse"||e.emptyColumnMode==="hide")&&(t.emptyColumnMode=e.emptyColumnMode),(e.taskScope==="open"||e.taskScope==="archived"||e.taskScope==="deleted")&&(t.taskScope=e.taskScope),typeof e.openTaskId=="string"?t.openTaskId=e.openTaskId.trim()||null:e.openTaskId===null&&(t.openTaskId=null),typeof e.compressedCards=="boolean"&&(t.compressedCards=e.compressedCards),typeof e.zenMode=="boolean"&&(t.zenMode=e.zenMode),typeof e.searchQuery=="string"&&(t.searchQuery=e.searchQuery);const i=Q0(e.collapsedCategories);i&&(t.collapsedCategories=i);const l=Zl(e.filterCategories);l&&(t.filterCategories=l);const c=gk(e.filterPriorities);c&&(t.filterPriorities=c);const d=Zl(e.filterTypes);d&&(t.filterTypes=d);const f=gk(e.filterStatus);f&&(t.filterStatus=f);const p=Zl(e.filterAssignees);p&&(t.filterAssignees=p),typeof e.filterAssigneesAllSelected=="boolean"&&(t.filterAssigneesAllSelected=e.filterAssigneesAllSelected);const g=J0(e.filterTaxonomies);g&&(t.filterTaxonomies=g);const h=ex(e.filterTaxonomySignature);if(h&&(t.filterTaxonomySignature=h),(e.sortBy==="created"||e.sortBy==="priority"||e.sortBy==="updated"||e.sortBy==="complexity")&&(t.sortBy=e.sortBy),(e.sortOrder==="asc"||e.sortOrder==="desc")&&(t.sortOrder=e.sortOrder),typeof e.hasInitedFilters=="boolean"&&(t.hasInitedFilters=e.hasInitedFilters),typeof e.lastCategory=="string"&&(t.lastCategory=e.lastCategory),typeof e.taskforceAgentId=="string"){const k=e.taskforceAgentId.trim();k&&(t.taskforceAgentId=k)}if(typeof e.taskforceAgentConversationId=="string"){const k=e.taskforceAgentConversationId.trim();k&&(t.taskforceAgentConversationId=k)}const y=X0(e.taskforceAgentConversationByAgentId);return y&&Object.keys(y).length>0&&(t.taskforceAgentConversationByAgentId=y),t}function tx(e){const t=zm(e.categories.map(i=>i.value)),r=zm(e.types.map(i=>i.value)),a=zm(e.priorities.map(i=>i.value));if(t.length===0||r.length===0||a.length===0)return null;const s={};return(e.taxonomies||[]).forEach(i=>{const l=String(i.id??"").trim();l&&(s[l]=zm((i.options||[]).map(c=>c.value)))}),{categories:t,types:r,priorities:a,taxonomies:s}}function zp(e,t){return e.length===t.length&&e.every((r,a)=>r===t[a])}function rx(e,t){if(!e||!t||!zp(e.categories||[],t.categories||[])||!zp(e.types||[],t.types||[])||!zp(e.priorities||[],t.priorities||[]))return!1;const r=Object.keys(e.taxonomies||{}).sort(),a=Object.keys(t.taxonomies||{}).sort();return zp(r,a)?r.every(s=>zp(e.taxonomies[s]||[],t.taxonomies[s]||[])):!1}function nx(){if(typeof window>"u")return!1;try{const e=String(window.localStorage.getItem(Z0)||"").trim().toLowerCase();return e==="1"||e==="true"||e==="on"||e==="yes"}catch{return!1}}function hr(e,t){if(!nx())return;console.info("[Taskforce Bootstrap]",e,t&&typeof t=="object"?t:{})}function ax(e,t,r,a=!1){const s=String(e).trim()||"default",i=String(t).trim()||"default",l=String(r||"default").trim()||"default";return`${a?"cloud":"same-origin"}::${i}::${s}::${l}`}async function ff(e){const t=String(e.stateKey||"default").trim()||"default",r=String(e.workspaceId||"").trim(),a=e.patch&&typeof e.patch=="object"?e.patch:{},s=JSON.stringify(a),i=ax(t,r||"default",e.dedupeScope,e.useCloudProxy),l=Date.now(),c=Um.get(i);if(c&&c.serializedPatch===s){if(c.status==="success"&&e.skipIfUnchanged!==!1)return hr("ui_state_persist_skipped",{stateKey:t,workspaceId:r||"default",reason:"unchanged"}),{skipped:!0,reason:"unchanged"};if(e.respectFailureCooldown!==!1&&c.retryAfter>l)return hr("ui_state_persist_skipped",{stateKey:t,workspaceId:r||"default",reason:"cooldown",retryAfterMs:c.retryAfter-l}),{skipped:!0,reason:"cooldown"}}try{const d=await fetch(`/api/taskforce/ui-state${e.useCloudProxy?"?taskforceCloud=1":""}`,{method:"POST",headers:{"Content-Type":"application/json",...e.headers||{}},credentials:"include",...e.keepalive?{keepalive:!0}:{},body:JSON.stringify({stateKey:t,...r?{workspaceId:r}:{},patch:a})}),f=await d.json().catch(()=>({}));if(d.ok&&f?.success!==!1)return Um.set(i,{serializedPatch:s,status:"success",retryAfter:0}),{skipped:!1,response:d,payload:f};if(Um.set(i,{serializedPatch:s,status:"failure",retryAfter:l+(e.failureRetryMs??Yw)}),hr("ui_state_persist_failed",{stateKey:t,workspaceId:r||"default",status:d.status,error:String(f?.error||"")}),e.throwOnError)throw new Error(String(f?.error||`Failed to persist UI state (${d.status})`));return{skipped:!1,response:d,payload:f}}catch(d){if(Um.set(i,{serializedPatch:s,status:"failure",retryAfter:l+(e.failureRetryMs??Yw)}),hr("ui_state_persist_failed",{stateKey:t,workspaceId:r||"default",error:d instanceof Error?d.message:String(d)}),e.throwOnError)throw d;return{skipped:!1,payload:null}}}function yv(e){const t=mg(e);return`${wA}.${t}`}function SA(e){const t=pv(e);return`${wA}.${t}`}function yk(e){if(typeof window>"u")return"";try{const t=yv(e),r=String(window.localStorage.getItem(t)||"").trim();if(r&&r.length<=120&&!/\s/.test(r))return r;const a=SA(e),s=String(window.localStorage.getItem(a)||"").trim();return s&&s.length<=120&&!/\s/.test(s)?(window.localStorage.setItem(t,s),s):""}catch{return""}}function sx(e,t){if(typeof window>"u")return;const r=String(e||"").trim();try{if(!r||fv(r))return;const a=yv(t),s=String(window.localStorage.getItem(a)||"").trim();if(!r&&s&&s.toLowerCase()!=="default")return;window.localStorage.setItem(a,r)}catch{}}function Zw(e){if(!(typeof window>"u"))try{window.localStorage.removeItem(yv(e)),window.localStorage.removeItem(SA(e))}catch{}}function AA(e){const t=pv(e);return`${Y0}.${t}`}function Jw(e){if(typeof window>"u")return null;try{const t=window.localStorage.getItem(AA(e));if(!t)return null;const r=JSON.parse(t);return bA(r)}catch{return null}}function ox(e,t){if(!(typeof window>"u"))try{window.localStorage.setItem(AA(t),JSON.stringify(e))}catch{}}const kk="taskforce.localMutationActorUserId.v1";function CA(e){return typeof e=="string"?e.trim().replace(/\/+$/,""):""}function ix(e){const t=String(e||"").trim().toLowerCase();return t==="localhost"||t==="127.0.0.1"||t==="::1"||t==="[::1]"}function rf(e){if(!(typeof window>"u"))try{const t=String(e||"").trim();if(!t||t==="anonymous"){window.sessionStorage.removeItem(kk);return}window.sessionStorage.setItem(kk,t)}catch{}}function kv(){if(typeof window>"u")return"";try{return String(window.sessionStorage.getItem(kk)||"").trim()}catch{return""}}function cx(e,t){if(typeof window>"u"||!e.startsWith("/api/taskforce/")||!ix(window.location.hostname))return!1;try{return new URL(t,window.location.origin).origin===window.location.origin}catch{return e.startsWith("/")}}function lx(e,t,r){if(!cx(e,t))return r;const a=kv();if(!a)return r;const s=new Headers(r?.headers||void 0);return s.has("x-taskforce-user-id")||s.set("x-taskforce-user-id",a),{...r,headers:s}}function dx(e,t){if(!e.startsWith("/"))return e;const r=CA(t);return r?`${r}${e}`:e}async function ux(e,t,r){const a=dx(e,r),s=CA(r).length>0,i=lx(e,a,t),l=typeof performance<"u"?performance.now():Date.now();try{const c=await fetch(a,i);if(!(s&&a!==e&&e.startsWith("/api/taskforce/")&&(c.status===401||c.status===403)))return c;hr("taskforce_api_auth_fallback_retry",{path:e,primaryUrl:a,fallbackUrl:e,status:c.status,durationMs:Math.round((typeof performance<"u"?performance.now():Date.now())-l)});try{const f=await fetch(e,i);return hr("taskforce_api_auth_fallback_completed",{path:e,primaryUrl:a,fallbackUrl:e,primaryStatus:c.status,fallbackStatus:f.status,durationMs:Math.round((typeof performance<"u"?performance.now():Date.now())-l)}),f}catch{return hr("taskforce_api_auth_fallback_failed",{path:e,primaryUrl:a,fallbackUrl:e,status:c.status,durationMs:Math.round((typeof performance<"u"?performance.now():Date.now())-l)}),c}}catch(c){if(!s||!e.startsWith("/"))throw c;hr("taskforce_api_network_fallback_retry",{path:e,primaryUrl:a,fallbackUrl:e,durationMs:Math.round((typeof performance<"u"?performance.now():Date.now())-l),error:c instanceof Error?c.message:String(c)});const d=await fetch(e,i);return hr("taskforce_api_network_fallback_completed",{path:e,primaryUrl:a,fallbackUrl:e,fallbackStatus:d.status,durationMs:Math.round((typeof performance<"u"?performance.now():Date.now())-l)}),d}}const nf=Object.freeze({coverageProfileId:"task-planning-metadata",coverageVersion:4,coverageDigest:"c622f33d62c9f9251559a5b3644ba617da31c1b53d4fd0927b529e76c89948d1"}),vv=Object.freeze(["task/root-v1","task-relationship/full-v1","taxonomy/full-v1","initiative/full-v1","workstream/full-v1","task-comments/full-v1","task-checklist/full-v1","task-attachment-links/full-v1","entity-event/full-v1"]),af=Object.freeze({coverageProfileId:"task-planning-metadata",coverageVersion:5,coverageDigest:"1227152d1998809427f8560f85c8ef2da8780d3ea697390fbaa48c9e85a97be2"}),px=vv,sf=Object.freeze({coverageProfileId:"task-planning-metadata",coverageVersion:6,coverageDigest:"0aa90b110c71cf37a1234617b098d055f1df1e8da389184c7b147833164e338d"}),fx=Object.freeze([...vv,"workstream-task-order/full-v1"]),ka=Object.freeze({coverageProfileId:"task-planning-metadata",coverageVersion:3,coverageDigest:"48544ecfcb72c44866cdd39d02d0ba83222bc5e236045880f7f62b979be46117"}),mx=1,hx=Object.freeze(["task/root-v1","task-relationship/full-v1","taxonomy/full-v1","initiative/full-v1","workstream/full-v1"]);function tl(e){const t=String(e.coverageProfileId||"").trim(),r=Number(e.coverageVersion),a=String(e.coverageDigest||"").trim();return t===ka.coverageProfileId&&r===ka.coverageVersion&&a===ka.coverageDigest?{coverage:ka,excludedProjections:hx,nestedWriterPrerequisitesRequired:!1,workflowWriterPrerequisitesRequired:!1,planningOrderWriterPrerequisitesRequired:!1}:t===nf.coverageProfileId&&r===nf.coverageVersion&&a===nf.coverageDigest?{coverage:nf,excludedProjections:vv,nestedWriterPrerequisitesRequired:!0,workflowWriterPrerequisitesRequired:!1,planningOrderWriterPrerequisitesRequired:!1}:t===af.coverageProfileId&&r===af.coverageVersion&&a===af.coverageDigest?{coverage:af,excludedProjections:px,nestedWriterPrerequisitesRequired:!0,workflowWriterPrerequisitesRequired:!0,planningOrderWriterPrerequisitesRequired:!1}:t===sf.coverageProfileId&&r===sf.coverageVersion&&a===sf.coverageDigest?{coverage:sf,excludedProjections:fx,nestedWriterPrerequisitesRequired:!0,workflowWriterPrerequisitesRequired:!1,planningOrderWriterPrerequisitesRequired:!0}:null}function _A(e){for(const t of[ka,nf,af,sf]){const r=tl(t);if(e.length===r.excludedProjections.length&&r.excludedProjections.every((a,s)=>e[s]===a))return t}return null}function wv(e,t=ka){if(!e||typeof e!="object"||Array.isArray(e))return!1;const r=e,a=r.coverage;return r.capabilityVersion===mx&&r.runtimeMode==="cloud"&&r.routeAvailable===!0&&r.writerPrerequisitesReady===!0&&r.activationReady===!0&&Array.isArray(r.missingPrerequisites)&&r.missingPrerequisites.length===0&&!!a&&typeof a=="object"&&!Array.isArray(a)&&a.coverageProfileId===t.coverageProfileId&&a.coverageVersion===t.coverageVersion&&a.coverageDigest===t.coverageDigest}function bv(e,t=ka){if(!e||typeof e!="object"||Array.isArray(e))return!1;const r=e,a=r.excludedProjections,s=tl(t);return s?r.cloudWritesFenced===!0&&Array.isArray(a)&&a.length===s.excludedProjections.length&&s.excludedProjections.every((i,l)=>a[l]===i):!1}function gx(e){if(!e||typeof e!="object"||Array.isArray(e))return!1;const t=e;return t.cloudWritesFenced===!1&&Array.isArray(t.excludedProjections)&&t.excludedProjections.length===0}const IA=Object.freeze(["task/root-v1","task-relationship/full-v1","taxonomy/full-v1","initiative/full-v1","workstream/full-v1","task-comments/full-v1","task-checklist/full-v1","task-attachment-links/full-v1","entity-event/full-v1","workstream-task-order/full-v1"]),yx=new Set(IA);function Qw(e){const t=new Set;for(const r of e||[]){const a=String(r||"").trim();if(!a||!yx.has(a)||t.has(a))throw new Error("Workspace sync v2 projection exclusions are invalid.");t.add(a)}return IA.filter(r=>t.has(r))}function kx(e,t){try{const r=Qw(e),a=Qw(t);return r.length===a.length&&r.every((s,i)=>s===a[i])}catch{return!1}}function vx(e,t){const r=[],a={},s=i=>{a[i]=(a[i]||0)+1};for(const i of e){if(i.op==="upsert"){const l=t.has("task-comments/full-v1"),c=t.has("task-checklist/full-v1"),d=t.has("task-attachment-links/full-v1");if(t.has("task/root-v1")&&l&&c&&d){s("task/root-v1"),s("task-comments/full-v1"),s("task-checklist/full-v1"),s("task-attachment-links/full-v1");continue}if(l||c||d){const f={...i.task};l&&(delete f.comments,s("task-comments/full-v1")),c&&(delete f.checklistItems,s("task-checklist/full-v1")),d&&(delete f.attachments,s("task-attachment-links/full-v1")),r.push({...i,task:f});continue}}if(t.has("task/root-v1")&&i.op==="delete"){s("task/root-v1");continue}if(t.has("task-relationship/full-v1")&&(i.op==="task-relationship-upsert"||i.op==="task-relationship-delete")){s("task-relationship/full-v1");continue}if(t.has("taxonomy/full-v1")&&i.op==="taxonomy-upsert"){s("taxonomy/full-v1");continue}if(t.has("initiative/full-v1")&&i.op==="initiative-upsert"){s("initiative/full-v1");continue}if(t.has("workstream/full-v1")&&i.op==="workstream-upsert"){s("workstream/full-v1");continue}if(t.has("entity-event/full-v1")&&(i.op==="task-event-upsert"||i.op==="entity-event-upsert")){s("entity-event/full-v1");continue}r.push(i)}return{changes:r,suppressedCounts:a}}function vk(e){if(e===null||typeof e=="string"||typeof e=="boolean")return e;if(typeof e=="number"){if(!Number.isFinite(e))throw new Error("Canonical JSON cannot contain non-finite numbers.");return e}if(Array.isArray(e))return e.map(vk);if(typeof e=="object"){const t={};for(const r of Object.keys(e).sort()){const a=e[r];a!==void 0&&(t[r]=vk(a))}return t}throw new Error(`Canonical JSON cannot contain ${typeof e}.`)}function En(e){return JSON.stringify(vk(e))}const TA=1;function wx(e){if(e.version!==TA)throw new TypeError("The sync transfer completion group version is unsupported.");if(!e.workspaceId.trim())throw new TypeError("The sync transfer completion group workspace is required.");if(!Number.isSafeInteger(e.coordinatorGeneration)||e.coordinatorGeneration<0)throw new TypeError("The sync transfer completion group generation is invalid.");if(e.ownerMode!=="browser-gateway"&&e.ownerMode!=="server")throw new TypeError("The sync transfer completion group owner is invalid.");if(!e.serverInstanceId.trim())throw new TypeError("The sync transfer completion group server instance is required.");if(!Array.isArray(e.permitIds)||e.permitIds.length===0)throw new TypeError("The sync transfer completion group requires at least one permit.");const t=e.permitIds.map(r=>r.trim());if(t.some((r,a)=>!r||r!==e.permitIds[a]))throw new TypeError("The sync transfer completion group contains an invalid permit ID.");if(new Set(t).size!==t.length)throw new TypeError("The sync transfer completion group contains duplicate permit IDs.");En(e.previousBoundary),En(e.expectedBoundary)}const mo=45e3,Sv=18e4;function yg(e,t){const r=t?.completionGroup;if(!r)return{};if(wx(r),r.workspaceId!==e)throw new TypeError("The local sync apply completion group workspace does not match the request.");if(r.ownerMode!=="browser-gateway")throw new TypeError("The local sync browser apply requires a browser-gateway completion group.");return{coordinatorGeneration:r.coordinatorGeneration,permitIds:[...r.permitIds]}}async function xA(e,t=100){const r=new URLSearchParams({workspaceId:e,limit:String(Math.max(1,Math.min(100,Math.floor(t))))});return Qn(fetch(`/api/taskforce/sync/workspace/content-obligations?${r.toString()}`,{credentials:"include",headers:{"x-taskforce-workspace-id":e}}))}async function RA(e,t,r){return Qn(fetch("/api/taskforce/sync/workspace/content-obligations/failures",{method:"POST",credentials:"include",headers:{"Content-Type":"application/json","x-taskforce-workspace-id":e},body:JSON.stringify({workspaceId:e,obligationIds:t,error:r})}))}async function bx(e,t,r=[],a=[],s=zA){const i=await s(e);if(!i.ok)return i;const l=new Set(Array.from(t,b=>String(b||"").trim()).filter(Boolean)),c=new Set(Array.from(r,b=>String(b||"").trim()).filter(Boolean)),d=new Set(Array.from(a,b=>String(b||"").trim()).filter(Boolean)),f=i.data;if(f.success!==!0||f.contractVersion!==3||f.workspaceId!==e||!Array.isArray(f.tasks)||!Array.isArray(f.activeTaskRelationshipIds)||!Array.isArray(f.initiatives)||!Array.isArray(f.workstreams)||!f.initiativeProjection||typeof f.initiativeProjection!="object"||f.initiativeProjection.owner!=="v2"&&f.initiativeProjection.owner!=="v3"||typeof f.initiativeProjection.epoch!="string"||!/^\d+$/.test(f.initiativeProjection.epoch)||f.activeTaskRelationshipIds.some(b=>typeof b!="string"||!b.trim())||!f.taxonomy||typeof f.taxonomy!="object"||Array.isArray(f.taxonomy)||typeof f.taxonomy.activeOperation!="boolean"||typeof f.taxonomy.owned!="boolean"||typeof f.taxonomy.entityRevision!="string"||!/^\d+$/.test(f.taxonomy.entityRevision)||typeof f.taxonomy.lifecycleRevision!="string"||!/^\d+$/.test(f.taxonomy.lifecycleRevision)||f.taxonomy.lastSequence!==null&&(typeof f.taxonomy.lastSequence!="string"||!/^\d+$/.test(f.taxonomy.lastSequence)))return{ok:!1,status:502,data:{activeMetadataTaskIds:[],activeCreateTaskIds:[],activeDeleteTaskIds:[],activeLifecycleTaskIds:[],activeReopenTaskIds:[],activeTaskRelationshipIds:[],activeInitiativeIds:[],protectedInitiativeIds:[],protectedWorkstreamIds:[],taxonomyProtected:!0,initiativeProjectionOwner:"v3",initiativeProjectionEpoch:"0",combinedProjectionOwner:"v2",combinedProjectionEpoch:"0"}};const p=f.combinedProjection;if(p!==void 0&&(!p||typeof p!="object"||Array.isArray(p)||p.owner!=="v2"&&p.owner!=="v3"||typeof p.epoch!="string"||!/^\d+$/.test(p.epoch)))return{ok:!1,status:502,data:{activeMetadataTaskIds:[],activeCreateTaskIds:[],activeDeleteTaskIds:[],activeLifecycleTaskIds:[],activeReopenTaskIds:[],activeTaskRelationshipIds:[],activeInitiativeIds:[],protectedInitiativeIds:[],protectedWorkstreamIds:[],taxonomyProtected:!0,initiativeProjectionOwner:"v3",initiativeProjectionEpoch:"0",combinedProjectionOwner:"v2",combinedProjectionEpoch:"0"}};const g=p?tl({coverageProfileId:p.coverageProfileId,coverageVersion:p.coverageVersion,coverageDigest:p.coverageDigest}):null;if(p?.owner==="v3"&&!g)return{ok:!1,status:502,data:{activeMetadataTaskIds:[],activeCreateTaskIds:[],activeDeleteTaskIds:[],activeLifecycleTaskIds:[],activeReopenTaskIds:[],activeTaskRelationshipIds:[],activeInitiativeIds:[],protectedInitiativeIds:[],protectedWorkstreamIds:[],taxonomyProtected:!0,initiativeProjectionOwner:"v3",initiativeProjectionEpoch:"0",combinedProjectionOwner:"v2",combinedProjectionEpoch:"0",combinedExcludedProjections:[]}};const h=[];for(const b of f.tasks){const $=String(b?.taskId||"").trim();if(!b||typeof b!="object"||Array.isArray(b)||!$||typeof b.activeOperation!="boolean"||typeof b.activeCreateOperation!="boolean"||b.activeDeleteOperation!==void 0&&typeof b.activeDeleteOperation!="boolean"||b.deleteOwned!==void 0&&typeof b.deleteOwned!="boolean"||typeof b.activeLifecycleOperation!="boolean"||typeof b.activeReopenOperation!="boolean"||typeof b.reopenAssigneeOwned!="boolean")return{ok:!1,status:502,data:{activeMetadataTaskIds:[],activeCreateTaskIds:[],activeDeleteTaskIds:[],activeLifecycleTaskIds:[],activeReopenTaskIds:[],activeTaskRelationshipIds:[],activeInitiativeIds:[],protectedInitiativeIds:[],protectedWorkstreamIds:[],taxonomyProtected:!0,initiativeProjectionOwner:"v3",initiativeProjectionEpoch:"0",combinedProjectionOwner:"v2",combinedProjectionEpoch:"0"}};h.push({entry:b,taskId:$})}const y=h.filter(({taskId:b})=>b.length>0&&l.has(b)),k=Array.from(new Set(y.filter(({entry:b})=>b?.activeOperation===!0).map(({taskId:b})=>b))).sort(),v=Array.from(new Set(y.filter(({entry:b})=>b?.activeCreateOperation===!0).map(({taskId:b})=>b))).sort(),C=Array.from(new Set(y.filter(({entry:b})=>b?.activeDeleteOperation===!0||b?.deleteOwned===!0).map(({taskId:b})=>b))).sort(),S=Array.from(new Set(y.filter(({entry:b})=>b?.activeLifecycleOperation===!0).map(({taskId:b})=>b))).sort(),w=Array.from(new Set(y.filter(({entry:b})=>b?.activeReopenOperation===!0).map(({taskId:b})=>b))).sort(),_=Array.from(new Set(f.activeTaskRelationshipIds.map(b=>String(b).trim()))).sort(),M=[],R=[];for(const b of f.initiatives){const $=String(b?.entityId||"").trim();if(!(b&&typeof b=="object"&&!Array.isArray(b)&&b.domain==="initiative"&&$.length>0&&typeof b.activeOperation=="boolean"&&typeof b.owned=="boolean"&&typeof b.entityRevision=="string"&&/^\d+$/.test(b.entityRevision)&&typeof b.lifecycleRevision=="string"&&/^\d+$/.test(b.lifecycleRevision)&&(b.lastSequence===null||typeof b.lastSequence=="string"&&/^\d+$/.test(b.lastSequence))&&(b.canonicalFingerprint===null||typeof b.canonicalFingerprint=="string"&&/^[a-f0-9]{64}$/.test(b.canonicalFingerprint))))return{ok:!1,status:502,data:{activeMetadataTaskIds:[],activeCreateTaskIds:[],activeDeleteTaskIds:[],activeLifecycleTaskIds:[],activeReopenTaskIds:[],activeTaskRelationshipIds:[],activeInitiativeIds:[],protectedInitiativeIds:[],protectedWorkstreamIds:[],taxonomyProtected:!0,initiativeProjectionOwner:"v3",initiativeProjectionEpoch:"0",combinedProjectionOwner:"v2",combinedProjectionEpoch:"0"}};c.has($)&&(b.activeOperation===!0&&M.push($),(b.activeOperation===!0||b.owned===!0)&&R.push($))}const P=[];for(const b of f.workstreams){const $=String(b?.entityId||"").trim();if(!(b&&typeof b=="object"&&!Array.isArray(b)&&b.domain==="workstream"&&$.length>0&&typeof b.activeOperation=="boolean"&&typeof b.owned=="boolean"&&typeof b.entityRevision=="string"&&/^\d+$/.test(b.entityRevision)&&typeof b.lifecycleRevision=="string"&&/^\d+$/.test(b.lifecycleRevision)&&(b.lastSequence===null||typeof b.lastSequence=="string"&&/^\d+$/.test(b.lastSequence))&&(b.canonicalFingerprint===null||typeof b.canonicalFingerprint=="string"&&/^[a-f0-9]{64}$/.test(b.canonicalFingerprint))))return{ok:!1,status:502,data:{activeMetadataTaskIds:[],activeCreateTaskIds:[],activeDeleteTaskIds:[],activeLifecycleTaskIds:[],activeReopenTaskIds:[],activeTaskRelationshipIds:[],activeInitiativeIds:[],protectedInitiativeIds:[],protectedWorkstreamIds:[],taxonomyProtected:!0,initiativeProjectionOwner:"v3",initiativeProjectionEpoch:"0",combinedProjectionOwner:"v2",combinedProjectionEpoch:"0"}};d.has($)&&(b.activeOperation===!0||b.owned===!0)&&P.push($)}return{ok:!0,status:i.status,data:{activeMetadataTaskIds:k,activeCreateTaskIds:v,activeDeleteTaskIds:C,activeLifecycleTaskIds:S,activeReopenTaskIds:w,activeTaskRelationshipIds:_,activeInitiativeIds:Array.from(new Set(M)).sort(),protectedInitiativeIds:Array.from(new Set(R)).sort(),protectedWorkstreamIds:Array.from(new Set(P)).sort(),taxonomyProtected:f.taxonomy.activeOperation===!0||f.taxonomy.owned===!0,initiativeProjectionOwner:f.initiativeProjection.owner,initiativeProjectionEpoch:f.initiativeProjection.epoch,combinedProjectionOwner:p?.owner==="v3"?"v3":"v2",combinedProjectionEpoch:p&&typeof p.epoch=="string"?p.epoch:"0",combinedCoverage:p?.owner==="v3"&&g?g.coverage:void 0,combinedExcludedProjections:p?.owner==="v3"&&g?[...g.excludedProjections]:[]}}}function Sx(e){const t=Number(e?.status);return Number.isFinite(t)&&t>0?Math.floor(t):0}async function Qn(e){try{const t=await e,r=await t.text().catch(()=>"");let a={};if(r)try{a=JSON.parse(r)}catch{a={error:!t.ok&&t.statusText?`${t.status} ${t.statusText}`:r.slice(0,400)}}else!t.ok&&t.statusText&&(a={error:`${t.status} ${t.statusText}`});const s=t.headers.get("retry-after");let i;if(s){const l=Number.parseInt(s,10);if(Number.isFinite(l)&&l>0)i=l*1e3;else{const c=Date.parse(s);if(Number.isFinite(c)){const d=c-Date.now();d>0&&(i=d)}}}return{ok:t.ok,status:t.status,data:a,retryAfterMs:i}}catch(t){const a=String(t?.name||"").trim()==="AbortError"?{error:"Workspace sync pull request timed out."}:{};return{ok:!1,status:Sx(t),data:a}}}function Ms(e,t,r){const a=typeof AbortController=="function"?new AbortController:null,s=a?globalThis.setTimeout(()=>a.abort(),Math.max(1,Math.floor(r))):null;return fetch(e,{...t,...a?{signal:a.signal}:{}}).finally(()=>{s!==null&&globalThis.clearTimeout(s)})}async function Ax(e){return Qn(fetch(e("/api/taskforce/sync/user-settings"),{method:"GET",credentials:"include"}))}async function Cx(e,t){return Qn(fetch(e("/api/taskforce/sync/user-settings"),{method:"POST",headers:{"Content-Type":"application/json"},credentials:"include",body:JSON.stringify(t)}))}async function _x(e,t){return Qn(fetch(e("/api/taskforce/sync/workspace/handshake"),{method:"POST",headers:{"Content-Type":"application/json"},credentials:"include",body:JSON.stringify({workspaceId:t})}))}async function Ix(e,t){return Qn(fetch(e("/api/taskforce/sync/workspace/provision"),{method:"POST",headers:{"Content-Type":"application/json"},credentials:"include",body:JSON.stringify(t)}))}async function Tx(e,t){const r=new URLSearchParams({limit:String(t.limit),workspaceId:t.workspaceId});if(t.cursor&&r.set("cursor",t.cursor),t.repairMode===!0&&r.set("repair","1"),t.contentMode==="manifest"&&r.set("content","manifest"),t.excludeInitiatives===!0&&r.set("excludeInitiatives","1"),t.excludedProjections?.length){r.set("excludeProjections",t.excludedProjections.join(","));const i=_A(t.excludedProjections);i&&(r.set("coverageProfileId",i.coverageProfileId),r.set("coverageVersion",String(i.coverageVersion)),r.set("coverageDigest",i.coverageDigest))}const a=e("/api/taskforce/sync/workspace/pull"),s=a.includes("?")?"&":"?";return Qn(Ms(`${a}${s}${r.toString()}`,{method:"GET",credentials:"include"},mo))}async function PA(e,t){const r=new URLSearchParams({workspaceId:t.workspaceId,limit:String(t.limit||100)});t.cursor&&r.set("cursor",t.cursor),t.repairCursor&&r.set("repairCursor",t.repairCursor);const a=e("/api/taskforce/sync/v3/workspace/feed"),s=a.includes("?")?"&":"?";return Qn(Ms(`${a}${s}${r.toString()}`,{method:"GET",credentials:"include"},mo))}async function EA(e,t){const r=t.coverage||ka,a=new URLSearchParams({workspaceId:t.workspaceId,limit:String(t.limit||100),coverageProfileId:r.coverageProfileId,coverageVersion:String(r.coverageVersion),coverageDigest:r.coverageDigest});t.cursor&&a.set("cursor",t.cursor),t.repairCursor&&a.set("repairCursor",t.repairCursor),t.forceRepair===!0&&a.set("forceRepair","1");const s=e("/api/taskforce/sync/v3/workspace/feed"),i=s.includes("?")?"&":"?",l=t.forceRepair===!0||t.repairCursor?Sv:mo;return Qn(Ms(`${s}${i}${a.toString()}`,{method:"GET",credentials:"include"},l))}async function NA(e){const t=new URLSearchParams({workspaceId:e});return Qn(Ms(`/api/taskforce/sync/v3/local/feed?${t.toString()}`,{method:"GET",headers:{"x-taskforce-workspace-id":e},credentials:"include"},mo))}async function jA(e,t,r){return Qn(Ms("/api/taskforce/sync/v3/local/feed",{method:"POST",headers:{"Content-Type":"application/json","x-taskforce-workspace-id":e},credentials:"include",body:JSON.stringify({workspaceId:e,...t,...yg(e,r)})},mo))}async function MA(e,t=ka){const r=new URLSearchParams({workspaceId:e,coverageProfileId:t.coverageProfileId,coverageVersion:String(t.coverageVersion),coverageDigest:t.coverageDigest});return Qn(Ms(`/api/taskforce/sync/v3/local/feed?${r.toString()}`,{method:"GET",headers:{"x-taskforce-workspace-id":e},credentials:"include"},mo))}async function DA(e,t,r=ka,a){return Qn(Ms("/api/taskforce/sync/v3/local/feed",{method:"POST",headers:{"Content-Type":"application/json","x-taskforce-workspace-id":e},credentials:"include",body:JSON.stringify({workspaceId:e,...t,...r,...yg(e,a)})},mo))}async function LA(e){const t=new URLSearchParams({workspaceId:e});return Qn(Ms(`/api/taskforce/sync/v3/local/task-comment-audit?${t.toString()}`,{method:"GET",headers:{"x-taskforce-workspace-id":e},credentials:"include"},mo))}async function OA(e,t){const r=new URLSearchParams({workspaceId:t.workspaceId,limit:String(t.limit||50)});t.cursor&&r.set("cursor",t.cursor);const a=e("/api/taskforce/sync/v3/workspace/task-comment-audit"),s=a.includes("?")?"&":"?";return Qn(Ms(`${a}${s}${r.toString()}`,{method:"GET",credentials:"include"},mo))}async function BA(e,t,r){return Qn(Ms("/api/taskforce/sync/v3/local/task-comment-audit",{method:"POST",headers:{"Content-Type":"application/json","x-taskforce-workspace-id":e},credentials:"include",body:JSON.stringify({workspaceId:e,page:t,...yg(e,r)})},mo))}async function xx(e){return Qn(Ms("/api/taskforce/sync/v3/local/coordinator/recovery/authoritative-repair-complete",{method:"POST",headers:{"Content-Type":"application/json","x-taskforce-workspace-id":e.workspaceId},credentials:"include",body:JSON.stringify(e)},mo))}async function WA(e,t){const r=new URLSearchParams({workspaceId:t.workspaceId,limit:String(t.limit||100)});t.cursor&&r.set("cursor",t.cursor);const a=e("/api/taskforce/sync/workspace/initiative-repair"),s=a.includes("?")?"&":"?";return Qn(Ms(`${a}${s}${r.toString()}`,{method:"GET",credentials:"include"},Sv))}async function $A(e,t){const r=t.coverage||ka,a=new URLSearchParams({workspaceId:t.workspaceId,limit:String(t.limit||100),coverageProfileId:r.coverageProfileId,coverageVersion:String(r.coverageVersion),coverageDigest:r.coverageDigest});t.cursor&&a.set("cursor",t.cursor);const s=e("/api/taskforce/sync/workspace/combined-repair"),i=s.includes("?")?"&":"?";return Qn(Ms(`${s}${i}${a.toString()}`,{method:"GET",credentials:"include"},Sv))}async function FA(e){const t=new URLSearchParams({workspaceId:e});return Qn(Ms(`/api/taskforce/sync/workspace/content-manifest?${t.toString()}`,{method:"GET",headers:{"x-taskforce-workspace-id":e},credentials:"include"},mo))}async function Rx(e,t){return Qn(Ms(e("/api/taskforce/sync/workspace/content"),{method:"POST",headers:{"Content-Type":"application/json"},credentials:"include",body:JSON.stringify(t)},mo))}async function UA(e,t={}){const r=e.changes.filter(I=>I.op==="upsert").map(I=>String(I.task?.id||"").trim()).filter(Boolean),a=e.changes.filter(I=>I.op==="delete").map(I=>String(I.taskId||"").trim()).filter(Boolean),s=new Set(r),i=e.changes.filter(I=>I.op==="initiative-upsert").map(I=>String(I.initiative?.id||"").trim()).filter(Boolean),l=e.changes.filter(I=>I.op==="workstream-upsert").map(I=>String(I.workstream?.id||"").trim()).filter(Boolean);let c=[],d=[],f=[],p=new Set,g=new Set,h=new Set,y=!1,k=[],v=new Set,C=new Set,S="v2",w="v2",_="0",M=null,R=[];if(e.changes.length>0){const I=await bx(e.workspaceId,[...r,...a],i,l,t.readOwnership);if(!I.ok)return{ok:!1,status:I.status,data:I.data,retryAfterMs:I.retryAfterMs};p=new Set(I.data.activeCreateTaskIds),g=new Set(I.data.activeDeleteTaskIds),h=new Set(I.data.activeTaskRelationshipIds),y=I.data.taxonomyProtected,k=I.data.activeInitiativeIds,v=new Set(I.data.protectedInitiativeIds),C=new Set(I.data.protectedWorkstreamIds),S=I.data.initiativeProjectionOwner,w=I.data.combinedProjectionOwner,_=I.data.combinedProjectionEpoch,M=I.data.combinedCoverage||null,R=I.data.combinedExcludedProjections||[],c=I.data.activeMetadataTaskIds.filter(E=>s.has(E)&&!p.has(E)),d=I.data.activeLifecycleTaskIds.filter(E=>s.has(E)&&!p.has(E)),f=I.data.activeReopenTaskIds.filter(E=>s.has(E)&&!p.has(E))}const P=e.changes.filter(I=>I.op==="upsert"?!p.has(String(I.task?.id||"").trim()):I.op==="delete"?!g.has(String(I.taskId||"").trim()):I.op==="task-relationship-upsert"||I.op==="task-relationship-delete"?!h.has(String(I.relationship?.id||"").trim()):I.op==="taxonomy-upsert"?!y:I.op==="initiative-upsert"?S!=="v3"&&!v.has(String(I.initiative?.id||"").trim()):I.op==="workstream-upsert"?!C.has(String(I.workstream?.id||"").trim()):!0),b=vx(P,new Set(R)).changes,$=w==="v3"?e.changes.length-b.length:0;return{ok:!0,status:200,data:{changes:b,ownership:{activeV3TaskMetadataIds:c,activeV3TaskLifecycleIds:d,activeV3TaskReopenAssigneeIds:f,activeV3InitiativeIds:k,initiativeProjectionOwner:S,combinedProjectionOwner:w,combinedProjectionEpoch:_,combinedCoverage:M,combinedExcludedProjections:R,combinedV3SuppressedChangeCount:$}}}}async function Px(e,t){const r=await UA({workspaceId:t.workspaceId,changes:t.changes});if(!r.ok)return r;const{changes:a,ownership:s}=r.data;return a.length===0?{ok:!0,status:204,data:{success:!0,skipped:!0}}:Qn(fetch(e("/api/taskforce/sync/workspace/push"),{method:"POST",headers:{"Content-Type":"application/json"},credentials:"include",body:JSON.stringify({...t,changes:a,...s.activeV3TaskMetadataIds.length>0?{activeV3TaskMetadataIds:s.activeV3TaskMetadataIds}:{},...s.activeV3TaskLifecycleIds.length>0?{activeV3TaskLifecycleIds:s.activeV3TaskLifecycleIds}:{},...s.activeV3TaskReopenAssigneeIds.length>0?{activeV3TaskReopenAssigneeIds:s.activeV3TaskReopenAssigneeIds}:{},...s.activeV3InitiativeIds.length>0?{activeV3InitiativeIds:s.activeV3InitiativeIds}:{},...s.initiativeProjectionOwner==="v3"?{v3InitiativeProjectionOwned:!0}:{},...s.combinedCoverage?{combinedCoverage:s.combinedCoverage,excludedProjections:s.combinedExcludedProjections||[]}:{},...t.repairMode===!0?{repair:!0}:{}})}))}async function zA(e){const t=new URLSearchParams({workspaceId:e});return Qn(Ms(`/api/taskforce/sync/v3/local/metadata-ownership?${t.toString()}`,{method:"GET",headers:{"x-taskforce-workspace-id":e},credentials:"include"},mo))}async function HA(e,t,r){const a=JSON.stringify({workspaceId:e,changes:t,workspaceMembers:Array.isArray(r?.workspaceMembers)?r.workspaceMembers:void 0,...r?.repairMode===!0?{repair:!0}:{},excludedProjections:r?.excludedProjections,contentPullObligations:r?.contentPullObligations,contentPullResolutionClaims:r?.contentPullResolutionClaims,...yg(e,r),bootstrapSnapshot:r?.bootstrapSnapshot?{currentAnnotatedAttachmentSessionIds:Array.isArray(r.bootstrapSnapshot.currentAnnotatedAttachmentSessionIds)?r.bootstrapSnapshot.currentAnnotatedAttachmentSessionIds:[]}:void 0}),s="/api/taskforce/sync/workspace/apply-local",i=[];try{const l=await fetch(s,{method:"POST",headers:{"Content-Type":"application/json","x-taskforce-workspace-id":e},credentials:"include",body:a});if(l.ok){const f=await l.json().catch(()=>({}));return{ok:!0,status:l.status,data:f,failures:i}}const c=await l.text().catch(()=>"");let d={};if(c)try{d=JSON.parse(c)}catch{d={error:c.slice(0,400)}}else l.statusText&&(d={error:`${l.status} ${l.statusText}`});return i.push(`${s}:${l.status}`),{ok:!1,status:l.status,data:d,failures:i}}catch{i.push(`${s}:network`)}return{ok:!1,status:0,data:{},failures:i}}function pc(e){return`${e.kind}:${e.path}`}const Xw="WORKSPACE_SYNC_V3_APPLY_NOT_COMMITTED";function Av(e){return{handshakeWorkspace:t=>_x(e,t),provisionWorkspace:t=>Ix(e,t),pushWorkspaceChanges:({ownership:t,pushBoundary:r,...a})=>Px(e,a),pullWorkspaceChanges:t=>Tx(e,t),pullWorkspaceContent:({previousCursor:t,...r})=>Rx(e,r),pullInitiativeFeed:t=>PA(e,t),pullInitiativeRepair:t=>WA(e,t),pullCombinedFeed:t=>EA(e,t),pullCombinedRepair:t=>$A(e,t),pullTaskCommentAudit:t=>OA(e,t),abandonTransferReceipts:()=>{},acknowledgeNonApplyingTransferReceipts:()=>{},buildV2ApplyCompletionGroup:()=>{},buildV2PushApplyCompletionGroup:()=>{},buildV3ApplyCompletionGroup:()=>{}}}const VA=1;function GA(e){if(!Array.isArray(e)||e.length===0||e.some(t=>typeof t!="string"||t.trim().length===0||t!==t.trim())||new Set(e).size!==e.length)throw new TypeError("A V2 push boundary requires nonempty, unique, trimmed batch operation identities.");return Object.freeze({version:VA,projection:"v2-push",batchOperationIdentities:Object.freeze([...e])})}function Hm(e){if(!e||typeof e!="object"||Array.isArray(e)||e.version!==VA||e.projection!=="v2-push"||!Array.isArray(e.batchOperationIdentities))throw new TypeError("The V2 push boundary is invalid.");return GA(e.batchOperationIdentities)}function Ch(e){const t=e.filter(r=>r?.op==="upsert").map(r=>String(r.task?.id||"").trim()).filter(Boolean);return Array.from(new Set(t))}function KA(e,t){if(!Array.isArray(t)||t.some(i=>typeof i!="string"||i.trim().length===0||i!==i.trim())||new Set(t).size!==t.length)throw new TypeError("The expected V2 push task echo identities are invalid.");if(!e||typeof e!="object"||Array.isArray(e))throw new TypeError("The V2 push authoritative echo response is invalid.");const r=e;if(!Array.isArray(r.appliedTaskUpserts))throw new TypeError("The V2 push authoritative echo response is missing appliedTaskUpserts.");const a=r.appliedTaskUpserts.map(i=>{const l=i&&typeof i=="object"&&!Array.isArray(i)?i:null;if(!l||typeof l.archived!="boolean")return null;const c=l.task&&typeof l.task=="object"&&!Array.isArray(l.task)?l.task:null,d=String(c?.id||"").trim();return!c||!d?null:{archived:l.archived===!0,task:c,...l.durableRevision&&typeof l.durableRevision=="object"&&!Array.isArray(l.durableRevision)?{durableRevision:l.durableRevision}:{}}}).filter(i=>!!i),s=a.map(i=>String(i.task.id).trim());if(a.length!==r.appliedTaskUpserts.length||s.length!==t.length||new Set(s).size!==s.length||s.some((i,l)=>i!==t[l]))throw new TypeError("The V2 push authoritative task echo contract is incomplete or malformed.");return a}const wk="V1:AESGCM:",Cv="AES-GCM",Ex=12;async function qA(e){const t=Buffer.from(e,"base64");if(t.length!==32)throw new Error("Encryption key must be exactly 32 bytes (256-bit).");return crypto.subtle.importKey("raw",t,{name:Cv},!1,["encrypt","decrypt"])}async function eb(e,t){if(!e)return e;const r=crypto.getRandomValues(new Uint8Array(Ex)),a=await qA(t),i=new TextEncoder().encode(e),l=await crypto.subtle.encrypt({name:Cv,iv:r},a,i),c=Buffer.from(l).toString("base64"),d=Buffer.from(r).toString("base64");return`${wk}${d}:${c}`}async function tb(e,t){if(!e||!e.startsWith(wk))return e;const r=e.slice(wk.length),[a,s]=r.split(":");if(!a||!s)throw new Error("Malformed encrypted document payload.");const i=Buffer.from(a,"base64"),l=Buffer.from(s,"base64"),c=await qA(t);try{const d=await crypto.subtle.decrypt({name:Cv,iv:i},c,l);return new TextDecoder("utf-8").decode(d)}catch(d){throw new Error(`Failed to decrypt document: ${d.message}`)}}async function _h(e,t){t&&(e.op==="document-upsert"&&typeof e.content=="string"&&(e.content=await tb(e.content,t)),e.op==="asset-upsert"&&typeof e.contentBase64=="string"&&(e.contentBase64=await tb(e.contentBase64,t)))}async function $h(e,t){const r=e==="document"?new TextEncoder().encode(t):Uint8Array.from(atob(t),s=>s.charCodeAt(0)),a=await crypto.subtle.digest("SHA-256",r);return{sha256:Array.from(new Uint8Array(a),s=>s.toString(16).padStart(2,"0")).join(""),sizeBytes:r.byteLength}}function rb(e){return String(e||"").trim().toLowerCase()}function nb(e){return/^[a-f0-9]{64}$/.test(e)}function ab(e){return Number.isSafeInteger(e)&&e>=0}function Nx(e,t){if(!t||!t.existsLocally||t.kind!==e.kind||t.path!==e.path||t.manifestVersion!==e.manifestVersion)return{shouldFetch:!0,reasons:["missing"]};const r=[],a=rb(e.sha256),s=rb(t.sha256);return!nb(a)||!nb(s)?r.push("unknown-hash"):a!==s&&r.push("hash-mismatch"),(!ab(e.sizeBytes)||!ab(t.sizeBytes)||e.sizeBytes!==t.sizeBytes)&&r.push("size-mismatch"),(!e.metadataFingerprint||!t.metadataFingerprint||e.metadataFingerprint!==t.metadataFingerprint)&&r.push("metadata-mismatch"),{shouldFetch:r.length>0,reasons:r}}const sb=1;var Yc={};function ya(e){return e&&typeof e=="object"?e:{}}const jx=3e4,Mx=60*6e4;function Dx(e,t=Date.now()){const r=Math.max(0,Math.floor(Number(e.attempts)||0));if(r===0)return!0;const a=Date.parse(String(e.updatedAt||""));if(!Number.isFinite(a))return!0;const s=Math.min(Mx,jx*2**Math.min(r-1,7));return a+s<=t}function Go(e){const t=Number(e||0);return t===0||t===429||t>=500}function ob(e,t){const r=String(e.code||"").trim().toUpperCase(),a=String(e.error||"").trim();return r==="WORKSPACE_ID_ALREADY_EXISTS"||a.toLowerCase()==="workspace id already exists"?"This workspace is already linked to another cloud account. Sign in with the original account, ask the workspace owner to grant you access, or keep this workspace local-only.":a||`Workspace provisioning failed (${t})`}function Lx(e,t){if(t!==400)return!1;const r=String(e.code||"").trim().toUpperCase(),a=String(e.error||"").trim().toLowerCase();return r==="WORKSPACE_ID_REQUIRED"&&a.includes("no cloud workspace is selected")}async function Ox(e){if(!e.cloudAuthConfigured)return{success:!1,error:"Cloud auth endpoint is not configured."};if(e.runtimeMode!=="local")return{success:!1,error:"Workspace sync is only available in local runtime."};if(!e.isAuthenticated)return{success:!1,error:"Authentication required."};try{const t=e.remoteServices||Av(e.resolveCloudAuthUrl);let r=await t.handshakeWorkspace(e.workspaceId);if(r.ok)return{success:!0,provisioned:!1};const a=ya(r.data);if(r.status===401)return{success:!1,statusCode:401,transient:!1,error:String(a.error||"Authentication required for workspace sync.")};if(r.status===429)return{success:!1,statusCode:429,retryAfterMs:r.retryAfterMs,transient:!0,error:String(a.error||"Workspace sync rate limited. Please retry later.")};if(Lx(a,r.status)){const s=await t.provisionWorkspace({workspaceId:e.workspaceId,name:e.workspaceName||e.workspaceId});if(!s.ok){const i=ya(s.data);return{success:!1,statusCode:s.status,transient:Go(s.status),retryAfterMs:s.retryAfterMs,error:ob(i,s.status)}}if(r=await t.handshakeWorkspace(e.workspaceId),!r.ok){const i=ya(r.data);return r.status===401?{success:!1,statusCode:401,transient:!1,error:String(i.error||"Authentication required for workspace sync.")}:r.status===429?{success:!1,statusCode:429,retryAfterMs:r.retryAfterMs,transient:!0,error:String(i.error||"Workspace sync rate limited. Please retry later.")}:{success:!1,statusCode:r.status,transient:Go(r.status),error:String(i.error||`Workspace sync handshake failed (${r.status})`)}}return{success:!0,provisioned:!0}}if(r.status===409&&a.code==="WORKSPACE_ID_MISMATCH"){if(e.allowProvisionOnMismatch===!1)return{success:!1,statusCode:409,transient:!1,error:String(a.error||"Selected cloud workspace could not be attached to this local workspace.")};const s=await t.provisionWorkspace({workspaceId:e.workspaceId,name:e.workspaceName||e.workspaceId});if(!s.ok){const i=ya(s.data);return{success:!1,statusCode:s.status,error:ob(i,s.status)}}if(r=await t.handshakeWorkspace(e.workspaceId),!r.ok){const i=ya(r.data);return r.status===401?{success:!1,statusCode:401,transient:!1,error:String(i.error||"Authentication required for workspace sync.")}:r.status===429?{success:!1,statusCode:429,retryAfterMs:r.retryAfterMs,transient:!0,error:String(i.error||"Workspace sync rate limited. Please retry later.")}:{success:!1,statusCode:r.status,transient:Go(r.status),error:String(i.error||`Workspace sync handshake failed (${r.status})`)}}return{success:!0,provisioned:!0}}return{success:!1,statusCode:r.status,transient:Go(r.status),error:String(a.error||`Workspace sync handshake failed (${r.status})`)}}catch{return{success:!1,statusCode:0,transient:!0,error:"Failed to validate workspace sync access."}}}function Bx(e,t,r){if(!e)return;const a={};for(const i of t)a[i.op]=(a[i.op]||0)+1;const s=(i,l)=>i&&{...i,changeCount:l};return{...e,totalChanges:t.length,byOp:a,domains:{...e.domains,tasks:s(e.domains.tasks,(a.upsert||0)+(a.delete||0)),taskRelationships:s(e.domains.taskRelationships,(a["task-relationship-upsert"]||0)+(a["task-relationship-delete"]||0)),initiatives:s(e.domains.initiatives,a["initiative-upsert"]||0),workstreams:s(e.domains.workstreams,a["workstream-upsert"]||0),taxonomy:s(e.domains.taxonomy,a["taxonomy-upsert"]||0)},...r?.combinedV3SuppressedChangeCount?{combinedV3SuppressedChangeCount:r.combinedV3SuppressedChangeCount}:{}}}async function Wx(e,t,r){const a=En({contractVersion:1,workspaceId:e,repairMode:r,changes:t});try{const s=await crypto.subtle.digest("SHA-256",new TextEncoder().encode(a));return Array.from(new Uint8Array(s)).map(i=>i.toString(16).padStart(2,"0")).join("")}catch{let s=2166136261;for(let l=0;l<a.length;l+=1)s^=a.charCodeAt(l),s=Math.imul(s,16777619);const i=(s>>>0).toString(16).padStart(8,"0");return`${e}:fallback:${i}`}}const $x=64,ib=4*1024*1024,Fx=45*1024*1024,Ux=64*1024;function cb(e){switch(e.op){case"upsert":return`${e.op}:${e.task.id}`;case"delete":return`${e.op}:${e.taskId}`;case"task-relationship-upsert":case"task-relationship-delete":return`${e.op}:${e.relationship.id}`;case"initiative-upsert":return`${e.op}:${e.initiative.id}`;case"workstream-upsert":return`${e.op}:${e.workstream.id}`;case"taxonomy-upsert":return e.op;case"ai-profile-upsert":return`${e.op}:${e.profile.id}`;case"document-upsert":case"document-delete":return`${e.op}:${e.path}`;case"document-manifest":return`${e.op}:${e.manifest.path}`;case"asset-upsert":case"asset-delete":return`${e.op}:${e.path}`;case"asset-manifest":return`${e.op}:${e.manifest.path}`;case"document-review-session-upsert":return`${e.op}:${e.session.id}`;case"document-review-session-delete":return`${e.op}:${e.sessionId}`;case"document-review-comment-upsert":return`${e.op}:${e.comment.id}`;case"document-review-comment-delete":return`${e.op}:${e.commentId}`;case"annotated-attachment-session-upsert":return`${e.op}:${e.session.id}`;case"annotated-attachment-session-delete":return`${e.op}:${e.sessionId}`;case"taskforce-agent-upsert":return`${e.op}:${e.agent.id}`;case"agent-role-upsert":return`${e.op}:${e.role.id}`;case"taskforce-agent-skill-upsert":return`${e.op}:${e.skill.id}`;case"agent-conversation-upsert":return`${e.op}:${e.conversation.id}`;case"entity-event-upsert":return`${e.op}:${e.event.id}`;case"task-event-upsert":return`${e.op}:${e.event.id}`}}function zx(e,t){const r=new Map;for(const[s,i]of e.entries()){const l=cb(i),c=r.get(l)||[];c.push(s),r.set(l,c)}const a=new Map;return t.map(s=>{const i=cb(s),l=r.get(i)||[],c=a.get(i)||0,d=l[c];if(d===void 0)throw new Error(`Prepared V2 push change is not present in the frozen payload: ${i}.`);a.set(i,c+1);const f=e[d];return JSON.stringify(f)===JSON.stringify(s)?{sourceChangeIndex:d}:{sourceChangeIndex:d,preparedChange:s}})}function Hx(e,t){const r=new Set;return t.batches.map(a=>a.map(s=>{const i=s.sourceChangeIndex;if(!Number.isSafeInteger(i)||i<0||i>=e.length||r.has(i))throw new Error("Persisted V2 push prepared plan contains an invalid source change index.");return r.add(i),s.preparedChange||e[i]}))}function YA(e){switch(e.op){case"taxonomy-upsert":case"ai-profile-upsert":case"initiative-upsert":case"taskforce-agent-upsert":case"taskforce-agent-skill-upsert":return 0;case"workstream-upsert":return 1;case"upsert":return 2;case"document-upsert":case"document-manifest":case"asset-upsert":case"asset-manifest":return 3;case"document-review-session-upsert":case"annotated-attachment-session-upsert":case"agent-conversation-upsert":case"task-relationship-upsert":return 4;case"document-review-comment-upsert":case"task-event-upsert":case"entity-event-upsert":return 5;case"document-review-comment-delete":case"annotated-attachment-session-delete":case"task-relationship-delete":return 6;case"document-review-session-delete":case"document-delete":case"asset-delete":return 7;case"delete":return 8;default:return 4}}function Vx(e){return e.op==="document-upsert"||e.op==="document-manifest"||e.op==="asset-upsert"||e.op==="asset-manifest"||e.op==="document-delete"||e.op==="asset-delete"}function lb(e,t){return Ux+new TextEncoder().encode(JSON.stringify({workspaceId:e.workspaceId,idempotencyKey:"0".repeat(64),changes:t,repairMode:e.repairMode===!0,repair:e.repairMode===!0})).byteLength}function Gx(e,t,r){const a=t.map((l,c)=>({plain:l,safe:r[c],phase:YA(l),preparedIndex:c})).sort((l,c)=>l.phase-c.phase||l.preparedIndex-c.preparedIndex);if(a.length===0)return{batches:[[]],oversizedChangeIndex:null};const s=[];let i=[];for(const l of a){const c=lb(e,[l.safe]);if(c>Fx)return{batches:[],oversizedChangeIndex:l.preparedIndex};const d=i.length>0&&i[0].phase!==l.phase,f=[...i,l],p=i.length>0&&lb(e,f.map(g=>g.safe))>ib;(d||i.length>=$x||p)&&(s.push(i),i=[]),i.push(l),c>ib&&(s.push(i),i=[])}return i.length>0&&s.push(i),{batches:s,oversizedChangeIndex:null}}async function Kx(e){const t=e.remoteServices||Av(e.resolveCloudAuthUrl);let r={activeV3TaskMetadataIds:[],activeV3TaskLifecycleIds:[],activeV3TaskReopenAssigneeIds:[],activeV3InitiativeIds:[],initiativeProjectionOwner:"v2",combinedProjectionOwner:"v2",combinedProjectionEpoch:"0",combinedV3SuppressedChangeCount:0},a,s=e.preparedPlan||null,i=null;if(s){if(s.contractVersion!==sb)throw new Error("Persisted V2 push prepared plan version is unsupported.");i=Hx(e.payload.changes,s),a=i.flat(),r=s.ownership}else a=e.payload.changes;if(!s&&a.length>0){const I=await UA({workspaceId:e.workspaceId,changes:a},{readOwnership:e.localServices?.readPushOwnership});if(!I.ok){const E=ya(I.data);return{success:!1,status:I.status,error:typeof E.error=="string"?E.error:"Local workspace sync ownership could not be verified.",code:typeof E.code=="string"?E.code:void 0,retryAfterMs:I.retryAfterMs,transient:Go(I.status),requestMs:0,changeCount:e.payload.changes.length,deleteCount:e.payload.deleteTaskIds.size,currentTaskIds:e.payload.currentTaskIds,currentTaskWatermarks:e.payload.currentTaskWatermarks??new Map,currentTaskChangeKeys:e.payload.currentTaskChangeKeys??new Map,currentTaskRelationshipChangeKeys:e.payload.currentTaskRelationshipChangeKeys??new Map,currentTaxonomyChangeKey:e.payload.currentTaxonomyChangeKey??"",deleteTaskIds:e.payload.deleteTaskIds,currentInitiativeIds:e.payload.currentInitiativeIds,currentInitiativeWatermarks:e.payload.currentInitiativeWatermarks,currentWorkstreamIds:e.payload.currentWorkstreamIds,currentWorkstreamWatermarks:e.payload.currentWorkstreamWatermarks,currentAiProfileIds:e.payload.currentAiProfileIds,currentAiProfileWatermarks:e.payload.currentAiProfileWatermarks,currentAiProfileChangeKeys:e.payload.currentAiProfileChangeKeys??new Map,currentDocumentPaths:e.payload.currentDocumentPaths,deleteDocumentPaths:e.payload.deleteDocumentPaths,currentDocumentWatermarks:e.payload.currentDocumentWatermarks,currentAssetPaths:e.payload.currentAssetPaths,deleteAssetPaths:e.payload.deleteAssetPaths,currentAssetWatermarks:e.payload.currentAssetWatermarks,currentDocumentReviewSessionIds:e.payload.currentDocumentReviewSessionIds,deleteDocumentReviewSessionIds:e.payload.deleteDocumentReviewSessionIds,currentDocumentReviewSessionWatermarks:e.payload.currentDocumentReviewSessionWatermarks,currentDocumentReviewCommentIds:e.payload.currentDocumentReviewCommentIds,deleteDocumentReviewCommentIds:e.payload.deleteDocumentReviewCommentIds,currentDocumentReviewCommentWatermarks:e.payload.currentDocumentReviewCommentWatermarks,currentAnnotatedAttachmentSessionIds:e.payload.currentAnnotatedAttachmentSessionIds,deleteAnnotatedAttachmentSessionIds:e.payload.deleteAnnotatedAttachmentSessionIds,currentAnnotatedAttachmentSessionWatermarks:e.payload.currentAnnotatedAttachmentSessionWatermarks,currentTaskforceAgentIds:e.payload.currentTaskforceAgentIds??new Set,currentTaskforceAgentWatermarks:e.payload.currentTaskforceAgentWatermarks??new Map,currentTaskforceAgentSkillIds:e.payload.currentTaskforceAgentSkillIds??new Set,currentTaskforceAgentSkillWatermarks:e.payload.currentTaskforceAgentSkillWatermarks??new Map,currentAgentConversationIds:e.payload.currentAgentConversationIds??new Set,currentAgentConversationWatermarks:e.payload.currentAgentConversationWatermarks??new Map,currentTaskEventWatermarks:e.payload.currentTaskEventWatermarks,pushedWatermarks:new Map,pushedTaskChangeKeys:new Map,emittedEventIds:[],appliedTaskUpserts:[]}}a=I.data.changes,r=I.data.ownership}const l=a.length,c=Bx(e.payload.deltaDiagnostics,a,r),d=e.payload.deleteTaskIds.size;let f=0;if(l===0&&e.repairMode!==!0&&(r?.combinedProjectionOwner==="v3"||!!e.payload.deltaDiagnostics&&e.payload.deltaDiagnostics?.baselineResetReason!=="missing-baseline"))return{success:!0,syncedAt:new Date().toISOString(),requestMs:0,changeCount:0,effectiveDeltaDiagnostics:c,deleteCount:d,currentTaskIds:e.payload.currentTaskIds,currentTaskWatermarks:e.payload.currentTaskWatermarks??new Map,currentTaskChangeKeys:e.payload.currentTaskChangeKeys??new Map,currentTaskRelationshipChangeKeys:e.payload.currentTaskRelationshipChangeKeys??new Map,currentTaxonomyChangeKey:e.payload.currentTaxonomyChangeKey??"",deleteTaskIds:e.payload.deleteTaskIds,currentInitiativeIds:e.payload.currentInitiativeIds,currentInitiativeWatermarks:e.payload.currentInitiativeWatermarks,currentWorkstreamIds:e.payload.currentWorkstreamIds,currentWorkstreamWatermarks:e.payload.currentWorkstreamWatermarks,currentAiProfileIds:e.payload.currentAiProfileIds,currentAiProfileWatermarks:e.payload.currentAiProfileWatermarks,currentAiProfileChangeKeys:e.payload.currentAiProfileChangeKeys??new Map,currentDocumentPaths:e.payload.currentDocumentPaths,deleteDocumentPaths:e.payload.deleteDocumentPaths,currentDocumentWatermarks:e.payload.currentDocumentWatermarks,currentAssetPaths:e.payload.currentAssetPaths,deleteAssetPaths:e.payload.deleteAssetPaths,currentAssetWatermarks:e.payload.currentAssetWatermarks,currentDocumentReviewSessionIds:e.payload.currentDocumentReviewSessionIds,deleteDocumentReviewSessionIds:e.payload.deleteDocumentReviewSessionIds,currentDocumentReviewSessionWatermarks:e.payload.currentDocumentReviewSessionWatermarks,currentDocumentReviewCommentIds:e.payload.currentDocumentReviewCommentIds,deleteDocumentReviewCommentIds:e.payload.deleteDocumentReviewCommentIds,currentDocumentReviewCommentWatermarks:e.payload.currentDocumentReviewCommentWatermarks,currentAnnotatedAttachmentSessionIds:e.payload.currentAnnotatedAttachmentSessionIds,deleteAnnotatedAttachmentSessionIds:e.payload.deleteAnnotatedAttachmentSessionIds,currentAnnotatedAttachmentSessionWatermarks:e.payload.currentAnnotatedAttachmentSessionWatermarks,currentTaskforceAgentIds:e.payload.currentTaskforceAgentIds??new Set,currentTaskforceAgentWatermarks:e.payload.currentTaskforceAgentWatermarks??new Map,currentTaskforceAgentSkillIds:e.payload.currentTaskforceAgentSkillIds??new Set,currentTaskforceAgentSkillWatermarks:e.payload.currentTaskforceAgentSkillWatermarks??new Map,currentAgentConversationIds:e.payload.currentAgentConversationIds??new Set,currentAgentConversationWatermarks:e.payload.currentAgentConversationWatermarks??new Map,currentTaskEventWatermarks:e.payload.currentTaskEventWatermarks,pushedWatermarks:new Map,pushedTaskChangeKeys:new Map,emittedEventIds:[],appliedTaskUpserts:[]};let g=a;if(typeof process<"u"&&Yc?.TASKFORCE_SYNC_KEY){const I=Yc.TASKFORCE_SYNC_KEY,E=[];for(const K of g)K.op==="document-upsert"&&typeof K.content=="string"?E.push({...K,content:await eb(K.content,I)}):K.op==="asset-upsert"&&typeof K.contentBase64=="string"&&K.contentBase64.length>0?E.push({...K,contentBase64:await eb(K.contentBase64,I)}):E.push(K);g=E}let h=Gx(e,a,g);if(i){let I=0;h={oversizedChangeIndex:null,batches:i.map(E=>E.map(K=>{const U={plain:K,safe:g[I],phase:YA(K),preparedIndex:I};return I+=1,U}))}}if(h.oversizedChangeIndex!==null){const I=a[h.oversizedChangeIndex];return{success:!1,status:413,error:`Workspace sync change ${h.oversizedChangeIndex+1} (${I.op}) exceeds the single-change transfer limit.`,transient:!1,requestMs:f,changeCount:l,deleteCount:d,currentTaskIds:e.payload.currentTaskIds,currentTaskWatermarks:e.payload.currentTaskWatermarks??new Map,currentTaskChangeKeys:e.payload.currentTaskChangeKeys??new Map,currentTaskRelationshipChangeKeys:e.payload.currentTaskRelationshipChangeKeys??new Map,currentTaxonomyChangeKey:e.payload.currentTaxonomyChangeKey??"",deleteTaskIds:e.payload.deleteTaskIds,currentInitiativeIds:e.payload.currentInitiativeIds,currentInitiativeWatermarks:e.payload.currentInitiativeWatermarks,currentWorkstreamIds:e.payload.currentWorkstreamIds,currentWorkstreamWatermarks:e.payload.currentWorkstreamWatermarks,currentAiProfileIds:e.payload.currentAiProfileIds,currentAiProfileWatermarks:e.payload.currentAiProfileWatermarks,currentAiProfileChangeKeys:e.payload.currentAiProfileChangeKeys??new Map,currentDocumentPaths:e.payload.currentDocumentPaths,deleteDocumentPaths:e.payload.deleteDocumentPaths,currentDocumentWatermarks:e.payload.currentDocumentWatermarks,currentAssetPaths:e.payload.currentAssetPaths,deleteAssetPaths:e.payload.deleteAssetPaths,currentAssetWatermarks:e.payload.currentAssetWatermarks,currentDocumentReviewSessionIds:e.payload.currentDocumentReviewSessionIds,deleteDocumentReviewSessionIds:e.payload.deleteDocumentReviewSessionIds,currentDocumentReviewSessionWatermarks:e.payload.currentDocumentReviewSessionWatermarks,currentDocumentReviewCommentIds:e.payload.currentDocumentReviewCommentIds,deleteDocumentReviewCommentIds:e.payload.deleteDocumentReviewCommentIds,currentDocumentReviewCommentWatermarks:e.payload.currentDocumentReviewCommentWatermarks,currentAnnotatedAttachmentSessionIds:e.payload.currentAnnotatedAttachmentSessionIds,deleteAnnotatedAttachmentSessionIds:e.payload.deleteAnnotatedAttachmentSessionIds,currentAnnotatedAttachmentSessionWatermarks:e.payload.currentAnnotatedAttachmentSessionWatermarks,currentTaskforceAgentIds:e.payload.currentTaskforceAgentIds??new Set,currentTaskforceAgentWatermarks:e.payload.currentTaskforceAgentWatermarks??new Map,currentTaskforceAgentSkillIds:e.payload.currentTaskforceAgentSkillIds??new Set,currentTaskforceAgentSkillWatermarks:e.payload.currentTaskforceAgentSkillWatermarks??new Map,currentAgentConversationIds:e.payload.currentAgentConversationIds??new Set,currentAgentConversationWatermarks:e.payload.currentAgentConversationWatermarks??new Map,currentTaskEventWatermarks:e.payload.currentTaskEventWatermarks,pushedWatermarks:new Map,pushedTaskChangeKeys:new Map,emittedEventIds:[],appliedTaskUpserts:[]}}const y=new Set,k=[];let v;if(s){if(v=[...s.batchOperationIdentities],v.length!==h.batches.length||new Set(v).size!==v.length||v.some(I=>!/^[a-f0-9]{64}$/.test(I)))throw new Error("Persisted V2 push prepared plan fingerprint does not match its frozen batches.")}else{v=await Promise.all(h.batches.map(E=>Wx(e.workspaceId,E.map(K=>K.plain),e.repairMode===!0)));const I=zx(e.payload.changes,a);s={contractVersion:sb,ownership:r,batches:h.batches.map(E=>E.map(K=>I[K.preparedIndex])),batchOperationIdentities:[...v]}}const C=GA(v),S=e.acknowledgedNonApplyingBatchOperationIdentities||[];if(new Set(S).size!==S.length)throw new Error("Persisted V2 push batch acknowledgement state does not match the frozen push plan.");for(const I of S){const E=v.indexOf(I);if(E>=0&&Ch(h.batches[E].map(K=>K.plain)).length>0)throw new Error("Persisted V2 push batch acknowledgement state does not match the frozen push plan.")}const w=S.filter(I=>{const E=v.indexOf(I);return E>=0&&Ch(h.batches[E].map(K=>K.plain)).length===0}),_=e.preparedPlan?[]:S.filter(I=>!w.includes(I));s&&!e.preparedPlan&&await e.onPreparedPlan?.({plan:s,acknowledgedOperationIdentities:w,replayedLegacyAcknowledgementIdentities:_});const M=new Set(w);if(e.preparedPlan&&M.size!==S.length)throw new Error("Persisted V2 push batch acknowledgement state does not match the frozen push plan.");let R=0,P=0;const b=[],$=async I=>{if(b.length===0)return;const E=b.splice(0);await t.abandonTransferReceipts({workspaceId:e.workspaceId,receipts:E,errorCode:I})};try{for(const[I,E]of h.batches.entries()){const K=E.map(Re=>Re.plain),U=E.map(Re=>Re.safe),L=Ch(K),D=v[I];if(M.has(D)){R+=1,P+=K.length;continue}const ie=async()=>{const Re=Date.now(),je=await t.pushWorkspaceChanges({workspaceId:e.workspaceId,idempotencyKey:D,pushBoundary:C,changes:U,ownership:r,repairMode:e.repairMode===!0});return f+=Date.now()-Re,je};let H=await ie(),be=ya(H.data),Z=H.status===409&&be.code==="SYNC_PUSH_IN_PROGRESS";if(!H.ok&&!Z&&(H.status===403||H.status===409)&&(await e.ensureCloudWorkspaceReadyForSync()).success&&(H=await ie(),be=ya(H.data),Z=H.status===409&&be.code==="SYNC_PUSH_IN_PROGRESS"),H.transferReceipt&&b.push(H.transferReceipt),!H.ok){await $("WORKSPACE_SYNC_V2_PUSH_ATTEMPT_FAILED");const Re=ya(H.data),je=Array.from(new Set(K.map(ue=>ue.op))),ye=K.filter(Vx).length;return{success:!1,status:H.status,error:typeof Re.error=="string"?Re.error:void 0,code:typeof Re.code=="string"?Re.code:void 0,batchProgress:{totalBatches:h.batches.length,completedBatches:R,completedChanges:P,failedBatchIndex:I,failedChangeCount:K.length,failedOperations:je,failureDomain:ye===K.length?"content":ye===0?"metadata":"mixed"},retryAfterMs:H.retryAfterMs,transient:Z||Go(H.status),requestMs:f,changeCount:l,deleteCount:d,currentTaskIds:e.payload.currentTaskIds,currentTaskWatermarks:e.payload.currentTaskWatermarks??new Map,currentTaskChangeKeys:e.payload.currentTaskChangeKeys??new Map,currentTaskRelationshipChangeKeys:e.payload.currentTaskRelationshipChangeKeys??new Map,currentTaxonomyChangeKey:e.payload.currentTaxonomyChangeKey??"",deleteTaskIds:e.payload.deleteTaskIds,currentInitiativeIds:e.payload.currentInitiativeIds,currentInitiativeWatermarks:e.payload.currentInitiativeWatermarks,currentWorkstreamIds:e.payload.currentWorkstreamIds,currentWorkstreamWatermarks:e.payload.currentWorkstreamWatermarks,currentAiProfileIds:e.payload.currentAiProfileIds,currentAiProfileWatermarks:e.payload.currentAiProfileWatermarks,currentAiProfileChangeKeys:e.payload.currentAiProfileChangeKeys??new Map,currentDocumentPaths:e.payload.currentDocumentPaths,deleteDocumentPaths:e.payload.deleteDocumentPaths,currentDocumentWatermarks:e.payload.currentDocumentWatermarks,currentAssetPaths:e.payload.currentAssetPaths,deleteAssetPaths:e.payload.deleteAssetPaths,currentAssetWatermarks:e.payload.currentAssetWatermarks,currentDocumentReviewSessionIds:e.payload.currentDocumentReviewSessionIds,deleteDocumentReviewSessionIds:e.payload.deleteDocumentReviewSessionIds,currentDocumentReviewSessionWatermarks:e.payload.currentDocumentReviewSessionWatermarks,currentDocumentReviewCommentIds:e.payload.currentDocumentReviewCommentIds,deleteDocumentReviewCommentIds:e.payload.deleteDocumentReviewCommentIds,currentDocumentReviewCommentWatermarks:e.payload.currentDocumentReviewCommentWatermarks,currentAnnotatedAttachmentSessionIds:e.payload.currentAnnotatedAttachmentSessionIds,deleteAnnotatedAttachmentSessionIds:e.payload.deleteAnnotatedAttachmentSessionIds,currentAnnotatedAttachmentSessionWatermarks:e.payload.currentAnnotatedAttachmentSessionWatermarks,currentTaskforceAgentIds:e.payload.currentTaskforceAgentIds??new Set,currentTaskforceAgentWatermarks:e.payload.currentTaskforceAgentWatermarks??new Map,currentTaskforceAgentSkillIds:e.payload.currentTaskforceAgentSkillIds??new Set,currentTaskforceAgentSkillWatermarks:e.payload.currentTaskforceAgentSkillWatermarks??new Map,currentAgentConversationIds:e.payload.currentAgentConversationIds??new Set,currentAgentConversationWatermarks:e.payload.currentAgentConversationWatermarks??new Map,currentTaskEventWatermarks:e.payload.currentTaskEventWatermarks,pushedWatermarks:new Map,pushedTaskChangeKeys:new Map,emittedEventIds:[],appliedTaskUpserts:[]}}const me=ya(H.data);if(Array.isArray(me.emittedEventIds))for(const Re of me.emittedEventIds.map(je=>String(je||"").trim()).filter(Boolean))y.add(Re);const Ve=KA(me,L);if(k.push(...Ve),H.transferReceipt&&Ve.length===0){await t.acknowledgeNonApplyingTransferReceipts({workspaceId:e.workspaceId,receipts:[H.transferReceipt]});const Re=b.indexOf(H.transferReceipt);Re>=0&&b.splice(Re,1),M.add(D),await e.onNonApplyingBatchAcknowledged?.({operationIdentity:D,acknowledgedOperationIdentities:v.filter(je=>M.has(je))})}R+=1,P+=K.length}}catch(I){throw await $("WORKSPACE_SYNC_V2_PUSH_ATTEMPT_FAILED"),I}return{success:!0,syncedAt:new Date().toISOString(),requestMs:f,changeCount:l,batchProgress:{totalBatches:h.batches.length,completedBatches:R,completedChanges:P,failedBatchIndex:null,failedChangeCount:0,failedOperations:[],failureDomain:null},effectiveDeltaDiagnostics:c,deleteCount:d,currentTaskIds:e.payload.currentTaskIds,currentTaskWatermarks:e.payload.currentTaskWatermarks??new Map,currentTaskChangeKeys:e.payload.currentTaskChangeKeys??new Map,currentTaskRelationshipChangeKeys:e.payload.currentTaskRelationshipChangeKeys??new Map,currentTaxonomyChangeKey:e.payload.currentTaxonomyChangeKey??"",deleteTaskIds:e.payload.deleteTaskIds,currentInitiativeIds:e.payload.currentInitiativeIds,currentInitiativeWatermarks:e.payload.currentInitiativeWatermarks,currentWorkstreamIds:e.payload.currentWorkstreamIds,currentWorkstreamWatermarks:e.payload.currentWorkstreamWatermarks,currentAiProfileIds:e.payload.currentAiProfileIds,currentAiProfileWatermarks:e.payload.currentAiProfileWatermarks,currentAiProfileChangeKeys:e.payload.currentAiProfileChangeKeys??new Map,currentDocumentPaths:e.payload.currentDocumentPaths,deleteDocumentPaths:e.payload.deleteDocumentPaths,currentDocumentWatermarks:e.payload.currentDocumentWatermarks,currentAssetPaths:e.payload.currentAssetPaths,deleteAssetPaths:e.payload.deleteAssetPaths,currentAssetWatermarks:e.payload.currentAssetWatermarks,currentDocumentReviewSessionIds:e.payload.currentDocumentReviewSessionIds,deleteDocumentReviewSessionIds:e.payload.deleteDocumentReviewSessionIds,currentDocumentReviewSessionWatermarks:e.payload.currentDocumentReviewSessionWatermarks,currentDocumentReviewCommentIds:e.payload.currentDocumentReviewCommentIds,deleteDocumentReviewCommentIds:e.payload.deleteDocumentReviewCommentIds,currentDocumentReviewCommentWatermarks:e.payload.currentDocumentReviewCommentWatermarks,currentAnnotatedAttachmentSessionIds:e.payload.currentAnnotatedAttachmentSessionIds,deleteAnnotatedAttachmentSessionIds:e.payload.deleteAnnotatedAttachmentSessionIds,currentAnnotatedAttachmentSessionWatermarks:e.payload.currentAnnotatedAttachmentSessionWatermarks,currentTaskforceAgentIds:e.payload.currentTaskforceAgentIds??new Set,currentTaskforceAgentWatermarks:e.payload.currentTaskforceAgentWatermarks??new Map,currentTaskforceAgentSkillIds:e.payload.currentTaskforceAgentSkillIds??new Set,currentTaskforceAgentSkillWatermarks:e.payload.currentTaskforceAgentSkillWatermarks??new Map,currentAgentConversationIds:e.payload.currentAgentConversationIds??new Set,currentAgentConversationWatermarks:e.payload.currentAgentConversationWatermarks??new Map,currentTaskEventWatermarks:e.payload.currentTaskEventWatermarks,pushedWatermarks:e.payload.pushedWatermarks,pushedTaskChangeKeys:e.payload.pushedTaskChangeKeys??new Map,emittedEventIds:Array.from(y),appliedTaskUpserts:k,pushBoundary:C,pushTransferReceipts:b}}async function qx(e){const t=e.remoteServices||Av(e.resolveCloudAuthUrl);let r=[];const a=be=>{be.transferReceipt&&r.push(be.transferReceipt)},s=async be=>{if(r.length===0)return;const Z=r;await t.abandonTransferReceipts({workspaceId:e.workspaceId,receipts:Z,errorCode:be}),r=[]},i=e.localServices?.readContentManifest||FA,l=e.localServices?.applyV2Batch||HA,c=e.localServices?.listContentPullObligations||xA,d=e.localServices?.recordContentPullObligationFailures||RA,f=async(be,Z)=>{const me=await d(e.workspaceId,be,Z);if(!me.ok)throw new Error(String(me.data?.error||"Failed to persist content-pull retry state."))};let p=e.cursor,g=!0,h=0,y=0,k=0,v=0;const C=new Set;let S=!1,w=!1,_=!1,M=!1,R=!1,P=!1,b=!1,$=!1;const I=new Set,E=new Set,K=new Set;let U=null;const L={manifestEntries:0,bodiesRequested:0,bodiesTransferred:0,contentBytesTransferred:0,contentBytesAvoided:0,obligationsAttempted:0,obligationsResolved:0,obligationsRemaining:0},D=Number.isFinite(Number(e.maxPages))?Math.max(1,Math.floor(Number(e.maxPages))):20;let ie=new Map;const H=new Set;try{{const be=await c(e.workspaceId,100);if(!be.ok)throw new Error(String(be.data?.error||`Local content-pull obligation read failed (${be.status}).`));const Z=Array.isArray(be.data?.obligations)?be.data.obligations:[];Z.forEach(Ve=>{H.add(pc(Ve))});const me=Z.filter(Ve=>Dx(Ve));if(L.obligationsAttempted=me.length,me.length>0){const Ve=await t.pullWorkspaceContent({workspaceId:e.workspaceId,requests:me.map(({kind:Re,path:je})=>({kind:Re,path:je})),previousCursor:p});if(a(Ve),Ve.ok){const Re=Ve.data||{},je=Array.isArray(Re.changes)?Re.changes:[],ye=Array.isArray(Re.contentMetadata)?Re.contentMetadata:[],ue=new Map(ye.map(se=>[`${se.kind}:${se.path}`,se])),ve=new Map(me.map(se=>[pc(se),se]));if(ue.size!==ye.length||ye.some(se=>!ve.has(`${se.kind}:${se.path}`)))throw await f(me.map(pc),"Content response contained duplicate or unexpected authoritative metadata."),new Error("Workspace content obligation response contained invalid authoritative metadata.");const Pe=[],Le=[];for(const se of je){if(se.op!=="document-upsert"&&se.op!=="asset-upsert")throw await f(me.map(pc),`Content response contained invalid operation ${se.op}.`),new Error(`Workspace content obligation returned invalid operation: ${se.op}.`);const V=se.op==="document-upsert"?"document":"asset",W=`${V}:${se.path}`;if(!ve.has(W))throw await f(me.map(pc),`Content response contained unexpected body ${W}.`),new Error(`Workspace content obligation returned an unexpected body: ${W}.`);const z=ue.get(W);if(!z)throw await f([W],"Content response omitted authoritative metadata."),new Error(`Workspace content obligation omitted authoritative metadata: ${W}.`);if(Pe.includes(W))throw await f([W],"Content response contained a duplicate body."),new Error(`Workspace content obligation returned a duplicate body: ${W}.`);if(typeof process<"u"&&Yc?.TASKFORCE_SYNC_KEY)try{await _h(se,Yc.TASKFORCE_SYNC_KEY)}catch(Y){throw await f([W],String(Y?.message||"Content decryption failed.")),Y}const fe=await $h(V,se.op==="document-upsert"?se.content:se.contentBase64);if(fe.sha256!==String(z.sha256||"").toLowerCase()||fe.sizeBytes!==Number(z.sizeBytes)||String(z.updatedAt||"")<String(ve.get(W)?.sourceWatermark||"")||String(se.updatedAt||"")<String(ve.get(W)?.sourceWatermark||""))throw await f([W],"Authoritative content response was stale or failed verification."),new Error(`Workspace content obligation verification failed: ${W}.`);Pe.push(W);const ke=ve.get(W);Le.push({kind:V,path:se.path,resolution:"exact-version",sourceWatermark:ke.sourceWatermark,metadataFingerprint:ke.metadataFingerprint})}if(je.length>0){const se=r.length>0?t.buildV2ApplyCompletionGroup({workspaceId:e.workspaceId,previousCursor:p,nextCursor:p,receipts:r}):void 0;if(r.length>0&&!se)throw new Error("Content-obligation receipts did not produce an apply completion group.");let V;try{V=await l(e.workspaceId,je,{repairMode:e.repairMode===!0,excludedProjections:e.excludedProjections,contentPullResolutionClaims:Le,...se?{completionGroup:se}:{}})}catch(z){throw await f(Pe,String(z?.message||"Content obligation apply failed.")),z}if(!V.ok||ya(V.data).success===!1)throw await f(Pe,String(ya(V.data).error||"Workspace content obligation apply failed.")),new Error(String(ya(V.data).error||"Workspace content obligation apply failed."));r=[],L.obligationsResolved=Pe.length;const W=me.map(pc).filter(z=>!Pe.includes(z));W.length>0&&await f(W,"Authoritative content body remains unavailable.")}else{if(r.length>0){const se=t.buildV2ApplyCompletionGroup({workspaceId:e.workspaceId,previousCursor:p,nextCursor:p,receipts:r});if(!se)throw new Error("Unavailable content receipts did not produce an apply completion group.");const V=await l(e.workspaceId,[],{repairMode:e.repairMode===!0,excludedProjections:e.excludedProjections,completionGroup:se});if(!V.ok||ya(V.data).success===!1)throw new Error(String(ya(V.data).error||"Unavailable content receipt settlement failed."));r=[]}await f(me.map(pc),"Authoritative content body remains unavailable.")}}else await s("WORKSPACE_SYNC_CONTENT_OBLIGATION_RETRY"),await f(me.map(pc),String(ya(Ve.data).error||`Content pull failed (${Ve.status}).`))}L.obligationsRemaining=Math.max(0,Z.length-L.obligationsResolved)}if(e.contentMode==="manifest"){const be=await i(e.workspaceId);if(!be.ok)throw new Error(`Local workspace content manifest failed (${be.status||0}).`);const Z=Array.isArray(be.data?.entries)?be.data.entries:[];ie=new Map(Z.map(me=>[`${me.kind}:${me.path}`,me]))}for(;g&&h<D;){const be=async()=>{const W=Date.now(),z=await t.pullWorkspaceChanges({workspaceId:e.workspaceId,cursor:p,limit:e.bootstrap?500:200,repairMode:e.repairMode===!0,contentMode:e.contentMode,excludeInitiatives:e.excludeInitiatives,excludedProjections:e.excludedProjections});return k+=Date.now()-W,z};let Z=await be();if(a(Z),!Z.ok&&Z.status===403&&e.ensureCloudWorkspaceReadyForSync&&(await e.ensureCloudWorkspaceReadyForSync()).success&&(await s("WORKSPACE_SYNC_V2_PULL_RETRY"),Z=await be(),a(Z)),!Z.ok){await s("WORKSPACE_SYNC_V2_PULL_REJECTED");const W=ya(Z.data);return{success:!1,kind:"pull_http",status:Z.status,errorCode:typeof W.code=="string"?W.code:void 0,error:typeof W.error=="string"?W.error:void 0,retryAfterMs:Z.retryAfterMs,transient:Go(Z.status),cursor:p,pages:h,appliedChanges:y,pullRequestMs:k,applyMs:v,pulledDeleteTaskIds:C,pulledActiveUpserts:S,pulledArchivedUpserts:w,pulledTaskEventUpserts:_,pulledPlanningUpserts:M,pulledTaskforceAgentUpserts:R,pulledTaskforceAgentSkillUpserts:b,pulledAgentConversationUpserts:$,documentDecryptFailures:Array.from(I),serverDiagnostics:null}}const me=Z.data||{};if(!kx(me.excludedProjections,e.excludedProjections))return await s("SYNC_V2_PROJECTION_EXCLUSIONS_MISMATCH"),{success:!1,kind:"pull_http",status:502,errorCode:"SYNC_V2_PROJECTION_EXCLUSIONS_MISMATCH",error:"Cloud pull did not attest the requested v2 projection exclusions.",transient:!1,cursor:p,pages:h,appliedChanges:y,pullRequestMs:k,applyMs:v,pulledDeleteTaskIds:C,pulledActiveUpserts:S,pulledArchivedUpserts:w,pulledTaskEventUpserts:_,pulledPlanningUpserts:M,pulledTaskforceAgentUpserts:R,pulledTaskforceAgentSkillUpserts:b,pulledAgentConversationUpserts:$,documentDecryptFailures:Array.from(I),serverDiagnostics:null};let Ve=Array.isArray(me?.changes)?me.changes:[];const Re=new Map,je=[];if(e.contentMode==="manifest"){const W=[],z=[];for(const ke of Ve){if(ke.op!=="document-manifest"&&ke.op!=="asset-manifest"){z.push(ke);continue}const Y=ke.manifest;if(L.manifestEntries+=1,!Y.existsLocally){je.push({manifest:Y,sourceWatermark:Y.updatedAt}),H.add(`${Y.kind}:${Y.path}`);continue}const we=`${Y.kind}:${Y.path}`,q=Nx(Y,ie.get(we));q.shouldFetch?q.reasons.every(le=>le==="metadata-mismatch")?(z.push(ke),L.contentBytesAvoided+=Math.max(0,Y.sizeBytes)):(W.push({kind:Y.kind,path:Y.path}),Re.set(we,Y),L.bodiesRequested+=1):L.contentBytesAvoided+=Math.max(0,Y.sizeBytes)}const fe=[...W];for(;fe.length>0;){let ke=fe.splice(0,100);for(;ke.length>0;){const Y=await t.pullWorkspaceContent({workspaceId:e.workspaceId,requests:ke,previousCursor:p});if(!Y.ok)throw a(Y),new Error(`Workspace content pull failed (${Y.status||0}).`);a(Y);const we=Y.data||{},q=Array.isArray(we.changes)?we.changes:[],le=Array.isArray(we.missing)?we.missing:[];if(le.length>0){const re="path"in le[0]?le[0].path:le[0].assetId;throw new Error(`Workspace content changed or disappeared during reconciliation: ${le[0].kind}:${re}`)}z.push(...q);const $e=Array.isArray(we.remaining)?we.remaining:[];if(q.length===0&&$e.length>=ke.length)throw new Error("Workspace content pull made no progress.");ke=$e}}Ve=z}else{const W=[];for(const z of Ve){if(z.op!=="document-manifest"&&z.op!=="asset-manifest"){W.push(z);continue}je.push({manifest:z.manifest,sourceWatermark:z.manifest.updatedAt}),H.add(`${z.manifest.kind}:${z.manifest.path}`)}Ve=W}const ye=me?.diagnostics&&typeof me.diagnostics=="object"?me.diagnostics:null;U=ye;const ue=Array.isArray(me?.workspaceMembers),ve=ue?me.workspaceMembers:void 0;for(const W of Ve){if(W.op==="upsert"){W?.archived===!0||W?.task?.isArchived===!0?w=!0:S=!0;continue}if(W.op==="annotated-attachment-session-upsert"){const fe=String(W?.session?.id||"").trim();fe&&K.add(fe);continue}if(W.op==="task-event-upsert"||W.op==="entity-event-upsert"){_=!0;continue}if(W.op==="initiative-upsert"||W.op==="workstream-upsert"){M=!0;continue}if(W.op==="taskforce-agent-upsert"){R=!0;continue}if(W.op==="agent-role-upsert"){P=!0;continue}if(W.op==="taskforce-agent-skill-upsert"){b=!0;continue}if(W.op==="agent-conversation-upsert"){$=!0;continue}if(W.op==="document-upsert"){if(typeof W.content=="string"&&typeof process<"u"&&Yc?.TASKFORCE_SYNC_KEY)try{await _h(W,Yc.TASKFORCE_SYNC_KEY)}catch{const fe=String(W.path||"").trim();fe&&I.add(fe)}continue}if(W.op==="asset-upsert"){if(typeof W.contentBase64=="string"&&typeof process<"u"&&Yc?.TASKFORCE_SYNC_KEY)try{await _h(W,Yc.TASKFORCE_SYNC_KEY)}catch{const fe=String(W.path||"").trim();fe&&I.add(fe)}continue}if(W.op!=="delete")continue;const z=String(W.taskId||"").trim();z&&C.add(z)}if(e.contentMode==="manifest"&&Re.size>0){const W=new Set;for(const z of Ve){if(z.op!=="document-upsert"&&z.op!=="asset-upsert")continue;const fe=z.op==="document-upsert"?"document":"asset",ke=Re.get(`${fe}:${z.path}`);if(!ke)continue;const Y=await $h(fe,z.op==="document-upsert"?z.content:z.contentBase64);if(ke.sha256&&Y.sha256!==ke.sha256.toLowerCase()||Y.sizeBytes!==ke.sizeBytes)throw new Error(`Workspace content verification failed for ${fe}:${z.path}.`);W.add(`${fe}:${z.path}`),L.bodiesTransferred+=1,L.contentBytesTransferred+=Y.sizeBytes}if(W.size!==Re.size)throw new Error("Workspace content pull did not return every requested body.")}e.onPagePulled&&e.onPagePulled();const Pe=me&&"nextCursor"in me&&(me.nextCursor===null||typeof me.nextCursor=="string")?me.nextCursor:p,Le=Ve.flatMap(W=>W.op!=="document-delete"&&W.op!=="asset-delete"?[]:W.deletedAt?[{kind:W.op==="document-delete"?"document":"asset",path:W.path,resolution:"at-or-before-watermark",sourceWatermark:W.deletedAt}]:[]),se=e.bootstrap&&!me?.hasMore,V=r.length>0?t.buildV2ApplyCompletionGroup({workspaceId:e.workspaceId,previousCursor:p,nextCursor:Pe,receipts:r}):void 0;if(r.length>0&&!V)throw new Error("V2 sync transfer receipts did not produce an apply completion group.");if(Ve.length>0||je.length>0||ue||V||se){const W=Date.now(),z=await l(e.workspaceId,Ve,{...ue?{workspaceMembers:ve}:{},repairMode:e.repairMode===!0,excludedProjections:e.excludedProjections,...se?{bootstrapSnapshot:{currentAnnotatedAttachmentSessionIds:Array.from(K)}}:{},...V?{completionGroup:V}:{},...je.length>0?{contentPullObligations:je}:{},...Le.length>0?{contentPullResolutionClaims:Le}:{}}),fe=z.failures;if(!z.ok){v+=Date.now()-W,await s("WORKSPACE_SYNC_V2_APPLY_NOT_COMMITTED");const Y=ya(z.data);if(fe.some(le=>le.endsWith(":401")))return{success:!1,kind:"apply_auth",status:401,transient:!1,failures:fe,cursor:p,pages:h,appliedChanges:y,pullRequestMs:k,applyMs:v,pulledDeleteTaskIds:C,pulledActiveUpserts:S,pulledArchivedUpserts:w,pulledTaskEventUpserts:_,pulledPlanningUpserts:M,pulledTaskforceAgentUpserts:R,pulledTaskforceAgentSkillUpserts:b,pulledAgentConversationUpserts:$,documentDecryptFailures:Array.from(I),serverDiagnostics:ye};const q=fe.some(le=>{if(le.endsWith(":network"))return!0;const $e=le.split(":").pop()||"",re=Number.parseInt($e,10);return Number.isFinite(re)&&(re===429||re>=500)});return{success:!1,kind:"apply_all_candidates",status:z.status||void 0,transient:q,error:String(Y.error||"").trim()||void 0,failures:fe,hasTransientApplyFailure:q,cursor:p,pages:h,appliedChanges:y,pullRequestMs:k,applyMs:v,pulledDeleteTaskIds:C,pulledActiveUpserts:S,pulledArchivedUpserts:w,pulledTaskEventUpserts:_,pulledPlanningUpserts:M,pulledTaskforceAgentUpserts:R,pulledTaskforceAgentSkillUpserts:b,pulledAgentConversationUpserts:$,documentDecryptFailures:Array.from(I),emittedEventIds:Array.from(E),serverDiagnostics:U}}const ke=ya(z.data);if(ke.success===!1)return v+=Date.now()-W,await s("WORKSPACE_SYNC_V2_APPLY_NOT_COMMITTED"),{success:!1,kind:"apply_payload",transient:!1,error:String(ke.error||"Workspace sync apply failed."),cursor:p,pages:h,appliedChanges:y,pullRequestMs:k,applyMs:v,pulledDeleteTaskIds:C,pulledActiveUpserts:S,pulledArchivedUpserts:w,pulledTaskEventUpserts:_,pulledPlanningUpserts:M,pulledTaskforceAgentUpserts:R,pulledTaskforceAgentSkillUpserts:b,pulledAgentConversationUpserts:$,documentDecryptFailures:Array.from(I),emittedEventIds:Array.from(E),serverDiagnostics:U};if(v+=Date.now()-W,y+=Ve.length,Array.isArray(ke.emittedEventIds))for(const Y of ke.emittedEventIds)E.add(String(Y));Ve.some(Y=>Y.op==="ai-profile-upsert")&&e.onAiProfilesApplied?.(),e.onChangesApplied&&e.onChangesApplied(Ve.length),Le.forEach(Y=>{H.delete(pc(Y))})}r=[],me&&"nextCursor"in me&&(me.nextCursor===null||typeof me.nextCursor=="string")&&(p=me.nextCursor),g=!!me?.hasMore,h+=1}return{success:!0,hasMore:g,syncedAt:new Date().toISOString(),cursor:p||null,pages:h,appliedChanges:y,pullRequestMs:k,applyMs:v,pulledDeleteTaskIds:C,pulledActiveUpserts:S,pulledArchivedUpserts:w,pulledTaskEventUpserts:_,pulledPlanningUpserts:M,pulledTaskforceAgentUpserts:R,pulledAgentRoleUpserts:P,pulledTaskforceAgentSkillUpserts:b,pulledAgentConversationUpserts:$,documentDecryptFailures:Array.from(I),emittedEventIds:Array.from(E),serverDiagnostics:e.contentMode==="manifest"?{...U||{},contentReconciliation:L}:U}}catch(be){let Z=be;try{await s("WORKSPACE_SYNC_V2_APPLY_NOT_COMMITTED")}catch(me){Z=me}return{success:!1,kind:"exception",status:0,transient:!0,error:String(Z?.message||Z||"Workspace sync pull failed unexpectedly."),cursor:p||null,pages:h,appliedChanges:y,pullRequestMs:k,applyMs:v,pulledDeleteTaskIds:C,pulledActiveUpserts:S,pulledArchivedUpserts:w,pulledTaskEventUpserts:_,pulledPlanningUpserts:M,pulledTaskforceAgentUpserts:R,pulledTaskforceAgentSkillUpserts:b,pulledAgentConversationUpserts:$,documentDecryptFailures:Array.from(I),emittedEventIds:Array.from(E),serverDiagnostics:e.contentMode==="manifest"?{...U||{},contentReconciliation:L}:U}}}async function Yx(e){const t=await Ax(e.resolveCloudAuthUrl);if(!t.ok){const h=Number(t.status||0);return{success:!1,error:`Sync pull failed (${t.status})`,statusCode:t.status,retryAfterMs:t.retryAfterMs,transient:Go(h)}}const r=ya(t.data),a=r.settings&&typeof r.settings=="object"?r.settings:{},s=typeof r.updatedAt=="string"&&r.updatedAt.trim().length>0?r.updatedAt.trim():null,i=e.getLocalUpdatedAt(e.userId),l=i?Date.parse(i):NaN,c=s?Date.parse(s):NaN;if(!i&&e.preferCloudOnFirstSync&&Number.isFinite(c))return await e.applyRemoteSettings(a),{success:!0,mode:"pulled",updatedAt:s};if(Number.isFinite(c)&&(!Number.isFinite(l)||c>l))return await e.applyRemoteSettings(a),{success:!0,mode:"pulled",updatedAt:s};const d=i||new Date().toISOString(),f=await Cx(e.resolveCloudAuthUrl,{settings:e.buildLocalSettings(),updatedAt:d});if(!f.ok){const h=Number(f.status||0);return{success:!1,error:`Sync push failed (${f.status})`,statusCode:f.status,retryAfterMs:f.retryAfterMs,transient:Go(h)}}const p=ya(f.data);return{success:!0,mode:"pushed",updatedAt:typeof p.updatedAt=="string"&&p.updatedAt.trim().length>0?p.updatedAt.trim():d}}function Zx(e){const t=Math.max(1,Math.floor(Number(e)||1)),r=Math.min(12e4,1500*2**Math.max(0,t-1)),a=Math.floor(r*(.15*Math.random()));return r+a}function Jx(e){const t=String(e||"").trim().replace(/\\/g,"/");if(!t||t.startsWith("/"))return null;const r=t.split("/").filter(Boolean);return r.length===0||r.some(a=>a==="."||a==="..")?null:r.join("/")}function Qx(e){const t=Jx(e);return!t||!["users/","workspaces/","system/","tmp/","quarantine/"].some(a=>t.startsWith(a))?null:t}function Xx(e){return String(e||"").trim()}function eR(e,t){return Xx(e).replace(/[^a-zA-Z0-9._-]/g,"-").replace(/-+/g,"-").replace(/^-+|-+$/g,"")||t}function tR(e,t){const r=eR(t,"default"),a=String(e||"").replace(/\\/g,"/");return(a.startsWith(`workspaces/${r}/assets/ai-profiles/`)||a.startsWith(`workspaces/${r}/assets/images/ai-profiles/`))&&a.includes("/avatar/")}function rR(e,t){const r=String(e||"").trim();if(!r.startsWith("/api/taskforce/context/"))return null;const a=r.slice(23).split(/[?#]/,1)[0]||"";if(!a)return null;try{return t(decodeURIComponent(a))}catch{return null}}function nR(e,t){return tR(e,t)}function aR(e){const t=e.split("/").pop()||"",r=t.lastIndexOf("."),a=r>=0?t.slice(r).toLowerCase():"";return a===".png"?"image/png":a===".jpg"||a===".jpeg"?"image/jpeg":a===".webp"?"image/webp":a===".gif"?"image/gif":"application/octet-stream"}function sR(e){return String(e||"").match(/(^|\/)(asset-[a-f0-9]{32})(?=[^/]*$)/i)?.[2]}function oR(e,t,r){const a=new Map;for(const s of Array.isArray(e)?e:[]){const i=String(s?.updatedAt||s?.createdAt||"").trim();for(const l of[s?.avatarUrl,s?.avatarSourceUrl]){const c=rR(l,r);!c||!nR(c,t)||a.has(c)||a.set(c,{updatedAt:i,assetId:sR(c),originalFilename:c.split("/").pop()||c,mimeType:aR(c)})}}return a}const iR=new Set(["assetId","path","caption","displayName","originalFilename","referenceNumber","referenceLabel","linkRole"]);[...iR];function bk(e,t){return e<t?-1:e>t?1:0}function Vo(e){return typeof e!="string"?void 0:e.trim()||void 0}function xf(e){if(e!==void 0){if(!Array.isArray(e))throw new Error("Planning comments must be an array.");return e.map((t,r)=>{if(!t||typeof t!="object"||Array.isArray(t))throw new Error(`Planning comment ${r} must be an object.`);const a=t,s=Vo(a.id),i=Vo(a.author),l=Date.parse(String(a.timestamp||"").trim());if(!s||!i||!Number.isFinite(l))throw new Error(`Planning comment ${r} has invalid identity, author, or timestamp.`);const c=Vo(a.submittedAuthor);return{id:s,author:i,...c?{submittedAuthor:c}:{},text:String(a.text||""),timestamp:new Date(l).toISOString()}}).sort((t,r)=>bk(t.timestamp,r.timestamp)||bk(t.id,r.id))}}function Rf(e){if(e!==void 0){if(!Array.isArray(e))throw new Error("Planning attachments must be an array.");return e.map((t,r)=>{if(typeof t=="string"){const h=t.trim();if(!h)throw new Error(`Planning attachment ${r} path is required.`);return h}if(!t||typeof t!="object"||Array.isArray(t))throw new Error(`Planning attachment ${r} must be a path or object.`);const a=t,s=Vo(a.path);if(!s)throw new Error(`Planning attachment ${r} path is required.`);const i=Vo(a.fsPath),l=Vo(a.timestamp),c=a.assetId===null?null:Vo(a.assetId),d=a.referenceNumber===null?null:Number.isFinite(Number(a.referenceNumber))?Math.max(1,Math.floor(Number(a.referenceNumber))):void 0,f=a.referenceLabel===null?null:Vo(a.referenceLabel),p=a.taskId===null?null:Vo(a.taskId),g=a.linkRole==="attachment"||a.linkRole==="image"||a.linkRole==="reference"?a.linkRole:void 0;return{path:s,...i?{fsPath:i}:{},...typeof a.caption=="string"?{caption:a.caption}:{},...typeof a.displayName=="string"?{displayName:a.displayName}:{},...typeof a.originalFilename=="string"?{originalFilename:a.originalFilename}:{},...l?{timestamp:l}:{},...c!==void 0?{assetId:c}:{},...d!==void 0?{referenceNumber:d}:{},...f!==void 0?{referenceLabel:f}:{},...p!==void 0?{taskId:p}:{},...g?{linkRole:g}:{}}})}}function cR(e){if(e===void 0)return[];if(!Array.isArray(e))throw new Error("Planning attachments must be an array.");return e.map((t,r)=>{if(!t||typeof t!="object"||Array.isArray(t))throw new Error(`Durable planning attachment ${r} must be a canonical asset link.`);const a=t,s=Vo(a.assetId),i=Vo(a.path);if(!s||!i)throw new Error(`Durable planning attachment ${r} requires assetId and path.`);const l=a.referenceNumber===null?null:Number.isInteger(a.referenceNumber)&&Number(a.referenceNumber)>0?Number(a.referenceNumber):void 0,c=a.referenceLabel===null?null:Vo(a.referenceLabel),d=a.linkRole==="attachment"||a.linkRole==="image"||a.linkRole==="reference"?a.linkRole:void 0;return{assetId:s,path:i,...typeof a.caption=="string"?{caption:a.caption}:{},...typeof a.displayName=="string"?{displayName:a.displayName}:{},...typeof a.originalFilename=="string"?{originalFilename:a.originalFilename}:{},...l!==void 0?{referenceNumber:l}:{},...c!==void 0?{referenceLabel:c}:{},...d?{linkRole:d}:{}}}).sort((t,r)=>bk(`${t.assetId}\0${t.linkRole||""}\0${t.path}\0${JSON.stringify(t)}`,`${r.assetId}\0${r.linkRole||""}\0${r.path}\0${JSON.stringify(r)}`))}function lR(e){return Array.isArray(e)?e.slice(0,24).flatMap(t=>{if(!t||typeof t!="object"||Array.isArray(t))return[];const r=t,a=String(r.name||"").trim();if(!a)return[];const s=String(r.resultText||"").trim().slice(0,4e3);return[{name:a.slice(0,120),...r.arguments&&typeof r.arguments=="object"&&!Array.isArray(r.arguments)?{arguments:r.arguments}:{},ok:r.ok!==!1,...s?{resultText:s}:{}}]}):[]}function dR(e){return Array.isArray(e)?e.flatMap(t=>{if(!t||typeof t!="object"||Array.isArray(t))return[];const r=t,a=r.role==="assistant"?"assistant":r.role==="user"?"user":null,s=String(r.content||"").trim();if(!a||!s)return[];const i={role:a,content:s};for(const c of["agentId","agentName","providerKey","providerLabel","modelKey","modelLabel","modelId"]){const d=String(r[c]||"").trim();d&&(i[c]=d)}const l=lR(r.toolActivity);return a==="assistant"&&l.length>0&&(i.toolActivity=l),[i]}):[]}const uR=["chat_app","ide","cli","coding_tool","agent"],pR={chat_app:"Chat App",ide:"IDE",cli:"CLI",coding_tool:"Coding Tool",agent:"Agent"},fR={chat_app:"Chat Apps",ide:"IDEs",cli:"CLI",coding_tool:"Coding Tools",agent:"Agents",unclassified:"Unclassified"};function mR(e){return typeof e=="string"&&uR.includes(e)}function ZA(e){if(typeof e!="string")return null;const t=e.trim();return t==="other"?"agent":mR(t)?t:null}function bX(e){return pR[e]}function SX(e){return e??"unclassified"}function AX(e){return fR[e]}const hR=["cloud_metered","local_unmetered"],gR={cloud_metered:"Cloud MCP",local_unmetered:"Local MCP"};function yR(e){return typeof e=="string"&&hR.includes(e)}function JA(e){if(typeof e!="string")return null;const t=e.trim();return yR(t)?t:null}function CX(e){return gR[e]}function Jc(e){if(e==null)return;const t=String(e).trim();return t.length>0?t:void 0}function On(e){if(e==null)return null;const t=String(e).trim();return t.length>0?t:null}function Pf(e){return Jc(e)}function wc(e){return On(e)}function ms(e){return On(e)}function Tu(e){const t=On(e);return t&&t.startsWith("/api/taskforce/context/")?t:null}function Ly(e){return Jc(e)}function Vm(e){if(e!==void 0)return On(e)}function kR(e){return typeof e=="boolean"?e:void 0}function Gm(e,t){if(e===void 0)return;if(e===null||e==="")return t?.nullable?null:void 0;const r=typeof e=="number"?e:Number(e);if(!Number.isFinite(r))return t?.nullable?null:void 0;const a=Math.floor(r);return Number.isFinite(t?.min)&&a<Number(t?.min)?t?.nullable?null:void 0:a}function vR(e){if(!e||typeof e!="object"||Array.isArray(e))return;const r=Object.entries(e).reduce((a,[s,i])=>s==="approach"?a:Array.isArray(i)?(a[s]=i.map(l=>String(l??"")),a):(i==null||(a[s]=String(i)),a),{});return Object.keys(r).length>0?r:{}}function wR(e){if(Array.isArray(e))return e.map(t=>{const r=t;return{id:r.id,author:r.author,...r.submittedAuthor===void 0?{}:{submittedAuthor:r.submittedAuthor},text:r.text,timestamp:r.timestamp}})}function bR(e){return Array.isArray(e)?e:void 0}function SR(e){return Array.isArray(e)?e:void 0}function QA(e){const t=e&&typeof e=="object"?e:{};return{id:String(t.id||"").trim(),title:String(t.title||"").trim(),description:t.description===void 0?void 0:t.description||null,status:String(t.status||"task").trim()||"task",priority:Gm(t.priority,{min:1})??void 0,complexity:Gm(t.complexity,{min:1,nullable:!0}),type:String(t.type||"").trim(),category:String(t.category||"").trim(),canceledReason:t.canceledReason===void 0?void 0:t.canceledReason||null,createdAt:String(t.createdAt||"").trim(),updatedAt:Ly(t.updatedAt),completedAt:t.completedAt===void 0?void 0:t.completedAt||null,isArchived:kR(t.isArchived),taxonomies:vR(t.taxonomies),createdBy:Ly(t.createdBy),assignee:Ly(t.assignee),scheduledDate:Vm(t.scheduledDate),dueDate:Vm(t.dueDate),scheduledWeekKey:Vm(t.scheduledWeekKey),orderInDay:Gm(t.orderInDay,{min:0,nullable:!0}),workstreamId:Vm(t.workstreamId),referenceNumber:Gm(t.referenceNumber,{min:1,nullable:!0}),comments:wR(t.comments),attachments:bR(t.attachments),checklistItems:SR(t.checklistItems)}}function AR(e){if(!e||typeof e!="object"||Array.isArray(e))return{};const t=Object.entries(e).filter(([a])=>String(a||"").trim().length>0).sort(([a],[s])=>a.localeCompare(s)),r={};for(const[a,s]of t){if(Array.isArray(s)){r[a]=s.map(i=>String(i??"")).sort((i,l)=>i.localeCompare(l));continue}s!=null&&(r[a]=String(s))}return r}function CR(e){return Array.isArray(e)?e.map(t=>{const r=t&&typeof t=="object"?t:{};return{id:String(r.id||"").trim(),title:String(r.title||"").trim(),isCompleted:!!r.isCompleted,order:r.order===void 0||r.order===null?"":String(r.order)}}).sort((t,r)=>{const a=Number.parseInt(t.order,10),s=Number.parseInt(r.order,10);return Number.isFinite(a)&&Number.isFinite(s)&&a!==s?a-s:t.title!==r.title?t.title.localeCompare(r.title):t.id.localeCompare(r.id)}):[]}function _R(e){return Array.isArray(e)?e.map(t=>{const r=t&&typeof t=="object"?t:null;return{id:String(r?.id||"").trim(),author:String(r?.author||"").trim(),submittedAuthor:Jc(r?.submittedAuthor)||"",text:String(r?.text||""),timestamp:ms(r?.timestamp)||"",actor:r?.actor??null}}).sort((t,r)=>t.timestamp!==r.timestamp?t.timestamp.localeCompare(r.timestamp):t.id!==r.id?t.id.localeCompare(r.id):t.author!==r.author?t.author.localeCompare(r.author):t.text.localeCompare(r.text)):[]}function IR(e){return Array.isArray(e)?e.map(t=>{if(typeof t=="string")return{path:t.trim(),fsPath:"",caption:"",displayName:"",originalFilename:"",assetId:"",referenceNumber:"",taskId:"",timestamp:""};const r=t&&typeof t=="object"?t:null;return{path:String(r?.path||"").trim(),fsPath:Jc(r?.fsPath)||"",caption:Jc(r?.caption)||"",displayName:Jc(r?.displayName)||"",originalFilename:Jc(r?.originalFilename)||"",assetId:Pf(r?.assetId)||"",referenceNumber:r?.referenceNumber===void 0||r.referenceNumber===null?"":String(r.referenceNumber),taskId:wc(r?.taskId)||"",timestamp:ms(r?.timestamp)||""}}).sort((t,r)=>t.path!==r.path?t.path.localeCompare(r.path):t.assetId!==r.assetId?t.assetId.localeCompare(r.assetId):t.timestamp!==r.timestamp?t.timestamp.localeCompare(r.timestamp):JSON.stringify(t).localeCompare(JSON.stringify(r))):[]}function TR(e,t){const r=QA(e);return JSON.stringify({id:r.id,title:r.title,description:On(r.description)||"",category:r.category,type:r.type,priority:r.priority===void 0||r.priority===null?"":String(r.priority),complexity:r.complexity===void 0||r.complexity===null?"":String(r.complexity),status:r.status,canceledReason:On(r.canceledReason)||"",createdAt:r.createdAt,completedAt:ms(r.completedAt)||"",taxonomies:AR(r.taxonomies),createdBy:Pf(r.createdBy)||"",assignee:Pf(r.assignee)||"",scheduledDate:On(r.scheduledDate)||"",dueDate:On(r.dueDate)||"",scheduledWeekKey:On(r.scheduledWeekKey)||"",orderInDay:r.orderInDay===void 0||r.orderInDay===null?"":String(r.orderInDay),workstreamId:wc(r.workstreamId)||"",referenceNumber:r.referenceNumber===void 0||r.referenceNumber===null?"":String(r.referenceNumber),comments:_R(r.comments),attachments:IR(r.attachments),checklistItems:CR(r.checklistItems),isArchived:t?"1":"0"})}function xR(...e){return e.reduce((t,r)=>{const a=ms(r)||"";return t?a&&a>t?a:t:a},"")}function RR(e){const t=e||{};return xR(t.createdAt,t.updatedAt,t.lastActiveAt,t.colorUpdatedAt,t.archivedAt,t.rosterStateUpdatedAt)}function XA(e){const t=e||{};return JSON.stringify({id:String(t.id||"").trim(),workspaceId:String(t.workspaceId||"").trim(),profileToken:String(t.profileToken||"").trim(),name:String(t.name||"").trim(),username:String(t.username||"").trim(),icon:String(t.icon||"Bot").trim()||"Bot",color:String(t.color||"#8b5cf6").trim()||"#8b5cf6",colorSource:On(t.colorSource)||"",colorUpdatedAt:ms(t.colorUpdatedAt)||"",avatarUrl:Tu(t.avatarUrl)||"",avatarSourceUrl:Tu(t.avatarSourceUrl)||"",avatarRevision:Number.isFinite(Number(t.avatarRevision))?Math.max(0,Math.floor(Number(t.avatarRevision))):0,avatarUpdatedAt:ms(t.avatarUpdatedAt)||"",description:On(t.description)||"",role:On(t.role)||"",provider:On(t.provider)||"",model:On(t.model)||"",surfaceType:On(t.surfaceType)||"",seatScope:On(t.seatScope)||"",providerMetadata:t.providerMetadata&&typeof t.providerMetadata=="object"&&!Array.isArray(t.providerMetadata)?t.providerMetadata:null,archivedAt:ms(t.archivedAt)||"",archivedBy:Pf(t.archivedBy)||"",archivedReason:On(t.archivedReason)||"",mergedIntoProfileId:Pf(t.mergedIntoProfileId)||"",rosterStateUpdatedAt:ms(t.rosterStateUpdatedAt)||"",createdAt:ms(t.createdAt)||"",updatedAt:ms(t.updatedAt)||"",lastActiveAt:ms(t.lastActiveAt)||""})}function PR(e){return JSON.stringify(e.map(t=>XA(t)).sort())}function _v(e){return En(e||null)}function eC(e){return e.taxonomyState&&typeof e.taxonomyState=="object"?En({taxonomyState:e.taxonomyState}):Array.isArray(e.taxonomies)?En({taxonomies:e.taxonomies}):""}const Ho={kind:"task",getId:e=>String(e?.id||"").trim(),getWatermark:e=>String(e?.updatedAt||e?.createdAt||"").trim(),getChangeKey:e=>TR(e,!!e?.isArchived)},mf={kind:"ai-profile",getId:e=>String(e?.id||"").trim(),getWatermark:e=>RR(e),getChangeKey:e=>XA(e)};function db(e,t,r){const a=e.getId(t);if(!a)return!1;const s=e.getChangeKey(t),i=r?.watermarks;if(!i||i.size===0||!i.has(a))return!0;const c=r?.changeKeys?.get(a);return typeof c=="string"?c!==s:(i.get(a)||"")!==s}function ub(e){return QA(e)}function pb(e,t){const r=e??t;return new Set(Array.from(r).map(a=>String(a||"").trim()).filter(a=>a.length>0))}function ER(e){return[...e].sort((t,r)=>{const a=String(t?.createdAt||"").trim(),s=String(r?.createdAt||"").trim(),i=a.localeCompare(s);return i!==0?i:String(t?.id||"").trim().localeCompare(String(r?.id||"").trim())})}function fb(e){return[...e].sort((t,r)=>{const a=String(t?.id||"").trim(),s=String(r?.id||"").trim();return a.localeCompare(s)})}function NR(e){const t=new Date().toISOString(),r=new Set(Array.from(e.pendingDeletedTaskIds).map(u=>String(u||"").trim()).filter(u=>u.length>0)),a=new Map(Array.from(e.pendingDeletedTaskWatermarks||new Map).map(([u,ht])=>[String(u||"").trim(),String(ht||"").trim()]).filter(([u,ht])=>u.length>0&&Number.isFinite(Date.parse(ht)))),s=new Map((e.deletedTasks||[]).map(u=>[String(u.taskId||"").trim(),u])),i=u=>{const ht=s.get(u);return{op:"delete",taskId:u,deletedAt:ht?.deletedAt||a.get(u)||t,...ht?{actor:ht.actor,actorType:ht.actorType,source:ht.source,details:ht.details}:{}}},l=e.lastPushedWatermarks,c=e.lastPushedTaskChangeKeys,d=(u,ht)=>(u?.referenceNumber===void 0||u?.referenceNumber===null)&&Number.isFinite(Number(u?.localReferenceNumber))?!0:db(Ho,{...u,isArchived:ht},{watermarks:l,changeKeys:c}),f=fb(e.tasks||[]),p=fb(e.archivedTasks||[]),g=new Map,h=new Map,y=new Map,k=new Map,v=f.filter(u=>!r.has(String(u?.id||"").trim())&&d(u,!1)).map(u=>{const ht=String(u?.id||"").trim(),yr=Ho.getWatermark(u),Er=Ho.getChangeKey({...u,isArchived:!1});return ht&&(y.set(ht,yr),k.set(ht,Er)),{op:"upsert",archived:!1,task:ub(u)}}),C=p.filter(u=>!r.has(String(u?.id||"").trim())&&d(u,!0)).map(u=>{const ht=String(u?.id||"").trim(),yr=Ho.getWatermark(u),Er=Ho.getChangeKey({...u,isArchived:!0});return ht&&(y.set(ht,yr),k.set(ht,Er)),{op:"upsert",archived:!0,task:ub(u)}}),S=new Set;for(const u of e.tasks||[]){const ht=String(u?.id||"").trim();ht&&(S.add(ht),g.set(ht,Ho.getWatermark(u)),h.set(ht,Ho.getChangeKey({...u,isArchived:!1})))}for(const u of e.archivedTasks||[]){const ht=String(u?.id||"").trim();ht&&(S.add(ht),g.set(ht,Ho.getWatermark(u)),h.set(ht,Ho.getChangeKey({...u,isArchived:!0})))}const w=Array.from(e.lastPushedTaskIds).filter(u=>!S.has(u)).map(u=>i(u)),_=Array.from(r).map(u=>i(u)),M=new Set([...w.map(u=>String(u.taskId)),..._.map(u=>String(u.taskId))]),R=e.lastPushedTaskRelationshipChangeKeys,P=new Map,b=(Array.isArray(e.taskRelationships)?e.taskRelationships:[]).filter(u=>u?.id&&Number.isFinite(Date.parse(String(u.updatedAt||"")))).map(u=>{const ht=String(u.id||"").trim(),yr=_v(u);return P.set(ht,yr),{op:u.deletedAt?"task-relationship-delete":"task-relationship-upsert",relationship:u,relationshipId:ht,changeKey:yr}}).filter(u=>R?.get(u.relationshipId)!==u.changeKey).map(({relationshipId:u,changeKey:ht,...yr})=>yr),$=new Set((Array.isArray(e.initiatives)?e.initiatives:[]).map(u=>String(u?.id||"").trim()).filter(u=>u.length>0)),I=new Map((Array.isArray(e.initiatives)?e.initiatives:[]).map(u=>[String(u?.id||"").trim(),String(u?.updatedAt||u?.createdAt||"").trim()]).filter(([u])=>u.length>0)),E=e.lastPushedInitiativeWatermarks,K=!E||E.size===0,U=(Array.isArray(e.initiatives)?e.initiatives:[]).map(u=>({op:"initiative-upsert",initiative:{id:String(u?.id||"").trim(),referenceNumber:Number.isFinite(Number(u?.referenceNumber))?Math.max(1,Math.floor(Number(u.referenceNumber))):null,referenceLabel:typeof u?.referenceLabel=="string"&&u.referenceLabel.trim().length>0?u.referenceLabel.trim():void 0,title:String(u?.title||"").trim(),description:typeof u?.description=="string"?u.description:null,ownerId:typeof u?.ownerId=="string"&&u.ownerId.trim().length>0?u.ownerId.trim():null,comments:xf(u?.comments),createdAt:String(u?.createdAt||"").trim(),updatedAt:String(u?.updatedAt||u?.createdAt||"").trim(),order:Number.isFinite(Number(u?.order))?Math.floor(Number(u.order)):null,attachments:Rf(u?.attachments),isArchived:!!u?.isArchived}})).filter(u=>u.initiative.id.length>0).filter(u=>K?!0:E.get(u.initiative.id)!==u.initiative.updatedAt),L=new Set((Array.isArray(e.workstreams)?e.workstreams:[]).map(u=>String(u?.id||"").trim()).filter(u=>u.length>0)),D=new Map((Array.isArray(e.workstreams)?e.workstreams:[]).map(u=>[String(u?.id||"").trim(),String(u?.updatedAt||u?.createdAt||"").trim()]).filter(([u])=>u.length>0)),ie=e.lastPushedWorkstreamWatermarks,H=!ie||ie.size===0,be=(Array.isArray(e.workstreams)?e.workstreams:[]).map(u=>({op:"workstream-upsert",workstream:{id:String(u?.id||"").trim(),referenceNumber:Number.isFinite(Number(u?.referenceNumber))?Math.max(1,Math.floor(Number(u.referenceNumber))):null,referenceLabel:typeof u?.referenceLabel=="string"&&u.referenceLabel.trim().length>0?u.referenceLabel.trim():void 0,initiativeId:typeof u?.initiativeId=="string"&&u.initiativeId.trim().length>0?u.initiativeId.trim():null,title:String(u?.title||"").trim(),description:typeof u?.description=="string"?u.description:null,ownerId:typeof u?.ownerId=="string"&&u.ownerId.trim().length>0?u.ownerId.trim():null,comments:xf(u?.comments),createdAt:String(u?.createdAt||"").trim(),updatedAt:String(u?.updatedAt||u?.createdAt||"").trim(),order:Number.isFinite(Number(u?.order))?Math.floor(Number(u.order)):null,attachments:Rf(u?.attachments),isArchived:!!u?.isArchived}})).filter(u=>u.workstream.id.length>0).filter(u=>H?!0:ie.get(u.workstream.id)!==u.workstream.updatedAt),Z=new Set((Array.isArray(e.aiProfiles)?e.aiProfiles:[]).map(u=>String(u?.id||"").trim()).filter(u=>u.length>0)),me=new Map((Array.isArray(e.aiProfiles)?e.aiProfiles:[]).map(u=>[String(u?.id||"").trim(),mf.getWatermark(u)]).filter(([u])=>u.length>0)),Ve=new Map((Array.isArray(e.aiProfiles)?e.aiProfiles:[]).map(u=>[String(u?.id||"").trim(),mf.getChangeKey(u)]).filter(([u])=>u.length>0)),Re=e.lastPushedAiProfileWatermarks,je=e.lastPushedAiProfileChangeKeys,ye=!Re||Re.size===0,ue=(Array.isArray(e.aiProfiles)?e.aiProfiles:[]).map(u=>({op:"ai-profile-upsert",profile:{id:String(u.id||"").trim(),workspaceId:String(u.workspaceId||"").trim(),profileToken:String(u.profileToken||"").trim(),name:String(u.name||"").trim(),username:String(u.username||"").trim(),icon:String(u.icon||"Bot").trim()||"Bot",color:String(u.color||"#8b5cf6").trim()||"#8b5cf6",colorSource:typeof u.colorSource=="string"?u.colorSource:null,colorUpdatedAt:typeof u.colorUpdatedAt=="string"?u.colorUpdatedAt:null,avatarUrl:Tu(u.avatarUrl),avatarSourceUrl:Tu(u.avatarSourceUrl),avatarRevision:Number.isFinite(Number(u.avatarRevision))?Math.max(0,Math.floor(Number(u.avatarRevision))):0,avatarUpdatedAt:typeof u.avatarUpdatedAt=="string"&&u.avatarUpdatedAt.trim().length>0?u.avatarUpdatedAt.trim():null,description:typeof u.description=="string"&&u.description.trim()||null,role:typeof u.role=="string"&&u.role.trim()||null,provider:typeof u.provider=="string"&&u.provider.trim()||null,model:typeof u.model=="string"&&u.model.trim()||null,surfaceType:ZA(u.surfaceType),seatScope:JA(u.seatScope),providerMetadata:u.providerMetadata&&typeof u.providerMetadata=="object"&&!Array.isArray(u.providerMetadata)?u.providerMetadata:null,archivedAt:typeof u.archivedAt=="string"&&u.archivedAt.trim().length>0?u.archivedAt.trim():null,archivedBy:typeof u.archivedBy=="string"&&u.archivedBy.trim().length>0?u.archivedBy.trim():null,archivedReason:typeof u.archivedReason=="string"&&u.archivedReason.trim()||null,mergedIntoProfileId:typeof u.mergedIntoProfileId=="string"&&u.mergedIntoProfileId.trim().length>0?u.mergedIntoProfileId.trim():null,rosterStateUpdatedAt:typeof u.rosterStateUpdatedAt=="string"&&u.rosterStateUpdatedAt.trim().length>0?u.rosterStateUpdatedAt.trim():null,createdAt:String(u.createdAt||"").trim(),updatedAt:String(u.updatedAt||u.createdAt||"").trim(),lastActiveAt:typeof u.lastActiveAt=="string"&&u.lastActiveAt.trim().length>0?u.lastActiveAt.trim():null}})).filter(u=>u.profile.id.length>0&&u.profile.workspaceId.length>0).filter(u=>ye?!0:db(mf,u.profile,{watermarks:Re,changeKeys:je})),ve=pb(e.currentDocumentPaths,(Array.isArray(e.documents)?e.documents:[]).map(u=>String(u?.path||"").trim())),Pe=new Set(Array.from(e.lastPushedDocumentPaths||new Set).map(u=>String(u||"").trim()).filter(u=>u.length>0&&!ve.has(u))),Le=new Map((Array.isArray(e.documents)?e.documents:[]).map(u=>[String(u?.path||"").trim(),String(u?.updatedAt||"").trim()]).filter(([u])=>u.length>0)),se=e.lastPushedDocumentWatermarks,V=!se||se.size===0,W=(Array.isArray(e.documents)?e.documents:[]).map(u=>({op:"document-upsert",path:String(u.path||"").trim(),updatedAt:String(u.updatedAt||"").trim(),content:typeof u.content=="string"?u.content:"",assetId:typeof u.assetId=="string"&&u.assetId.trim().length>0?u.assetId.trim():void 0,documentId:typeof u.documentId=="string"&&u.documentId.trim().length>0?u.documentId.trim():null,referenceNumber:Number.isFinite(Number(u.referenceNumber))?Math.max(1,Math.floor(Number(u.referenceNumber))):null,version:Number.isFinite(Number(u.version))?Math.max(1,Math.floor(Number(u.version))):null,taskId:typeof u.taskId=="string"&&u.taskId.trim().length>0?u.taskId.trim():null,linkTargetType:u.linkTargetType==="initiative"||u.linkTargetType==="workstream"||u.linkTargetType==="task"?u.linkTargetType:null,linkTargetId:typeof u.linkTargetId=="string"&&u.linkTargetId.trim().length>0?u.linkTargetId.trim():null,logicalName:typeof u.logicalName=="string"&&u.logicalName.trim().length>0?u.logicalName.trim():null,caption:typeof u.caption=="string"&&u.caption.trim().length>0?u.caption.trim():null,originalFilename:typeof u.originalFilename=="string"&&u.originalFilename.trim().length>0?u.originalFilename.trim():null,linkRole:u.linkRole==="reference"?"reference":"attachment",...u.links?{links:u.links}:{}})).filter(u=>u.path.length>0).filter(u=>V?!0:se.get(u.path)!==u.updatedAt),z=pb(e.currentAssetPaths,(Array.isArray(e.assets)?e.assets:[]).map(u=>String(u?.path||"").trim())),fe=new Set(Array.from(e.lastPushedAssetPaths||new Set).map(u=>String(u||"").trim()).filter(u=>u.length>0&&!z.has(u))),ke=new Map((Array.isArray(e.assets)?e.assets:[]).map(u=>[String(u?.path||"").trim(),String(u?.updatedAt||"").trim()]).filter(([u])=>u.length>0)),Y=e.lastPushedAssetWatermarks,we=!Y||Y.size===0,q=(Array.isArray(e.assets)?e.assets:[]).map(u=>({op:"asset-upsert",path:String(u.path||"").trim(),updatedAt:String(u.updatedAt||"").trim(),contentBase64:typeof u.contentBase64=="string"?u.contentBase64:"",assetId:typeof u.assetId=="string"&&u.assetId.trim().length>0?u.assetId.trim():void 0,kind:u.kind==="image"?"image":"file",mimeType:typeof u.mimeType=="string"&&u.mimeType.trim().length>0?u.mimeType.trim():"application/octet-stream",referenceNumber:Number.isFinite(Number(u.referenceNumber))?Math.max(1,Math.floor(Number(u.referenceNumber))):null,taskId:typeof u.taskId=="string"&&u.taskId.trim().length>0?u.taskId.trim():null,linkTargetType:u.linkTargetType==="initiative"||u.linkTargetType==="workstream"||u.linkTargetType==="task"?u.linkTargetType:null,linkTargetId:typeof u.linkTargetId=="string"&&u.linkTargetId.trim().length>0?u.linkTargetId.trim():null,logicalName:typeof u.logicalName=="string"&&u.logicalName.trim().length>0?u.logicalName.trim():null,caption:typeof u.caption=="string"&&u.caption.trim().length>0?u.caption.trim():null,originalFilename:typeof u.originalFilename=="string"&&u.originalFilename.trim().length>0?u.originalFilename.trim():null,linkRole:u.linkRole==="reference"?"reference":u.linkRole==="image"?"image":"attachment",...u.links?{links:u.links}:{}})).filter(u=>u.path.length>0&&u.contentBase64.length>0).filter(u=>we?!0:Y.get(u.path)!==u.updatedAt),le=Array.isArray(e.documentReviewSessions)?e.documentReviewSessions:[],$e=new Set(le.map(u=>String(u?.id||"").trim()).filter(u=>u.length>0)),re=new Set(le.filter(u=>String(u?.deletedAt||"").trim().length===0).map(u=>String(u?.id||"").trim()).filter(u=>u.length>0)),de=e.lastPushedDocumentReviewSessionIds||new Set,He=new Map(le.map(u=>[String(u?.id||"").trim(),String(u?.deletedAt||u?.updatedAt||u?.createdAt||"").trim()]).filter(([u])=>u.length>0)),ce=e.lastPushedDocumentReviewSessionWatermarks,pe=!ce||ce.size===0,xe=le.map(u=>({op:"document-review-session-upsert",session:{id:String(u.id||"").trim(),assetId:String(u.assetId||"").trim(),documentId:typeof u.documentId=="string"&&u.documentId.trim().length>0?u.documentId.trim():null,documentVersion:Number.isFinite(Number(u.documentVersion))?Math.max(1,Math.floor(Number(u.documentVersion))):null,title:typeof u.title=="string"&&u.title.trim().length>0?u.title.trim():null,status:u.status==="resolved"?"resolved":"open",comments:[],createdByActorId:typeof u.createdByActorId=="string"&&u.createdByActorId.trim().length>0?u.createdByActorId.trim():null,updatedByActorId:typeof u.updatedByActorId=="string"&&u.updatedByActorId.trim().length>0?u.updatedByActorId.trim():null,createdAt:String(u.createdAt||"").trim(),updatedAt:String(u.updatedAt||u.createdAt||"").trim(),deletedAt:typeof u.deletedAt=="string"&&u.deletedAt.trim().length>0?u.deletedAt.trim():null}})).filter(u=>u.session.id.length>0&&u.session.assetId.length>0&&!u.session.deletedAt).filter(u=>pe?!0:ce.get(u.session.id)!==u.session.updatedAt),N=le.filter(u=>String(u?.deletedAt||"").trim().length>0).map(u=>({sessionId:String(u?.id||"").trim(),deletedAt:String(u?.deletedAt||u?.updatedAt||u?.createdAt||t).trim()||t})).filter(u=>u.sessionId.length>0).filter(u=>pe?!0:ce.get(u.sessionId)!==u.deletedAt),X=Array.from(de).map(u=>String(u||"").trim()).filter(u=>u.length>0&&!$e.has(u)),Ae=[...X.map(u=>({sessionId:u,deletedAt:t})),...N],Te=new Set([...X,...N.map(u=>u.sessionId)]),he=Array.isArray(e.documentReviewComments)?e.documentReviewComments:[],ot=new Set(he.map(u=>String(u?.id||"").trim()).filter(u=>u.length>0)),We=new Set(he.filter(u=>String(u?.deletedAt||"").trim().length===0).map(u=>String(u?.id||"").trim()).filter(u=>u.length>0)),Xe=e.lastPushedDocumentReviewCommentIds||new Set,ae=new Map(he.map(u=>[String(u?.id||"").trim(),[u?.deletedAt,u?.threadStatusUpdatedAt,u?.updatedAt,u?.createdAt].map(ht=>String(ht||"").trim()).filter(ht=>Number.isFinite(Date.parse(ht))).sort().at(-1)||""]).filter(([u])=>u.length>0)),G=e.lastPushedDocumentReviewCommentWatermarks,Ie=!G||G.size===0,Fe=he.map(u=>({op:"document-review-comment-upsert",comment:{id:String(u.id||"").trim(),sessionId:String(u.sessionId||"").trim(),body:String(u.body||"").trim(),anchor:u.anchor??null,order:Number.isFinite(Number(u.order))?Math.max(0,Math.floor(Number(u.order))):0,authorActorId:typeof u.authorActorId=="string"&&u.authorActorId.trim().length>0?u.authorActorId.trim():null,updatedByActorId:typeof u.updatedByActorId=="string"&&u.updatedByActorId.trim().length>0?u.updatedByActorId.trim():null,deletedByActorId:typeof u.deletedByActorId=="string"&&u.deletedByActorId.trim().length>0?u.deletedByActorId.trim():null,parentCommentId:typeof u.parentCommentId=="string"&&u.parentCommentId.trim().length>0?u.parentCommentId.trim():null,threadStatus:u.parentCommentId?null:u.threadStatus==="resolved"?"resolved":"open",threadStatusUpdatedAt:typeof u.threadStatusUpdatedAt=="string"&&u.threadStatusUpdatedAt.trim().length>0?u.threadStatusUpdatedAt.trim():null,resolvedAt:typeof u.resolvedAt=="string"&&u.resolvedAt.trim().length>0?u.resolvedAt.trim():null,resolvedByActorId:typeof u.resolvedByActorId=="string"&&u.resolvedByActorId.trim().length>0?u.resolvedByActorId.trim():null,createdAt:String(u.createdAt||"").trim(),updatedAt:String(u.updatedAt||u.createdAt||"").trim(),deletedAt:typeof u.deletedAt=="string"&&u.deletedAt.trim().length>0?u.deletedAt.trim():null}})).filter(u=>u.comment.id.length>0&&u.comment.sessionId.length>0&&!u.comment.deletedAt).filter(u=>Ie?!0:G.get(u.comment.id)!==([u.comment.threadStatusUpdatedAt,u.comment.updatedAt].filter(ht=>typeof ht=="string"&&Number.isFinite(Date.parse(ht))).sort().at(-1)||u.comment.updatedAt)),it=he.filter(u=>String(u?.deletedAt||"").trim().length>0).map(u=>({commentId:String(u?.id||"").trim(),deletedAt:String(u?.deletedAt||u?.updatedAt||u?.createdAt||t).trim()||t,deletedByActorId:typeof u?.deletedByActorId=="string"&&u.deletedByActorId.trim().length>0?u.deletedByActorId.trim():null})).filter(u=>u.commentId.length>0).filter(u=>Ie?!0:G.get(u.commentId)!==u.deletedAt),Me=Array.from(Xe).map(u=>String(u||"").trim()).filter(u=>u.length>0&&!ot.has(u)),qe=[...Me.map(u=>({commentId:u,deletedAt:t,deletedByActorId:null})),...it],ge=new Set([...Me,...it.map(u=>u.commentId)]),_e=Array.isArray(e.annotatedAttachmentSessions)?e.annotatedAttachmentSessions:[],Be=new Set(_e.map(u=>String(u?.id||"").trim()).filter(u=>u.length>0)),Ge=new Set(_e.filter(u=>String(u?.deletedAt||"").trim().length===0).map(u=>String(u?.id||"").trim()).filter(u=>u.length>0)),F=e.lastPushedAnnotatedAttachmentSessionIds||new Set,Ne=new Map(_e.map(u=>[String(u?.id||"").trim(),String(u?.deletedAt||u?.updatedAt||u?.createdAt||"").trim()]).filter(([u])=>u.length>0)),Ce=e.lastPushedAnnotatedAttachmentSessionWatermarks,ut=!Ce||Ce.size===0,mt=_e.map(u=>({op:"annotated-attachment-session-upsert",session:{id:String(u.id||"").trim(),workspaceId:String(u.workspaceId||"").trim(),taskId:String(u.taskId||"").trim(),baseImageAssetId:String(u.baseImageAssetId||"").trim(),title:typeof u.title=="string"&&u.title.trim().length>0?u.title.trim():null,globalInstruction:typeof u.globalInstruction=="string"&&u.globalInstruction.trim().length>0?u.globalInstruction.trim():null,annotations:Array.isArray(u.annotations)?u.annotations:[],createdByActorId:typeof u.createdByActorId=="string"&&u.createdByActorId.trim().length>0?u.createdByActorId.trim():null,updatedByActorId:typeof u.updatedByActorId=="string"&&u.updatedByActorId.trim().length>0?u.updatedByActorId.trim():null,createdAt:String(u.createdAt||"").trim(),updatedAt:String(u.updatedAt||u.createdAt||"").trim(),deletedAt:typeof u.deletedAt=="string"&&u.deletedAt.trim().length>0?u.deletedAt.trim():null}})).filter(u=>u.session.id.length>0&&u.session.workspaceId.length>0&&u.session.baseImageAssetId.length>0&&!u.session.deletedAt).filter(u=>ut?!0:Ce.get(u.session.id)!==u.session.updatedAt),Ue=_e.filter(u=>String(u?.deletedAt||"").trim().length>0).map(u=>({sessionId:String(u?.id||"").trim(),deletedAt:String(u?.deletedAt||u?.updatedAt||u?.createdAt||t).trim()||t})).filter(u=>u.sessionId.length>0).filter(u=>ut?!0:Ce.get(u.sessionId)!==u.deletedAt),wt=Array.from(F).map(u=>String(u||"").trim()).filter(u=>u.length>0&&!Be.has(u)),kt=[...wt.map(u=>({sessionId:u,deletedAt:t})),...Ue],rt=new Set([...wt,...Ue.map(u=>u.sessionId)]),Ht=Array.isArray(e.taskforceAgents)?e.taskforceAgents:[],lr=new Set(Ht.filter(u=>String(u?.deletedAt||"").trim().length===0).map(u=>String(u?.id||"").trim()).filter(u=>u.length>0)),rr=new Map(Ht.map(u=>[String(u?.id||"").trim(),String(u?.deletedAt||u?.updatedAt||u?.createdAt||"").trim()]).filter(([u])=>u.length>0)),wr=e.lastPushedTaskforceAgentWatermarks,st=!wr||wr.size===0,zt=Ht.map(u=>({op:"taskforce-agent-upsert",agent:{id:String(u.id||"").trim(),tenantId:String(u.tenantId||"").trim()||void 0,workspaceId:String(u.workspaceId||"").trim(),...Object.prototype.hasOwnProperty.call(u,"definition")?{definition:u.definition,definitionRevision:Number(u.definitionRevision)||0,definitionHash:String(u.definitionHash||"").trim(),lifecycleStatus:String(u.lifecycleStatus||"").trim(),managedProfileId:typeof u.managedProfileId=="string"&&u.managedProfileId.trim()||null,configurationState:u.configurationState,configurationIssues:Array.isArray(u.configurationIssues)?u.configurationIssues:[]}:{},name:String(u.name||"").trim()||"Agent",modelProvider:"taskforce_hq",providerKey:String(u.providerKey||"").trim(),modelKey:String(u.modelKey||"").trim(),modelTier:String(u.modelTier||"").trim(),systemPrompt:typeof u.systemPrompt=="string"?u.systemPrompt:"",enabled:u.enabled!==!1,createdByUserId:typeof u.createdByUserId=="string"&&u.createdByUserId.trim().length>0?u.createdByUserId.trim():null,updatedByUserId:typeof u.updatedByUserId=="string"&&u.updatedByUserId.trim().length>0?u.updatedByUserId.trim():null,createdAt:String(u.createdAt||"").trim(),updatedAt:String(u.updatedAt||u.createdAt||"").trim(),deletedAt:typeof u.deletedAt=="string"&&u.deletedAt.trim().length>0?u.deletedAt.trim():null}})).filter(u=>u.agent.id.length>0&&u.agent.workspaceId.length>0).filter(u=>st?!0:wr.get(u.agent.id)!==(u.agent.deletedAt||u.agent.updatedAt)),Lt=Array.isArray(e.agentRoles)?e.agentRoles:[];Lt.forEach(u=>{const ht=String(u?.id||"").trim();if(!ht)return;const yr=`agent-role:${ht}`;String(u?.deletedAt||"").trim()||lr.add(yr),rr.set(yr,String(u?.deletedAt||u?.updatedAt||u?.createdAt||"").trim())});const Mt=Lt.map(u=>({op:"agent-role-upsert",role:{id:String(u.id||"").trim(),tenantId:String(u.tenantId||"").trim()||void 0,workspaceId:String(u.workspaceId||"").trim(),lifecycleStatus:u.lifecycleStatus==="retired"?"retired":"active",currentRevision:Number(u.currentRevision)||0,currentContentHash:String(u.currentContentHash||"").trim(),definition:u.definition,revisions:Array.isArray(u.revisions)?u.revisions:[],createdByActorId:typeof u.createdByActorId=="string"&&u.createdByActorId.trim()||null,updatedByActorId:typeof u.updatedByActorId=="string"&&u.updatedByActorId.trim()||null,createdAt:String(u.createdAt||"").trim(),updatedAt:String(u.updatedAt||u.createdAt||"").trim(),retiredAt:typeof u.retiredAt=="string"&&u.retiredAt.trim()||null,deletedAt:typeof u.deletedAt=="string"&&u.deletedAt.trim()||null}})).filter(u=>u.role.id.length>0&&u.role.workspaceId.length>0&&u.role.currentRevision>0&&u.role.currentContentHash.length>0).filter(u=>{if(st)return!0;const ht=`agent-role:${u.role.id}`;return wr.get(ht)!==(u.role.deletedAt||u.role.updatedAt)}),Ee=Array.isArray(e.taskforceAgentSkills)?e.taskforceAgentSkills:[],ct=new Set(Ee.map(u=>String(u?.id||"").trim()).filter(u=>u.length>0)),lt=new Map(Ee.map(u=>[String(u?.id||"").trim(),String(u?.updatedAt||u?.createdAt||"").trim()]).filter(([u])=>u.length>0)),Je=e.lastPushedTaskforceAgentSkillWatermarks,nt=!Je||Je.size===0,Ct=Ee.map(u=>({op:"taskforce-agent-skill-upsert",skill:{...u,id:String(u.id||"").trim(),tenantId:String(u.tenantId||"").trim()||void 0,workspaceId:String(u.workspaceId||"").trim(),revision:Number(u.revision),contentHash:String(u.contentHash||"").trim(),createdAt:String(u.createdAt||"").trim(),updatedAt:String(u.updatedAt||u.createdAt||"").trim()}})).filter(u=>u.skill.id.length>0&&u.skill.workspaceId.length>0&&Number.isInteger(u.skill.revision)&&u.skill.revision>0).filter(u=>nt?!0:Je.get(u.skill.id)!==u.skill.updatedAt),Rt=Array.isArray(e.agentConversations)?e.agentConversations:[],Dt=new Set(Rt.filter(u=>String(u?.deletedAt||"").trim().length===0).map(u=>String(u?.id||"").trim()).filter(u=>u.length>0)),It=new Map(Rt.map(u=>[String(u?.id||"").trim(),String(u?.deletedAt||u?.updatedAt||u?.createdAt||"").trim()]).filter(([u])=>u.length>0)),Qt=e.lastPushedAgentConversationWatermarks,ir=!Qt||Qt.size===0,dr=Rt.map(u=>({op:"agent-conversation-upsert",conversation:{id:String(u.id||"").trim(),tenantId:String(u.tenantId||"").trim()||void 0,workspaceId:String(u.workspaceId||"").trim(),agentId:String(u.agentId||"").trim(),taskId:typeof u.taskId=="string"&&u.taskId.trim().length>0?u.taskId.trim():null,title:String(u.title||"Agent chat").trim()||"Agent chat",messages:dR(u.messages),modelProvider:typeof u.modelProvider=="string"&&u.modelProvider.trim().length>0?u.modelProvider.trim():null,modelId:typeof u.modelId=="string"&&u.modelId.trim().length>0?u.modelId.trim():null,usage:u.usage&&typeof u.usage=="object"?u.usage:null,latencyMs:Number.isFinite(Number(u.latencyMs))?Number(u.latencyMs):null,createdByUserId:typeof u.createdByUserId=="string"&&u.createdByUserId.trim().length>0?u.createdByUserId.trim():null,updatedByUserId:typeof u.updatedByUserId=="string"&&u.updatedByUserId.trim().length>0?u.updatedByUserId.trim():null,createdAt:String(u.createdAt||"").trim(),updatedAt:String(u.updatedAt||u.createdAt||"").trim(),deletedAt:typeof u.deletedAt=="string"&&u.deletedAt.trim().length>0?u.deletedAt.trim():null}})).filter(u=>u.conversation.id.length>0&&u.conversation.workspaceId.length>0&&u.conversation.agentId.length>0).filter(u=>ir?!0:Qt.get(u.conversation.id)!==(u.conversation.deletedAt||u.conversation.updatedAt)),sr=ER(Array.isArray(e.taskEvents)?e.taskEvents:[]),pr=new Map(sr.map(u=>[String(u?.id||"").trim(),String(u?.createdAt||"").trim()]).filter(([u])=>u.length>0)),Jr=e.lastPushedTaskEventWatermarks,Tr=!Jr||Jr.size===0,br=sr.map(u=>{const ht=u.entityType==="initiative"||u.entityType==="workstream"?u.entityType:"task",yr=String(u.entityId||u.taskId||"").trim(),Er={id:String(u.id||"").trim(),workspaceId:String(u.workspaceId||"").trim(),entityType:ht,entityId:yr,taskId:ht==="task"?String(u.taskId||yr).trim():void 0,action:String(u.action||"").trim(),actor:String(u.actor||"system").trim()||"system",actorType:u.actorType==="ai"||u.actorType==="human"||u.actorType==="system"?u.actorType:"system",details:u.details&&typeof u.details=="object"&&!Array.isArray(u.details)?u.details:{},createdAt:String(u.createdAt||"").trim()};return ht==="task"?{op:"task-event-upsert",event:{...Er,entityType:"task",taskId:String(Er.taskId||yr).trim()}}:{op:"entity-event-upsert",event:{...Er,entityType:ht,taskId:void 0}}}).filter(u=>u.event.id.length>0&&u.event.entityId.length>0&&u.event.workspaceId.length>0&&u.event.action.length>0&&Number.isFinite(Date.parse(u.event.createdAt))).filter(u=>Tr?!0:Jr.get(u.event.id)!==u.event.createdAt),ur=eC({taxonomyState:e.taxonomyState,taxonomies:e.taxonomies}),Qr=ur.length>0&&e.lastPushedTaxonomyChangeKey!==ur,Hr=[...U,...be,...Qr&&e.taxonomyState&&typeof e.taxonomyState=="object"?[{op:"taxonomy-upsert",taxonomyState:e.taxonomyState,updatedAt:t}]:Qr&&Array.isArray(e.taxonomies)?[{op:"taxonomy-upsert",taxonomies:e.taxonomies,updatedAt:t}]:[],...ue,...W,...Array.from(Pe).map(u=>({op:"document-delete",path:u,deletedAt:t})),...q,...Array.from(fe).map(u=>({op:"asset-delete",path:u,deletedAt:t})),...xe,...Ae.map(u=>({op:"document-review-session-delete",sessionId:u.sessionId,deletedAt:u.deletedAt})),...Fe,...qe.map(u=>({op:"document-review-comment-delete",commentId:u.commentId,deletedAt:u.deletedAt,deletedByActorId:u.deletedByActorId})),...mt,...kt.map(u=>({op:"annotated-attachment-session-delete",sessionId:u.sessionId,deletedAt:u.deletedAt})),...zt,...Mt,...Ct,...dr,...br,...v,...C,...b.filter(u=>!u.relationship.deletedAt),...b.filter(u=>!!u.relationship.deletedAt),...Array.from(M).map(u=>i(u))],Gt=e.baselineResetReason??null,bt=u=>{const ht=u.upsertCount+(u.deleteCount||0);if(u.currentCount===0&&ht===0)return{mode:"none",reason:null,currentCount:0,baselineCount:u.baselineCount,changeCount:ht};if(u.alwaysFull)return{mode:ht>0?"send-all":"none",reason:ht>0?"full-state-domain":null,currentCount:u.currentCount,baselineCount:u.baselineCount,changeCount:ht};const yr=u.baselineCount===0&&u.currentCount>0&&u.upsertCount>=u.currentCount;return{mode:yr?"send-all":"delta",reason:yr?Gt||"missing-baseline":null,currentCount:u.currentCount,baselineCount:u.baselineCount,changeCount:ht}},gr=Hr.reduce((u,ht)=>{const yr=String(ht.op||"").trim();return u[yr]=(u[yr]||0)+1,u},{});return{changes:Hr,currentTaskIds:new Set(Array.from(S).filter(u=>!r.has(u))),currentTaskWatermarks:new Map(Array.from(g.entries()).filter(([u])=>!r.has(u))),currentTaskChangeKeys:new Map(Array.from(h.entries()).filter(([u])=>!r.has(u))),currentTaskRelationshipChangeKeys:P,currentTaxonomyChangeKey:ur,deleteTaskIds:M,currentInitiativeIds:$,currentInitiativeWatermarks:I,currentWorkstreamIds:L,currentWorkstreamWatermarks:D,currentAiProfileIds:Z,currentAiProfileWatermarks:me,currentAiProfileChangeKeys:Ve,currentDocumentPaths:ve,deleteDocumentPaths:Pe,currentDocumentWatermarks:Le,currentAssetPaths:z,deleteAssetPaths:fe,currentAssetWatermarks:ke,currentDocumentReviewSessionIds:re,deleteDocumentReviewSessionIds:Te,currentDocumentReviewSessionWatermarks:He,currentDocumentReviewCommentIds:We,deleteDocumentReviewCommentIds:ge,currentDocumentReviewCommentWatermarks:ae,currentAnnotatedAttachmentSessionIds:Ge,deleteAnnotatedAttachmentSessionIds:rt,currentAnnotatedAttachmentSessionWatermarks:Ne,currentTaskforceAgentIds:lr,currentTaskforceAgentWatermarks:rr,currentTaskforceAgentSkillIds:ct,currentTaskforceAgentSkillWatermarks:lt,currentAgentConversationIds:Dt,currentAgentConversationWatermarks:It,currentTaskEventWatermarks:pr,pushedWatermarks:y,pushedTaskChangeKeys:k,deltaDiagnostics:{totalChanges:Hr.length,byOp:gr,baselineResetReason:Gt,domains:{tasks:bt({currentCount:S.size,baselineCount:l?.size||0,upsertCount:v.length+C.length,deleteCount:M.size}),taskRelationships:bt({currentCount:P.size,baselineCount:R?.size||0,upsertCount:gr["task-relationship-upsert"]||0,deleteCount:gr["task-relationship-delete"]||0}),initiatives:bt({currentCount:$.size,baselineCount:E?.size||0,upsertCount:U.length}),workstreams:bt({currentCount:L.size,baselineCount:ie?.size||0,upsertCount:be.length}),aiProfiles:bt({currentCount:Z.size,baselineCount:Re?.size||0,upsertCount:ue.length}),documents:bt({currentCount:ve.size,baselineCount:se?.size||0,upsertCount:W.length,deleteCount:Pe.size}),assets:bt({currentCount:z.size,baselineCount:Y?.size||0,upsertCount:q.length,deleteCount:fe.size}),documentReviewSessions:bt({currentCount:re.size,baselineCount:ce?.size||0,upsertCount:xe.length,deleteCount:Te.size}),documentReviewComments:bt({currentCount:We.size,baselineCount:G?.size||0,upsertCount:Fe.length,deleteCount:ge.size}),annotatedAttachmentSessions:bt({currentCount:Ge.size,baselineCount:Ce?.size||0,upsertCount:mt.length,deleteCount:rt.size}),taskforceAgents:bt({currentCount:lr.size,baselineCount:wr?.size||0,upsertCount:zt.length+Mt.length}),taskforceAgentSkills:bt({currentCount:ct.size,baselineCount:Je?.size||0,upsertCount:Ct.length}),agentConversations:bt({currentCount:Dt.size,baselineCount:Qt?.size||0,upsertCount:dr.length}),taskEvents:bt({currentCount:pr.size,baselineCount:Jr?.size||0,upsertCount:br.length}),taxonomy:bt({currentCount:e.taxonomyState&&typeof e.taxonomyState=="object"||Array.isArray(e.taxonomies)?1:0,baselineCount:e.lastPushedTaxonomyChangeKey?1:0,upsertCount:gr["taxonomy-upsert"]||0})}}}}function jR(e){const t=(e.tasks||[]).map(c=>`${c.id}:${c.updatedAt||c.createdAt||""}:${c.status}`).sort(),r=(e.archivedTasks||[]).map(c=>`${c.id}:${c.updatedAt||c.createdAt||""}:${c.status}`).sort(),a=e.pendingDeletedTaskIds?Array.from(e.pendingDeletedTaskIds).sort():[],s=(e.taskRelationships||[]).filter(c=>String(c?.id||"").trim().length>0&&Number.isFinite(Date.parse(String(c?.updatedAt||"")))).map(c=>({id:String(c.id||"").trim(),changeKey:_v(c)})).sort((c,d)=>c.id.localeCompare(d.id)||c.changeKey.localeCompare(d.changeKey)),i=(e.initiatives||[]).map(c=>({id:String(c.id||"").trim(),updatedAt:String(c.updatedAt||c.createdAt||"").trim(),title:String(c.title||"").trim(),ownerId:typeof c.ownerId=="string"?c.ownerId.trim():"",comments:xf(c.comments)||[],attachments:Rf(c.attachments)||[],isArchived:!!c.isArchived})).filter(c=>c.id.length>0).sort((c,d)=>c.id.localeCompare(d.id)),l=(e.workstreams||[]).map(c=>({id:String(c.id||"").trim(),updatedAt:String(c.updatedAt||c.createdAt||"").trim(),initiativeId:typeof c.initiativeId=="string"?c.initiativeId.trim():"",title:String(c.title||"").trim(),ownerId:typeof c.ownerId=="string"?c.ownerId.trim():"",comments:xf(c.comments)||[],attachments:Rf(c.attachments)||[],isArchived:!!c.isArchived})).filter(c=>c.id.length>0).sort((c,d)=>c.id.localeCompare(d.id));return JSON.stringify({workspaceId:e.workspaceId,initiatives:i,workstreams:l,taskRelationships:s,taxonomyState:e.taxonomyState&&typeof e.taxonomyState=="object"?e.taxonomyState:null,taxonomies:Array.isArray(e.taxonomies)?e.taxonomies:[],aiProfiles:Array.isArray(e.aiProfiles)?e.aiProfiles.map(c=>({id:String(c.id||"").trim(),updatedAt:String(c.updatedAt||c.createdAt||"").trim(),name:String(c.name||"").trim(),username:String(c.username||"").trim(),archivedAt:String(c.archivedAt||"").trim(),archivedReason:String(c.archivedReason||"").trim(),mergedIntoProfileId:String(c.mergedIntoProfileId||"").trim(),rosterStateUpdatedAt:String(c.rosterStateUpdatedAt||"").trim()})).filter(c=>c.id.length>0).sort((c,d)=>c.id.localeCompare(d.id)):[],taskEvents:Array.isArray(e.taskEvents)?e.taskEvents.map(c=>({id:String(c.id||"").trim(),taskId:String(c.taskId||"").trim(),action:String(c.action||"").trim(),actor:String(c.actor||"").trim(),actorType:c.actorType==="ai"||c.actorType==="human"||c.actorType==="system"?c.actorType:"system",createdAt:String(c.createdAt||"").trim()})).filter(c=>c.id.length>0&&c.taskId.length>0).sort((c,d)=>c.id.localeCompare(d.id)):[],documents:Array.isArray(e.documents)?e.documents.map(c=>({path:String(c.path||"").trim(),updatedAt:String(c.updatedAt||"").trim(),length:typeof c.content=="string"?c.content.length:0})).filter(c=>c.path.length>0).sort((c,d)=>c.path.localeCompare(d.path)):[],assets:Array.isArray(e.assets)?e.assets.map(c=>({path:String(c.path||"").trim(),updatedAt:String(c.updatedAt||"").trim(),length:typeof c.contentBase64=="string"?c.contentBase64.length:0,kind:c.kind==="image"?"image":"file"})).filter(c=>c.path.length>0).sort((c,d)=>c.path.localeCompare(d.path)):[],documentReviewSessions:Array.isArray(e.documentReviewSessions)?e.documentReviewSessions.map(c=>({id:String(c.id||"").trim(),updatedAt:String(c.updatedAt||c.createdAt||"").trim(),assetId:String(c.assetId||"").trim(),status:c.status==="resolved"?"resolved":"open",deletedAt:String(c.deletedAt||"").trim(),commentCount:Array.isArray(c.comments)?c.comments.length:0})).filter(c=>c.id.length>0).sort((c,d)=>c.id.localeCompare(d.id)):[],documentReviewComments:Array.isArray(e.documentReviewComments)?e.documentReviewComments.map(c=>({id:String(c.id||"").trim(),sessionId:String(c.sessionId||"").trim(),updatedAt:String(c.updatedAt||c.createdAt||"").trim(),deletedAt:String(c.deletedAt||"").trim(),bodyLength:String(c.body||"").length})).filter(c=>c.id.length>0).sort((c,d)=>c.id.localeCompare(d.id)):[],annotatedAttachmentSessions:Array.isArray(e.annotatedAttachmentSessions)?e.annotatedAttachmentSessions.map(c=>({id:String(c.id||"").trim(),updatedAt:String(c.updatedAt||c.createdAt||"").trim(),taskId:String(c.taskId||"").trim(),baseImageAssetId:String(c.baseImageAssetId||"").trim(),deletedAt:String(c.deletedAt||"").trim(),annotationCount:Array.isArray(c.annotations)?c.annotations.length:0})).filter(c=>c.id.length>0).sort((c,d)=>c.id.localeCompare(d.id)):[],taskforceAgents:Array.isArray(e.taskforceAgents)?e.taskforceAgents.map(c=>({id:String(c.id||"").trim(),updatedAt:String(c.updatedAt||c.createdAt||"").trim(),deletedAt:String(c.deletedAt||"").trim(),definitionRevision:Number(c.definitionRevision)||0,definitionHash:String(c.definitionHash||"").trim(),lifecycleStatus:String(c.lifecycleStatus||"").trim(),managedProfileId:String(c.managedProfileId||"").trim(),name:String(c.name||"").trim(),modelTier:String(c.modelTier||"").trim(),providerKey:String(c.providerKey||"").trim(),modelKey:String(c.modelKey||"").trim(),enabled:c.enabled!==!1})).filter(c=>c.id.length>0).sort((c,d)=>c.id.localeCompare(d.id)):[],agentRoles:Array.isArray(e.agentRoles)?e.agentRoles.map(c=>({id:String(c.id||"").trim(),updatedAt:String(c.updatedAt||c.createdAt||"").trim(),deletedAt:String(c.deletedAt||"").trim(),lifecycleStatus:c.lifecycleStatus,currentRevision:Number(c.currentRevision)||0,currentContentHash:String(c.currentContentHash||"").trim(),revisionCount:Array.isArray(c.revisions)?c.revisions.length:0})).filter(c=>c.id.length>0).sort((c,d)=>c.id.localeCompare(d.id)):[],taskforceAgentSkills:Array.isArray(e.taskforceAgentSkills)?e.taskforceAgentSkills.map(c=>({id:String(c.id||"").trim(),updatedAt:String(c.updatedAt||c.createdAt||"").trim(),revision:Number(c.revision)||0,contentHash:String(c.contentHash||"").trim(),lifecycleStatus:String(c.lifecycleStatus||"").trim(),revisionCount:Array.isArray(c.revisions)?c.revisions.length:0})).filter(c=>c.id.length>0).sort((c,d)=>c.id.localeCompare(d.id)):[],agentConversations:Array.isArray(e.agentConversations)?e.agentConversations.map(c=>({id:String(c.id||"").trim(),agentId:String(c.agentId||"").trim(),taskId:String(c.taskId||"").trim(),updatedAt:String(c.updatedAt||c.createdAt||"").trim(),deletedAt:String(c.deletedAt||"").trim(),messageCount:Array.isArray(c.messages)?c.messages.length:0,modelId:String(c.modelId||"").trim()})).filter(c=>c.id.length>0).sort((c,d)=>c.id.localeCompare(d.id)):[],active:t,archived:r,pendingDeletes:a})}function Sk(e,t,r=[],a=[]){const s=new Map;for(const i of[...e||[],...t||[]]){const l=Array.isArray(i?.taskEvents)?i.taskEvents:[];for(const c of l){const d=String(c?.id||"").trim(),f=String(c?.taskId||i?.id||"").trim(),p=String(c?.workspaceId||"").trim(),g=String(c?.createdAt||"").trim();if(!d||!f||!p||!g)continue;const h={id:d,workspaceId:p,entityType:"task",entityId:f,taskId:f,action:String(c?.action||"").trim(),actor:String(c?.actor||"system").trim()||"system",actorType:c?.actorType==="ai"||c?.actorType==="human"||c?.actorType==="system"?c.actorType:"system",details:c?.details,createdAt:g},y=s.get(d);(!y||h.createdAt>y.createdAt)&&s.set(d,h)}}for(const i of r||[]){const l=Array.isArray(i?.entityEvents)?i.entityEvents:[];for(const c of l){const d=String(c?.id||"").trim(),f=String(c?.entityId||i?.id||"").trim(),p=String(c?.workspaceId||"").trim(),g=String(c?.createdAt||"").trim();if(!d||!f||!p||!g)continue;const h={id:d,workspaceId:p,entityType:"initiative",entityId:f,action:String(c?.action||"").trim(),actor:String(c?.actor||"system").trim()||"system",actorType:c?.actorType==="ai"||c?.actorType==="human"||c?.actorType==="system"?c.actorType:"system",details:c?.details,createdAt:g},y=s.get(d);(!y||h.createdAt>y.createdAt)&&s.set(d,h)}}for(const i of a||[]){const l=Array.isArray(i?.entityEvents)?i.entityEvents:[];for(const c of l){const d=String(c?.id||"").trim(),f=String(c?.entityId||i?.id||"").trim(),p=String(c?.workspaceId||"").trim(),g=String(c?.createdAt||"").trim();if(!d||!f||!p||!g)continue;const h={id:d,workspaceId:p,entityType:"workstream",entityId:f,action:String(c?.action||"").trim(),actor:String(c?.actor||"system").trim()||"system",actorType:c?.actorType==="ai"||c?.actorType==="human"||c?.actorType==="system"?c.actorType:"system",details:c?.details,createdAt:g},y=s.get(d);(!y||h.createdAt>y.createdAt)&&s.set(d,h)}}return Array.from(s.values()).sort((i,l)=>i.createdAt!==l.createdAt?i.createdAt.localeCompare(l.createdAt):i.id.localeCompare(l.id))}function Va(e){return Object.freeze(structuredClone(Array.from(e||[])))}function mb(e,t){return new Set(e?Array.from(e):t)}function MR(e){const t=Va(e.tasks),r=Va(e.archivedTasks),a=Va(e.deletedTasks),s=Va(e.initiatives),i=Va(e.workstreams),l=Va(e.documents),c=Va(e.assets),d=e.pendingDeletedTaskIds?new Set(e.pendingDeletedTaskIds):new Set,f=e.pendingDeletedTaskWatermarks?new Map(e.pendingDeletedTaskWatermarks):new Map;if(!e.pendingDeletedTaskIds&&!e.pendingDeletedTaskWatermarks)for(const g of a){const h=String(g?.taskId||"").trim(),y=String(g?.deletedAt||"").trim();h&&(d.add(h),Number.isFinite(Date.parse(y))&&f.set(h,y))}const p=e.taskEvents?Va(e.taskEvents):Object.freeze(Sk(t,r,s,i));return Object.freeze({workspaceId:String(e.workspaceId||"").trim(),tasks:t,archivedTasks:r,deletedTasks:a,pendingDeletedTaskIds:d,pendingDeletedTaskWatermarks:f,taskRelationships:Va(e.taskRelationships),initiatives:s,workstreams:i,taxonomies:Va(e.taxonomies),taxonomyState:e.taxonomyState?structuredClone(e.taxonomyState):void 0,aiProfiles:Va(e.aiProfiles),documents:l,assets:c,currentDocumentPaths:mb(e.currentDocumentPaths,l.map(g=>g.path)),currentAssetPaths:mb(e.currentAssetPaths,c.map(g=>g.path)),documentReviewSessions:Va(e.documentReviewSessions),documentReviewComments:Va(e.documentReviewComments),annotatedAttachmentSessions:Va(e.annotatedAttachmentSessions),taskforceAgents:Va(e.taskforceAgents),agentRoles:Va(e.agentRoles),taskforceAgentSkills:Va(e.taskforceAgentSkills),agentConversations:Va(e.agentConversations),taskEvents:p})}function io(e){return new Set(e)}function ds(e){return new Map(e)}function DR(e,t){return new Set(oR(Array.from(e),t,r=>Qx(String(r||"").trim())).keys())}function LR(e){const{snapshot:t,baseline:r}=e,a=e.forceAllAiProfiles===!0,s=a?DR(t.aiProfiles,t.workspaceId):new Set,i=io(r.lastPushedAssetPaths),l=ds(r.lastPushedAssetWatermarks),c=io(r.lastPushedDocumentPaths),d=ds(r.lastPushedDocumentWatermarks);for(const g of[...s,...e.forceAssetPaths||[]])i.delete(g),l.delete(g);for(const g of e.forceDocumentPaths||[])c.delete(g),d.delete(g);const f=structuredClone(NR({tasks:Array.from(t.tasks),archivedTasks:Array.from(t.archivedTasks),taskRelationships:Array.from(t.taskRelationships),taskEvents:Array.from(t.taskEvents),lastPushedTaskIds:io(r.lastPushedTaskIds),pendingDeletedTaskIds:io(t.pendingDeletedTaskIds),pendingDeletedTaskWatermarks:ds(t.pendingDeletedTaskWatermarks),deletedTasks:Array.from(t.deletedTasks),initiatives:Array.from(t.initiatives),workstreams:Array.from(t.workstreams),taxonomies:Array.from(t.taxonomies),taxonomyState:t.taxonomyState,lastPushedInitiativeIds:io(r.lastPushedInitiativeIds),lastPushedInitiativeWatermarks:ds(r.lastPushedInitiativeWatermarks),lastPushedWorkstreamIds:io(r.lastPushedWorkstreamIds),lastPushedWorkstreamWatermarks:ds(r.lastPushedWorkstreamWatermarks),aiProfiles:Array.from(t.aiProfiles),lastPushedAiProfileIds:a?new Set:io(r.lastPushedAiProfileIds),lastPushedAiProfileWatermarks:a?new Map:ds(r.lastPushedAiProfileWatermarks),lastPushedAiProfileChangeKeys:a?new Map:ds(r.lastPushedAiProfileChangeKeys),documents:Array.from(t.documents),assets:Array.from(t.assets),currentDocumentPaths:t.currentDocumentPaths,currentAssetPaths:t.currentAssetPaths,documentReviewSessions:Array.from(t.documentReviewSessions),documentReviewComments:Array.from(t.documentReviewComments),annotatedAttachmentSessions:Array.from(t.annotatedAttachmentSessions),taskforceAgents:Array.from(t.taskforceAgents),agentRoles:Array.from(t.agentRoles),taskforceAgentSkills:Array.from(t.taskforceAgentSkills),agentConversations:Array.from(t.agentConversations),lastPushedDocumentPaths:c,lastPushedDocumentWatermarks:d,lastPushedAssetPaths:i,lastPushedAssetWatermarks:l,lastPushedDocumentReviewSessionIds:io(r.lastPushedDocumentReviewSessionIds),lastPushedDocumentReviewSessionWatermarks:ds(r.lastPushedDocumentReviewSessionWatermarks),lastPushedDocumentReviewCommentIds:io(r.lastPushedDocumentReviewCommentIds),lastPushedDocumentReviewCommentWatermarks:ds(r.lastPushedDocumentReviewCommentWatermarks),lastPushedAnnotatedAttachmentSessionIds:io(r.lastPushedAnnotatedAttachmentSessionIds),lastPushedAnnotatedAttachmentSessionWatermarks:ds(r.lastPushedAnnotatedAttachmentSessionWatermarks),lastPushedTaskforceAgentIds:a?new Set:io(r.lastPushedTaskforceAgentIds),lastPushedTaskforceAgentWatermarks:a?new Map:ds(r.lastPushedTaskforceAgentWatermarks),lastPushedTaskforceAgentSkillIds:a?new Set:io(r.lastPushedTaskforceAgentSkillIds),lastPushedTaskforceAgentSkillWatermarks:a?new Map:ds(r.lastPushedTaskforceAgentSkillWatermarks),lastPushedAgentConversationIds:io(r.lastPushedAgentConversationIds),lastPushedAgentConversationWatermarks:ds(r.lastPushedAgentConversationWatermarks),lastPushedTaskEventWatermarks:ds(r.lastPushedTaskEventWatermarks),baselineResetReason:r.baselineResetReason,lastPushedWatermarks:ds(r.lastPushedWatermarks),lastPushedTaskChangeKeys:ds(r.lastPushedTaskChangeKeys),lastPushedTaskRelationshipChangeKeys:ds(r.lastPushedTaskRelationshipChangeKeys),lastPushedTaxonomyChangeKey:r.lastPushedTaxonomyChangeKey})),p=tC(t);return Object.freeze({snapshot:t,signature:p,payload:f})}function tC(e){return jR({workspaceId:e.workspaceId,tasks:Array.from(e.tasks),archivedTasks:Array.from(e.archivedTasks),taskRelationships:Array.from(e.taskRelationships),taskEvents:Array.from(e.taskEvents),pendingDeletedTaskIds:io(e.pendingDeletedTaskIds),initiatives:Array.from(e.initiatives),workstreams:Array.from(e.workstreams),taxonomies:Array.from(e.taxonomies),taxonomyState:e.taxonomyState,aiProfiles:Array.from(e.aiProfiles),documents:Array.from(e.documents),assets:Array.from(e.assets),documentReviewSessions:Array.from(e.documentReviewSessions),documentReviewComments:Array.from(e.documentReviewComments),annotatedAttachmentSessions:Array.from(e.annotatedAttachmentSessions),taskforceAgents:Array.from(e.taskforceAgents),agentRoles:Array.from(e.agentRoles),taskforceAgentSkills:Array.from(e.taskforceAgentSkills),agentConversations:Array.from(e.agentConversations)})}function rC(e){return Jc(e)}function $i(e){return On(e)}function OR(e,t,r){if(!e||typeof e!="object"||Array.isArray(e))return null;const a=e,s=String(a.id||"").trim(),i=String(a.workspaceId||t||"").trim(),l=Number(a.currentRevision),c=Number.isInteger(l)&&l>0?l:0,d=String(a.currentContentHash||"").trim(),f=a.lifecycleStatus;return!s||!i||!c||!d||f!=="active"&&f!=="retired"||t&&i!==t?null:{id:s,tenantId:rC(a.tenantId),workspaceId:i,lifecycleStatus:f,currentRevision:c,currentContentHash:d,definition:a.definition,revisions:Array.isArray(a.revisions)?a.revisions.map(p=>({roleId:String(p?.roleId||s).trim()||s,revision:Number.isInteger(Number(p?.revision))&&Number(p?.revision)>0?Number(p.revision):0,definition:p?.definition,contentHash:String(p?.contentHash||"").trim(),createdByActorId:$i(p?.createdByActorId),createdAt:String(p?.createdAt||r||"").trim()})):[],createdByActorId:$i(a.createdByActorId),updatedByActorId:$i(a.updatedByActorId),createdAt:String(a.createdAt||r||"").trim(),updatedAt:String(a.updatedAt||r||a.createdAt||"").trim(),retiredAt:$i(a.retiredAt),deletedAt:$i(a.deletedAt)}}function BR(e,t,r){if(!e||typeof e!="object"||Array.isArray(e))return null;const a=e,s=String(a.id||"").trim(),i=String(a.workspaceId||t||"").trim(),l=String(a.lifecycleStatus||"").trim(),c=Number(a.revision);return!s||!i||!Number.isInteger(c)||c<1||t&&i!==t||l!=="active"&&l!=="retired"||!Array.isArray(a.revisions)?null:{id:s,tenantId:rC(a.tenantId),workspaceId:i,lifecycleStatus:l,definition:a.definition,revision:c,contentHash:String(a.contentHash||"").trim(),revisions:a.revisions.map(d=>{if(!d||typeof d!="object"||Array.isArray(d))return null;const f=d,p=Number(f.revision);return!Number.isInteger(p)||p<1?null:{revision:p,contentHash:String(f.contentHash||"").trim(),definition:f.definition,createdByActorId:$i(f.createdByActorId),createdAt:String(f.createdAt||r||"").trim()}}).filter(d=>d!==null),createdByActorId:$i(a.createdByActorId),updatedByActorId:$i(a.updatedByActorId),createdAt:String(a.createdAt||r||"").trim(),updatedAt:String(a.updatedAt||r||a.createdAt||"").trim(),retiredAt:$i(a.retiredAt),retiredByActorId:$i(a.retiredByActorId)}}function hb(e){if(!Array.isArray(e))return;const t=e.filter(r=>typeof r=="string"&&r.trim().length>0).map(r=>r.trim());return t.length>0?t:void 0}function nC(e){if(!e||typeof e!="object"||Array.isArray(e))return!1;const t=e;return Array.isArray(t.categories)||Array.isArray(t.types)||Array.isArray(t.priorities)||Array.isArray(t.taxonomies)||!!t.displayLabels&&typeof t.displayLabels=="object"&&!Array.isArray(t.displayLabels)}function WR(e){const t=e||{};return{categories:Array.isArray(t.categories)?t.categories.map(a=>typeof a=="string"?{value:a.toLowerCase().replace(/\s+/g,"-"),label:a}:a):[],types:Array.isArray(t.types)?t.types.map(a=>({...a0(a.value),...a,aliases:Array.isArray(a.aliases)?a.aliases.filter(i=>typeof i=="string"&&i.trim().length>0).map(i=>i.trim()):void 0,status:a.status==="retired"?"retired":"active"})):[],priorities:Array.isArray(t.priorities)?t.priorities:[],taxonomies:Array.isArray(t.taxonomies)?t.taxonomies.map(a=>({...a,aliases:hb(a.aliases),options:Array.isArray(a.options)?a.options.map(s=>({...s,aliases:hb(s.aliases),status:s.status==="retired"?"retired":"active"})):[],status:a.status==="retired"?"retired":"active",formEnabled:a.formEnabled!==!1,filterEnabled:a.filterEnabled!==!1,sortEnabled:a.sortEnabled===!0})):[],displayLabels:{category:typeof t.displayLabels?.category=="string"&&t.displayLabels.category.trim().length>0?t.displayLabels.category.trim():void 0,type:typeof t.displayLabels?.type=="string"&&t.displayLabels.type.trim().length>0?t.displayLabels.type.trim():void 0,priority:typeof t.displayLabels?.priority=="string"&&t.displayLabels.priority.trim().length>0?t.displayLabels.priority.trim():void 0}}}function Ih(){return{version:2,revision:null,enabled:!1,phase:"idle",setupIntent:null,startupFullReconcileCompletedAt:null,pullCursor:null,lastPullAt:null,lastPushAt:null,lastSyncedAt:null,lastErrorMessage:null,pushBaseline:null}}function gb(e){if(!e||typeof e!="object"||Array.isArray(e))return null;const t=e,r=t.counter,a=typeof t.writerId=="string"?t.writerId.trim():"";return!Number.isSafeInteger(r)||Number(r)<1||!a||a.length>200?null:{counter:Number(r),writerId:a}}function $R(e,t){return e?t?e.counter!==t.counter?e.counter<t.counter?-1:1:e.writerId===t.writerId?0:e.writerId<t.writerId?-1:1:1:t?-1:0}function FR(e,t){const r=String(t||"").trim();if(!r)throw new Error("Workspace sync state revision writer is required");if(r.length>200)throw new Error("Workspace sync state revision writer is too long");if(e?.counter===Number.MAX_SAFE_INTEGER)throw new Error("Workspace sync state revision counter is exhausted");return{counter:(e?.counter||0)+1,writerId:r}}function Di(e){const t=String(e||"").trim();return t.length>0?t:null}function yb(e){return String(e||"").trim().toLowerCase()==="attach-cloud-import"?"attach-cloud-import":null}function UR(e){if(!Array.isArray(e)||e.length<2)return null;const t=String(e[0]||"").trim(),r=String(e[1]||"").trim();return!t||!r?null:[t,r]}function zR(e){return Array.isArray(e)?e.map(t=>String(t||"").trim()).filter(t=>t.length>0):[]}function kb(e){if(!e||typeof e!="object"||Array.isArray(e))return null;const t=e,r=a=>Array.isArray(t[a])?t[a].map(s=>UR(s)).filter(s=>Array.isArray(s)):[];return{taskIds:zR(t.taskIds),taskWatermarks:r("taskWatermarks"),taskChangeKeys:r("taskChangeKeys"),taskRelationshipChangeKeys:r("taskRelationshipChangeKeys"),initiativeWatermarks:r("initiativeWatermarks"),workstreamWatermarks:r("workstreamWatermarks"),aiProfileWatermarks:r("aiProfileWatermarks"),aiProfileChangeKeys:r("aiProfileChangeKeys"),documentWatermarks:r("documentWatermarks"),assetWatermarks:r("assetWatermarks"),documentReviewSessionWatermarks:r("documentReviewSessionWatermarks"),documentReviewCommentWatermarks:r("documentReviewCommentWatermarks"),annotatedAttachmentSessionWatermarks:r("annotatedAttachmentSessionWatermarks"),taskEventWatermarks:r("taskEventWatermarks"),taxonomyStateFingerprint:String(t.taxonomyStateFingerprint||"").trim(),taxonomyChangeKey:String(t.taxonomyChangeKey||"")}}function HR(e,t){if(!!!(e.enabled??e.cloudSyncEnabled))return"idle";const a=String(e.phase||"").trim().toLowerCase();if(a==="idle"||a==="provision-local"||a==="attach-cloud"||a==="active"||a==="error")return a;const s=String(e.bootstrapMode||"").trim().toLowerCase();if(s==="provision-local"||s==="attach-cloud")return s;const i=String(e.sourceOfTruth||"").trim().toLowerCase();return e.onboardingCompleted?"active":i==="cloud"?t.lastPullAt?"active":"attach-cloud":i==="local"?t.lastPullAt||t.lastPushAt?"active":"provision-local":(t.lastPullAt||t.lastPushAt,"active")}function Oy(e){const t=Ih();if(!e||typeof e!="object")return{state:t,changed:!1};const r=e,a=r.lastErrorMessage,s=typeof a=="string"&&a.trim().length>0?a:null,i={version:2,revision:gb(r.revision),enabled:!!(r.enabled??r.cloudSyncEnabled),phase:"idle",setupIntent:yb(r.setupIntent),startupFullReconcileCompletedAt:Di(r.startupFullReconcileCompletedAt),pullCursor:Di(r.pullCursor),lastPullAt:Di(r.lastPullAt),lastPushAt:Di(r.lastPushAt),lastSyncedAt:Di(r.lastSyncedAt),lastErrorMessage:s,pushBaseline:kb(r.pushBaseline)};i.phase=HR(r,i),i.enabled||(i.phase="idle",i.pullCursor=null);const c=Number(r.version||0)!==2||JSON.stringify(gb(r.revision))!==JSON.stringify(i.revision)||!!(r.enabled??r.cloudSyncEnabled)!==i.enabled||String(r.phase||"").trim()!==i.phase||yb(r.setupIntent)!==i.setupIntent||Di(r.startupFullReconcileCompletedAt)!==i.startupFullReconcileCompletedAt||Di(r.pullCursor)!==i.pullCursor||Di(r.lastPullAt)!==i.lastPullAt||Di(r.lastPushAt)!==i.lastPushAt||Di(r.lastSyncedAt)!==i.lastSyncedAt||s!==i.lastErrorMessage||JSON.stringify(kb(r.pushBaseline))!==JSON.stringify(i.pushBaseline);return{state:i,changed:c}}const VR="taskforce.sync.lease.v1",GR="taskforce.sync.completed.v1",KR="taskforce.sync.lease.v1",qR=2500,YR=9e3,ZR=()=>!0;function Kc(e){const t=String(e||"").trim();return t.length>0&&t.toLowerCase()!=="default"}function Hp(e){const t=String(e||"").trim();return t.length>0?t:null}function By(e){return`${VR}.${e}`}function vb(e,t){return`${GR}.${e}.${t}`}function JR(e){if(!e)return null;try{const t=JSON.parse(e),r=String(t?.workspaceId||"").trim(),a=String(t?.operation||"").trim(),s=String(t?.completedAt||"").trim();return!r||!Number.isFinite(Date.parse(s))||a!=="pull"&&a!=="push"&&a!=="repair"?null:{workspaceId:r,operation:a,completedAt:s}}catch{return null}}function QR(e){if(!e)return null;try{const t=JSON.parse(e),r=String(t?.ownerId||"").trim(),a=String(t?.workspaceId||"").trim(),s=String(t?.operation||"").trim(),i=String(t?.heartbeatAt||"").trim(),l=String(t?.expiresAt||"").trim();return!r||!a||!i||!l||s!=="pull"&&s!=="push"&&s!=="repair"?null:{ownerId:r,workspaceId:a,operation:s,heartbeatAt:i,expiresAt:l}}catch{return null}}function XR(e,t,r,a){return{ownerId:e,workspaceId:t,operation:r,heartbeatAt:new Date(a).toISOString(),expiresAt:new Date(a+YR).toISOString()}}function eP(e,t=Date.now()){if(!e)return!0;const r=Date.parse(e.expiresAt);return!Number.isFinite(r)||r<=t}function Wy(e,t){const r={...e,...t,version:2,phase:t.phase||e.phase,setupIntent:t.setupIntent===void 0?e.setupIntent??null:t.setupIntent??null,startupFullReconcileCompletedAt:t.startupFullReconcileCompletedAt===void 0?e.startupFullReconcileCompletedAt??null:Hp(t.startupFullReconcileCompletedAt),pullCursor:t.pullCursor===void 0?e.pullCursor:Hp(t.pullCursor),lastPullAt:t.lastPullAt===void 0?e.lastPullAt:Hp(t.lastPullAt),lastPushAt:t.lastPushAt===void 0?e.lastPushAt:Hp(t.lastPushAt),lastSyncedAt:t.lastSyncedAt===void 0?e.lastSyncedAt:Hp(t.lastSyncedAt),lastErrorMessage:t.lastErrorMessage===void 0?e.lastErrorMessage:t.lastErrorMessage??null,pushBaseline:t.pushBaseline===void 0?e.pushBaseline??null:t.pushBaseline??null};return r.enabled||(r.phase="idle",r.setupIntent=null,r.pullCursor=null),r}function wb(e){return{...e,pushBaseline:null}}function tP(e){const{currentWorkspaceId:t,setWorkspaceCloudSyncEnabled:r,setWorkspaceSyncPhase:a,setWorkspaceSyncSetupIntent:s,setWorkspaceLastPullAt:i,setWorkspaceLastPushAt:l,setWorkspaceLastErrorMessage:c,isWorkspaceOperationAuthorized:d=ZR}=e,[f,p]=o.useState(null),g=o.useRef(null),h=o.useRef(null),y=o.useRef(0),k=o.useRef(!1),v=o.useRef(!1),C=o.useRef(""),S=o.useRef(""),w=o.useRef(new Set),_=o.useRef(new Set),M=o.useRef(new Map),R=o.useRef(null),P=o.useRef(Ih()),b=o.useRef(""),$=o.useRef(null),I=o.useRef(null),E=o.useRef(null),K=o.useRef(null);if(!b.current){const Y=Date.now().toString(36),we=Math.random().toString(36).slice(2,10);b.current=`sync-lease-${Y}-${we}`}const U=o.useCallback(()=>{y.current=0,h.current=null,g.current!==null&&typeof window<"u"&&(window.clearTimeout(g.current),g.current=null),p(null)},[]),L=o.useCallback((Y,we)=>{if(typeof window>"u"||!d())return;const q=Math.max(1,y.current+1);y.current=q;const le=Zx(q),$e=Number(we?.minDelayMs),re=Number.isFinite($e)&&$e>0?Math.max(le,Math.floor($e)):le,de=Date.now()+re;h.current=de,p(new Date(de).toISOString()),g.current!==null&&window.clearTimeout(g.current),g.current=window.setTimeout(()=>{g.current=null,h.current=null,p(null),d()&&Y()},re)},[d]),D=o.useCallback(()=>{const Y=h.current;return typeof Y=="number"&&Number.isFinite(Y)&&Y>Date.now()},[]),ie=o.useCallback(Y=>{if(typeof window>"u")return null;const we=String(Y||"").trim();return Kc(we)?QR(window.localStorage.getItem(By(we))):null},[]),H=o.useCallback((Y,we)=>{if(typeof window>"u")return null;const q=String(Y||"").trim();if(!Kc(q))return null;try{const le=JR(window.localStorage.getItem(vb(q,we)));return le?.workspaceId===q&&le.operation===we?le:null}catch{return null}},[]),be=o.useCallback(Y=>{const we=String(Y||"").trim();if(we)try{K.current?.postMessage({workspaceId:we})}catch{}},[]),Z=o.useCallback((Y,we)=>{const q=String(Y||"").trim();if(Kc(q))try{K.current?.postMessage({kind:"state",workspaceId:q,state:wb(we)})}catch{}},[]),me=o.useCallback((Y,we,q=new Date().toISOString())=>{if(typeof window>"u")return;const le=String(Y||"").trim();if(!(!Kc(le)||!Number.isFinite(Date.parse(q))))try{window.localStorage.setItem(vb(le,we),JSON.stringify({workspaceId:le,operation:we,completedAt:new Date(q).toISOString()}))}catch{return}},[]),Ve=o.useCallback((Y,we,q,le=Date.now())=>{const $e=H(Y,we),re=$e?Date.parse($e.completedAt):NaN,de=Number(q);return Number.isFinite(re)&&Number.isFinite(de)&&de>0&&re<=le&&le-re<de},[H]),Re=o.useCallback((Y,we)=>{if(typeof window>"u")return null;const q=String(Y||"").trim();if(!Kc(q))return null;const le=XR(b.current,q,we,Date.now());try{window.localStorage.setItem(By(q),JSON.stringify(le))}catch{return null}return be(q),le},[be]),je=o.useCallback(()=>{E.current!==null&&typeof window<"u"&&(window.clearInterval(E.current),E.current=null)},[]),ye=o.useCallback((Y,we)=>{if(typeof window>"u")return;const q=String(Y||$.current||"").trim();if(!q)return;const le=ie(q),$e=le?.ownerId===b.current;if(!(!we?.force&&le&&!$e)){je();try{window.localStorage.removeItem(By(q))}catch{}$.current=null,I.current=null,be(q)}},[be,ie,je]),ue=o.useCallback((Y,we)=>{typeof window>"u"||(je(),E.current=window.setInterval(()=>{if(!d()){je();return}const q=String($.current||"").trim(),le=I.current;if(!q||!le){je();return}if(ie(q)?.ownerId!==b.current){je(),$.current=null,I.current=null;return}Re(q,le)},qR),$.current=Y,I.current=we)},[d,ie,je,Re]),ve=o.useCallback(async(Y,we)=>{if(!d())return!1;if(typeof window>"u")return!0;const q=String(Y||"").trim();if(!Kc(q))return!1;const le=ie(q);if(le?.ownerId===b.current)return Re(q,we)?(ue(q,we),!0):!1;if(le&&!eP(le)||!Re(q,we))return!1;const de=ie(q);return!de||de.ownerId!==b.current?!1:(ue(q,we),!0)},[d,ie,ue,Re]),Pe=o.useCallback(Y=>{ye(Y,{force:!0})},[ye]),Le=o.useCallback(Y=>{const we=P.current,q=Wy(we,{enabled:!!Y.enabled,phase:Y.phase||we.phase,setupIntent:Y.setupIntent,pullCursor:Y.pullCursor,lastPullAt:Y.lastPullAt,lastPushAt:Y.lastPushAt,lastSyncedAt:Y.lastSyncedAt,lastErrorMessage:Y.lastErrorMessage});P.current=q,R.current=q.pullCursor,r(q.enabled),a(q.phase),s(q.setupIntent??null),i(q.lastPullAt),l(q.lastPushAt),c(q.lastErrorMessage??null)},[r,a,s,i,l,c]),se=o.useCallback((Y,we)=>{const q=P.current.revision,le=Y.revision;if(le){const $e=$R(le,q);if($e<0||$e===0&&!we?.allowEqualRevision)return!1}else if(q||!we?.allowUnversioned)return!1;return P.current=Y,Le(Y),!0},[Le]),V=o.useCallback(Y=>{const we=Wy(P.current,Y);return Le(we),we},[Le]),W=o.useCallback(()=>P.current,[]),z=o.useCallback(async Y=>{const we=Wy(P.current,{...Y,revision:FR(P.current.revision,b.current)});P.current=we,R.current=we.pullCursor;const q=await ff({workspaceId:t,stateKey:"workspace-sync",patch:wb(we),throwOnError:!0,respectFailureCooldown:!1}),le=q.response,$e=q.payload;if(q.skipped)return se(we,{allowEqualRevision:!0})&&Z(t,we),P.current;if(!le)throw new Error("Failed to persist workspace sync state (missing response)");if(!le.ok||$e?.success===!1)throw new Error($e?.error||`Failed to persist workspace sync state (${le.status})`);const re=$e?.state&&typeof $e.state=="object"&&!Array.isArray($e.state)?Oy($e.state).state:we;return se(re,{allowEqualRevision:!0})&&Z(t,re),P.current},[se,Z,t]),fe=o.useCallback(async()=>{if(!Kc(t)){const Y=Ih();P.current=Y,Le(Y);return}try{const Y=await fetch(`/api/taskforce/ui-state?key=workspace-sync&workspaceId=${encodeURIComponent(t)}`,{method:"GET",credentials:"include"});if(!Y.ok)return;const we=await Y.json().catch(()=>({})),q=Oy(we?.state&&typeof we.state=="object"?we.state:null);se(q.state,{allowEqualRevision:!0,allowUnversioned:!0})&&(q.changed||!q.state.revision)&&z(q.state)}catch{}},[se,t,z]),ke=o.useCallback(async(Y,we)=>{if(!Kc(t))return{success:!1,error:"Workspace setup is required before enabling sync."};try{if(!Y.enabled)return await z({enabled:!1,phase:"idle",setupIntent:null,pullCursor:null}),{success:!0};if(!we.isAuthenticated)return{success:!1,error:"Sign in is required before enabling workspace sync."};if(!we.cloudAuthConfigured)return{success:!1,error:"Cloud authentication endpoint is not configured."};const q=await we.ensureCloudWorkspaceReadyForSync();return q.success?(await z({enabled:!0,phase:q.provisioned?"provision-local":"attach-cloud",setupIntent:null,pullCursor:null,lastPullAt:null,lastPushAt:null,lastSyncedAt:null}),{success:!0}):{success:!1,error:q.error||"Workspace sync handshake failed."}}catch{return{success:!1,error:"Failed to save workspace sync settings."}}},[t,z]);return o.useEffect(()=>{C.current="",S.current="",w.current=new Set,_.current=new Set,M.current=new Map,R.current=null,P.current=Ih(),k.current=!1,v.current=!1,ye(),U()},[U,t,ye]),o.useEffect(()=>{if(typeof window>"u"||typeof BroadcastChannel>"u")return;const Y=new BroadcastChannel(KR);return K.current=Y,Y.onmessage=we=>{const q=we.data;if(q?.kind!=="state"||String(q.workspaceId||"").trim()!==t||!q.state||typeof q.state!="object"||Array.isArray(q.state))return;const le=Oy(q.state);se(le.state)},()=>{Y.onmessage=null,Y.close(),K.current===Y&&(K.current=null)}},[se,t]),o.useEffect(()=>()=>{g.current!==null&&typeof window<"u"&&(window.clearTimeout(g.current),g.current=null),ye()},[ye]),{workspaceRetryAt:f,isWorkspaceRetryPending:D,workspacePushInFlightRef:k,workspacePullInFlightRef:v,workspaceLastPushedSignatureRef:C,workspacePendingSignatureRef:S,workspaceLastPushedTaskIdsRef:w,workspaceDeletedTaskIdsRef:_,workspaceDeletedTaskWatermarksRef:M,workspacePullCursorRef:R,clearWorkspaceRetry:U,scheduleWorkspaceRetry:L,persistWorkspaceSyncPatch:z,applyWorkspaceSyncPatchLocally:V,readWorkspaceSyncStateSnapshot:W,loadWorkspaceSyncState:fe,applyWorkspaceSyncStateSnapshot:Le,saveWorkspaceCloudSyncSettings:ke,acquireWorkspaceSyncLease:ve,releaseWorkspaceSyncLease:ye,forceClearWorkspaceSyncLease:Pe,readWorkspaceSyncLease:ie,readWorkspaceSyncCompletion:H,recordWorkspaceSyncCompletion:me,wasWorkspaceSyncOperationCompletedRecently:Ve}}class rP{constructor(t=2048){this.maxSeenEventIds=t}seenEventIds=new Set;seenEventIdQueue=[];activeEpoch="";lastSeq=null;telemetry={accepted:0,duplicateDiscarded:0,outOfOrderDiscarded:0,invalidDiscarded:0,recoveryTriggered:0};process(t){const r=typeof t.eventId=="string"?t.eventId.trim():"";if(r&&this.seenEventIds.has(r))return this.telemetry.duplicateDiscarded+=1,{accepted:!1,reason:"duplicate",shouldRecover:!1};const a=typeof t.serverEpoch=="string"?t.serverEpoch.trim():"",s=Number(t.seq);if(!(a.length>0&&Number.isFinite(s)&&s>=0))return r?(this.rememberEventId(r),this.telemetry.accepted+=1,{accepted:!0,shouldRecover:!1}):(this.telemetry.invalidDiscarded+=1,{accepted:!1,reason:"invalid",shouldRecover:!1});const l=Math.floor(s);if(this.activeEpoch&&this.activeEpoch!==a)return this.activeEpoch=a,this.lastSeq=l,r&&this.rememberEventId(r),this.telemetry.accepted+=1,{accepted:!0,shouldRecover:!1};if(!this.activeEpoch)return this.activeEpoch=a,this.lastSeq=l,r&&this.rememberEventId(r),this.telemetry.accepted+=1,{accepted:!0,shouldRecover:!1};const c=this.lastSeq;if(typeof c=="number"){if(l<=c){this.telemetry.outOfOrderDiscarded+=l===c?0:1,this.telemetry.duplicateDiscarded+=l===c?1:0;const d=l<c;return d&&(this.telemetry.recoveryTriggered+=1),{accepted:!1,reason:l===c?"duplicate":"out-of-order",shouldRecover:d}}if(l>c+1)return this.telemetry.outOfOrderDiscarded+=1,this.telemetry.recoveryTriggered+=1,{accepted:!1,reason:"out-of-order",shouldRecover:!0}}return this.lastSeq=l,r&&this.rememberEventId(r),this.telemetry.accepted+=1,{accepted:!0,shouldRecover:!1}}getTelemetry(){return{...this.telemetry}}rememberEventId(t){for(this.seenEventIds.add(t),this.seenEventIdQueue.push(t);this.seenEventIdQueue.length>this.maxSeenEventIds;){const r=this.seenEventIdQueue.shift();r&&this.seenEventIds.delete(r)}}}function aC(e){const{enabled:t,workspaceId:r,websocketUrl:a,reconnectBaseMs:s=400,reconnectMaxMs:i=1e4,degradeAfterAttempts:l=5,replayLimit:c=200,onSignal:d,onTelemetry:f,userId:p}=e,[g,h]=o.useState("degraded-fallback"),y=o.useRef(null),k=o.useRef(null),v=o.useRef(0),C=o.useRef(""),S=o.useRef(!1),w=o.useRef(null),_=o.useRef(null),M=o.useRef(new rP),R=o.useRef(d),P=o.useRef(f);o.useEffect(()=>{R.current=d},[d]),o.useEffect(()=>{P.current=f},[f]);const[b,$]=o.useState({accepted:0,duplicateDiscarded:0,outOfOrderDiscarded:0,invalidDiscarded:0,recoveryTriggered:0}),I=o.useMemo(()=>String(r||"").trim(),[r]),E=o.useMemo(()=>String(a||"").trim(),[a]);return o.useEffect(()=>{let K=!1;const U=()=>{k.current!==null&&(window.clearTimeout(k.current),k.current=null)},L=()=>{const ye=y.current;if(y.current=null,ye)try{ye.close()}catch{}},D=ye=>ye==="taskforce:replay-gap"||ye==="taskforce:replay-reset"?4:ye==="taskforce:mutation"||ye==="taskforce:replay"?3:1,ie=ye=>{const ue=_.current;if(ue){const ve=D(ue.type),Pe=D(ye.type);if(Pe<ve)return;Pe===ve&&(ye={...ye,eventIds:Array.from(new Set([...ue.eventIds||[],...ue.eventId?[ue.eventId]:[],...ye.eventIds||[],...ye.eventId?[ye.eventId]:[]])),invalidations:[...ue.invalidations||[],...ye.invalidations||[]]})}_.current=ye,w.current!==null&&window.clearTimeout(w.current),w.current=window.setTimeout(()=>{w.current=null;const ve=R.current;if(!_.current||typeof ve!="function")return;const Pe=_.current;_.current=null,ve(Pe)},80)},H=ye=>{try{const ue=JSON.parse(String(ye.data||""));return!ue||typeof ue!="object"?null:ue}catch{return null}},be=ye=>{const ue=typeof ye.serverEpoch=="string"?ye.serverEpoch.trim():"",ve=Number(ye.seq);!ue||!Number.isFinite(ve)||ve<0||(C.current=`${ue}:${Math.floor(ve)}`,S.current=!1)},Z=ye=>{const ue=typeof ye.entityType=="string"?ye.entityType.trim():"";if(!ue)return null;const ve=Array.isArray(ye.affectedCollections)?ye.affectedCollections.map(Le=>typeof Le=="string"?Le.trim():"").filter(Boolean):void 0,Pe=Number(ye.dataVersion);return{entityType:ue,changeType:typeof ye.changeType=="string"?ye.changeType.trim():void 0,entityIds:Array.isArray(ye.entityIds)?ye.entityIds.map(Le=>typeof Le=="string"?Le.trim():"").filter(Boolean):[],affectedCollections:ve,lifecycleTransition:typeof ye.lifecycleTransition=="string"?ye.lifecycleTransition.trim():void 0,dataVersion:Number.isFinite(Pe)?Pe:void 0}},me=()=>{const ye=M.current.getTelemetry();$(ye);const ue=P.current;typeof ue=="function"&&ue(ye)},Ve=ye=>{const ue={type:"taskforce:replay",workspaceId:I,limit:c},ve=C.current;ve&&(ue.cursor=ve),ye.send(JSON.stringify(ue))},Re=()=>{if(!t||K)return;U(),v.current+=1;const ye=v.current,ue=Math.max(50,Math.floor(s)),ve=Math.max(ue,Math.floor(i)),Pe=Math.min(ve,ue*Math.pow(2,Math.max(0,ye-1)));h(ye>=l?"degraded-fallback":"reconnecting"),k.current=window.setTimeout(()=>{K||(k.current=null,je())},Pe)},je=()=>{if(!t||K||!I||!E)return;L();let ye;try{ye=new WebSocket(E)}catch{Re();return}y.current=ye,ye.addEventListener("open",()=>{v.current=0,h("connected"),ye.send(JSON.stringify({type:"taskforce:subscribe",workspaceId:I,userId:p||void 0})),Ve(ye)}),ye.addEventListener("message",ue=>{const ve=H(ue);if(!ve||typeof ve.type!="string")return;const Pe=typeof ve.workspaceId=="string"?ve.workspaceId.trim():I;if(!(!Pe||Pe!==I)){if(ve.type==="taskforce:update"){ie({type:"taskforce:update",workspaceId:I,eventId:typeof ve.eventId=="string"?ve.eventId.trim():void 0});return}if(ve.type==="taskforce:mutation"){const Le=M.current.process({eventId:ve.eventId,serverEpoch:ve.serverEpoch,seq:ve.seq});if(!Le.accepted){me(),Le.shouldRecover&&(C.current="",S.current||(S.current=!0,ie({type:"taskforce:replay-gap",workspaceId:I})));return}be(ve),me();const se=Z(ve);ie({type:ve.type,workspaceId:I,eventId:typeof ve.eventId=="string"?ve.eventId.trim():void 0,invalidations:se?[se]:void 0});return}if(ve.type==="taskforce:replay"){const Le=Array.isArray(ve.events)?ve.events:[];let se=0;const V=[],W=[];for(const z of Le){if(!M.current.process({eventId:z.eventId,serverEpoch:z.serverEpoch,seq:z.seq}).accepted)continue;se+=1,be(z);const ke=Z(z);ke&&V.push(ke),typeof z.eventId=="string"&&z.eventId.trim()&&W.push(z.eventId.trim())}S.current=!1,me(),(se>0||ve.truncated===!0)&&ie({type:"taskforce:replay",workspaceId:I,eventIds:W,invalidations:V}),ve.truncated===!0&&Ve(ye);return}if(ve.type==="taskforce:replay-gap"||ve.type==="taskforce:replay-reset"){if(C.current="",S.current)return;S.current=!0,ie({type:ve.type,workspaceId:I})}}}),ye.addEventListener("close",ue=>{if(y.current===ye&&(y.current=null),!K&&t){const ve=Number(ue?.code||0),Pe=String(ue?.reason||"").trim();console.warn(`[Taskforce] Realtime socket closed workspace=${I} user=${String(p||"anonymous").trim()||"anonymous"} code=${ve}${Pe?` reason=${Pe}`:""}`)}Re()}),ye.addEventListener("error",()=>{try{ye.close()}catch{}})};return!t||!I||!E?(h("degraded-fallback"),U(),L(),()=>{U(),L()}):(h("reconnecting"),je(),()=>{K=!0,U(),w.current!==null&&(window.clearTimeout(w.current),w.current=null),_.current=null,L()})},[t,I,E,s,i,l,c,p]),{connectionState:g,telemetry:b}}const Ak="taskforce:context-assets-mutated";function nP(e){typeof window>"u"||typeof window.dispatchEvent!="function"||window.dispatchEvent(new CustomEvent(Ak,{detail:e}))}const Ck="taskforce:ai-profiles-mutated";function sC(e){typeof window>"u"||typeof window.dispatchEvent!="function"||window.dispatchEvent(new CustomEvent(Ck,{detail:e}))}const _k="taskforce:agents-mutated";function oC(e){typeof window>"u"||typeof window.dispatchEvent!="function"||window.dispatchEvent(new CustomEvent(_k,{detail:e}))}const Ik="taskforce:agent-skills-mutated";function iC(e){typeof window>"u"||window.dispatchEvent(new CustomEvent(Ik,{detail:e}))}const aP=4,Km=100;function of(e,t,r){if(e===null)return null;if(typeof e=="string"||typeof e=="boolean")return e;if(typeof e=="number")return Number.isFinite(e)?e:String(e);if(typeof e=="bigint")return e.toString();if(e instanceof Date)return e.toISOString();if(t>=aP)return"[MaxDepth]";if(typeof e=="function"||typeof e=="symbol"||typeof e>"u")return String(e);if(Array.isArray(e))return e.slice(0,Km).map(a=>of(a,t+1,r));if(e instanceof Set)return Array.from(e.values()).slice(0,Km).map(a=>of(a,t+1,r));if(e instanceof Map){const a={};for(const[s,i]of Array.from(e.entries()).slice(0,Km))a[String(s)]=of(i,t+1,r);return a}if(typeof e=="object"){if(r.has(e))return"[Circular]";r.add(e);const a={};for(const[s,i]of Object.entries(e).slice(0,Km))a[s]=of(i,t+1,r);return r.delete(e),a}return String(e)}function kg(e){if(!(!e||typeof e!="object"||Array.isArray(e)))return of(e,0,new WeakSet)}function cC(e){const t=kg(e);if(!t)return"null";try{return JSON.stringify(t)}catch{return"[UnserializableSyncEventDetails]"}}const lC="anthropic",sP="anthropic.claude-sonnet-4-6",dC=[{key:"anthropic",label:"Anthropic"},{key:"openai",label:"OpenAI"},{key:"google",label:"Google"},{key:"xai",label:"xAI"},{key:"deepseek",label:"DeepSeek"},{key:"meta",label:"Meta"},{key:"mistral",label:"Mistral AI"},{key:"amazon",label:"Amazon"}],Iv=[{key:sP,providerKey:"anthropic",label:"Claude Sonnet 4.6",source:"bedrock",runtime:"bedrock-runtime",defaultTier:"balanced",runtimeModelId:"us.anthropic.claude-sonnet-4-6",availability:"verified",visible:!0,supportsTemperature:!0,defaultMaxTokens:512},{key:"anthropic.claude-haiku-4-5",providerKey:"anthropic",label:"Claude Haiku 4.5",source:"bedrock",runtime:"bedrock-runtime",defaultTier:"fast",runtimeModelId:"us.anthropic.claude-haiku-4-5-20251001-v1:0",availability:"configured",visible:!0,supportsTemperature:!0,defaultMaxTokens:512},{key:"anthropic.claude-sonnet-5",providerKey:"anthropic",label:"Claude Sonnet 5",source:"bedrock",runtime:"bedrock-anthropic-messages",defaultTier:"balanced",runtimeModelId:"anthropic.claude-sonnet-5",availability:"account_unavailable",visible:!1,supportsTemperature:!1,defaultMaxTokens:1024},{key:"anthropic.claude-fable-5",providerKey:"anthropic",label:"Claude Fable 5",source:"bedrock",runtime:"bedrock-anthropic-messages",defaultTier:"advanced",runtimeModelId:"anthropic.claude-fable-5",availability:"account_unavailable",visible:!1,supportsTemperature:!1,defaultMaxTokens:1024},{key:"anthropic.claude-opus-4-8",providerKey:"anthropic",label:"Claude Opus 4.8",source:"bedrock",runtime:"bedrock-anthropic-messages",defaultTier:"advanced",runtimeModelId:"anthropic.claude-opus-4-8",availability:"account_unavailable",visible:!1,supportsTemperature:!1,defaultMaxTokens:1024},{key:"amazon.nova-lite",providerKey:"amazon",label:"Nova Lite",source:"bedrock",runtime:"bedrock-runtime",defaultTier:"fast",runtimeModelId:"us.amazon.nova-lite-v1:0",availability:"configured",visible:!0,supportsTemperature:!0,defaultMaxTokens:512},{key:"amazon.nova-2-lite",providerKey:"amazon",label:"Nova 2 Lite",source:"bedrock",runtime:"bedrock-runtime",defaultTier:"fast",runtimeModelId:"us.amazon.nova-2-lite-v1:0",availability:"verified",visible:!0,supportsTemperature:!0,defaultMaxTokens:512},{key:"amazon.nova-pro",providerKey:"amazon",label:"Nova Pro",source:"bedrock",runtime:"bedrock-runtime",defaultTier:"balanced",runtimeModelId:"us.amazon.nova-pro-v1:0",availability:"configured",visible:!0,supportsTemperature:!0,defaultMaxTokens:512},{key:"deepseek.v3-2",providerKey:"deepseek",label:"DeepSeek V3.2",source:"bedrock",runtime:"bedrock-runtime",defaultTier:"balanced",runtimeModelId:"deepseek.v3.2",availability:"configured",visible:!0,supportsTemperature:!0,defaultMaxTokens:512},{key:"google.gemma-3-12b-it",providerKey:"google",label:"Gemma 3 12B IT",source:"bedrock",runtime:"bedrock-runtime",defaultTier:"fast",runtimeModelId:"google.gemma-3-12b-it",availability:"configured",visible:!0,supportsTemperature:!0,defaultMaxTokens:512},{key:"meta.llama-3-3-70b-instruct",providerKey:"meta",label:"Llama 3.3 70B Instruct",source:"bedrock",runtime:"bedrock-runtime",defaultTier:"balanced",runtimeModelId:"us.meta.llama3-3-70b-instruct-v1:0",availability:"configured",visible:!0,supportsTemperature:!0,defaultMaxTokens:512},{key:"meta.llama-4-scout-17b-instruct",providerKey:"meta",label:"Llama 4 Scout 17B Instruct",source:"bedrock",runtime:"bedrock-runtime",defaultTier:"balanced",runtimeModelId:"us.meta.llama4-scout-17b-instruct-v1:0",availability:"verified",visible:!0,supportsTemperature:!0,defaultMaxTokens:512},{key:"mistral.large-3",providerKey:"mistral",label:"Mistral Large 3",source:"bedrock",runtime:"bedrock-runtime",defaultTier:"balanced",runtimeModelId:"mistral.mistral-large-3-675b-instruct",availability:"configured",visible:!0,supportsTemperature:!0,defaultMaxTokens:512},{key:"xai.grok-4-3",providerKey:"xai",label:"Grok 4.3",source:"bedrock",runtime:"bedrock-mantle",defaultTier:"advanced",runtimeModelId:"xai.grok-4.3",availability:"verified",visible:!0,supportsTemperature:!1,defaultMaxTokens:1024},{key:"openai.gpt-oss-120b",providerKey:"openai",label:"gpt-oss-120b",source:"bedrock",runtime:"bedrock-runtime",defaultTier:"balanced",runtimeModelId:"openai.gpt-oss-120b-1:0",availability:"verified",visible:!0,supportsTemperature:!0,defaultMaxTokens:512},{key:"openai.gpt-5-4",providerKey:"openai",label:"GPT-5.4",source:"bedrock",runtime:"bedrock-mantle",defaultTier:"advanced",runtimeModelId:"openai.gpt-5.4",availability:"account_unavailable",visible:!1,supportsTemperature:!1,defaultMaxTokens:1024}];function oP(e){return e.visible&&e.availability!=="account_unavailable"}function _X(e){const t=String(e||"").trim();return Iv.find(r=>r.key===t)||null}function Tv(e){const t=String(e||"").trim().toLowerCase();return dC.some(r=>r.key===t)?t:lC}function iP(e){const t=Tv(e);return Iv.filter(r=>r.providerKey===t&&lP(r))}function cP(e,t){const r=String(e||"").trim(),a=iP(t??lC);return a.some(s=>s.key===r)?r:a[0]?.key||""}function lP(e){return oP(e)}function IX(e){const t=Tv(e);return dC.find(r=>r.key===t)?.label||"Anthropic"}function TX(e){const t=String(e||"").trim();return Iv.find(r=>r.key===t)?.label||t||"No configured model"}const uC="taskforce.userGlobalSyncMeta.v1",dP="taskforce.syncDebug.v1",uP=12e4,pC="taskforce.syncWatermarks.v3",pP=300*1e3,bb="Another local window is already syncing this workspace. Wait a few seconds, or press Repair in that window.";function mc(e){const t=String(e||"").trim();return t.length>0&&t.toLowerCase()!=="default"}function fP(){if(typeof window>"u")return!1;try{const e=String(window.localStorage.getItem(dP)||"").trim().toLowerCase();return e==="1"||e==="true"||e==="on"||e==="yes"}catch{return!1}}function Ns(e,t){if(!fP())return;console.info("[Taskforce Sync]",e,t&&typeof t=="object"?t:{})}function mP(e){const t=e?.providerMetadata??e?.provider_metadata??null;return{id:String(e?.id||"").trim(),workspaceId:String(e?.workspaceId||e?.workspace_id||"").trim(),profileToken:String(e?.profileToken||e?.profile_token||"").trim(),name:String(e?.name||"").trim(),username:String(e?.username||"").trim(),icon:String(e?.icon||"Bot").trim()||"Bot",color:String(e?.color||"#8b5cf6").trim()||"#8b5cf6",avatarUrl:Tu(e?.avatarUrl??e?.avatar_url),avatarSourceUrl:Tu(e?.avatarSourceUrl??e?.avatar_source_url),avatarRevision:Number.isFinite(Number(e?.avatarRevision??e?.avatar_revision))?Math.max(0,Math.floor(Number(e?.avatarRevision??e?.avatar_revision))):0,avatarUpdatedAt:ms(e?.avatarUpdatedAt??e?.avatar_updated_at),description:On(e?.description),role:On(e?.role),provider:On(e?.provider),model:On(e?.model),surfaceType:ZA(e?.surfaceType??e?.surface_type),seatScope:JA(e?.seatScope??e?.seat_scope),providerMetadata:t&&typeof t=="object"&&!Array.isArray(t)?t:null,archivedAt:ms(e?.archivedAt??e?.archived_at),archivedBy:wc(e?.archivedBy??e?.archived_by),archivedReason:On(e?.archivedReason??e?.archived_reason),mergedIntoProfileId:wc(e?.mergedIntoProfileId??e?.merged_into_profile_id),rosterStateUpdatedAt:ms(e?.rosterStateUpdatedAt??e?.roster_state_updated_at),createdAt:String(e?.createdAt||e?.created_at||"").trim(),updatedAt:String(e?.updatedAt||e?.updated_at||e?.createdAt||e?.created_at||"").trim(),lastActiveAt:ms(e?.lastActiveAt??e?.last_active_at)}}function hP(e){const t=String(e?.modelTier||e?.model_tier||"").trim().toLowerCase();return{id:String(e?.id||"").trim(),tenantId:String(e?.tenantId||e?.tenant_id||"").trim()||void 0,workspaceId:String(e?.workspaceId||e?.workspace_id||"").trim(),name:String(e?.name||"Agent").trim()||"Agent",modelProvider:"taskforce_hq",providerKey:Tv(e?.providerKey??e?.provider_key),modelKey:cP(e?.modelKey??e?.model_key,e?.providerKey??e?.provider_key),modelTier:t==="fast"||t==="advanced"?t:"balanced",systemPrompt:typeof(e?.systemPrompt??e?.system_prompt)=="string"?String(e?.systemPrompt??e?.system_prompt):"",enabled:(e?.enabled??!0)!==!1&&Number(e?.enabled??1)!==0,createdByUserId:wc(e?.createdByUserId??e?.created_by_user_id),updatedByUserId:wc(e?.updatedByUserId??e?.updated_by_user_id),createdAt:String(e?.createdAt||e?.created_at||"").trim(),updatedAt:String(e?.updatedAt||e?.updated_at||e?.createdAt||e?.created_at||"").trim(),deletedAt:ms(e?.deletedAt??e?.deleted_at)}}function gP(e){const t=Array.isArray(e?.messages)?e.messages.map(a=>({role:a?.role==="assistant"?"assistant":"user",content:String(a?.content||"").trim()})).filter(a=>a.content.length>0):[],r=(e?.usage??e?.usage_json)&&typeof(e?.usage??e?.usage_json)=="object"?e?.usage??e?.usage_json:null;return{id:String(e?.id||"").trim(),tenantId:String(e?.tenantId||e?.tenant_id||"").trim()||void 0,workspaceId:String(e?.workspaceId||e?.workspace_id||"").trim(),agentId:String(e?.agentId||e?.agent_id||"").trim(),taskId:wc(e?.taskId??e?.task_id),title:String(e?.title||"Agent chat").trim()||"Agent chat",messages:t,modelProvider:On(e?.modelProvider??e?.model_provider),modelId:On(e?.modelId??e?.model_id),usage:r,latencyMs:Number.isFinite(Number(e?.latencyMs??e?.latency_ms))?Number(e?.latencyMs??e?.latency_ms):null,createdByUserId:wc(e?.createdByUserId??e?.created_by_user_id),updatedByUserId:wc(e?.updatedByUserId??e?.updated_by_user_id),createdAt:String(e?.createdAt||e?.created_at||"").trim(),updatedAt:String(e?.updatedAt||e?.updated_at||e?.createdAt||e?.created_at||"").trim(),deletedAt:ms(e?.deletedAt??e?.deleted_at)}}function Sb(){if(typeof window>"u")return{};try{const e=window.localStorage.getItem(uC);if(!e)return{};const t=JSON.parse(e);return t&&typeof t=="object"?t:{}}catch{return{}}}function yP(e){if(!(typeof window>"u"))try{window.localStorage.setItem(uC,JSON.stringify(e))}catch{}}function kP(e){try{return JSON.stringify(e&&typeof e=="object"?e:null)}catch{return"null"}}function vP(e){return e.flatMap(t=>{const r=String(t?.id||"").trim();return!r||!Array.isArray(t?.comments)?[]:t.comments.map(a=>({id:String(a?.id||"").trim(),sessionId:r,body:String(a?.body||""),anchor:a?.anchor??null,order:Number.isFinite(Number(a?.order))?Math.max(0,Math.floor(Number(a.order))):0,authorActorId:typeof a?.authorActorId=="string"&&a.authorActorId.trim().length>0?a.authorActorId.trim():null,updatedByActorId:typeof a?.updatedByActorId=="string"&&a.updatedByActorId.trim().length>0?a.updatedByActorId.trim():null,deletedByActorId:typeof a?.deletedByActorId=="string"&&a.deletedByActorId.trim().length>0?a.deletedByActorId.trim():null,createdAt:String(a?.createdAt||"").trim(),updatedAt:String(a?.updatedAt||a?.createdAt||"").trim(),deletedAt:typeof a?.deletedAt=="string"&&a.deletedAt.trim().length>0?a.deletedAt.trim():null})).filter(a=>a.id.length>0&&a.sessionId.length>0)})}function fC(e){return{taskIds:Array.from(e.taskIds.values()),taskWatermarks:Array.from(e.taskWatermarks.entries()),taskChangeKeys:Array.from((e.taskChangeKeys||new Map).entries()),taskRelationshipChangeKeys:Array.from((e.taskRelationshipChangeKeys||new Map).entries()),initiativeWatermarks:Array.from(e.initiativeWatermarks.entries()),workstreamWatermarks:Array.from(e.workstreamWatermarks.entries()),aiProfileWatermarks:Array.from(e.aiProfileWatermarks.entries()),aiProfileChangeKeys:Array.from((e.aiProfileChangeKeys||new Map).entries()),taskforceAgentWatermarks:Array.from((e.taskforceAgentWatermarks||new Map).entries()),taskforceAgentSkillWatermarks:Array.from((e.taskforceAgentSkillWatermarks||new Map).entries()),agentConversationWatermarks:Array.from((e.agentConversationWatermarks||new Map).entries()),documentWatermarks:Array.from(e.documentWatermarks.entries()),assetWatermarks:Array.from(e.assetWatermarks.entries()),documentReviewSessionWatermarks:Array.from(e.documentReviewSessionWatermarks.entries()),documentReviewCommentWatermarks:Array.from(e.documentReviewCommentWatermarks.entries()),annotatedAttachmentSessionWatermarks:Array.from(e.annotatedAttachmentSessionWatermarks.entries()),taskEventWatermarks:Array.from(e.taskEventWatermarks.entries()),taxonomyStateFingerprint:typeof e.taxonomyStateFingerprint=="string"?e.taxonomyStateFingerprint:"",taxonomyChangeKey:typeof e.taxonomyChangeKey=="string"?e.taxonomyChangeKey:""}}function mC(e,t){if(!e||typeof e!="object")return null;const r=typeof e.taxonomyStateFingerprint=="string"?e.taxonomyStateFingerprint:"",a=!t||!r||r===t?new Map(Array.isArray(e.taskWatermarks)?e.taskWatermarks:[]):new Map;return{taskIds:new Set(Array.isArray(e.taskIds)?e.taskIds.map(i=>String(i||"").trim()).filter(i=>i.length>0):Array.from(a.keys())),taskWatermarks:a,taskChangeKeys:new Map(Array.isArray(e.taskChangeKeys)?e.taskChangeKeys:[]),taskRelationshipChangeKeys:new Map(Array.isArray(e.taskRelationshipChangeKeys)?e.taskRelationshipChangeKeys:[]),initiativeWatermarks:new Map(Array.isArray(e.initiativeWatermarks)?e.initiativeWatermarks:[]),workstreamWatermarks:new Map(Array.isArray(e.workstreamWatermarks)?e.workstreamWatermarks:[]),aiProfileWatermarks:new Map(Array.isArray(e.aiProfileWatermarks)?e.aiProfileWatermarks:[]),aiProfileChangeKeys:new Map(Array.isArray(e.aiProfileChangeKeys)?e.aiProfileChangeKeys:[]),taskforceAgentWatermarks:new Map(Array.isArray(e.taskforceAgentWatermarks)?e.taskforceAgentWatermarks:[]),taskforceAgentSkillWatermarks:new Map(Array.isArray(e.taskforceAgentSkillWatermarks)?e.taskforceAgentSkillWatermarks:[]),agentConversationWatermarks:new Map(Array.isArray(e.agentConversationWatermarks)?e.agentConversationWatermarks:[]),documentWatermarks:new Map(Array.isArray(e.documentWatermarks)?e.documentWatermarks:[]),assetWatermarks:new Map(Array.isArray(e.assetWatermarks)?e.assetWatermarks:[]),documentReviewSessionWatermarks:new Map(Array.isArray(e.documentReviewSessionWatermarks)?e.documentReviewSessionWatermarks:[]),documentReviewCommentWatermarks:new Map(Array.isArray(e.documentReviewCommentWatermarks)?e.documentReviewCommentWatermarks:[]),annotatedAttachmentSessionWatermarks:new Map(Array.isArray(e.annotatedAttachmentSessionWatermarks)?e.annotatedAttachmentSessionWatermarks:[]),taskEventWatermarks:new Map(Array.isArray(e.taskEventWatermarks)?e.taskEventWatermarks:[]),taxonomyChangeKey:typeof e.taxonomyChangeKey=="string"?e.taxonomyChangeKey:""}}function $y(e,t){if(typeof window>"u")return null;try{const r=`${pC}.${e}`,a=window.localStorage.getItem(r);if(!a)return null;const s=JSON.parse(a);return!s||s.v!==2&&s.v!==3&&s.v!==4&&s.v!==5&&s.v!==6&&s.v!==7&&s.v!==8&&s.v!==9&&s.v!==10&&s.v!==11&&s.v!==12?null:mC(s,t)}catch{return null}}function Ab(e,t){if(typeof window>"u")return!1;try{const r=`${pC}.${e}`;return window.localStorage.setItem(r,JSON.stringify({v:12,savedAt:new Date().toISOString(),...fC(t)})),!0}catch{return!1}}function wP({currentWorkspaceId:e,workspaceSyncPhase:t,clearWorkspaceRetry:r,setWorkspaceSyncBusy:a,setUserGlobalSyncStatus:s,setUserGlobalSyncError:i,setWorkspaceLastErrorMessage:l,setWorkspaceLastErrorAt:c,reportSyncEvent:d,setAuthBlocked:f,setIsAuthenticated:p,checkAuthSession:g,ensureCloudWorkspaceReadyForSync:h,scheduleWorkspaceSyncRetry:y,persistWorkspaceSyncPatchSafely:k}){const v=async(S,w)=>{r(),a(!1),s("error");const _="Session expired. Sign in again to resume cloud sync.";i(_),l(_),c(new Date().toISOString()),d(e,{eventType:S==="handshake"?"handshake":S,status:"error",statusCode:w,errorMessage:_}),f(!0),p(!1),await g()};return{handleSyncAuthFailure:v,ensureWorkspaceSyncReady:async()=>{if(!mc(e)){const _="Workspace sync blocked: local workspace ID is unresolved.";return l(_),c(new Date().toISOString()),i(_),s("error"),!1}const S=await h();if(S.success)return!0;if(S.statusCode===401)return await v("handshake",401),!1;const w=S.error||"Workspace sync handshake failed.";return l(w),c(new Date().toISOString()),i(w),s("error"),d(e,{eventType:"handshake",status:"error",statusCode:S.statusCode,errorMessage:w}),S.transient||Go(S.statusCode)?y(S.retryAfterMs):(t==="active"||t==="attach-cloud"||t==="provision-local")&&k({phase:"error",lastErrorMessage:w}),!1}}}const hC=5*6e4;function Fy(e){if(!e)return null;const t=Date.parse(e);return Number.isFinite(t)?t:null}function Wf(e){return e.cloudAuthConfigured&&e.runtimeMode==="local"&&e.workspaceCloudSyncEnabled&&e.authSessionResolved}function bP({enabled:e,phase:t,busy:r,retryAt:a,lastErrorMessage:s,lastErrorAt:i,lastPullAt:l,lastPushAt:c,nowMs:d,pullLagToleranceMs:f=hC,pendingChanges:p=0,durableOutbox:g}){if(!e)return{status:"off",summary:"Sync is turned off for this workspace.",recommendedAction:"Turn on sync when you are ready to back up this workspace."};if(t==="provision-local")return{status:"syncing",summary:r?"Uploading this workspace to cloud for the first time.":"Preparing the first upload to cloud.",recommendedAction:"Keep this window open while the first upload finishes. If it seems stalled, press Sync."};if(t==="attach-cloud")return{status:"syncing",summary:r?"Pulling the cloud workspace into this device.":"Waiting for the first cloud pull into this device.",recommendedAction:"Keep this window open for the first cloud pull. If it does not move, press Repair."};if((g?.blocked||0)>0){const C=g?.blocked||0,S=g?.pending||0;return{status:"attention",summary:`${C} durable local change${C===1?"":"s"} could not sync${S>0?`; ${S} later change${S===1?" is":"s are"} waiting`:""}.`,recommendedAction:"Press Repair to reconcile and replay supported task changes. If Repair is blocked, copy the report for diagnosis."}}if(g?.recovery&&g.recovery.state!=="completed")return g.recovery.state==="awaiting_baseline"?{status:"attention",summary:"Durable local recovery is waiting for an authoritative cloud repair.",recommendedAction:"Press Repair to resume the verified cloud baseline and replay."}:g.recovery.replayBlocked>0?{status:"attention",summary:"A recovered local change is still blocked during replay.",recommendedAction:"Copy the Sync Manager report so the replay conflict can be diagnosed safely."}:{status:"syncing",summary:"Recovered local changes are replaying against the repaired cloud baseline.",recommendedAction:"No action needed unless the recovery state remains unchanged."};if(a)return{status:"attention",summary:"Sync hit a temporary problem and will retry automatically.",recommendedAction:"Wait for the automatic retry, or press Sync to retry now."};if(s||t==="error")return{status:"attention",summary:"Sync needs attention before it can continue.",recommendedAction:"Press Sync to retry. If the same error keeps returning, press Repair."};if(p>0||(g?.pending||0)>0||(g?.inFlight||0)>0)return{status:"syncing",summary:"Local changes are waiting to sync.",recommendedAction:"No action needed unless the queue remains unchanged."};if(r)return{status:"syncing",summary:"Sync is currently running.",recommendedAction:"No action needed."};const h=Fy(l),y=Fy(c),k=Fy(i);return h===null?{status:"attention",summary:y===null?"This device has not completed its first cloud pull.":"Cloud uploads are working, but this device has not completed a cloud pull.",recommendedAction:"Press Retry now. If the cloud check still does not complete, press Repair and copy the report."}:k!==null&&k>h?{status:"attention",summary:"A sync issue occurred after the last successful cloud pull.",recommendedAction:"Press Retry now to verify cloud changes can still be received. If the issue returns, copy the report."}:Number.isFinite(d)&&d-h>Math.max(0,f)?{status:"attention",summary:y!==null&&y>h?"Cloud uploads are succeeding, but this device has not received cloud changes recently.":"This device has not checked for cloud changes recently.",recommendedAction:"Press Retry now to check cloud changes. If Last cloud check does not advance, press Repair and copy the report."}:{status:"healthy",summary:"A recent cloud check succeeded and no local changes are waiting.",recommendedAction:"No action needed."}}function SP(e){return Wf(e)&&e.workspaceSyncPhase!=="attach-cloud"&&e.workspaceSyncReferenceSnapshotsReady}function AP(e){return Wf(e)&&e.workspaceSyncPhase==="active"&&e.workspaceSyncReferenceSnapshotsReady}function CP(e){return Wf(e)?e.workspaceSyncPhase==="provision-local"||e.workspaceSyncPhase==="error"||e.retryPending?{shouldStart:!1,shouldKickOffImmediately:!1}:{shouldStart:!0,shouldKickOffImmediately:e.workspaceSyncPhase==="attach-cloud"||!e.lastPullAt}:{shouldStart:!1,shouldKickOffImmediately:!1}}function _P(e){return Wf(e)&&e.isAuthenticated&&e.workspaceSyncPhase==="active"}function IP(e){return Wf(e)&&e.isAuthenticated&&e.workspaceSyncPhase!=="provision-local"&&e.workspaceSyncPhase!=="attach-cloud"&&!e.alreadyRan}function TP(e){const{workspaceSyncPhase:t,lastBootstrapPhase:r,workspaceLastPullAt:a}=e;return t==="provision-local"?"provision-local":t==="attach-cloud"?"attach-cloud":t==="active"||r==="active"?"active":r==="provision-local"||r==="attach-cloud"?r:a?"attach-cloud":"provision-local"}function xP({workspaceSyncPhase:e,lastBootstrapPhaseRef:t,bootstrapPhaseStartedAtRef:r,bootstrapLastProgressAtRef:a}){if(e==="attach-cloud"||e==="provision-local"){t.current=e,r.current===null&&(r.current=Date.now()),a.current=null;return}r.current=null,a.current=null}function RP({currentWorkspaceId:e,workspaceCloudSyncEnabled:t,workspaceSyncPhase:r,workspacePullInFlightRef:a,workspacePushInFlightRef:s,bootstrapPhaseStartedAtRef:i,bootstrapLastProgressAtRef:l,isExecutionAuthorized:c=()=>!0,setWorkspaceLastErrorMessage:d,setWorkspaceLastErrorAt:f,setUserGlobalSyncStatus:p,setUserGlobalSyncError:g,setWorkspaceSyncBusy:h,persistWorkspaceSyncPatchSafely:y}){if(!c()||!t||r!=="attach-cloud"&&r!=="provision-local")return;const k=window.setInterval(()=>{if(!c()||r!=="attach-cloud"&&r!=="provision-local"||a.current||s.current)return;const v=Math.max(i.current??0,l.current??0);if(v>0&&Date.now()-v<uP)return;const S=`Workspace sync ${r==="attach-cloud"?"initial cloud pull":"initial cloud upload"} stalled. Press Repair to restart sync for this workspace.`;d(S),f(new Date().toISOString()),p("error"),g(S),h(!1),y({phase:"error",lastErrorMessage:S}),Ns("workspace_sync_bootstrap_timeout",{workspaceId:e,phase:r})},1e4);return()=>window.clearInterval(k)}function PP(e){const t=String(e||"").trim();return t.length>0&&t.toLowerCase()!=="default"}const xv={allowed:!0};function gs(e,t){return{allowed:!1,reason:e,retainPendingSignature:t?.retainPendingSignature===!0}}function Rv(e,t){return e.cloudAuthConfigured?e.runtimeMode!=="local"?gs("runtime-not-local"):e.workspaceCloudSyncEnabled?(t?.requireValidWorkspace??!0)&&!PP(e.currentWorkspaceId)?gs("invalid-workspace"):null:gs("sync-disabled"):gs("cloud-auth-unconfigured")}function Tk(e){const t=Rv(e);return t||(e.repairModeActive&&!e.repairModeBypass?gs("repair-active",{retainPendingSignature:!0}):e.workspaceSyncPhase==="attach-cloud"&&!e.repairModeBypass?gs("attach-cloud",{retainPendingSignature:!0}):e.isAuthenticated?e.pushInFlight?gs("push-in-flight",{retainPendingSignature:!0}):e.pullInFlight?gs("pull-in-flight",{retainPendingSignature:!0}):xv:gs("auth-required"))}function xk(e){const t=Rv(e);return t||(e.repairModeActive&&!e.repairModeBypass?gs("repair-active"):e.workspaceSyncPhase==="provision-local"?gs("provision-local"):e.retryPending?gs("retry-pending"):e.isAuthenticated?e.pullInFlight?gs("pull-in-flight"):e.pushInFlight?gs("push-in-flight"):xv:gs("auth-required"))}function Rk(e){const t=Rv(e,{requireValidWorkspace:!1});return t||(e.isAuthenticated?xv:gs("auth-required"))}function EP(e){return gs("lease-held",{retainPendingSignature:e==="push"})}const NP=512;function jP({cloudAuthConfigured:e,runtimeMode:t,workspaceCloudSyncEnabled:r,workspaceSyncPhase:a,workspacePullInFlightRef:s,realtimePullDebounceRef:i,realtimeSuppressedEventIdsRef:l,clearWorkspaceRetry:c,isWorkspaceRetryPending:d,isExecutionAuthorized:f=()=>!0,isServerOwned:p=()=>!1,signalServerWake:g,pullWorkspaceChangesFromCloud:h}){const y=new Set;let k=!1,v=!1,C=null,S=!1;const w=()=>{if(v||!p())return;const I=S?[]:C;I&&(S=!1,C=null,v=!0,g?.(I).catch(()=>{}).finally(()=>{v=!1,w()}))},_=I=>{if(!S){if(!v&&C===null){C=I,w();return}if(C===null){C=I;return}C=null,S=!0}},M=()=>{C=null,S=!0,w()},R=()=>{if(!k&&y.size===0)return;const I=k?[]:Array.from(y);y.clear(),k=!1,I.length===0?M():_(I)};return{handleRealtimeSignal:I=>{if(!e||t!=="local"||!r||a==="provision-local")return;const E=Array.from(new Set([...I?.eventIds||[],...I?.eventId?[I.eventId]:[]].map(U=>String(U||"").trim()).filter(Boolean)));let K=E.length===0;for(const U of E)l.current.delete(U)||(K=!0);if(K){if(p()){if(E.length===0)k=!0;else if(!k)for(const U of E)y.add(U),y.size>=NP&&(_(Array.from(y)),y.clear());i.current!==null&&window.clearTimeout(i.current),i.current=window.setTimeout(()=>{i.current=null,R()},180);return}f()&&(s.current||(d()&&c(),i.current!==null&&window.clearTimeout(i.current),i.current=window.setTimeout(()=>{i.current=null,f()&&h()},180)))}},recordSuppressedEventIds:(I,E)=>{const K=E?.queueRef,U=Number.isFinite(E?.maxQueueSize)?Math.max(1,Number(E?.maxQueueSize)):2048,L=Number.isFinite(E?.ttlMs)?Math.max(0,Number(E?.ttlMs)):null;for(const D of I){const ie=String(D||"").trim();!ie||l.current.has(ie)||(l.current.add(ie),K&&K.current.push(ie),L!==null&&window.setTimeout(()=>{l.current.delete(ie)},L))}if(K)for(;K.current.length>U;){const D=K.current.shift();D&&l.current.delete(D)}},clearRealtimePullDebounce:()=>{i.current!==null&&(window.clearTimeout(i.current),i.current=null),y.clear(),k=!1,C=null,S=!1}}}function gC(e){e.lastPushedTaskIds.current=new Set,e.lastPushedWatermarks.current=new Map,e.lastPushedTaskChangeKeys.current=new Map,e.lastPushedTaskRelationshipChangeKeys.current=new Map,e.lastPushedTaxonomyChangeKey.current="",e.lastPushedInitiativeIds.current=new Set,e.lastPushedInitiativeWatermarks.current=new Map,e.lastPushedWorkstreamIds.current=new Set,e.lastPushedWorkstreamWatermarks.current=new Map,e.lastPushedAiProfileIds.current=new Set,e.lastPushedAiProfileWatermarks.current=new Map,e.lastPushedAiProfileChangeKeys.current=new Map,e.lastPushedDocumentPaths.current=new Set,e.lastPushedDocumentWatermarks.current=new Map,e.lastPushedAssetPaths.current=new Set,e.lastPushedAssetWatermarks.current=new Map,e.baselineResetReason.current="repair-reset"}function MP(e){gC(e),e.lastPushedDocumentReviewSessionIds.current=new Set,e.lastPushedDocumentReviewSessionWatermarks.current=new Map,e.lastPushedDocumentReviewCommentIds.current=new Set,e.lastPushedDocumentReviewCommentWatermarks.current=new Map,e.lastPushedAnnotatedAttachmentSessionIds.current=new Set,e.lastPushedAnnotatedAttachmentSessionWatermarks.current=new Map,e.lastPushedTaskEventWatermarks.current=new Map}async function DP(e){const t=await globalThis.crypto.subtle.digest("SHA-256",new TextEncoder().encode(e));return Array.from(new Uint8Array(t),r=>r.toString(16).padStart(2,"0")).join("")}function LP({currentWorkspaceId:e,workspaceCloudSyncEnabled:t,workspaceSyncPhase:r,workspaceLastPullAt:a,runtime:s,localServices:i,acquireWorkspaceSyncLease:l,releaseWorkspaceSyncLease:c,forceClearWorkspaceSyncLease:d,clearWorkspaceRetry:f,clearWorkspaceIssue:p,reportWorkspaceWindowContention:g,reportSyncEvent:h,persistWorkspaceSyncPatch:y,persistWorkspaceSyncWatermarksSnapshotBestEffort:k,buildWorkspaceSyncSignature:v,pullWorkspaceChangesFromCloud:C,pushWorkspaceChangesToCloud:S,cloudAuthConfigured:w,runtimeMode:_,isAuthenticated:M,checkAuthSession:R,isExecutionAuthorized:P=()=>!0,coordinatorGeneration:b=null}){const $=s.lastBootstrapPhase,I=s.repairMode,E=s.forceFullAiProfilePush,K=s.startupRepairRan,U=s.startupFullReconcileRan,L=s.fullReconcileInFlight,D=s.pullCursor,ie=s.attachBootstrapBaselineSignature,H=s.captureAttachBootstrapBaseline,be=s.pendingSignature,Z=s.pendingPushReplay,me=s.lastPushedSignature;s.baselineResetReason;const Ve=s.bootstrapPhaseStartedAtMs,Re=s.bootstrapLastProgressAtMs,je=r==="provision-local"?"push":r==="attach-cloud"?"bootstrap":"pull";return{retryWorkspaceCloudSync:async()=>{if(!P())return!1;f();let ve=Rk({cloudAuthConfigured:w,runtimeMode:_,workspaceCloudSyncEnabled:t,currentWorkspaceId:e,isAuthenticated:M});if(!ve.allowed&&ve.reason==="auth-required"){if(!await R())return h(e,{eventType:je,status:"error",errorMessage:"Manual sync retry blocked: sign in is required.",details:{source:"retry.blocked",reason:"auth-required",phase:r}}),!1;ve=Rk({cloudAuthConfigured:w,runtimeMode:_,workspaceCloudSyncEnabled:t,currentWorkspaceId:e,isAuthenticated:!0})}if(!ve.allowed)return h(e,{eventType:je,status:"error",errorMessage:`Manual sync retry blocked: ${ve.reason}.`,details:{source:"retry.blocked",reason:ve.reason,phase:r}}),!1;if(E.current=!0,r==="provision-local"){const V=v();return V?S(V,{forceAllAiProfiles:!0}):!1}const Pe=Z.current;if(r==="active"&&Pe)return be.current=Pe.signature,S(Pe.signature,{forceAllAiProfiles:Pe.forceAllAiProfiles,repairMode:Pe.repairMode});const Le=await C();if(r==="attach-cloud")return Le;const se=v();if(se){be.current=se;const V=await S(se,{forceAllAiProfiles:E.current===!0});return Le||V}return Le},resetWorkspaceSyncCursorAndPull:async()=>{if(!P())return;if(!await l(e,"repair")&&(d(e),!await l(e,"repair"))){g("repair"),h(e,{eventType:"bootstrap",status:"error",errorMessage:"Manual sync repair blocked because another window is already syncing this workspace.",details:{source:"repair.blocked",reason:"lease-held",phase:r}});return}const Pe=TP({workspaceSyncPhase:r,lastBootstrapPhase:$.current,workspaceLastPullAt:a}),Le=Pe==="provision-local",se=Pe==="active"||Pe==="attach-cloud";f(),p();try{if(!t){h(e,{eventType:"bootstrap",status:"error",errorMessage:"Manual sync repair blocked because workspace sync is turned off.",details:{source:"repair.blocked",reason:"sync-disabled",phase:r}});return}let V=null;if(Pe!=="provision-local")try{V=await i.prepareOutboxRecovery(e)}catch(ke){h(e,{eventType:"bootstrap",status:"error",errorMessage:String(ke?.message||"Blocked local changes could not enter recovery."),details:{source:"repair.local-recovery-blocked",phase:r}});return}if(Ve.current=null,Re.current=null,D.current=null,ie.current="",H.current=!1,be.current="",me.current="",E.current=!1,K.current=!1,U.current=!1,L.current=!1,Le&&(MP(s),k()),I.current=!0,h(e,{eventType:"bootstrap",status:"success",errorMessage:"Manual sync repair started.",details:{source:"repair.started",phase:r,repairPhase:Pe,lastBootstrapPhase:$.current}}),await y({phase:Pe,pullCursor:null,startupFullReconcileCompletedAt:null,lastErrorMessage:null}),Pe==="provision-local"){const ke=v();if(!ke)return;await S(ke,{forceAllAiProfiles:!0,repairMode:!0});return}const W=await C({repairMode:!0,...V?.kind==="recovery"&&V.needsAuthoritativeRepair?{forceV3AuthoritativeRepair:!0,recoveryBatchId:V.recoveryBatchId}:{}});if(Pe!=="active"&&Pe!=="attach-cloud"||!W)return;se&&(gC(s),k());const z=v();if(!z)return;if(be.current=z,await S(z,{forceAllAiProfiles:!0,repairMode:!0})&&b!==null&&i.completeAuthoritativeRepair){const ke=await i.completeAuthoritativeRepair({workspaceId:e,coordinatorGeneration:b,repairId:`repair-${globalThis.crypto.randomUUID()}`,stateSignatureSha256:await DP(z)});(!ke.ok||ke.data?.success!==!0)&&h(e,{eventType:"bootstrap",status:"error",statusCode:ke.status,errorMessage:String(ke.data?.error||"Authoritative repair could not settle coordinator recovery."),details:{source:"repair.coordinator-recovery-settlement-failed",phase:r,code:ke.data?.code||null}})}}finally{I.current=!1,c(e)}}}}function OP({workspaceSyncPhase:e,forceCursorNull:t,currentCursor:r}){const a=e==="attach-cloud";return{bootstrap:a,cursor:a||t===!0?null:r,successEventType:a?"bootstrap":"pull"}}function BP({workspaceSyncPhase:e,forceCursorNull:t,repairMode:r,startupFullReconcileRan:a,pendingSignature:s,fallbackSignature:i,lastPushedSignature:l}){const c=e==="attach-cloud",d=c&&r===!0,f=s||i,p=!c&&f&&f!==l?f:null;return{successEventType:c?"bootstrap":"pull",shouldCaptureAttachBootstrapBaseline:c&&!d,shouldClearPendingSignature:c||p!==null,shouldRefreshReferenceSnapshots:c,shouldSeedWorkspaceSnapshotPushBaseline:c&&!d,shouldScheduleStartupFullReconcile:!t&&!c&&!a,deferredPushSignature:p}}function yC(e){if(typeof e!="string")return;const t=e.trim();return t.length>0?t:void 0}function WP(e){return yC(e)??null}function $P(e){if(e==null||e==="")return null;const t=typeof e=="number"?e:Number(e);return Number.isFinite(t)?Math.max(1,Math.floor(t)):null}function FP(e){if(e==null||e==="")return null;const t=typeof e=="number"?e:Number(e);return Number.isFinite(t)?Math.floor(t):null}function UP(e,t,r){if(e===void 0||!e||typeof e!="object"||Array.isArray(e))return;const a=e,s=["canonicalFingerprint","contractVersion","domain","entityId","entityRevision","lifecycleRevision","mutationKind","sequence"],i=Object.keys(a).sort(),l=new Set(["create","metadata-update","append-comment","archive","unarchive"]);if(!(i.length!==s.length||i.some((c,d)=>c!==s[d])||a.contractVersion!==3||a.domain!==t||a.entityId!==r||typeof a.mutationKind!="string"||!l.has(a.mutationKind)||typeof a.sequence!="string"||!/^[1-9]\d*$/.test(a.sequence)||typeof a.entityRevision!="string"||!/^\d+$/.test(a.entityRevision)||typeof a.lifecycleRevision!="string"||!/^\d+$/.test(a.lifecycleRevision)||a.entityRevision==="0"||a.mutationKind==="create"&&(a.entityRevision!=="1"||a.lifecycleRevision!=="0")||(a.mutationKind==="archive"||a.mutationKind==="unarchive")&&a.lifecycleRevision==="0"||typeof a.canonicalFingerprint!="string"||!/^[a-f0-9]{64}$/.test(a.canonicalFingerprint)))return a}function zP(e,t){if(!e||typeof e!="object"||Array.isArray(e))return null;const r=e,a=String(r.id||"").trim();if(!a)return null;const s=UP(r.durableRevision,"initiative",a);if(Object.prototype.hasOwnProperty.call(r,"durableRevision")&&!s)throw new Error("Initiative durable revision is invalid.");const i=xf(r.comments);return{id:a,referenceNumber:$P(r.referenceNumber),referenceLabel:yC(r.referenceLabel),title:String(r.title||"").trim(),description:typeof r.description=="string"?r.description:null,ownerId:WP(r.ownerId),...i?{comments:i}:{},createdAt:String(r.createdAt||t||"").trim(),updatedAt:String(r.updatedAt||t||r.createdAt||"").trim(),order:FP(r.order),attachments:Rf(r.attachments),isArchived:!!r.isArchived,...s?{durableRevision:s}:{}}}function HP(e){const t=zP(e);if(!t||!t.createdAt||!t.updatedAt)throw new Error("Initiative is missing canonical sync identity or watermarks.");return{...t,attachments:cR(e.attachments)}}const kC=["create","metadata-update","append-comment","archive","unarchive"],VP={coverageProfileId:"covered-metadata",coverageVersion:1,projections:[{projectionId:"initiative/full-v1",domain:"initiative",schemaVersion:1,mutationKinds:kC,fields:["id","referenceNumber","referenceLabel","title","description","ownerId","comments","attachments","order","createdAt","updatedAt","isArchived"],dependencies:[],operationAtomic:!0}]};function Pk(e){return Array.isArray(e)?e.every(Pk):!e||typeof e!="object"?!0:Object.entries(e).every(([t,r])=>t!=="content"&&t!=="contentBase64"&&Pk(r))}function vC(e){if(!e||typeof e!="object"||Array.isArray(e))return!1;const t=e;return typeof t.coverageDigest=="string"&&/^[a-f0-9]{64}$/.test(t.coverageDigest)&&En({coverageProfileId:t.coverageProfileId,coverageVersion:t.coverageVersion,projections:t.projections})===En(VP)}function wC(e){const t=a=>/^\d+$/.test(String(a??""));if(e.projection!=="initiative/full-v1"||e.domain!=="initiative"||!e.entityId||!kC.includes(e.mutationKind)||!t(e.sequence)||!t(e.entityRevision)||!t(e.lifecycleRevision)||!/^[a-f0-9]{64}$/.test(e.payloadFingerprint)||!Pk(e.payload)||e.contentSha256!==void 0||e.sizeBytes!==void 0)throw new Error("Workspace sync v3 initiative entry is invalid.");const r=HP(e.payload);if(r.id!==e.entityId||En(r)!==En(e.payload))throw new Error("Workspace sync v3 initiative payload is not canonical.")}const GP={getLocalProjection:NA,applyLocalProjection:jA,pullFeed:PA,pullInitiativeRepair:WA};function KP(e,t){const r=e.data?.projection;return!e.ok||e.data?.success!==!0||e.data?.contractVersion!==3||e.data?.workspaceId!==t||!r||r.owner!=="v2"&&r.owner!=="v3"||!/^\d+$/.test(r.epoch)?null:r}function hf(e){return e.data?.result?.projection||e.data?.projection||null}function Zc(e,t,r){return{kind:"transient-failure",status:e.status,retryAfterMs:e.retryAfterMs,error:String(e.data?.error||r),excludeInitiativesFromV2:t==="v3"}}function qm(e){return e===0||e===429||e>=500}function Cb(e,t){const r=e.data,a=r.coverage,s=r?.repair;if(e.status!==409||r?.workspaceId!==t||r?.protocolVersion!==3||r.legacyInitiativePushDisabled!==!0||r.code!=="CURSOR_EXPIRED"&&r.code!=="COVERAGE_CHANGED"||!s||!vC(a)||s.mode!=="authoritative-covered-projection-snapshot"||!/^\d+$/.test(String(s.snapshotSequence||""))||!Array.isArray(s.entries)||typeof s.hasMore!="boolean"||s.hasMore!==!!s.nextRepairCursor||typeof s.resumeCursor!="string"||!s.resumeCursor)return null;try{s.entries.forEach(wC)}catch{return null}return s}function qP(e,t){const r=e.data;if(!e.ok||r?.protocolVersion!==3||r?.workspaceId!==t||r.legacyInitiativePushDisabled!==!0||!Array.isArray(r.entries)||typeof r.nextCursor!="string"||!r.nextCursor||typeof r.hasMore!="boolean"||!vC(r.coverage)||!/^\d+$/.test(String(r.cycleHighWatermark||""))||!/^\d+$/.test(String(r.lastScannedSequence||""))||!r.diagnostics||r.diagnostics.coveredCount!==r.entries.length||r.diagnostics.scannedCount<r.entries.length)return null;try{r.entries.forEach(wC)}catch{return null}return r}async function YP(e){let t=e.projection,r=t.repair?.cursor||null;const a=new Set;for(;;){const s=await e.dependencies.pullInitiativeRepair(e.resolveCloudAuthUrl,{workspaceId:e.workspaceId,cursor:r,limit:100});if(!s.ok)return s.status===401?{kind:"auth-failure",status:401,excludeInitiativesFromV2:!1}:Zc(s,"v2","Initiative fallback repair failed.");const i=s.data;if(i?.success!==!0||i.workspaceId!==e.workspaceId||!/^\d+$/.test(String(i.snapshotSequence||""))||!Array.isArray(i.entries)||typeof i.hasMore!="boolean"||i.hasMore!==!!i.nextRepairCursor)return{kind:"transient-failure",status:502,error:"Initiative fallback repair returned an invalid page.",excludeInitiativesFromV2:!1};const l=await e.dependencies.applyLocalProjection(e.workspaceId,{kind:"fallback-repair",epoch:t.epoch,previousCursor:r,page:{snapshotSequence:String(i.snapshotSequence),entries:i.entries,hasMore:i.hasMore,nextRepairCursor:i.nextRepairCursor||null}}),c=hf(l);if(!l.ok||!c)return Zc(l,"v3","Initiative fallback repair could not be staged locally.");if(t=c,!i.hasMore)return t.owner==="v2"?{kind:"v2-fallback",excludeInitiativesFromV2:!1}:{kind:"transient-failure",status:502,error:"Initiative fallback repair did not switch ownership.",excludeInitiativesFromV2:!0};const d=String(i.nextRepairCursor||"");if(!d||d===r||a.has(d))return{kind:"transient-failure",status:502,error:"Initiative fallback repair made no progress.",excludeInitiativesFromV2:!1};a.add(d),r=d}}async function $l(e){return YP(e)}async function Ym(e){const t=await e.dependencies.applyLocalProjection(e.workspaceId,{kind:"rollback",epoch:e.projection.epoch}),r=hf(t);return!t.ok||!r||r.owner!=="v2"?Zc(t,e.projection.owner,"Initiative activation rollback is not ready."):{kind:"transient-failure",status:409,error:"Local initiative changes must complete v2 synchronization before v3 activation can retry.",excludeInitiativesFromV2:!1}}async function Ek(e){const t={...GP,...e.dependencies},r={...t,applyLocalProjection:async(...l)=>{const c=await t.applyLocalProjection(...l);return c.ok&&c.data?.success!==!1&&"page"in l[1]&&e.onChangesApplied?.(l[1].page.entries.length),c}},a=await r.getLocalProjection(e.workspaceId),s=KP(a,e.workspaceId);if(!s)return Zc(a,"v2","Local initiative projection state is unavailable.");if(s.owner==="v3"&&s.repair?.resumeCursor.startsWith("v2-fallback:"))return $l({...e,projection:s,dependencies:r});if(!e.activationEnabled)return s.owner==="v3"?$l({...e,projection:s,dependencies:r}):s.repair?Ym({workspaceId:e.workspaceId,projection:s,dependencies:r}):{kind:"v2-fallback",excludeInitiativesFromV2:!1};let i=s;for(;i.owner==="v2"||i.repair;){const l=await r.pullFeed(e.resolveCloudAuthUrl,{workspaceId:e.workspaceId,repairCursor:i.repair?.cursor||null,limit:100});if(l.status===401)return{kind:"auth-failure",status:401,excludeInitiativesFromV2:!1};if(l.status===404||l.status!==409&&!qm(l.status))return i.owner==="v3"?$l({...e,projection:i,dependencies:r}):Ym({workspaceId:e.workspaceId,projection:i,dependencies:r});if(qm(l.status))return Zc(l,"v2","Workspace sync v3 feed is temporarily unavailable.");const c=Cb(l,e.workspaceId);if(!c)return i.owner==="v3"?$l({...e,projection:i,dependencies:r}):Ym({workspaceId:e.workspaceId,projection:i,dependencies:r});const d=await r.applyLocalProjection(e.workspaceId,{kind:"repair",epoch:i.epoch,previousCursor:i.repair?.cursor||null,page:c}),f=hf(d);if(!d.ok||!f)return Ym({workspaceId:e.workspaceId,projection:i,dependencies:r});const p=i.repair?.cursor||null;if(i=f,i.owner==="v2"&&i.repair?.cursor===p)return{kind:"transient-failure",status:502,error:"Initiative repair made no local progress.",excludeInitiativesFromV2:!1}}for(;i.owner==="v3";){const l=await r.pullFeed(e.resolveCloudAuthUrl,{workspaceId:e.workspaceId,cursor:i.opaqueCursor,limit:100});if(l.status===401)return{kind:"auth-failure",status:401,excludeInitiativesFromV2:!0};if(l.status===404||l.status!==409&&!l.ok&&!qm(l.status))return $l({...e,projection:i,dependencies:r});if(qm(l.status))return Zc(l,"v3","Workspace sync v3 feed is temporarily unavailable.");if(l.status===409){const p=Cb(l,e.workspaceId);if(!p)return $l({...e,projection:i,dependencies:r});const g=await r.applyLocalProjection(e.workspaceId,{kind:"repair",epoch:i.epoch,previousCursor:null,page:p}),h=hf(g);if(!g.ok||!h)return Zc(g,"v3","Initiative repair could not be applied locally.");if(i=h,i.repair)return Ek({...e,dependencies:t});continue}const c=qP(l,e.workspaceId);if(!c||!i.opaqueCursor)return $l({...e,projection:i,dependencies:r});const d=await r.applyLocalProjection(e.workspaceId,{kind:"delta",epoch:i.epoch,previousCursor:i.opaqueCursor,page:c}),f=hf(d);if(!d.ok||!f)return Zc(d,"v3","Workspace sync v3 feed could not be applied locally.");if(f.owner!=="v3"||f.repair||f.opaqueCursor!==c.nextCursor)return{kind:"transient-failure",status:502,error:"Workspace sync v3 feed did not commit its exact cursor.",excludeInitiativesFromV2:!0};if(!c.hasMore)return{kind:"v3-active",excludeInitiativesFromV2:!0};if(f.opaqueCursor===i.opaqueCursor)return{kind:"transient-failure",status:502,error:"Workspace sync v3 feed made no local progress.",excludeInitiativesFromV2:!0};i=f}return{kind:"v2-fallback",excludeInitiativesFromV2:!1}}const Jl=Object.freeze([]),ZP=960*1e3,JP="coverage/task-planning-metadata-v1",QP={getLocalProjection:MA,applyLocalProjection:DA,pullFeed:EA,pullFallbackRepair:$A,getLocalTaskCommentAudit:LA,pullTaskCommentAudit:OA,applyLocalTaskCommentAudit:BA};function Th(e){return tl(e)?.coverage||null}function Qc(e){return e.owner!=="v3"?Jl:tl(e)?.excludedProjections||Jl}function Oi(e,t){return e.coverageProfileId===t.coverageProfileId&&e.coverageVersion===t.coverageVersion&&e.coverageDigest===t.coverageDigest}function XP(e,t){return Oi(t,ka)?e:{...e,coverage:t}}function uu(e,t,r,a){return Oi(a,ka)?e.applyLocalProjection(t,r):e.applyLocalProjection(t,r,a)}function bC(e){return!!(e&&e.coverageId===JP&&(e.owner==="v2"||e.owner==="v3")&&tl(e)&&typeof e.coverageRepairRequired=="boolean"&&/^\d+$/.test(e.epoch)&&(e.repair===null||typeof e.repair=="object"&&/^\d+$/.test(String(e.repair.epoch||""))&&e.repair.snapshotId&&/^\d+$/.test(String(e.repair.snapshotSequence||""))&&typeof e.repair.resumeCursor=="string"&&(e.repair.cursor===null||typeof e.repair.cursor=="string")))}function eE(e,t){const r=e.data?.projection;return!e.ok||e.data?.success!==!0||e.data?.contractVersion!==3||e.data?.workspaceId!==t||!bC(r)?null:r}function pu(e,t){const r=e.data?.result?.projection||e.data?.projection;return e.ok&&e.data?.success===!0&&e.data?.contractVersion===3&&e.data?.workspaceId===t&&bC(r)?r:null}function Vp(e){return e.ok&&e.data?.success===!0&&e.data?.result?.state==="invalidated"}function co(e,t,r){return{kind:"transient-failure",status:e.status,retryAfterMs:e.retryAfterMs,error:String(e.data?.error||r),...e.data?.causeCode?{causeCode:String(e.data.causeCode)}:{},...e.data?.causeAssetId?{causeAssetId:String(e.data.causeAssetId)}:{},excludedProjections:Qc(t)}}function us(e,t){return{kind:"transient-failure",status:502,error:t,excludedProjections:Qc(e)}}function tE(e,t,r){if(!e||typeof e!="object"||Array.isArray(e))return!1;const a=e;return a.success===!0&&a.contractVersion===3&&a.workspaceId===t&&a.previousCursor===r&&Array.isArray(a.entries)&&typeof a.hasMore=="boolean"&&a.hasMore===!!a.nextCursor}async function rE(e){const t=await e.dependencies.getLocalTaskCommentAudit(e.workspaceId),r=t.ok&&t.data?.success===!0&&t.data.contractVersion===3&&t.data.workspaceId===e.workspaceId&&(t.data.cursor===null||t.data.cursor===void 0||typeof t.data.cursor=="string")?t.data.cursor||null:void 0,a=t.data?.nextSweepAt==null?null:String(t.data.nextSweepAt);if(r===void 0)return co(t,e.projection,"Local task comment audit state is unavailable.");const s=Date.now(),i=Date.parse(a||""),l=Number.isFinite(i)&&i>s&&i<=s+ZP;if(r===null&&l)return null;const c=await e.dependencies.pullTaskCommentAudit(e.resolveCloudAuthUrl,{workspaceId:e.workspaceId,cursor:r,limit:50});if(c.status===401)return{kind:"auth-failure",status:401,excludedProjections:Qc(e.projection)};if(!c.ok||!tE(c.data,e.workspaceId,r))return co(c,e.projection,"Cloud task comment audit is temporarily unavailable.");const d=await e.dependencies.applyLocalTaskCommentAudit(e.workspaceId,c.data),f=d.data?.result,p=f?.stale===!0&&f.previousCursor===c.data.nextCursor&&f.nextCursor===c.data.nextCursor;return!d.ok||d.data?.success!==!0||d.data.contractVersion!==3||d.data.workspaceId!==e.workspaceId||!p&&(f?.previousCursor!==r||f?.nextCursor!==c.data.nextCursor)?co(d,e.projection,"Task comment audit could not be applied locally."):(p||e.onChangesApplied?.(Math.max(0,Number(f?.reconciliationsQueued)||0)+Math.max(0,Number(f?.activityEventsApplied)||0)),null)}function Gp(e){return e===0||e===429||e>=500}function vg(e,t){if(!e||typeof e!="object"||Array.isArray(e))return!1;const r=e;return r.coverageProfileId===t.coverageProfileId&&r.coverageVersion===t.coverageVersion&&r.coverageDigest===t.coverageDigest}function Pv(e,t,r){if(!e||typeof e!="object"||Array.isArray(e))return!1;const a=e;return a.success===!0&&a.protocolVersion===3&&a.workspaceId===t&&vg(a.coverage,r)&&!!a.snapshotId&&/^\d+$/.test(String(a.snapshotSequence||""))&&Number.isFinite(Date.parse(String(a.expiresAt||"")))&&Array.isArray(a.entries)&&typeof a.hasMore=="boolean"&&a.hasMore===!!a.nextRepairCursor&&!!a.resumeCursor&&!!a.diagnostics&&a.diagnostics.returnedEntries===a.entries.length}function nE(e,t,r){const a=e.data,s=String(a?.code||"unknown");let i="repair envelope is incompatible";a?.protocolVersion!==3||a?.workspaceId!==t?i="protocol or workspace scope is incompatible":["CURSOR_EXPIRED","COVERAGE_CHANGED","EXPLICIT_REPAIR"].includes(s)?vg(a.coverage,r)?a.repairMode!=="authoritative-covered-projection-snapshot"?i="repair mode is incompatible":wv(a.peerCapability,r)?bv(a.legacyV2Boundary,r)?Pv(a.repair,t,r)||(i="repair page is incompatible"):i="legacy v2 boundary attestation is incompatible":i="peer capability attestation is incompatible":i="coverage attestation is incompatible":i="repair code is unsupported";const l=String(a?.error||"").trim();return`Cloud combined workspace sync returned an invalid repair response (${s}; ${i}).`+(l?` Cloud error: ${l}`:"")}function Zm(e,t,r){const a=e.data;return e.status===409&&a?.protocolVersion===3&&a.workspaceId===t&&(a.code==="CURSOR_EXPIRED"||a.code==="COVERAGE_CHANGED"||a.code==="EXPLICIT_REPAIR")&&vg(a.coverage,r)&&a.repairMode==="authoritative-covered-projection-snapshot"&&wv(a.peerCapability,r)&&bv(a.legacyV2Boundary,r)&&Pv(a.repair,t,r)?a.repair:null}function aE(e,t,r){const a=e.data;return e.ok&&a?.success===!0&&a.protocolVersion===3&&a.workspaceId===t&&vg(a.coverage,r)&&wv(a.peerCapability,r)&&bv(a.legacyV2Boundary,r)&&Array.isArray(a.entries)&&typeof a.nextCursor=="string"&&a.nextCursor&&typeof a.hasMore=="boolean"&&/^\d+$/.test(String(a.cycleHighWatermark||""))&&/^\d+$/.test(String(a.lastScannedSequence||""))&&a.diagnostics&&a.diagnostics.coveredCount===a.entries.length&&a.diagnostics.scannedCount>=a.entries.length?a:null}function sE(e){const t=e.data&&typeof e.data=="object"?e.data.peerCapability:void 0,r=Array.isArray(t?.missingPrerequisites)?String(t.missingPrerequisites[0]||"").trim():"";return r?`Cloud combined workspace sync prerequisite is not ready (${r}).`:"Cloud combined workspace sync capability attestation is missing or incompatible."}function oE(e){return e.data?.success!==!1?!1:e.status===410&&e.data.code==="WORKSPACE_SYNC_V3_COMBINED_REPAIR_SNAPSHOT_UNAVAILABLE"||e.status===400&&e.data.code==="INVALID_SYNC_V3_REPAIR_CURSOR"}async function Jm(e){let t=e.projection;const r=Th(t);if(!r)return us(t,"Persisted combined workspace sync coverage is unsupported.");let a=t.repair?.resumeCursor.startsWith("v2-fallback:")?t.repair.cursor:null;const s=new Set;let i=!1;for(;;){const l=await e.dependencies.pullFallbackRepair(e.resolveCloudAuthUrl,XP({workspaceId:e.workspaceId,cursor:a,limit:100},r));if(l.status===401)return{kind:"auth-failure",status:401,excludedProjections:Qc(t)};if(l.status===410&&a&&!i&&l.data?.success===!1&&l.data.code==="WORKSPACE_SYNC_V3_COMBINED_REPAIR_SNAPSHOT_UNAVAILABLE"){i=!0,a=null,s.clear();continue}if(!l.ok)return co(l,t,"Combined v2 fallback repair failed.");const c=Pv(l.data,e.workspaceId,r)&&gx(l.data.legacyV2Boundary)?l.data:null;if(!c)return us(t,"Combined v2 fallback repair returned an invalid page.");const d=await uu(e.dependencies,e.workspaceId,{kind:"fallback-repair",epoch:t.epoch,previousCursor:a,page:c},r),f=pu(d,e.workspaceId);if(!d.ok||!f)return co(d,t,"Combined v2 fallback repair could not be applied locally.");if(t=f,!c.hasMore)return t.owner==="v2"&&!t.repair?{kind:"v2-fallback",excludedProjections:Jl}:us(t,"Combined v2 fallback repair did not release v3 ownership.");const p=String(c.nextRepairCursor||"");if(!p||p===a||s.has(p)||t.owner!=="v3"||t.repair?.cursor!==p||!t.repair.resumeCursor.startsWith("v2-fallback:"))return us(t,"Combined v2 fallback repair made no progress.");s.add(p),a=p}}function _b(e){return Nk(e,!1)}async function Nk(e,t){const r={...QP,...e.dependencies},a={...r,applyLocalProjection:async(...C)=>{const S=await r.applyLocalProjection(...C);return S.ok&&S.data?.success!==!1&&!Vp(S)&&e.onChangesApplied?.(C[1].page.entries.length),S}},s=e.coverage||ka,i=tl(s);if(!i)return{kind:"transient-failure",status:502,error:"Requested combined workspace sync coverage is unsupported.",excludedProjections:Jl};const l=await a.getLocalProjection(e.workspaceId,s),c=eE(l,e.workspaceId);if(!c)return{kind:"transient-failure",status:l.status,retryAfterMs:l.retryAfterMs,error:String(l.data?.error||"Local combined projection state is unavailable."),excludedProjections:Jl};if(c.owner==="v3"&&c.repair?.resumeCursor.startsWith("v2-fallback:"))return Jm({...e,projection:c,dependencies:a});if(!e.activationEnabled)return c.owner==="v3"?Jm({...e,projection:c,dependencies:a}):{kind:"v2-fallback",excludedProjections:Jl};let d=c,f=!1,p=!1,g=t;const h=Th(d);if(!h)return us(d,"Persisted combined workspace sync coverage is unsupported.");if(d.coverageRepairRequired||d.owner==="v3"&&!d.repair&&!Oi(h,s)){const C=await a.pullFeed(e.resolveCloudAuthUrl,{workspaceId:e.workspaceId,...d.owner==="v3"&&d.opaqueCursor?{cursor:d.opaqueCursor}:{},limit:100,...Oi(s,ka)?{}:{coverage:s}});if(C.status===401)return{kind:"auth-failure",status:401,excludedProjections:Qc(d)};if(Gp(C.status))return co(C,d,"Combined workspace sync coverage upgrade is temporarily unavailable.");const S=Zm(C,e.workspaceId,s);if(!S)return us(d,"Cloud combined workspace sync did not provide the required coverage upgrade repair.");const w=await uu(a,e.workspaceId,{kind:"repair",epoch:d.epoch,previousCursor:null,page:S,...e.recoveryBatchId?{recoveryBatchId:e.recoveryBatchId}:{}},s),_=pu(w,e.workspaceId),M=_?Th(_):null;if(_&&Vp(w)){if(g)return us(_,"A refreshed combined repair snapshot still predates authoritative local state.");d=_,p=!0,g=!0}else if(!w.ok||!_||!M||(S.hasMore?!_.repair||_.repair.cursor!==S.nextRepairCursor||!Oi(M,h):_.coverageRepairRequired||_.repair!==null||!Oi(M,s)))return co(w,d,"Combined workspace sync coverage upgrade could not be applied locally.");d=_,f=!!(e.recoveryBatchId&&!d.repair)}if(e.forceAuthoritativeRepair&&!f&&d.owner==="v3"&&!d.repair){const C=await a.pullFeed(e.resolveCloudAuthUrl,{workspaceId:e.workspaceId,limit:100,forceRepair:!0,...Oi(s,ka)?{}:{coverage:s}});if(C.status===401)return{kind:"auth-failure",status:401,excludedProjections:Qc(d)};if(Gp(C.status))return co(C,d,"Combined workspace sync authoritative recovery is temporarily unavailable.");const S=Zm(C,e.workspaceId,s);if(!S)return us(d,"Cloud combined workspace sync did not provide the requested authoritative repair.");const w=await uu(a,e.workspaceId,{kind:"repair",epoch:d.epoch,previousCursor:null,page:S,...e.recoveryBatchId?{recoveryBatchId:e.recoveryBatchId}:{}},s),_=pu(w,e.workspaceId);if(!w.ok||!_)return co(w,d,"Combined workspace sync authoritative recovery could not be applied locally.");if(d=_,Vp(w)){if(g)return us(d,"A refreshed combined repair snapshot still predates authoritative local state.");p=!0,g=!0}}let y=!1,k=!1;for(;d.owner==="v2"||d.repair||p;){const C=y||p?null:d.repair?.cursor||null,S=await a.pullFeed(e.resolveCloudAuthUrl,{workspaceId:e.workspaceId,...y||p?{forceRepair:!0}:{repairCursor:C},limit:100,...Oi(s,ka)?{}:{coverage:s}});if(S.status===401)return{kind:"auth-failure",status:401,excludedProjections:Qc(d)};if(C&&!k&&oE(S)){k=!0,y=!0;continue}if(Gp(S.status))return co(S,d,"Combined workspace sync feed is temporarily unavailable.");const w=Zm(S,e.workspaceId,s);if(!w)return us(d,sE(S));const _=await uu(a,e.workspaceId,{kind:"repair",epoch:d.epoch,previousCursor:C,page:w,...e.recoveryBatchId?{recoveryBatchId:e.recoveryBatchId}:{}},s),M=pu(_,e.workspaceId);if(!_.ok||!M)return co(_,d,"Combined workspace sync repair could not be applied locally.");if(d=M,y=!1,p=!1,Vp(_)){if(g)return us(d,"A refreshed combined repair snapshot still predates authoritative local state.");g=!0,p=!0;continue}if(d.repair?.cursor===C)return us(d,"Combined workspace sync repair made no local progress.")}const v=Th(d);if(d.owner!=="v3"||!v||!Oi(v,s))return us(d,"Combined workspace sync repair did not activate the requested coverage.");if(e.recoveryBatchId)return{kind:"v3-active",excludedProjections:i.excludedProjections};for(;d.owner==="v3";){const C=await a.pullFeed(e.resolveCloudAuthUrl,{workspaceId:e.workspaceId,cursor:d.opaqueCursor,limit:100,...Oi(s,ka)?{}:{coverage:s}});if(C.status===401)return{kind:"auth-failure",status:401,excludedProjections:Qc(d)};if(C.status===404||C.status!==409&&!C.ok&&!Gp(C.status))return Jm({...e,projection:d,dependencies:a});if(Gp(C.status))return co(C,d,"Combined workspace sync feed is temporarily unavailable.");if(C.status===409){const M=Zm(C,e.workspaceId,s);if(!M)return us(d,nE(C,e.workspaceId,s));const R=await uu(a,e.workspaceId,{kind:"repair",epoch:d.epoch,previousCursor:null,page:M,...e.recoveryBatchId?{recoveryBatchId:e.recoveryBatchId}:{}},s),P=pu(R,e.workspaceId);if(!R.ok||!P)return co(R,d,"Combined workspace sync repair could not be applied locally.");if(d=P,Vp(R))return g?us(d,"A refreshed combined repair snapshot still predates authoritative local state."):Nk({...e,forceAuthoritativeRepair:!0},!0);if(d.repair)return Nk({...e,dependencies:r},g);continue}const S=aE(C,e.workspaceId,s);if(!S||!d.opaqueCursor)return Jm({...e,projection:d,dependencies:a});const w=await uu(a,e.workspaceId,{kind:"delta",epoch:d.epoch,previousCursor:d.opaqueCursor,page:S},s),_=pu(w,e.workspaceId);if(!w.ok||!_)return co(w,d,"Combined workspace sync page could not be applied locally.");if(_.owner!=="v3"||_.repair||_.opaqueCursor!==S.nextCursor)return us(d,"Combined workspace sync feed did not commit its exact v3 cursor.");if(!S.hasMore)return await rE({resolveCloudAuthUrl:e.resolveCloudAuthUrl,workspaceId:e.workspaceId,projection:_,dependencies:a,onChangesApplied:e.onChangesApplied})||{kind:"v3-active",excludedProjections:i.excludedProjections};if(_.opaqueCursor===d.opaqueCursor)return us(d,"Combined workspace sync feed made no local progress.");d=_}return{kind:"v2-fallback",excludedProjections:Jl}}var iE={};async function SC(e){const t=e.remoteServices,r=e.localServices.applyV2Batch,a=await t.pullWorkspaceContent({workspaceId:e.workspaceId,requests:[{kind:"asset",assetId:e.assetId}],previousCursor:null}),s=a.transferReceipt;let i=!1;try{if(!a.ok)return{success:!1,error:`Workspace attachment asset hydration failed (${a.status||0}).`};const l=a.data||{};if((l.missing?.length||0)>0||(l.remaining?.length||0)>0)return{success:!1,error:`Workspace attachment asset is unavailable in cloud content: ${e.assetId}`};const c=Array.isArray(l.changes)?l.changes:[],d=c.filter(w=>(w.op==="document-upsert"||w.op==="asset-upsert")&&String(w.assetId||"").trim()===e.assetId);if(c.length!==1||d.length!==1)return{success:!1,error:`Workspace attachment asset hydration returned an unexpected payload: ${e.assetId}`};try{await _h(d[0],typeof process<"u"?iE?.TASKFORCE_SYNC_KEY:void 0)}catch{return{success:!1,error:`Workspace attachment asset hydration decryption failed: ${e.assetId}`}}const f=Array.isArray(l.contentMetadata)?l.contentMetadata:[],p=d[0].op==="document-upsert"?"document":"asset",g=f.filter(w=>w.kind===p&&w.assetId===e.assetId&&w.path===d[0].path);if(f.length!==1||g.length!==1)return{success:!1,error:`Workspace attachment asset hydration metadata is unavailable: ${e.assetId}`};const h=g[0],y=d[0].op==="document-upsert"?await $h("document",d[0].content):await $h("asset",d[0].contentBase64);if(y.sha256!==h.sha256.toLowerCase()||y.sizeBytes!==h.sizeBytes)return{success:!1,error:`Workspace attachment asset hydration verification failed: ${e.assetId}`};const k=s?t.buildV2ApplyCompletionGroup({workspaceId:e.workspaceId,previousCursor:null,nextCursor:null,receipts:[s]}):void 0;if(s&&!k)return{success:!1,error:"Workspace attachment asset hydration could not bind its transfer to local apply."};const v=k?await r(e.workspaceId,d,{completionGroup:k}):await r(e.workspaceId,d);if(!v.ok)return{success:!1,error:`Workspace attachment asset hydration apply failed (${v.status||0}).`};i=!0;const C=v.data&&typeof v.data=="object"?v.data:{},S=Array.isArray(C.emittedEventIds)?C.emittedEventIds.map(w=>String(w||"").trim()).filter(Boolean):[];return{success:!0,appliedChanges:d.length,emittedEventIds:S}}finally{s&&!i&&await t.abandonTransferReceipts({workspaceId:e.workspaceId,receipts:[s],errorCode:"WORKSPACE_SYNC_V3_ATTACHMENT_HYDRATION_NOT_COMMITTED"})}}function cE(e){return e.causeCode==="TASK_ATTACHMENT_ASSET_NOT_READY"&&e.causeAssetId?e.causeAssetId:e.status!==409?null:/^Task attachment asset is unavailable because it has not reached this runtime: ([A-Za-z0-9._:-]+)$/.exec(String(e.error||""))?.[1]||null}function lE(e){if(!e||typeof e!="object"||Array.isArray(e))return null;const t=e.repair;return t&&typeof t=="object"&&!Array.isArray(t)?t:e}function Ib(e){return e.kind==="delta"?String(e.page.nextCursor||"")||null:e.page.hasMore===!0?String(e.page.nextRepairCursor||"")||null:e.kind==="repair"&&String(e.page.resumeCursor||"")||null}function dE(e){const t=new WeakMap,r=new Set,a=f=>{const p=lE(f.data);return f.transferReceipt&&(r.add(f.transferReceipt),p&&t.set(p,f.transferReceipt)),f},s=(f,p)=>{const g=t.get(f);if(!g)return;const h=e.remoteServices.buildV3ApplyCompletionGroup({workspaceId:e.workspaceId,apply:p,receipts:[g]});if(!h)throw new Error("A v3 sync transfer receipt did not produce an apply completion group.");return h},i=async f=>{try{await e.remoteServices.abandonTransferReceipts({workspaceId:e.workspaceId,receipts:f,errorCode:Xw})}catch{await e.remoteServices.abandonTransferReceipts({workspaceId:e.workspaceId,receipts:f,errorCode:Xw})}},l=async f=>{const p=t.get(f);p&&(await i([p]),t.delete(f),r.delete(p))},c=async(f,p,g)=>{let h=!1;try{const y=s(f,p),k=await g(y);if(y&&(!k||typeof k!="object"||!("ok"in k)||k.ok!==!0))h=!0,await l(f);else if(y){const v=t.get(f);t.delete(f),v&&r.delete(v)}return k}catch(y){throw h||await l(f),y}};return{abandonPendingReceipts:async()=>{if(r.size===0)return;const f=Array.from(r);await i(f);for(const p of f)r.delete(p)},initiative:{getLocalProjection:e.localServices.readInitiativeProjection,applyLocalProjection:(f,p)=>{if(p.kind==="rollback")return e.localServices.applyInitiativeProjection(f,p);const g={projection:"initiative",kind:p.kind,epoch:p.epoch,previousCursor:p.previousCursor,nextCursor:Ib({kind:p.kind,page:p.page})};return c(p.page,g,h=>e.localServices.applyInitiativeProjection(f,p,h?{completionGroup:h}:void 0))},pullFeed:async(f,p)=>a(await e.remoteServices.pullInitiativeFeed(p)),pullInitiativeRepair:async(f,p)=>a(await e.remoteServices.pullInitiativeRepair(p))},combined:{getLocalProjection:e.localServices.readCombinedProjection,applyLocalProjection:(f,p,g)=>{const h={projection:"combined",kind:p.kind,epoch:p.epoch,previousCursor:p.previousCursor,nextCursor:Ib({kind:p.kind,page:p.page})};return c(p.page,h,y=>e.localServices.applyCombinedProjection(f,p,g,y?{completionGroup:y}:void 0))},getLocalTaskCommentAudit:e.localServices.readTaskCommentAuditCursor,applyLocalTaskCommentAudit:(f,p)=>{const g={projection:"task-comment-audit",kind:"audit",previousCursor:p.previousCursor,nextCursor:p.nextCursor};return c(p,g,h=>e.localServices.applyTaskCommentAuditPage(f,p,h?{completionGroup:h}:void 0))},pullFeed:async(f,p)=>a(await e.remoteServices.pullCombinedFeed(p)),pullFallbackRepair:async(f,p)=>a(await e.remoteServices.pullCombinedRepair(p)),pullTaskCommentAudit:async(f,p)=>a(await e.remoteServices.pullTaskCommentAudit(p))}}}function uE({cloudAuthConfigured:e,runtimeMode:t,initiativeFeedActivationEnabled:r,combinedFeedActivationEnabled:a,combinedFeedCoverage:s,workspaceCloudSyncEnabled:i,currentWorkspaceId:l,workspaceSyncPhase:c,isAuthenticated:d,checkAuthSession:f,resolveCloudAuthUrl:p,ensureCloudWorkspaceReadyForSync:g,ensureWorkspaceSyncReady:h,handleSyncAuthFailure:y,clearWorkspaceRetry:k,clearWorkspaceIssue:v,isWorkspaceRetryPending:C,isDurableRecoveryBlockingOrdinaryPush:S,isExecutionAuthorized:w=()=>!0,scheduleWorkspaceSyncRetry:_,persistWorkspaceSyncPatchSafely:M,persistWorkspaceSyncPatchBestEffort:R,persistWorkspaceSyncWatermarksSnapshotBestEffort:P,refreshWorkspaceAiProfilePushBaselineFromPersistence:b,reportSyncEvent:$,acquireWorkspaceSyncLease:I,releaseWorkspaceSyncLease:E,recordWorkspaceSyncCompletion:K,reportWorkspaceWindowContention:U,refreshWorkspaceSyncMarkdownDocumentsSnapshot:L,refreshWorkspaceSyncAiProfilesSnapshot:D,refreshWorkspaceSyncAssetsSnapshot:ie,refreshWorkspaceSyncTaxonomySnapshot:H,refreshWorkspaceSyncPlanningEntitiesSnapshot:be,refreshWorkspaceSyncDocumentReviewSessionsSnapshot:Z,refreshWorkspaceSyncAnnotatedAttachmentSessionsSnapshot:me,refreshWorkspaceSyncTaskforceAgentsSnapshot:Ve,refreshLocalWorkspaceTaskCollections:Re,buildWorkspaceSyncPayload:je,buildWorkspaceSyncSignature:ye,seedWorkspaceSnapshotPushBaseline:ue,shouldSuppressAttachBootstrapPush:ve,recordSuppressedEventIds:Pe,runtime:Le,localServices:se,remoteServices:V,setWorkspaceSyncBusy:W,setUserGlobalSyncStatus:z,setUserGlobalSyncError:fe,setWorkspaceLastErrorMessage:ke,setWorkspaceLastErrorAt:Y,setWorkspaceLastPullAt:we,setWorkspaceLastPushAt:q,setWorkspaceSyncPendingChanges:le,setTasks:$e,setArchivedTasks:re,now:de,scheduleTask:He,logDebug:ce=()=>{},notifyAiProfilesMutated:pe=()=>{},notifyAgentsMutated:xe=()=>{},notifyAgentSkillsMutated:N=()=>{}}){const{repairMode:X,forceFullAiProfilePush:Ae,pushInFlight:Te,pullInFlight:he,pullAfterPushRequested:ot,pendingPushReplay:We,blockedPushSignature:Xe,lastPushedSignature:ae,pendingSignature:G,lastPushedTaskIds:Ie,deletedTaskIds:Fe,deletedTaskWatermarks:it,pullCursor:Me,lastPushedWatermarks:qe,lastPushedTaskChangeKeys:ge,lastPushedTaskRelationshipChangeKeys:_e,lastPushedTaxonomyChangeKey:Be,lastPushedInitiativeIds:Ge,lastPushedInitiativeWatermarks:F,lastPushedWorkstreamIds:Ne,lastPushedWorkstreamWatermarks:Ce,lastPushedAiProfileIds:ut,lastPushedAiProfileWatermarks:mt,lastPushedAiProfileChangeKeys:Ue,lastPushedDocumentPaths:wt,lastPushedDocumentWatermarks:kt,lastPushedAssetPaths:rt,lastPushedAssetWatermarks:Ht,lastPushedDocumentReviewSessionIds:lr,lastPushedDocumentReviewSessionWatermarks:rr,lastPushedDocumentReviewCommentIds:wr,lastPushedDocumentReviewCommentWatermarks:st,lastPushedAnnotatedAttachmentSessionIds:zt,lastPushedAnnotatedAttachmentSessionWatermarks:Lt,lastPushedTaskforceAgentIds:Mt,lastPushedTaskforceAgentWatermarks:Ee,lastPushedTaskforceAgentSkillIds:ct,lastPushedTaskforceAgentSkillWatermarks:lt,lastPushedAgentConversationIds:Je,lastPushedAgentConversationWatermarks:nt,lastPushedTaskEventWatermarks:Ct,baselineResetReason:Rt,captureAttachBootstrapBaseline:Dt,startupFullReconcileRan:It,startupFullReconcileRequested:Qt,fullReconcileInFlight:ir,bootstrapLastProgressAtMs:dr,realtimeSuppressedEventQueue:sr}=Le,pr=new Map;let Jr=!1;const Tr=(Gt,bt,gr)=>{if(Jr||!w()||pr.has(Gt))return;let u=null;u=He(()=>{pr.delete(Gt),!Jr&&w()&&bt()},gr),pr.set(Gt,u)},br=()=>{if(!Jr){Jr=!0;for(const Gt of pr.values())Gt.cancel();pr.clear()}},ur=async(Gt,bt)=>{if(!w())return!1;if(bt?.repairMode!==!0&&S())return G.current=Gt,!1;let gr=Tk({cloudAuthConfigured:e,runtimeMode:t,workspaceCloudSyncEnabled:i,currentWorkspaceId:l,workspaceSyncPhase:c,isAuthenticated:d,repairModeActive:X.current===!0,repairModeBypass:bt?.repairMode===!0,pushInFlight:Te.current,pullInFlight:he.current});if(!gr.allowed&&gr.reason==="auth-required"){if(!await f())return!1;gr=Tk({cloudAuthConfigured:e,runtimeMode:t,workspaceCloudSyncEnabled:i,currentWorkspaceId:l,workspaceSyncPhase:c,isAuthenticated:!0,repairModeActive:X.current===!0,repairModeBypass:bt?.repairMode===!0,pushInFlight:Te.current,pullInFlight:he.current})}if(!gr.allowed)return gr.retainPendingSignature&&(G.current=Gt),!1;if(ve(Gt))return!1;if(!await I(l,"push")){const Ut=EP("push");return!Ut.allowed&&Ut.retainPendingSignature&&(G.current=Gt),U("push"),!1}Te.current=!0,W(!0),z("syncing"),fe(null);const ht=de().getTime(),yr=bt?.forceAllAiProfiles===!0||Ae.current===!0,Er=bt?.repairMode===!0||X.current===!0;let mn=null,qt=!1,Vr=Gt,Tt=!1;try{b?.();const Ut=[await L(),await D(),await ie(),await H(),await be(),await Z(),await me(),await Ve?.()];if(Er&&Ut.some(ft=>ft===!1)){const ft="Workspace sync repair could not refresh the complete local snapshot. Press Repair to retry.";return k(),z("error"),fe(ft),ke(ft),Y(de().toISOString()),await R({phase:"error",lastErrorMessage:ft}),$(l,{eventType:"push",status:"error",errorMessage:ft,details:{recovery:"repair-snapshot-refresh-failed"}}),!1}if(!await h()||!w())return!1;const $t=ye();if($t&&(Vr=$t),ve(Vr))return!1;const Mr=We.current,Vt=Mr&&Mr.signature===Vr&&(!yr||Mr.forceAllAiProfiles===!0)&&(!Er||Mr.repairMode===!0)?Mr:null,Dr=Vt?.payload||je({forceAllAiProfiles:yr});mn=Dr,qt=Vt!==null,le(Dr.changes.length);const Ye=await Kx({resolveCloudAuthUrl:p,workspaceId:l,payload:Dr,ensureCloudWorkspaceReadyForSync:g,repairMode:Vt?.repairMode??Er,remoteServices:V,localServices:se});if(!Ye.success){if(Ye.status===401)return Tt=!0,We.current=null,await y("push",401),!1;let ft=Ye.error?`Workspace sync push failed (${Ye.status||0}): ${Ye.error}`:`Workspace sync push failed (${Ye.status||0})`;return Ye.status===413&&(ft="Workspace sync failed because the payload is too large. This usually happens when one or more attachments exceed the project limit."),z("error"),fe(ft),ke(ft),Y(de().toISOString()),$(l,{eventType:"push",status:"error",statusCode:Ye.status,errorMessage:ft,requestMs:Ye.requestMs,details:{payloadDiagnostics:Dr.deltaDiagnostics||null,replayedPayload:qt,...Ye.batchProgress?{pushBatchProgress:Ye.batchProgress}:{}}}),G.current=Vr,Ye.transient||Go(Ye.status)?(We.current={signature:Vr,payload:Dr,forceAllAiProfiles:Vt?.forceAllAiProfiles??yr,repairMode:Vt?.repairMode??Er},_(Ye.retryAfterMs)):(Tt=!0,Xe.current=Vr,We.current=null,c==="active"&&M({phase:"error",lastErrorMessage:ft})),!1}const en=Ye.appliedTaskUpserts||[];if(en.length>0){const ft=Ye.pushTransferReceipts||[],rn=Ye.pushBoundary?V.buildV2PushApplyCompletionGroup({workspaceId:l,pushBoundary:Ye.pushBoundary,receipts:ft}):void 0;if(ft.length>0&&!rn)throw await V.abandonTransferReceipts({workspaceId:l,receipts:ft,errorCode:"WORKSPACE_SYNC_V2_PUSH_APPLY_COMPLETION_INVALID"}),new Error("Accepted V2 push echoes are missing an atomic local apply completion group.");let Nt;try{const or=en.map(xr=>({op:"upsert",archived:xr.archived===!0,task:xr.task,...xr.durableRevision?{durableRevision:xr.durableRevision}:{}}));Nt=rn?await se.applyV2Batch(l,or,{completionGroup:rn}):await se.applyV2Batch(l,or)}catch(or){throw ft.length>0&&await V.abandonTransferReceipts({workspaceId:l,receipts:ft,errorCode:"WORKSPACE_SYNC_V2_PUSH_AUTHORITATIVE_APPLY_FAILED"}),or}if(!Nt.ok)throw ft.length>0&&await V.abandonTransferReceipts({workspaceId:l,receipts:ft,errorCode:"WORKSPACE_SYNC_V2_PUSH_AUTHORITATIVE_APPLY_FAILED"}),new Error(`Authoritative V2 push echo apply failed (${Nt.status||0}).`);for(const or of en){const xr=String(or.task.id||"").trim(),hn=String(or.task.updatedAt||or.task.createdAt||"").trim();!xr||!hn||(Ye.currentTaskWatermarks?.set(xr,hn),Ye.pushedWatermarks.set(xr,hn))}try{await Re()}catch{ce("push_local_task_refresh_failed",{workspaceId:l,taskCount:en.length})}}We.current=null,Xe.current="",ae.current=Vr,Ie.current=Ye.currentTaskIds,qe.current=Ye.currentTaskWatermarks?new Map(Ye.currentTaskWatermarks):new Map(qe.current),ge.current=Ye.currentTaskChangeKeys?new Map(Ye.currentTaskChangeKeys):new Map(ge.current),_e&&(_e.current=Ye.currentTaskRelationshipChangeKeys?new Map(Ye.currentTaskRelationshipChangeKeys):new Map(_e.current)),Be&&(Be.current=Ye.currentTaxonomyChangeKey??Be.current),Ge.current=new Set(Ye.currentInitiativeIds),F.current=new Map(Ye.currentInitiativeWatermarks),Ne.current=new Set(Ye.currentWorkstreamIds),Ce.current=new Map(Ye.currentWorkstreamWatermarks),ut.current=new Set(Ye.currentAiProfileIds),mt.current=new Map(Ye.currentAiProfileWatermarks),Ue.current=Ye.currentAiProfileChangeKeys?new Map(Ye.currentAiProfileChangeKeys):new Map(Ue.current),wt.current=new Set(Ye.currentDocumentPaths),kt.current=new Map(Ye.currentDocumentWatermarks),rt.current=new Set(Ye.currentAssetPaths),Ht.current=new Map(Ye.currentAssetWatermarks),lr.current=new Set(Ye.currentDocumentReviewSessionIds),rr.current=new Map(Ye.currentDocumentReviewSessionWatermarks),wr.current=new Set(Ye.currentDocumentReviewCommentIds),st.current=new Map(Ye.currentDocumentReviewCommentWatermarks),zt.current=new Set(Ye.currentAnnotatedAttachmentSessionIds),Lt.current=new Map(Ye.currentAnnotatedAttachmentSessionWatermarks),Mt&&(Mt.current=new Set(Ye.currentTaskforceAgentIds)),Ee&&(Ee.current=new Map(Ye.currentTaskforceAgentWatermarks)),ct&&(ct.current=new Set(Ye.currentTaskforceAgentSkillIds)),lt&&(lt.current=new Map(Ye.currentTaskforceAgentSkillWatermarks)),Je&&(Je.current=new Set(Ye.currentAgentConversationIds)),nt&&(nt.current=new Map(Ye.currentAgentConversationWatermarks)),Ct.current=new Map(Ye.currentTaskEventWatermarks),yr&&(Ae.current=!1);for(const[ft,rn]of Ye.pushedWatermarks)qe.current.set(ft,rn);for(const[ft,rn]of Ye.pushedTaskChangeKeys||new Map)ge.current.set(ft,rn);if(Ye.deleteTaskIds.size>0)for(const ft of Ye.deleteTaskIds)Fe.current.delete(ft),it.current.delete(ft),qe.current.delete(ft),ge.current.delete(ft);const bn=await P();Rt.current=bn?null:"storage-write-failed",Array.isArray(Ye.emittedEventIds)&&Ye.emittedEventIds.length>0&&Pe(Ye.emittedEventIds,{queueRef:sr,maxQueueSize:2048}),k();const tn=Ye.syncedAt||de().toISOString();return ae.current=ye(),q(tn),le(0),z("idle"),M({phase:"active",lastPushAt:tn,lastSyncedAt:tn}),$(l,{eventType:c==="provision-local"?"bootstrap":"push",status:"success",changeCount:Ye.changeCount,requestMs:Ye.requestMs,details:{payloadDiagnostics:Ye.effectiveDeltaDiagnostics||Dr.deltaDiagnostics||null,...Ye.batchProgress?{pushBatchProgress:Ye.batchProgress}:{},...Ye.effectiveDeltaDiagnostics&&Dr.deltaDiagnostics&&Ye.effectiveDeltaDiagnostics.totalChanges!==Dr.deltaDiagnostics.totalChanges?{candidatePayloadDiagnostics:Dr.deltaDiagnostics}:{},replayedPayload:qt}}),!0}catch(Ut){const fr="Workspace sync push failed.";return z("error"),fe(fr),ke(fr),Y(de().toISOString()),G.current=Vr,mn&&(We.current={signature:Vr,payload:mn,forceAllAiProfiles:yr,repairMode:Er}),_(),$(l,{eventType:"push",status:"error",errorMessage:`${fr} ${String(Ut?.message||"").trim()}`.trim(),details:{replayedPayload:qt}}),ce("push_failed_exception",{workspaceId:l,elapsedMs:de().getTime()-ht}),!1}finally{Te.current=!1,W(he.current),E(l),ot.current&&!he.current&&!C()&&Tr("pull-after-push",()=>{Qr()},0);const Ut=G.current,fr=ye();Ut&&fr&&fr!==ae.current&&!he.current&&!C()&&!Tt&&Tr("pending-push",()=>{const $t=G.current||fr;G.current="",ur($t)},120)}},Qr=async Gt=>{if(!w())return!1;const bt=Gt?.repairMode===!0,gr=async mn=>{bt&&(k(),await R({phase:"error",lastErrorMessage:mn}))};let u=xk({cloudAuthConfigured:e,runtimeMode:t,workspaceCloudSyncEnabled:i,currentWorkspaceId:l,workspaceSyncPhase:c,isAuthenticated:d,repairModeActive:X.current===!0,repairModeBypass:bt,retryPending:C(),pullInFlight:he.current,pushInFlight:Te.current});if(!u.allowed&&u.reason==="auth-required"){if(!await f())return await gr("Session expired. Sign in again, then press Repair to resume cloud sync."),!1;u=xk({cloudAuthConfigured:e,runtimeMode:t,workspaceCloudSyncEnabled:i,currentWorkspaceId:l,workspaceSyncPhase:c,isAuthenticated:!0,repairModeActive:X.current===!0,repairModeBypass:bt,retryPending:C(),pullInFlight:he.current,pushInFlight:Te.current})}if(!u.allowed)return u.reason==="push-in-flight"&&!bt&&(ot.current=!0),!1;if(ot.current=!1,!await I(l,"pull"))return U("pull"),!1;he.current=!0,W(!0),z("syncing"),fe(null);const yr=de().getTime();let Er=!1;try{if(!await h())return await gr("Workspace sync repair could not validate cloud access. Resolve the reported error, then press Repair to retry."),!1;if(!w())return!1;const qt={authFailure:!1,failure:null};let Vr=!1,Tt=[],Ut=0;const fr=Nt=>{Ut+=Math.max(0,Number(Nt)||0)},$t=dE({workspaceId:l,remoteServices:V,localServices:se});let Mr="",Fr="";const Vt=(Nt,or)=>Nt.kind==="auth-failure"?(qt.authFailure=!0,!1):Nt.kind==="transient-failure"?(qt.failure={status:Nt.status,retryAfterMs:Nt.retryAfterMs,error:String(Nt.error||"Workspace projection synchronization failed."),projectionCycle:or},!1):!0;try{if(a===!0){const Nt=await Ek({activationEnabled:!1,resolveCloudAuthUrl:p,workspaceId:l,onChangesApplied:fr,dependencies:$t.initiative});if(Vt(Nt,"initiative")){const or=await _b({activationEnabled:!0,coverage:s,resolveCloudAuthUrl:p,workspaceId:l,forceAuthoritativeRepair:Gt?.forceV3AuthoritativeRepair===!0,...Gt?.recoveryBatchId?{recoveryBatchId:Gt.recoveryBatchId}:{},onChangesApplied:fr,dependencies:$t.combined});Tt=or.excludedProjections;const xr=or.kind==="transient-failure"?cE(or):null;xr?(Mr=xr,Fr=or.kind==="transient-failure"?or.error:""):Vt(or,"combined")}}else{if(a!==void 0){const Nt=await _b({activationEnabled:!1,coverage:s,resolveCloudAuthUrl:p,workspaceId:l,onChangesApplied:fr,dependencies:$t.combined});Vt(Nt,"combined")}if(!qt.authFailure&&!qt.failure&&r!==void 0){const Nt=await Ek({activationEnabled:r,resolveCloudAuthUrl:p,workspaceId:l,onChangesApplied:fr,dependencies:$t.initiative});Vt(Nt,"initiative")&&(Vr=Nt.excludeInitiativesFromV2)}}}finally{await $t.abandonPendingReceipts()}if(qt.authFailure)return await y("pull",401),await gr("Session expired. Sign in again, then press Repair to resume cloud sync."),!1;if(qt.failure)return ke(qt.failure.error),Y(de().toISOString()),$(l,{eventType:"apply",status:"error",statusCode:qt.failure.status,errorMessage:qt.failure.error,details:{recovery:"projection-cycle-retry",projectionCycle:qt.failure.projectionCycle,...qt.failure.retryAfterMs!==void 0?{retryAfterMs:qt.failure.retryAfterMs}:{}}}),bt?await R({phase:"error",lastErrorMessage:qt.failure.error}):_(qt.failure.retryAfterMs),!1;if(Mr){const Nt=await SC({workspaceId:l,assetId:Mr,remoteServices:V,localServices:se}).catch(or=>({success:!1,error:or instanceof Error?or.message:String(or||"Unknown hydration failure.")}));return Nt.success&&Nt.emittedEventIds.length>0&&Pe(Nt.emittedEventIds,{ttlMs:6e4}),z("error"),fe(Fr),ke(Fr),Y(de().toISOString()),$(l,{eventType:"apply",status:"error",errorMessage:Fr,changeCount:Nt.success?Nt.appliedChanges:0,details:{recovery:Nt.success?"combined-attachment-asset-hydrated-retry-pending":"combined-attachment-asset-hydration-failed",assetId:Mr,...Nt.success?{}:{hydrationError:Nt.error}}}),_(),!1}const Dr=OP({workspaceSyncPhase:c,forceCursorNull:Gt?.forceCursorNull===!0,currentCursor:Me.current}),Ye=await qx({resolveCloudAuthUrl:p,workspaceId:l,cursor:bt?null:Dr.cursor,bootstrap:Dr.bootstrap,ensureCloudWorkspaceReadyForSync:g,maxPages:bt?200:20,repairMode:bt||X.current===!0,contentMode:Gt?.forceCursorNull===!0?"manifest":"full",excludeInitiatives:Vr,excludedProjections:Tt,onPagePulled:()=>{dr.current=de().getTime()},onAiProfilesApplied:()=>{pe({workspaceId:l,reason:"sync-apply",origin:"sync-orchestrator"})},onChangesApplied:()=>{dr.current=de().getTime()},remoteServices:V,localServices:se});if(!Ye.success){if(Ye.kind==="pull_http"&&Ye.status===401)return await y("pull",401),await gr("Session expired. Sign in again, then press Repair to resume cloud sync."),!1;if(Ye.kind==="apply_auth")return await y("apply",401),await gr("Session expired. Sign in again, then press Repair to resume cloud sync."),!1;if(Ye.kind==="pull_http"&&Ye.errorCode==="INVALID_SYNC_CURSOR"){const or="Saved sync cursor was invalid. Clearing it and retrying from the beginning.";return Me.current=null,M({pullCursor:null}),z("error"),fe(or),ke(or),Y(de().toISOString()),$(l,{eventType:"pull",status:"error",statusCode:Ye.status,errorMessage:or,requestMs:Ye.pullRequestMs,details:{recovery:"cursor-reset",...Ye.serverDiagnostics?{serverPullDiagnostics:Ye.serverDiagnostics}:{}}}),bt?await R({phase:"error",lastErrorMessage:or}):_(150),!1}let Nt=Ye.kind==="apply_payload"||Ye.kind==="apply_all_candidates"||Ye.kind==="exception"?String(Ye.error||"Workspace sync apply failed."):`Workspace sync pull failed (${Ye.status||0})`;return Ye.status===413&&(Nt="Local sync failed because the downloaded payload is too large. This usually happens when the workspace contains massive attachments."),z("error"),fe(Nt),ke(Nt),Y(de().toISOString()),$(l,{eventType:Ye.kind?.startsWith("apply")?"apply":"pull",status:"error",statusCode:Ye.status,errorMessage:Nt,requestMs:Ye.pullRequestMs,details:{pages:Ye.pages,applyMs:Ye.applyMs,...Ye.serverDiagnostics?{serverPullDiagnostics:Ye.serverDiagnostics}:{}}}),bt?await R({phase:"error",lastErrorMessage:Nt}):Ye.transient||Ye.hasTransientApplyFailure||Go(Ye.status)?_(Ye.retryAfterMs):M({phase:"error",lastErrorMessage:Nt}),!1}if(bt&&Ye.hasMore===!0){const Nt="Workspace sync repair stopped before the full cloud snapshot was downloaded. Press Repair to retry.";return z("error"),fe(Nt),ke(Nt),Y(de().toISOString()),await R({phase:"error",lastErrorMessage:Nt}),$(l,{eventType:"pull",status:"error",errorMessage:Nt,requestMs:Ye.pullRequestMs,details:{pages:Ye.pages,applyMs:Ye.applyMs,recovery:"repair-pull-incomplete"}}),!1}Array.isArray(Ye.emittedEventIds)&&Pe(Ye.emittedEventIds,{ttlMs:6e4}),(Ye.pulledTaskforceAgentUpserts||Ye.pulledAgentRoleUpserts||Ye.pulledTaskforceAgentSkillUpserts||Ye.pulledAgentConversationUpserts)&&await Ve?.(),(Ye.pulledTaskforceAgentUpserts||Ye.pulledAgentRoleUpserts||Ye.pulledAgentConversationUpserts)&&xe({workspaceId:l,reason:"sync-apply"}),Ye.pulledTaskforceAgentSkillUpserts&&N({workspaceId:l,reason:"sync-apply"}),Ye.pulledDeleteTaskIds.size>0&&($e(Nt=>Nt.filter(or=>!Ye.pulledDeleteTaskIds.has(String(or.id||"")))),re(Nt=>Nt.filter(or=>!Ye.pulledDeleteTaskIds.has(String(or.id||"")))));const bn=Array.isArray(Ye.documentDecryptFailures)?Ye.documentDecryptFailures.filter(Nt=>String(Nt||"").trim().length>0):[];if(bn.length>0&&ce("pull_document_decrypt_failures",{workspaceId:l,failureCount:bn.length}),Me.current=Ye.cursor||null,Ut>0||Ye.appliedChanges>0&&(bt||Ye.pulledActiveUpserts||Ye.pulledArchivedUpserts||Ye.pulledTaskEventUpserts||Ye.pulledPlanningUpserts||Ye.pulledDeleteTaskIds.size>0))try{await Re()}catch{if(ce("pull_local_refresh_failed",{workspaceId:l,appliedChanges:Ye.appliedChanges+Ut}),bt){const Nt="Workspace sync repair could not refresh tasks and relationships after the cloud pull. Press Repair to retry.";return k(),z("error"),fe(Nt),ke(Nt),Y(de().toISOString()),await R({phase:"error",lastErrorMessage:Nt}),!1}}k(),v();const tn=Ye.syncedAt||de().toISOString();we(tn),le(0),z("idle");const ft=BP({workspaceSyncPhase:c,forceCursorNull:Gt?.forceCursorNull===!0,repairMode:bt,startupFullReconcileRan:It.current,pendingSignature:G.current,fallbackSignature:ye(),lastPushedSignature:ae.current});if(ft.shouldCaptureAttachBootstrapBaseline&&(Dt.current=!0),ft.shouldClearPendingSignature&&(G.current=ft.deferredPushSignature||"",We.current=null),await R({phase:"active",pullCursor:Me.current,lastPullAt:tn,lastSyncedAt:tn,...Gt?.forceCursorNull===!0?{startupFullReconcileCompletedAt:tn}:{},lastErrorMessage:null}),$(l,{eventType:ft.successEventType,status:"success",changeCount:Ye.appliedChanges+Ut,requestMs:Ye.pullRequestMs,details:{pages:Ye.pages,applyMs:Ye.applyMs,...Ye.serverDiagnostics?{serverPullDiagnostics:Ye.serverDiagnostics}:{}}}),ft.shouldRefreshReferenceSnapshots&&(await L(),await ie(),await Z(),await me()),ft.shouldSeedWorkspaceSnapshotPushBaseline&&ue(),ft.shouldRefreshReferenceSnapshots||ft.shouldSeedWorkspaceSnapshotPushBaseline)return Er=!0,!0;if(ft.shouldScheduleStartupFullReconcile&&(Qt.current=!0,Tr("startup-full-reconcile",()=>{!Qt.current||ir.current||(Qt.current=!1,It.current=!0,ir.current=!0,Qr({forceCursorNull:!0}).finally(()=>{ir.current=!1}))},250)),Gt?.forceCursorNull===!0&&!bt&&c==="active"){const Nt=ye();Nt&&(Ae.current=!0,G.current=Nt,Tr("pending-push",()=>{const or=G.current||Nt;G.current="",ur(or,{forceAllAiProfiles:!0})},120))}else if(ft.deferredPushSignature){const Nt=ft.deferredPushSignature;Tr("pending-push",()=>{const or=G.current||Nt;G.current="",ur(or)},120)}return Er=!0,!0}catch(mn){const qt=String(mn?.message||"").trim(),Vr=qt?`Workspace sync pull failed. ${qt}`:"Workspace sync pull failed.";return z("error"),fe(Vr),ke(Vr),Y(de().toISOString()),bt?await R({phase:"error",lastErrorMessage:Vr}):_(),$(l,{eventType:"pull",status:"error",errorMessage:Vr,requestMs:de().getTime()-yr}),ce("pull_failed_exception",{workspaceId:l,elapsedMs:de().getTime()-yr,error:qt||null}),!1}finally{he.current=!1,W(Te.current),Er&&K(l,"pull"),E(l)}};return{pushWorkspaceChangesToCloud:ur,pullWorkspaceChangesFromCloud:Qr,resumeDeferredWork:()=>{w()&&(ot.current&&Tr("pull-after-push",()=>{Qr()},0),G.current&&Tr("pending-push",()=>{const Gt=G.current;Gt&&(G.current="",ur(Gt,{forceAllAiProfiles:Ae.current}))},120),Qt.current&&Tr("startup-full-reconcile",()=>{!Qt.current||ir.current||(Qt.current=!1,It.current=!0,ir.current=!0,Qr({forceCursorNull:!0}).finally(()=>{ir.current=!1}))},250))},dispose:br}}function pE(e){return uE({now:()=>new Date,scheduleTask:(t,r)=>{const a=window.setTimeout(t,r);return{cancel:()=>window.clearTimeout(a)}},logDebug:Ns,notifyAiProfilesMutated:sC,notifyAgentsMutated:oC,notifyAgentSkillsMutated:iC,...e})}const fE="/api/taskforce/sync/v3/local/dispatch",mE=20,hE=1e5;function gE(e){if(e===void 0)return;if(!e||typeof e!="object"||Array.isArray(e))throw new Error("Local outbox dispatch returned an invalid outbox status.");const t=e,r=v=>{const C=Number(t[v]);return Number.isInteger(C)&&C>=0?C:null},a=r("activeDepth"),s=r("pending"),i=r("inFlight"),l=r("blocked");let c;if(t.operationStates!==void 0){if(!t.operationStates||typeof t.operationStates!="object"||Array.isArray(t.operationStates))throw new Error("Local outbox dispatch returned invalid operation states.");const v=t.operationStates,C=w=>{const _=Number(v[w]);return Number.isInteger(_)&&_>=0?_:null},S={pending:C("pending"),retryScheduled:C("retryScheduled"),inFlight:C("inFlight"),stale:C("stale"),blocked:C("blocked")};if(Object.values(S).some(w=>w===null)||s===null||i===null||l===null||S.pending+S.retryScheduled!==s||S.inFlight+S.stale!==i||S.blocked!==l)throw new Error("Local outbox dispatch returned inconsistent operation states.");c={pending:S.pending,retryScheduled:S.retryScheduled,inFlight:S.inFlight,stale:S.stale,blocked:S.blocked}}const d=v=>t[v]===null||typeof t[v]=="string"?t[v]:void 0,f=d("oldestActiveCreatedAt"),p=d("oldestActionableAt"),g=d("blockedErrorCode"),h=t.recovery;let y=null;if(h!==null){if(!h||typeof h!="object"||Array.isArray(h))throw new Error("Local outbox dispatch returned an invalid recovery status.");const v=h,C=b=>{const $=Number(v[b]);return Number.isInteger($)&&$>=0?$:null},S=String(v.state||""),w=C("replayTotal"),_=C("replayPending"),M=C("replayInFlight"),R=C("replayBlocked"),P=C("replayAccepted");if(typeof v.recoveryBatchId!="string"||!["awaiting_baseline","baseline_ready","replay_queued","completed"].includes(S)||w===null||_===null||M===null||R===null||P===null||w<_+M+R+P||typeof v.createdAt!="string"||typeof v.updatedAt!="string"||v.completedAt!==null&&typeof v.completedAt!="string")throw new Error("Local outbox dispatch returned an invalid recovery status.");y={recoveryBatchId:v.recoveryBatchId,state:S,replayTotal:w,replayPending:_,replayInFlight:M,replayBlocked:R,replayAccepted:P,createdAt:v.createdAt,updatedAt:v.updatedAt,completedAt:v.completedAt}}let k;if(t.attachmentApplyObligations!==void 0){if(!t.attachmentApplyObligations||typeof t.attachmentApplyObligations!="object"||Array.isArray(t.attachmentApplyObligations))throw new Error("Local outbox dispatch returned invalid attachment apply obligations.");const v=t.attachmentApplyObligations,C=Number(v.open),S=Number(v.due),w=Number(v.totalAttempts);if(![C,S,w].every(_=>Number.isInteger(_)&&_>=0)||S>C||v.oldestOpenCreatedAt!==null&&typeof v.oldestOpenCreatedAt!="string"||v.nextAttemptAt!==null&&typeof v.nextAttemptAt!="string"||v.lastError!==null&&typeof v.lastError!="string")throw new Error("Local outbox dispatch returned invalid attachment apply obligations.");k={open:C,due:S,totalAttempts:w,oldestOpenCreatedAt:v.oldestOpenCreatedAt,nextAttemptAt:v.nextAttemptAt,lastError:v.lastError}}if(a===null||s===null||i===null||l===null||a!==s+i+l||f===void 0||g===void 0||!Object.prototype.hasOwnProperty.call(t,"recovery"))throw new Error("Local outbox dispatch returned an invalid outbox status.");return{activeDepth:a,pending:s,inFlight:i,blocked:l,...c?{operationStates:c}:{},oldestActiveCreatedAt:f,...p!==void 0?{oldestActionableAt:p}:{},blockedErrorCode:g,recovery:y,...k?{attachmentApplyObligations:k}:{}}}function yE(e){if(!e||typeof e!="object"||Array.isArray(e))throw new Error("Local outbox dispatch returned an invalid response.");const t=e,r=Number(t.claimed),a=Array.isArray(t.outcomes)?t.outcomes:[],s=i=>{if(i.retryDependency===void 0)return!0;if(i.disposition!=="retry"||!i.retryDependency||typeof i.retryDependency!="object"||Array.isArray(i.retryDependency))return!1;const l=i.retryDependency;return Object.keys(l).sort().join(",")==="assetId,kind"&&l.kind==="asset"&&typeof l.assetId=="string"&&/^[A-Za-z0-9._:-]+$/.test(l.assetId)};if(t.success!==!0||!Number.isInteger(r)||r<0||r>1||a.length!==r||a.some(i=>!i||typeof i!="object"||!["accepted","retry","blocked","lease-lost"].includes(String(i.disposition||""))))throw new Error("Local outbox dispatch returned an invalid response.");if(a.some(i=>!s(i)))throw new Error("Local outbox dispatch returned an invalid retry dependency.");return{success:!0,claimed:r,outcomes:a,outbox:gE(t.outbox)}}async function kE(e){const t=String(e.workspaceId||"").trim();if(!t)throw new Error("Workspace id is required to drain the local outbox.");const r=e.fetchImpl||fetch,a=Math.max(1,Math.min(100,Math.floor(e.operationBudget??mE))),s=Math.max(1,Math.floor(e.requestTimeoutMs??hE));let i=0;const l=new Set;let c;for(;i<a;){const d=new AbortController;let f,p;const g=new Promise((y,k)=>{p=k,f=setTimeout(()=>{d.abort(),k(new Error("Local outbox dispatch timed out."))},s)}),h=()=>{d.abort(e.signal?.reason),p?.(new DOMException("Local outbox dispatch aborted.","AbortError"))};e.signal?.aborted?h():e.signal?.addEventListener("abort",h,{once:!0});try{const y=(async()=>{const S=await r(fE,{method:"POST",credentials:"include",headers:{"Content-Type":"application/json"},body:JSON.stringify({workspaceId:t,limit:1}),signal:d.signal});if(!S.ok)throw new Error(`Local outbox dispatch failed (${S.status}).`);return yE(await S.json())})(),k=await Promise.race([y,g]);if(c=k.outbox,k.claimed===0)return{processed:i,retryRecommended:!1,budgetExhausted:!1,...c?{outbox:c}:{}};i+=k.claimed;const v=k.outcomes[0],C=v?.disposition;if(C==="retry"&&v.retryDependency?.kind==="asset"){const S=`${v.retryDependency.kind}:${v.retryDependency.assetId}`;if(l.has(S))return{processed:i,retryRecommended:!0,budgetExhausted:!1,...c?{outbox:c}:{}};if(!e.hydrateAsset||!await e.hydrateAsset(v.retryDependency.assetId))return{processed:i,retryRecommended:!0,budgetExhausted:!1,...c?{outbox:c}:{}};l.add(S);continue}if(C==="retry"||C==="lease-lost")return{processed:i,retryRecommended:!0,budgetExhausted:!1,...c?{outbox:c}:{}}}finally{f!==void 0&&clearTimeout(f),e.signal?.removeEventListener("abort",h)}}return{processed:i,retryRecommended:!0,budgetExhausted:!0,...c?{outbox:c}:{}}}const vE=3e4,wE=1e3,bE=3e4;function SE(e){const t=o.useRef(null),r=o.useRef(""),a=o.useRef(null),s=o.useRef(null),i=o.useRef({enabled:e.enabled,workspaceId:e.workspaceId,authorityScope:e.authorityScope,remoteServices:e.remoteServices,localServices:e.localServices,isAuthorityCurrent:e.isAuthorityCurrent,onHydratedEventIds:e.onHydratedEventIds,onOutboxStatus:e.onOutboxStatus});i.current={enabled:e.enabled,workspaceId:e.workspaceId,authorityScope:e.authorityScope,remoteServices:e.remoteServices,localServices:e.localServices,isAuthorityCurrent:e.isAuthorityCurrent,onHydratedEventIds:e.onHydratedEventIds,onOutboxStatus:e.onOutboxStatus};const l=o.useCallback(()=>{a.current!==null&&(window.clearTimeout(a.current),a.current=null)},[]),c=o.useCallback(async()=>{const d=i.current;if(!d.enabled||!d.workspaceId||!d.remoteServices)return;const f=d.workspaceId,p=d.remoteServices,g=s.current;if(g?.key===f&&g.authorityScope===d.authorityScope&&g.at>Date.now()){a.current===null&&(a.current=window.setTimeout(()=>{a.current=null,c()},g.at-Date.now()));return}(g?.key!==f||g.authorityScope!==d.authorityScope||g.at<=Date.now())&&(s.current=null);const h=t.current;if(h?.key===f&&h.authorityScope===d.authorityScope){r.current=f;return}h&&h.controller.abort(),l();const y={key:f,authorityScope:d.authorityScope,controller:new AbortController};t.current=y;let k=0;try{const v=await kE({workspaceId:f,signal:y.controller.signal,hydrateAsset:async S=>{const w=i.current;if(y.controller.signal.aborted||!w.enabled||w.workspaceId!==f||w.authorityScope!==y.authorityScope||w.remoteServices!==p||w.isAuthorityCurrent?.(y.authorityScope)===!1)return!1;const _=await SC({workspaceId:f,assetId:S,remoteServices:p,localServices:d.localServices}).catch(()=>({success:!1,error:"Attachment hydration failed."})),M=i.current;return y.controller.signal.aborted||!M.enabled||M.workspaceId!==f||M.authorityScope!==y.authorityScope||M.remoteServices!==p||M.isAuthorityCurrent?.(y.authorityScope)===!1||!_.success?!1:(_.emittedEventIds.length>0&&d.onHydratedEventIds?.(_.emittedEventIds),!0)}}),C=i.current;if(!C.enabled||C.workspaceId!==f||C.authorityScope!==y.authorityScope)return;v.retryRecommended&&(k=v.budgetExhausted?wE:bE,s.current={key:f,authorityScope:y.authorityScope,at:Date.now()+k}),v.outbox&&d.onOutboxStatus?.(v.outbox)}catch{}finally{t.current===y&&(t.current=null)}if(!(!i.current.enabled||i.current.workspaceId!==f)){if(r.current===f){r.current="",c();return}k>0&&(a.current=window.setTimeout(()=>{a.current=null,c()},k))}},[l]);o.useEffect(()=>{e.onOutboxStatus?.(null)},[e.onOutboxStatus,e.workspaceId]),o.useEffect(()=>{if(!e.enabled){t.current?.controller.abort(),t.current=null,r.current="",s.current=null,i.current.onOutboxStatus?.(null),l();return}c()},[l,e.enabled,e.mutationFingerprint,e.authorityScope,e.remoteServices,e.workspaceId,c]),o.useEffect(()=>{if(!e.enabled)return;const d=()=>{c()},f=()=>{document.visibilityState==="visible"&&c()},p=window.setInterval(()=>{c()},vE);return window.addEventListener("online",d),document.addEventListener("visibilitychange",f),()=>{window.removeEventListener("online",d),document.removeEventListener("visibilitychange",f),window.clearInterval(p);const g=t.current;g?.key===e.workspaceId&&(g.controller.abort(),t.current=null),r.current===e.workspaceId&&(r.current=""),l()}},[l,e.authorityScope,e.enabled,e.remoteServices,e.workspaceId,c])}const AE="/api/taskforce/sync/v3/local/recovery";async function CE(e){const t=String(e.workspaceId||"").trim();if(!t)throw new Error("Workspace id is required to prepare local recovery.");const r=await(e.fetchImpl||fetch)(AE,{method:"POST",credentials:"include",headers:{"Content-Type":"application/json"},body:JSON.stringify({workspaceId:t})}),a=await r.json().catch(()=>null);if(!r.ok||a?.success!==!0){const c=String(a?.error||`Local workspace sync recovery failed (${r.status}).`),d=typeof a?.code=="string"?a.code.trim():"";let f="unknown-origin";try{f=new URL(r.url).origin}catch{}throw new Error(`${c} [${d||"UNKNOWN_RECOVERY_ERROR"}; HTTP ${r.status}; ${f}]`)}if(a.kind==="none"&&a.needsAuthoritativeRepair===!1&&a.recovery===null)return{kind:"none",needsAuthoritativeRepair:!1,recoveryBatchId:null};if(a.kind!=="recovery"||typeof a.needsAuthoritativeRepair!="boolean"||!a.recovery||typeof a.recovery!="object"||Array.isArray(a.recovery))throw new Error("Local workspace sync recovery returned an invalid response.");const s=a.recovery,i=String(s.recoveryBatchId||"").trim(),l=String(s.state||"");if(!/^recovery-[A-Za-z0-9-]{1,200}$/.test(i)||!["awaiting_baseline","baseline_ready","replay_queued","completed"].includes(l)||a.needsAuthoritativeRepair===!0&&l!=="awaiting_baseline")throw new Error("Local workspace sync recovery returned an invalid state.");return{kind:"recovery",needsAuthoritativeRepair:a.needsAuthoritativeRepair,recoveryBatchId:i,state:l}}function _E(e={}){return{readPushOwnership:zA,readContentManifest:FA,applyV2Batch:HA,listContentPullObligations:xA,recordContentPullObligationFailures:RA,readInitiativeProjection:NA,applyInitiativeProjection:jA,readCombinedProjection:MA,applyCombinedProjection:DA,readTaskCommentAuditCursor:LA,applyTaskCommentAuditPage:BA,prepareOutboxRecovery:t=>CE({workspaceId:t,...e.recoveryFetchImpl?{fetchImpl:e.recoveryFetchImpl}:{}}),completeAuthoritativeRepair:xx}}const oo="/api/taskforce/sync/v3/local/coordinator";class Ya extends Error{constructor(t,r,a){super(t),this.code=r,this.status=a,this.name="LocalSyncCoordinatorBrowserClientError"}}class AC{fetchImpl;constructor(t){this.fetchImpl=t||globalThis.fetch.bind(globalThis)}attachWorkspace(t){return this.requestJson(`${oo}/attach`,pi("POST",t))}readStatus(t){const r=Qm(t);return this.requestJson(`${oo}/status?${r.toString()}`,{method:"GET",credentials:"include"})}attachCredential(t){return this.requestJson(`${oo}/credential`,pi("POST",t))}switchWorkspace(t){return this.requestJson(`${oo}/workspace-switch`,pi("POST",t))}clearCredential(t){const r=Qm(t);return this.requestJson(`${oo}/credential?${r.toString()}`,{method:"DELETE",credentials:"include"})}issuePermit(t){return this.requestJson(`${oo}/permits`,pi("POST",t))}issueCommand(t){return this.requestJson(`${oo}/commands`,pi("POST",t))}signalWake(t){return this.requestJson(`${oo}/wake`,pi("POST",t))}transferOwnership(t){return this.requestJson(`${oo}/ownership-transfer`,pi("POST",t))}readCommand(t){const r=Qm(t);return t.rootCommandId&&r.set("rootCommandId",t.rootCommandId),this.requestJson(`${oo}/commands/${encodeURIComponent(t.commandId)}?${r.toString()}`,{method:"GET",credentials:"include"})}readPermit(t){const r=Qm(t);return this.requestJson(`${oo}/permits/${encodeURIComponent(t.permitId)}?${r.toString()}`,{method:"GET",credentials:"include"})}async executeGateway(t){return await this.fetchImpl(`${oo}/gateway`,pi("POST",t))}applyCombinedFeed(t){const r=t.command.kind==="delta"?t.command:{...t.command,epoch:t.command.expectedEpoch,previousCursor:t.command.previousRepairCursor,expectedEpoch:void 0,previousRepairCursor:void 0};return this.requestJson("/api/taskforce/sync/v3/local/feed",pi("POST",{workspaceId:t.workspaceId,executionPermitId:t.executionPermitId,coordinatorGeneration:t.coordinatorGeneration,...r,...t.coverage}))}releasePermit(t){return this.requestJson(`${oo}/permits/${encodeURIComponent(t.permitId)}/release`,pi("POST",{workspaceId:t.workspaceId,coordinatorGeneration:t.coordinatorGeneration,...t.pushBoundary?{pushBoundary:t.pushBoundary}:{}}))}abandonPermit(t){return this.permitAction(t,"abandon")}permitAction(t,r){return this.requestJson(`${oo}/permits/${encodeURIComponent(t.permitId)}/${r}`,pi("POST",{workspaceId:t.workspaceId,coordinatorGeneration:t.coordinatorGeneration,...t.errorCode?{errorCode:t.errorCode}:{}}))}async requestJson(t,r){const a=await this.fetchImpl(t,r);return a.ok||await IE(a),a.json()}}function Qm(e){return new URLSearchParams({workspaceId:e.workspaceId,coordinatorGeneration:String(e.coordinatorGeneration)})}function pi(e,t){return{method:e,headers:{"Content-Type":"application/json"},credentials:"include",body:JSON.stringify(t)}}async function IE(e){let t={};try{t=await e.json()}catch{}throw new Ya(String(t.error||`Local sync coordinator request failed (${e.status}).`),String(t.code||"SYNC_COORDINATOR_REQUEST_FAILED"),e.status)}const Tb="taskforce.local-sync-coordinator.command.v1",TE=500,xE=240,RE=8,PE=600*1e3;function Ev(e,t="default"){return t==="priority"?`${Tb}.priority:${e}`:`${Tb}:${e}`}function EE(e,t,r=()=>new Date,a="default"){e.setItem(Ev(t.workspaceId,a),JSON.stringify({storedAt:r().toISOString(),envelope:t}))}function xb(e,t,r=()=>new Date,a="default"){const s=Ev(t,a);try{const i=e.getItem(s);if(!i)return null;const l=JSON.parse(i),c=Date.parse(String(l.storedAt||"")),d=l.envelope;return!d||d.workspaceId!==t||!d.commandId||!Number.isInteger(d.coordinatorGeneration)||!Number.isFinite(c)||r().getTime()-c>PE?(gu(e,t,a),null):d}catch{return gu(e,t,a),null}}function NE(e,t,r="default"){e.removeItem(Ev(t,r))}async function Uy(e){const{client:t,envelope:r,storage:a=null,pollIntervalMs:s=TE,maxPollAttempts:i=xE,delay:l=OE,recoverExisting:c=!1,storageLane:d="default"}=e;if(a&&!c)try{EE(a,r,void 0,d)}catch{}try{let f=c?await jE(t,r,{delay:l,pollIntervalMs:s,maxPollAttempts:i}):await ME(t,r,{delay:l,pollIntervalMs:s,maxPollAttempts:i});const p=new Set;for(let g=0;g<i;g+=1){if(p.has(f.commandId))throw new Ya("The local sync coordinator command references contain a cycle.","SYNC_COORDINATOR_COMMAND_REFERENCE_CYCLE",409);if(p.add(f.commandId),f.status==="succeeded")return gu(a,r.workspaceId,d),f;if(f.status==="failed")throw gu(a,r.workspaceId,d),new Ya(f.errorMessage||"The local sync coordinator command failed.",f.errorCode||"SYNC_COORDINATOR_COMMAND_FAILED",409);if(f.status==="superseded"){const h=DE(f);if(!h)return gu(a,r.workspaceId,d),f;if(p.size>=RE)throw new Ya("The local sync coordinator command reference chain is too long.","SYNC_COORDINATOR_COMMAND_REFERENCE_LIMIT",409);f=await Fh(t,r,h);continue}await l(Math.max(1,s)),f=await Fh(t,r,f.commandId),p.delete(f.commandId)}throw new Ya("The local sync coordinator command did not finish before the browser wait limit.","SYNC_COORDINATOR_COMMAND_WAIT_TIMEOUT",408)}catch(f){const p=zh(f);throw a&&LE(p)&&gu(a,r.workspaceId,d),p}}function gu(e,t,r){if(e)try{NE(e,t,r)}catch{}}async function jE(e,t,r){for(let a=0;a<r.maxPollAttempts;a+=1)try{return await Fh(e,t,t.commandId)}catch(s){const i=zh(s);if(i.code==="SYNC_COORDINATOR_COMMAND_NOT_FOUND")return(await e.issueCommand(t)).command;if(!Uh(i))throw i;await r.delay(Math.max(1,r.pollIntervalMs))}throw CC()}async function ME(e,t,r){try{return(await e.issueCommand(t)).command}catch(a){const s=zh(a);if(!Uh(s))throw s;for(let i=0;i<r.maxPollAttempts;i+=1)try{return await Fh(e,t,t.commandId)}catch(l){const c=zh(l);if(c.code==="SYNC_COORDINATOR_COMMAND_NOT_FOUND")return(await e.issueCommand(t)).command;if(!Uh(c))throw c;await r.delay(Math.max(1,r.pollIntervalMs))}throw CC()}}async function Fh(e,t,r){return(await e.readCommand({commandId:r,workspaceId:t.workspaceId,coordinatorGeneration:t.coordinatorGeneration,rootCommandId:t.commandId})).command}function DE(e){if(!e.result||typeof e.result!="object")return null;const t=e.result,r=t.leaderCommandId||t.supersedingCommandId;return typeof r=="string"&&r.trim()?r.trim():null}function Uh(e){return e.status===0||e.status===408||e.status===429||e.status>=500}function LE(e){return!Uh(e)&&e.code!=="SYNC_COORDINATOR_COMMAND_WAIT_TIMEOUT"}function CC(){return new Ya("The local sync coordinator command did not finish before the browser wait limit.","SYNC_COORDINATOR_COMMAND_WAIT_TIMEOUT",408)}function zh(e){return e instanceof Ya?e:new Ya(e instanceof Error&&e.message.trim()?e.message:"The local sync coordinator request failed.","SYNC_COORDINATOR_REQUEST_FAILED",0)}function OE(e){return new Promise(t=>{setTimeout(t,e)})}const jk="taskforce:auth-session-changed";function Rb(){typeof window>"u"||typeof window.dispatchEvent!="function"||window.dispatchEvent(new Event(jk))}const BE=new AC;function WE(e){const t=e.client||BE,r=Math.max(1e3,e.pollIntervalMs??3e3),[a,s]=o.useState({phase:"idle",snapshot:null,error:null}),i=o.useRef(0),l=o.useRef(0),c=o.useRef(null),d=o.useRef(null),f=o.useRef(null);f.current=a.snapshot;const p=o.useCallback(w=>{const _=c.current;if(_?.workspaceId===e.workspaceId)return _.promise;const M=zy(),R=M?xb(M,e.workspaceId):null;if(!R)return null;const P=Uy({client:t,envelope:R,storage:M,recoverExisting:!0}),b={workspaceId:e.workspaceId,scope:w,promise:P};return c.current=b,P.catch(()=>{}).finally(()=>{c.current===b&&(c.current=null)}),P},[t,e.workspaceId]),g=o.useCallback(w=>{const _=d.current;if(_?.workspaceId===e.workspaceId)return _.promise;const M=zy(),R=M?xb(M,e.workspaceId,void 0,"priority"):null;if(!R)return null;const P=Uy({client:t,envelope:R,storage:M,recoverExisting:!0,storageLane:"priority"}),b={workspaceId:e.workspaceId,scope:w,promise:P};return d.current=b,P.catch(()=>{}).finally(()=>{d.current===b&&(d.current=null)}),P},[t,e.workspaceId]),h=o.useCallback(async(w,_)=>{const M=await t.attachWorkspace({workspaceId:e.workspaceId});if(i.current!==w||l.current!==_)return null;if(M.runtimeResumePending===!0)throw new Ya("The local sync runtime has not resumed yet.",M.runtimeResumeErrorCode||"SYNC_COORDINATOR_RUNTIME_RESUME_PENDING",503);const R=await t.readStatus({workspaceId:e.workspaceId,coordinatorGeneration:M.state.coordinatorGeneration});if(i.current!==w||l.current!==_)return null;if(R.credential.status!=="ready")throw new Ya("The local sync coordinator credential is not ready after attach.","SYNC_COORDINATOR_CREDENTIAL_BLOCKED",409);return f.current=R,s({phase:"ready",snapshot:R,error:null}),p(w),g(w),R},[t,e.workspaceId,p,g]),y=o.useCallback(async()=>{if(!e.enabled||!e.workspaceId)return null;const w=i.current,_=l.current+1;l.current=_;try{const M=f.current;if(!M)return await h(w,_);const R=await t.readStatus({workspaceId:e.workspaceId,coordinatorGeneration:M.state.coordinatorGeneration});return i.current!==w||l.current!==_?null:R.credential.status!=="ready"||R.serverInstanceId!==M.serverInstanceId?await h(w,_):(f.current=R,s({phase:"ready",snapshot:R,error:null}),p(w),g(w),R)}catch(M){if(i.current!==w||l.current!==_)return null;const R=Hy(M);if(R.code==="SYNC_COORDINATOR_STALE_GENERATION"||R.code==="SYNC_COORDINATOR_INACTIVE_WORKSPACE")try{return await h(w,_)}catch(P){if(i.current!==w||l.current!==_)return null;const b=Hy(P);return s($=>({phase:"error",snapshot:$.snapshot,error:b})),null}return s(P=>({phase:"error",snapshot:P.snapshot,error:R})),null}},[h,t,e.enabled,e.workspaceId,p,g]);o.useEffect(()=>{const w=i.current+1;if(i.current=w,f.current=null,!e.enabled||!e.workspaceId||typeof window>"u"){s({phase:"idle",snapshot:null,error:null});return}let _=!1,M=null;s({phase:"attaching",snapshot:null,error:null});const R=()=>{_||(M=window.setTimeout(()=>{M=null,y().finally(R)},r))},P=()=>{document.visibilityState==="visible"&&y()},b=()=>{y()},$=()=>{f.current=null,y()},I=()=>{y().then(K=>{if(K?.state.ownershipMode==="server")return t.signalWake({workspaceId:e.workspaceId,coordinatorGeneration:K.state.coordinatorGeneration,source:"connectivity"}).catch(()=>{})})};document.addEventListener("visibilitychange",P),window.addEventListener("focus",b),window.addEventListener("online",I),window.addEventListener(jk,$);const E=l.current+1;return l.current=E,h(w,E).catch(K=>{i.current!==w||l.current!==E||s({phase:"error",snapshot:null,error:Hy(K)})}).finally(R),()=>{_=!0,i.current+=1,M!==null&&window.clearTimeout(M),document.removeEventListener("visibilitychange",P),window.removeEventListener("focus",b),window.removeEventListener("online",I),window.removeEventListener(jk,$)}},[h,t,e.enabled,e.workspaceId,r,y]);const k=o.useCallback(async(w,_=null)=>{const M=f.current;if(!M)throw new Ya("The local sync coordinator is not attached.","SYNC_COORDINATOR_UNAVAILABLE",409);const R=w==="DisableSync";if(R){const U=d.current;if(U?.workspaceId===e.workspaceId)return U.promise;const L=g(i.current);if(L)return L}const P=c.current;if(!R&&P?.workspaceId===e.workspaceId&&await P.promise,!R){const U=p(i.current);U&&await U}const b={commandId:crypto.randomUUID(),workspaceId:e.workspaceId,coordinatorGeneration:M.state.coordinatorGeneration,type:w,version:1,args:_},$=Uy({client:t,envelope:b,storage:zy(),storageLane:R?"priority":"default"}),I={workspaceId:e.workspaceId,scope:i.current,promise:$},E=R?d:c;E.current=I;const K=()=>{E.current===I&&(E.current=null),i.current===I.scope&&e.workspaceId===I.workspaceId&&y()};return $.then(K,K),$},[t,e.workspaceId,y,p,g]),v=o.useCallback(async(w,_=[])=>{const M=f.current;return!M||M.state.ownershipMode!=="server"?!1:(await t.signalWake({workspaceId:e.workspaceId,coordinatorGeneration:M.state.coordinatorGeneration,source:w,eventIds:_}),!0)},[t,e.workspaceId]),C=o.useCallback(async w=>{const _=f.current,M=String(_?.state.activeWorkspaceId||"").trim(),R=String(w||"").trim();if(!_||!M)throw new Ya("The local sync coordinator is not attached to an active workspace.","SYNC_COORDINATOR_UNAVAILABLE",409);if(!R)throw new Ya("The target workspace is required.","SYNC_COORDINATOR_COMMAND_INVALID",400);if(R===M)return _.state;const P=i.current,b=await t.switchWorkspace({commandId:crypto.randomUUID(),expectedActiveWorkspaceId:M,targetWorkspaceId:R,coordinatorGeneration:_.state.coordinatorGeneration,version:1});return i.current===P&&(l.current+=1,f.current=null,s({phase:"attaching",snapshot:null,error:null})),b.state},[t]),S=o.useCallback(async w=>{const _=f.current;if(!_)throw new Ya("The local sync coordinator is not attached.","SYNC_COORDINATOR_UNAVAILABLE",409);if(_.state.ownershipMode===w)return _.state;const M=i.current,R=await t.transferOwnership({commandId:crypto.randomUUID(),workspaceId:e.workspaceId,coordinatorGeneration:_.state.coordinatorGeneration,targetMode:w,version:1});if(i.current===M){const P={..._,state:R.state};f.current=P,s({phase:"ready",snapshot:P,error:null}),y()}return R.state},[t,e.workspaceId,y]);return o.useMemo(()=>({...a,refresh:y,issueCommand:k,signalWake:v,switchWorkspace:C,transferOwnership:S}),[k,y,v,a,C,S])}function zy(){if(typeof window>"u")return null;try{return window.sessionStorage}catch{return null}}function Hy(e){return e instanceof Ya?e:new Ya(e instanceof Error&&e.message.trim()?e.message:"The local sync coordinator request failed.","SYNC_COORDINATOR_REQUEST_FAILED",0)}function $E(e){return e.serverCommandMode}function FE(e){return e.runtimeMode==="local"}function Pb(e){const t=String(e.workspaceId||"").trim(),r=e.snapshot,a=r?.state,s=r?.credential,i=r?[r.serverInstanceId,a?.activeWorkspaceId||"",a?.coordinatorGeneration??"",a?.ownershipMode||"",a?.transitionState||"",s?.status||"",s?.coordinatorGeneration??""].join(":"):`${e.phase}:unavailable`;let l,c=!1,d=!1,f=!0;return e.phase!=="ready"||!r||!a||!s?l="coordinator-unavailable":!t||a.activeWorkspaceId!==t?l="workspace-mismatch":s.status!=="ready"||s.workspaceId!==t?l="credential-blocked":s.coordinatorGeneration!==a.coordinatorGeneration?l="generation-mismatch":a.transitionState!=="idle"?l="transition-active":a.ownershipMode==="browser-gateway"?(l="browser-owner",c=!0,f=!1):a.ownershipMode==="server"?(l="server-owner",c=!0,d=!0,f=!1):a.ownershipMode==="stopped"?l="coordinator-stopped":l="transition-active",{browserSchedulingAllowed:l==="browser-owner",coordinatorAuthorityReady:c,serverCommandMode:d,transitionFenced:f,reason:l,authorityEpoch:i}}class UE extends Error{constructor(t,r){super(t),this.code=r,this.name="WorkspaceSyncTransportGatewayError"}}function zE(e){if(e.type==="handshake")return"handshake";if(e.type==="provision"||e.type==="bootstrap-push")return"bootstrap";if(e.type==="push")return"push";if(e.type==="v3-dispatch")return"v3-dispatch";if(e.type==="initiative-repair"||e.type==="combined-repair"||e.type==="v3-feed-repair"||e.type==="pull"&&e.repairMode===!0||e.type==="v3-feed"&&(e.forceRepair===!0||e.repairCursor))return"repair";if(e.type==="pull"||e.type==="v3-feed"||e.type==="task-comment-audit"||e.type==="content-pull")return"pull";throw HE("The requested sync gateway operation is not supported.")}function HE(e){return new UE(e,"SYNC_COORDINATOR_GATEWAY_OPERATION_INVALID")}function VE(e){return e.type==="v3-dispatch"?9e4:e.type==="initiative-repair"||e.type==="combined-repair"||e.type==="v3-feed-repair"||e.type==="push"&&e.repairMode===!0||e.type==="pull"&&e.repairMode===!0||e.type==="v3-feed"&&(e.forceRepair===!0||e.repairCursor)?18e4:e.type==="push"||e.type==="bootstrap-push"||e.type==="pull"||e.type==="v3-feed"||e.type==="content-pull"?9e4:e.type==="task-comment-audit"?45e3:2e4}const GE=5e3;function Eb(e){return!!e&&typeof e=="object"&&!Array.isArray(e)}function KE(e,t){return!Eb(e)||e.success!==!0||e.workspaceId!==t||!Array.isArray(e.changes)||typeof e.hasMore!="boolean"||!Object.hasOwn(e,"nextCursor")||!(e.nextCursor===null||typeof e.nextCursor=="string")||e.workspaceMembers!==void 0&&!Array.isArray(e.workspaceMembers)||e.excludedProjections!==void 0&&(!Array.isArray(e.excludedProjections)||e.excludedProjections.some(r=>typeof r!="string"))?!1:e.diagnostics===void 0||Eb(e.diagnostics)}function Xm(e){return{cursor:e??null}}function Kp(e){return{version:1,projection:e.projection,cursor:e.cursor??null,...e.coverage?{coverage:{...e.coverage}}:{}}}async function qE(e,t){const r=await e.text();let a={},s=!1;if(r)try{a=JSON.parse(r),s=!!(a&&typeof a=="object"&&!Array.isArray(a))}catch{a={error:r.slice(0,400)}}const i=e.headers.get("retry-after");let l;if(i){const c=Number.parseInt(i,10);if(Number.isFinite(c)&&c>0)l=c*1e3;else{const d=Date.parse(i),f=d-t;Number.isFinite(d)&&f>0&&(l=f)}}return{result:{ok:e.status>=200&&e.status<300,status:e.status,data:a,...l===void 0?{}:{retryAfterMs:l}},validJsonObject:s}}function YE(e){const t=e.now,r=e.createPermitId||(()=>crypto.randomUUID()),a=new WeakMap,s=p=>{if(p!==e.workspaceId)throw new TypeError("The browser-gateway sync operation workspace does not match its coordinator.")},i=async(p,g="SYNC_COORDINATOR_BROWSER_ABANDONED",h)=>{const k=(await e.client.abandonPermit({permitId:p,workspaceId:e.workspaceId,coordinatorGeneration:e.coordinatorGeneration,errorCode:g}))?.permit;if(!k||k.permitId!==p||k.workspaceId!==e.workspaceId||k.coordinatorGeneration!==e.coordinatorGeneration||k.serverInstanceId!==e.serverInstanceId||k.ownerMode!=="browser-gateway"||h&&(k.operationClass!==h.operationClass||k.operationIdentity!==h.operationIdentity)||!["released","abandoned-clean","abandoned-reconcile-required"].includes(k.state)||h?.acceptedReceipt===!0&&(k.upstreamDisposition!=="accepted"||!["released","abandoned-reconcile-required"].includes(k.state)))throw new Error("The browser-gateway execution permit was not abandoned safely.");return k},l=async(p,g,h)=>{try{await i(p,void 0,h)}catch{}throw g},c=async p=>{if(e.isExecutionAuthorized?.()===!1)throw new Error("The browser-gateway sync authority selection was revoked.");s(p.operation.workspaceId);const g=t(),h=Math.max(1,Math.floor(e.permitDeadlineMs??VE(p.operation)+GE)),y=zE(p.operation),k={operationClass:y,operationIdentity:p.operationIdentity||null},v=r();let C;try{C=await e.client.issuePermit({permitId:v,workspaceId:e.workspaceId,coordinatorGeneration:e.coordinatorGeneration,operationClass:y,operationIdentity:p.operationIdentity||null,lastCommittedCursor:p.previousBoundary,deadlineAt:new Date(g.getTime()+h).toISOString()})}catch($){return l(v,$,k)}const S=C?.permit;if(!S||S.permitId!==v||S.workspaceId!==e.workspaceId||S.coordinatorGeneration!==e.coordinatorGeneration||S.serverInstanceId!==e.serverInstanceId||S.ownerMode!=="browser-gateway"||S.operationClass!==y||S.operationIdentity!==k.operationIdentity||S.state!=="issued-idle")return l(v,new Error("The browser-gateway execution permit is invalid."),k);let w;try{w=await e.client.executeGateway({permitId:S.permitId,workspaceId:e.workspaceId,coordinatorGeneration:e.coordinatorGeneration,operationIdentity:p.operationIdentity||null,operation:p.operation})}catch($){return l(v,$,k)}let _;try{_=await qE(w,g.getTime())}catch($){return l(v,$,k)}const M=_.result;let R;try{R=await e.client.readPermit({permitId:v,workspaceId:e.workspaceId,coordinatorGeneration:e.coordinatorGeneration})}catch($){return l(v,$,k)}const P=R?.permit;if(!P||P.permitId!==v||P.workspaceId!==e.workspaceId||P.coordinatorGeneration!==e.coordinatorGeneration||P.serverInstanceId!==e.serverInstanceId||P.ownerMode!=="browser-gateway"||P.operationClass!==y||P.operationIdentity!==k.operationIdentity||P.state!=="gateway-complete-awaiting-apply"||!["accepted","rejected","unknown"].includes(P.upstreamDisposition||""))return l(v,new Error("The browser-gateway did not settle its execution permit."),k);if(P.upstreamDisposition==="accepted"&&(p.requireAcceptedJsonObject&&!_.validJsonObject||p.validateAcceptedData&&!p.validateAcceptedData(M.data)))return l(v,new Error("The accepted browser-gateway sync response is invalid."),k);if(!p.applying){if(P.upstreamDisposition==="accepted"){let $;try{$=await e.client.releasePermit({permitId:v,workspaceId:e.workspaceId,coordinatorGeneration:e.coordinatorGeneration})}catch(E){return l(v,E,k)}const I=$?.permit;if(!I||I.permitId!==v||I.workspaceId!==e.workspaceId||I.coordinatorGeneration!==e.coordinatorGeneration||I.serverInstanceId!==e.serverInstanceId||I.ownerMode!=="browser-gateway"||I.operationClass!==y||I.operationIdentity!==k.operationIdentity||I.state!=="released")return l(v,new Error("The browser-gateway execution permit was not released."),k)}else await i(v,void 0,k);return M}if(P.upstreamDisposition!=="accepted")return await i(v,void 0,k),M;if(!p.previousBoundary)return l(v,new Error("A browser-gateway applying request did not declare its prior boundary."),k);const b=Object.freeze({});return a.set(b,{permitId:v,workspaceId:e.workspaceId,previousBoundary:p.previousBoundary,operationClass:y,operationIdentity:k.operationIdentity}),{...M,transferReceipt:{token:b}}},d=(p,g,h)=>{if(s(p),!Array.isArray(g)||g.length===0)throw new TypeError("A browser-gateway apply completion group requires transfer receipts.");const y=g.map(k=>{if(!k||typeof k!="object")throw new TypeError("The browser-gateway transfer receipt is invalid.");const v=k.token;if(!v||typeof v!="object")throw new TypeError("The browser-gateway transfer receipt token is invalid.");const C=a.get(v);if(!C||C.workspaceId!==p)throw new TypeError("The browser-gateway transfer receipt does not belong to this adapter.");if(h&&En(C.previousBoundary)!==En(h))throw new TypeError("The browser-gateway transfer receipt starts at a different boundary.");return C});if(new Set(y.map(k=>k.permitId)).size!==y.length)throw new TypeError("The browser-gateway apply completion group contains duplicate receipts.");return y},f=(p,g,h,y)=>{const k=d(p,g,h);return{version:TA,workspaceId:p,coordinatorGeneration:e.coordinatorGeneration,ownerMode:"browser-gateway",serverInstanceId:e.serverInstanceId,permitIds:k.map(v=>v.permitId),previousBoundary:h,expectedBoundary:y}};return{handshakeWorkspace:p=>c({operation:{type:"handshake",workspaceId:p},applying:!1}),provisionWorkspace:p=>c({operation:{type:"provision",...p},applying:!1}),pushWorkspaceChanges:p=>{const{ownership:g}=p,h=Hm(p.pushBoundary),y=Ch(p.changes);return c({operation:{type:"push",workspaceId:p.workspaceId,idempotencyKey:p.idempotencyKey,changes:p.changes,...p.repairMode===!0?{repairMode:!0}:{},...g.activeV3TaskMetadataIds.length>0?{activeV3TaskMetadataIds:g.activeV3TaskMetadataIds}:{},...g.activeV3TaskLifecycleIds.length>0?{activeV3TaskLifecycleIds:g.activeV3TaskLifecycleIds}:{},...g.activeV3TaskReopenAssigneeIds.length>0?{activeV3TaskReopenAssigneeIds:g.activeV3TaskReopenAssigneeIds}:{},...g.activeV3InitiativeIds.length>0?{activeV3InitiativeIds:g.activeV3InitiativeIds}:{},...g.initiativeProjectionOwner==="v3"?{v3InitiativeProjectionOwned:!0}:{},...g.combinedCoverage?{combinedCoverage:g.combinedCoverage,excludedProjections:g.combinedExcludedProjections||[]}:{}},operationIdentity:p.idempotencyKey,previousBoundary:h,applying:!0,requireAcceptedJsonObject:!0,validateAcceptedData:k=>{try{return KA(k,y),!0}catch{return!1}}})},pullWorkspaceChanges:p=>{const g=p.excludedProjections?.length?_A(p.excludedProjections):null;return c({operation:{type:"pull",...p,...g?{coverage:g}:{},excludedProjections:p.excludedProjections?[...p.excludedProjections]:void 0},previousBoundary:Xm(p.cursor),applying:!0,requireAcceptedJsonObject:!0,validateAcceptedData:h=>KE(h,p.workspaceId)})},pullWorkspaceContent:p=>{const{previousCursor:g,...h}=p;return c({operation:{type:"content-pull",...h},previousBoundary:Xm(g),applying:!0})},pullInitiativeFeed:p=>c({operation:{type:"v3-feed",...p,limit:p.limit||100},previousBoundary:Kp({projection:"initiative",cursor:p.repairCursor||p.cursor}),applying:!0}),pullInitiativeRepair:p=>c({operation:{type:"initiative-repair",...p,limit:p.limit||100},previousBoundary:Kp({projection:"initiative",cursor:p.cursor}),applying:!0}),pullCombinedFeed:p=>c({operation:{type:"v3-feed",...p,limit:p.limit||100},previousBoundary:Kp({projection:"combined",cursor:p.repairCursor||p.cursor,coverage:p.coverage||ka}),applying:!0}),pullCombinedRepair:p=>c({operation:{type:"combined-repair",...p,limit:p.limit||100,coverage:p.coverage||ka},previousBoundary:Kp({projection:"combined",cursor:p.cursor,coverage:p.coverage||ka}),applying:!0}),pullTaskCommentAudit:p=>c({operation:{type:"task-comment-audit",...p,limit:p.limit||50},previousBoundary:Kp({projection:"task-comment-audit",cursor:p.cursor}),applying:!0}),abandonTransferReceipts:async({workspaceId:p,receipts:g,errorCode:h})=>{const y=d(p,g);await Promise.all(y.map(k=>i(k.permitId,h,{operationClass:k.operationClass,operationIdentity:k.operationIdentity,acceptedReceipt:!0})))},acknowledgeNonApplyingTransferReceipts:async({workspaceId:p,receipts:g})=>{const h=d(p,g);await Promise.all(h.map(async y=>{const k=await e.client.releasePermit({permitId:y.permitId,workspaceId:p,coordinatorGeneration:e.coordinatorGeneration,...y.operationClass==="push"?{pushBoundary:Hm(y.previousBoundary)}:{}});if(!k?.permit||k.permit.state!=="released"||k.permit.permitId!==y.permitId||k.permit.workspaceId!==p||k.permit.coordinatorGeneration!==e.coordinatorGeneration||k.permit.serverInstanceId!==e.serverInstanceId||k.permit.ownerMode!=="browser-gateway"||k.permit.operationClass!==y.operationClass)throw new Error("The browser-gateway non-applying transfer receipt was not released.")}))},buildV2ApplyCompletionGroup:({workspaceId:p,previousCursor:g,nextCursor:h,receipts:y})=>f(p,y,Xm(g),Xm(h)),buildV2PushApplyCompletionGroup:({workspaceId:p,pushBoundary:g,receipts:h})=>f(p,h,Hm(g),Hm(g)),buildV3ApplyCompletionGroup:({workspaceId:p,apply:g,receipts:h})=>{const y=d(p,h),k=y[0].previousBoundary;if(!("projection"in k)||k.projection!==g.projection||y.some(S=>En(S.previousBoundary)!==En(k)))throw new TypeError("The v3 transfer receipts do not match the applied projection.");const v=g.kind==="repair"&&g.previousCursor===null&&y.every(S=>S.operationClass==="pull");if(k.cursor!==g.previousCursor&&!v)throw new TypeError("The v3 apply does not start at the receipt boundary.");const C=g.kind==="delta"||g.kind==="audit"?"pull":"repair";if(!v&&y.some(S=>S.operationClass!==C))throw new TypeError("The v3 transfer receipt operation does not match the apply.");return f(p,h,k,{...k,cursor:g.nextCursor})}}}function Nb(e){const t=e.current===e.captured&&e.current.mode!=="blocked"&&e.browserSchedulingAllowed;return t||e.onDenied?.(),t}function ZE(e){if(!e.authority.browserSchedulingAllowed)return{mode:"blocked",remoteServices:null};const t=String(e.workspaceId||"").trim(),r=e.snapshot,a=r?.state,s=r?.credential;if(e.phase!=="ready"||e.authority.reason!=="browser-owner"||!t||!r||!a||!s||a.activeWorkspaceId!==t||a.ownershipMode!=="browser-gateway"||a.transitionState!=="idle"||s.status!=="ready"||s.workspaceId!==t||s.coordinatorGeneration!==a.coordinatorGeneration||!Number.isSafeInteger(a.coordinatorGeneration)||a.coordinatorGeneration<1||!String(r.serverInstanceId||"").trim())return{mode:"blocked",remoteServices:null};const i=e.createGatewayRemoteServices||YE;let l;return l={mode:"browser-gateway",remoteServices:i({workspaceId:t,coordinatorGeneration:a.coordinatorGeneration,serverInstanceId:r.serverInstanceId,client:e.client,now:()=>new Date,isExecutionAuthorized:()=>e.isSelectionAuthorized?.(l)!==!1}),coordinatorGeneration:a.coordinatorGeneration,serverInstanceId:r.serverInstanceId},l}const jb={documents:!1,aiProfiles:!1,assets:!1,documentReviewSessions:!1,annotatedAttachmentSessions:!1,taskforceAgents:!1};function JE(e){const{currentWorkspaceId:t,cloudAuthConfigured:r,runtimeMode:a,authSessionResolved:s,isAuthenticated:i,authUserId:l,projectName:c,resolveCloudAuthUrl:d,resolveWebSocketUrl:f,realtimeSyncEnabled:p,localOutboxDispatchEnabled:g,localCoordinatorBrowserAuthorityGateEnabled:h=!1,localCoordinatorClient:y,initiativeFeedActivationEnabled:k,combinedFeedActivationEnabled:v,combinedFeedCoverage:C,tasks:S,archivedTasks:w,deletedTasks:_=[],initiatives:M,workstreams:R,taxonomies:P,taxonomyState:b,setupState:$,globalTheme:I,locale:E,globalWeekStartsOn:K,themeUseGlobalDefault:U,setTasks:L,setArchivedTasks:D,setAuthBlocked:ie,setIsAuthenticated:H,checkAuthSession:be,setGlobalTheme:Z,setCurrentTheme:me,setSetupState:Ve,setLocale:Re,setGlobalWeekStartsOn:je,fetchPlanningEntities:ye}=e,ue=o.useMemo(()=>kP(b),[b]),[ve,Pe]=o.useState("disconnected"),[Le,se]=o.useState(null),[V,W]=o.useState(null),[z,fe]=o.useState(null),[ke,Y]=o.useState(null),[we,q]=o.useState(null),[le,$e]=o.useState(!1),[re,de]=o.useState("idle"),[He,ce]=o.useState(null),[pe,xe]=o.useState(!1),[N,X]=o.useState(0),[Ae,Te]=o.useState(null),he=o.useRef(null),ot=o.useCallback(O=>{he.current=O,Te(O)},[]),[We,Xe]=o.useState([]),[ae,G]=o.useState(""),Ie=o.useRef(S||[]),Fe=o.useRef(w||[]),it=o.useRef(_||[]),Me=o.useRef([]),[qe,ge]=o.useState([]),_e=o.useCallback(O=>{Me.current=O,ge(O)},[]),Be=o.useRef(M||[]),Ge=o.useRef(R||[]),F=o.useRef(b),Ne=o.useRef(P||[]),Ce=o.useRef([]),ut=o.useRef(new Set),[mt,Ue]=o.useState([]),[wt,kt]=o.useState(""),[rt,Ht]=o.useState(null),[lr,rr]=o.useState(null),[wr,st]=o.useState(0),[zt,Lt]=o.useState(null),Mt=o.useRef([]),[Ee,ct]=o.useState([]),[lt,Je]=o.useState(""),nt=o.useRef([]),Ct=o.useRef(new Set),[Rt,Dt]=o.useState([]),[It,Qt]=o.useState(""),ir=o.useRef([]),dr=o.useRef([]),[sr,pr]=o.useState([]),[Jr,Tr]=o.useState(""),br=o.useRef([]),[ur,Qr]=o.useState([]),[Hr,Gt]=o.useState(""),bt=o.useRef([]),gr=o.useRef([]),u=o.useRef([]),ht=o.useRef([]),[yr,Er]=o.useState(jb),[mn,qt]=o.useState("degraded-fallback"),[Vr,Tt]=o.useState({accepted:0,duplicateDiscarded:0,outOfOrderDiscarded:0,invalidDiscarded:0,recoveryTriggered:0}),Ut=o.useRef(!1),fr=o.useRef(null),$t=o.useRef("missing-baseline"),Mr=o.useRef(0),Fr=o.useRef(!1),Vt=o.useRef(new Set),Dr=o.useRef(""),Ye=o.useRef(""),en=o.useRef(""),bn=o.useRef(""),tn=o.useRef(""),ft=o.useRef(""),rn=o.useRef(""),Nt=o.useRef(!1),or=o.useRef(null),xr=o.useRef(new Set),hn=o.useRef([]),ys=o.useRef(null),Nn=o.useRef(""),Sn=o.useRef(()=>Promise.resolve(!1)),kr=o.useRef(""),cr=o.useRef(async()=>{}),Wr=o.useRef(null),on=o.useRef(null),dt=o.useRef("idle"),Un=o.useCallback(()=>{fr.current!==null&&(window.clearTimeout(fr.current),fr.current=null)},[]),Tn=o.useCallback(O=>{if(typeof window>"u")return;Un();const j=Math.max(1,Math.floor(Mr.current)+1);Mr.current=j;const xt=1500*2**Math.max(0,j-1),Et=Number.isFinite(Number(O))?Math.max(0,Math.floor(Number(O))):0,At=Math.max(Math.min(12e4,xt),Et);fr.current=window.setTimeout(()=>{fr.current=null,cr.current({preferCloudOnFirstSync:!1})},At)},[Un]),jn=o.useCallback(O=>{Er(j=>j[O]?j:{...j,[O]:!0})},[]),an=Object.values(yr).every(Boolean),Ds=o.useMemo(()=>y||new AC,[y]),da=FE({runtimeMode:a}),J=WE({enabled:da,workspaceId:t,client:Ds}),Qe=o.useMemo(()=>Pb({workspaceId:t,phase:J.phase,snapshot:J.snapshot}),[t,J.phase,J.snapshot,h]),St=o.useMemo(()=>Pb({workspaceId:t,phase:J.phase,snapshot:J.snapshot}),[t,J.phase,J.snapshot]),Xt=o.useRef(Qe);o.useLayoutEffect(()=>{Xt.current=Qe},[Qe]);const at=o.useCallback(()=>Xt.current.browserSchedulingAllowed,[]),{workspaceRetryAt:Ft,isWorkspaceRetryPending:Lr,workspacePushInFlightRef:Nr,workspacePullInFlightRef:Rr,workspaceLastPushedSignatureRef:Kt,workspacePendingSignatureRef:Bn,workspaceLastPushedTaskIdsRef:Xn,workspaceDeletedTaskIdsRef:va,workspaceDeletedTaskWatermarksRef:Cr,workspacePullCursorRef:cn,clearWorkspaceRetry:kn,scheduleWorkspaceRetry:zn,persistWorkspaceSyncPatch:ea,applyWorkspaceSyncPatchLocally:La,readWorkspaceSyncStateSnapshot:mr,loadWorkspaceSyncState:Zo,applyWorkspaceSyncStateSnapshot:Za,saveWorkspaceCloudSyncSettings:ks,acquireWorkspaceSyncLease:Eo,releaseWorkspaceSyncLease:xa,forceClearWorkspaceSyncLease:Ja,recordWorkspaceSyncCompletion:Ra,wasWorkspaceSyncOperationCompletedRecently:vs}=tP({currentWorkspaceId:t,setWorkspaceCloudSyncEnabled:$e,setWorkspaceSyncPhase:de,setWorkspaceSyncSetupIntent:ce,setWorkspaceLastPullAt:W,setWorkspaceLastPushAt:fe,setWorkspaceLastErrorMessage:q,isWorkspaceOperationAuthorized:at}),Qa=o.useCallback(O=>{(O.phase==="attach-cloud"||O.phase==="provision-local")&&(dt.current=O.phase,Wr.current===null&&(Wr.current=Date.now()),on.current=null),Za(O)},[Za]),ws=o.useRef(new Map),ln=o.useRef(new Map),Oa=o.useRef(new Map),yn=o.useRef(""),Vs=o.useRef(new Set),Mn=o.useRef(new Map),Ls=o.useRef(new Set),vt=o.useRef(new Map),nr=o.useRef(new Set),nn=o.useRef(new Map),vn=o.useRef(new Map),ta=o.useRef(new Set),ho=o.useRef(new Map),Os=o.useRef(new Set),wa=o.useRef(new Map),Bs=o.useRef(new Set),Xa=o.useRef(new Map),Xr=o.useRef(new Set),Ar=o.useRef(new Map),An=o.useRef(new Set),es=o.useRef(new Map),Wn=o.useRef(new Set),ra=o.useRef(new Map),ts=o.useRef(new Set),rs=o.useRef(new Map),na=o.useRef(new Set),aa=o.useRef(new Map),un=o.useRef(new Map),bs=o.useCallback(O=>O?(Xn.current=new Set(O.taskIds),ws.current=O.taskWatermarks,ln.current=O.taskChangeKeys||new Map,Oa.current=O.taskRelationshipChangeKeys||new Map,yn.current=O.taxonomyChangeKey||"",Vs.current=new Set(Array.from(O.initiativeWatermarks.keys())),Mn.current=O.initiativeWatermarks,Ls.current=new Set(Array.from(O.workstreamWatermarks.keys())),vt.current=O.workstreamWatermarks,nr.current=new Set(Array.from(O.aiProfileWatermarks.keys())),nn.current=O.aiProfileWatermarks,vn.current=O.aiProfileChangeKeys||new Map,Wn.current=new Set(Array.from((O.taskforceAgentWatermarks||new Map).keys())),ra.current=O.taskforceAgentWatermarks||new Map,ts.current=new Set(Array.from((O.taskforceAgentSkillWatermarks||new Map).keys())),rs.current=O.taskforceAgentSkillWatermarks||new Map,na.current=new Set(Array.from((O.agentConversationWatermarks||new Map).keys())),aa.current=O.agentConversationWatermarks||new Map,ta.current=new Set(Array.from(O.documentWatermarks.keys())),ho.current=O.documentWatermarks,Os.current=new Set(Array.from(O.assetWatermarks.keys())),wa.current=O.assetWatermarks,Bs.current=new Set(Array.from(O.documentReviewSessionWatermarks.keys())),Xa.current=O.documentReviewSessionWatermarks,Xr.current=new Set(Array.from(O.documentReviewCommentWatermarks.keys())),Ar.current=O.documentReviewCommentWatermarks,An.current=new Set(Array.from(O.annotatedAttachmentSessionWatermarks.keys())),es.current=O.annotatedAttachmentSessionWatermarks,un.current=O.taskEventWatermarks,$t.current=null,!0):!1,[Xn]),Ws=o.useCallback(()=>({taskIds:Xn.current,taskWatermarks:ws.current,taskChangeKeys:ln.current,taskRelationshipChangeKeys:Oa.current,taxonomyChangeKey:yn.current,initiativeWatermarks:Mn.current,workstreamWatermarks:vt.current,aiProfileWatermarks:nn.current,aiProfileChangeKeys:vn.current,taskforceAgentWatermarks:ra.current,taskforceAgentSkillWatermarks:rs.current,agentConversationWatermarks:aa.current,documentWatermarks:ho.current,assetWatermarks:wa.current,documentReviewSessionWatermarks:Xa.current,documentReviewCommentWatermarks:Ar.current,annotatedAttachmentSessionWatermarks:es.current,taskEventWatermarks:un.current}),[]),go=o.useCallback(()=>{if($t.current==="repair-reset"||$t.current==="storage-write-failed")return!1;const O=$y(t,ue);return!O||O.aiProfileWatermarks.size===0?!1:(nr.current=new Set(O.aiProfileWatermarks.keys()),nn.current=new Map(O.aiProfileWatermarks),vn.current=new Map(O.aiProfileChangeKeys||[]),!0)},[t,ue]),pn=o.useRef(!1),Hn=o.useRef(!1),ua=o.useRef(!1),Pa=o.useRef(!1),Gs=o.useRef(!1),Vn=o.useRef(""),wn=o.useRef(!1),oe=3e4,yt=p?3e4:15e3,Yt=Math.max(3e4,yt),[vr,Ur]=o.useState(null);o.useEffect(()=>{const O=Date.now();if(a!=="local"||!le||re!=="active")return;const j=V?Date.parse(V):NaN;if(!Number.isFinite(j))return;const xt=j+hC-O;if(xt<=0)return;const Et=window.setTimeout(()=>{Ur(Date.now())},xt+50);return()=>window.clearTimeout(Et)},[a,le,re,V]);const sa=o.useMemo(()=>{const O=V?Date.parse(V):NaN,j=z?Date.parse(z):NaN;return Number.isFinite(O)&&Number.isFinite(j)?O>=j?V:z:Number.isFinite(O)?V:Number.isFinite(j)?z:null},[V,z]),Dn=bP({enabled:le,phase:re,busy:pe,retryAt:Ft,lastErrorMessage:we,lastErrorAt:ke,lastPullAt:V,lastPushAt:z,nowMs:vr??Date.now(),pendingChanges:N,durableOutbox:Ae}),Cn=Dn.status,gi=Dn.summary,ba=Dn.recommendedAction,Ba=o.useCallback(O=>{const j=String(O||"").trim();if(!j)return null;const Et=Sb()[j]?.updatedAt;return typeof Et=="string"&&Et.trim().length>0?Et.trim():null},[]),yo=o.useCallback((O,j)=>{const xt=String(O||"").trim(),Et=String(j||"").trim();if(!xt||!Et)return;const At=Sb();At[xt]={updatedAt:Et},yP(At)},[]),Ss=o.useCallback(()=>{const O=$?.mode==="operations"?"operations":"core";return{theme:I,operatingMode:O,localization:{locale:E,weekStartsOn:K}}},[I,$?.mode,E,K]),ko=o.useCallback(async O=>{if(!(!O||typeof O!="object")){Fr.current=!0;try{const j={},xt=hu(O.theme);if(xt&&(Z(xt),U&&me(xt),j.theme=xt),(O.operatingMode==="core"||O.operatingMode==="operations")&&(Ve(Et=>Et&&{...Et,mode:O.operatingMode}),j.setup={mode:O.operatingMode}),O.localization&&typeof O.localization=="object"){const Et={};if(typeof O.localization.locale=="string"&&O.localization.locale.trim().length>0){const De=mA(O.localization.locale.trim());Re(De)}const At=String(O.localization.weekStartsOn||"").trim().toLowerCase();(At==="sunday"||At==="monday")&&(je(At),Et.weekStartsOn=At),Object.keys(Et).length>0&&(j.schedulePreferences=Et)}Object.keys(j).length>0&&await fetch("/api/taskforce/global-settings",{method:"POST",headers:{"Content-Type":"application/json"},credentials:"include",body:JSON.stringify(j)})}finally{Fr.current=!1}}},[U,Z,me,Ve,Re,je]),Bt=o.useCallback(async O=>{const j=O?.preferCloudOnFirstSync!==!1;if(!r)return;if(a!=="local"||!i){Un(),Mr.current=0,Pe("disconnected");return}const xt=String(l||"").trim();if(!xt||xt==="anonymous"){Un(),Mr.current=0,Pe("disconnected");return}if(!Ut.current){Pe("syncing"),se(null),Ut.current=!0;try{const Et=await Yx({resolveCloudAuthUrl:d,userId:xt,preferCloudOnFirstSync:j,getLocalUpdatedAt:Ba,buildLocalSettings:Ss,applyRemoteSettings:ko});if(!Et.success){Pe("error"),Et.transient?(se(Et.error||"Sync failed temporarily. Retrying automatically."),Tn(Et.retryAfterMs)):(Un(),Mr.current=0,se(Et.error||"Sync failed."));return}Un(),Mr.current=0;const At=String(Et.updatedAt||"").trim()||new Date().toISOString();yo(xt,At),Pe("idle"),se(null),Vt.current.add(xt),Et.mode==="pulled"&&(Dr.current="")}catch{Pe("error"),se("Sync failed temporarily. Retrying automatically."),Tn()}finally{Ut.current=!1}}},[r,a,i,l,d,Ba,Ss,ko,yo,Un,Tn]);o.useEffect(()=>{cr.current=Bt},[Bt]),o.useEffect(()=>()=>{Un()},[Un]);const Gn=o.useCallback(()=>{q(null),Y(null)},[]),$n=o.useCallback(O=>{q(bb),Y(new Date().toISOString()),Pe("error"),se(bb),Ns("workspace_sync_window_contention",{workspaceId:t,operation:O})},[t]),sn=o.useCallback(async O=>{try{return await ea(O)}catch{return La(O)}},[La,ea]),Sa=o.useCallback(O=>{sn(O).catch(()=>{})},[sn]),ns=o.useCallback(()=>{const O={...Ws(),taxonomyStateFingerprint:ue},j=Ab(t,O);return sn({pushBaseline:fC(O)}).catch(()=>{}),j},[Ws,t,sn,ue]);o.useEffect(()=>{Ye.current="",en.current="",bn.current="",tn.current="",ft.current="",rn.current="",Vn.current="",wn.current=!1,Xe([]),G(""),Mt.current=[],Ue([]),kt(""),ct([]),Je(""),ir.current=[],dr.current=[],Dt([]),Qt(""),br.current=[],pr([]),Tr(""),bt.current=[],gr.current=[],ht.current=[],Qr([]),Gt(""),Er(jb),q(null),Y(null),X(0),xr.current=new Set,hn.current=[],ws.current=new Map,ln.current=new Map,Oa.current=new Map,yn.current="",Vs.current=new Set,Mn.current=new Map,Ls.current=new Set,vt.current=new Map,nr.current=new Set,nn.current=new Map,vn.current=new Map,ta.current=new Set,ho.current=new Map,Os.current=new Set,wa.current=new Map,Bs.current=new Set,Xa.current=new Map,Xr.current=new Set,Ar.current=new Map,An.current=new Set,es.current=new Map,Wn.current=new Set,ra.current=new Map,ts.current=new Set,rs.current=new Map,na.current=new Set,aa.current=new Map,un.current=new Map,Hn.current=!!mr().startupFullReconcileCompletedAt,No.current=!1;const O=$y(t,ue);bs(O)||($t.current="missing-baseline")},[t,bs,ue]),o.useEffect(()=>{if($t.current!=="missing-baseline")return;const O=$y(t,ue);if(bs(O))return;const j=mC(mr().pushBaseline,ue);bs(j)&&Ab(t,{...Ws(),taxonomyStateFingerprint:ue})},[Ws,t,bs,mr,ue,le,re]),o.useEffect(()=>{Hn.current=!!mr().startupFullReconcileCompletedAt},[t,mr,V,re]);const As=o.useCallback(O=>{zn(()=>Sn.current(),{minDelayMs:O})},[zn]);o.useEffect(()=>{xP({workspaceSyncPhase:re,lastBootstrapPhaseRef:dt,bootstrapPhaseStartedAtRef:Wr,bootstrapLastProgressAtRef:on})},[re]),o.useEffect(()=>RP({currentWorkspaceId:t,workspaceCloudSyncEnabled:le,workspaceSyncPhase:re,workspacePullInFlightRef:Rr,workspacePushInFlightRef:Nr,bootstrapPhaseStartedAtRef:Wr,bootstrapLastProgressAtRef:on,isExecutionAuthorized:at,setWorkspaceLastErrorMessage:O=>q(O),setWorkspaceLastErrorAt:O=>Y(O),setUserGlobalSyncStatus:Pe,setUserGlobalSyncError:O=>se(O),setWorkspaceSyncBusy:xe,persistWorkspaceSyncPatchSafely:Sa}),[t,le,re,Sa,Rr,Nr,Qe.authorityEpoch,at]),o.useEffect(()=>{Ie.current=S||[]},[S]),o.useEffect(()=>{Fe.current=w||[]},[w]),o.useEffect(()=>{let O=!1;return fetch("/api/taskforce/task-relationships",{method:"GET",credentials:"include"}).then(j=>j.ok?j.json():null).then(j=>{!O&&Array.isArray(j?.relationships)&&_e(j.relationships)}).catch(()=>{}),()=>{O=!0}},[w,t,S,_e]),o.useEffect(()=>{it.current=_||[],va.current=new Set((_||[]).map(O=>String(O?.taskId||"").trim()).filter(O=>O.length>0)),Cr.current=new Map((_||[]).map(O=>[String(O?.taskId||"").trim(),String(O?.deletedAt||"").trim()]).filter(([O,j])=>O.length>0&&Number.isFinite(Date.parse(j))))},[_,va,Cr]),o.useEffect(()=>{Be.current=M||[]},[M]),o.useEffect(()=>{Ge.current=R||[]},[R]),o.useEffect(()=>{F.current=b,Ne.current=P||[]},[P,b]);const Ks=o.useRef(!1),No=o.useRef(!1),jo=o.useMemo(()=>({repairMode:Pa,forceFullAiProfilePush:Ks,pushInFlight:Nr,pullInFlight:Rr,pullAfterPushRequested:Gs,pendingPushReplay:ys,blockedPushSignature:Nn,lastPushedSignature:Kt,pendingSignature:Bn,lastPushedTaskIds:Xn,deletedTaskIds:va,deletedTaskWatermarks:Cr,pullCursor:cn,lastPushedWatermarks:ws,lastPushedTaskChangeKeys:ln,lastPushedTaskRelationshipChangeKeys:Oa,lastPushedTaxonomyChangeKey:yn,lastPushedInitiativeIds:Vs,lastPushedInitiativeWatermarks:Mn,lastPushedWorkstreamIds:Ls,lastPushedWorkstreamWatermarks:vt,lastPushedAiProfileIds:nr,lastPushedAiProfileWatermarks:nn,lastPushedAiProfileChangeKeys:vn,lastPushedDocumentPaths:ta,lastPushedDocumentWatermarks:ho,lastPushedAssetPaths:Os,lastPushedAssetWatermarks:wa,lastPushedDocumentReviewSessionIds:Bs,lastPushedDocumentReviewSessionWatermarks:Xa,lastPushedDocumentReviewCommentIds:Xr,lastPushedDocumentReviewCommentWatermarks:Ar,lastPushedAnnotatedAttachmentSessionIds:An,lastPushedAnnotatedAttachmentSessionWatermarks:es,lastPushedTaskforceAgentIds:Wn,lastPushedTaskforceAgentWatermarks:ra,lastPushedTaskforceAgentSkillIds:ts,lastPushedTaskforceAgentSkillWatermarks:rs,lastPushedAgentConversationIds:na,lastPushedAgentConversationWatermarks:aa,lastPushedTaskEventWatermarks:un,baselineResetReason:$t,captureAttachBootstrapBaseline:wn,attachBootstrapBaselineSignature:Vn,startupRepairRan:pn,startupFullReconcileRan:Hn,startupFullReconcileRequested:ua,fullReconcileInFlight:No,lastBootstrapPhase:dt,bootstrapPhaseStartedAtMs:Wr,bootstrapLastProgressAtMs:on,realtimeSuppressedEventQueue:hn}),[]),pa=o.useMemo(()=>_E(),[]),Wa=o.useRef(null),Yr=o.useMemo(()=>ZE({workspaceId:t,phase:J.phase,snapshot:J.snapshot,authority:Qe,client:Ds,isSelectionAuthorized:O=>Wa.current===O&&at()}),[Qe.authorityEpoch,Qe.browserSchedulingAllowed,Qe.reason,t,Ds,J.phase,J.snapshot?.credential.coordinatorGeneration,J.snapshot?.credential.status,J.snapshot?.credential.workspaceId,J.snapshot?.serverInstanceId,J.snapshot?.state.activeWorkspaceId,J.snapshot?.state.coordinatorGeneration,J.snapshot?.state.ownershipMode,J.snapshot?.state.transitionState,h]),$a=Yr.remoteServices;o.useLayoutEffect(()=>(Wa.current=Yr,()=>{Wa.current===Yr&&(Wa.current=null)}),[Yr]);const Kn=o.useCallback(async()=>{const O=Yr,j=Wa.current??{mode:"blocked",remoteServices:null};return!$a||!Nb({current:j,captured:O,browserSchedulingAllowed:at()})?{success:!1,statusCode:409,transient:!0,error:"Browser workspace sync authority changed before cloud readiness validation."}:Ox({cloudAuthConfigured:r,runtimeMode:a,isAuthenticated:i,resolveCloudAuthUrl:d,workspaceId:t,workspaceName:c||t,allowProvisionOnMismatch:re!=="attach-cloud",remoteServices:$a})},[r,t,i,at,c,d,a,$a,re,Yr]),Mo=o.useRef(t);Mo.current=t;const yi=o.useCallback(()=>MR({workspaceId:Mo.current,tasks:Ie.current,archivedTasks:Fe.current,taskRelationships:Me.current,deletedTasks:it.current,pendingDeletedTaskIds:va.current,pendingDeletedTaskWatermarks:Cr.current,initiatives:Be.current,workstreams:Ge.current,taxonomies:Ne.current,taxonomyState:F.current,aiProfiles:Mt.current,documents:Ce.current,assets:nt.current,currentDocumentPaths:ut.current,currentAssetPaths:Ct.current,documentReviewSessions:ir.current,documentReviewComments:dr.current,annotatedAttachmentSessions:br.current,taskforceAgents:bt.current,agentRoles:gr.current,taskforceAgentSkills:u.current,agentConversations:ht.current}),[]),qs=o.useCallback(O=>{const j=yi();return LR({snapshot:j,forceAllAiProfiles:O?.forceAllAiProfiles===!0,baseline:{lastPushedTaskIds:Xn.current,lastPushedWatermarks:ws.current,lastPushedTaskChangeKeys:ln.current,lastPushedTaskRelationshipChangeKeys:Oa.current,lastPushedTaxonomyChangeKey:yn.current,lastPushedInitiativeIds:Vs.current,lastPushedInitiativeWatermarks:Mn.current,lastPushedWorkstreamIds:Ls.current,lastPushedWorkstreamWatermarks:vt.current,lastPushedAiProfileIds:nr.current,lastPushedAiProfileWatermarks:nn.current,lastPushedAiProfileChangeKeys:vn.current,lastPushedDocumentPaths:ta.current,lastPushedDocumentWatermarks:ho.current,lastPushedAssetPaths:Os.current,lastPushedAssetWatermarks:wa.current,lastPushedDocumentReviewSessionIds:Bs.current,lastPushedDocumentReviewSessionWatermarks:Xa.current,lastPushedDocumentReviewCommentIds:Xr.current,lastPushedDocumentReviewCommentWatermarks:Ar.current,lastPushedAnnotatedAttachmentSessionIds:An.current,lastPushedAnnotatedAttachmentSessionWatermarks:es.current,lastPushedTaskforceAgentIds:Wn.current,lastPushedTaskforceAgentWatermarks:ra.current,lastPushedTaskforceAgentSkillIds:ts.current,lastPushedTaskforceAgentSkillWatermarks:rs.current,lastPushedAgentConversationIds:na.current,lastPushedAgentConversationWatermarks:aa.current,lastPushedTaskEventWatermarks:un.current,baselineResetReason:$t.current}})},[yi]),Ys=o.useCallback(O=>qs(O).payload,[qs]),Aa=o.useCallback((O,j)=>{if(a==="local")try{const xt={...j,workspaceId:O,details:kg(j.details)};fetch("/api/taskforce/sync/events",{method:"POST",credentials:"include",headers:{"Content-Type":"application/json"},body:JSON.stringify(xt)}).catch(Et=>{Ns("sync_event_post_failed",{workspaceId:O,eventType:j.eventType,status:j.status,error:String(Et?.message||Et||"")})})}catch(xt){Ns("sync_event_post_failed",{workspaceId:O,eventType:j.eventType,status:j.status,error:String(xt?.message||xt||"")})}},[a]),as=o.useCallback(()=>tC(yi()),[yi]),Cs=o.useMemo(()=>JSON.stringify({tasks:(S||[]).map(O=>({id:String(O.id||"").trim(),updatedAt:String(O.updatedAt||O.createdAt||"").trim(),status:String(O.status||"").trim(),referenceNumber:O.referenceNumber??null,localReferenceNumber:O.localReferenceNumber??null})).sort((O,j)=>O.id.localeCompare(j.id)),archivedTasks:(w||[]).map(O=>({id:String(O.id||"").trim(),updatedAt:String(O.updatedAt||O.createdAt||"").trim(),status:String(O.status||"").trim(),referenceNumber:O.referenceNumber??null,localReferenceNumber:O.localReferenceNumber??null})).sort((O,j)=>O.id.localeCompare(j.id)),initiatives:(M||[]).map(O=>({id:String(O.id||"").trim(),updatedAt:String(O.updatedAt||O.createdAt||"").trim(),isArchived:!!O.isArchived})).sort((O,j)=>O.id.localeCompare(j.id)),workstreams:(R||[]).map(O=>({id:String(O.id||"").trim(),updatedAt:String(O.updatedAt||O.createdAt||"").trim(),initiativeId:typeof O.initiativeId=="string"?O.initiativeId.trim():"",isArchived:!!O.isArchived})).sort((O,j)=>O.id.localeCompare(j.id)),taskEvents:Sk(S||[],w||[],M||[],R||[]).map(O=>({id:String(O.id||"").trim(),entityType:String(O.entityType||"task").trim(),entityId:String(O.entityId||O.taskId||"").trim(),createdAt:String(O.createdAt||"").trim(),action:String(O.action||"").trim()})).sort((O,j)=>O.id.localeCompare(j.id)),deletedTasks:(_||[]).map(O=>({taskId:String(O?.taskId||"").trim(),deletedAt:String(O?.deletedAt||"").trim()})).filter(O=>O.taskId.length>0&&Number.isFinite(Date.parse(O.deletedAt))).sort((O,j)=>O.taskId.localeCompare(j.taskId)),taxonomies:Array.isArray(P)?P:[],taxonomyState:b&&typeof b=="object"?b:null}),[S,w,_,M,R,P,b]);SE({enabled:g===!0&&a==="local"&&St.browserSchedulingAllowed&&le,workspaceId:t,mutationFingerprint:Cs,authorityScope:Yr,remoteServices:$a,localServices:pa,isAuthorityCurrent:O=>Wa.current===O&&at(),onHydratedEventIds:O=>{Lo.current.recordSuppressedEventIds(O,{ttlMs:6e4})},onOutboxStatus:ot});const Do=o.useCallback(()=>{if(g!==!0)return!1;const O=he.current;return O===null||O.recovery!==null&&O.recovery.state!=="completed"},[g]),Zs=o.useMemo(()=>{const O=[];for(const j of S||[]){const xt=Array.isArray(j.attachments)?j.attachments.length:0;xt>0&&O.push(`${j.id}:${xt}`)}return O.join("|")},[S]),_s=o.useCallback(O=>{if(!O)return!1;if(wn.current)return wn.current=!1,Vn.current=O,Kt.current=O,X(0),!0;const j=Vn.current;return j?O===j?(Kt.current=O,X(0),!0):(Vn.current="",!1):!1},[]),Js=o.useCallback(async()=>{if(a!=="local"||!mc(t)||r&&(!s||!i))return!1;try{const O=await fetch(`/api/taskforce/taxonomy-state?workspaceId=${encodeURIComponent(t)}`,{method:"GET",credentials:"include"});if(!O.ok)return!1;const j=await O.json();return nC(j)?(F.current=j,Ne.current=Array.isArray(j.taxonomies)?j.taxonomies:[],!0):!1}catch(O){return Ns("taxonomy_snapshot_refresh_failed",{workspaceId:t,error:String(O?.message||O||"")}),!1}},[a,t,r,s,i]),qn=o.useCallback(async()=>{if(a!=="local"||!mc(t)||r&&(!s||!i))return!1;try{const O=await fetch(`/api/taskforce/sync/workspace/documents?workspaceId=${encodeURIComponent(t)}`,{method:"GET",credentials:"include"});if(!O.ok)return!1;const j=await O.json();if(!Array.isArray(j?.documents))return!1;const xt=Array.isArray(j?.documents)?j.documents.map(De=>({path:String(De?.path||"").trim(),updatedAt:String(De?.updatedAt||"").trim(),content:typeof De?.content=="string"?De.content:"",assetId:typeof De?.assetId=="string"&&De.assetId.trim().length>0?De.assetId.trim():void 0,documentId:typeof De?.documentId=="string"&&De.documentId.trim().length>0?De.documentId.trim():null,referenceNumber:Number.isFinite(Number(De?.referenceNumber))?Math.max(1,Math.floor(Number(De.referenceNumber))):null,version:Number.isFinite(Number(De?.version))?Math.max(1,Math.floor(Number(De.version))):null,taskId:typeof De?.taskId=="string"&&De.taskId.trim().length>0?De.taskId.trim():null,logicalName:typeof De?.logicalName=="string"&&De.logicalName.trim().length>0?De.logicalName.trim():null,caption:typeof De?.caption=="string"&&De.caption.trim().length>0?De.caption.trim():null,originalFilename:typeof De?.originalFilename=="string"&&De.originalFilename.trim().length>0?De.originalFilename.trim():null,linkRole:De?.linkRole==="reference"?"reference":"attachment"})).filter(De=>De.path.length>0):[],Et=new Set(Array.isArray(j?.knownPaths)?j.knownPaths.map(De=>String(De||"").trim()).filter(De=>De.length>0):xt.map(De=>De.path)),At=typeof j?.fingerprint=="string"?j.fingerprint:JSON.stringify(xt.map(De=>`${De.path}:${De.updatedAt}:${De.content.length}`).sort());return At===Ye.current||(Ye.current=At,Ce.current=xt,ut.current=Et,Xe(xt),G(At)),!0}catch(O){return Ns("documents_snapshot_refresh_failed",{workspaceId:t,error:String(O?.message||O||"")}),!1}finally{jn("documents")}},[a,t,r,s,i,jn]),Fa=o.useCallback(async()=>{if(a!=="local")return Lt("runtime-not-local"),!1;if(!mc(t))return Lt("workspace-id-invalid"),!1;if(r&&(!s||!i))return Lt(s?"auth-required":"auth-unresolved"),!1;Lt(null);try{const O=await fetch(`/api/taskforce/sync/workspace/ai-profiles?workspaceId=${encodeURIComponent(t)}`,{method:"GET",credentials:"include"});if(!O.ok)return rr(`HTTP ${O.status}`),Ht(new Date().toISOString()),!1;const j=await O.json();if(!Array.isArray(j?.aiProfiles))return!1;const xt=Array.isArray(j?.aiProfiles)?j.aiProfiles:[];st(xt.length);const Et=Array.isArray(j?.aiProfiles)?j.aiProfiles.map(De=>mP(De)).filter(De=>De.id.length>0&&De.workspaceId.length>0):[];rr(null),Ht(new Date().toISOString());const At=typeof j?.fingerprint=="string"?j.fingerprint:PR(Et);return At===en.current||(en.current=At,Mt.current=Et,Ue(Et),kt(At)),!0}catch(O){return rr(String(O?.message||O||"unknown-error")),Ht(new Date().toISOString()),Ns("ai_profiles_snapshot_refresh_failed",{workspaceId:t,error:String(O?.message||O||"")}),!1}finally{jn("aiProfiles")}},[a,t,r,s,i,jn]),Gr=o.useCallback(async()=>{if(a!=="local"||!mc(t)||r&&(!s||!i))return!1;try{const O=await fetch(`/api/taskforce/sync/workspace/assets?workspaceId=${encodeURIComponent(t)}`,{method:"GET",credentials:"include"});if(!O.ok)return!1;const j=await O.json();if(!Array.isArray(j?.assets))return!1;const xt=Array.isArray(j?.assets)?j.assets.map(De=>({path:String(De?.path||"").trim(),updatedAt:String(De?.updatedAt||"").trim(),contentBase64:typeof De?.contentBase64=="string"?De.contentBase64:"",assetId:typeof De?.assetId=="string"&&De.assetId.trim().length>0?De.assetId.trim():void 0,kind:De?.kind==="image"?"image":"file",mimeType:typeof De?.mimeType=="string"&&De.mimeType.trim().length>0?De.mimeType.trim():"application/octet-stream",referenceNumber:Number.isFinite(Number(De?.referenceNumber))?Math.max(1,Math.floor(Number(De.referenceNumber))):null,taskId:typeof De?.taskId=="string"&&De.taskId.trim().length>0?De.taskId.trim():null,logicalName:typeof De?.logicalName=="string"&&De.logicalName.trim().length>0?De.logicalName.trim():null,caption:typeof De?.caption=="string"&&De.caption.trim().length>0?De.caption.trim():null,originalFilename:typeof De?.originalFilename=="string"&&De.originalFilename.trim().length>0?De.originalFilename.trim():null,linkRole:De?.linkRole==="reference"?"reference":De?.linkRole==="image"?"image":"attachment"})).filter(De=>De.path.length>0&&De.contentBase64.length>0):[],Et=new Set(Array.isArray(j?.knownPaths)?j.knownPaths.map(De=>String(De||"").trim()).filter(De=>De.length>0):xt.map(De=>De.path)),At=typeof j?.fingerprint=="string"?j.fingerprint:JSON.stringify(xt.map(De=>`${De.path}:${De.updatedAt}:${De.contentBase64.length}`).sort());return At===bn.current||(bn.current=At,nt.current=xt,Ct.current=Et,ct(xt),Je(At)),!0}catch(O){return Ns("assets_snapshot_refresh_failed",{workspaceId:t,error:String(O?.message||O||"")}),!1}finally{jn("assets")}},[a,t,r,s,i,jn]),rl=o.useCallback(async()=>{if(a!=="local"||!mc(t)||r&&(!s||!i))return!1;try{const O=await fetch(`/api/taskforce/planning/bootstrap?workspaceId=${encodeURIComponent(t)}`,{method:"GET",credentials:"include"});if(!O.ok)return!1;const j=await O.json();if(!Array.isArray(j?.initiatives)||!Array.isArray(j?.workstreams))return!1;const xt=Array.isArray(j?.initiatives)?j.initiatives.filter(At=>!!(At&&typeof At=="object"&&typeof At.id=="string")):[],Et=Array.isArray(j?.workstreams)?j.workstreams.filter(At=>!!(At&&typeof At=="object"&&typeof At.id=="string")):[];return Be.current=xt,Ge.current=Et,!0}catch(O){return Ns("planning_snapshot_refresh_failed",{workspaceId:t,error:String(O?.message||O||"")}),!1}},[a,t,r,s,i]),oa=o.useCallback(async()=>{if(a!=="local"||!mc(t)||r&&(!s||!i))return!1;try{const O=await fetch(`/api/taskforce/sync/workspace/document-reviews?workspaceId=${encodeURIComponent(t)}`,{method:"GET",credentials:"include"});if(!O.ok)return!1;const j=await O.json();if(!Array.isArray(j?.sessions))return!1;const xt=Array.isArray(j?.sessions)?j.sessions.map(De=>({id:String(De?.id||"").trim(),assetId:String(De?.assetId||"").trim(),documentId:typeof De?.documentId=="string"&&De.documentId.trim().length>0?De.documentId.trim():null,documentVersion:Number.isFinite(Number(De?.documentVersion))?Math.max(1,Math.floor(Number(De.documentVersion))):null,title:typeof De?.title=="string"&&De.title.trim().length>0?De.title.trim():null,status:De?.status==="resolved"?"resolved":"open",comments:Array.isArray(De?.comments)?De.comments:[],createdByActorId:typeof De?.createdByActorId=="string"&&De.createdByActorId.trim().length>0?De.createdByActorId.trim():null,updatedByActorId:typeof De?.updatedByActorId=="string"&&De.updatedByActorId.trim().length>0?De.updatedByActorId.trim():null,createdAt:String(De?.createdAt||"").trim(),updatedAt:String(De?.updatedAt||De?.createdAt||"").trim(),deletedAt:typeof De?.deletedAt=="string"&&De.deletedAt.trim().length>0?De.deletedAt.trim():null})).filter(De=>De.id.length>0&&De.assetId.length>0):[],Et=Array.isArray(j?.comments)?j.comments.map(De=>({id:String(De?.id||"").trim(),sessionId:String(De?.sessionId||"").trim(),body:typeof De?.body=="string"?De.body:"",anchor:De?.anchor??null,order:Number.isFinite(Number(De?.order))?Math.max(0,Math.floor(Number(De.order))):0,authorActorId:typeof De?.authorActorId=="string"&&De.authorActorId.trim().length>0?De.authorActorId.trim():null,updatedByActorId:typeof De?.updatedByActorId=="string"&&De.updatedByActorId.trim().length>0?De.updatedByActorId.trim():null,deletedByActorId:typeof De?.deletedByActorId=="string"&&De.deletedByActorId.trim().length>0?De.deletedByActorId.trim():null,createdAt:String(De?.createdAt||"").trim(),updatedAt:String(De?.updatedAt||De?.createdAt||"").trim(),deletedAt:typeof De?.deletedAt=="string"&&De.deletedAt.trim().length>0?De.deletedAt.trim():null})).filter(De=>De.id.length>0&&De.sessionId.length>0):vP(xt),At=typeof j?.fingerprint=="string"?j.fingerprint:JSON.stringify([...xt.map(De=>`${De.id}:${De.updatedAt}:${De.status}:${De.deletedAt||""}:${De.comments.length}`).sort(),...Et.map(De=>`${De.id}:${De.sessionId}:${De.updatedAt}:${De.deletedAt||""}`).sort()]);return At===tn.current||(tn.current=At,ir.current=xt,dr.current=Et,Dt(xt),Qt(At)),!0}catch(O){return Ns("document_review_sessions_snapshot_refresh_failed",{workspaceId:t,error:String(O?.message||O||"")}),!1}finally{jn("documentReviewSessions")}},[a,t,r,s,i,jn]),Fn=o.useCallback(async()=>{if(a!=="local"||!mc(t)||r&&(!s||!i))return!1;try{const O=await fetch(`/api/taskforce/sync/workspace/annotated-attachments?workspaceId=${encodeURIComponent(t)}`,{method:"GET",credentials:"include"});if(!O.ok)return!1;const j=await O.json();if(!Array.isArray(j?.sessions))return!1;const xt=Array.isArray(j?.sessions)?j.sessions.map(At=>({id:String(At?.id||"").trim(),workspaceId:String(At?.workspaceId||"").trim(),taskId:String(At?.taskId||"").trim(),baseImageAssetId:String(At?.baseImageAssetId||"").trim(),title:typeof At?.title=="string"&&At.title.trim().length>0?At.title.trim():null,globalInstruction:typeof At?.globalInstruction=="string"&&At.globalInstruction.trim().length>0?At.globalInstruction.trim():null,annotations:Array.isArray(At?.annotations)?At.annotations:[],createdByActorId:typeof At?.createdByActorId=="string"&&At.createdByActorId.trim().length>0?At.createdByActorId.trim():null,updatedByActorId:typeof At?.updatedByActorId=="string"&&At.updatedByActorId.trim().length>0?At.updatedByActorId.trim():null,createdAt:String(At?.createdAt||"").trim(),updatedAt:String(At?.updatedAt||At?.createdAt||"").trim(),deletedAt:typeof At?.deletedAt=="string"&&At.deletedAt.trim().length>0?At.deletedAt.trim():null})).filter(At=>At.id.length>0&&At.workspaceId.length>0&&At.taskId.length>0&&At.baseImageAssetId.length>0):[],Et=typeof j?.fingerprint=="string"?j.fingerprint:JSON.stringify(xt.map(At=>`${At.id}:${At.updatedAt}:${At.taskId}:${At.baseImageAssetId}:${At.annotations.length}:${At.deletedAt||""}`).sort());return Et===ft.current||(ft.current=Et,br.current=xt,pr(xt),Tr(Et)),!0}catch(O){return Ns("annotated_attachment_sessions_snapshot_refresh_failed",{workspaceId:t,error:String(O?.message||O||"")}),!1}finally{jn("annotatedAttachmentSessions")}},[a,t,r,s,i,jn]),vo=o.useCallback(async()=>{if(a!=="local"||!mc(t)||r&&(!s||!i))return!1;try{const O=await fetch(`/api/taskforce/sync/workspace/taskforce-agents?workspaceId=${encodeURIComponent(t)}`,{method:"GET",credentials:"include"});if(!O.ok)return!1;const j=await O.json();if(!Array.isArray(j?.agents)||!Array.isArray(j?.roles)||!Array.isArray(j?.skills)||!Array.isArray(j?.conversations))return!1;const xt=Array.isArray(j?.agents)?j.agents.map(er=>hP(er)).filter(er=>er.id.length>0&&er.workspaceId.length>0):[],Et=Array.isArray(j?.conversations)?j.conversations.map(er=>gP(er)).filter(er=>er.id.length>0&&er.workspaceId.length>0&&er.agentId.length>0):[],At=Array.isArray(j?.roles)?j.roles.map(er=>OR(er,t)).filter(er=>!!er):[],De=j.skills.map(er=>BR(er,t)).filter(er=>!!(er&&er.id.length>0&&er.workspaceId.length>0)),Fs=typeof j?.fingerprint=="string"?j.fingerprint:JSON.stringify([...xt.map(er=>`${er.id}:${er.updatedAt}:${er.deletedAt||""}:${er.name}:${er.modelTier}`).sort(),...At.map(er=>`${er.id}:${er.updatedAt}:${er.deletedAt||""}:${er.currentRevision}:${er.currentContentHash}`).sort(),...De.map(er=>`${er.id}:${er.updatedAt}:${er.revision}:${er.contentHash}:${er.lifecycleStatus}`).sort(),...Et.map(er=>`${er.id}:${er.agentId}:${er.updatedAt}:${er.deletedAt||""}:${er.messages.length}`).sort()]);return Fs===rn.current||(rn.current=Fs,bt.current=xt,gr.current=At,u.current=De,ht.current=Et,Qr(xt),Gt(Fs)),!0}catch(O){return Ns("taskforce_agents_snapshot_refresh_failed",{workspaceId:t,error:String(O?.message||O||"")}),!1}finally{jn("taskforceAgents")}},[a,t,r,s,i,jn]),nl=o.useCallback(()=>{Xn.current=new Set([...Ie.current,...Fe.current].map(j=>String(j?.id||"").trim()).filter(j=>j.length>0)),ws.current=new Map([...Ie.current,...Fe.current].map(j=>[String(j?.id||"").trim(),Ho.getWatermark(j)]).filter(([j])=>j.length>0)),ln.current=new Map([...Ie.current.map(j=>[String(j?.id||"").trim(),Ho.getChangeKey({...j,isArchived:!1})]),...Fe.current.map(j=>[String(j?.id||"").trim(),Ho.getChangeKey({...j,isArchived:!0})])].filter(([j])=>j.length>0)),Oa.current=new Map(Me.current.map(j=>[String(j?.id||"").trim(),_v(j)]).filter(([j])=>j.length>0)),yn.current=eC({taxonomyState:F.current,taxonomies:Ne.current}),Vs.current=new Set(Be.current.map(j=>String(j?.id||"").trim()).filter(j=>j.length>0)),Mn.current=new Map(Be.current.map(j=>[String(j?.id||"").trim(),String(j?.updatedAt||j?.createdAt||"").trim()]).filter(([j])=>j.length>0)),Ls.current=new Set(Ge.current.map(j=>String(j?.id||"").trim()).filter(j=>j.length>0)),vt.current=new Map(Ge.current.map(j=>[String(j?.id||"").trim(),String(j?.updatedAt||j?.createdAt||"").trim()]).filter(([j])=>j.length>0)),nr.current=new Set(Mt.current.map(j=>String(j?.id||"").trim()).filter(j=>j.length>0)),nn.current=new Map(Mt.current.map(j=>[String(j?.id||"").trim(),mf.getWatermark(j)]).filter(([j])=>j.length>0)),vn.current=new Map(Mt.current.map(j=>[String(j?.id||"").trim(),mf.getChangeKey(j)]).filter(([j])=>j.length>0)),ta.current=new Set(Ce.current.map(j=>String(j?.path||"").trim()).filter(j=>j.length>0)),ho.current=new Map(Ce.current.map(j=>[String(j?.path||"").trim(),String(j?.updatedAt||"").trim()]).filter(([j])=>j.length>0)),Os.current=new Set(nt.current.map(j=>String(j?.path||"").trim()).filter(j=>j.length>0)),wa.current=new Map(nt.current.map(j=>[String(j?.path||"").trim(),String(j?.updatedAt||"").trim()]).filter(([j])=>j.length>0)),Bs.current=new Set(ir.current.map(j=>String(j?.id||"").trim()).filter(j=>j.length>0)),Xa.current=new Map(ir.current.map(j=>[String(j?.id||"").trim(),String(j?.updatedAt||j?.createdAt||"").trim()]).filter(([j])=>j.length>0)),Xr.current=new Set(dr.current.map(j=>String(j?.id||"").trim()).filter(j=>j.length>0)),Ar.current=new Map(dr.current.map(j=>[String(j?.id||"").trim(),String(j?.updatedAt||j?.createdAt||"").trim()]).filter(([j])=>j.length>0)),An.current=new Set(br.current.map(j=>String(j?.id||"").trim()).filter(j=>j.length>0)),es.current=new Map(br.current.map(j=>[String(j?.id||"").trim(),String(j?.updatedAt||j?.createdAt||"").trim()]).filter(([j])=>j.length>0)),Wn.current=new Set([...bt.current.map(j=>String(j?.id||"").trim()),...gr.current.map(j=>`agent-role:${String(j?.id||"").trim()}`)].filter(j=>j.length>0)),ra.current=new Map([...bt.current.map(j=>[String(j?.id||"").trim(),String(j?.deletedAt||j?.updatedAt||j?.createdAt||"").trim()]),...gr.current.map(j=>[`agent-role:${String(j?.id||"").trim()}`,String(j?.deletedAt||j?.updatedAt||j?.createdAt||"").trim()])].filter(([j])=>j.length>0)),ts.current=new Set(u.current.map(j=>String(j?.id||"").trim()).filter(j=>j.length>0)),rs.current=new Map(u.current.map(j=>[String(j?.id||"").trim(),String(j?.updatedAt||j?.createdAt||"").trim()]).filter(([j])=>j.length>0)),na.current=new Set(ht.current.map(j=>String(j?.id||"").trim()).filter(j=>j.length>0)),aa.current=new Map(ht.current.map(j=>[String(j?.id||"").trim(),String(j?.deletedAt||j?.updatedAt||j?.createdAt||"").trim()]).filter(([j])=>j.length>0)),un.current=new Map(Sk(Ie.current,Fe.current,Be.current,Ge.current).map(j=>[String(j?.id||"").trim(),String(j?.createdAt||"").trim()]).filter(([j])=>j.length>0));const O=ns();$t.current=O?null:"storage-write-failed"},[ns]),ud=o.useCallback(async()=>{const[O,j,xt]=await Promise.all([fetch("/api/taskforce/tasks",{method:"GET",credentials:"include"}),fetch("/api/taskforce/archive",{method:"GET",credentials:"include"}),fetch("/api/taskforce/task-relationships",{method:"GET",credentials:"include"})]);if(!O.ok||!j.ok||!xt.ok)throw new Error("Required task collection refresh failed.");const[Et,At,De]=await Promise.all([O.json(),j.json(),xt.json()]);if(!Array.isArray(Et?.tasks)||!Array.isArray(At?.archived)||!Array.isArray(De?.relationships))throw new Error("Required task collection refresh returned an invalid response.");const Fs=Et.tasks.map(Yn=>xo(Yn)),er=At.archived.map(Yn=>({...xo(Yn),isArchived:!0}));Ie.current=Fs,Fe.current=er,_e(De.relationships),L(Fs),D(er),await ye().catch(()=>{Ns("refresh_planning_entities_failed",{workspaceId:t})})},[t,ye,D,L,_e]),{handleSyncAuthFailure:Ea,ensureWorkspaceSyncReady:Sc}=o.useMemo(()=>wP({currentWorkspaceId:t,workspaceSyncPhase:re,clearWorkspaceRetry:kn,setWorkspaceSyncBusy:xe,setUserGlobalSyncStatus:Pe,setUserGlobalSyncError:O=>se(O),setWorkspaceLastErrorMessage:O=>q(O),setWorkspaceLastErrorAt:O=>Y(O),reportSyncEvent:Aa,setAuthBlocked:ie,setIsAuthenticated:H,checkAuthSession:be,ensureCloudWorkspaceReadyForSync:Kn,scheduleWorkspaceSyncRetry:As,persistWorkspaceSyncPatchSafely:Sa}),[t,re,kn,Aa,ie,H,be,Kn,As,Sa]),Na=o.useMemo(()=>{const O=Yr;return $a?pE({cloudAuthConfigured:r,runtimeMode:a,initiativeFeedActivationEnabled:k,combinedFeedActivationEnabled:v,combinedFeedCoverage:C,workspaceCloudSyncEnabled:le,currentWorkspaceId:t,workspaceSyncPhase:re,isAuthenticated:i,checkAuthSession:be,resolveCloudAuthUrl:d,ensureCloudWorkspaceReadyForSync:Kn,ensureWorkspaceSyncReady:Sc,handleSyncAuthFailure:Ea,clearWorkspaceRetry:kn,clearWorkspaceIssue:Gn,isWorkspaceRetryPending:Lr,isDurableRecoveryBlockingOrdinaryPush:Do,isExecutionAuthorized:()=>Nb({current:Wa.current??{mode:"blocked",remoteServices:null},captured:O,browserSchedulingAllowed:at(),onDenied:()=>{const j=Xt.current;!j.serverCommandMode||kr.current===j.authorityEpoch||(kr.current=j.authorityEpoch,Aa(t,{eventType:"handshake",status:"error",statusCode:409,errorMessage:"Browser cloud execution was blocked by persisted server ownership.",details:{errorCode:"SYNC_BROWSER_EXECUTION_FENCED_BY_SERVER_OWNER",authorityEpoch:j.authorityEpoch,capturedTransportMode:O.mode}}))}}),scheduleWorkspaceSyncRetry:As,persistWorkspaceSyncPatchSafely:Sa,persistWorkspaceSyncPatchBestEffort:sn,persistWorkspaceSyncWatermarksSnapshotBestEffort:ns,refreshWorkspaceAiProfilePushBaselineFromPersistence:go,reportSyncEvent:Aa,acquireWorkspaceSyncLease:Eo,releaseWorkspaceSyncLease:xa,recordWorkspaceSyncCompletion:Ra,reportWorkspaceWindowContention:$n,refreshWorkspaceSyncMarkdownDocumentsSnapshot:qn,refreshWorkspaceSyncAiProfilesSnapshot:Fa,refreshWorkspaceSyncAssetsSnapshot:Gr,refreshWorkspaceSyncTaxonomySnapshot:Js,refreshWorkspaceSyncPlanningEntitiesSnapshot:rl,refreshWorkspaceSyncDocumentReviewSessionsSnapshot:oa,refreshWorkspaceSyncAnnotatedAttachmentSessionsSnapshot:Fn,refreshWorkspaceSyncTaskforceAgentsSnapshot:vo,refreshLocalWorkspaceTaskCollections:ud,buildWorkspaceSyncPayload:Ys,buildWorkspaceSyncSignature:as,seedWorkspaceSnapshotPushBaseline:nl,shouldSuppressAttachBootstrapPush:_s,recordSuppressedEventIds:(...j)=>Lo.current.recordSuppressedEventIds(...j),runtime:jo,localServices:pa,remoteServices:$a,setWorkspaceSyncBusy:xe,setUserGlobalSyncStatus:Pe,setUserGlobalSyncError:se,setWorkspaceLastErrorMessage:q,setWorkspaceLastErrorAt:Y,setWorkspaceLastPullAt:W,setWorkspaceLastPushAt:fe,setWorkspaceSyncPendingChanges:X,setTasks:L,setArchivedTasks:D,scheduleTask:(j,xt)=>{const Et=window.setTimeout(j,xt);return{cancel:()=>window.clearTimeout(Et)}},logDebug:Ns,notifyAiProfilesMutated:sC,notifyAgentsMutated:oC,notifyAgentSkillsMutated:iC}):null},[r,a,k,v,C,le,t,re,ue,i,be,d,Kn,Sc,Ea,kn,Gn,Do,As,Sa,sn,ns,go,Aa,Eo,xa,Ra,$n,qn,Fa,Gr,Js,rl,oa,Fn,vo,ud,Ys,as,nl,_s,Yr,$a,L,D]);o.useEffect(()=>{Na?.resumeDeferredWork()},[Qe.authorityEpoch,Na]),o.useEffect(()=>()=>Na?.dispose(),[Na]);const Ca=o.useCallback((O,j)=>Na?Na.pushWorkspaceChangesToCloud(O,j):Promise.resolve(!1),[Na]),ss=o.useCallback(O=>Na?Na.pullWorkspaceChangesFromCloud(O):Promise.resolve(!1),[Na]),os=o.useRef(ss);os.current=ss;const Lo=o.useRef({handleRealtimeSignal:()=>{},recordSuppressedEventIds:()=>{},clearRealtimePullDebounce:()=>{}}),$s=o.useMemo(()=>jP({cloudAuthConfigured:r,runtimeMode:a,workspaceCloudSyncEnabled:le,workspaceSyncPhase:re,workspacePullInFlightRef:Rr,realtimePullDebounceRef:or,realtimeSuppressedEventIdsRef:xr,clearWorkspaceRetry:kn,isWorkspaceRetryPending:Lr,isExecutionAuthorized:at,isServerOwned:()=>$E(Xt.current),signalServerWake:O=>J.signalWake("realtime",O),pullWorkspaceChangesFromCloud:ss}),[r,a,le,re,kn,Lr,at,J.signalWake,ss]);Lo.current=$s;const Ac=f("/taskforce-ws"),Hi=String(l||"").trim(),Cc=!!(p&&(at()||Qe.serverCommandMode)&&r&&a==="local"&&le&&s&&i&&Hi&&Hi!=="anonymous"&&Ac),_c=aC({enabled:Cc,workspaceId:t,websocketUrl:Ac,onSignal:$s.handleRealtimeSignal,onTelemetry:Tt,userId:Hi||void 0});o.useEffect(()=>{qt(_c.connectionState)},[_c.connectionState]),o.useEffect(()=>()=>$s.clearRealtimePullDebounce(),[$s]),o.useEffect(()=>{Qe.browserSchedulingAllowed||(kn(),Lo.current.clearRealtimePullDebounce())},[Qe.authorityEpoch,Qe.browserSchedulingAllowed,kn]);const Ic=o.useCallback(async O=>Qe.serverCommandMode?(await J.issueCommand(O.enabled?"EnableSync":"DisableSync"),{success:!0}):at()?ks(O,{cloudAuthConfigured:r,isAuthenticated:i,ensureCloudWorkspaceReadyForSync:Kn}):{success:!1,error:"Workspace sync ownership is changing. Wait for the coordinator to become ready."},[ks,r,i,Kn,Qe.serverCommandMode,at,J]),al=o.useCallback(async()=>{await Bt({preferCloudOnFirstSync:!1})},[Bt]),_a=o.useMemo(()=>LP({currentWorkspaceId:t,workspaceCloudSyncEnabled:le,workspaceSyncPhase:re,workspaceLastPullAt:V,runtime:jo,localServices:pa,acquireWorkspaceSyncLease:Eo,releaseWorkspaceSyncLease:xa,forceClearWorkspaceSyncLease:Ja,clearWorkspaceRetry:kn,clearWorkspaceIssue:Gn,reportWorkspaceWindowContention:$n,reportSyncEvent:Aa,persistWorkspaceSyncPatch:ea,persistWorkspaceSyncWatermarksSnapshotBestEffort:ns,buildWorkspaceSyncSignature:as,pullWorkspaceChangesFromCloud:ss,pushWorkspaceChangesToCloud:Ca,cloudAuthConfigured:r,runtimeMode:a,isAuthenticated:i,checkAuthSession:be,isExecutionAuthorized:at,coordinatorGeneration:J.snapshot?.state?.coordinatorGeneration??null}),[t,ue,le,re,V,jo,pa,Eo,xa,Ja,kn,Gn,$n,Aa,ea,ns,as,ss,Ca,r,a,i,be,at,J.snapshot?.state?.coordinatorGeneration]),Zr=o.useCallback(async()=>{if(Qe.serverCommandMode){const O=J.snapshot||await J.refresh();return!O||O.credential.status!=="ready"?!1:(await J.issueCommand("Retry"),!0)}return at()?_a.retryWorkspaceCloudSync():!1},[Qe.serverCommandMode,at,J,_a]),sl=o.useCallback(async()=>{if(Qe.serverCommandMode){J.issueCommand("Repair").catch(()=>{});return}at()&&await _a.resetWorkspaceSyncCursorAndPull()},[Qe.serverCommandMode,at,J,_a]),ja=o.useCallback(()=>{const O=Tk({cloudAuthConfigured:r,runtimeMode:a,workspaceCloudSyncEnabled:le,currentWorkspaceId:t,workspaceSyncPhase:re,isAuthenticated:i,repairModeActive:Pa.current===!0,repairModeBypass:!1,pushInFlight:Nr.current,pullInFlight:Rr.current}),j=Lr(),xt=xk({cloudAuthConfigured:r,runtimeMode:a,workspaceCloudSyncEnabled:le,currentWorkspaceId:t,workspaceSyncPhase:re,isAuthenticated:i,repairModeActive:Pa.current===!0,repairModeBypass:!1,retryPending:j,pushInFlight:Nr.current,pullInFlight:Rr.current}),Et=Rk({cloudAuthConfigured:r,runtimeMode:a,workspaceCloudSyncEnabled:le,currentWorkspaceId:t,isAuthenticated:i});return{workspaceId:t,enabled:le,phase:re,status:Cn,summary:gi,lastSuccessfulSyncAt:sa,lastPullAt:V,lastPushAt:z,lastErrorAt:ke,pendingChanges:N+(Ae?.activeDepth||0),lastErrorMessage:we,recommendedAction:ba,pushBlockedReason:O.allowed?null:O.reason,pullBlockedReason:xt.allowed?null:xt.reason,retryBlockedReason:Et.allowed?null:Et.reason,repairActive:Pa.current===!0,pushInFlight:Nr.current===!0,pullInFlight:Rr.current===!0,retryPending:j,documentSnapshotCount:We.length,aiProfileSnapshotCount:mt.length,aiProfileSnapshotRawCount:wr,aiProfileSnapshotLastFetchAt:rt,aiProfileSnapshotLastFetchError:lr,aiProfileSnapshotLastSkipReason:zt,assetSnapshotCount:Ee.length,documentReviewSessionSnapshotCount:Rt.length,documentReviewSessionSnapshotFingerprint:It,annotatedAttachmentSessionSnapshotCount:sr.length,annotatedAttachmentSessionSnapshotFingerprint:Jr,taskforceAgentSnapshotCount:ur.length,taskforceAgentSnapshotFingerprint:Hr,lastPushedAiProfileCount:nr.current.size,lastPushedAiProfileWatermarkCount:nn.current.size,lastPushedTaskforceAgentCount:Wn.current.size,lastPushedTaskforceAgentWatermarkCount:ra.current.size,lastPushedAgentConversationCount:na.current.size,lastPushedAgentConversationWatermarkCount:aa.current.size,forceFullAiProfilePushQueued:Ks.current===!0,durableOutbox:Ae}},[r,t,a,le,re,i,Cn,gi,sa,V,z,ke,N,Ae,we,ba,We.length,mt.length,wr,rt,lr,zt,Ee.length,Rt.length,It,sr.length,Jr,ur.length,Hr,Lr]);o.useEffect(()=>{Sn.current=Zr},[Zr]);const Kr=o.useCallback(()=>{qn(),Gr()},[qn,Gr]);o.useEffect(()=>{if(!r||a!=="local"||!le||!s||!i)return;qn(),Fa(),Gr(),oa(),Fn(),vo();const O=ma=>{const Is=ma.detail;(String(Is?.workspaceId||"").trim()||"default")===t&&Kr()},j=ma=>{const Is=ma.detail;(String(Is?.workspaceId||"").trim()||"default")===t&&(Fa(),Gr())},xt=ma=>{const Is=ma.detail;(String(Is?.workspaceId||"").trim()||"default")===t&&String(Is?.reason||"").trim()!=="sync-apply"&&vo()},Et=ma=>{const Is=ma.detail;(String(Is?.workspaceId||"").trim()||"default")===t&&String(Is?.reason||"").trim()!=="sync-apply"&&vo()};window.addEventListener(Ak,O),window.addEventListener(Ck,j),window.addEventListener(_k,xt),window.addEventListener(Ik,Et);const At=window.setInterval(()=>{qn()},oe),De=window.setInterval(()=>{Fa()},oe),Fs=window.setInterval(()=>{Gr()},oe),er=window.setInterval(()=>{oa()},oe),Yn=window.setInterval(()=>{Fn()},oe),Oo=window.setInterval(()=>{vo()},oe);return()=>{window.removeEventListener(Ak,O),window.removeEventListener(Ck,j),window.removeEventListener(_k,xt),window.removeEventListener(Ik,Et),window.clearInterval(At),window.clearInterval(De),window.clearInterval(Fs),window.clearInterval(er),window.clearInterval(Yn),window.clearInterval(Oo)}},[r,a,le,s,i,t,Kr,qn,Fa,Gr,oa,Fn,vo,oe]),o.useEffect(()=>{!r||a!=="local"||!le||!s||!i||Zs&&Kr()},[r,a,le,s,i,Zs,Kr]),o.useEffect(()=>{if(!at()||!SP({cloudAuthConfigured:r,runtimeMode:a,workspaceCloudSyncEnabled:le,authSessionResolved:s,workspaceSyncPhase:re,workspaceSyncReferenceSnapshotsReady:an}))return;const O=as();if(_s(O)||!O||O===Kt.current||Nn.current===O)return;Nn.current="";const j=Ys();if(X(j.changes.length),Nr.current||Rr.current){Bn.current=O;return}const xt=window.setTimeout(()=>{if(at()){if(Nr.current||Rr.current){Bn.current=as();return}Ca(O)}},1500);return()=>window.clearTimeout(xt)},[r,a,le,s,re,an,as,_s,Ys,Cs,wt,ae,lt,It,Jr,Hr,Ca,Nr,Rr,Qe.authorityEpoch,at]),o.useEffect(()=>{if(!at()||!AP({cloudAuthConfigured:r,runtimeMode:a,workspaceCloudSyncEnabled:le,authSessionResolved:s,workspaceSyncPhase:re,workspaceSyncReferenceSnapshotsReady:an}))return;const O=window.setInterval(()=>{if(!at()||Nr.current||Rr.current||Lr())return;const j=as();if(!j||j===Kt.current||Nn.current===j)return;Nn.current="";const xt=Ys();X(xt.changes.length),xt.changes.length!==0&&Ca(j)},Yt);return()=>window.clearInterval(O)},[r,a,le,s,re,an,as,Ys,Ca,Lr,Yt,Qe.authorityEpoch,at]),o.useEffect(()=>{r&&a==="local"&&le||(kn(),xe(!1))},[r,a,le,kn]),o.useEffect(()=>{if(!at())return;const O=CP({cloudAuthConfigured:r,runtimeMode:a,workspaceCloudSyncEnabled:le,authSessionResolved:s,workspaceSyncPhase:re,lastPullAt:V,retryPending:Lr()});if(!O.shouldStart)return;O.shouldKickOffImmediately&&os.current();const j=window.setInterval(()=>{at()&&(vs(t,"pull",yt)||os.current())},yt);return()=>{window.clearInterval(j)}},[r,a,le,s,re,V,t,Lr,vs,yt,Qe.authorityEpoch,at]),o.useEffect(()=>{if(!at()||!_P({cloudAuthConfigured:r,runtimeMode:a,workspaceCloudSyncEnabled:le,authSessionResolved:s,isAuthenticated:i,workspaceSyncPhase:re}))return;const O=window.setInterval(()=>{at()&&(No.current||(No.current=!0,os.current({forceCursorNull:!0}).finally(()=>{No.current=!1})))},pP);return()=>window.clearInterval(O)},[r,a,le,s,i,re,Qe.authorityEpoch,at]),o.useEffect(()=>{a!=="local"||!i||!l||l==="anonymous"||Bt({preferCloudOnFirstSync:!0})},[a,i,l,Bt]),o.useEffect(()=>{if(a!=="local"||!i||!l||l==="anonymous"||!Vt.current.has(l)||Fr.current)return;const O=Ss(),j=JSON.stringify(O);if(!Dr.current){Dr.current=j;return}if(j===Dr.current)return;Dr.current=j,yo(l,new Date().toISOString());const xt=window.setTimeout(()=>{Bt({preferCloudOnFirstSync:!1})},350);return()=>window.clearTimeout(xt)},[a,i,l,Ss,yo,Bt]),o.useEffect(()=>{at()&&IP({cloudAuthConfigured:r,runtimeMode:a,workspaceCloudSyncEnabled:le,authSessionResolved:s,isAuthenticated:i,workspaceSyncPhase:re,alreadyRan:pn.current})&&(pn.current=!0,fetch("/api/taskforce/sync/workspace/repair-startup",{method:"POST",credentials:"include",headers:{"Content-Type":"application/json"},body:JSON.stringify({workspaceId:t})}).then(async O=>{if(!O.ok)return;const j=await O.json().catch(()=>({}));j?.applied>0&&(Ns("startup_repair_applied",{workspaceId:t,applied:j.applied,skipped:j.skipped,failed:j.failed}),qn(),Fa(),Gr(),oa())}).catch(()=>{}))},[r,a,le,s,i,re,t,qn,Fa,Gr,oa,Qe.authorityEpoch,at]);const Ua=da&&J.phase==="ready"&&J.snapshot?.state.activeWorkspaceId===t?{coordinatorGeneration:J.snapshot.state.coordinatorGeneration,localDataVersion:J.snapshot.state.localDataVersion}:null,fa=da?{phase:J.phase,snapshot:J.snapshot,errorMessage:J.error?.message||null}:null,Jo=o.useCallback(async O=>{if(a!=="local"||!da)return!1;if(J.phase!=="ready"||!J.snapshot)throw new Ya("The local sync coordinator is not ready to switch workspaces.","SYNC_COORDINATOR_UNAVAILABLE",409);return await J.switchWorkspace(O),!0},[J,da,a]),ol=o.useCallback(async O=>{if(a!=="local"||!da)return!1;if(J.phase!=="ready"||!J.snapshot)throw new Ya("The local sync coordinator is not ready to transfer ownership.","SYNC_COORDINATOR_UNAVAILABLE",409);return await J.transferOwnership(O),O==="server"&&(await J.issueCommand(le?"EnableSync":"DisableSync"),le&&J.issueCommand("Sync").catch(()=>{})),!0},[J,da,a,le]);return{userGlobalSyncStatus:ve,setUserGlobalSyncStatus:Pe,userGlobalSyncError:Le,setUserGlobalSyncError:se,workspaceLastPullAt:V,workspaceLastPushAt:z,workspaceLastErrorAt:ke,workspaceLastErrorMessage:we,workspaceLastSuccessfulSyncAt:sa,workspaceCloudSyncEnabled:le,workspaceSyncPhase:re,workspaceSyncSetupIntent:He,workspaceSyncStatus:Cn,workspaceSyncSummary:gi,workspaceSyncRecommendedAction:ba,workspaceSyncBusy:pe,workspaceSyncPendingChanges:N+(Ae?.activeDepth||0),workspaceTaskRelationships:qe,localCoordinatorDataVersion:Ua,localCoordinatorStatus:fa,switchLocalCoordinatorWorkspace:Jo,transferLocalCoordinatorOwnership:ol,syncInFlightRef:Nt,workspaceRetryAt:Ft,isWorkspaceRetryPending:Lr,workspacePushInFlightRef:Nr,workspacePullInFlightRef:Rr,workspaceLastPushedSignatureRef:Kt,workspacePendingSignatureRef:Bn,workspaceLastPushedTaskIdsRef:Xn,workspaceDeletedTaskIdsRef:va,workspaceDeletedTaskWatermarksRef:Cr,workspacePullCursorRef:cn,clearWorkspaceRetry:kn,persistWorkspaceSyncPatch:ea,loadWorkspaceSyncState:Zo,applyWorkspaceSyncStateSnapshot:Qa,syncUserGlobalSettings:Bt,buildWorkspaceSyncSignature:as,pushWorkspaceChangesToCloud:Ca,pullWorkspaceChangesFromCloud:ss,saveWorkspaceCloudSyncSettings:Ic,retryUserGlobalSettingsSync:al,retryWorkspaceCloudSync:Zr,resetWorkspaceSyncCursorAndPull:sl,getWorkspaceSyncDiagnostics:ja}}function QE(e,t){return typeof t=="number"&&Number.isFinite(t)&&t>0?t:e==="error"?12e3:2600}function XE(){const[e,t]=o.useState(null),r=o.useRef(null),a=o.useCallback(()=>{r.current!==null&&(window.clearTimeout(r.current),r.current=null),t(null)},[]),s=o.useCallback((i,l="info",c,d)=>{if(!i||(r.current!==null&&(window.clearTimeout(r.current),r.current=null),t({message:i,tone:l,ttlMs:c,actionLabel:d?.label,onAction:d?.onAction,ownerKey:d?.ownerKey}),d))return;const f=QE(l,c);r.current=window.setTimeout(()=>{r.current=null,t(null)},f)},[]);return o.useEffect(()=>()=>{r.current!==null&&(window.clearTimeout(r.current),r.current=null)},[]),{uiNotice:e,pushNotice:s,clearNotice:a}}function eN(e){const{resolveCloudAuthUrl:t,currentWorkspaceId:r,normalizedCloudAuthBaseUrl:a,normalizedCloudMcpBaseUrl:s,mergedConfig:i,availableWorkspaces:l,currentTheme:c,configLoaded:d,globalTheme:f,themeUseGlobalDefault:p,keyShortcut:g,jsonBackupEnabled:h,globalJsonBackupEnabled:y,globalWeekStartsOn:k,locale:v,supportedLocales:C,jsonBackupUseGlobalDefault:S,manualComplexityEnabled:w,checklistDropdownEnabled:_,showTaskCardStatusLabel:M,pathSaved:R,settingsSection:P,setupState:b,buildInfo:$,saveSetupMode:I,saveWorkspaceProfile:E,setCurrentTheme:K,handleSaveTheme:U,handleSaveGlobalTheme:L,setKeyShortcut:D,handleJsonBackupEnabledChange:ie,handleSaveGlobalJsonBackupEnabled:H,handleSaveGlobalWeekStartsOn:be,handleSaveLocale:Z,handleManualComplexityEnabledChange:me,handleChecklistDropdownEnabledChange:Ve,handleShowTaskCardStatusLabelChange:Re,handleResetProjectToGlobal:je,handleSaveSettings:ye,initiativeTemplates:ue,fetchInitiativeTemplates:ve,createInitiativeFromTemplate:Pe,setShowFolderBrowser:Le,setBrowserTarget:se,fetchFolders:V,activeCategories:W,pathValidation:z,taxonomyDisplayLabels:fe,handleUpdateCategory:ke,handleRemoveCategory:Y,handleSaveCategory:we,handleAddPath:q,handleRemovePath:le,handleUpdateCategoryIcon:$e,handleUpdateCategoryColor:re,activeTypes:de,handleSaveType:He,handleRemoveType:ce,handleUpdateType:pe,taxonomies:xe,handleUpdateTaxonomies:N,priorities:X,handleUpdatePriorities:Ae,analyzeSystemTaxonomyPack:Te,handleApplySystemTaxonomyPack:he,handleUpdateTaxonomyDisplayLabels:ot,projectRoot:We,projectName:Xe,mcpHostRoot:ae,serverHostRoot:G,mcpScriptPath:Ie,tenantId:Fe,runtimeMode:it,workspaceSwitchingEnabled:Me,deleteWorkspace:qe,setMcpHostRoot:ge,isAuthenticated:_e}=e,Be=o.useCallback(async(Ce,ut)=>{const mt=t(Ce),Ue=new Headers(ut?.headers||void 0);if(Ce.startsWith("/api/taskforce/settings/mcp/")){const kt=String(r||"").trim();kt&&kt!=="default"&&!Ue.has("x-taskforce-workspace-id")&&Ue.set("x-taskforce-workspace-id",kt)}const wt={...ut,headers:Ue,credentials:ut?.credentials??"include"};if(typeof window<"u"&&/^https?:\/\//i.test(mt))try{new URL(mt,window.location.origin).origin!==window.location.origin&&wt.mode===void 0&&(wt.mode="cors")}catch{}return fetch(mt,wt)},[r,t]),Ge=o.useCallback(async()=>{const Ce=new Headers,ut=String(r||"").trim();ut&&ut!=="default"&&Ce.set("x-taskforce-workspace-id",ut);const mt=await fetch("/api/taskforce/mcp/global-cli-health",{method:"POST",headers:Ce,credentials:"include"}),Ue=await mt.json().catch(()=>({}));if(!mt.ok||!Ue?.result)throw new Error(String(Ue?.error||"Unable to validate the global Taskforce CLI."));return Ue.result},[r]),F=o.useCallback(async()=>{const Ce=await fetch("/api/taskforce/update/status",{method:"GET",credentials:"include"}),ut=await Ce.json().catch(()=>({}));if(!Ce.ok||!ut?.result)throw new Error(String(ut?.error||"Unable to determine Taskforce update availability."));return ut.result},[]),Ne=l.find(Ce=>Ce.id===r);return{fetchCloudAuthApi:Be,checkLocalMcpCliHealth:Ge,getLocalUpdateStatus:F,currentTheme:c,configLoaded:d,globalTheme:f,themeUseGlobalDefault:p,keyShortcut:g,jsonBackupEnabled:h,globalJsonBackupEnabled:y,globalWeekStartsOn:k,locale:v,supportedLocales:C,jsonBackupUseGlobalDefault:S,manualComplexityEnabled:w,checklistDropdownEnabled:_,showTaskCardStatusLabel:M,pathSaved:R,initialSection:P,setupState:b,buildInfo:$,onSaveSetupMode:I,onSaveWorkspaceProfile:E,onThemeChange:K,onSaveTheme:U,onSaveGlobalTheme:L,onKeyShortcutChange:D,onJsonBackupEnabledChange:ie,onSaveGlobalJsonBackupEnabled:H,onSaveGlobalWeekStartsOn:be,onSaveLocale:Z,onManualComplexityEnabledChange:me,onChecklistDropdownEnabledChange:Ve,onShowTaskCardStatusLabelChange:Re,onResetProjectToGlobal:je,onSaveSettings:ye,initiativeTemplates:ue,onRefreshInitiativeTemplates:ve,onCreateInitiativeFromTemplate:Pe,onShowFolderBrowserChange:Le,onBrowserTargetChange:se,onFetchFolders:V,categories:W,pathValidation:z,taxonomyDisplayLabels:fe,onUpdateCategory:ke,onRemoveCategory:Y,onSaveCategory:we,onAddPath:q,onRemovePath:le,onUpdateCategoryIcon:$e,onUpdateCategoryColor:re,types:de,onSaveType:He,onRemoveType:ce,onUpdateType:pe,taxonomies:xe,onUpdateTaxonomies:N,priorities:X,onUpdatePriorities:Ae,onAnalyzeSystemTaxonomyPack:Te,onApplySystemTaxonomyPack:he,onUpdateTaxonomyDisplayLabels:ot,projectRoot:We,projectName:Xe,mcpHostRoot:ae,serverHostRoot:G,mcpScriptPath:Ie,tenantId:Fe,workspaceId:r,runtimeMode:it,cloudAuthBaseUrl:a||i.cloudAuthBaseUrl,cloudMcpBaseUrl:s||void 0,workspaceSwitchingEnabled:Me,currentWorkspaceRole:Ne?.role||"member",currentWorkspaceName:String(Ne?.name||""),onDeleteWorkspace:qe,onMcpHostRootChange:ge,isAuthenticated:_e}}function tN(e){const{keyShortcut:t,themeUseGlobalDefault:r,runtimeMode:a,jsonBackupUseGlobalDefault:s,globalTheme:i,globalJsonBackupEnabled:l,setCurrentTheme:c,setThemeUseGlobalDefault:d,setGlobalTheme:f,setJsonBackupEnabled:p,setJsonBackupUseGlobalDefault:g,setGlobalJsonBackupEnabled:h,setGlobalWeekStartsOn:y,setLocale:k,setManualComplexityEnabled:v,setChecklistDropdownEnabled:C,setShowTaskCardStatusLabel:S}=e,w=o.useCallback(async()=>{try{const L=await fetch("/api/taskforce/global-settings",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({shortcut:t})});if(!L.ok)throw new Error(`Failed to save global settings (${L.status})`);return!0}catch{return console.error("[Taskforce] Failed to save shortcut"),!1}},[t]),_=o.useCallback(async L=>{c(L),d(!1);try{const D=await fetch("/api/taskforce/config",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({theme:L})});if(!D.ok)throw new Error(`Failed to save config (${D.status})`);return!0}catch{return console.error("[Taskforce] Failed to save project theme"),!1}},[c,d]),M=o.useCallback(async L=>{f(L),r&&c(L);try{const D=await fetch("/api/taskforce/global-settings",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({theme:L})});if(!D.ok)throw new Error(`Failed to save global settings (${D.status})`);return!0}catch{return console.error("[Taskforce] Failed to save global theme"),!1}},[f,r,c]),R=o.useCallback(async L=>{if(a==="cloud")return p(!1),g(!1),!1;p(L),g(!1);try{const D=await fetch("/api/taskforce/config",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({jsonBackupEnabled:L})});if(!D.ok)throw new Error(`Failed to save config (${D.status})`);return!0}catch{return console.error("[Taskforce] Failed to save project backup setting"),!1}},[a,p,g]),P=o.useCallback(async L=>{if(a==="cloud")return h(!1),s&&p(!1),!1;h(L),s&&p(L);try{const D=await fetch("/api/taskforce/global-settings",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({jsonBackupEnabled:L})});if(!D.ok)throw new Error(`Failed to save global settings (${D.status})`);return!0}catch{return console.error("[Taskforce] Failed to save global backup setting"),!1}},[a,h,s,p]),b=o.useCallback(async L=>{y(L);try{const D=await fetch("/api/taskforce/global-settings",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({schedulePreferences:{weekStartsOn:L}})});if(!D.ok)throw new Error(`Failed to save global settings (${D.status})`);return!0}catch{return console.error("[Taskforce] Failed to save regional week start setting"),!1}},[y]),$=o.useCallback(async L=>{const D=mA(L);return k(D),!0},[k]),I=o.useCallback(async L=>{v(L);try{const D=await fetch("/api/taskforce/config",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({manualComplexityEnabled:L})});if(!D.ok)throw new Error(`Failed to save config (${D.status})`);return!0}catch{return console.error("[Taskforce] Failed to save manual complexity setting"),!1}},[v]),E=o.useCallback(async L=>{C(L);try{const D=await fetch("/api/taskforce/config",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({checklistDropdownEnabled:L})});if(!D.ok)throw new Error(`Failed to save config (${D.status})`);return!0}catch{return console.error("[Taskforce] Failed to save checklist dropdown setting"),!1}},[C]),K=o.useCallback(async L=>{S(L);try{const D=await fetch("/api/taskforce/config",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({showTaskCardStatusLabel:L})});if(!D.ok)throw new Error(`Failed to save config (${D.status})`);return!0}catch{return console.error("[Taskforce] Failed to save task card status label setting"),!1}},[S]),U=o.useCallback(async()=>{d(!0),g(!0),c(i),p(l),v(!1),C(!0),S(!1);try{const L=await fetch("/api/taskforce/config",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({theme:null,jsonBackupEnabled:null,manualComplexityEnabled:null,checklistDropdownEnabled:null,showTaskCardStatusLabel:null})});if(!L.ok)throw new Error(`Failed to save config (${L.status})`);return!0}catch{return console.error("[Taskforce] Failed to reset project settings"),!1}},[d,g,c,i,p,l,v,C,S]);return{handleSaveSettings:w,handleSaveTheme:_,handleSaveGlobalTheme:M,handleJsonBackupEnabledChange:R,handleSaveGlobalJsonBackupEnabled:P,handleSaveGlobalWeekStartsOn:b,handleSaveLocale:$,handleManualComplexityEnabledChange:I,handleChecklistDropdownEnabledChange:E,handleShowTaskCardStatusLabelChange:K,handleResetProjectToGlobal:U}}function rN(e){const{activeCategories:t,activeTab:r,activeTypes:a,archivedTasks:s,browserTarget:i,category:l,configLoaded:c,customCategories:d,refreshTaskCollections:f,fetchTasks:p,filterCategories:g,getCategoryPaths:h,normalizePath:y,pathValidation:k,setBrowserTarget:v,setCategory:C,setCustomCategories:S,setCustomTypes:w,setFilterCategories:_,setPathValidation:M,setPriorities:R,setShowFolderBrowser:P,setTaxonomies:b,tasks:$}=e,I=o.useCallback(async(se,V)=>{const W=await se.json().catch(()=>({}));return String(W?.error||V)},[]),E=o.useCallback(()=>[...$,...s],[s,$]),K=o.useCallback(se=>se.priorities.find(V=>V.value===2)?.value||se.priorities[0]?.value||2,[]),U=o.useCallback(async se=>{if(se.length!==0)try{const V=await fetch("/api/taskforce/validate-paths",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({paths:se})});if(V.ok){const W=await V.json();M(z=>({...z,...W.results}))}}catch(V){console.error("[Taskforce] Failed to validate paths:",V)}},[M]);o.useEffect(()=>{if(r!=="settings"||!c)return;const se=[];t.forEach(W=>{h(W).forEach(fe=>{se.includes(fe)||se.push(fe)})});const V=se.filter(W=>!k[W]);V.length>0&&U(V)},[t,r,c,h,k,U]);const L=o.useCallback(async(se,V)=>{if(c){S(W=>(W.length>0?W:t).map(fe=>fe.value===se.value?se:fe)),V&&V!==se.label&&(l===V&&C(se.label),g.includes(V)&&_(W=>W.map(z=>z===V?se.label:z)));try{const fe={categories:(d.length>0?d:t).map(ke=>ke.value===se.value?se:ke)};V&&V!==se.label&&(fe.reassignFrom=V,fe.reassignTo=se.label),await fetch("/api/taskforce/categories",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify(fe)}),V&&await p()}catch(W){console.error("[Taskforce] Failed to update category",W)}}},[t,l,c,d,p,g,C,S,_]),D=o.useCallback(async se=>{if(!c)return;const V=se.trim().toLowerCase().replace(/\s+/g,"-");if(t.some(z=>z.value===V))return;const W={value:V,label:se.trim(),color:"blue-200",icon:"Folder"};S(z=>[...z.length>0?z:t,W]);try{const fe=[...d.length>0?d:t,W];await fetch("/api/taskforce/categories",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({categories:fe})})}catch(z){console.error("[Taskforce] Failed to create category",z)}},[t,c,d,S]),ie=o.useCallback((se,V)=>{if(!V.trim())return;const W=t.find(Y=>Y.value===se);if(!W)return;const z=h(W),fe=V.trim();if(z.includes(fe))return;const ke=[...z,fe];L({...W,path:void 0,paths:ke}),U(ke)},[t,h,L,U]),H=o.useCallback((se,V)=>{const W=t.find(z=>z.value===se);W&&L({...W,icon:V})},[t,L]),be=o.useCallback((se,V)=>{const W=t.find(z=>z.value===se);W&&L({...W,color:V})},[t,L]),Z=o.useCallback((se,V)=>{const W=t.find(ke=>ke.value===se);if(!W)return;const fe=h(W).filter(ke=>ke!==V);L({...W,path:void 0,paths:fe})},[t,h,L]),me=o.useCallback(se=>{const V=y(se);if(i&&typeof i=="object"&&i.type==="category"){const W=t.find(z=>z.value===i.value);if(W){const z=h(W);if(!z.includes(V)){const fe=[...z,V];L({...W,path:void 0,paths:fe})}}}P(!1),v(null)},[t,i,h,L,y,v,P]),Ve=o.useCallback(async se=>{if(!c)return;const V=bu,W=t.find(Y=>Y.value===V),z=W?{...W}:{value:V,label:ug,icon:"Inbox"},fe=z.label,ke=t.find(Y=>Y.value===se);S(Y=>{let q=(Y.length>0?Y:t).filter(le=>le.value!==se);return q.some(le=>le.value===V)||(q=[z,...q]),q}),ke&&((l===ke.label||l===ke.value)&&C(V),(g.includes(ke.label)||g.includes(ke.value))&&_(Y=>{const we=Y.filter(q=>q!==ke.label&&q!==ke.value);return we.includes(V)?we:[...we,V]}));try{let Y=(d.length>0?d:t).filter(we=>we.value!==se);Y.some(we=>we.value===V)||(Y=[z,...Y]),await fetch("/api/taskforce/categories",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({categories:Y,reassignFrom:ke?.label||se,reassignTo:fe})}),await p()}catch(Y){console.error("[Taskforce] Failed to remove category",Y)}},[t,l,c,d,p,g,C,S,_]),Re=o.useCallback(async se=>{if(!se.trim())return;const V=se.trim().toLowerCase().replace(/\s+/g,"-");if(a.some(z=>z.value===V))return;const W=[...a,{value:V,label:se.trim(),status:"active"}];w(W);try{await fetch("/api/taskforce/types",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({types:W})})}catch(z){console.error("Failed to save type",z)}},[a,w]),je=o.useCallback(async se=>{const V=a.map(W=>W.value===se?{...W,status:"retired"}:W);w(V);try{await fetch("/api/taskforce/types",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({types:V})}),await p()}catch(W){console.error("Failed to save type",W)}},[a,p,w]),ye=o.useCallback(async(se,V)=>{const W=a.find(Y=>Y.value===se);if(!W)return;const z=typeof V.label=="string"?V.label.trim():W.label;if(!z)return;const fe=a.map(Y=>Y.value===se?{...Y,...V,label:z}:Y);if(JSON.stringify(fe)!==JSON.stringify(a)){w(fe);try{await fetch("/api/taskforce/types",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({types:fe})})}catch(Y){console.error("Failed to update type",Y)}}},[a,w]),ue=o.useCallback(async se=>{if(c){b(se);try{await fetch("/api/taskforce/taxonomies",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({taxonomies:se})})}catch(V){console.error("[Taskforce] Failed to save taxonomies",V)}}},[c,b]),ve=o.useCallback(async se=>{if(c){R(se);try{await fetch("/api/taskforce/priorities",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({priorities:se})})}catch(V){console.error("[Taskforce] Failed to save priorities",V)}}},[c,R]),Pe=o.useCallback(se=>{const V=E(),W=new Set(se.categories.map(q=>q.value)),z=new Set(se.types.map(q=>q.value)),fe=new Set(se.priorities.map(q=>Number(q.value))),ke=Array.from(new Set(V.map(q=>String(q.category||"").trim()).filter(q=>q.length>0&&!W.has(q)))).sort(),Y=Array.from(new Set(V.map(q=>String(q.type||"").trim()).filter(q=>q.length>0&&!z.has(q)))).sort(),we=Array.from(new Set(V.map(q=>Number(q.priority)).filter(q=>Number.isFinite(q)&&q>0&&!fe.has(q)))).sort((q,le)=>q-le);return{unmatchedCategoryValues:ke,unmatchedTypeValues:Y,incompatiblePriorityValues:we}},[E]),Le=o.useCallback(async se=>{if(!c)return{success:!1,error:"Settings are still loading."};const{pack:V,sections:W,remapExistingValuesToDefault:z,workspaceIdOverride:fe}=se,ke=String(fe||"").trim(),Y=ke.length>0,we=Y?[]:E(),q=$e=>{if(!ke)return $e;const re=$e.includes("?")?"&":"?";return`${$e}${re}workspaceId=${encodeURIComponent(ke)}`},le=()=>{const $e={"Content-Type":"application/json"};return ke&&($e["x-taskforce-workspace-id"]=ke),$e};try{const $e=await fetch(q("/api/taskforce/taxonomy-library/apply"),{method:"POST",headers:le(),body:JSON.stringify({packId:V.id,sections:W,remapExistingValuesToDefault:z})}),re=await $e.json().catch(()=>({}));if($e.ok&&re.taxonomyState)return Y||(W.categories&&re.taxonomyState.categories&&S(re.taxonomyState.categories),W.types&&re.taxonomyState.types&&w(re.taxonomyState.types),W.priorities&&re.taxonomyState.priorities&&R(re.taxonomyState.priorities),await f({isSilent:!0})),{success:!0};if(re.code!=="WORKSPACE_SYNC_V3_TAXONOMY_ACTIVATION_DISABLED")return{success:!1,error:re.error||"Failed to apply taxonomy library pack atomically."};if(W.categories){const de=new Set(V.categories.map(pe=>pe.value)),He=z?[...V.categories]:[...V.categories,...t.filter(pe=>!de.has(pe.value)).map(pe=>({...pe,disabled:!0}))];Y||S(He);const ce=await fetch(q("/api/taskforce/categories"),{method:"POST",headers:le(),body:JSON.stringify({categories:He})});if(!ce.ok)return{success:!1,error:await I(ce,"Failed to apply category library pack.")}}if(W.types){const de=new Set(V.types.map(xe=>xe.value)),He=V.types.find(xe=>xe.value===po)?.value||V.types[0]?.value||po;if(z){const xe=we.filter(N=>N.type&&!de.has(String(N.type))).map(N=>({id:N.id,type:He}));if(xe.length>0){const N=await fetch(q("/api/taskforce/bulk-update-fields"),{method:"POST",headers:le(),body:JSON.stringify({updates:xe})});if(!N.ok)return{success:!1,error:await I(N,"Failed to remap task types to the pack default.")}}}const ce=z?[...V.types]:[...V.types,...a.filter(xe=>!de.has(xe.value)).map(xe=>({...xe,status:"retired"}))];Y||w(ce);const pe=await fetch(q("/api/taskforce/types"),{method:"POST",headers:le(),body:JSON.stringify({types:ce})});if(!pe.ok)return{success:!1,error:await I(pe,"Failed to apply task type library pack.")}}if(W.priorities){const de=new Set(V.priorities.map(xe=>xe.value)),He=Array.from(new Set(we.map(xe=>Number(xe.priority)).filter(xe=>Number.isFinite(xe)&&xe>0&&!de.has(xe)))).sort((xe,N)=>xe-N);if(He.length>0&&!z)return{success:!1,error:`This workspace still uses priority levels ${He.join(", ")}. Enable "Remap unmatched existing values to default" to replace them before applying this pack.`};if(He.length>0){const xe=K(V),N=we.filter(X=>He.includes(Number(X.priority))).map(X=>({id:X.id,priority:xe}));if(N.length>0){const X=await fetch(q("/api/taskforce/bulk-update-fields"),{method:"POST",headers:le(),body:JSON.stringify({updates:N})});if(!X.ok)return{success:!1,error:await I(X,"Failed to remap task priorities to the pack default.")}}}const ce=V.priorities.map(xe=>({...xe,value:Number(xe.value)}));Y||R(ce);const pe=await fetch(q("/api/taskforce/priorities"),{method:"POST",headers:le(),body:JSON.stringify({priorities:ce})});if(!pe.ok)return{success:!1,error:await I(pe,"Failed to apply priority library pack.")}}return Y||await f({isSilent:!0}),{success:!0}}catch($e){return console.error("[Taskforce] Failed to apply system taxonomy pack",$e),{success:!1,error:$e instanceof Error?$e.message:"Failed to apply system taxonomy pack."}}},[t,a,c,E,K,I,f,S,w,R]);return{getCategoryPaths:h,validatePaths:U,handleUpdateCategory:L,handleSaveCategory:D,handleAddPath:ie,handleUpdateCategoryIcon:H,handleUpdateCategoryColor:be,handleRemovePath:Z,handleSelectPath:me,handleRemoveCategory:Ve,handleSaveType:Re,handleRemoveType:je,handleUpdateType:ye,handleUpdateTaxonomies:ue,handleUpdatePriorities:ve,analyzeSystemTaxonomyPack:Pe,handleApplySystemTaxonomyPack:Le}}function nN({shouldDeferProtectedApiCalls:e,shouldBlockProtectedApiCalls:t}){const[r,a]=o.useState([]),s=e||t,i=o.useCallback(async()=>{if(s)return[];try{const l=await fetch("/api/taskforce/initiative-templates");if(!l.ok)return[];const c=await l.json(),d=Array.isArray(c?.templates)?c.templates:[];return a(d),d}catch{return[]}},[s]);return{initiativeTemplates:r,fetchInitiativeTemplates:i}}function aN(){const[e,t]=o.useState(!1),r=o.useCallback(async()=>{if(!document.fullscreenElement){try{await document.documentElement.requestFullscreen(),t(!0)}catch(a){console.error(`Error attempting to enable full-screen mode: ${a}`)}return}document.exitFullscreen&&(await document.exitFullscreen(),t(!1))},[]);return o.useEffect(()=>{const a=()=>{t(!!document.fullscreenElement)};return document.addEventListener("fullscreenchange",a),()=>document.removeEventListener("fullscreenchange",a)},[]),{zenMode:e,setZenModeState:t,toggleZenMode:r}}function sN({tasks:e,archivedTasks:t,setTasks:r,setArchivedTasks:a,setLoadingTasks:s,getCurrentWorkspaceId:i,workspaceResetKey:l,shouldDeferProtectedApiCalls:c,shouldBlockProtectedApiCalls:d,handleUnauthorized:f,authRequiredForApi:p}){const g=o.useRef(new Map),h=o.useRef(!1),y=o.useRef(e),k=o.useRef(t),v=o.useRef(null),C=o.useRef(null);o.useEffect(()=>{y.current=e},[e]),o.useEffect(()=>{k.current=t},[t]);const S=o.useCallback(U=>_f(U),[]),w=o.useCallback((U,L)=>L.aborted?U===L.reason?!0:U instanceof DOMException?U.name==="AbortError":String(U?.name||"").toLowerCase()==="aborterror":!1,[]),[_,M]=o.useState([]),R=o.useRef(new Map),P=o.useCallback(U=>{!U.length||typeof window>"u"||(M(L=>Array.from(new Set([...L,...U]))),U.forEach(L=>{const D=R.current.get(L);D&&window.clearTimeout(D);const ie=window.setTimeout(()=>{R.current.delete(L),M(H=>H.filter(be=>be!==L))},2e3);R.current.set(L,ie)}))},[]);o.useEffect(()=>()=>{typeof window>"u"||(R.current.forEach(U=>window.clearTimeout(U)),R.current.clear())},[]),o.useEffect(()=>{g.current=new Map,h.current=!1,v.current?.abort("workspace-reset"),v.current=null,C.current?.abort("workspace-reset"),C.current=null,typeof window<"u"&&(R.current.forEach(U=>window.clearTimeout(U)),R.current.clear()),M([])},[l]);const b=o.useCallback(async(U=!1,L)=>{if(!(L?.ignoreAuthGuard===!0)&&(c||d))return;s(!U);const ie=String(i()||"").trim();v.current?.abort("superseded");const H=new AbortController;v.current=H;try{const be=await fetch("/api/taskforce/tasks",{signal:H.signal});if(be.status===401){f(),r([]),U||s(!1);return}if(be.ok){const me=((await be.json()).tasks||[]).map(Pe=>xo(Pe));if(String(i()||"").trim()!==ie)return;const Re=new Map,je=[],ye=L?.highlightChangedTaskIds===void 0?null:new Set(L.highlightChangedTaskIds.map(Pe=>g0(me,Pe)||Pe));for(const Pe of me){const Le=S(Pe);if(Re.set(Pe.id,Le),!h.current)continue;const se=g.current.get(Pe.id);(!se||se!==Le)&&(ye===null||ye.has(Pe.id))&&je.push(Pe.id)}g.current=Re,h.current?P(je):h.current=!0;const ue=y.current,ve=Vw(ue,me);y.current=ve,ve!==ue&&r(ve)}}catch(be){if(w(be,H.signal))return;console.error("[Taskforce] Failed to fetch tasks:",be)}finally{v.current===H&&(v.current=null,s(!1))}},[S,i,P,f,r,s,p,c,d]),$=o.useCallback(async(U=!1,L)=>{if(!(L?.ignoreAuthGuard===!0)&&(c||d))return!1;U||s(!0);const ie=String(i()||"").trim();C.current?.abort("superseded");const H=new AbortController;C.current=H;try{const be=await fetch("/api/taskforce/archive",{signal:H.signal});if(be.ok){const Z=await be.json();if(String(i()||"").trim()!==ie)return!1;const Ve=(Z.archived||[]).map(ye=>({...xo(ye),isArchived:!0})),Re=k.current,je=Vw(Re,Ve);return k.current=je,je!==Re&&a(je),!0}return!1}catch(be){return w(be,H.signal)||console.error("[Taskforce] Failed to fetch archive:",be),!1}finally{C.current===H&&(C.current=null,U||s(!1))}},[i,w,a,s,c,d]),I=o.useCallback(async U=>{const L=U?.isSilent!==!1,D=U?.ignoreAuthGuard===!0,ie=U?.includeActive!==!1,H=U?.includeArchive!==!1;await Promise.all([ie?b(L,{ignoreAuthGuard:D,highlightChangedTaskIds:U?.highlightChangedTaskIds}):Promise.resolve(!1),H?$(L,{ignoreAuthGuard:D}):Promise.resolve(!1)])},[$,b]),E=o.useCallback(async U=>{await I({isSilent:!0,includeActive:U?.includeActive!==!1,includeArchive:U?.includeArchive!==!1,highlightChangedTaskIds:U?.highlightChangedTaskIds})},[I]),K=o.useCallback(U=>{const L=b0(U,y.current,k.current),D=L.tasks!==y.current,ie=L.archivedTasks!==k.current;y.current=L.tasks,k.current=L.archivedTasks,D&&r(L.tasks),ie&&a(L.archivedTasks)},[r,a]);return{tasksRef:y,archivedTasksRef:k,recentlyChangedTaskIds:_,markRecentlyChangedTasks:P,fetchTasks:b,fetchArchive:$,refreshTaskCollections:I,refreshTaskCollectionsFromInvalidation:E,mergeTaskFromServer:K,getTaskRevisionKey:S}}function oN(e){const{editingTaskId:t,relationshipTasks:r,initiatives:a=[],workstreams:s=[],workstreamInput:i="",resolveWorkstreamIdInput:l,supplementalTasks:c=[],assignee:d,setAssignee:f,setChecklistItems:p,setComments:g}=e,h=o.useRef(null),y=o.useMemo(()=>{if(c.length===0)return r;const S=new Map;return r.forEach(w=>S.set(w.id,w)),c.forEach(w=>S.set(w.id,w)),Array.from(S.values())},[r,c]),k=o.useMemo(()=>{if(t)return y.find(S=>S.id===t)},[y,t]);o.useEffect(()=>{t&&(p(k?.checklistItems||[]),g(k?.comments||[]))},[t,k?.id,k?.updatedAt,k?.checklistItems,k?.comments,p,g]),o.useEffect(()=>{if(!t||!k){h.current=null;return}const S=k.assignee||"unassigned",w=h.current;if(!w||w.taskId!==t){h.current={taskId:t,assignee:S},d!==S&&f(S);return}w.assignee!==S&&(d===w.assignee&&f(S),h.current={taskId:t,assignee:S})},[d,k?.assignee,k?.id,t,f]);const v=o.useMemo(()=>{if(k?.workstreamId)return s.find(S=>S.id===k.workstreamId);if(!(t||!i.trim()))return l?.(i)||void 0},[k,t,l,i,s]),C=o.useMemo(()=>{if(v?.initiativeId)return a.find(S=>S.id===v.initiativeId)},[v,a]);return{currentTask:k,currentTaskWorkstream:v,currentTaskInitiative:C}}const Nv="WS-",jv="IN-";function Io(e){return Cu(Nv,e)}function _C(e){return pg(Nv,e)}function xu(e){return Of(Nv,e)}function fs(e){return Cu(jv,e)}function iN(e){return pg(jv,e)}function IC(e){return Of(jv,e)}function Mk(e,t){const r=String(t||"").trim();if(!r)return null;const a=iN(r);return e.find(s=>s.id===r||fs(s)===r||a!==null&&s.referenceNumber===a)||null}function cN(e){const t={};return e.forEach(r=>{const a=r.defaultValue;if(a!=null){if(Array.isArray(a)){a.length>0&&(t[r.id]=a.map(s=>typeof s=="number"?s:String(s)));return}t[r.id]=typeof a=="number"?a:String(a)}}),t}function lN(e,t){return e.filter(r=>{const a=t[r.id],s=Array.isArray(a)?a.length>0:a!=null&&a!=="";return r.status==="retired"&&!s?!1:r.formEnabled!==!1||r.isRequired===!0||s})}function dN(e){const{activeCategories:t,activeTypes:r,activeTab:a,attachments:s,checklistItems:i,comments:l,description:c,editingTaskId:d,flushPendingAutoSave:f,getDescriptionDraft:p,getPreferredCategoryValue:g,getTitleDraft:h,lastUsedCategory:y,newCommentText:k,relationshipTasks:v,workstreams:C,showArchive:S,taxonomies:w,setActiveTab:_,setAssignee:M,setAttachments:R,setAttachmentsDirty:P,setCategory:b,setChecklistItems:$,setComments:I,setComplexity:E,setDescription:K,setDueDate:U,setEditingTaskId:L,setError:D,setFormTaxonomies:ie,setIsOpen:H,setNewCommentText:be,setPendingNavigation:Z,setWorkstreamInput:me,setPriority:Ve,setScheduledDate:Re,setShowArchive:je,setStatus:ye,setTaskReturnTrail:ue,setTitle:ve,setType:Pe,setUnsavedModalOpen:Le,taskReturnTrail:se,title:V}=e,W=o.useCallback(()=>r.find(de=>String(de.value||"").trim().length>0)?.value||po,[r]),z=o.useCallback(async de=>{if(d){await f()&&de();return}if(!((h?.()??V).trim()!==""||(p?.()??c).trim()!==""||i.length>0||k.trim()!==""||l.length>0||s.length>0)){de();return}Z(()=>de),Le(!0)},[s,l.length,c,d,f,p,h,i,k,Z,Le,V]),fe=o.useCallback(()=>{H(!1)},[H]),ke=o.useCallback(()=>{L(null),ve(""),K("");const de=y,He=t.some(ce=>ce.label===de||ce.value===de);if(de&&He){const ce=t.find(pe=>pe.label===de||pe.value===de);b(ce?.value||de)}else b(g(t));Pe(W()),Ve(2),E(3),ye("task"),M("unassigned"),Re(""),U(""),me(""),$([]),ie(cN(w)),I([]),be(""),R([]),P(!1),D("")},[t,g,W,y,M,R,P,b,$,I,E,K,U,L,D,ie,be,Ve,Re,ye,ve,Pe,w]),Y=o.useCallback(de=>{const He=de.trim();if(!He)return null;const ce=fg(He);if(ce){const N=v.find(X=>X.referenceNumber===ce);if(N)return N}const pe=v.find(N=>N.id===He);if(pe)return pe;const xe=v.find(N=>hs(N)===He);return xe||null},[v]),we=o.useCallback(de=>{const He=de.trim();if(!He)return null;const ce=He.toLowerCase(),pe=_C(He);if(pe){const X=C.find(Ae=>Ae.referenceNumber===pe);if(X)return X}const xe=C.find(X=>X.id===He);if(xe)return xe;const N=C.find(X=>X.title.trim().toLowerCase()===ce);return N||null},[C]),q=o.useCallback((de,He)=>{He?.preserveReturnTrail||ue([]),L(de.id),ve(de.title),K(de.description||""),b(de.category||g(t)),Pe(de.type||W()),Ve(typeof de.priority=="number"?de.priority:2),E(typeof de.complexity=="number"?de.complexity:3),ye(de.status||"task"),M(de.assignee||"unassigned"),Re(de.scheduledDate||""),U(de.dueDate||"");const ce=de.workstreamId&&C.find(pe=>pe.id===de.workstreamId)||null;me(ce?Io(ce)||ce.id:""),$(de.checklistItems||[]),I(de.comments||[]),ie(de.taxonomies||{}),R(de.attachments||[]),P(!1),_("add")},[t,g,W,_,M,R,P,b,$,I,E,K,U,L,ie,Ve,Re,ye,ue,ve,Pe,C]),le=o.useCallback(de=>{const He=v.find(ce=>ce.id===de);He&&(a==="add"&&d&&d!==He.id&&ue(ce=>ce[ce.length-1]===d?ce:[...ce,d]),He.isArchived&&!S&&je(!0),q(He,{preserveReturnTrail:!0}))},[a,d,q,v,je,ue,S]),$e=o.useCallback(()=>{if(a!=="add"||!d||se.length===0)return!1;const de=[...se];for(;de.length>0;){const He=de.pop();if(!He)continue;const ce=v.find(pe=>pe.id===He);if(ce)return ce.isArchived&&!S&&je(!0),ue(de),q(ce,{preserveReturnTrail:!0}),!0}return ue([]),!1},[a,d,q,v,je,ue,S,se]),re=o.useCallback(()=>{ue([])},[ue]);return{handleNavigation:z,handleClose:fe,resetForm:ke,resolveTaskIdInput:Y,resolveWorkstreamIdInput:we,handleEdit:q,handleOpenTaskById:le,returnToPreviousTask:$e,clearReturnToParentTask:re}}function uN(e){return e.map(t=>({...t}))}function pN(e){return e.map(t=>({...t}))}function fN(e){return e.map(t=>({...t}))}const mN={id:"software-development",label:"Software Development",description:"A software-oriented starter pack with developer-focused work types and a 4-level priority scale.",isDefaultStarter:!0,categories:[{value:"default",label:"General",icon:"Inbox"},{value:"product",label:"Product",icon:"Layers",color:"blue-500"},{value:"ui-ux",label:"UI/UX",icon:"Palette",color:"violet-500"},{value:"backend",label:"Backend",icon:"Server",color:"emerald-500"}],types:[{value:"feature",label:"Feature",icon:"Star",color:"teal-500",status:"active"},{value:"bug",label:"Bug",icon:"Bug",color:"red-500",status:"active"},{value:"chore",label:"Chore",icon:"Zap",color:"amber-500",status:"active"},{value:"refactor",label:"Refactor",icon:"Code",color:"blue-500",status:"active"},{value:"documentation",label:"Docs",icon:"Book",color:"sky-500",status:"active"}],priorities:[{value:1,label:"Low",color:"amber-200",icon:"ArrowDown"},{value:2,label:"Medium",color:"yellow-500",icon:"Minus"},{value:3,label:"High",color:"orange-500",icon:"ArrowUp"},{value:4,label:"Critical",color:"red-500",icon:"AlertTriangle"}]},hN=[{id:"general",label:"General",description:"A neutral starter pack for broad project and AI collaboration workflows.",categories:[{value:bu,label:ug,icon:"Inbox"}],types:[{value:"task",label:"Task",icon:"CheckSquare",color:"blue-500",status:"active"},{value:"deliverable",label:"Deliverable",icon:"Package",color:"teal-500",status:"active"},{value:"issue",label:"Issue",icon:"AlertCircle",color:"red-500",status:"active"},{value:"idea",label:"Idea",icon:"Lightbulb",color:"amber-500",status:"active"},{value:"review",label:"Review",icon:"Search",color:"violet-500",status:"active"}],priorities:[{value:1,label:"Low",color:"teal-500",icon:"ArrowDown"},{value:2,label:"Medium",color:"blue-500",icon:"Minus"},{value:3,label:"High",color:"amber-500",icon:"ArrowUp"}]},mN];function TC(){return hN.map(e=>({...e,categories:uN(e.categories),types:pN(e.types),priorities:fN(e.priorities)}))}const gN={"red-200":"#eb7a7a","orange-200":"#eba87a","amber-200":"#ebc17a","yellow-200":"#ebd07a","green-200":"#7aeba4","teal-200":"#7aebdf","sky-200":"#7ac8eb","blue-200":"#7aa5eb","indigo-200":"#7a7ceb","violet-200":"#9c7aeb","red-500":"#e42525","orange-500":"#e47325","amber-500":"#e49d25","yellow-500":"#e4b625","green-500":"#25e46b","teal-500":"#25e4cf","sky-500":"#25a9e4","blue-500":"#256ee4","indigo-500":"#2529e4","violet-500":"#5f25e4","red-700":"#951818","orange-700":"#954b18","amber-700":"#956718","yellow-700":"#957718","green-700":"#189546","teal-700":"#189587","sky-700":"#186e95","blue-700":"#184895","indigo-700":"#181b95","violet-700":"#3e1895"},xX=["red-200","orange-200","amber-200","yellow-200","green-200","teal-200","sky-200","blue-200","indigo-200","violet-200","red-500","orange-500","amber-500","yellow-500","green-500","teal-500","sky-500","blue-500","indigo-500","violet-500","red-700","orange-700","amber-700","yellow-700","green-700","teal-700","sky-700","blue-700","indigo-700","violet-700"];function Jn(e){if(e)return gN[e]||e}const Ql=[{value:"task",label:"To Do",shortLabel:"To Do",icon:"Square",color:"blue-200"},{value:"on-hold",label:"Blocked",shortLabel:"Blocked",icon:"Pause",color:"amber-500"},{value:"in-progress",label:"Working",shortLabel:"Working",icon:"Play",color:"blue-500"},{value:"review",label:"Review",shortLabel:"Review",icon:"ClipboardCheck",color:"violet-500"},{value:"done",label:"Done",shortLabel:"Done",icon:"SquareCheck",color:"green-500"},{value:"cancelled",label:"Cancelled",shortLabel:"Cancelled",icon:"Ban",color:"var(--status-cancelled)"}],Ui=Ql.map(({value:e,label:t,icon:r,color:a})=>({value:e,label:t,icon:r,color:a}));function _o(e){const t=String(e||"task").trim().toLowerCase();return t==="completed"?Ql.find(r=>r.value==="done")||Ql[0]:Ql.find(r=>r.value===t)||Ql[0]}const xC=["Folder","Code","FileText","Terminal","Database","Cpu","Globe","Layout","Server","Search","Settings","Zap","Shield","Star","Layers","Bug","Box","Book","MessageSquare","Image","Music","Video","Map","Mail","Camera","Heart","Anchor","Rocket","Target","Flag","Bookmark","Briefcase","Puzzle","SquareUserRound","Users","User","Unplug","Clock","Lock","Pencil","TrafficCone","CircleDollarSign","Activity","Wrench","Microscope","Palette","Webhook","FlaskConical","Bot","Cloud","Kanban","Infinity","Monitor","Smartphone","History","Brain","Calendar","Play","Pause","Sparkles","Check","Ban","Circle","CheckCircle","Wind","Github","Square","SquareCheck","CheckSquare","Package","AlertCircle","Lightbulb","ClipboardCheck","ScanSearch","Inbox","HelpCircle","Gauge","FileCode","ArrowDown","Minus","ArrowUp","AlertTriangle","CircleQuestionMark","TriangleAlert"],Ru=xC.reduce((e,t)=>(e[t]=To[t]||ad,e),{}),RX=xC,Hh=Object.fromEntries(TC().flatMap(e=>e.types).filter(e=>e.icon&&e.color).reduce((e,t)=>(e.some(([r])=>r===t.value)||e.push([t.value,{icon:t.icon,color:t.color}]),e),[])),yN={PDF:"red-500",DOC:"blue-500",DOCX:"blue-500",CSV:"teal-500",JSON:"amber-500",TXT:"violet-200",MD:"violet-200"};function kN(e){const t=String(e||"").trim().toLowerCase();return Jn(Hh[t]?.color)||Jn("violet-200")||"#9c7aeb"}function PX(e){switch(Number(e)){case 1:return"var(--text-muted)";case 2:return"var(--text-secondary)";case 3:return"var(--priority-high)";case 4:return"var(--priority-critical)";default:return"var(--text-secondary)"}}function vN(e){const t=String(e||"").trim().toUpperCase();return Jn(yN[t])||"var(--text-muted)"}const wN=/[\u2010-\u2015\u2212]/g;function Mv(e){return String(e??"").trim().replace(wN,"-").replace(/\s+/g," ").toLowerCase()}function wg(e){const t=Mv(e);if(!t)return null;const r=t.match(/^(l\s*t|t)\s*(?:-\s*)?(\d+)$/i);return r?`${r[1].replace(/\s+/g,"").toLowerCase()}-${r[2]}`:null}function bg(e){const t=Mv(e);return{raw:t,tokens:t?t.split(" ").filter(Boolean):[],referenceToken:wg(e)}}function Co(e,t){const r=String(t??"").trim();r&&e.push(r)}function ou(e,t,r){const a=String(r??"").trim();if(!a)return;const s=t?.find(i=>String(i.value)===a);Co(e,s?.label)}function bN(e,t={}){const r=[];return Co(r,e.title),Co(r,e.description),Co(r,e.id),Co(r,hs(e)),Co(r,e.category),Co(r,e.type),Co(r,e.priority),Co(r,e.status),Co(r,e.assignee||"unassigned"),Co(r,e.canceledReason),ou(r,t.categories,e.category),ou(r,t.types,e.type),ou(r,t.priorities,e.priority),ou(r,Ui,e.status),ou(r,t.assigneeOptions,e.assignee||"unassigned"),Object.entries(e.taxonomies||{}).forEach(([a,s])=>{const i=t.taxonomies?.find(c=>c.id===a);Co(r,i?.label),(Array.isArray(s)?s:[s]).forEach(c=>{Co(r,c),ou(r,i?.options,c)})}),r}function Vh(e,t,r={}){const a=typeof t=="string"?bg(t):t;if(!a.raw)return!0;const s=bN(e,r),l=s.map(Mv).filter(Boolean).join(" ");return l.includes(a.raw)||a.referenceToken&&s.map(wg).some(d=>d?.includes(a.referenceToken))?!0:a.tokens.length>0&&a.tokens.every(c=>l.includes(c))}function SN(e,t){const r=e.taxonomies?.[t];return r==null||r===""?!1:Array.isArray(r)?r.some(a=>String(a).trim().length>0):String(r).trim().length>0}function $f(e,t){const r=e.filter(s=>s.status!=="retired"),a=e.filter(s=>s.status==="retired"&&t.some(i=>SN(i,s.id)));return[...r,...a.filter(s=>!r.some(i=>i.id===s.id))]}function RC(e,t=[]){return $f(e,t).filter(r=>r.sortEnabled===!0).map(r=>({value:`taxonomy:${r.id}`,label:r.status==="retired"?`${r.label} (Retired)`:r.label}))}function Mb(e,t){const r=e.taxonomies?.[t.id];if(r==null||r==="")return null;const a=Array.isArray(r)?r.map(s=>String(s)):[String(r)];for(let s=0;s<t.options.length;s+=1)if(a.includes(String(t.options[s]?.value)))return s;return null}function Fl(e,t){return new Date(t.createdAt).getTime()-new Date(e.createdAt).getTime()}function Gh(e,t,r,a,s=[]){let i=0;if(r==="created")return i=Fl(e,t),a==="desc"?i:-i;if(r==="updated"){const l=e.updatedAt||e.createdAt,c=t.updatedAt||t.createdAt;return i=new Date(c).getTime()-new Date(l).getTime(),a==="desc"?i:-i}if(r==="priority"){const l=Oh(e.priority),c=Oh(t.priority);return i=l!==c?c-l:Fl(e,t),a==="desc"?i:-i}if(r==="complexity"){const l=typeof e.complexity=="number"?e.complexity:3,c=typeof t.complexity=="number"?t.complexity:3;return i=l!==c?c-l:Fl(e,t),a==="desc"?i:-i}if(r.startsWith("taxonomy:")){const l=r.slice(9),c=s.find(p=>p.id===l);if(!c)return i=Fl(e,t),a==="desc"?i:-i;const d=Mb(e,c),f=Mb(t,c);return d===null&&f===null?Fl(e,t):d===null?1:f===null?-1:d!==f?a==="desc"?f-d:d-f:Fl(e,t)}return i=Fl(e,t),a==="desc"?i:-i}function AN(e,t,r){const a=e.taxonomies?.[t];return a==null||a===""?!1:Array.isArray(a)?a.some(s=>String(s)===String(r)):String(a)===String(r)}function Dv(e,t){const r=e.options.filter(s=>s.status!=="retired"),a=e.options.filter(s=>s.status==="retired"&&t.some(i=>AN(i,e.id,s.value)));return[...r,...a.filter(s=>!r.some(i=>String(i.value)===String(s.value)))]}function CN({tasks:e,archivedTasks:t,activeCategories:r,activeTypes:a,priorities:s,taxonomies:i,configLoaded:l,referenceDataLoaded:c,assigneeOptionsLoaded:d,assigneeOptions:f}){const p=o.useMemo(()=>[...e,...t],[t,e]),g=o.useMemo(()=>vA(f),[f]),h=o.useMemo(()=>$f(i,p).filter(re=>re.filterEnabled!==!1).map(re=>({...re,options:Dv(re,p)})),[p,i]),y=o.useMemo(()=>new Map(h.map(re=>[re.id,re])),[h]),k=o.useMemo(()=>g.map(re=>re.value),[g]),[v,C]=o.useState(""),[S,w]=o.useState([]),[_,M]=o.useState([]),[R,P]=o.useState([]),[b,$]=o.useState(!1),[I,E]=o.useState(Ui.map(re=>re.value)),[K,U]=o.useState(k),[L,D]=o.useState(!0),[ie,H]=o.useState({}),be=o.useRef(d),[Z,me]=o.useState("created"),[Ve,Re]=o.useState("desc"),je=o.useCallback(()=>{Re(re=>re==="asc"?"desc":"asc")},[]),[ye,ue]=o.useState("status"),[ve,Pe]=o.useState("show"),[Le,se]=o.useState({}),V=o.useCallback((re,de)=>de.length===0?!0:de.every(He=>re.includes(He)),[]),W=o.useCallback((re,de)=>re.length===de.length&&re.every((He,ce)=>He===de[ce]),[]);o.useEffect(()=>{if(!(!l||!c)&&d&&!b&&r.length>0&&a.length>0&&s.length>0){w(r.map(de=>de.value)),M(s.map(de=>de.value)),P(a.map(de=>de.value)),U(k),D(!0);const re={};h.forEach(de=>{re[de.id]=de.options.map(He=>He.value)}),H(re),$(!0)}},[l,c,d,r,a,s,h,b,k]),o.useEffect(()=>{if(!b||!d)return;const re=new Set(k),de=K.filter(pe=>re.has(pe)),He=L?k:de.length>0||K.length===0?de:k;(He.length!==K.length||He.some((pe,xe)=>pe!==K[xe]))&&U(He)},[k,K,L,b,d]),o.useEffect(()=>{if(!b||!d)return;const re=K.filter(He=>k.includes(He)),de=k.length>0&&k.every(He=>re.includes(He));L&&!de&&d&&!be.current||de!==L&&D(de)},[k,K,L,b,d]),o.useEffect(()=>{be.current=d},[d]),o.useEffect(()=>{if(!l||!c||!b||r.length===0)return;const re=A0(S,r);(re.length!==S.length||re.some((He,ce)=>He!==S[ce]))&&w(re)},[l,c,r,b,S]),o.useEffect(()=>{if(!l||!c||!b||s.length===0||_.length===0)return;const re=S0(_,s),de=Array.from(new Set(_.map(ce=>Number(ce)).filter(ce=>Number.isFinite(ce))));(re.length!==de.length||re.some((ce,pe)=>ce!==de[pe]))&&M(re)},[l,c,b,s,_]),o.useEffect(()=>{if(!l||!c||!b||a.length===0)return;const re=new Set(a.map(ce=>ce.value)),de=R.filter(ce=>re.has(ce)),He=de.length>0||R.length===0?de:a.map(ce=>ce.value);W(He,R)||P(He)},[a,l,R,b,W,c]),o.useEffect(()=>{if(!l||!c||!b)return;const re={};h.forEach(xe=>{const N=xe.options.map(Te=>Te.value);if(N.length===0)return;const X=Array.isArray(ie[xe.id])?ie[xe.id]:[],Ae=X.filter(Te=>N.includes(Te));re[xe.id]=Ae.length>0||X.length===0?Ae:N});const de=Object.keys(ie).sort(),He=Object.keys(re).sort(),ce=de.length!==He.length||de.some((xe,N)=>xe!==He[N]),pe=He.some(xe=>!W(ie[xe]||[],re[xe]||[]));(ce||pe)&&H(re)},[l,ie,h,b,W,c]);const z=o.useCallback(()=>{C(""),w(r.map(de=>de.value)),M(s.map(de=>de.value)),P(a.map(de=>de.value)),E(Ui.map(de=>de.value)),U(k),D(!0);const re={};h.forEach(de=>{re[de.id]=de.options.map(He=>He.value)}),H(re),me("created"),Re("desc")},[r,s,a,h,k]),fe=o.useCallback(re=>{U(de=>{const He=typeof re=="function"?re(de):re,ce=Array.from(new Set(He.filter(xe=>typeof xe=="string"&&xe.trim().length>0))),pe=k.length>0&&k.every(xe=>ce.includes(xe));return D(pe),ce})},[k]),ke=o.useMemo(()=>bg(v),[v]),Y=o.useMemo(()=>({categories:r,types:a,priorities:s,assigneeOptions:g,taxonomies:i}),[r,a,s,g,i]),we=o.useMemo(()=>{const re=V(S,r.map(pe=>pe.value)),de=V(R,a.map(pe=>pe.value)),He=V(Array.from(new Set(_.map(pe=>Number(pe)).filter(pe=>Number.isFinite(pe)))),s.map(pe=>Number(pe.value)).filter(pe=>Number.isFinite(pe))),ce=V(I,Ui.map(pe=>pe.value));return e.filter(pe=>{const xe=Vh(pe,ke,Y),N=!b||re||S.includes(pe.category),X=!b||He||Ey(pe.priority,_),Ae=!b||de||R.includes(pe.type||po),Te=!b||ce||I.includes(pe.status),he=!b||L||K.includes(pe.assignee||"unassigned"),ot=Object.entries(ie).every(([We,Xe])=>{const ae=y.get(We);if(!ae)return!0;const G=ae?.options.every(Fe=>Xe.includes(Fe.value))??!0;if(G)return!0;const Ie=pe.taxonomies?.[We];return Ie?Array.isArray(Ie)?Ie.some(Fe=>Xe.includes(Fe)):Xe.includes(Ie):G||Xe.includes("")});return xe&&N&&X&&Ae&&Te&&he&&ot}).sort((pe,xe)=>Gh(pe,xe,Z,Ve,i))},[e,ke,Y,S,_,R,I,K,L,ie,Z,Ve,b,h,y,r,a,s,V,i]),q=o.useMemo(()=>{const re=V(S,r.map(pe=>pe.value)),de=V(R,a.map(pe=>pe.value)),He=V(Array.from(new Set(_.map(pe=>Number(pe)).filter(pe=>Number.isFinite(pe)))),s.map(pe=>Number(pe.value)).filter(pe=>Number.isFinite(pe))),ce=V(I,Ui.map(pe=>pe.value));return e.filter(pe=>{const xe=!b||re||S.includes(pe.category),N=!b||He||Ey(pe.priority,_),X=!b||de||R.includes(pe.type||po),Ae=!b||ce||I.includes(pe.status),Te=!b||L||K.includes(pe.assignee||"unassigned"),he=Object.entries(ie).every(([ot,We])=>{const Xe=y.get(ot);if(!Xe)return!0;const ae=Xe?.options.every(Ie=>We.includes(Ie.value))??!0;if(ae)return!0;const G=pe.taxonomies?.[ot];return G?Array.isArray(G)?G.some(Ie=>We.includes(Ie)):We.includes(G):ae||We.includes("")});return xe&&N&&X&&Ae&&Te&&he})},[e,S,_,R,I,K,L,ie,b,h,y,r,a,s,V]),le=o.useMemo(()=>{const re=r.every(ce=>S.includes(ce.value)),de=V(R,a.map(ce=>ce.value)),He=V(Array.from(new Set(_.map(ce=>Number(ce)).filter(ce=>Number.isFinite(ce)))),s.map(ce=>Number(ce.value)).filter(ce=>Number.isFinite(ce)));return t.filter(ce=>{const pe=Vh(ce,ke,Y),xe=!b||re||S.includes(ce.category),N=!b||He||Ey(ce.priority,_),X=!b||de||R.includes(ce.type||po),Ae=!b||L||K.includes(ce.assignee||"unassigned"),Te=Object.entries(ie).every(([he,ot])=>{const We=y.get(he);if(!We)return!0;const Xe=We?.options.every(G=>ot.includes(G.value))??!0;if(Xe)return!0;const ae=ce.taxonomies?.[he];return ae?Array.isArray(ae)?ae.some(G=>ot.includes(G)):ot.includes(ae):Xe||ot.includes("")});return pe&&xe&&N&&X&&Ae&&Te}).sort((ce,pe)=>Gh(ce,pe,Z,Ve,i))},[t,ke,Y,S,_,R,K,L,ie,Z,Ve,b,r,a,s,h,y,V,i]),$e=o.useMemo(()=>{const re={};return we.forEach(de=>{const He=r.find(pe=>pe.value===de.category),ce=He?He.label:de.category||"General";re[ce]||(re[ce]=[]),re[ce].push(de)}),re},[we,r]);return{searchQuery:v,setSearchQuery:C,filterCategories:S,setFilterCategories:w,filterPriorities:_,setFilterPriorities:M,filterTypes:R,setFilterTypes:P,filterStatus:I,setFilterStatus:E,filterAssignees:K,setFilterAssignees:fe,filterAssigneesAllSelected:L,setFilterAssigneesAllSelected:D,filterTaxonomies:ie,setFilterTaxonomies:H,hasInitedFilters:b,setHasInitedFilters:$,sortBy:Z,setSortBy:me,sortOrder:Ve,setSortOrder:Re,toggleSortOrder:je,groupBy:ye,setGroupBy:ue,emptyColumnMode:ve,setEmptyColumnMode:Pe,collapsedCategories:Le,setCollapsedCategories:se,clearFilters:z,filteredTasks:we,searchAgnosticTasks:q,filteredArchive:le,groupedTasks:$e}}const _N=CN,Lv="taskforce-workspace-sync-v3",IN=3,yu="operation-identities",Bi="task-create-attempts",ku="workstream-create-attempts";function eh(e){if(!e)return[];const t=Array.isArray(e.attempts)?[...e.attempts]:[];return e.active&&!t.some(r=>r.operationId===e.active?.operationId)&&t.push(e.active),t}function Db(e,t){delete e.active,e.attempts=t}function qa(e,t){const r=String(e||"").trim();if(!r)throw new Error(`${t} is required.`);return r}function kc(e,t){return e.error||new Error(t)}function TN(e){e.objectStoreNames.contains(yu)||e.createObjectStore(yu,{keyPath:"fingerprint"}),e.objectStoreNames.contains(Bi)||e.createObjectStore(Bi,{keyPath:"workspaceId"}),e.objectStoreNames.contains(ku)||e.createObjectStore(ku,{keyPath:"fingerprint"})}function Ov(e,t){return e?new Promise((r,a)=>{const s=e.open(t,IN);let i=!1;s.onupgradeneeded=()=>TN(s.result),s.onsuccess=()=>{const l=s.result;if(i){l.close();return}i=!0,l.onversionchange=()=>l.close(),r(l)},s.onerror=()=>{i||(i=!0,a(kc(s,"Failed to open the local operation identity database.")))},s.onblocked=()=>{}}):Promise.reject(new Error("IndexedDB is unavailable."))}class Bv{constructor(t=globalThis.indexedDB,r=Lv){this.indexedDb=t,this.databaseName=r}async getOrCreate(t,r){const a=qa(t,"fingerprint"),s=await this.open();try{return await new Promise((i,l)=>{const c=s.transaction(yu,"readwrite"),d=c.objectStore(yu),f=d.get(a);let p="",g=!1;f.onsuccess=()=>{try{const h=f.result;if(h){p=qa(h.operationId,"stored operationId");return}p=qa(r(),"operationId"),g=!0,d.add({fingerprint:a,operationId:p})}catch(h){c.abort(),l(h)}},f.onerror=()=>l(kc(f,"Failed to read the local operation identity.")),c.oncomplete=()=>i({operationId:p,created:g}),c.onerror=()=>l(c.error||new Error("Failed to persist the local operation identity.")),c.onabort=()=>l(c.error||new Error("Persisting the local operation identity was aborted."))})}finally{s.close()}}async deleteIfMatches(t,r){const a=qa(t,"fingerprint"),s=qa(r,"operationId"),i=await this.open();try{await new Promise((l,c)=>{const d=i.transaction(yu,"readwrite"),f=d.objectStore(yu),p=f.get(a);p.onsuccess=()=>{p.result?.operationId===s&&f.delete(a)},p.onerror=()=>c(kc(p,"Failed to read the local operation identity.")),d.oncomplete=()=>l(),d.onerror=()=>c(d.error||new Error("Failed to delete the local operation identity.")),d.onabort=()=>c(d.error||new Error("Deleting the local operation identity was aborted."))})}finally{i.close()}}open(){return Ov(this.indexedDb,this.databaseName)}}class PC{constructor(t=globalThis.indexedDB,r=Lv){this.indexedDb=t,this.databaseName=r}async getForParticipant(t,r){const a=qa(t,"workspaceId"),s=qa(r,"participantId"),i=await this.open();try{return await new Promise((l,c)=>{const d=i.transaction(Bi,"readonly"),p=d.objectStore(Bi).get(a);let g=null;p.onsuccess=()=>{const h=p.result,y=eh(h).find(k=>k.participantId===s);y&&(g={...y,created:!1,resolved:!1})},p.onerror=()=>c(kc(p,"Failed to read the local task-create attempt.")),d.oncomplete=()=>l(g),d.onerror=()=>c(d.error||new Error("Failed to claim the local task-create attempt.")),d.onabort=()=>c(d.error||new Error("Claiming the local task-create attempt was aborted."))})}finally{i.close()}}async listPending(t){const r=qa(t,"workspaceId"),a=await this.open();try{return await new Promise((s,i)=>{const l=a.transaction(Bi,"readonly"),d=l.objectStore(Bi).get(r);let f=[];d.onsuccess=()=>{f=eh(d.result).map(p=>({...p,created:!1,resolved:!1}))},d.onerror=()=>i(kc(d,"Failed to list local task-create attempts.")),l.oncomplete=()=>s(f),l.onerror=()=>i(l.error||new Error("Failed to list local task-create attempts.")),l.onabort=()=>i(l.error||new Error("Listing local task-create attempts was aborted."))})}finally{a.close()}}async claim(t,r,a,s){const i=qa(t,"workspaceId"),l=qa(r,"participantId"),c=await this.open();try{return await new Promise((d,f)=>{const p=c.transaction(Bi,"readwrite"),g=p.objectStore(Bi),h=g.get(i);let y=null,k=!1;h.onsuccess=()=>{try{const v=h.result||{workspaceId:i},C=eh(v),S=C.find(_=>_.participantId===l);if(S){y={...S,created:!1,resolved:!1};return}const w={workspaceId:i,operationId:qa(s(),"operationId"),task:a,participantId:l};k=!0,C.push(w),Db(v,C),g.put(v),y={...w,created:!0,resolved:!1}}catch(v){p.abort(),f(v)}},h.onerror=()=>f(kc(h,"Failed to read the local task-create attempt.")),p.oncomplete=()=>{if(!y)return f(new Error("Local task-create attempt was not prepared."));d({...y,created:k})},p.onerror=()=>f(p.error||new Error("Failed to persist the local task-create attempt.")),p.onabort=()=>f(p.error||new Error("Persisting the local task-create attempt was aborted."))})}finally{c.close()}}async markResolved(t,r){const a=qa(r,"operationId");await this.mutateState(t,s=>s.filter(i=>i.operationId!==a))}async abandonIfMatches(t,r){await this.mutateState(t,a=>{const s=qa(r,"operationId");return a.filter(i=>i.operationId!==s)})}async mutateState(t,r){const a=qa(t,"workspaceId"),s=await this.open();try{await new Promise((i,l)=>{const c=s.transaction(Bi,"readwrite"),d=c.objectStore(Bi),f=d.get(a);f.onsuccess=()=>{const p=f.result||{workspaceId:a},g=r(eh(p));g.length===0?d.delete(a):(Db(p,g),d.put(p))},f.onerror=()=>l(kc(f,"Failed to read the local task-create state.")),c.oncomplete=()=>i(),c.onerror=()=>l(c.error||new Error("Failed to update the local task-create state.")),c.onabort=()=>l(c.error||new Error("Updating the local task-create state was aborted."))})}finally{s.close()}}open(){return Ov(this.indexedDb,this.databaseName)}}class xN{constructor(t=globalThis.indexedDB,r=Lv){this.indexedDb=t,this.databaseName=r}async claim(t,r,a){const s=qa(t,"fingerprint"),i=await this.open();try{return await new Promise((l,c)=>{const d=i.transaction(ku,"readwrite"),f=d.objectStore(ku),p=f.get(s);let g=null,h=!1;p.onsuccess=()=>{try{const y=p.result;if(y){g=y;return}g={fingerprint:s,operationId:qa(a(),"operationId"),workstream:r},h=!0,f.add(g)}catch(y){d.abort(),c(y)}},p.onerror=()=>c(kc(p,"Failed to read the workstream-create attempt.")),d.oncomplete=()=>{if(!g)return c(new Error("Workstream-create attempt was not prepared."));l({...g,created:h})},d.onerror=()=>c(d.error||new Error("Failed to persist the workstream-create attempt.")),d.onabort=()=>c(d.error||new Error("Persisting the workstream-create attempt was aborted."))})}finally{i.close()}}async deleteIfMatches(t,r){const a=qa(t,"fingerprint"),s=qa(r,"operationId"),i=await this.open();try{await new Promise((l,c)=>{const d=i.transaction(ku,"readwrite"),f=d.objectStore(ku),p=f.get(a);p.onsuccess=()=>{p.result?.operationId===s&&f.delete(a)},p.onerror=()=>c(kc(p,"Failed to read the workstream-create attempt.")),d.oncomplete=()=>l(),d.onerror=()=>c(d.error||new Error("Failed to delete the workstream-create attempt.")),d.onabort=()=>c(d.error||new Error("Deleting the workstream-create attempt was aborted."))})}finally{i.close()}}open(){return Ov(this.indexedDb,this.databaseName)}}function vc(e){return En(e)}async function Wv(e,t=globalThis.crypto){if(!t?.subtle)throw new Error("Web Crypto is unavailable.");const r=new TextEncoder().encode(vc(e)),a=await t.subtle.digest("SHA-256",r);return Array.from(new Uint8Array(a),s=>s.toString(16).padStart(2,"0")).join("")}function cf(){if(!globalThis.crypto?.randomUUID)throw new Error("Secure task operation identity generation is unavailable.");return`operation-${globalThis.crypto.randomUUID()}`}function RN(){return{operationId:cf(),taskId:`task-${globalThis.crypto.randomUUID()}`}}async function Dk(e,t,r){const a={...t,headers:{...t.headers||{},"x-taskforce-operation-id":r}};try{return await fetch(e,a)}catch{return fetch(e,a)}}async function Kh(e){if(e.ok||![400,404,409,422].includes(e.status))return!1;const t=await e.clone().json().catch(()=>null),r=String(t?.code||"").trim();return new Set(["TASK_CREATE_UNSUPPORTED_INPUT","DURABLE_TASK_HTTP_PATCH_UNSUPPORTED","DURABLE_TASK_PATCH_INVALID","WORKSPACE_SYNC_OPERATION_ID_REQUIRED","TASK_NOT_FOUND","TASK_ARCHIVED_READ_ONLY","TASK_CHECKLIST_INVALID","TASK_ATTACHMENT_LINKS_INVALID","TASK_COMMENT_INVALID","TASK_COMMENT_IDENTITY_CONFLICT"]).has(r)}function Vy(e){const{id:t,createdAt:r,updatedAt:a,...s}=e;return s}function Lb(e){return`taskforce.sync.v3.cloud-task-create-participant-v1:${e}`}function Lk(e){const t=new PC,r=new Bv,a=new Map,s=c=>{const d=globalThis.sessionStorage?.getItem(Lb(c));if(d)try{const p=JSON.parse(d);if(typeof p.participantId=="string"&&p.participantId.trim())return{participantId:p.participantId.trim(),draftFingerprint:typeof p.draftFingerprint=="string"?p.draftFingerprint:null}}catch{}const f=a.get(c);return f||{participantId:cf(),draftFingerprint:null}},i=(c,d)=>{a.set(c,d),globalThis.sessionStorage?.setItem(Lb(c),JSON.stringify(d))},l=c=>{i(c,{participantId:cf(),draftFingerprint:null})};return{async prepareCreate(c,d){const f=RN(),p={...d,id:f.taskId},g=await Wv({workspaceId:c,task:Vy(d)});let h=s(c);h.draftFingerprint&&h.draftFingerprint!==g?h={participantId:cf(),draftFingerprint:g}:h={...h,draftFingerprint:g},i(c,h);const y=await t.claim(c,h.participantId,p,()=>f.operationId),k=Vy(y.task);return{operationId:y.operationId,body:y.task,recoveredChangedInput:En(k)!==En(Vy(d))}},async confirmCreate(c,d){await t.markResolved(c,d),l(c)},resetCreateDraft(c){l(c)},async prepareUpdate(c,d,f,p){const g=En({workspaceId:c,url:d,body:f,observedPrecondition:p}),h=await r.getOrCreate(g,cf);return{fingerprint:g,operationId:h.operationId}},confirmUpdate(c,d){return r.deleteIfMatches(c,d)}}}function PN(e){const{activeCategories:t,activeTab:r,apiEndpoint:a,assignee:s,attachments:i,attachmentsDirty:l,category:c,checklistItems:d,comments:f,complexity:p,description:g,dueDate:h,createTaskDurably:y,durableTaskHttpRootActivationEnabled:k=!1,workspaceId:v,taskHttpMutationClient:C,updateTask:S,editingTaskId:w,fetchTasks:_,formTaxonomies:M,getDescriptionDraft:R,getPreferredCategoryValue:P,getTitleDraft:b,mergeTaskFromServer:$,onTaskCreated:I,workstreamInput:E,priority:K,pushNotice:U,queueWorkspaceSyncFromAuthoritativeTaskState:L,relationshipTasks:D,supplementalTasks:ie=[],resetForm:H,resolveWorkstreamIdInput:be,scheduledDate:Z,setActiveTab:me,setAttachmentsDirty:Ve,setComments:Re,setError:je,setLastUsedCategory:ye,setLoading:ue,setNewCommentText:ve,status:Pe,title:Le,taxonomies:se,textDraftOccupied:V,type:W}=e,z=b||(()=>Le),fe=R||(()=>g),ke=o.useRef(z),Y=o.useRef(fe);ke.current=z,Y.current=fe;const we=o.useCallback(()=>({title:ke.current(),description:Y.current()}),[]),[q,le]=o.useState(null),[$e,re]=o.useState("idle"),[de,He]=o.useState(null),ce=o.useRef(null),pe=o.useRef(null),xe=o.useRef(null),N=o.useRef(null),X=o.useRef(!1),Ae=o.useRef(null),Te=o.useRef(null),he=o.useRef(!1),ot=o.useRef(null),We=w&&(D.find(F=>F.id===w)||ie.find(F=>F.id===w))||null,Xe=We?.isDeleted?"deleted":We?.isArchived?"archived":null,ae=r==="add"&&!w&&((V??(Le.trim()!==""||g.trim()!==""))||d.length>0||(f?.length||0)>0||i.length>0);o.useEffect(()=>{he.current&&!ae&&(Te.current?.resetCreateDraft(v),y?.resetDraft?.()),he.current=ae},[ae,y,v]);const G=o.useCallback((F=we())=>JSON.stringify({title:F.title.trim(),description:F.description,category:typeof c=="string"?c:c.label||P(t),type:typeof W=="string"?W:W.label||po,priority:Number(K),complexity:Number(p)||3,assignee:s||"agent",scheduledDate:Z||"",dueDate:h||"",workstreamInput:E.trim(),checklistItems:d,comments:f,taxonomies:M,attachments:i}),[t,s,i,c,d,f,p,g,h,M,P,K,we,Z,Le,W,E]),Ie=o.useCallback(()=>{ce.current!==null&&(window.clearTimeout(ce.current),ce.current=null)},[]),Fe=o.useCallback(F=>{if(xe.current===F.signature&&pe.current===null&&N.current||(pe.current=F,N.current))return N.current;const Ce=(async()=>{let ut=!0;for(;pe.current;){const mt=pe.current;pe.current=null,xe.current=mt.signature,ut=await mt.save(),ut&&He(mt.signature)}return xe.current=null,ut})().finally(()=>{xe.current=null,N.current=null});return N.current=Ce,Ce},[]),it=o.useCallback(async F=>{const Ne=F?.quiet??!1,Ce=F?.source??"manual",ut=F?.textDraft??we(),mt=ut.title,Ue=ut.description;if(w||(Ae.current=null),Xe)return je(Xe==="deleted"?"Deleted tasks are read-only. Restore first to make changes.":"Archived tasks are read-only. Unarchive first to make changes."),re(Ce==="autosave"?"error":"idle"),!1;if(!mt.trim())return je("Title is required"),w&&re(Ce==="autosave"?"error":"idle"),!1;const wt=se.filter(kt=>kt.isRequired).filter(kt=>{const rt=M[kt.id];return Array.isArray(rt)?rt.filter(Ht=>String(Ht).trim().length>0).length===0:typeof rt!="string"&&typeof rt!="number"||String(rt).trim().length===0}).map(kt=>kt.label);if(wt.length>0)return je(`Required taxonomy values are missing: ${wt.join(", ")}`),w&&re(Ce==="autosave"?"error":"idle"),!1;ue(!0),je(""),w&&re("saving");try{const kt=w?`/api/taskforce/task/${w}`:a.replace("/api/dev/task","/api/taskforce/task").replace("/api/taskforce/task","/api/taskforce/task"),rt=w?"PATCH":"POST",Ht=typeof c=="string"?c:c.label||P(t),lr=typeof W=="string"?W:W.label||po,rr=E.trim()?be(E):null,wr=w?D.find(nt=>nt.id===w):null,st=!w||!wr||En(wr.checklistItems||[])!==En(d),zt={title:mt,description:Ue||null,category:Ht||P(t),type:lr,priority:K,complexity:Number(p)||3,status:w?void 0:Pe,completedAt:w?void 0:Pe==="done"?new Date().toISOString():null,assignee:s||"agent",scheduledDate:Z||null,dueDate:h||null,workstreamId:E.trim()?rr?.id||E.trim():null,taxonomies:M,...w?{}:{createdAt:new Date().toISOString(),createdBy:"user"}};if(w&&wr)for(const[nt,Ct]of Object.entries(zt))(Ct===void 0||En(Ct??null)===En(wr[nt]??null))&&delete zt[nt];if(st&&(zt.checklistItems=d),w||(zt.comments=f),(!w||l)&&(zt.attachments=i),w&&Object.keys(zt).length>0&&(zt.saveSource=Ce),w&&S){const nt=await S(w,zt);return ue(!1),re(nt===!1?"error":"saved"),nt===!1?!1:(ye(Ht),Ve(!1),!0)}if(!w&&y){let nt;try{nt=await y(zt)}catch(Ct){console.error("Durable task create failed before a conclusive result.",Ct);const Rt="Task creation confirmation was interrupted. Retry the same task to confirm it safely.";return je(Rt),Ne||U(Rt,"error"),ue(!1),!1}if(nt){if(nt.state==="failed"||nt.state==="rejected"||nt.state==="ambiguous"||nt.state==="disabled"){const Ct=nt.state==="disabled"?"Task was not created because durable capture became unavailable. Reload before retrying.":nt.state==="failed"?"Task was not created because durable local preparation failed. Retry the task.":nt.state==="rejected"?`Task was not created because durable capture rejected it${nt.errorCode?` (${nt.errorCode})`:""}.`:"Task creation confirmation was interrupted. Retry the same task to confirm it safely.";return je(Ct),Ne||U(Ct,"error"),ue(!1),!1}if(nt.task){const Ct=xo(nt.task);Ae.current=Ct,$(Ct)}if(nt.recoveredChangedInput&&(X.current=!0,U("Recovered the previously interrupted task. Changes made after the interrupted submission were not applied.","info")),nt.state==="pending")nt.pendingReason!=="queued"&&(X.current=!0,U(nt.pendingReason==="auth"?"Task created locally. Sign in to finish cloud sync.":nt.pendingReason==="sync-disabled"?"Task created locally. Turn on sync to send it to cloud.":"Task created locally. Cloud sync will retry automatically.","info")),je("");else if(nt.state==="blocked"){X.current=!0;const Ct=`Task created locally, but cloud sync is blocked${nt.errorCode?` (${nt.errorCode})`:""}.`;je(Ct),U(Ct,"error")}else je("");return ye(Ht),Ve(!1),ue(!1),!0}}let Lt=!1,Mt=null,Ee=zt;if(k&&!w){Te.current||(Te.current=C||Lk());const nt=await Te.current.prepareCreate(v,zt);Mt=nt.operationId,Ee=nt.body,Lt=nt.recoveredChangedInput}const ct={method:rt,headers:{"Content-Type":"application/json"},body:JSON.stringify(Ee)},lt=Mt?await Dk(kt,ct,Mt):await fetch(kt,ct);if(!lt.ok){!w&&Mt&&await Kh(lt)&&await Te.current?.confirmCreate(v,Mt);const nt=await lt.json(),Ct=nt.error||nt.message||`Failed to ${w?"update":"save"} task`;return je(Ct),Ne||U(Ct,"error"),ue(!1),w&&re("error"),!1}const Je=await lt.json().catch(()=>null);if(!w&&Mt&&(!Je||typeof Je!="object"||String(Je.id||"")!==String(Ee.id||"")))throw new Error("Durable cloud task create returned an invalid authoritative task identity.");if(!w&&Mt&&await Te.current?.confirmCreate(v,Mt),Lt&&(X.current=!0,U("Recovered the previously interrupted task. Changes made after the interrupted submission were not applied.","info")),Je&&typeof Je=="object"){const nt=xo(Je);$(nt),w?L():Ae.current=nt}return ye(Ht),Ve(!1),ue(!1),w&&re("saved"),!0}catch(kt){return console.error("Failed to save task.",kt),je("Failed to connect to server"),Ne||U("Failed to connect to server","error"),ue(!1),w&&re("error"),!1}},[t,a,s,i,l,c,d,f,p,h,y,k,v,C,S,w,Xe,M,P,$,E,K,U,L,we,be,Ve,je,ye,ue,Z,Pe,se,W]),Me=o.useCallback(async()=>{if(await it({source:"manual"})&&(!w&&!X.current&&U("Task added successfully","success"),X.current=!1,r==="add"&&!w)){const Ne=Ae.current;if(Ne&&I){I(Ne);return}H(),me("tasks"),await _()}},[r,w,_,I,U,H,it,me]);o.useEffect(()=>{if(Ie(),pe.current=null,!w){He(null),re("idle");return}He(G()),re("idle")},[Ie,w]);const qe=o.useCallback(async()=>{if(Ie(),Xe||!w||de===null)return!0;const F=we(),Ne=G(F);return Ne===de?!0:!F.title.trim()||h&&Z&&h<Z?!1:await Fe({signature:Ne,save:()=>it({quiet:!0,source:"autosave",textDraft:F})})&&G()===Ne},[G,Ie,h,w,Xe,Fe,de,we,it,Z]);o.useEffect(()=>{if(!w||Xe||de===null)return;const F=we(),Ne=G(F);if(Ne===de)return;if(!F.title.trim()){re("idle");return}if(h&&Z&&h<Z){re("error");return}re(mt=>mt==="error"?"error":"idle"),Ie();const ut=(()=>{try{return String(JSON.parse(de).assignee||"")}catch{return""}})()!==String(s||"agent")?0:1400;return ce.current=window.setTimeout(async()=>{await Fe({signature:Ne,save:()=>it({quiet:!0,source:"autosave",textDraft:F})})},ut),()=>{Ie()}},[G,s,Ie,h,w,Xe,Fe,de,we,it,Z]);const ge=o.useCallback(async F=>{if(F.preventDefault(),h&&Z&&h<Z){le({dueDate:h,scheduledDate:Z});return}await Me()},[h,Me,Z]),_e=o.useCallback(async()=>{le(null),await Me()},[Me]),Be=o.useCallback(()=>{le(null)},[]),Ge=o.useCallback(async F=>{if(!w||!F.trim())return;const Ne=F.trim(),Ce=ot.current,ut=Ce?.taskId===w&&Ce.text===Ne?Ce:{taskId:w,text:Ne,operationId:globalThis.crypto?.randomUUID?.()||`comment-operation-${Date.now()}`,commentId:`comment-${globalThis.crypto?.randomUUID?.()||Date.now()}`,timestamp:new Date().toISOString()};ot.current=ut;try{const mt=await fetch(`/api/taskforce/task/${w}/comment`,{method:"POST",headers:{"Content-Type":"application/json","x-taskforce-operation-id":ut.operationId},body:JSON.stringify({text:Ne,commentId:ut.commentId,timestamp:ut.timestamp})});if(!mt.ok){const wt=await Kh(mt),rt=(await mt.json().catch(()=>({}))).error||"Failed to add comment.";wt&&(ot.current=null),je(rt),U(rt,"error");return}const Ue=await mt.json().catch(()=>null);if(ot.current=null,ve(""),Ue&&typeof Ue=="object"){const wt=xo(Ue);Re(wt.comments||[]),$(Ue),He(G()),re("saved")}else await _(!0);L()}catch(mt){console.error("Failed to add comment",mt),je("Failed to add comment."),U("Failed to add comment.","error")}},[w,_,G,$,U,L,Re,je,ve]);return{autoSaveState:$e,flushAutoSave:qe,scheduleWarningPrompt:q,saveTask:it,handleSubmit:ge,confirmScheduleWarning:_e,cancelScheduleWarning:Be,handleAddComment:Ge}}function EN(e){const{editingTaskId:t,workstreamInput:r,pushNotice:a,relationshipTasks:s,resolveWorkstreamIdInput:i,setError:l,updateTask:c}=e;return{handleSetWorkstreamForCurrentTask:o.useCallback(async f=>{if(!t)return;const p=s.find(k=>k.id===t);if(!p)return;const g=typeof f=="string"?f.trim():f===null?"":r.trim(),h=g?i(g):null,y=g.length>0?h?.id||g:null;if((p.workstreamId||null)===y){a(y?"Task already belongs to that workstream.":"Task is already standalone.","info");return}try{if(await c(t,{workstreamId:y})===!1)return;l(""),a(y?"Workstream set":"Workstream removed","info")}catch{l("Failed to set workstream."),a("Failed to set workstream.","error")}},[t,r,a,s,i,l,c])}}const $v=new Set(["title","description","priority","complexity","type","category","createdBy","assignee","scheduledDate","dueDate","scheduledWeekKey","orderInDay","workstreamId","taxonomies"]);function NN(e){const t={};for(const r of $v)Object.prototype.hasOwnProperty.call(e,r)&&(t[r]=e[r]);return t}class xh extends Error{constructor(t,r,a){super(t),this.code=r,this.statusCode=a,this.name="DurableTaskMetadataMutationError"}}function EC(e){const t=e&&typeof e=="object"&&!Array.isArray(e)?e:null;if(!t)throw new xh("Task metadata patch must be an object.","DURABLE_TASK_PATCH_INVALID",400);const r=Object.keys(t);if(r.length===0)throw new xh("Task metadata patch cannot be empty.","DURABLE_TASK_PATCH_INVALID",400);const a=r.filter(s=>!$v.has(s));if(a.length>0)throw new xh(`Task metadata patch contains unsupported fields: ${a.sort().join(", ")}.`,"DURABLE_TASK_PATCH_INVALID",400);return{...t}}const cd="taskforce:tasks-mutated";function jN(e){typeof window>"u"||typeof window.dispatchEvent!="function"||window.dispatchEvent(new CustomEvent(cd,{detail:e}))}const th=$v,MN=new Set(["status","assignee","canceledReason","completedAt","completed","inProgress","readyForReview","cancelled"]);function DN(e,t){return e===void 0||t===void 0?e===t:En(e)===En(t)}function la(e,t,r,a){return t?e.map(s=>{if(s.id!==r)return s;const i={...s};for(const l of Object.keys(a))Object.prototype.hasOwnProperty.call(t,l)?i[l]=t[l]:delete i[l];return i}):e}function qp(e,t){return{taskId:t,updatedAt:e?.updatedAt??null,status:e?.status??null,isArchived:e?.isArchived===!0}}function LN({tasks:e,archivedTasks:t,editingTaskId:r,setTasks:a,setArchivedTasks:s,setDeletedTasks:i,setError:l,resetForm:c,setActiveTab:d,fetchTasks:f,fetchArchive:p,fetchDeletedTasks:g,mergeTaskFromServer:h,pushNotice:y,cloudAuthConfigured:k,runtimeMode:v,isAuthenticated:C,workspaceCloudSyncEnabled:S,buildWorkspaceSyncSignature:w,pushWorkspaceChangesToCloud:_,workspacePendingSignatureRef:M,workspaceDeletedTaskIdsRef:R,workspaceDeletedTaskWatermarksRef:P,mutateTaskMetadata:b,mutateTaskStatus:$,mutateTaskLifecycle:I,mutateTaskDelete:E,mutateTaskRestore:K,durableTaskMetadataActivationEnabled:U=!1,durableTaskStatusActivationEnabled:L=!1,durableTaskDeleteActivationEnabled:D=!1,durableTaskHttpRootActivationEnabled:ie=!1,workspaceId:H="default",taskHttpMutationClient:be}){const Z=o.useRef(new Map);o.useEffect(()=>{if(typeof window>"u")return;const N=X=>{const Ae=X.detail,Te=Ae?.authoritativeTask,he=String(Ae?.workspaceId||"").trim()||"default";!Te||he!==H||(Z.current.set(Te.id,Te),h(Te))};return window.addEventListener(cd,N),()=>window.removeEventListener(cd,N)},[h,H]);const[me,Ve]=o.useState(null),Re=o.useRef(null),je=o.useRef(null),ye=o.useRef(null),ue=o.useRef(null),ve=o.useCallback(async(N,X,Ae,Te,he)=>{const ot=["checklistItems","attachments","comments"].some(ae=>Object.prototype.hasOwnProperty.call(Ae,ae));if(!ie&&!ot)return fetch(N,X);ue.current||(ue.current=be||Lk());const We=await ue.current.prepareUpdate(H,N,Ae,Te),Xe=await Dk(N,X,We.operationId);if(Xe.ok){const ae=await Xe.clone().json().catch(()=>null);if(!he(ae))throw new Error("Durable cloud task mutation returned an invalid authoritative response.");await ue.current.confirmUpdate(We.fingerprint,We.operationId)}else await Kh(Xe)&&await ue.current.confirmUpdate(We.fingerprint,We.operationId);return Xe},[ie,be,H]),Pe=o.useCallback((N,X,Ae,Te,he)=>ve(N,X,Ae,he,ot=>!!ot&&typeof ot=="object"&&String(ot.id||"")===Te),[ve]);o.useEffect(()=>()=>{typeof window>"u"||(je.current!==null&&(window.clearTimeout(je.current),je.current=null),ye.current=null)},[]);const Le=o.useCallback((N=0)=>{if(!(k&&v==="local"&&C&&S)||typeof window>"u")return;const X=Math.max(0,N),Ae=Date.now()+X,Te=ye.current;if(je.current!==null){if(X<=0||Te!==null&&Te>=Ae)return;window.clearTimeout(je.current),je.current=null}ye.current=Ae,je.current=window.setTimeout(()=>{je.current=null,ye.current=null;const he=w();he&&(M.current=he,_(he))},X)},[k,v,C,S,w,M,_]),se=o.useCallback(async(N,X)=>{let Ae=await fetch(`/api/taskforce/deleted${N}`,X);return Ae.status===404&&(Ae=await fetch(`/api/taskforce/trash${N}`,X)),Ae},[]),V=async(N,X=!1,Ae={})=>{if(!Ae.skipConfirm&&!confirm("Move this task to Trash? You can restore it later."))return!1;const Te=X||t.some(he=>he.id===N);try{let he=null;if(D){const Xe=await E?.(N);if(!Xe){const ae="Task was not deleted because durable capture was unavailable.";return l(ae),y(ae,"error"),!1}if(Xe.state!=="disabled"){if(Xe.state==="rejected"||Xe.state==="failed"||Xe.state==="ambiguous"){const ae=Xe.state==="ambiguous"?"Task delete confirmation was interrupted. Retry the same delete to confirm it safely.":`Task was not deleted because durable capture rejected it${Xe.errorCode?` (${Xe.errorCode})`:""}.`;return l(ae),y(ae,"error"),!1}if(he=Xe.deleted||null,!he){const ae="Task delete was captured, but its Trash record was unavailable.";return l(ae),y(ae,"error"),!1}}}let ot=he?{deleted:he}:{};if(!he){const Xe=`/api/taskforce/task/${N}`,ae=e.find(Ie=>Ie.id===N)||t.find(Ie=>Ie.id===N),G=await ve(Xe,{method:"DELETE"},{},qp(ae,N),Ie=>!!Ie&&typeof Ie=="object"&&Ie.success===!0&&!!Ie.deleted&&typeof Ie.deleted=="object"&&String(Ie.deleted.taskId||"")===N);if(!G.ok){const Fe=(await G.json().catch(()=>({}))).error||"Failed to delete task.";return l(Fe),y(Fe,"error"),!1}ot=await G.json().catch(()=>({}))}const We=ot?.deleted&&typeof ot.deleted=="object"&&ot.deleted.taskSnapshot?{...ot.deleted,taskSnapshot:xo(ot.deleted.taskSnapshot)}:null;if(window.location.search.includes(N)){const Xe=new URL(window.location.href);Xe.searchParams.delete("task"),window.history.pushState({},"",Xe.toString())}if(Te?s(Xe=>Xe.filter(ae=>ae.id!==N)):a(Xe=>Xe.filter(ae=>ae.id!==N)),We){i(ae=>[We,...ae.filter(G=>G.taskId!==N)]);const Xe=String(We.deletedAt||"").trim();Number.isFinite(Date.parse(Xe))&&P.current.set(N,Xe)}else await g(!0),P.current.set(N,new Date().toISOString());if(R.current.add(N),!he&&k&&v==="local"&&C&&S){const Xe=w();M.current=Xe,_(Xe)}return r===N&&(c(),d("tasks")),l(""),y("Task moved to Trash.","info"),!0}catch(he){return console.error("Failed to delete task:",he),l("Failed to delete task."),y("Failed to delete task.","error"),!1}},W=o.useCallback(async(N,X,Ae={})=>{try{const Te=`/api/taskforce/deleted/${N}/restore`,he=String(X||"").trim();if(D){if(!he||!K)throw new Error("Durable local task restore requires the expected task identity and capture client.");const G=await K(N,he,Ae.restoreDestination||"previous");if(!G||G.state==="failed"||G.state==="ambiguous"||G.state==="rejected"||G.state==="disabled"){const Fe="Failed to capture task restore durably.";return l(Fe),Ae.silent||y(Fe,"error"),null}const Ie=G.task;if(!Ie||Ie.id!==he)throw new Error("Durable local task restore did not return the restored task.");return h(Ie),i(Fe=>Fe.filter(it=>it.id!==N&&it.taskId!==he)),R.current.delete(N),R.current.delete(he),P.current.delete(N),P.current.delete(he),l(""),Ae.silent||y(G.state==="accepted"?"Task restored from Trash.":"Task restored locally; cloud sync is pending.","info"),xo(Ie)}if(ie&&!he)throw new Error("Durable cloud task restore requires the expected task identity.");const ot=P.current.get(he)||P.current.get(N)||null,We=ie?await ve(Te,{method:"POST"},{},{taskId:he,updatedAt:ot,status:"deleted",isArchived:!1},G=>!G||typeof G!="object"?!1:String(G.id||"").trim()===he):await se(`/${N}/restore`,{method:"POST"});if(!We.ok){const Ie=(await We.json().catch(()=>({}))).error||"Failed to restore deleted task.";return l(Ie),Ae.silent||y(Ie,"error"),null}const Xe=await We.json().catch(()=>null);Xe?h(Xe):await f(!0);const ae=String(Xe?.id||"").trim();return i(G=>G.filter(Ie=>Ie.id!==N&&Ie.taskId!==he&&Ie.taskId!==ae)),R.current.delete(N),P.current.delete(N),ae&&(R.current.delete(ae),P.current.delete(ae)),Le(),l(""),Ae.silent||y(Xe?.isArchived===!0?"Task restored to Archived.":"Task restored to Active.","info"),Xe?xo(Xe):null}catch(Te){return console.error("Failed to restore deleted task:",Te),l("Failed to restore deleted task."),Ae.silent||y("Failed to restore deleted task.","error"),null}},[ie,D,ve,f,h,K,y,Le,se,i,l]),z=o.useCallback(async N=>{try{const X=await se(`/${N}`,{method:"DELETE"});if(!X.ok){const Te=(await X.json().catch(()=>({}))).error||"Failed to permanently delete deleted task.";return l(Te),y(Te,"error"),!1}return i(Ae=>Ae.filter(Te=>Te.id!==N&&Te.taskId!==N)),Le(),l(""),y("Deleted task permanently removed.","info"),!0}catch(X){return console.error("Failed to permanently delete deleted task:",X),l("Failed to permanently delete deleted task."),y("Failed to permanently delete deleted task.","error"),!1}},[y,Le,se,i,l]),fe=o.useCallback(async()=>{try{const N=await se("/empty",{method:"POST"});if(!N.ok){const he=(await N.json().catch(()=>({}))).error||"Failed to permanently delete deleted tasks.";return l(he),y(he,"error"),null}const X=await N.json().catch(()=>({})),Ae=Number(X?.deleted||0);return i([]),Le(),l(""),y(Ae===1?"Deleted task permanently removed.":`${Ae} deleted tasks permanently removed.`,"info"),Ae}catch(N){return console.error("Failed to empty deleted tasks:",N),l("Failed to permanently delete deleted tasks."),y("Failed to permanently delete deleted tasks.","error"),null}},[y,Le,se,i,l]),ke=o.useCallback((N,X,Ae,Te,he)=>{if(N.state==="disabled")return!1;if(N.state==="rejected"||N.state==="failed"){const ot=Te.find(Xe=>Xe.id===X)||he.find(Xe=>Xe.id===X);a(Xe=>la(Xe,ot,X,Ae)),s(Xe=>la(Xe,ot,X,Ae));const We=N.state==="failed"?"Task was not saved because durable local preparation failed. Retry the edit.":N.retryable?"Task was not saved because durable capture is busy. Retry the edit shortly.":`Task was not saved because durable capture rejected it${N.errorCode?` (${N.errorCode})`:""}.`;return l(We),y(We,"error"),!0}if("task"in N&&N.task&&h(N.task),N.state==="accepted")l("");else if(N.state==="pending")l(""),N.pendingReason!=="queued"&&y(N.pendingReason==="auth"?"Task saved locally. Sign in to finish cloud sync.":N.pendingReason==="sync-disabled"?"Task saved locally. Turn on sync to send it to cloud.":"Task saved locally. Cloud sync will retry automatically.","info");else{const ot=N.state==="blocked"?`Task saved locally, but cloud sync is blocked${N.errorCode?` (${N.errorCode})`:""}.`:"Task save confirmation was interrupted. Retry the same edit to confirm it safely.";l(ot),y(ot,"error")}return!0},[h,y,s,l,a]),Y=o.useCallback(async(N,X,Ae={})=>{const Te=Object.keys(Ae).some(G=>th.has(G)),he=Object.keys(Ae).filter(G=>!MN.has(G)&&!th.has(G));if(L&&he.length>0){const G=`Task status was not saved because the combined update contains unsupported fields: ${he.sort().join(", ")}.`;l(G),y(G,"error");return}const ot=new Date().toISOString(),We={...Ae,status:X,completedAt:X==="done"||X==="cancelled"?Ae.completedAt||ot:null,completed:X==="done",inProgress:X==="in-progress",readyForReview:X==="review",cancelled:X==="cancelled"},Xe=e,ae=t;if(a(G=>G.map(Ie=>Ie.id===N.id?{...Ie,...We}:Ie)),s(G=>G.map(Ie=>Ie.id===N.id?{...Ie,...We}:Ie)),$)try{const G=Object.prototype.hasOwnProperty.call(Ae,"assignee")?{kind:"set",value:Ae.assignee??null}:{kind:"preserve"},Ie=NN(Ae);delete Ie.assignee;const Fe=await $(N.id,{status:X,assigneeIntent:G,canceledReason:X==="cancelled"?Ae.canceledReason??null:null,metadataPatch:Ie});if(Fe&&ke(Fe,N.id,We,Xe,ae))return;if(!Fe&&L){const it=Xe.find(qe=>qe.id===N.id)||ae.find(qe=>qe.id===N.id);a(qe=>la(qe,it,N.id,We)),s(qe=>la(qe,it,N.id,We));const Me="Task status was not saved because durable capture was unavailable.";l(Me),y(Me,"error");return}}catch(G){console.error("Durable task status update failed before a conclusive result.",G);const Ie=Xe.find(it=>it.id===N.id)||ae.find(it=>it.id===N.id);a(it=>la(it,Ie,N.id,We)),s(it=>la(it,Ie,N.id,We));const Fe="Task save confirmation was interrupted. Retry the same edit to confirm it safely.";l(Fe),y(Fe,"error");return}if(U&&Te){const G=Xe.find(Fe=>Fe.id===N.id)||ae.find(Fe=>Fe.id===N.id);a(Fe=>la(Fe,G,N.id,We)),s(Fe=>la(Fe,G,N.id,We));const Ie="Task was not saved because durable status capture is required for this combined metadata update.";l(Ie),y(Ie,"error");return}try{const G={...Ae,status:X,completedAt:We.completedAt},Ie={method:"PATCH",headers:{"Content-Type":"application/json"},body:JSON.stringify(G)},Fe=await Pe(`/api/taskforce/task/${N.id}`,Ie,G,N.id,qp(N,N.id));if(!Fe.ok){const qe=(await Fe.json().catch(()=>({}))).error||"Failed to update task status.";l(qe),y(qe,"error"),a(Xe),s(ae);return}const it=await Fe.json().catch(()=>null);it?h(it):await f(!0),Le(),l("")}catch(G){console.error("Failed to update task status.",G),l("Failed to update task status."),y("Failed to update task status.","error"),a(Xe),s(ae)}},[t,U,ie,L,f,Pe,ke,h,$,y,Le,s,l,a,e]),we=o.useCallback(async(N,X)=>{const Ae=X.saveSource;if(X=Object.fromEntries(Object.entries(X).filter(([ge])=>ge!=="saveSource")),Object.keys(X).length===0)return!0;const Te=Z.current.get(N),he=e.find(ge=>ge.id===N)||t.find(ge=>ge.id===N),ot=Date.parse(String(Te?.updatedAt||"")),We=Date.parse(String(he?.updatedAt||"")),Xe=Te&&(!he||Number.isFinite(ot)&&(!Number.isFinite(We)||ot>=We))?Te:he;if(he&&Xe===he&&Te&&Z.current.delete(N),Xe&&(X=Object.fromEntries(Object.entries(X).filter(([ge,_e])=>!DN(Xe[ge],_e))),Object.keys(X).length===0))return!0;if(X.status){const ge=e.find(_e=>_e.id===N)||t.find(_e=>_e.id===N);if(ge){await Y(ge,X.status,X);return}if(L){const _e="Task status was not saved because the current task could not be resolved safely.";l(_e),y(_e,"error");return}}const ae=e,G=t;a(ge=>ge.map(_e=>_e.id===N?{..._e,...X}:_e)),s(ge=>ge.map(_e=>_e.id===N?{..._e,...X}:_e));const Ie=Object.fromEntries(Object.entries(X).filter(([ge])=>th.has(ge)));let Fe=Object.fromEntries(Object.entries(X).filter(([ge])=>!th.has(ge)));const it=Object.keys(Ie).length>0;let Me=Object.keys(Fe).length>0,qe=!1;if(it&&b)try{const ge=Ae?await b(N,Ie,{saveSource:Ae}):await b(N,Ie);if(ge&&ge.state!=="disabled"){if(ge.state==="rejected"||ge.state==="failed"){const _e=ae.find(Ge=>Ge.id===N)||G.find(Ge=>Ge.id===N);a(Ge=>la(Ge,_e,N,X)),s(Ge=>la(Ge,_e,N,X));const Be=ge.state==="failed"?"Task was not saved because durable local preparation failed. Retry the edit.":ge.retryable?"Task was not saved because durable capture is busy. Retry the edit shortly.":`Task was not saved because durable capture rejected it${ge.errorCode?` (${ge.errorCode})`:""}.`;return l(Be),y(Be,"error"),!1}if(qe=!0,"task"in ge&&ge.task&&h(ge.task),ge.state==="accepted")l("");else if(ge.state==="pending")l(""),ge.pendingReason!=="queued"&&y(ge.pendingReason==="auth"?"Task saved locally. Sign in to finish cloud sync.":ge.pendingReason==="sync-disabled"?"Task saved locally. Turn on sync to send it to cloud.":"Task saved locally. Cloud sync will retry automatically.","info");else{const _e=ge.state==="blocked"?`Task saved locally, but cloud sync is blocked${ge.errorCode?` (${ge.errorCode})`:""}.`:"Task save confirmation was interrupted. Retry the same edit to confirm it safely.";l(_e),y(_e,"error")}if(ge.state==="ambiguous"){if(Me){const _e=ae.find(Be=>Be.id===N)||G.find(Be=>Be.id===N);a(Be=>la(Be,_e,N,Fe)),s(Be=>la(Be,_e,N,Fe))}return!1}if(!Me)return!0}else if(U){const _e=ae.find(Ge=>Ge.id===N)||G.find(Ge=>Ge.id===N);a(Ge=>la(Ge,_e,N,X)),s(Ge=>la(Ge,_e,N,X));const Be="Task was not saved because durable metadata capture was unavailable.";return l(Be),y(Be,"error"),!1}}catch(ge){if(console.error("Durable task metadata update failed before a conclusive result.",ge),Me){const Be=ae.find(Ge=>Ge.id===N)||G.find(Ge=>Ge.id===N);a(Ge=>la(Ge,Be,N,Fe)),s(Ge=>la(Ge,Be,N,Fe))}const _e="Task save confirmation was interrupted. Retry the same edit to confirm it safely.";return l(_e),y(_e,"error"),!1}else if(it&&U){const ge=ae.find(Be=>Be.id===N)||G.find(Be=>Be.id===N);a(Be=>la(Be,ge,N,X)),s(Be=>la(Be,ge,N,X));const _e="Task was not saved because durable metadata capture was unavailable.";return l(_e),y(_e,"error"),!1}if(it&&!qe&&(Fe={...Ie,...Fe},Me=!0),!Me)return!0;try{const ge={...Fe,...Ae?{saveSource:Ae}:{}},_e={method:"PATCH",headers:{"Content-Type":"application/json"},body:JSON.stringify(ge)},Be=await Pe(`/api/taskforce/task/${N}`,_e,ge,N,qp(ae.find(F=>F.id===N)||G.find(F=>F.id===N),N));if(!Be.ok){const Ne=(await Be.json().catch(()=>({}))).error||`Failed to update task ${N}.`;l(Ne),y(Ne,"error");const Ce=ae.find(ut=>ut.id===N)||G.find(ut=>ut.id===N);return a(ut=>la(ut,Ce,N,Fe)),s(ut=>la(ut,Ce,N,Fe)),!1}const Ge=await Be.json().catch(()=>null);return h(Ge),Le(X.attachments!==void 0?150:0),l(""),!0}catch(ge){console.error("Failed to update task",ge);const _e=`Failed to update task ${N}.`;l(_e),y(_e,"error");const Be=ae.find(Ge=>Ge.id===N)||G.find(Ge=>Ge.id===N);return a(Ge=>la(Ge,Be,N,Fe)),s(Ge=>la(Ge,Be,N,Fe)),!1}},[e,t,y,h,b,Le,Y,U,L,Pe]),q=async N=>{const X=N.status==="done"?"task":"done";await Y(N,X)},le=async N=>{const X=N.status==="cancelled"?"task":"cancelled";await Y(N,X)},$e=async N=>{const X=N.status==="in-progress"?"task":"in-progress";await Y(N,X)},re=async N=>{const X=N.status==="review"?"task":"review";await Y(N,X)},de=async N=>{if(I)try{const X=await I(N.id,{mutationKind:"archive",cancellation:N.status==="cancelled",reason:N.status==="cancelled"?N.canceledReason??null:null});if(X&&ke(X,N.id,{},e,t)){const Ae=X.state!=="rejected"&&X.state!=="failed"&&X.state!=="ambiguous";return r===N.id&&Ae&&(c(),d("tasks")),Ae}if(!X&&L)throw new Error("Durable task archive activation returned no result.")}catch(X){console.error("Durable task archive failed before a conclusive result.",X);const Ae="Task archive confirmation was interrupted. Retry the same action to confirm it safely.";return l(Ae),y(Ae,"error"),!1}try{const Ae=N.status==="cancelled"?"cancel":"complete",Te=`/api/taskforce/task/${N.id}/${Ae}`,he=await ve(Te,{method:"POST"},{},qp(N,N.id),ot=>!!ot&&typeof ot=="object"&&String(ot.id||"")===N.id);if(he.ok){const ot=await he.json().catch(()=>null),We=[];if(ot&&typeof ot=="object"&&We.push(ot),We.length>0){for(const ae of We)h(ae);Le()}else p();const Xe=new Set(We.map(ae=>String(ae?.id||"").trim()).filter(ae=>ae.length>0));return r&&Xe.has(r)&&(c(),d("tasks")),!0}else{const We=(await he.json().catch(()=>({}))).error||"Failed to archive task.";return l(We),y(We,"error"),!1}}catch(X){return console.error("Failed to archive",X),l("Failed to archive task."),y("Failed to archive task.","error"),!1}},He=async()=>{const N=e.filter(X=>X.status==="done"||X.status==="cancelled");if(N.length!==0&&confirm(`Archive ${N.length} completed/cancelled tasks?`)){if(I){let X=!1,Ae=0;for(const Te of N)try{const he=await I(Te.id,{mutationKind:"archive",cancellation:Te.status==="cancelled",reason:Te.status==="cancelled"?Te.canceledReason??null:null});if(!he||he.state==="disabled"){if(!X&&(!L||he?.state==="disabled"))break;const ot="Bulk archive stopped safely because durable capture became unavailable.";l(ot),y(ot,"error");return}if(X=!0,ke(he,Te.id,{},e,t)){if(he.state==="rejected"||he.state==="failed")return;Ae+=1}}catch(he){console.error("Durable bulk archive confirmation was interrupted.",he);const ot="Bulk archive stopped safely. Retry to confirm the remaining tasks.";l(ot),y(ot,"error");return}if(X){y(`${Ae} tasks archived`,"info"),l("");return}}try{const X=await fetch("/api/taskforce/bulk-archive",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({ids:N.map(Ae=>Ae.id)})});if(X.ok){const Ae=await X.json(),Te=Array.isArray(Ae?.results?.archived)?Ae.results.archived:[];if(Te.length>0){for(const he of Te)h(he);Le()}else a(he=>he.filter(ot=>!["done","cancelled"].includes(ot.status))),p();y(`${Ae.archived||N.length} tasks archived`,"info"),l("")}else{const Te=(await X.json().catch(()=>({}))).error||"Failed to bulk archive tasks.";l(Te),y(Te,"error")}}catch(X){console.error("Failed to bulk archive",X),l("Failed to bulk archive tasks."),y("Failed to bulk archive tasks.","error")}}},ce=async N=>{if(I)try{const X=await I(N,{mutationKind:"unarchive"});if(X&&ke(X,N,{},e,t)){X.state!=="rejected"&&X.state!=="failed"&&y("Task restored from archive.","info");return}if(!X&&L)throw new Error("Durable task unarchive activation returned no result.")}catch(X){console.error("Durable task unarchive failed before a conclusive result.",X);const Ae="Task restore confirmation was interrupted. Retry the same action to confirm it safely.";l(Ae),y(Ae,"error");return}try{const X=`/api/taskforce/task/${N}/unarchive`,Ae=t.find(he=>he.id===N)||e.find(he=>he.id===N),Te=await ve(X,{method:"POST"},{},qp(Ae,N),he=>!!he&&typeof he=="object"&&String(he.id||"")===N);if(Te.ok){const he=await Te.json().catch(()=>null);he?(h(he),Le()):(s(ot=>ot.filter(We=>We.id!==N)),await f(!0),Le()),l(""),y("Task restored from archive.","info")}}catch(X){console.error("Failed to unarchive",X),l("Failed to unarchive task."),y("Failed to unarchive task.","error")}},pe=o.useCallback(async(N,X="previous",Ae)=>{const Te=Array.from(new Map(N.map(ae=>[ae.id,ae])).values()),he={requested:Te.length,completed:0,succeeded:[],failed:[]},ot=()=>Ae?.({...he,succeeded:[...he.succeeded],failed:[...he.failed]}),We=(ae,G,Ie)=>{he.failed.push({deletedRecordId:ae.id,taskId:ae.taskId,title:ae.taskSnapshot.title,message:G,...Ie?{code:Ie}:{}}),he.completed+=1,ot()},Xe=(ae,G)=>{h(G),i(Ie=>Ie.filter(Fe=>Fe.id!==ae.id&&Fe.taskId!==G.id)),R.current.delete(ae.id),R.current.delete(ae.taskId),P.current.delete(ae.id),P.current.delete(ae.taskId),he.succeeded.push(ae),he.completed+=1,ot()};if(D)for(const ae of Te){const G=await W(ae.id,ae.taskId,{silent:!0,restoreDestination:X});G?Xe(ae,G):We(ae,"Failed to capture or confirm the durable restore.")}else{for(let ae=0;ae<Te.length;ae+=50){const G=Te.slice(ae,ae+50),Ie=G.map(it=>it.id),Fe=X==="archive"?{ids:Ie,restoreDestination:X}:{ids:Ie};try{let it,Me=null;ie?(ue.current||(ue.current=be||Lk()),Me=await ue.current.prepareUpdate(H,"/api/taskforce/deleted/restore-batch",Fe,X==="archive"?{deletedRecordIds:Ie,restoreDestination:X}:{deletedRecordIds:Ie}),it=await Dk("/api/taskforce/deleted/restore-batch",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify(Fe)},Me.operationId)):it=await se("/restore-batch",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify(Fe)});const qe=await it.json().catch(()=>({}));if(Me&&(it.ok||await Kh(it))&&await ue.current?.confirmUpdate(Me.fingerprint,Me.operationId),!it.ok){const Be=String(qe.error||"Failed to restore the selected Trash records.");G.forEach(Ge=>We(Ge,Be));continue}const ge=new Map(G.map(Be=>[Be.id,Be])),_e=new Set;for(const Be of qe.results||[]){const Ge=String(Be.deletedRecordId||"").trim(),F=ge.get(Ge);if(!F||!Be.task)continue;const Ne=xo(Be.task);Ne.id===F.taskId&&(_e.add(Ge),Xe(F,Ne))}for(const Be of qe.errors||[]){const Ge=String(Be.id||"").trim(),F=ge.get(Ge);!F||_e.has(Ge)||(_e.add(Ge),We(F,String(Be.message||"Failed to restore the deleted task."),Be.code?String(Be.code):void 0))}for(const Be of G)_e.has(Be.id)||We(Be,"The restore response did not include this deleted record.")}catch(it){const Me=it instanceof Error?it.message:"The restore request was interrupted.";G.forEach(qe=>We(qe,Me))}}Le()}if(he.failed.length>0){const ae=`${he.succeeded.length} restored; ${he.failed.length} failed and remain selected.`;l(ae),y(ae,"error")}else he.succeeded.length>0&&(l(""),y(X==="archive"?`${he.succeeded.length} task${he.succeeded.length===1?"":"s"} restored to Archive.`:`${he.succeeded.length} task${he.succeeded.length===1?"":"s"} restored from Trash.`,"info"));return he},[D,ie,W,h,y,Le,se,i,l,be,R,P,H]);return{copiedId:me,handleDelete:V,handleUpdateTask:we,handleSetStatus:Y,handleToggleComplete:q,handleToggleCancel:le,handleToggleInProgress:$e,handleToggleReview:re,handleArchiveTask:de,handleBulkArchive:He,handleUnarchive:ce,handleRestoreDeletedTask:W,handleRestoreSelectedDeletedTasks:pe,handlePermanentlyDeleteDeletedTask:z,handleEmptyDeletedTasks:fe,handleCopyId:(N,X)=>{N.stopPropagation(),navigator.clipboard.writeText(X),Ve(X),Re.current!==null&&window.clearTimeout(Re.current),Re.current=window.setTimeout(()=>{Re.current=null,Ve(null)},2e3)},queueWorkspaceSyncFromAuthoritativeTaskState:Le}}const ON=LN;function rh(e){return e==="/api/taskforce/auth/runtime-config"||e==="/api/taskforce/sync/workspace/apply-local"||e==="/api/taskforce/sync/workspace/repair-startup"}function BN(e){try{return typeof window>"u"?null:typeof e=="string"?new URL(e,window.location.origin):e instanceof URL?e:typeof Request<"u"&&e instanceof Request?new URL(e.url,window.location.origin):null}catch{return null}}function WN({currentWorkspaceIdRef:e,resolveApiUrl:t,runtimeMode:r}){o.useEffect(()=>{if(typeof window>"u"||typeof window.fetch!="function")return;const a=window.fetch.bind(window),s=i=>{if(typeof i=="string")return r!=="cloud"?i:i.startsWith("/api/taskforce")&&!rh(i)?t(i):i;if(i instanceof URL)return r!=="cloud"?i:i.origin===window.location.origin&&i.pathname.startsWith("/api/taskforce")?rh(i.pathname)?i:new URL(t(`${i.pathname}${i.search}${i.hash}`)):i;if(typeof Request<"u"&&i instanceof Request){if(r!=="cloud")return i;const l=new URL(i.url,window.location.origin);if(l.origin===window.location.origin&&l.pathname.startsWith("/api/taskforce"))return rh(l.pathname)?i:t(`${l.pathname}${l.search}${l.hash}`)}return i};return window.fetch=((i,l)=>{const c=s(i),d=BN(c);if(!!!(d&&d.pathname.startsWith("/api/taskforce")&&!rh(d.pathname)))return a(c,l);const p=String(e.current||"").trim();if(typeof Request<"u"&&c instanceof Request){const h=new Headers(c.headers);l?.headers&&new Headers(l.headers).forEach((v,C)=>h.set(C,v)),p&&p!=="default"&&!h.has("x-taskforce-workspace-id")&&(h.set("x-taskforce-workspace-id",p),h.set("x-taskforce-workspace-authoritative","1"));const y=new Request(c,{...l,headers:h});return a(y)}const g=new Headers(l?.headers);return p&&p!=="default"&&!g.has("x-taskforce-workspace-id")&&(g.set("x-taskforce-workspace-id",p),g.set("x-taskforce-workspace-authoritative","1")),a(c,{...l,headers:g})}),()=>{window.fetch=a}},[e,t,r])}const lf=12e3,$N=3e4,FN=2e4;function nh(e){return e==="cloud"?$N:lf}function Ob(){return typeof performance<"u"?performance.now():Date.now()}function UN({runtimeConfigReady:e,shouldProbeCloudAuth:t,authSessionResolved:r,resolveCloudAuthUrl:a,authOnlyCloudMode:s,authRequiredError:i,runtimeMode:l,workspaceSelectionScope:c,markBootstrapPhase:d,markBootstrapStalled:f,setRuntimeMode:p,setAuthRequiredForApi:g,setIsAuthenticated:h,setAuthUserId:y,setAuthWorkspaceId:k,setAuthUserEmail:v,setAuthUserDisplayName:C,setAuthUserAvatarUrl:S,setUserGlobalSyncStatus:w,setUserGlobalSyncError:_,setHasBetaAccess:M,setAvailableWorkspaces:R,setHydratedWorkspaceRole:P,setAssigneeOptions:b,setAuthBlocked:$,setAuthSessionResolved:I,setError:E,applyResolvedWorkspaceId:K,readPersistedWorkspaceId:U,authSessionRequestRef:L,authSessionEpochRef:D,authSessionLastCheckedAtRef:ie,authSessionLastResultRef:H,isLoopbackHost:be,setAuthStateReadyRefs:Z}){const me=o.useCallback(async Re=>{const je=Re?.force===!0;if(d("auth"),!e)return H.current;if(!t)return p("local"),g(!1),h(!1),y("anonymous"),k(""),rf(null),v(""),C(""),S(""),w("disconnected"),_(null),M(!0),R([]),P(null),b(el()),$(!1),I(!0),Z(!1,!0,!1),H.current=!1,ie.current=Date.now(),!1;const ye=a("/api/taskforce/auth/session"),ue=Date.now();if(!je&&L.current)return L.current;if(!je&&r&&ue-ie.current<1500)return H.current;const ve=++D.current;let Pe=null;return Pe=(async()=>{const Le=Ob(),se=new AbortController,V=typeof window<"u"?window.setTimeout(()=>se.abort(),FN):null,W=()=>D.current!==ve,z=(fe,ke)=>{hr(fe,{durationMs:Math.max(0,Math.round(Ob()-Le)),force:je,sessionUrl:ye,...ke})};try{const fe=await fetch(ye,{method:"GET",credentials:"include",mode:"cors",signal:se.signal});if(W())return H.current;if(fe.status===429)return I(!0),Z(H.current,!0,!1),z("auth_session_rate_limited",{status:fe.status}),H.current;if(!fe.ok)return W()?H.current:(be&&rf(null),I(!0),Z(!1,!0,!1),H.current=!1,z("auth_session_request_failed",{status:fe.status}),!1);const ke=await fe.json();if(W())return H.current;const Y=!!ke.authRequiredForApi,we=!!ke.authenticated,q=we?ke.betaAccess!==!1:!0,le=typeof ke.workspaceId=="string"&&ke.workspaceId.trim().length>0?ke.workspaceId.trim():"",$e=typeof ke.userId=="string"&&ke.userId.trim().length>0?ke.userId.trim():"anonymous",re=typeof ke.email=="string"&&ke.email.trim().length>0?ke.email.trim().toLowerCase():"",de=typeof ke.displayName=="string"?ke.displayName.trim():"",He=typeof ke.avatarUrl=="string"?ke.avatarUrl.trim():"",ce=l==="local",pe=l==="local"||s,xe=s||ce?!1:Y;return g(xe),h(we),y(we?$e:"anonymous"),k(we?le:""),be&&rf(we?$e:null),v(we?re:""),C(we?de:""),S(we?He:""),we&&E(N=>N===i?"":N),w(we?"idle":"disconnected"),_(null),M(q),pe||K(le||U(c)||"default",{preserveNonDefaultDefault:!0}),$(s||ce?!1:Y&&!we),I(!0),Z(we,!0,xe),H.current=we,we&&d("ready"),z("auth_session_resolved",{status:fe.status,authenticated:we,workspaceId:we?le:"",userId:we?$e:"anonymous",authRequiredForApi:xe}),we}catch(fe){return W()||(be&&rf(null),I(!0),Z(!1,!0,!1),H.current=!1,f("Unable to verify your session."),z("auth_session_exception",{error:fe instanceof Error?fe.message:String(fe)})),H.current}finally{V!==null&&typeof window<"u"&&window.clearTimeout(V),W()||(ie.current=Date.now()),Pe&&L.current===Pe&&(L.current=null)}})(),L.current=Pe,Pe},[e,t,r,a,s,i,l,c,d,f,p,g,h,y,k,v,C,S,w,_,M,R,P,b,$,I,E,K,U,L,D,ie,H,be,Z]),Ve=l==="local"&&be&&t?kv():"";return o.useEffect(()=>{Ve&&(h(!0),I(!0),y(Ve),Z(!0,!0,!1),H.current=!0)},[Ve,I,Z,y,h,H]),o.useEffect(()=>{if(l!=="local"||!t||typeof window>"u")return;const Re=()=>{me()},je=()=>{document.visibilityState==="visible"&&Re()};window.addEventListener("focus",Re),window.addEventListener("online",Re),document.addEventListener("visibilitychange",je);const ye=window.setInterval(Re,3e4);return()=>{window.removeEventListener("focus",Re),window.removeEventListener("online",Re),document.removeEventListener("visibilitychange",je),window.clearInterval(ye)}},[l,t,me]),{checkAuthSession:me}}function zN(e){const t=e.runtimeMode==="cloud",r=!!(e.shouldGateProtectedApiCalls&&t&&!e.authSessionResolved),a=!!(e.shouldGateProtectedApiCalls&&t&&e.authSessionResolved&&e.authRequiredForApi&&!e.isAuthenticated);return{shouldDeferProtectedApiCalls:r,shouldBlockProtectedApiCalls:a,canCallProtectedApi:!(r||a)}}function HN(e){return!!(!e.isOpen||!e.canCallProtectedApi||e.authBlocked||e.authRequiredForApi&&!e.isAuthenticated)}function VN(e){return!!(e.shouldGateProtectedApiCalls&&!e.authSessionResolved||e.authRequiredForApi&&!e.isAuthenticated)}function _n(){return typeof performance<"u"?performance.now():Date.now()}function GN(e){const{shouldDeferProtectedApiCalls:t,shouldBlockProtectedApiCalls:r,getWorkspaceRequestState:a,isWorkspaceRequestStale:s,isWorkspaceEpochStale:i,isAbortError:l,isBootstrapTimeoutError:c,fetchWithTimeout:d,handleUnauthorized:f,applyBootstrapConfig:p,loadPersistedUiState:g,fetchBuildInfo:h,markBootstrapPhase:y,markBootstrapStalled:k,fetchInitiativeTemplates:v,setReferenceDataLoaded:C,setCustomCategories:S,setCustomTypes:w,setPriorities:_,setTaxonomies:M,setTaxonomyDisplayLabels:R,setConfigLoaded:P,hasLoadedUiStateRef:b,currentWorkspaceIdRef:$,referenceDataRequestRef:I,referenceDataAbortRef:E,bootstrapConfigAbortRef:K,workspaceListAbortRef:U,assigneeOptionsAbortRef:L,workspaceListHydratedRef:D,setAvailableWorkspaces:ie,runtimeMode:H,applyResolvedWorkspaceId:be,workspaceSwitchingEnabled:Z,authSessionResolved:me,isAuthenticated:Ve,authUserId:Re,authUserAvatarUrl:je,setHydratedWorkspaceRole:ye,setAssigneeOptions:ue,setAssigneeOptionsLoaded:ve,commitCurrentWorkspaceId:Pe,currentWorkspaceId:Le,workspaceSelectionScope:se,abortWorkspaceScopedRequests:V,setWorkspaceBootstrapPending:W,checkAuthSession:z,lastConfigRefreshKeyRef:fe,lastAssigneeOptionsLoadKeyRef:ke,lastWorkspaceSyncStateLoadKeyRef:Y,lastTaskSurfaceLoadKeyRef:we,lastSettingsSurfaceLoadKeyRef:q,isOpen:le,activeTab:$e,showArchive:re,taskScope:de,settingsSection:He,workspaceBootstrapPending:ce,fetchTasks:pe,fetchPlanningEntities:xe,refreshTaskCollections:N,loadWorkspaceSyncState:X,switchLocalCoordinatorWorkspace:Ae,hasBootstrappedDataRef:Te}=e,he=o.useCallback(async Me=>{const qe=Me?.ignoreAuthGuard===!0,ge=Me?.force===!0;if(!qe&&(t||r)){hr("bootstrap_reference_data_skipped",{reason:r?"auth_blocked":"auth_deferred",runtimeMode:H,workspaceId:String(a().workspaceId||"").trim()||"default",force:ge});return}const _e=a(),Be=String(_e.workspaceId||"").trim()||"default";if(!(H!=="cloud"||!me||!Ve||Be!==""&&Be!=="default")){hr("bootstrap_reference_data_skipped",{reason:"workspace_unresolved",runtimeMode:H,workspaceId:Be,force:ge});return}if(!ge&&I.current?.workspaceId===_e.workspaceId){hr("bootstrap_reference_data_reused",{workspaceId:Be,force:ge}),await I.current.promise;return}C(!1);const F=_n(),Ne=new AbortController;E.current=Ne;const Ce=(async()=>{await Promise.allSettled([(async()=>{let ut="empty-taxonomy-state";const mt=await fetch("/api/taskforce/taxonomy-state",{signal:Ne.signal});if(!mt.ok)return;const Ue=await mt.json().catch(()=>({}));if(nC(Ue))ut="taxonomy-state";else{ut="fallback-endpoints";const[kt,rt,Ht,lr]=await Promise.all([fetch("/api/taskforce/categories",{signal:Ne.signal}),fetch("/api/taskforce/types",{signal:Ne.signal}),fetch("/api/taskforce/priorities",{signal:Ne.signal}),fetch("/api/taskforce/taxonomies",{signal:Ne.signal})]),[rr,wr,st,zt]=await Promise.all([kt.ok?kt.json().catch(()=>({})):Promise.resolve({}),rt.ok?rt.json().catch(()=>({})):Promise.resolve({}),Ht.ok?Ht.json().catch(()=>({})):Promise.resolve({}),lr.ok?lr.json().catch(()=>({})):Promise.resolve({})]);Ue.categories=rr.categories,Ue.types=wr.types,Ue.priorities=st.priorities,Ue.taxonomies=zt.taxonomies}const wt=WR(Ue);if(s(_e)){hr("bootstrap_reference_data_stale_drop",{workspaceId:Be,source:ut});return}wt.categories.length>0&&S(wt.categories),wt.types.length>0&&w(wt.types),wt.priorities.length>0&&_(wt.priorities),M(wt.taxonomies),R(wt.displayLabels||{}),hr("bootstrap_reference_data_source",{workspaceId:Be,source:ut,categories:wt.categories.length,types:wt.types.length,priorities:wt.priorities.length,taxonomies:wt.taxonomies.length})})(),v()]),!s(_e)&&(C(!0),hr("bootstrap_reference_data_loaded",{durationMs:Math.max(0,Math.round(_n()-F)),workspaceId:Be,force:ge}))})();I.current={workspaceId:_e.workspaceId,promise:Ce};try{await Ce}finally{I.current?.promise===Ce&&(I.current=null),E.current===Ne&&(E.current=null)}},[me,v,a,Ve,s,E,I,H,S,w,_,C,M,R,r,t]),ot=o.useCallback(async Me=>{if(!(Me?.ignoreAuthGuard===!0)&&(t||r))return;y("config");const ge=a(),_e=_n(),Be=new AbortController;K.current=Be;try{const Ge=await d("/api/taskforce/config",void 0,nh(H),{signal:Be.signal});if(i(ge))return;if(Ge.status===401){f(),P(!0);return}let F="";if(Ge.ok){const Ne=await Ge.json();if(i(ge))return;F=typeof Ne?.workspaceId=="string"&&Ne.workspaceId.trim().length>0?Ne.workspaceId.trim():"",p(Ne)}if(i(ge)){const Ne=String($.current||"default").trim()||"default";if(!F||Ne!==F)return}if(b.current||(b.current=!0,await g(F||ge.workspaceId)),i(ge)){const Ne=String($.current||"default").trim()||"default";if(!F||Ne!==F)return}P(!0),y("ready"),hr("bootstrap_config_loaded",{durationMs:Math.max(0,Math.round(_n()-_e)),status:Ge.status,workspaceId:F||ge.workspaceId}),h()}catch(Ge){if(l(Ge)||i(ge))return;b.current||(b.current=!0,await g(ge.workspaceId)),k(c(Ge)?"Startup checks timed out.":"Unable to finish startup checks."),P(!0),hr("bootstrap_config_failed",{durationMs:Math.max(0,Math.round(_n()-_e)),workspaceId:ge.workspaceId,error:Ge instanceof Error?Ge.message:String(Ge)})}finally{K.current===Be&&(K.current=null)}},[p,K,$,h,d,a,f,b,l,c,i,g,y,k,H,P,r,t]),We=o.useCallback(async Me=>{await ot(Me),await he(Me)},[ot,he]),Xe=o.useCallback(async()=>{if(!Z)return ie([]),D.current=!1,{success:!0,workspaces:[]};const Me=a(),qe=_n(),ge=new AbortController;U.current=ge;try{const _e=await d("/api/taskforce/workspaces",{method:"GET",credentials:"include"},nh(H),{signal:ge.signal});if(i(Me))return{success:!1,error:"Workspace changed while loading workspaces."};if(_e.status===401)return ie([]),D.current=!1,{success:!1,error:"Authentication required."};const Be=await _e.json().catch(()=>({}));if(i(Me))return{success:!1,error:"Workspace changed while loading workspaces."};if(!_e.ok||Be?.success===!1)return ie([]),D.current=!1,{success:!1,error:Be?.error||`Failed to load workspaces (${_e.status})`};const Ge=Array.isArray(Be?.workspaces)?Be.workspaces.map(F=>({id:String(F?.id||"").trim(),name:String(F?.name||"").trim(),role:String(F?.role||"member").trim().toLowerCase(),slug:typeof F?.slug=="string"?F.slug:null,description:typeof F?.description=="string"?F.description:null,status:typeof F?.status=="string"?F.status:"",betaAccess:F?.betaAccess===!0})).filter(F=>F.id&&F.name):[];return ie(Ge),D.current=!0,H!=="local"&&typeof Be?.currentWorkspaceId=="string"&&Be.currentWorkspaceId.trim().length>0&&be(Be.currentWorkspaceId.trim(),{preserveNonDefaultDefault:!0}),hr("bootstrap_workspaces_loaded",{durationMs:Math.max(0,Math.round(_n()-qe)),workspaceId:Me.workspaceId,count:Ge.length,status:_e.status}),{success:!0,workspaces:Ge}}catch(_e){return c(_e)&&k("Startup checks timed out."),ie([]),D.current=!1,hr("bootstrap_workspaces_failed",{durationMs:Math.max(0,Math.round(_n()-qe)),workspaceId:Me.workspaceId,error:_e instanceof Error?_e.message:String(_e)}),{success:!1,error:l(_e)?"Workspace list request aborted.":"Failed to load workspaces."}}finally{U.current===ge&&(U.current=null)}},[be,d,a,l,c,i,k,H,ie,U,D,Z]),ae=o.useCallback(async()=>{const Me=a(),qe=_n(),ge=new AbortController;L.current=ge,ve(!1);try{const[_e,Be]=await Promise.all([d("/api/taskforce/workspace/assignee-options",{method:"GET",credentials:"include"},nh(H),{signal:ge.signal}),me&&Ve?d("/api/taskforce/auth/workspace-members",{method:"GET",credentials:"include"},nh(H),{signal:ge.signal}).catch(()=>null):Promise.resolve(null)]);if(s(Me))return{success:!1,error:"Workspace changed while loading assignee options."};if(_e.status===401)return ue(el()),ve(!0),{success:!1,error:"Authentication required."};const Ge=await _e.json().catch(()=>({}));if(s(Me))return{success:!1,error:"Workspace changed while loading assignee options."};if(!_e.ok)return ue(el()),ve(!0),{success:!1,error:Ge?.error||`Failed to load assignee options (${_e.status})`};const F=String(Re||"").trim(),Ne=String(je||"").trim(),Ce=(rt,Ht)=>{const lr=typeof rt?.avatarUrl=="string"&&rt.avatarUrl.trim().length>0?rt.avatarUrl.trim():"";if(lr)return lr;const rr=String(rt?.userId||Ht||"").trim();return F&&rr===F&&Ne?Ne:null},ut=Array.isArray(Ge?.assignees)?Ge.assignees:[],mt=ut.map(rt=>{const Ht=String(rt?.value||"").trim(),lr=String(rt?.kind||"").trim().toLowerCase();return Ht?lr==="agent"||lr==="ai"?{value:Ht,label:String(rt?.label||Ht).trim()||Ht,icon:String(rt?.icon||"Bot"),color:String(rt?.color||"#8b5cf6"),kind:"agent",avatarUrl:typeof rt?.avatarUrl=="string"&&rt.avatarUrl.trim().length>0?rt.avatarUrl.trim():null,avatarRevision:Number.isFinite(Number(rt?.avatarRevision))?Math.max(0,Math.floor(Number(rt.avatarRevision))):null,avatarUpdatedAt:typeof rt?.avatarUpdatedAt=="string"&&rt.avatarUpdatedAt.trim().length>0?rt.avatarUpdatedAt.trim():null,username:typeof rt?.username=="string"&&rt.username.trim().length>0?rt.username.trim():null,surfaceType:typeof rt?.surfaceType=="string"&&rt.surfaceType.trim().length>0?rt.surfaceType.trim():null,providerMetadata:rt?.providerMetadata&&typeof rt.providerMetadata=="object"&&!Array.isArray(rt.providerMetadata)?rt.providerMetadata:null,archivedAt:typeof rt?.archivedAt=="string"&&rt.archivedAt.trim().length>0?rt.archivedAt.trim():null,createdAt:typeof rt?.createdAt=="string"&&rt.createdAt.trim().length>0?rt.createdAt.trim():null,updatedAt:typeof rt?.updatedAt=="string"&&rt.updatedAt.trim().length>0?rt.updatedAt.trim():null}:lr==="member"||lr==="human"?{value:Ht,label:String(rt?.label||Ht).trim()||Ht,icon:String(rt?.icon||"User"),color:String(rt?.color||"#22c55e"),kind:"member",avatarUrl:Ce(rt,Ht)}:null:null}).filter(Boolean),Ue=ut.map(rt=>({userId:String(rt?.userId||"").trim(),email:String(rt?.email||"").trim().toLowerCase(),displayName:typeof rt?.displayName=="string"?rt.displayName:null,avatarUrl:Ce(rt)})).filter(rt=>rt.userId);let wt=Ue;if(Be?.ok){const rt=await Be.json().catch(()=>({})),Ht=Array.isArray(rt?.users)?rt.users:[],lr=Ht.find(st=>String(st?.userId||"").trim()===F),rr=String(lr?.role||"").trim().toLowerCase();rr==="owner"||rr==="admin"||rr==="member"||rr==="read-only"?ye(rr):!Z&&Ht.length===0&&ye(null);const wr=Ht.map(st=>({userId:String(st?.userId||"").trim(),email:String(st?.email||"").trim().toLowerCase(),displayName:typeof st?.displayName=="string"?st.displayName:null,avatarUrl:Ce(st)})).filter(st=>st.userId);wt=Array.from(new Map([...Ue,...wr].map(st=>[st.userId,st])).values())}else!Z&&!Ue.length&&ye(null);const kt=_u([...mt,...q0(wt).filter(rt=>rt.kind==="member")]);return s(Me)?{success:!1,error:"Workspace changed while loading assignee options."}:(ue(kt),ve(!0),hr("bootstrap_assignee_options_loaded",{durationMs:Math.max(0,Math.round(_n()-qe)),workspaceId:Me.workspaceId,count:kt.length}),{success:!0})}catch(_e){return s(Me)||(ue(el()),ve(!0)),hr("bootstrap_assignee_options_failed",{durationMs:Math.max(0,Math.round(_n()-qe)),workspaceId:Me.workspaceId,error:_e instanceof Error?_e.message:String(_e)}),{success:!1,error:l(_e)?"Assignee options request aborted.":"Failed to load assignee options."}}finally{L.current===ge&&(L.current=null)}},[L,me,je,Re,d,a,l,Ve,s,H,ue,ve,ye,Z]),G=o.useCallback(async(Me,qe)=>{if(!Z)return{success:!1,error:"Workspace switching is unavailable in local mode.",code:"WORKSPACE_SWITCHING_DISABLED"};const ge=String(Me||"").trim();if(!ge)return{success:!1,error:"workspaceId is required."};const _e=String($.current||"").trim()||"default",Be=_n();try{hr("bootstrap_workspace_switch_started",{fromWorkspaceId:_e,toWorkspaceId:ge,hydrate:qe?.hydrate!==!1});const Ge=H==="local"?"/api/taskforce/session/workspace?taskforceCloud=1":"/api/taskforce/session/workspace",F=await fetch(Ge,{method:"POST",headers:{"Content-Type":"application/json"},credentials:"include",body:JSON.stringify({workspaceId:ge})}),Ne=await F.json().catch(()=>({}));if(!F.ok||Ne?.success===!1)return{success:!1,error:Ne?.error||`Failed to switch workspace (${F.status})`,code:Ne?.code};try{_e!=="default"&&await Ae(ge)}catch(ut){return _e&&_e!=="default"&&(await fetch(Ge,{method:"POST",headers:{"Content-Type":"application/json"},credentials:"include",body:JSON.stringify({workspaceId:_e})}).catch(()=>null),await z({force:!0}).catch(()=>!1)),{success:!1,error:ut instanceof Error?ut.message:"The local sync coordinator rejected the workspace switch.",code:String(ut?.code||"SYNC_COORDINATOR_WORKSPACE_SWITCH_FAILED")}}Pe(ge,{clearExplicitSelection:!1}),V(),W(!0),y("workspace");const Ce=await z({force:!0});return qe?.hydrate===!1?await Xe():(fe.current=`${H}:${ge}:${se}`,ke.current=`${H}:${Ce?"auth":"guest"}:${ge}`,Y.current=ge,le&&$e==="tasks"&&!(re||de==="archived"||de==="deleted")&&(we.current=`${ge}:${$e}:active:${de}`),le&&$e==="settings"&&(q.current=`${ge}:${$e}:${He}`),await Promise.all([We(),Xe(),N({isSilent:!1}),X()]),xe({ignoreAuthGuard:!0})),hr("bootstrap_workspace_switch_completed",{fromWorkspaceId:_e,toWorkspaceId:ge,hydrate:qe?.hydrate!==!1,durationMs:Math.max(0,Math.round(_n()-Be))}),{success:!0}}catch(Ge){return hr("bootstrap_workspace_switch_failed",{fromWorkspaceId:_e,toWorkspaceId:ge,hydrate:qe?.hydrate!==!1,durationMs:Math.max(0,Math.round(_n()-Be)),error:Ge instanceof Error?Ge.message:String(Ge)}),{success:!1,error:"Failed to switch workspace."}}finally{W(!1)}},[V,$e,z,Pe,$,We,xe,Xe,le,ke,fe,q,we,Y,X,y,N,H,He,W,re,Ae,de,se,Z]),Ie=o.useCallback(async Me=>{y("workspace"),W(!0);try{if(!Z){const Ce=String(Le||"").trim()||"default";return Pe(Ce),{success:!0,workspaceSetupRequired:!1,workspaceId:Ce}}const qe=String(Me?.preferredWorkspaceId||"").trim(),ge=yk(se),_e=await Xe();if(!_e.success)return{success:!1,workspaceSetupRequired:!1,error:_e.error||"Failed to load workspaces after authentication."};const Be=Array.isArray(_e.workspaces)?_e.workspaces:[];if(Be.length===0)return Pe("default"),{success:!0,workspaceSetupRequired:!0};const Ge=new Set(Be.map(Ce=>String(Ce.id||"").trim()).filter(Boolean)),F=String($.current||"").trim(),Ne=(qe&&Ge.has(qe)?qe:"")||(F&&Ge.has(F)?F:"")||(ge&&Ge.has(ge)?ge:"")||String(Be[0]?.id||"").trim();if(!Ne)return Pe("default"),{success:!0,workspaceSetupRequired:!0};if(F!==Ne){const Ce=await G(Ne,{hydrate:!1});if(!Ce.success)return{success:!1,workspaceSetupRequired:!1,error:Ce.error||"Failed to set workspace after authentication.",code:Ce.code}}else Pe(Ne);return{success:!0,workspaceSetupRequired:!1,workspaceId:Ne}}catch{return k("Unable to resolve workspace access."),{success:!1,workspaceSetupRequired:!1,error:"Failed to resolve workspace access."}}finally{W(!1)}},[Pe,Le,$,Xe,y,k,W,G,se,Z]),Fe=o.useCallback(async()=>{y("auth");const Me=_n();hr("bootstrap_retry_started",{workspaceId:String($.current||"default").trim()||"default"});const qe=await z({force:!0});let ge=!1;if(Z&&qe){const _e=await Ie();if(!_e.success||_e.workspaceSetupRequired){await We({ignoreAuthGuard:!0}),hr("bootstrap_retry_completed",{workspaceId:String($.current||"default").trim()||"default",authenticated:qe,workspaceSetupRequired:_e.workspaceSetupRequired===!0,success:_e.success,durationMs:Math.max(0,Math.round(_n()-Me))});return}}W(!0);try{await We({ignoreAuthGuard:!0}),qe&&!ge&&(await Promise.all([pe(!0,{ignoreAuthGuard:!0}),he({ignoreAuthGuard:!0,force:!0})]),xe({ignoreAuthGuard:!0})),hr("bootstrap_retry_completed",{workspaceId:String($.current||"default").trim()||"default",authenticated:qe,workspaceSetupRequired:ge,success:!0,durationMs:Math.max(0,Math.round(_n()-Me))})}finally{W(!1)}},[z,$,We,xe,he,pe,y,Ie,W,Z]),it=o.useCallback(async Me=>{const qe=Me?.reason||"initial-load",ge=Me?.ignoreAuthGuard===!0,_e=Me?.tasksSilent!==!1,Be=_n();if(y("auth"),!await z({force:!0}))return await We({ignoreAuthGuard:!0}),hr("cloud_bootstrap_completed",{reason:qe,durationMs:Math.max(0,Math.round(_n()-Be)),authenticated:!1,workspaceSetupRequired:!1,success:!1}),{success:!1,authenticated:!1,workspaceSetupRequired:!1,error:"Sign in required.",code:"AUTH_REQUIRED"};if(Z){const F=await Ie();if(!F.success)return await We({ignoreAuthGuard:!0}),hr("cloud_bootstrap_completed",{reason:qe,durationMs:Math.max(0,Math.round(_n()-Be)),authenticated:!0,workspaceSetupRequired:!1,success:!1,error:F.error||"Workspace resolution failed."}),{success:!1,authenticated:!0,workspaceSetupRequired:!1,error:F.error||"Unable to resolve workspace access.",code:F.code};if(F.workspaceSetupRequired)return await We({ignoreAuthGuard:!0}),hr("cloud_bootstrap_completed",{reason:qe,durationMs:Math.max(0,Math.round(_n()-Be)),authenticated:!0,workspaceSetupRequired:!0,success:!0}),{success:!0,authenticated:!0,workspaceSetupRequired:!0}}W(!0);try{await ot({ignoreAuthGuard:ge});const F=String($.current||"default").trim()||"default",Ne=_n();return pe(_e,{ignoreAuthGuard:ge}).then(()=>{hr("cloud_bootstrap_tasks_loaded_deferred",{reason:qe,workspaceId:F,durationMs:Math.max(0,Math.round(_n()-Ne))})}).catch(Ce=>{hr("cloud_bootstrap_tasks_deferred_failed",{reason:qe,workspaceId:F,error:Ce instanceof Error?Ce.message:String(Ce)})}),he({ignoreAuthGuard:ge}).then(()=>{hr("cloud_bootstrap_reference_data_loaded_deferred",{reason:qe,workspaceId:F,durationMs:Math.max(0,Math.round(_n()-Ne))})}).catch(Ce=>{hr("cloud_bootstrap_reference_data_deferred_failed",{reason:qe,workspaceId:F,error:Ce instanceof Error?Ce.message:String(Ce)})}),xe({ignoreAuthGuard:ge}),hr("cloud_bootstrap_completed",{reason:qe,durationMs:Math.max(0,Math.round(_n()-Be)),authenticated:!0,workspaceSetupRequired:!1,success:!0,workspaceId:F}),{success:!0,authenticated:!0,workspaceSetupRequired:!1}}finally{W(!1)}},[z,$,ot,xe,he,pe,y,Ie,W,Z]);return o.useEffect(()=>{!t&&!r&&!Te.current&&(Te.current=!0,(async()=>{const Me=_n();if(H==="cloud"&&me&&Ve){const qe=await it({reason:"initial-load",tasksSilent:!1});if(!qe.success||qe.workspaceSetupRequired)return}else await ot(),await Promise.all([pe(!1),he()]),xe();hr("bootstrap_initial_load_completed",{durationMs:Math.max(0,Math.round(_n()-Me)),runtimeMode:H,workspaceId:String($.current||"default").trim()||"default"})})())},[me,$,ot,xe,he,pe,Te,Ve,it,H,r,t]),o.useEffect(()=>{if(t||r||ce||se==="bootstrap"||!Te.current)return;const Me=`${H}:${Le}:${se}`;fe.current!==Me&&(fe.current=Me,We())},[Le,We,Te,fe,H,r,t,ce,se]),o.useEffect(()=>{if(t||r||ce)return;const Me=Le;Y.current!==Me&&(Y.current=Me,X())},[Le,Y,X,r,t,ce]),o.useEffect(()=>{if(H!=="cloud"||!me||!Ve){H!=="cloud"&&ie([]),D.current=!1;return}ce||!Te.current||D.current||Xe()},[me,Xe,Te,Ve,H,ie,ce,D]),{fetchReferenceData:he,fetchBootstrapConfig:ot,fetchConfig:We,fetchWorkspaces:Xe,fetchAssigneeOptions:ae,switchWorkspace:G,resolveWorkspaceAfterAuth:Ie,retryBootstrapChecks:Fe,runCloudBootstrap:it}}function KN(e){const{runtimeMode:t,workspaceUiStateScope:r,currentWorkspaceId:a,currentWorkspaceIdRef:s,referenceDataLoaded:i,activeCategories:l,activeTypes:c,priorities:d,taxonomies:f,activeWorkspaceModule:p,setActiveWorkspaceModuleState:g,groupBy:h,setGroupBy:y,emptyColumnMode:k,setEmptyColumnMode:v,taskScope:C,setTaskScope:S,openTaskId:w,setPendingOpenTaskId:_,compressedCards:M,setCompressedCards:R,zenMode:P,setZenModeState:b,searchQuery:$,setSearchQuery:I,collapsedCategories:E,setCollapsedCategories:K,filterCategories:U,setFilterCategories:L,filterPriorities:D,setFilterPriorities:ie,filterTypes:H,setFilterTypes:be,filterStatus:Z,setFilterStatus:me,filterAssignees:Ve,setFilterAssignees:Re,filterAssigneesAllSelected:je,setFilterAssigneesAllSelected:ye,filterTaxonomies:ue,setFilterTaxonomies:ve,sortBy:Pe,setSortBy:Le,sortOrder:se,setSortOrder:V,hasInitedFilters:W,setHasInitedFilters:z,lastUsedCategory:fe,setLastUsedCategory:ke,taskforceAgentId:Y,setTaskforceAgentId:we,taskforceAgentConversationId:q,setTaskforceAgentConversationId:le,taskforceAgentConversationByAgentId:$e,setTaskforceAgentConversationByAgentId:re}=e,de=o.useRef(!1),He=o.useRef(""),ce=o.useRef(!1),pe=o.useRef(!1),xe=o.useRef(null),[N,X]=o.useState(!1),Ae=o.useMemo(()=>i?tx({categories:l,types:c,priorities:d,taxonomies:f}):null,[l,c,d,i,f]),Te=o.useCallback(ae=>{N||(pe.current=!0),g(ae)},[g,N]),he=o.useCallback((ae,G)=>{if(!ae){xe.current=null,we(""),le(""),re({}),_(null);return}const Ie=Array.isArray(ae.filterCategories)||Array.isArray(ae.filterPriorities)||Array.isArray(ae.filterTypes)||ae.filterTaxonomies&&typeof ae.filterTaxonomies=="object";Ie||(xe.current=null);const Fe=Array.isArray(ae.filterCategories)||Array.isArray(ae.filterPriorities)||Array.isArray(ae.filterTypes)||Array.isArray(ae.filterStatus)||Array.isArray(ae.filterAssignees)||typeof ae.filterAssigneesAllSelected=="boolean"||ae.filterTaxonomies&&typeof ae.filterTaxonomies=="object",it=i,Me=!!(ae.filterTaxonomySignature&&Ae);Ie&&!it&&(xe.current={state:ae,skipActiveWorkspaceModule:G?.skipActiveWorkspaceModule});const qe=Ie&&it&&(!Me||rx(ae.filterTaxonomySignature,Ae)),ge=Ie&&Me&&!qe,_e=!Ie||qe||ge;if(G?.skipActiveWorkspaceModule||(ae.activeWorkspaceModule?g(ae.activeWorkspaceModule):ae.groupBy==="docs"&&g("docs")),ae.groupBy&&ae.groupBy!=="docs"&&y(ae.groupBy),ae.emptyColumnMode&&v(ae.emptyColumnMode),ae.taskScope&&S(ae.taskScope),(typeof ae.openTaskId=="string"||ae.openTaskId===null)&&_(ae.openTaskId),typeof ae.compressedCards=="boolean"&&R(ae.compressedCards),typeof ae.zenMode=="boolean"&&b(ae.zenMode),typeof ae.searchQuery=="string"&&I(ae.searchQuery),ae.collapsedCategories&&typeof ae.collapsedCategories=="object"&&K(ae.collapsedCategories),qe?(L(Array.isArray(ae.filterCategories)?ae.filterCategories:l.map(Be=>Be.value)),ie(Array.isArray(ae.filterPriorities)?ae.filterPriorities:d.map(Be=>Be.value)),be(Array.isArray(ae.filterTypes)?ae.filterTypes:c.map(Be=>Be.value)),ae.filterTaxonomies&&typeof ae.filterTaxonomies=="object"&&ve(ae.filterTaxonomies)):ge&&(L(l.map(Be=>Be.value)),ie(d.map(Be=>Be.value)),be(c.map(Be=>Be.value)),ve({})),Array.isArray(ae.filterStatus)&&me(ae.filterStatus),Array.isArray(ae.filterAssignees)){const Be=ae.filterAssigneesAllSelected===!0&&!ae.filterAssignees.includes("unassigned")?["unassigned",...ae.filterAssignees]:ae.filterAssignees;Re(Be)}typeof ae.filterAssigneesAllSelected=="boolean"&&ye(ae.filterAssigneesAllSelected),(ae.sortBy==="created"||ae.sortBy==="priority"||ae.sortBy==="updated"||ae.sortBy==="complexity")&&Le(ae.sortBy),(ae.sortOrder==="asc"||ae.sortOrder==="desc")&&V(ae.sortOrder),ge?z(!0):typeof ae.hasInitedFilters=="boolean"&&_e?z(ae.hasInitedFilters):Fe&&_e&&z(!0),typeof ae.lastCategory=="string"&&ke(ae.lastCategory),we(typeof ae.taskforceAgentId=="string"?ae.taskforceAgentId.trim():""),le(typeof ae.taskforceAgentConversationId=="string"?ae.taskforceAgentConversationId.trim():""),re(ae.taskforceAgentConversationByAgentId||{})},[l,c,Ae,d,i,g,K,R,v,Re,ye,L,ie,me,ve,be,y,z,ke,I,Le,V,S,_,re,le,we,b]);o.useEffect(()=>{if(!i||!xe.current)return;const ae=xe.current;xe.current=null,he(ae.state,{skipActiveWorkspaceModule:ae.skipActiveWorkspaceModule})},[he,i]);const ot=o.useRef(he);o.useEffect(()=>{ot.current=he},[he]);const We=o.useCallback(async ae=>{const G=String(ae||s.current||a||"default").trim()||"default",Ie=`${t}:${r}:${G}`;try{const Fe=await fetch(`/api/taskforce/ui-state?key=app&workspaceId=${encodeURIComponent(G)}`,{method:"GET",credentials:"include"}),it=Fe.ok?await Fe.json().catch(()=>({})):{},Me=bA(it?.state),qe=Jw(r),ge=Me||qe?{...qe||{},...Me||{},version:hk}:null;if(s.current!==G)return;ot.current(ge,{skipActiveWorkspaceModule:pe.current}),He.current=Ie}catch{const Fe=Jw(r);s.current===G&&(ot.current(Fe,{skipActiveWorkspaceModule:pe.current}),He.current=Ie)}finally{if(s.current!==G)return;pe.current=!1,ce.current=!0,X(!0)}},[a,s,t,r]);o.useEffect(()=>{const ae=`${t}:${r}:${a}`;de.current&&He.current!==ae&&(X(!1),We(a))},[a,We,t,r]),o.useEffect(()=>{if(!N)return;if(ce.current){ce.current=!1;return}const ae={version:hk,groupBy:h,activeWorkspaceModule:p,emptyColumnMode:k,taskScope:C,openTaskId:w||null,compressedCards:M,zenMode:P,searchQuery:$,collapsedCategories:E,filterCategories:U,filterPriorities:D,filterTypes:H,filterStatus:Z,filterAssignees:Ve,filterAssigneesAllSelected:je,filterTaxonomies:ue,...Ae?{filterTaxonomySignature:Ae}:{},sortBy:Pe,sortOrder:se,hasInitedFilters:W,lastCategory:fe||"",taskforceAgentId:Y,taskforceAgentConversationId:q,taskforceAgentConversationByAgentId:$e};ox(ae,r);const G=window.setTimeout(async()=>{try{await ff({stateKey:"app",workspaceId:s.current,patch:ae})}catch{}},250);return()=>window.clearTimeout(G)},[p,E,M,Ae,s,k,Ve,je,U,D,Z,ue,H,h,W,fe,w,$,Pe,se,C,$e,q,Y,N,r,P]);const Xe=o.useCallback(ae=>{He.current="",xe.current=null,pe.current=!1,ce.current=!1,ae?.clearLoaded&&(de.current=!1),X(!1)},[]);return{hasLoadedUiStateRef:de,loadPersistedUiState:We,resetPersistedUiStateLoad:Xe,setActiveWorkspaceModule:Te,uiStateReady:N}}const qN="taskforce:workspace-resources-invalidated";function NC(e){typeof window>"u"||window.dispatchEvent(new CustomEvent(qN,{detail:e}))}function YN({workspaceId:e,isOpen:t,authBlocked:r,authRequiredForApi:a,isAuthenticated:s,canCallProtectedApi:i,shouldGateProtectedApiCalls:l,authSessionResolvedRef:c,authRequiredForApiRef:d,isAuthenticatedRef:f,dataVersionRef:p,refreshTaskCollectionsForDataVersion:g,coordinatorDataVersion:h=null}){const y=o.useRef(g);y.current=g;const k=o.useRef({scopeKey:null,workspaceId:"",scopeEpoch:0,renderedVersion:null,pendingVersion:null,sourceVersions:new Map,inFlight:null}),v=o.useRef(!0);o.useEffect(()=>(v.current=!0,()=>{v.current=!1}),[]);const C=!!(h&&Number.isSafeInteger(h.coordinatorGeneration)&&h.coordinatorGeneration>0&&Number.isSafeInteger(h.localDataVersion)&&h.localDataVersion>=0),S=()=>{const _=k.current;if(!v.current||_.inFlight||_.pendingVersion===null||typeof document>"u"||document.visibilityState!=="visible")return;const M=_.pendingVersion;if(_.renderedVersion!==null&&M<=_.renderedVersion)return;const R=_.scopeKey,P=_.scopeEpoch;let b=!1,$=!1;const I=y.current().then(()=>{if(!v.current||k.current.scopeKey!==R||k.current.scopeEpoch!==P){$=!0;return}b=!0,k.current.renderedVersion=M,p.current=M,NC({workspaceId:k.current.workspaceId,source:"data-version",dataVersion:M})}).catch(()=>{}).finally(()=>{k.current.inFlight===I&&(k.current.inFlight=null),(b||$)&&S()});_.inFlight=I},w=(_,M,R)=>{if(!Number.isSafeInteger(M)||M<0)return;const P=k.current,b=e;P.scopeKey!==b&&(P.scopeKey=b,P.workspaceId=e,P.scopeEpoch+=1,P.renderedVersion=null,P.pendingVersion=null,P.sourceVersions=new Map,p.current=null);const $=P.sourceVersions.get(_);if($!==void 0&&(R.monotonic?M<=$:M===$)){S();return}if(P.sourceVersions.set(_,M),R.establishBaseline&&$===void 0){P.renderedVersion===null&&P.pendingVersion===null&&!P.inFlight&&(P.renderedVersion=M,P.pendingVersion=M,p.current=M);return}const I=Math.max(P.renderedVersion??0,P.pendingVersion??0);P.pendingVersion=I===0?M:Math.max(I+1,M),S()};o.useEffect(()=>{!C||!h||w(`${e}:coordinator:${h.coordinatorGeneration}`,h.localDataVersion,{monotonic:!0,establishBaseline:!1})},[h,C,e]),o.useEffect(()=>{if(typeof window>"u"||typeof document>"u"||HN({isOpen:t,authBlocked:r,authRequiredForApi:a,isAuthenticated:s,canCallProtectedApi:i}))return;let _=!1;const M=async()=>{if(!(_||document.visibilityState!=="visible")&&!VN({shouldGateProtectedApiCalls:l,authSessionResolved:c.current,authRequiredForApi:d.current,isAuthenticated:f.current}))try{const I=await fetch("/api/taskforce/data-version");if(!I.ok)return;const E=await I.json(),K=Number(E?.dataVersion);if(_)return;w(`${e}:legacy`,K,{monotonic:!1,establishBaseline:!0})}catch{}},R=()=>{document.visibilityState==="visible"&&M()},P=()=>{M()},b=()=>{M()},$=window.setInterval(()=>{M()},3e3);return document.addEventListener("visibilitychange",R),window.addEventListener("focus",P),window.addEventListener("online",b),M(),()=>{_=!0,window.clearInterval($),document.removeEventListener("visibilitychange",R),window.removeEventListener("focus",P),window.removeEventListener("online",b)}},[t,e,r,a,s,i,l,c,d,f,p])}const ZN="/api/taskforce/sync/v3/local/operations",JN="/api/taskforce/sync/v3/local/dispatch";function Rh(e){return e&&typeof e=="object"&&!Array.isArray(e)?e:null}async function Bb(e,t,r){const a=await e(t,{method:"POST",credentials:"include",headers:{Accept:"application/json","Content-Type":"application/json"},body:JSON.stringify(r)});let s;try{s=JSON.parse(await a.text())}catch{s=null}return{response:a,body:Rh(s)}}function Da(e,t){const r=String(e||"").trim();if(!r||r.length>200)throw new Error(`${t} is invalid.`);return r}function QN(){if(!globalThis.crypto?.randomUUID)throw new Error("Secure operation ID generation is unavailable.");return globalThis.crypto.randomUUID()}function XN(e){return e===400||e===401||e===403||e===404||e===405||e===409||e===413||e===422||e===429}function Nu(e={}){const t=e.identityStore||new Bv,r=e.fetchImpl||fetch,a=e.createOperationId||QN,s=e.fingerprint||Wv;return{async execute(i){const l=Da(i.workspaceId,"workspaceId");let c,d,f,p;try{i.preparedIdentity?(c=i.preparedIdentity.key,d={operationId:i.preparedIdentity.operationId,created:i.preparedIdentity.created},f=i.preparedIdentity.abandonIfMatches,p=i.preparedIdentity.markCaptureConfirmed):(c=await s(i.fingerprintValue),d=await t.getOrCreate(c,a),f=(b,$)=>t.deleteIfMatches(b,$),p=f)}catch{return{state:"failed",phase:"prepare",fallbackEligible:!1,errorCode:"LOCAL_OPERATION_PREPARATION_FAILED"}}const g=Da(d.operationId,"operationId"),h=i.buildOperation(g),y=Da(h.entityId,"entityId");let k;try{k=await Bb(r,ZN,{contractVersion:3,workspaceId:l,operationId:g,operation:h})}catch{return{state:"ambiguous",phase:"capture",fallbackEligible:!1,operationId:g}}if(k.response.status===404&&k.body?.success===!1&&typeof k.body.code=="string"&&i.disabledCodes.has(k.body.code))return d.created?(await f(c,g),{state:"disabled",fallbackEligible:!0,operationId:g}):{state:"ambiguous",phase:"capture",fallbackEligible:!1,operationId:g,errorCode:k.body.code};const v=Rh(k.body?.task),C=Rh(k.body?.deleted),S=typeof k.body?.clientId=="string"?k.body.clientId.trim():"";if(!k.response.ok||k.body?.success!==!0||k.body.contractVersion!==3||k.body.state!=="pending"||k.body.workspaceId!==l||k.body.operationId!==g||!S||(h.mutationKind==="delete"?!C||C.taskId!==y:!v||v.id!==y)){if(!k.response.ok&&XN(k.response.status)){try{await f(c,g)}catch{}return{state:"rejected",phase:"capture",fallbackEligible:!1,operationId:g,retryable:k.response.status===429,errorCode:typeof k.body?.code=="string"?k.body.code:void 0}}return{state:"ambiguous",phase:"capture",fallbackEligible:!1,operationId:g,errorCode:typeof k.body?.code=="string"?k.body.code:void 0}}try{await p(c,g)}catch{return{state:"ambiguous",phase:"capture",fallbackEligible:!1,operationId:g,errorCode:"LOCAL_OPERATION_IDENTITY_CLEANUP_FAILED"}}const w=h.mutationKind==="delete"?{deleted:C}:{task:v};if(!i.isAuthenticated)return{state:"pending",fallbackEligible:!1,operationId:g,...w,pendingReason:"auth"};if(i.dispatchEnabled===!1)return{state:"pending",fallbackEligible:!1,operationId:g,...w,pendingReason:"sync-disabled"};let _;try{_=await Bb(r,JN,{workspaceId:l,limit:1})}catch{return{state:"pending",fallbackEligible:!1,operationId:g,...w,pendingReason:"retry"}}if(!_.response.ok)return{state:"pending",fallbackEligible:!1,operationId:g,...w,pendingReason:_.response.status===401?"auth":"retry",errorCode:typeof _.body?.code=="string"?_.body.code:void 0};if(_.body?.success!==!0||!Array.isArray(_.body.outcomes))return{state:"pending",fallbackEligible:!1,operationId:g,...w,pendingReason:"retry"};const M=_.body.outcomes.map(Rh).find(b=>b?.clientId===S&&b?.operationId===g);if(!M)return{state:"pending",fallbackEligible:!1,operationId:g,...w,pendingReason:"queued"};const R=M.disposition;if(R!=="accepted"&&R!=="retry"&&R!=="blocked"&&R!=="lease-lost")return{state:"pending",fallbackEligible:!1,operationId:g,...w,pendingReason:"retry"};const P=typeof M.errorCode=="string"?M.errorCode:void 0;return R==="accepted"?{state:"accepted",fallbackEligible:!1,operationId:g,...w,dispatchDisposition:R}:{state:R==="blocked"?"blocked":"pending",fallbackEligible:!1,operationId:g,...w,dispatchDisposition:R,pendingReason:R==="retry"||R==="lease-lost"?P==="WORKSPACE_SYNC_TRANSPORT_401"?"auth":"retry":void 0,errorCode:P}}}}const e1=new Set(["WORKSPACE_SYNC_LOCAL_CAPTURE_DISABLED"]);function t1(e={}){const t=Nu(e);return{async update(r){const a=Da(r.workspaceId,"workspaceId"),s=Da(r.entityId,"entityId"),i=EC(r.patch),l={domain:"task",entityId:s,mutationKind:"metadata-update",payload:{patch:i,...r.saveSource?{saveSource:r.saveSource}:{}}};return t.execute({workspaceId:a,fingerprintValue:{contractVersion:3,workspaceId:a,operation:l},buildOperation:()=>l,disabledCodes:e1,isAuthenticated:r.isAuthenticated,dispatchEnabled:r.dispatchEnabled})}}}const r1=new Set(["title","description","priority","complexity","type","category","assignee","scheduledDate","dueDate","scheduledWeekKey","orderInDay","workstreamId","taxonomies"]);function n1(e){if(!e||typeof e!="object"||Array.isArray(e))return!1;const t=Object.keys(e);return t.length>0&&t.every(r=>r1.has(r))}function a1(e){const t=o.useRef(null);return o.useCallback(async(r,a,s)=>{if(!e.enabled||!n1(a))return null;const i=String(e.workspaceId||"").trim(),l=String(r||"").trim();return!i||i.toLowerCase()==="default"||!l?null:(t.current||(t.current=e.client||t1()),t.current.update({workspaceId:i,entityId:l,patch:a,...s?.saveSource?{saveSource:s.saveSource}:{},isAuthenticated:e.isAuthenticated,dispatchEnabled:e.dispatchEnabled}))},[e.client,e.dispatchEnabled,e.enabled,e.isAuthenticated,e.workspaceId])}const s1=new Set(["title","description","priority","complexity","type","category","assignee","status","scheduledDate","dueDate","orderInDay","workstreamId","taxonomies"]),o1=new Set(["task","on-hold","in-progress","review","done","cancelled"]);class ah extends Error{constructor(t,r,a){super(t),this.code=r,this.statusCode=a,this.name="DurableTaskCreateMutationError"}}function i1(e){if(!e||typeof e!="object"||Array.isArray(e))throw new ah("Task create input must be an object.","TASK_CREATE_INVALID",400);const t=e;for(const a of Object.keys(t))if(!s1.has(a))throw new ah(`Task create field is not supported by this contract: ${a}`,"TASK_CREATE_INVALID",400);const r=typeof t.title=="string"?t.title.trim():"";if(!r)throw new ah("Task title is required.","TASK_CREATE_INVALID",400);if(t.status!==void 0&&!o1.has(t.status))throw new ah(`Task create status is not supported by this contract: ${String(t.status)}`,"TASK_CREATE_INVALID",400);return{...t,title:r}}const c1=new Set(["WORKSPACE_SYNC_LOCAL_CAPTURE_DISABLED","WORKSPACE_SYNC_LOCAL_CREATE_CAPTURE_DISABLED"]),l1="/api/taskforce/sync/v3/local/operations";function fu(e){return JSON.parse(vc(i1(e)))}function sh(e,t){if(!e||typeof e!="object"||Array.isArray(e))throw new Error("Local task create input must be an object.");const r=e,{attachments:a=[],checklistItems:s=[],comments:i=[],...l}=r;if(!Array.isArray(a)||!Array.isArray(s)||!Array.isArray(i))throw new Error("Local task create carriers must be arrays.");const c=fu(l);if(vc(c)!==vc(t))throw new Error("Local task create root does not match its durable task.");return JSON.parse(vc({...c,attachments:a,checklistItems:s,comments:i}))}function Wb(e={}){const t=Nu(e),r=e.attemptStore||new PC,a=e.fetchImpl||globalThis.fetch,s=async(l,c)=>{let d,f;try{d=await a(`${l1}?workspaceId=${encodeURIComponent(l)}&operationId=${encodeURIComponent(c)}`,{method:"GET",headers:{Accept:"application/json"}}),f=await d.json()}catch{return{state:"ambiguous",phase:"capture",fallbackEligible:!1,operationId:c}}if(d.status===404&&f?.success===!1&&f?.code==="WORKSPACE_SYNC_LOCAL_OPERATION_NOT_FOUND")return null;const p=f?.operation,g=p?.payload?.task,h=p?.payload?.localCarriers;if(!d.ok||f?.success!==!0||f?.contractVersion!==3||f?.workspaceId!==l||f?.operationId!==c||p?.domain!=="task"||p?.entityId!==`task-${c}`||p?.mutationKind!=="create")return{state:"ambiguous",phase:"capture",fallbackEligible:!1,operationId:c,errorCode:typeof f?.code=="string"?f.code:void 0};try{const y=fu(g);return{workspaceId:l,operationId:c,task:sh({...y,...h&&typeof h=="object"?h:{}},y)}}catch{return{state:"ambiguous",phase:"capture",fallbackEligible:!1,operationId:c,errorCode:"WORKSPACE_SYNC_LOCAL_REPLAY_INVALID"}}},i=async(l,c,d,f)=>{const p=await t.execute({workspaceId:l.workspaceId,preparedIdentity:{key:l.workspaceId,operationId:l.operationId,created:!1,abandonIfMatches:(g,h)=>r.abandonIfMatches(g,h),markCaptureConfirmed:(g,h)=>r.markResolved(g,h)},buildOperation:()=>{const{attachments:g,checklistItems:h,comments:y,...k}=l.task;return{domain:"task",entityId:`task-${l.operationId}`,mutationKind:"create",payload:{task:fu(k),localCarriers:{attachments:g,checklistItems:h,comments:y}}}},disabledCodes:c1,isAuthenticated:c,dispatchEnabled:d});return f&&(p.state==="accepted"||p.state==="pending"||p.state==="blocked")?{...p,recoveredChangedInput:!0}:p};return{async recoverPending(l){const c=Da(l.workspaceId,"workspaceId");let d;try{d=await r.listPending(c)}catch{return[]}const f=[];for(const p of d)f.push(await i(p,l.isAuthenticated,l.dispatchEnabled,!1));return f},async create(l){const c=Da(l.workspaceId,"workspaceId"),d=fu(l.task),f=sh(l.localTask||{...d,attachments:[],checklistItems:[],comments:[]},d),p=Da(l.participantId,"participantId"),g=await s(c,p);if(g&&"state"in g)return g;if(g){const k=vc(g.task)!==vc(f);return i({...g},l.isAuthenticated,l.dispatchEnabled,k)}let h;try{h=await r.claim(c,p,f,()=>p)}catch{return{state:"failed",phase:"prepare",fallbackEligible:!1,errorCode:"LOCAL_OPERATION_PREPARATION_FAILED"}}try{const{attachments:k,checklistItems:v,comments:C,...S}=h.task;h={...h,task:sh({...S,attachments:k,checklistItems:v,comments:C},fu(S))}}catch{return{state:"failed",phase:"prepare",fallbackEligible:!1,errorCode:"LOCAL_OPERATION_PREPARATION_FAILED"}}const y=!h.created&&vc(h.task)!==vc(f);return i(h,l.isAuthenticated,l.dispatchEnabled,y)},async resumePending(l){const c=Da(l.workspaceId,"workspaceId"),d=Da(l.participantId,"participantId"),f=await s(c,d);if(f&&"state"in f)return f;if(f)return i({...f},l.isAuthenticated,l.dispatchEnabled,!0);let p;try{p=await r.getForParticipant(c,d)}catch{return{state:"failed",phase:"prepare",fallbackEligible:!1,errorCode:"LOCAL_OPERATION_PREPARATION_FAILED"}}if(!p)return null;try{const{attachments:g,checklistItems:h,comments:y,...k}=p.task;p={...p,task:sh({...k,attachments:g,checklistItems:h,comments:y},fu(k))}}catch{return{state:"failed",phase:"prepare",fallbackEligible:!1,errorCode:"LOCAL_OPERATION_PREPARATION_FAILED"}}return i(p,l.isAuthenticated,l.dispatchEnabled,!0)}}}const jC=["title","description","priority","complexity","type","category","assignee","scheduledDate","dueDate","orderInDay","workstreamId","taxonomies"],d1=new Set([...jC,"status","completedAt","workstreamId","checklistItems","comments","attachments","createdAt","createdBy"]);function u1(e){if(!e||typeof e!="object"||Array.isArray(e))return null;const t=e;if(Object.keys(t).some(s=>!d1.has(s))||t.status!=="task"||t.completedAt!==null||!Array.isArray(t.checklistItems)||!Array.isArray(t.comments)||!Array.isArray(t.attachments)||t.createdBy!=="user")return null;const r=String(t.createdAt||"").trim();if(!Number.isFinite(Date.parse(r))||new Date(r).toISOString()!==r)return null;const a={};for(const s of jC)Object.prototype.hasOwnProperty.call(t,s)&&(a[s]=t[s]);return{task:a,localTask:{...a,checklistItems:t.checklistItems,comments:t.comments,attachments:t.attachments}}}function Ok(){if(!globalThis.crypto?.randomUUID)throw new Error("Secure task-create participant ID generation is unavailable.");return globalThis.crypto.randomUUID()}function MC(e){return`taskforce.sync.v3.task-create-participant-v2:${e}`}function Bk(e,t){globalThis.sessionStorage?.setItem(MC(e),JSON.stringify(t))}function p1(e){const t=MC(e),r=globalThis.sessionStorage?.getItem(t)?.trim();if(r)try{const s=JSON.parse(r);if(typeof s.participantId=="string"&&s.participantId.trim())return{participantId:s.participantId.trim(),draftFingerprint:typeof s.draftFingerprint=="string"?s.draftFingerprint:null}}catch{}const a={participantId:Ok(),draftFingerprint:null};return Bk(e,a),a}async function f1(e){let t=p1(e);return{get participantId(){return t.participantId},prepareForDraft(r){return t.draftFingerprint&&t.draftFingerprint!==r?t={participantId:Ok(),draftFingerprint:r}:t={...t,draftFingerprint:r},Bk(e,t),t.participantId},rotate(){return t={participantId:Ok(),draftFingerprint:null},Bk(e,t),t.participantId},close(){}}}async function m1(e){const{createdAt:t,updatedAt:r,...a}=e;return Wv(a)}function h1(e){const t=o.useRef(null),r=o.useRef(null),a=o.useCallback(i=>(r.current?.workspaceId!==i&&(r.current?.promise.then(l=>l.close()),r.current={workspaceId:i,promise:f1(i)}),r.current.promise),[]);o.useEffect(()=>{if(!e.localRuntime)return;const i=String(e.workspaceId||"").trim();return i&&i.toLowerCase()!=="default"&&(a(i),e.enabled&&(t.current||(t.current=e.client||Wb()),typeof t.current.recoverPending=="function"&&t.current.recoverPending({workspaceId:i,isAuthenticated:e.isAuthenticated,dispatchEnabled:e.dispatchEnabled}))),()=>{const l=r.current;r.current=null,l?.promise.then(c=>c.close())}},[a,e.client,e.dispatchEnabled,e.enabled,e.isAuthenticated,e.localRuntime,e.workspaceId]);const s=o.useCallback(async i=>{if(!e.localRuntime)return null;const l=String(e.workspaceId||"").trim();if(!l||l.toLowerCase()==="default")return null;t.current||(t.current=e.client||Wb());const c=await a(l),d=u1(i),f=d?c.prepareForDraft(await m1(d.localTask)):c.participantId;let p;if(!e.enabled||!d){if(p=await t.current.resumePending({workspaceId:l,participantId:f,isAuthenticated:e.isAuthenticated,dispatchEnabled:e.dispatchEnabled}),!p&&!e.enabled)return null;if(!p&&e.enabled&&!d)return{state:"rejected",phase:"capture",fallbackEligible:!1,operationId:f,retryable:!1,errorCode:"TASK_CREATE_UNSUPPORTED_INPUT"}}else p=await t.current.create({workspaceId:l,participantId:f,task:d.task,localTask:d.localTask,isAuthenticated:e.isAuthenticated,dispatchEnabled:e.dispatchEnabled});return p?((p.state==="accepted"||p.state==="pending"||p.state==="blocked")&&c.rotate(),p):null},[a,e.client,e.dispatchEnabled,e.enabled,e.isAuthenticated,e.localRuntime,e.workspaceId]);return s.resetDraft=()=>{const i=String(e.workspaceId||"").trim();!i||i.toLowerCase()==="default"||a(i).then(l=>l.rotate())},s}const $b=["task","on-hold","in-progress","review","done","cancelled"];class g1 extends Error{constructor(t,r,a){super(t),this.code=r,this.statusCode=a,this.name="DurableTaskStatusMutationError"}}const Fb=2e3;function js(e){throw new g1(e,"TASK_STATUS_INVALID_PAYLOAD",400)}function y1(e){return typeof e!="string"||!$b.includes(e)?js(`Task status must be one of: ${$b.join(", ")}.`):e}function k1(e,t){if(e!==null&&typeof e!="string")return js("Task cancellation reason must be a string or null.");const r=typeof e=="string"?e.trim():null;return r!==null&&(r.length===0||r.length>Fb)?js(`Task cancellation reason must contain 1-${Fb} characters.`):t!=="cancelled"&&r!==null?js("Task cancellation reason must be null unless status is cancelled."):r}function v1(e){if(e&&typeof e=="object"&&!Array.isArray(e)&&Object.keys(e).length===0)return{};let t;try{t=EC(e)}catch(r){if(r instanceof xh)return js(r.message);throw r}return Object.prototype.hasOwnProperty.call(t,"assignee")?js("Task status metadataPatch cannot contain assignee; use assigneeIntent."):t}function w1(e,t){if(!e||typeof e!="object"||Array.isArray(e))return js("Task status assigneeIntent must be an object.");const r=e;return r.kind==="preserve"?Object.keys(r).length!==1?js("Preserve assignee intent must contain exactly kind."):{kind:"preserve"}:r.kind==="set"?Object.keys(r).sort().join(",")!=="kind,value"?js("Set assignee intent must contain exactly kind and value."):r.value!==null&&typeof r.value!="string"?js("Set assignee intent value must be a string or null."):{kind:"set",value:(typeof r.value=="string"?r.value.trim():"")||null}:r.kind==="claim-if-unassigned"?Object.keys(r).sort().join(",")!=="kind,value"?js("Claim-if-unassigned intent must contain exactly kind and value."):t!=="in-progress"?js("Claim-if-unassigned is valid only when status is in-progress."):typeof r.value!="string"||!r.value.trim()?js("Claim-if-unassigned value must be a nonblank string."):{kind:"claim-if-unassigned",value:r.value.trim()}:js("Task status assigneeIntent kind is invalid.")}function b1(e){if(!e||typeof e!="object"||Array.isArray(e))return js("Task status payload must be an object.");const t=e;if(Object.keys(t).sort().join(",")!=="assigneeIntent,canceledReason,metadataPatch,status")return js("Task status payload must contain exactly status, assigneeIntent, canceledReason, and metadataPatch.");const r=y1(t.status);return{status:r,assigneeIntent:w1(t.assigneeIntent,r),canceledReason:k1(t.canceledReason,r),metadataPatch:v1(t.metadataPatch)}}const S1=new Set(["WORKSPACE_SYNC_LOCAL_CAPTURE_DISABLED","WORKSPACE_SYNC_LOCAL_STATUS_CAPTURE_DISABLED"]);function A1(e={}){const t=Nu(e);return{async setStatus(r){const a=Da(r.workspaceId,"workspaceId"),s=Da(r.entityId,"entityId"),i=b1({status:r.status,assigneeIntent:r.assigneeIntent,canceledReason:r.canceledReason,metadataPatch:r.metadataPatch??{}}),l={domain:"task",entityId:s,mutationKind:"set-status",payload:i};return t.execute({workspaceId:a,fingerprintValue:{contractVersion:3,workspaceId:a,operation:l},buildOperation:()=>l,disabledCodes:S1,isAuthenticated:r.isAuthenticated,dispatchEnabled:r.dispatchEnabled})}}}function C1(e){const t=o.useRef(null);return o.useCallback(async(r,a)=>{if(!e.enabled)return null;const s=String(e.workspaceId||"").trim(),i=String(r||"").trim();return!s||s.toLowerCase()==="default"||!i?null:(t.current||(t.current=e.client||A1()),t.current.setStatus({workspaceId:s,entityId:i,...a,metadataPatch:a.metadataPatch,isAuthenticated:e.isAuthenticated,dispatchEnabled:e.dispatchEnabled}))},[e.client,e.dispatchEnabled,e.enabled,e.isAuthenticated,e.workspaceId])}class iu extends Error{constructor(t,r,a){super(t),this.code=r,this.statusCode=a,this.name="DurableTaskLifecycleMutationError"}}const Ub=2e3;function zb(e,t){if(!t||typeof t!="object"||Array.isArray(t))throw new iu("Task lifecycle payload must be an object.","TASK_LIFECYCLE_INVALID_PAYLOAD",400);const r=t,a=Object.keys(r).sort();if(e==="unarchive"){if(a.length!==0)throw new iu("Unarchive payload must be empty.","TASK_LIFECYCLE_INVALID_PAYLOAD",400);return{cancellation:!1,reason:null}}if(a.length!==2||a[0]!=="cancellation"||a[1]!=="reason"||typeof r.cancellation!="boolean")throw new iu("Archive payload must contain exactly cancellation and reason.","TASK_LIFECYCLE_INVALID_PAYLOAD",400);if(r.reason!==null&&typeof r.reason!="string")throw new iu("Archive reason must be a string or null.","TASK_LIFECYCLE_INVALID_PAYLOAD",400);const s=typeof r.reason=="string"?r.reason.trim():null;if(s!==null&&(s.length===0||s.length>Ub))throw new iu(`Archive reason must contain 1-${Ub} characters.`,"TASK_LIFECYCLE_INVALID_PAYLOAD",400);if(!r.cancellation&&s!==null)throw new iu("Archive reason must be null when cancellation is false.","TASK_LIFECYCLE_INVALID_PAYLOAD",400);return{cancellation:r.cancellation,reason:s}}class oh extends Error{constructor(t,r,a){super(t),this.code=r,this.statusCode=a,this.name="DurableTaskWorkflowMutationError"}}function Hb(e,t){if(!t||typeof t!="object"||Array.isArray(t))throw new oh("Task workflow payload must be an object.","TASK_WORKFLOW_INVALID_PAYLOAD",400);const r=t,a=Object.keys(r).sort();if(e==="complete"){if(a.length!==0)throw new oh("Complete payload must be empty.","TASK_WORKFLOW_INVALID_PAYLOAD",400);return{assignee:null}}if(a.length!==1||a[0]!=="assignee"||r.assignee!==null&&typeof r.assignee!="string")throw new oh("Reopen payload must contain exactly assignee as a string or null.","TASK_WORKFLOW_INVALID_PAYLOAD",400);const s=typeof r.assignee=="string"?r.assignee.trim():null;if(typeof r.assignee=="string"&&!s)throw new oh("Reopen assignee cannot be blank.","TASK_WORKFLOW_INVALID_PAYLOAD",400);return{assignee:s}}const _1=new Set(["WORKSPACE_SYNC_LOCAL_CAPTURE_DISABLED","WORKSPACE_SYNC_LOCAL_LIFECYCLE_CAPTURE_DISABLED"]);function I1(e){return e.mutationKind==="archive"?zb("archive",{cancellation:e.cancellation,reason:e.reason}):e.mutationKind==="unarchive"?(zb("unarchive",{}),{}):e.mutationKind==="complete"?(Hb("complete",{}),{}):Hb("reopen",{assignee:e.assignee})}function T1(e={}){const t=Nu(e),r=async a=>{const s=Da(a.workspaceId,"workspaceId"),i=Da(a.entityId,"entityId"),l=I1(a),c=a.mutationKind,d={domain:"task",entityId:i,mutationKind:c,payload:l};return t.execute({workspaceId:s,fingerprintValue:{contractVersion:3,workspaceId:s,operation:d},buildOperation:()=>d,disabledCodes:_1,isAuthenticated:a.isAuthenticated,dispatchEnabled:a.dispatchEnabled})};return{mutate:r,archive(a){return r({...a,mutationKind:"archive"})},unarchive(a){return r({...a,mutationKind:"unarchive"})},complete(a){return r({...a,mutationKind:"complete"})},reopen(a){return r({...a,mutationKind:"reopen"})}}}function x1(e){const t=o.useRef(null);return o.useCallback(async(r,a)=>{if(!e.enabled)return null;const s=String(e.workspaceId||"").trim(),i=String(r||"").trim();return!s||s.toLowerCase()==="default"||!i?null:(t.current||(t.current=e.client||T1()),t.current.mutate({workspaceId:s,entityId:i,isAuthenticated:e.isAuthenticated,dispatchEnabled:e.dispatchEnabled,...a}))},[e.client,e.dispatchEnabled,e.enabled,e.isAuthenticated,e.workspaceId])}const R1=new Set(["WORKSPACE_SYNC_LOCAL_CAPTURE_DISABLED","WORKSPACE_SYNC_LOCAL_DELETE_CAPTURE_DISABLED"]);function P1(e={}){const t=Nu(e);return{delete(r){const a=Da(r.workspaceId,"workspaceId"),i={domain:"task",entityId:Da(r.entityId,"entityId"),mutationKind:"delete",payload:{}};return t.execute({workspaceId:a,fingerprintValue:{contractVersion:3,workspaceId:a,operation:i},buildOperation:()=>i,disabledCodes:R1,isAuthenticated:r.isAuthenticated,dispatchEnabled:r.dispatchEnabled})}}}function E1(e){const t=o.useRef(null);return o.useCallback(async r=>{if(!e.enabled)return null;const a=String(e.workspaceId||"").trim(),s=String(r||"").trim();return!a||a.toLowerCase()==="default"||!s?null:(t.current||(t.current=e.client||P1()),t.current.delete({workspaceId:a,entityId:s,isAuthenticated:e.isAuthenticated,dispatchEnabled:e.dispatchEnabled}))},[e.client,e.dispatchEnabled,e.enabled,e.isAuthenticated,e.workspaceId])}const N1=new Set(["WORKSPACE_SYNC_LOCAL_CAPTURE_DISABLED","WORKSPACE_SYNC_LOCAL_DELETE_CAPTURE_DISABLED"]);function j1(e={}){const t=Nu(e);return{restore(r){const a=Da(r.workspaceId,"workspaceId"),s=Da(r.entityId,"entityId"),i=Da(r.deletedRecordId,"deletedRecordId"),l=r.restoreDestination||"previous",c={domain:"task",entityId:s,mutationKind:"restore",payload:l==="archive"?{deletedRecordId:i,restoreDestination:l}:{deletedRecordId:i}};return t.execute({workspaceId:a,fingerprintValue:{contractVersion:3,workspaceId:a,operation:c},buildOperation:()=>c,disabledCodes:N1,isAuthenticated:r.isAuthenticated,dispatchEnabled:r.dispatchEnabled})}}}function M1(e){const t=o.useRef(null);return o.useCallback(async(r,a,s="previous")=>{if(!e.enabled)return null;const i=String(e.workspaceId||"").trim(),l=String(a||"").trim(),c=String(r||"").trim();return!i||i.toLowerCase()==="default"||!l||!c?null:(t.current||(t.current=e.client||j1()),t.current.restore({workspaceId:i,entityId:l,deletedRecordId:c,restoreDestination:s,isAuthenticated:e.isAuthenticated,dispatchEnabled:e.dispatchEnabled}))},[e.client,e.dispatchEnabled,e.enabled,e.isAuthenticated,e.workspaceId])}const DC=["active","archive","deleted","planning"];function LC(e){const t=new Set(e||[]);return DC.filter(r=>t.has(r))}function D1(e){return Array.from(new Set((e||[]).map(t=>String(t||"").trim()).filter(Boolean)))}function rd(e,t){return{collections:LC(e),taskIds:D1(t?.taskIds),ambiguous:t?.ambiguous===!0}}function OC(e,t){return e?rd([...e.collections,...t.collections],{taskIds:[...e.taskIds||[],...t.taskIds||[]],ambiguous:e.ambiguous||t.ambiguous}):rd(t.collections,{taskIds:t.taskIds,ambiguous:t.ambiguous})}function L1(e){return e.ambiguous?[]:[...e.taskIds||[]]}function O1(e,t){if(e==="taskforce:update"||e==="taskforce:replay-gap"||e==="taskforce:replay-reset"||!t?.length)return rd(DC,{ambiguous:!0});let r=null;for(const a of t){const s=String(a.entityType||"").trim(),i=LC(a.affectedCollections);let l;i.length>0?l=i:s==="task"?l=String(a.changeType||"").trim()==="delete"?["active","archive","deleted"]:["active","archive","deleted","planning"]:s==="taxonomy"?l=["active","archive","planning"]:s==="initiative"||s==="workstream"?l=["planning"]:l=[],r=OC(r,rd(l,{taskIds:a.entityIds}))}return r||rd([])}class B1{values=new Map;async getOrCreate(t,r){const a=this.values.get(t);if(a)return{operationId:a,created:!1};const s=r();return this.values.set(t,s),{operationId:s,created:!0}}async deleteIfMatches(t,r){this.values.get(t)===r&&this.values.delete(t)}}class W1{values=new Map;async claim(t,r,a){const s=this.values.get(t);if(s)return{...s,created:!1};const i={fingerprint:t,operationId:a(),workstream:r};return this.values.set(t,i),{...i,created:!0}}async deleteIfMatches(t,r){this.values.get(t)?.operationId===r&&this.values.delete(t)}}const $1=new Set(["WORKSTREAM_MUTATION_INVALID","WORKSTREAM_MUTATION_IDENTITY_REQUIRED","WORKSTREAM_NOT_FOUND","WORKSTREAM_ID_CONFLICT","WORKSTREAM_STATE_CONFLICT","WORKSTREAM_INITIATIVE_INVALID","WORKSTREAM_OWNER_INVALID","WORKSTREAM_COMMENT_AUTHOR_INVALID","WORKSTREAM_ATTACHMENT_INVALID","WORKSTREAM_HAS_ACTIVE_TASKS","WORKSTREAM_TASK_ORDER_INVALID","WORKSTREAM_TASK_ORDER_MEMBERSHIP_MISMATCH","WORKSTREAM_TASK_ORDER_IDENTITY_CONFLICT","ENTITY_EVENT_IDENTITY_COLLISION","WORKSPACE_SYNC_REVISION_CONFLICT","WORKSPACE_SYNC_IDEMPOTENCY_CONFLICT"]);function F1(e,t){return e.find(a=>a.id===t.id)?null:t}function Vb(){if(!globalThis.crypto?.randomUUID)throw new Error("Secure workstream operation identity generation is unavailable.");return`operation-${globalThis.crypto.randomUUID()}`}async function Yp(e){if(e.ok||e.status<400||e.status>=500)return!1;const t=await e.clone().json().catch(()=>null);return $1.has(String(t?.code||"").trim())}function U1(e){const t=globalThis.indexedDB?new Bv:new B1,r=globalThis.indexedDB?new xN:new W1;return{async prepareCreate(a,s){if(!globalThis.crypto?.randomUUID)throw new Error("Secure workstream identity generation is unavailable.");const i=En({workspaceId:a,candidate:s}),l=await r.claim(i,{...s,id:s.id||`workstream-${globalThis.crypto.randomUUID()}`,createdAt:s.createdAt||new Date().toISOString()},Vb);return{fingerprint:i,operationId:l.operationId,body:l.workstream}},confirmCreate(a,s){return r.deleteIfMatches(a,s)},abandonCreate(a,s){return r.deleteIfMatches(a,s)},async prepareMutation(a,s,i,l=null){const c=En({workspaceId:a,url:s,body:i,observedState:l}),d=await t.getOrCreate(c,Vb);return{fingerprint:c,operationId:d.operationId}},confirmMutation(a,s){return t.deleteIfMatches(a,s)},abandonMutation(a,s){return t.deleteIfMatches(a,s)}}}async function Zp(e,t,r){const a={...t,headers:{...t.headers||{},"x-taskforce-operation-id":r}},s=()=>fetch(e,a);let i;try{i=await s()}catch{i=await s()}if(i.status!==409)return i;const l=await i.clone().json().catch(()=>({}));if(l?.code!=="WORKSPACE_SYNC_OPERATION_IN_PROGRESS")return i;const c=Date.parse(String(l?.retryAt||"")),d=Number.isFinite(c)?Math.max(0,c-Date.now()):Number.NaN;return!Number.isFinite(d)||d>2e3?i:(await new Promise(f=>setTimeout(f,d)),s())}const z1={};function Li(e,t){const r=e.findIndex(a=>a.id===t.id);return r===-1?[...e,t]:e.map((a,s)=>s===r?t:a)}function Gy(){return{status:"loading",error:null,isRefreshing:!1,collections:{initiatives:"loading",workstreams:"loading"}}}const hc=hv(z1),Ky=(()=>{const e=hc.baseUrl,t=hc.cloudAuthBaseUrl;if(t)return t;const r=hc.apiBaseUrl;return r||e||"https://app.taskforcehq.ai"})(),ih=2e4,H1=new Set(["external-abort","superseded","workspace-reset","workspace-transition"]);function Ph(e){return typeof DOMException<"u"&&e instanceof DOMException?e.name==="AbortError":String(e?.name||"").toLowerCase()==="aborterror"}function Wk(e){return typeof e=="string"&&H1.has(e)}function qy(e,t){return t.aborted?e===t.reason||Wk(e)||Wk(t.reason)?!0:Ph(e):!1}function Gb(e){const t=new Error(`Startup checks timed out after ${e}ms.`);return t.name="BootstrapTimeoutError",t}function Kb(e){const t=e&&typeof e=="object"?e:{},r=Array.isArray(t.initiatives)?t.initiatives.filter(i=>!!(i&&typeof i=="object"&&typeof i.id=="string")):[],a=Array.isArray(t.workstreams)?t.workstreams.filter(i=>!!(i&&typeof i=="object"&&typeof i.id=="string")):[],s=Array.isArray(t.workstreamTaskSummaries)?t.workstreamTaskSummaries.flatMap(i=>{if(!i||typeof i!="object")return[];const l=String(i.workstreamId||"").trim();if(!l)return[];const c=Array.isArray(i.tasks)?i.tasks:[],d=Math.max(0,Number(i.taskCount)||0),f=Math.max(0,Number(i.completedTaskCount)||0);return[{workstreamId:l,taskCount:d,completedTaskCount:f,tasks:c.filter(p=>!!(p&&typeof p=="object"&&typeof p.id=="string")).map(p=>({id:String(p.id||"").trim(),referenceNumber:typeof p.referenceNumber=="number"?p.referenceNumber:null,localReferenceNumber:typeof p.localReferenceNumber=="number"?p.localReferenceNumber:null,referenceLabel:typeof p.referenceLabel=="string"&&p.referenceLabel.trim()||void 0,title:String(p.title||"").trim()||"Untitled Task",status:typeof p.status=="string"?p.status:null,assignee:typeof p.assignee=="string"?p.assignee:null,attachmentCount:Math.max(0,Number(p.attachmentCount)||0),isArchived:!!p.isArchived}))}]}):[];return{initiatives:r,workstreams:a,workstreamTaskSummaries:s}}function V1({config:e={},initialTaskId:t,initialActivityEntryId:r,requestedWorkspaceId:a,onTaskCountChange:s,onClose:i}){const l={...s0,...e},{categories:c,types:d,apiEndpoint:f,apiBaseUrl:p,cloudAuthBaseUrl:g,cloudMcpBaseUrl:h,wsBaseUrl:y,shortcut:k}=l,v=typeof window<"u"?String(window.location.hostname||"").trim().toLowerCase():"",C=v==="localhost"||v==="127.0.0.1"||v==="::1",S=typeof window<"u"&&!C,[w,_]=o.useState({cloudEnvironment:"",cloudBaseUrl:"",cloudMcpBaseUrl:"",baseUrl:"",apiBaseUrl:"",cloudAuthBaseUrl:"",wsBaseUrl:"",cloudAuthViaLocalProxy:!1,authSource:"",workspaceMode:"",workspaceSwitchingEnabled:null,syncV3TaskMetadataActivation:!1,syncV3TaskCreateActivation:!1,syncV3TaskStatusActivation:!1,syncV3TaskDeleteActivation:!1,syncV3TaskCloudHttpRootActivation:!1,syncV3LocalOutboxDispatch:!1,localCoordinatorBrowserAuthorityGate:!1,syncV3InitiativeFeedActivation:void 0,syncV3CombinedFeedRouteAvailable:void 0,syncV3CombinedFeedActivation:void 0,syncV3CombinedFeedCoverage:void 0}),[M,R]=o.useState(!1),P=o.useCallback(T=>typeof T=="string"?T.trim().replace(/\/+$/,""):"",[]);o.useEffect(()=>{if(typeof window>"u"){R(!0);return}let T=!1;return(async()=>{try{const te=await fetch("/api/taskforce/auth/runtime-config",{method:"GET",credentials:"include",cache:"no-store"});if(!te.ok)return;const ne=await te.json().catch(()=>({})),ee=ne?.config&&typeof ne.config=="object"?ne.config:{};if(T)return;const et=String(ee.runtimeMode||"").trim().toLowerCase()==="cloud"?"cloud":"local",tt=String(ee.workspaceMode||"").trim(),Wt=tt==="single-local"||tt==="multi-cloud"?tt:et==="cloud"?"multi-cloud":"single-local";fe(et);const tr=tl(ee.syncV3?.combinedFeed?.coverage||{});_({cloudEnvironment:typeof ee.cloudEnvironment=="string"?String(ee.cloudEnvironment).trim().toLowerCase():"",cloudBaseUrl:P(ee.cloudBaseUrl),cloudMcpBaseUrl:P(ee.cloudMcpBaseUrl),baseUrl:P(ee.baseUrl),apiBaseUrl:P(ee.apiBaseUrl),cloudAuthBaseUrl:P(ee.cloudAuthBaseUrl),wsBaseUrl:P(ee.wsBaseUrl),cloudAuthViaLocalProxy:!!ee.cloudAuthViaLocalProxy,authSource:"cloud",workspaceMode:Wt,workspaceSwitchingEnabled:typeof ee.workspaceSwitchingEnabled=="boolean"?!!ee.workspaceSwitchingEnabled:Wt==="multi-cloud",syncV3TaskMetadataActivation:ee.syncV3?.taskMetadataActivation===!0,syncV3TaskCreateActivation:ee.syncV3?.taskCreateActivation===!0,syncV3TaskStatusActivation:ee.syncV3?.taskStatusActivation===!0,syncV3TaskDeleteActivation:ee.syncV3?.taskDeleteActivation===!0,syncV3TaskCloudHttpRootActivation:ee.syncV3?.taskCloudHttpRootActivation===!0,syncV3LocalOutboxDispatch:ee.syncV3?.localOutboxDispatch===!0,localCoordinatorBrowserAuthorityGate:ee.syncV3?.localCoordinatorBrowserAuthorityGate===!0,syncV3InitiativeFeedActivation:typeof ee.syncV3?.initiativeFeedActivation=="boolean"?ee.syncV3.initiativeFeedActivation:void 0,syncV3CombinedFeedRouteAvailable:typeof ee.syncV3?.combinedFeed?.routeAvailable=="boolean"?ee.syncV3.combinedFeed.routeAvailable:void 0,syncV3CombinedFeedActivation:typeof ee.syncV3?.combinedFeed?.activationReady=="boolean"?ee.syncV3.combinedFeed.activationReady:void 0,syncV3CombinedFeedCoverage:tr?.coverage})}catch{}finally{T||R(!0)}})(),()=>{T=!0}},[P]);const b=typeof window>"u"?"":C?Ky:"",$=P(hc.baseUrl),I=P(hc.apiBaseUrl),E=P(hc.cloudBaseUrl),K=P(hc.cloudMcpBaseUrl),U=P(hc.cloudAuthBaseUrl),L=P(hc.wsBaseUrl),D=P(p),ie=P(g),H=P(h),be=w.apiBaseUrl||w.baseUrl,me=D||be||(C?"":I||$)||"",Ve=ie||U||$,Re=w.cloudAuthBaseUrl||w.baseUrl,ye=((C?Re||Ve:Ve||Re)||me||b).trim().replace(/\/+$/,""),ue=P(W0(w.cloudMcpBaseUrl||w.cloudAuthBaseUrl||w.cloudBaseUrl||H||ie||K||U||E||ye)),ve=(w.cloudMcpBaseUrl||H||ue||w.cloudBaseUrl||K||E||ye||b).trim().replace(/\/+$/,""),Pe=!S&&!!ye&&!me,Le=S||M&&!!(ye||me),se=Le&&!Pe,V=!!(ye||me||S),W=S?"cloud":"local",[z,fe]=o.useState(()=>W),ke=W==="local"&&C&&V?kv():"",Y=ke.length>0,we=o.useCallback(T=>!T||/^https?:\/\//i.test(T)||!me||!T.startsWith("/")?T:`${me}${T}`,[me]),q=o.useCallback(T=>{if(!T||/^https?:\/\//i.test(T)||!T.startsWith("/"))return T;const te=T.startsWith("/api/taskforce/auth/")||T.startsWith("/api/taskforce/account/")||T.startsWith("/api/taskforce/billing/")||T.startsWith("/api/taskforce/sync/")||T.startsWith("/api/taskforce/settings/mcp/");if(!S&&te&&(z==="cloud"||!M||w.cloudAuthViaLocalProxy||w.workspaceMode==="multi-cloud"))return T;const ne=ye||me;if(ne){const ee=`${ne}${T}`;if(typeof window<"u"&&!S&&te)try{if(new URL(ee,window.location.origin).origin===window.location.origin)return`${Ky}${T}`}catch{return`${Ky}${T}`}return ee}return T},[M,w.cloudAuthViaLocalProxy,w.workspaceMode,ye,me,S,z]),le=o.useCallback(T=>{const te=String(T||"").trim()||"/taskforce-ws",ne=te.startsWith("/")?te:`/${te}`,ee=String(y||w.wsBaseUrl||L||me||"").trim().replace(/\/+$/,""),Ke=typeof window<"u"?window.location.origin:"",et=ee||Ke;if(!et)return"";try{const tt=new URL(ne,et);return tt.protocol==="https:"&&(tt.protocol="wss:"),tt.protocol==="http:"&&(tt.protocol="ws:"),tt.toString()}catch{return""}},[y,w.wsBaseUrl,L,me]),[$e,re]=o.useState("tasks"),[de,He]=o.useState(!1),[ce,pe]=o.useState(!1),[xe,N]=o.useState("open"),[X,Ae]=o.useState(!1),[Te,he]=o.useState(hu(l.theme)||Dh),[ot,We]=o.useState(hu(l.theme)||Dh),[Xe,ae]=o.useState(!0),[G]=o.useState(".taskforce"),Ie=!1,[Fe,it]=o.useState(!1),[Me,qe]=o.useState([]),[ge,_e]=o.useState([]),[Be,Ge]=o.useState(""),[F,Ne]=o.useState(null),[Ce,ut]=o.useState(null),[mt,Ue]=o.useState(""),[wt,kt]=o.useState(""),rt=o.useMemo(()=>N0({projectRoot:mt,runtimeMode:W}),[mt,W]),[Ht,lr]=o.useState(""),[rr,wr]=o.useState(""),st=L0(z),zt=w.workspaceMode==="single-local"||w.workspaceMode==="multi-cloud"?w.workspaceMode:st.workspaceMode,Lt=typeof w.workspaceSwitchingEnabled=="boolean"?w.workspaceSwitchingEnabled:st.workspaceSwitchingEnabled,[Mt,Ee]=o.useState(!1),[ct,lt]=o.useState(!1),[Je,nt]=o.useState(Y),[Ct,Rt]=o.useState(Y?ke:"anonymous"),[Dt,It]=o.useState(""),[Qt,ir]=o.useState(""),[dr,sr]=o.useState(""),[pr,Jr]=o.useState([]),[Tr,br]=o.useState(""),[ur,Qr]=o.useState(!0),[Hr,Gt]=o.useState(null),[bt,gr]=o.useState(()=>{if(W==="local")return"default";const T=yk(rt);return T&&T.toLowerCase()!=="default"?T:"default"}),u=o.useMemo(()=>j0({projectRoot:mt,runtimeMode:z,workspaceId:bt}),[mt,z,bt]),[ht,yr]=o.useState([]),[Er,mn]=o.useState(()=>el()),[qt,Vr]=o.useState(!1),[Tt,Ut]=o.useState(Y),[fr,$t]=o.useState("idle"),[Mr,Fr]=o.useState(null),[Vt,Dr]=o.useState(null),Ye=o.useRef(null),en=o.useRef(0),bn=o.useRef(0),tn=o.useRef(Y),ft=o.useRef(bt),rn=o.useRef(null),Nt=o.useRef(0),or=o.useRef((typeof crypto<"u"&&typeof crypto.randomUUID=="function"?crypto.randomUUID():`${Date.now()}-${Math.random().toString(36).slice(2)}`).replace(/[^A-Za-z0-9_-]+/g,"").slice(0,12)||"session"),[xr,hn]=o.useState(0),ys=o.useRef(null),Nn=o.useRef(null),Sn=o.useRef(null),kr=o.useRef(null),cr=o.useRef(null),Wr=o.useRef(null),on=o.useRef(null),dt=o.useCallback((T,te)=>{const ne=String(T||"").trim();if(!ne)return;const ee=String(ft.current||"").trim();!te?.skipTransitionReset&&ee&&ee!==ne&&(Nt.current+=1,hn(Nt.current)),ft.current=ne,te?.clearExplicitSelection!==!1&&(rn.current=null),gr(ne)},[]);o.useEffect(()=>{ft.current=bt},[bt]);const Un=o.useCallback(T=>{const te=String(T||"").trim();te&&gr(()=>{const ne=String(rn.current||"").trim();let ee=te;return ne&&ne!==te&&(ee=ne),ft.current=ee,ee})},[]),Tn=o.useCallback(()=>({workspaceId:String(ft.current||"default").trim()||"default",epoch:Nt.current}),[]),jn=o.useCallback(()=>ft.current,[]),an=o.useCallback(T=>(String(ft.current||"default").trim()||"default")!==T.workspaceId||Nt.current!==T.epoch,[]),Ds=o.useCallback(T=>Nt.current!==T.epoch,[]),da=o.useCallback(T=>Ph(T)||Wk(T),[]),J=o.useCallback(()=>{[ys,Nn,Sn,kr,cr,Wr].forEach(T=>{T.current?.abort("workspace-transition"),T.current=null}),on.current!==null&&typeof window<"u"&&(window.clearTimeout(on.current),on.current=null),Mc.current=null},[]),Qe=o.useMemo(()=>zN({shouldGateProtectedApiCalls:se,runtimeMode:z,authSessionResolved:Tt,authRequiredForApi:Mt,isAuthenticated:Je}),[se,z,Tt,Mt,Je]),St=Qe.shouldDeferProtectedApiCalls,Xt=Qe.shouldBlockProtectedApiCalls,[at,Ft]=o.useState(null),[Lr,Nr]=o.useState(null),[Rr,Kt]=o.useState(!1),[Bn,Xn]=o.useState("unknown"),[va,Cr]=o.useState(null),[cn,kn]=o.useState(l.shortcut||"Alt+T"),[zn,ea]=o.useState(l.priorities||[]),[La,mr]=o.useState(""),[Zo,Za]=o.useState(!1),[ks,Eo]=o.useState(!1),[xa,Ja]=o.useState(!0),[Ra,vs]=o.useState(()=>R0()),Qa=o.useMemo(()=>x0(),[]),[ws,ln]=o.useState(()=>{try{return(Intl.DateTimeFormat().resolvedOptions().locale||"").toLowerCase().startsWith("en-us")?"sunday":"monday"}catch{return"monday"}}),[Oa,yn]=o.useState(!1),[Vs,Mn]=o.useState(!0),[Ls,vt]=o.useState(!1),[nr,nn]=o.useState(""),[vn,ta]=o.useState(null);WN({currentWorkspaceIdRef:ft,resolveApiUrl:we,runtimeMode:z});const{initiativeTemplates:ho,fetchInitiativeTemplates:Os}=nN({shouldDeferProtectedApiCalls:St,shouldBlockProtectedApiCalls:Xt}),{zenMode:wa,setZenModeState:Bs,toggleZenMode:Xa}=aN(),[Xr,Ar]=o.useState(!1),[An,es]=o.useState(null),{uiNotice:Wn,pushNotice:ra,clearNotice:ts}=XE(),rs=o.useRef(Wn);rs.current=Wn;const[na,aa]=o.useState([]),un=o.useRef(null),[bs,Ws]=o.useState(0),go=o.useCallback(T=>!T||!mt?T:T.startsWith(mt)?T.slice(mt.length).replace(/^[/\\]+/,""):T,[mt]),[pn,Hn]=o.useState([]),[ua,Pa]=o.useState([]),[Gs,Vn]=o.useState([]),[wn,oe]=o.useState([]),[yt,Yt]=o.useState([]),[vr,Ur]=o.useState(Gy),[sa,Dn]=o.useState([]),[Cn,gi]=o.useState(null),[ba,Ba]=o.useState(null),[yo,Ss]=o.useState(()=>new Set),ko=o.useRef(null),Bt=o.useRef(null),[Gn,$n]=o.useState(!1),[sn,Sa]=o.useState(null),[ns,As]=o.useState(null),Ks=o.useCallback(T=>{String(t||"").trim()||As(T)},[t]),[No,jo]=o.useState(!1),[pa,Wa]=o.useState([]),[Yr,$a]=o.useState(!1),[Kn,Mo]=o.useState({}),yi=o.useRef({authSessionResolved:!1,configLoaded:!1,workspaceBootstrapPending:!1});o.useEffect(()=>{yi.current={authSessionResolved:Tt,configLoaded:Yr,workspaceBootstrapPending:qt}},[Tt,Yr,qt]);const qs=o.useCallback(T=>{$t(T),T!=="ready"&&(Fr(null),Dr(Date.now()))},[]),Ys=o.useCallback(T=>{const te=yi.current;te.authSessionResolved&&te.configLoaded&&!te.workspaceBootstrapPending||($t("stalled"),Fr(T),Dr(ne=>ne??Date.now()))},[]),Aa=o.useCallback(async(T,te,ne=lf,ee)=>{const Ke=new AbortController,et=ee?.signal,tt=Number(ne)>0?Number(ne):lf,Wt=Tn(),tr=T.startsWith("/api/taskforce/")?Dy(te,qw({workspaceId:Wt.workspaceId,epoch:Wt.epoch,seed:or.current})):te,Pr=typeof window<"u"?window.setTimeout(()=>Ke.abort("bootstrap-timeout"),tt):null,$r=()=>{Ke.abort(et?.reason||"external-abort")};et&&(et.aborted?$r():et.addEventListener("abort",$r,{once:!0}));try{return await fetch(T,{...tr||{},signal:Ke.signal})}catch(_r){throw et?.aborted&&qy(_r,et)?et.reason||_r:Ph(_r)||_r==="bootstrap-timeout"?Gb(tt):_r}finally{et&&et.removeEventListener("abort",$r),Pr!==null&&typeof window<"u"&&window.clearTimeout(Pr)}},[Tn]),as=o.useMemo(()=>{const T=!Tt,te=fr==="stalled",ne=Tt&&(!Yr||qt||te);let ee="Checking account, workspace access, and setup status...";return fr==="auth"?ee="Verifying session...":fr==="workspace"?ee="Resolving workspace access...":fr==="config"&&(ee="Loading configuration..."),{phase:fr,auth:{resolved:Tt,pending:T},config:{loaded:Yr},workspace:{pending:qt},pending:T||ne,authPending:T,appPending:ne,ready:Tt&&Yr&&!qt&&fr==="ready",stalled:te,subtitle:ee,error:Mr,startedAt:Vt}},[Tt,Mr,fr,Vt,Yr,qt]),Cs=o.useCallback(T=>String(T?.name||"")==="BootstrapTimeoutError",[]),[Do,Zs]=o.useState([]),[_s,Js]=o.useState({}),[qn,Fa]=o.useState(l.taxonomies||[]),Gr=o.useMemo(()=>(pa.length>0?pa:c||[]).map(te=>typeof te=="string"?{value:te.toLowerCase().replace(/\s+/g,"-"),label:te}:te).sort((te,ne)=>te.label.localeCompare(ne.label)),[pa,c]),rl=o.useMemo(()=>({categories:Gr,types:Do,priorities:zn,taxonomies:qn,displayLabels:_s}),[Gr,Do,zn,qn,_s]);o.useMemo(()=>Gr.filter(T=>!T.disabled),[Gr]);const oa=o.useCallback(T=>T.find(ne=>ne.value==="default"||ne.value==="general"||ne.label==="General"||ne.value==="Taskforce"||ne.label==="Taskforce")?.value||T[0]?.value||"default",[]),Fn=Do.length>0?Do:d,[vo,nl]=o.useState(!1),[ud,Ea]=o.useState(""),Sc=o.useCallback(()=>Ea(""),[]),Na="Authentication required. Sign in to continue.",[Ca,ss]=o.useState(!1),[os,Lo]=o.useState(!1),$s=o.useCallback(()=>{lt(z==="cloud"),nt(!1),ir(""),sr(""),br(""),Ea(Na)},[Na,z]),{recentlyChangedTaskIds:Ac,fetchTasks:Hi,fetchArchive:Cc,refreshTaskCollections:_c,refreshTaskCollectionsFromInvalidation:Ic,mergeTaskFromServer:al}=sN({tasks:pn,archivedTasks:ua,setTasks:Hn,setArchivedTasks:Pa,setLoadingTasks:$n,getCurrentWorkspaceId:jn,workspaceResetKey:`${bt}:${xr}`,shouldDeferProtectedApiCalls:St,shouldBlockProtectedApiCalls:Xt,handleUnauthorized:$s,authRequiredForApi:Mt});o.useEffect(()=>{xr!==0&&(Mc.current=null,gl.current="",cp.current="",Qi.current="",jc.current="",yl.current="",ss(!1),mn(el()),Lo(!1),Dn([]),gi(null),Ba(null),Ss(new Set),ko.current=null,Bt.current=null,Hn([]),Pa([]),Vn([]),oe([]),Yt([]),Ur(Gy()),As(null),$n(!1))},[Pa,$n,Hn,xr]);const _a=o.useCallback(async(T=!1,te)=>{if(!(te?.ignoreAuthGuard===!0)&&(St||Xt))return!1;T||$n(!0);const ee=Tn();cr.current?.abort("superseded");const Ke=new AbortController;cr.current=Ke;try{let et=await fetch("/api/taskforce/deleted",{signal:Ke.signal});if(et.status===404&&(et=await fetch("/api/taskforce/trash",{signal:Ke.signal})),et.status===401)return $s(),Dn([]),!1;if(et.status===404)return an(ee)?!1:(Dn([]),Ba(ee.workspaceId),!0);if(et.ok){const tt=await et.json();if(an(ee))return!1;const Wt=Array.isArray(tt?.deleted)?tt.deleted.map(tr=>{const Pr=tr?.taskSnapshot&&typeof tr.taskSnapshot=="object"?xo(tr.taskSnapshot):null;return Pr?{...tr,taskSnapshot:Pr}:null}).filter(tr=>!!tr):[];return Dn(Wt),Ba(ee.workspaceId),!0}return!1}catch(et){return qy(et,Ke.signal)||da(et)||console.error("[Taskforce] Failed to fetch deleted tasks:",et),!1}finally{cr.current===Ke&&(cr.current=null),T||$n(!1)}},[Tn,$s,da,an,St,Xt]),Zr=o.useCallback(async T=>{if(!(T?.ignoreAuthGuard===!0)&&(St||Xt))return;const ne=Tn();Wr.current?.abort("superseded"),on.current!==null&&typeof window<"u"&&(window.clearTimeout(on.current),on.current=null);const ee=new AbortController;Wr.current=ee,Ur(Ke=>({...Ke,isRefreshing:!0}));try{const Ke=qw({workspaceId:ne.workspaceId,epoch:ne.epoch,seed:or.current}),et=async _r=>{if(typeof window>"u")return fetch(_r,Dy({signal:ee.signal},Ke));const Rn=new AbortController,ca=window.setTimeout(()=>Rn.abort("planning-timeout"),ih),so=()=>Rn.abort(ee.signal.reason||"external-abort");ee.signal.aborted?so():ee.signal.addEventListener("abort",so,{once:!0});try{return await fetch(_r,Dy({signal:Rn.signal},Ke))}catch(Es){if(ee.signal.aborted)throw ee.signal.reason||Es;if(Ph(Es)||Es==="planning-timeout")return null;throw Es}finally{window.clearTimeout(ca),ee.signal.removeEventListener("abort",so)}};let tt=null,Wt={initiatives:"ready",workstreams:"ready"};const tr=await et("/api/taskforce/planning/bootstrap");if(tr?.status===401){$s(),Vn([]),oe([]),Yt([]),Ur({status:"error",error:"Sign in again to load Planning.",isRefreshing:!1,collections:{initiatives:"error",workstreams:"error"}});return}if(tr===null)throw Gb(ih);if(tr.ok){const _r=await tr.json().catch(()=>null);if(!_r||!Array.isArray(_r.initiatives)||!Array.isArray(_r.workstreams))throw new Error("Planning returned an incomplete response.");tt=Kb(_r)}else{const[_r,Rn]=await Promise.all([et("/api/taskforce/initiatives"),et("/api/taskforce/workstreams")]);if(!_r||!Rn)throw new Error("Planning endpoints timed out during startup.");if(_r.status===401||Rn.status===401){$s(),Vn([]),oe([]),Yt([]),Ur({status:"error",error:"Sign in again to load Planning.",isRefreshing:!1,collections:{initiatives:"error",workstreams:"error"}});return}const ca=async(Mp,Dm)=>{if(!Mp.ok)return{items:[],status:"error"};const Hc=await Mp.json().catch(()=>null),Lm=Array.isArray(Hc)?Hc:Hc&&typeof Hc=="object"&&Array.isArray(Hc[Dm])?Hc[Dm]:null;return Lm?{items:Lm,status:"ready"}:{items:[],status:"error"}},[so,Es]=await Promise.all([ca(_r,"initiatives"),ca(Rn,"workstreams")]);if(Wt={initiatives:so.status,workstreams:Es.status},Wt.initiatives==="error"&&Wt.workstreams==="error")throw new Error("Planning could not be loaded.");tt=Kb({initiatives:so.items,workstreams:Es.items,workstreamTaskSummaries:[]})}if(an(ne))return;Vn(tt.initiatives),oe(tt.workstreams),Yt(tt.workstreamTaskSummaries);const Pr=Wt.initiatives==="error"||Wt.workstreams==="error",$r=tt.initiatives.length===0&&tt.workstreams.length===0;Ur({status:Pr?"partial":$r?"empty":"ready",error:Pr?"Some planning data could not be loaded.":null,isRefreshing:!1,collections:Wt})}catch(Ke){if(qy(Ke,ee.signal)||da(Ke))return;if(Cs(Ke)?(hr("planning_bootstrap_timeout",{workspaceId:ne.workspaceId,epoch:ne.epoch,timeoutMs:ih}),console.warn("[Taskforce] Planning bootstrap timed out during startup; retrying in background.")):console.error("[Taskforce] Failed to fetch planning entities:",Ke),!an(ne)){const tt=Gs.length>0||wn.length>0;Ur(Wt=>({status:tt?"partial":"error",error:Ke instanceof Error&&Ke.message?Ke.message:"Planning could not be loaded.",isRefreshing:!1,collections:tt?Wt.collections:{initiatives:"error",workstreams:"error"}}))}typeof window<"u"&&!an(ne)&&Gs.length===0&&wn.length===0&&(on.current=window.setTimeout(()=>{on.current=null,Zr(T)},3e3))}finally{Wr.current===ee&&(Wr.current=null)}},[lf,ih,Gs.length,Tn,$s,da,an,St,Xt,wn.length]),sl=o.useCallback(async(T,te)=>{const ne=String(te||"").trim();if(!ne)throw new Error(`Cannot load ${T} details without an id.`);const ee=Tn(),Ke=await fetch(`/api/taskforce/${T}/${encodeURIComponent(ne)}`),et=await Ke.json().catch(()=>({}));if(!Ke.ok)throw new Error(et?.error||`Failed to load ${T} details (${Ke.status})`);const tt=et;return an(ee)||(T==="initiative"?Vn(Wt=>Li(Wt,tt)):oe(Wt=>Li(Wt,tt))),tt},[Tn,an]),ja=o.useCallback(async(T=!1,te)=>{await Hi(T,te)},[Hi]),Kr=o.useCallback(async(T=!1,te)=>{const ne=String(ft.current||"default").trim()||"default",ee=await Cc(T,te),Ke=String(ft.current||"default").trim()||"default";return ee&&Ke===ne&&gi(ne),ee},[Cc]),Ua=o.useCallback((T=!0,te)=>{const ne=String(ft.current||"default").trim()||"default";if(Cn===ne)return Promise.resolve(!0);const ee=ko.current;if(ee?.workspaceId===ne)return ee.promise;const Ke=Kr(T,te).finally(()=>{ko.current?.promise===Ke&&(ko.current=null)});return ko.current={workspaceId:ne,promise:Ke},Ke},[Cn,Kr]),fa=o.useCallback((T=!0,te)=>{const ne=String(ft.current||"default").trim()||"default";if(ba===ne)return Promise.resolve(!0);const ee=Bt.current;if(ee?.workspaceId===ne)return ee.promise;const Ke=_a(T,te).finally(()=>{Bt.current?.promise===Ke&&(Bt.current=null)});return Bt.current={workspaceId:ne,promise:Ke},Ke},[ba,_a]),Jo=o.useCallback(()=>{const T=String(ft.current||"default").trim()||"default";return Cn!==T?Promise.resolve(!1):Kr(!0)},[Cn,Kr]),ol=o.useCallback((T=!0)=>{const te=String(ft.current||"default").trim()||"default";return ba!==te?Promise.resolve(!1):_a(T)},[ba,_a]),O=o.useCallback(async T=>{const te=T?.isSilent!==!1,ne=T?.ignoreAuthGuard===!0,ee=String(ft.current||"default").trim()||"default",Ke=Cn===ee,et=ba===ee;await Promise.all([_c({isSilent:te,ignoreAuthGuard:ne,includeArchive:Ke,highlightChangedTaskIds:T?.highlightChangedTaskIds}),et?_a(te,{ignoreAuthGuard:ne}):Promise.resolve(!1),Zr({ignoreAuthGuard:ne})])},[Cn,ba,_a,Zr,_c]),j=o.useRef(!1),xt=o.useRef(null),Et=o.useRef(Cn),At=o.useRef(ba),De=o.useRef(Ic),Fs=o.useRef(_a),er=o.useRef(Zr);Et.current=Cn,At.current=ba,De.current=Ic,Fs.current=_a,er.current=Zr;const Yn=o.useCallback(async T=>{const te=String(ft.current||"default").trim()||"default",ne=xt.current;if(xt.current={workspaceId:te,scope:ne?.workspaceId===te?OC(ne.scope,T):T},!j.current){j.current=!0;try{for(;xt.current;){const ee=xt.current;xt.current=null;const Ke=String(ft.current||"default").trim()||"default";if(ee.workspaceId!==Ke)continue;const et=new Set(ee.scope.collections),tt=et.has("active"),Wt=et.has("archive")&&Et.current===Ke,tr=et.has("deleted")&&At.current===Ke,Pr=L1(ee.scope);await Promise.all([tt||Wt?De.current({includeActive:tt,includeArchive:Wt,highlightChangedTaskIds:Pr}):Promise.resolve(),tr?Fs.current(!0):Promise.resolve(!1),et.has("planning")?er.current():Promise.resolve()])}}finally{j.current=!1}}},[]),Oo=o.useRef(()=>{}),ma=o.useRef(()=>{}),Is=o.useRef(async()=>!1),gn=o.useCallback(T=>Is.current(T),[]),{userGlobalSyncStatus:il,setUserGlobalSyncStatus:ki,userGlobalSyncError:Mu,setUserGlobalSyncError:vi,workspaceLastPullAt:Qo,workspaceLastPushAt:Xo,workspaceLastErrorAt:Ig,workspaceLastErrorMessage:wi,workspaceLastSuccessfulSyncAt:pd,workspaceCloudSyncEnabled:dn,workspaceSyncPhase:xn,workspaceSyncSetupIntent:is,workspaceSyncStatus:Ff,workspaceSyncSummary:Uf,workspaceSyncRecommendedAction:zf,workspaceSyncBusy:fd,workspaceSyncPendingChanges:Du,workspaceTaskRelationships:Hf,localCoordinatorDataVersion:Lu,localCoordinatorStatus:Vf,switchLocalCoordinatorWorkspace:Ou,transferLocalCoordinatorOwnership:Gf,workspacePendingSignatureRef:Bu,workspaceDeletedTaskIdsRef:Kf,workspaceDeletedTaskWatermarksRef:Wu,loadWorkspaceSyncState:qf,applyWorkspaceSyncStateSnapshot:$u,syncUserGlobalSettings:Fu,buildWorkspaceSyncSignature:Uu,pushWorkspaceChangesToCloud:Yf,saveWorkspaceCloudSyncSettings:zu,retryUserGlobalSettingsSync:Zf,retryWorkspaceCloudSync:cl,resetWorkspaceSyncCursorAndPull:md,getWorkspaceSyncDiagnostics:Hu}=JE({currentWorkspaceId:bt,cloudAuthConfigured:V,runtimeMode:z,authSessionResolved:Tt,isAuthenticated:Je,authUserId:Ct,projectName:wt,resolveCloudAuthUrl:q,resolveWebSocketUrl:le,realtimeSyncEnabled:Rr,localOutboxDispatchEnabled:w.syncV3LocalOutboxDispatch,localCoordinatorBrowserAuthorityGateEnabled:w.localCoordinatorBrowserAuthorityGate,initiativeFeedActivationEnabled:w.syncV3InitiativeFeedActivation,combinedFeedActivationEnabled:w.syncV3CombinedFeedActivation,combinedFeedCoverage:w.syncV3CombinedFeedCoverage,tasks:pn,archivedTasks:ua,deletedTasks:sa,initiatives:Gs,workstreams:wn,taxonomies:qn,taxonomyState:Ca?rl:void 0,setupState:at,globalTheme:ot,locale:Ra,globalWeekStartsOn:ws,themeUseGlobalDefault:Xe,setTasks:Hn,setArchivedTasks:Pa,setAuthBlocked:lt,setIsAuthenticated:nt,checkAuthSession:gn,setGlobalTheme:We,setCurrentTheme:he,setSetupState:Ft,setLocale:vs,setGlobalWeekStartsOn:ln,fetchPlanningEntities:Zr}),Tc=o.useCallback((T=Fn)=>T.find(te=>String(te.value||"").trim().length>0)?.value||po,[Fn]),[ll,ei]=o.useState(()=>oa(Gr)),[xc,Bo]=o.useState(()=>Tc(Fn)),[hd,Vi]=o.useState(2),[gd,Vu]=o.useState(3),[Jf,yd]=o.useState("task"),[Rc,bi]=o.useState("unassigned"),[Qf,Wo]=o.useState(""),[$o,ti]=o.useState(""),[Pc,kd]=o.useState(""),[Si,Ai]=o.useState(""),[Ts,vd]=o.useState(""),dl=o.useRef(Si),xs=o.useRef(Ts),wd=o.useRef(!1),[Ci,Gu]=o.useState(!1),wo=o.useCallback(()=>{const T=dl.current.trim()!==""||xs.current.trim()!=="";T!==wd.current&&(wd.current=T,Gu(T))},[]),Ku=o.useCallback(T=>{dl.current=T,wo()},[wo]),bd=o.useCallback(T=>{xs.current=T,wo()},[wo]),ri=o.useCallback(()=>dl.current,[]),Fo=o.useCallback(()=>xs.current,[]);o.useEffect(()=>{dl.current=Si,wo()},[wo,Si]),o.useEffect(()=>{xs.current=Ts,wo()},[Ts,wo]);const[ni,Sr]=o.useState([]),[Sd,Us]=o.useState([]),[Gi,ai]=o.useState(""),[Ki,Xf]=o.useState({}),Ad=o.useRef(null),[Cd,qu]=o.useState(""),[em,ul]=o.useState(""),[_i,Ec]=o.useState(""),[pl,Yu]=o.useState({});o.useEffect(()=>{if(sn)return;const T=String(xc||"").trim();Fn.some(ne=>String(ne.value||"").trim()===T)||Bo(Tc(Fn))},[Fn,sn,Tc,xc]);const{searchQuery:Zu,setSearchQuery:bo,filterCategories:Ju,setFilterCategories:Qu,filterPriorities:_d,setFilterPriorities:qi,filterTypes:fl,setFilterTypes:Tg,filterStatus:Xu,setFilterStatus:ml,filterAssignees:cs,setFilterAssignees:si,filterAssigneesAllSelected:xg,setFilterAssigneesAllSelected:Rg,filterTaxonomies:Uo,setFilterTaxonomies:Ii,hasInitedFilters:Id,setHasInitedFilters:Td,sortBy:ep,setSortBy:tp,sortOrder:rp,setSortOrder:Yi,toggleSortOrder:Nc,groupBy:xd,setGroupBy:np,emptyColumnMode:ap,setEmptyColumnMode:Zi,collapsedCategories:Ji,setCollapsedCategories:Rd,clearFilters:Ot,filteredTasks:tm,searchAgnosticTasks:sp,filteredArchive:rm,groupedTasks:Pd}=_N({tasks:pn,archivedTasks:ua,activeCategories:Gr,activeTypes:Fn,priorities:zn,taxonomies:qn,configLoaded:Yr,referenceDataLoaded:Ca,assigneeOptionsLoaded:os,assigneeOptions:Er});Oo.current=ki,ma.current=vi;const{checkAuthSession:nm}=UN({runtimeConfigReady:M,shouldProbeCloudAuth:Le,authSessionResolved:Tt,resolveCloudAuthUrl:q,authOnlyCloudMode:Pe,authRequiredError:Na,runtimeMode:z,workspaceSelectionScope:rt,markBootstrapPhase:qs,markBootstrapStalled:Ys,setRuntimeMode:fe,setAuthRequiredForApi:Ee,setIsAuthenticated:nt,setAuthUserId:Rt,setAuthWorkspaceId:It,setAuthUserEmail:ir,setAuthUserDisplayName:sr,setAuthUserAvatarUrl:br,setUserGlobalSyncStatus:T=>Oo.current(T),setUserGlobalSyncError:T=>ma.current(T),setHasBetaAccess:Qr,setAvailableWorkspaces:yr,setHydratedWorkspaceRole:Gt,setAssigneeOptions:mn,setAuthBlocked:lt,setAuthSessionResolved:Ut,setError:Ea,applyResolvedWorkspaceId:Un,readPersistedWorkspaceId:yk,authSessionRequestRef:Ye,authSessionEpochRef:en,authSessionLastCheckedAtRef:bn,authSessionLastResultRef:tn,isLoopbackHost:C,setAuthStateReadyRefs:(T,te,ne)=>{Nd.current=te,ip.current=ne,jd.current=T}});Is.current=nm;const[Ed,am]=o.useState("tasks"),[Pg,Eg]=o.useState(!1),[Ng,jg]=o.useState(!1),[op,sm]=o.useState([]),[Qs,hl]=o.useState(!1),om=o.useRef(null),Rs=o.useRef(null),im=o.useRef(!1),Nd=o.useRef(Tt),ip=o.useRef(Mt),jd=o.useRef(Je),gl=o.useRef(""),cp=o.useRef(""),Qi=o.useRef(""),jc=o.useRef(""),yl=o.useRef(""),Mc=o.useRef(null),kl=o.useRef(!1),lp=o.useRef(!1),{handleSaveSettings:vl,handleSaveTheme:wl,handleSaveGlobalTheme:Md,handleJsonBackupEnabledChange:cm,handleSaveGlobalJsonBackupEnabled:bl,handleSaveGlobalWeekStartsOn:dp,handleSaveLocale:Dd,handleManualComplexityEnabledChange:Dc,handleChecklistDropdownEnabledChange:Mg,handleShowTaskCardStatusLabelChange:up,handleResetProjectToGlobal:pp}=tN({keyShortcut:cn,themeUseGlobalDefault:Xe,runtimeMode:z,jsonBackupUseGlobalDefault:xa,globalTheme:ot,globalJsonBackupEnabled:ks,setCurrentTheme:he,setThemeUseGlobalDefault:ae,setGlobalTheme:We,setJsonBackupEnabled:Za,setJsonBackupUseGlobalDefault:Ja,setGlobalJsonBackupEnabled:Eo,setGlobalWeekStartsOn:ln,setLocale:vs,setManualComplexityEnabled:yn,setChecklistDropdownEnabled:Mn,setShowTaskCardStatusLabel:vt});o.useEffect(()=>{z==="cloud"&&rt!==id&&sx(bt,rt)},[z,bt,rt]),o.useEffect(()=>{Nd.current=Tt,ip.current=Mt,jd.current=Je},[Tt,Mt,Je]);const{hasLoadedUiStateRef:lm,loadPersistedUiState:dm,resetPersistedUiStateLoad:fp,setActiveWorkspaceModule:Dg,uiStateReady:Xi}=KN({runtimeMode:z,workspaceUiStateScope:u,currentWorkspaceId:bt,currentWorkspaceIdRef:ft,referenceDataLoaded:Ca,activeCategories:Gr,activeTypes:Fn,priorities:zn,taxonomies:qn,activeWorkspaceModule:Ed,setActiveWorkspaceModuleState:am,groupBy:xd,setGroupBy:np,emptyColumnMode:ap,setEmptyColumnMode:Zi,taskScope:xe,setTaskScope:N,openTaskId:sn,setPendingOpenTaskId:Ks,compressedCards:X,setCompressedCards:Ae,zenMode:wa,setZenModeState:Bs,searchQuery:Zu,setSearchQuery:bo,collapsedCategories:Ji,setCollapsedCategories:Rd,filterCategories:Ju,setFilterCategories:Qu,filterPriorities:_d,setFilterPriorities:qi,filterTypes:fl,setFilterTypes:Tg,filterStatus:Xu,setFilterStatus:ml,filterAssignees:cs,setFilterAssignees:si,filterAssigneesAllSelected:xg,setFilterAssigneesAllSelected:Rg,filterTaxonomies:Uo,setFilterTaxonomies:Ii,sortBy:ep,setSortBy:tp,sortOrder:rp,setSortOrder:Yi,hasInitedFilters:Id,setHasInitedFilters:Td,lastUsedCategory:Cd,setLastUsedCategory:qu,taskforceAgentId:em,setTaskforceAgentId:ul,taskforceAgentConversationId:_i,setTaskforceAgentConversationId:Ec,taskforceAgentConversationByAgentId:pl,setTaskforceAgentConversationByAgentId:Yu}),Ti=o.useCallback(T=>{const te=T.runtimeMode==="cloud"?"cloud":"local",ne=!!T.authRequiredForApi,ee=typeof T.userId=="string"&&T.userId.trim().length>0?T.userId.trim():"anonymous",Ke=te==="cloud"&&ee!=="anonymous",et=Ke||jd.current,tt=Nd.current;if(fe(te),Ee(ne),Ke&&(nt(!0),Rt(ee),lt(!1),tt||Ut(!0)),typeof T.workspaceId=="string"&&T.workspaceId.trim().length>0){const ca=T.workspaceId.trim();if(te==="local"){const so=String(ft.current||"").trim()||"default";dt(ca,{skipTransitionReset:!Yr&&so==="default"})}else Un(ca)}lt(te==="cloud"&&ne?!et:!1),T.setupState&&typeof T.setupState=="object"?Ft(T.setupState):Ft(null),T.runtimeCapabilities&&typeof T.runtimeCapabilities=="object"?Nr(T.runtimeCapabilities):Nr(null),Kt(!!T.realtimeSyncEnabled);const Wt=String(T.realtimeSyncFlagSource||"").trim().toLowerCase();Xn(Wt==="env"||Wt==="settings"||Wt==="default"?Wt:"unknown"),typeof T.shortcut=="string"&&T.shortcut.trim().length>0&&kn(T.shortcut);const tr=hu(T.theme);tr&&he(tr);const Pr=hu(T.globalTheme);Pr&&We(Pr),typeof T.themeUseGlobalDefault=="boolean"&&ae(T.themeUseGlobalDefault);const $r=T.runtimeMode==="cloud"?"cloud":"local";typeof T.projectRoot=="string"?Ue(T.projectRoot):$r==="cloud"&&Ue(""),typeof T.tenantId=="string"?wr(T.tenantId.trim()):$r==="cloud"&&wr("");const _r=$r==="cloud"?String(T.projectName||"").trim():T.projectName||T.paths?.projectName||"";(String(_r||"").trim().length>0||$r==="cloud")&&kt(_r),typeof T.mcpScript=="string"?lr(T.mcpScript):$r==="cloud"&&lr(""),typeof T.hostRoot=="string"?nn(T.hostRoot):$r==="cloud"&&nn(""),typeof T.jsonBackupEnabled=="boolean"&&Za(T.jsonBackupEnabled),typeof T.globalJsonBackupEnabled=="boolean"&&Eo(T.globalJsonBackupEnabled),typeof T.jsonBackupUseGlobalDefault=="boolean"&&Ja(T.jsonBackupUseGlobalDefault);const Rn=T?.schedulePreferences?.weekStartsOn;(Rn==="sunday"||Rn==="monday")&&ln(Rn),typeof T.manualComplexityEnabled=="boolean"&&yn(T.manualComplexityEnabled),typeof T.checklistDropdownEnabled=="boolean"?Mn(T.checklistDropdownEnabled):Mn(!0),typeof T.showTaskCardStatusLabel=="boolean"?vt(T.showTaskCardStatusLabel):vt(!1)},[Un,dt,Yr,ft]),So=o.useCallback(async()=>{const T=typeof performance<"u"?performance.now():Date.now();try{const te=await Aa("/api/taskforce/version",void 0,lf);if(!te.ok)return;const ne=await te.json().catch(()=>({}));ne?.build&&typeof ne.build=="object"&&Cr({version:String(ne.build.version||""),gitSha:ne.build.gitSha?String(ne.build.gitSha):null,buildTime:ne.build.buildTime?String(ne.build.buildTime):null,deployId:ne.build.deployId?String(ne.build.deployId):null}),hr("build_info_loaded",{durationMs:Math.round((typeof performance<"u"?performance.now():Date.now())-T)})}catch(te){Cs(te)&&hr("build_info_timeout",{durationMs:Math.round((typeof performance<"u"?performance.now():Date.now())-T)})}},[Aa,Cs]),{fetchReferenceData:oi,fetchConfig:ls,fetchWorkspaces:Lc,fetchAssigneeOptions:mp,switchWorkspace:Ps,resolveWorkspaceAfterAuth:Sl,retryBootstrapChecks:um,runCloudBootstrap:Al}=GN({shouldDeferProtectedApiCalls:St,shouldBlockProtectedApiCalls:Xt,getWorkspaceRequestState:Tn,isWorkspaceRequestStale:an,isWorkspaceEpochStale:Ds,isAbortError:da,isBootstrapTimeoutError:Cs,fetchWithTimeout:Aa,handleUnauthorized:$s,applyBootstrapConfig:Ti,loadPersistedUiState:dm,fetchBuildInfo:So,markBootstrapPhase:qs,markBootstrapStalled:Ys,fetchInitiativeTemplates:Os,setReferenceDataLoaded:ss,setCustomCategories:Wa,setCustomTypes:Zs,setPriorities:ea,setTaxonomies:Fa,setTaxonomyDisplayLabels:Js,setConfigLoaded:$a,hasLoadedUiStateRef:lm,currentWorkspaceIdRef:ft,referenceDataRequestRef:Mc,referenceDataAbortRef:Nn,bootstrapConfigAbortRef:ys,workspaceListAbortRef:Sn,assigneeOptionsAbortRef:kr,workspaceListHydratedRef:kl,setAvailableWorkspaces:yr,runtimeMode:z,applyResolvedWorkspaceId:Un,workspaceSwitchingEnabled:Lt,authSessionResolved:Tt,isAuthenticated:Je,authUserId:Ct,authUserAvatarUrl:Tr,setHydratedWorkspaceRole:Gt,setAssigneeOptions:mn,setAssigneeOptionsLoaded:Lo,commitCurrentWorkspaceId:(T,te)=>{rn.current=T,dt(T,te),te?.clearExplicitSelection!==!1&&(rn.current=null)},currentWorkspaceId:bt,workspaceSelectionScope:rt,abortWorkspaceScopedRequests:J,setWorkspaceBootstrapPending:Vr,checkAuthSession:gn,lastConfigRefreshKeyRef:cp,lastAssigneeOptionsLoadKeyRef:gl,lastWorkspaceSyncStateLoadKeyRef:Qi,lastTaskSurfaceLoadKeyRef:jc,lastSettingsSurfaceLoadKeyRef:yl,isOpen:de,activeTab:$e,showArchive:ce,taskScope:xe,settingsSection:Ce,workspaceBootstrapPending:qt,fetchTasks:ja,fetchPlanningEntities:Zr,refreshTaskCollections:O,loadWorkspaceSyncState:qf,switchLocalCoordinatorWorkspace:Ou,hasBootstrappedDataRef:lp}),ec=o.useCallback(async()=>{await gn(),await ls()},[gn,ls]);o.useEffect(()=>{if(!Yr||qt)return;const T=`${z}:${Je?"auth":"guest"}:${bt}:${Tr||"no-avatar"}`;os&&gl.current===T||(gl.current=T,mp())},[os,Tr,Yr,bt,mp,Je,z,qt]),o.useEffect(()=>{if(!Tt||!Je)return;const T=String(Ct||"").trim();if(!T||T==="anonymous")return;const te=String(Tr||"").trim()||null;mn(ne=>{let ee=!1;const Ke=ne.map(et=>et.kind!=="member"||String(et.value||"").trim()!==T||(typeof et.avatarUrl=="string"&&et.avatarUrl.trim().length>0?et.avatarUrl.trim():null)===te?et:(ee=!0,{...et,avatarUrl:te}));return ee?Ke:ne})},[Tt,Tr,Ct,Je]);const Lg=o.useMemo(()=>Lt?ht.find(te=>te.id===bt)?.role??null:Hr,[ht,bt,Hr,Lt]);o.useEffect(()=>{Je||Gt(null)},[Je]);const hp=o.useCallback(async()=>{Fr(null);const T=await Al({reason:"post-plans",ignoreAuthGuard:!0,tasksSilent:!0});return T.authenticated?T.success?T.workspaceSetupRequired?{success:!0,destination:"setup"}:{success:!0,destination:"app"}:{success:!1,destination:"app",error:T.error||"Unable to resolve workspace after plan selection.",code:T.code}:{success:!1,destination:"login",error:T.error||"Sign in required.",code:T.code||"AUTH_REQUIRED"}},[Al]),xi=o.useCallback(async T=>{const te=T?.reason||"retry",ne=typeof T?.preferredWorkspaceId=="string"?T.preferredWorkspaceId.trim():"",ee=T?.allowCommercialGate===!0;if(ne&&Lt){if(!await gn({force:!0}))return await ls({ignoreAuthGuard:!0}),{success:!1,error:"Sign in required.",code:"AUTH_REQUIRED"};const tt=await Sl({preferredWorkspaceId:ne});if(!tt.success)return await ls({ignoreAuthGuard:!0}),{success:!1,error:tt.error||"Unable to resolve workspace access.",code:tt.code};if(tt.workspaceSetupRequired)return await ls({ignoreAuthGuard:!0}),{success:!0,workspaceSetupRequired:!0}}const Ke=await Al({reason:te,ignoreAuthGuard:!0,tasksSilent:!0});return Ke.authenticated?Ke.success?Ke.workspaceSetupRequired?ee?{success:!0,workspaceSetupRequired:!1}:{success:!0,workspaceSetupRequired:!0}:(ee||Fu({preferCloudOnFirstSync:!0}),{success:!0,workspaceSetupRequired:!1}):{success:!1,error:Ke.error||"Unable to resolve workspace access.",code:Ke.code}:{success:!1,error:Ke.error||"Sign in required.",code:Ke.code||"AUTH_REQUIRED"}},[gn,ls,Sl,Al,Fu,Lt]),pm=o.useCallback(async(T,te)=>{if(!Lt)return{success:!1,error:"Workspace management is unavailable in local mode.",code:"WORKSPACE_MANAGEMENT_DISABLED"};const ne=String(T||"").trim();if(!ne)return{success:!1,error:"Workspace name is required."};try{const ee=await fetch("/api/taskforce/workspaces",{method:"POST",headers:{"Content-Type":"application/json"},credentials:"include",body:JSON.stringify({name:ne,description:typeof te=="string"?te:void 0})}),Ke=await ee.json().catch(()=>({}));if(!ee.ok||Ke?.success===!1)return{success:!1,error:Ke?.error||`Failed to create workspace (${ee.status})`,code:Ke?.code};const et=Ke?.workspace;if(await Lc(),et?.id){const tt=await Ps(et.id);if(!tt.success)return{success:!1,error:tt.error||"Workspace created but failed to activate.",code:tt.code}}return{success:!0,workspace:et}}catch{return{success:!1,error:"Failed to create workspace."}}},[Lc,Ps,Lt]),fm=o.useCallback(async T=>{if(!Lt)return{success:!1,error:"Workspace management is unavailable in local mode.",code:"WORKSPACE_MANAGEMENT_DISABLED"};const te=String(T||"").trim();if(!te)return{success:!1,error:"workspaceId is required.",code:"WORKSPACE_ID_REQUIRED"};try{const ne=await fetch(`/api/taskforce/workspaces/${encodeURIComponent(te)}`,{method:"DELETE",credentials:"include"}),ee=await ne.json().catch(()=>({}));if(!ne.ok||ee?.success===!1)return{success:!1,error:ee?.error||`Failed to delete workspace (${ne.status})`,code:ee?.code};await gn({force:!0}),await Promise.all([ls(),Lc()]);const Ke=typeof ee?.nextWorkspaceId=="string"?ee.nextWorkspaceId.trim():"";return Ke&&dt(Ke),{success:!0,nextWorkspaceId:Ke||void 0,workspaceSetupRequired:ee?.workspaceSetupRequired===!0,cleanupWarnings:Array.isArray(ee?.cleanupWarnings)?ee.cleanupWarnings.map(et=>String(et||"")):[]}}catch{return{success:!1,error:"Failed to delete workspace."}}},[gn,dt,ls,Lc,Lt]),Ld=o.useCallback(async T=>{const te=T==="operations"?"operations":"core";try{const ne=await fetch("/api/taskforce/global-settings",{method:"POST",headers:{"Content-Type":"application/json"},credentials:"include",body:JSON.stringify({setup:{mode:te}})}),ee=await ne.json().catch(()=>({}));return!ne.ok||ee?.success===!1?!1:(await ec(),!0)}catch{return!1}},[ec]),Cl=o.useCallback(async T=>{const te=String(T?.name||"").trim(),ne=typeof T?.workspaceId=="string"?T.workspaceId.trim():"";if(!te)return{success:!1,error:"Workspace name is required.",code:"WORKSPACE_NAME_REQUIRED"};try{const ee=await fetch("/api/taskforce/workspace-profile",{method:"POST",headers:{"Content-Type":"application/json","x-taskforce-runtime-mode":z},credentials:"include",body:JSON.stringify({workspaceId:ne&&ne!=="default"?ne:void 0,name:te,description:typeof T.description=="string"?T.description:void 0,allowCreate:!0})}),Ke=await ee.json().catch(()=>({}));if(!ee.ok||Ke?.success===!1)return{success:!1,error:Ke?.error||`Failed to save workspace (${ee.status})`,code:Ke?.code};const et=String(Ke?.workspace?.id||"").trim();if(et&&(dt(et),await new Promise(tt=>window.setTimeout(tt,0)),z==="cloud"&&Je&&et!==bt)){const tt=await Ps(et);if(!tt.success)return{success:!1,error:tt.error||"Workspace saved but failed to activate session workspace.",code:"WORKSPACE_SWITCH_FAILED"}}return await ec(),{success:!0,workspaceId:et||void 0}}catch{return{success:!1,error:"Failed to save workspace profile."}}},[dt,ec,z,Je,bt,Ps]),Od=o.useCallback(async(T,te)=>{if(!V)return{success:!1,error:"Cloud auth endpoint is not configured."};const ne=T.trim().toLowerCase(),ee=te;if(!ne||!ee)return{success:!1,error:"Email and password are required."};try{const Ke=await fetch(q("/api/taskforce/auth/login"),{method:"POST",headers:{"Content-Type":"application/json"},credentials:"include",body:JSON.stringify(H0({email:ne,password:ee,activeWorkspaceId:ft.current}))}),et=await Ke.json().catch(()=>({}));if(!Ke.ok||!et?.success)return{success:!1,error:et?.error||"Sign in failed.",code:et?.code};Ea("");const tt=await xi();return tt.success?(Rb(),{success:!0,workspaceSetupRequired:tt.workspaceSetupRequired===!0}):{success:!1,error:tt.error||"Unable to resolve workspace after sign in.",code:tt.code}}catch{return{success:!1,error:"Sign in failed."}}},[q,V,ft,xi]),mm=o.useCallback((T,te,ne)=>{let ee="/";try{const et=new URL(String(te||"/"),"https://taskforce.local");et.origin==="https://taskforce.local"&&String(te||"/").startsWith("/")&&!String(te||"/").startsWith("//")&&(ee=`${et.pathname}${et.search}${et.hash}`)}catch{ee="/"}let Ke=`/api/taskforce/auth/oauth/${encodeURIComponent(T)}/start?return_to=${encodeURIComponent(ee)}`;ne&&(Ke+=`&invite_token=${encodeURIComponent(ne)}`),window.location.href=q(Ke)},[q]),Bd=o.useCallback(async(T,te,ne)=>{if(!V)return{success:!1,error:"Cloud auth endpoint is not configured."};const ee=T.trim().toLowerCase(),Ke=te;if(!ee||!Ke)return{success:!1,error:"Email and password are required."};try{const et=await fetch(q("/api/taskforce/auth/register"),{method:"POST",headers:{"Content-Type":"application/json"},credentials:"include",body:JSON.stringify({email:ee,password:Ke,...typeof ne?.displayName=="string"&&ne.displayName.trim()?{displayName:ne.displayName.trim()}:{},...typeof ne?.planId=="string"&&ne.planId.trim()?{planId:ne.planId.trim()}:{},...typeof ne?.planVersionId=="string"&&ne.planVersionId.trim()?{planVersionId:ne.planVersionId.trim()}:{},...typeof ne?.interval=="string"&&ne.interval.trim()?{interval:ne.interval.trim()}:{}})}),tt=await et.json().catch(()=>({}));if(!et.ok||!tt?.success)return{success:!1,error:tt?.error||"Create account failed.",code:tt?.code,verificationRequired:!!tt?.verificationRequired,verificationToken:typeof tt?.verificationToken=="string"?tt.verificationToken:void 0,emailSent:tt?.emailSent!==!1,emailError:typeof tt?.emailError=="string"?tt.emailError:void 0};const Wt=tt?.planSelectionRequired===!0,tr=tt?.checkoutPending===!0,Pr=typeof tt?.commercialState=="string"?tt.commercialState:null,$r=!!tt?.verificationRequired;if(!$r){if(Ea(""),!!(Wt||tr||Pr==="pending_plan_selection"||Pr==="checkout_pending"))return await gn({force:!0})?{success:!0,workspaceSetupRequired:!1,planSelectionRequired:Wt,checkoutPending:tr,commercialState:Pr,verificationRequired:$r,verificationToken:typeof tt?.verificationToken=="string"?tt.verificationToken:void 0,emailSent:tt?.emailSent!==!1,emailError:typeof tt?.emailError=="string"?tt.emailError:void 0}:{success:!1,error:"Unable to resolve workspace after registration.",code:"AUTH_REQUIRED"};const Rn=await xi({allowCommercialGate:!1});return Rn.success?{success:!0,workspaceSetupRequired:Rn.workspaceSetupRequired===!0,planSelectionRequired:Wt,checkoutPending:tr,commercialState:Pr,verificationRequired:$r,verificationToken:typeof tt?.verificationToken=="string"?tt.verificationToken:void 0,emailSent:tt?.emailSent!==!1,emailError:typeof tt?.emailError=="string"?tt.emailError:void 0}:{success:!1,error:Rn.error||"Unable to resolve workspace after registration.",code:Rn.code}}return{success:!0,workspaceSetupRequired:!!tt?.workspaceSetupRequired,planSelectionRequired:Wt,checkoutPending:tr,commercialState:Pr,verificationRequired:$r,verificationToken:typeof tt?.verificationToken=="string"?tt.verificationToken:void 0,emailSent:tt?.emailSent!==!1,emailError:typeof tt?.emailError=="string"?tt.emailError:void 0}}catch{return{success:!1,error:"Create account failed."}}},[gn,q,V,xi]),Og=o.useCallback(async T=>{if(!V)return{success:!1,error:"Cloud auth endpoint is not configured."};const te=String(T.displayName||"").trim(),ne=typeof T.avatarDraftId=="string"?T.avatarDraftId.trim():"",ee=T.clearAvatar===!0;if(!te)return{success:!1,error:"Display name is required."};try{const Ke=await fetch(q("/api/taskforce/auth/profile"),{method:"POST",headers:{"Content-Type":"application/json"},credentials:"include",body:JSON.stringify({displayName:te,...ne?{avatarDraftId:ne}:{},...ee?{clearAvatar:!0}:{}})}),et=await Ke.json().catch(()=>({}));if(!Ke.ok||!et?.success)return{success:!1,error:et?.error||"Failed to update profile.",code:et?.code};const tt={userId:typeof et?.profile?.userId=="string"?et.profile.userId:Ct,email:typeof et?.profile?.email=="string"?et.profile.email:Qt,displayName:typeof et?.profile?.displayName=="string"?et.profile.displayName:null,avatarUrl:typeof et?.profile?.avatarUrl=="string"?et.profile.avatarUrl:null};return sr(tt.displayName||""),br(tt.avatarUrl||""),{success:!0,profile:tt}}catch{return{success:!1,error:"Failed to update profile."}}},[q,V,Qt,Ct]),gp=o.useCallback(async T=>{if(!V)return{success:!1,error:"Cloud auth endpoint is not configured."};const te=T.trim().toLowerCase();if(!te)return{success:!1,error:"Email is required."};try{const ne=await fetch(q("/api/taskforce/auth/verify-email/request"),{method:"POST",headers:{"Content-Type":"application/json"},credentials:"include",body:JSON.stringify({email:te})}),ee=await ne.json().catch(()=>({}));return!ne.ok||!ee?.success?{success:!1,error:ee?.error||"Failed to request verification email.",code:ee?.code}:{success:!0,verificationToken:ee?.verificationToken??null,emailSent:ee?.emailSent!==!1,deliveryAttempted:ee?.deliveryAttempted===!0||typeof ee?.verificationToken=="string"&&ee.verificationToken.trim().length>0,emailError:typeof ee?.emailError=="string"?ee.emailError:void 0}}catch{return{success:!1,error:"Failed to request verification email."}}},[q,V]),Bg=o.useCallback(async T=>{if(!V)return{success:!1,error:"Cloud auth endpoint is not configured."};const te=T.trim();if(!te)return{success:!1,error:"Token is required."};try{const ne=await fetch(q("/api/taskforce/auth/verify-email/confirm"),{method:"POST",headers:{"Content-Type":"application/json"},credentials:"include",body:JSON.stringify({token:te})}),ee=await ne.json().catch(()=>({}));return!ne.ok||!ee?.success?{success:!1,error:ee?.error||"Verification failed.",code:ee?.code}:{success:!0}}catch{return{success:!1,error:"Verification failed."}}},[q,V]),_l=o.useCallback(async T=>{if(!V)return{success:!1,error:"Cloud auth endpoint is not configured."};const te=T.trim().toLowerCase();if(!te)return{success:!1,error:"Email is required."};try{const ne=await fetch(q("/api/taskforce/auth/password-reset/request"),{method:"POST",headers:{"Content-Type":"application/json"},credentials:"include",body:JSON.stringify({email:te})}),ee=await ne.json().catch(()=>({}));return!ne.ok||!ee?.success?{success:!1,error:ee?.error||"Failed to request password reset.",code:ee?.code}:{success:!0,resetToken:ee?.resetToken??null,emailSent:ee?.emailSent!==!1,deliveryAttempted:ee?.deliveryAttempted===!0||typeof ee?.resetToken=="string"&&ee.resetToken.trim().length>0,emailError:typeof ee?.emailError=="string"?ee.emailError:void 0}}catch{return{success:!1,error:"Failed to request password reset."}}},[q,V]),Wg=o.useCallback(async(T,te)=>{if(!V)return{success:!1,error:"Cloud auth endpoint is not configured."};const ne=T.trim(),ee=te;if(!ne||!ee)return{success:!1,error:"Token and password are required."};try{const Ke=await fetch(q("/api/taskforce/auth/password-reset/confirm"),{method:"POST",headers:{"Content-Type":"application/json"},credentials:"include",body:JSON.stringify({token:ne,password:ee})}),et=await Ke.json().catch(()=>({}));return!Ke.ok||!et?.success?{success:!1,error:et?.error||"Failed to reset password.",code:et?.code}:{success:!0}}catch{return{success:!1,error:"Failed to reset password."}}},[q,V]),Xs=o.useCallback(async T=>{if(!V)return{success:!1,error:"Cloud auth endpoint is not configured."};const te=T.trim();if(!te)return{success:!1,error:"Token is required."};try{const ne=await fetch(q("/api/taskforce/auth/invite/inspect"),{method:"POST",headers:{"Content-Type":"application/json"},credentials:"include",body:JSON.stringify({token:te})}),ee=await ne.json().catch(()=>({}));return!ne.ok||!ee?.success?{success:!1,error:ee?.error||"Invite inspection failed.",code:ee?.code,state:ee?.state}:{success:!0,state:ee?.state,email:typeof ee?.email=="string"?ee.email:void 0,workspaceId:typeof ee?.workspaceId=="string"?ee.workspaceId:void 0,inviteeKind:ee?.inviteeKind==="existing_user"?"existing_user":"new_user",passwordRequired:ee?.passwordRequired===!0,inviteeState:ee?.inviteeState==="existing_account"?"existing_account":"pending_setup",availableMethods:Array.isArray(ee?.availableMethods)?ee.availableMethods:[]}}catch{return{success:!1,error:"Invite inspection failed."}}},[q,V]),$g=o.useCallback(async(T,te)=>{if(!V)return{success:!1,error:"Cloud auth endpoint is not configured."};const ne=T.trim(),ee=te;if(!ne||!ee)return{success:!1,error:"Token and password are required."};try{const Ke=await fetch(q("/api/taskforce/auth/invite/accept"),{method:"POST",headers:{"Content-Type":"application/json"},credentials:"include",body:JSON.stringify({token:ne,password:ee})}),et=await Ke.json().catch(()=>({}));if(!Ke.ok||!et?.success)return{success:!1,error:et?.error||"Invite acceptance failed.",code:et?.code};Ea("");const tt=typeof et?.workspaceId=="string"?et.workspaceId:null;if(tt&&Lt){const tr=await Ps(tt,{hydrate:!1});if(!tr.success)return{success:!1,error:tr.error||"Unable to resolve workspace after invite acceptance.",code:tr.code}}const Wt=await xi({preferredWorkspaceId:tt});return Wt.success?(tt&&ft.current!==tt&&dt(tt,{clearExplicitSelection:!1}),{success:!0,workspaceSetupRequired:Wt.workspaceSetupRequired===!0}):{success:!1,error:Wt.error||"Unable to resolve workspace after invite acceptance.",code:Wt.code}}catch{return{success:!1,error:"Invite acceptance failed."}}},[dt,q,V,ft,xi,Ps,Lt]),hm=o.useCallback(async T=>{if(!V)return{success:!1,error:"Cloud auth endpoint is not configured."};const te=T.trim();if(!te)return{success:!1,error:"Token is required."};try{const ne=await fetch(q("/api/taskforce/auth/invite/join"),{method:"POST",headers:{"Content-Type":"application/json"},credentials:"include",body:JSON.stringify({token:te})}),ee=await ne.json().catch(()=>({}));if(!ne.ok||!ee?.success)return{success:!1,error:ee?.error||"Invite join failed.",code:ee?.code};Ea("");const Ke=typeof ee?.workspaceId=="string"?ee.workspaceId:null;if(Ke&&Lt){const tt=await Ps(Ke,{hydrate:!1});if(!tt.success)return{success:!1,error:tt.error||"Unable to resolve workspace after invite join.",code:tt.code}}const et=await xi({preferredWorkspaceId:Ke});return et.success?(Ke&&ft.current!==Ke&&dt(Ke,{clearExplicitSelection:!1}),{success:!0,workspaceSetupRequired:et.workspaceSetupRequired===!0}):{success:!1,error:et.error||"Unable to resolve workspace after invite join.",code:et.code}}catch{return{success:!1,error:"Invite join failed."}}},[dt,q,V,ft,xi,Ps,Lt]),yp=o.useCallback(async()=>{if(!V)return{success:!1,error:"Cloud auth not configured."};try{const T=await fetch(q("/api/taskforce/auth/login-methods"),{credentials:"include"}),te=await T.json().catch(()=>({}));return!T.ok||!te?.success?{success:!1,error:te?.error||"Failed to fetch login methods."}:{success:!0,methods:Array.isArray(te?.methods)?te.methods:[]}}catch{return{success:!1,error:"Failed to fetch login methods."}}},[q,V]),Fg=o.useCallback(async T=>{if(!V)return{success:!1,error:"Cloud auth not configured."};try{const te=await fetch(q(`/api/taskforce/auth/login-methods/${encodeURIComponent(T)}`),{method:"DELETE",credentials:"include"}),ne=await te.json().catch(()=>({}));return!te.ok||!ne?.success?{success:!1,error:ne?.error||"Unlink failed.",code:ne?.code}:{success:!0}}catch{return{success:!1,error:"Unlink failed."}}},[q,V]),Ug=o.useCallback(async T=>{if(!V)return{success:!1,error:"Cloud auth not configured."};try{const te=await fetch(q("/api/taskforce/auth/login-methods/password"),{method:"POST",headers:{"Content-Type":"application/json"},credentials:"include",body:JSON.stringify({password:T})}),ne=await te.json().catch(()=>({}));return!te.ok||!ne?.success?{success:!1,error:ne?.error||"Failed to add password.",code:ne?.code}:{success:!0}}catch{return{success:!1,error:"Failed to add password."}}},[q,V]),gm=o.useCallback(async(T,te)=>{if(!V)return{success:!1,error:"Cloud auth not configured."};try{const ne=await fetch(q("/api/taskforce/auth/password/change"),{method:"POST",headers:{"Content-Type":"application/json"},credentials:"include",body:JSON.stringify({currentPassword:T,newPassword:te})}),ee=await ne.json().catch(()=>({}));return!ne.ok||!ee?.success?{success:!1,error:ee?.error||"Failed to change password.",code:ee?.code}:(await gn({force:!0}),Rb(),{success:!0})}catch{return{success:!1,error:"Failed to change password."}}},[q,V,gn]),kp=o.useCallback((T,te)=>{const ne=te&&/^\/[A-Za-z0-9_\-./?=&%]*$/.test(te)?te:"/",ee=`/api/taskforce/auth/oauth/${encodeURIComponent(T)}/start?flow=link&return_to=${encodeURIComponent(ne)}`;window.location.href=q(ee)},[q]),vp=o.useCallback(()=>{J(),Mc.current=null,gl.current="",cp.current="",Qi.current="",jc.current="",yl.current="",fp({clearLoaded:!0}),ss(!1),mn(el()),Lo(!1),Dn([]),Hn([]),Pa([]),Vn([]),oe([]),Yt([]),Ur(Gy()),$n(!1)},[J,fp,Pa,Hn]),Wd=o.useCallback(async()=>{try{V&&await fetch(q("/api/taskforce/auth/logout"),{method:"POST",credentials:"include"})}catch{}finally{if(J(),en.current+=1,Ye.current=null,tn.current=!1,bn.current=Date.now(),nt(!1),Ut(!0),Rt("anonymous"),It(""),rf(null),ir(""),sr(""),br(""),ki("disconnected"),vi(null),Qr(!0),kt(""),$a(!1),ss(!1),Ft(null),$t("idle"),Fr(null),fp({clearLoaded:!0}),z!=="local"&&Zw(rt),lt(z==="cloud"&&Mt),dt("default"),yr([]),kl.current=!1,Gt(null),z==="local"){await Promise.allSettled([ls({ignoreAuthGuard:!0}),ja(!0,{ignoreAuthGuard:!0}),Zr({ignoreAuthGuard:!0}),oi({ignoreAuthGuard:!0,force:!0})]);return}lp.current=!1,vp()}},[J,Mt,Zw,dt,q,V,rt,z,ls,Zr,oi,ja,vp]),$d=o.useRef(null),eo=o.useCallback(async(T,te,ne)=>{if(!globalThis.crypto?.randomUUID)throw new Error("Secure initiative operation identity generation is unavailable.");const ee=ne||`operation-${globalThis.crypto.randomUUID()}`,Ke={...te,headers:{...te.headers||{},"x-taskforce-operation-id":ee}};try{return await fetch(T,Ke)}catch{return fetch(T,Ke)}},[]),ia=o.useMemo(()=>U1(),[]),ym=o.useCallback(async T=>{try{const te=JSON.stringify(T);if($d.current?.requestBody!==te){if(!globalThis.crypto?.randomUUID)throw new Error("Secure initiative operation identity generation is unavailable.");$d.current={requestBody:te,operationId:`operation-${globalThis.crypto.randomUUID()}`}}const ne=await eo("/api/taskforce/initiative-templates/create",{method:"POST",headers:{"Content-Type":"application/json"},body:te},$d.current.operationId),ee=await ne.json().catch(()=>({}));return!ne.ok||!ee?.success?{success:!1,error:ee?.error||`Create failed (${ne.status})`}:($d.current=null,await ja(!0),{success:!0,result:ee?.results})}catch(te){return{success:!1,error:te.message}}},[ja,eo]),km=o.useCallback(async T=>{if(!globalThis.crypto?.randomUUID)throw new Error("Secure initiative identity generation is unavailable.");const te={...T||{},id:T?.id||`initiative-${globalThis.crypto.randomUUID()}`,createdAt:T?.createdAt||new Date().toISOString()},ne=await eo("/api/taskforce/initiative",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify(te)}),ee=await ne.json().catch(()=>({}));if(!ne.ok)throw new Error(ee?.error||`Failed to create initiative (${ne.status})`);return await Zr(),Vn(Ke=>Li(Ke,ee)),ee},[Zr,eo]),zg=o.useCallback(async(T,te)=>{const ne=await eo(`/api/taskforce/initiative/${encodeURIComponent(T)}`,{method:"PATCH",headers:{"Content-Type":"application/json"},body:JSON.stringify(te||{})}),ee=await ne.json().catch(()=>({}));if(!ne.ok)throw new Error(ee?.error||`Failed to update initiative (${ne.status})`);return await Zr(),Vn(Ke=>Li(Ke,ee)),ee},[Zr,eo]),Oc=o.useCallback(()=>{Zr()},[Zr]),Bc=o.useCallback(async T=>{const te=await eo(`/api/taskforce/initiative/${encodeURIComponent(T)}/archive`,{method:"POST"}),ne=await te.json().catch(()=>({}));if(!te.ok)throw new Error(ne?.error||`Failed to archive initiative (${te.status})`);return Vn(ee=>Li(ee,ne)),Oc(),ne},[Oc,eo]),Hg=o.useCallback(async T=>{const te=await eo(`/api/taskforce/initiative/${encodeURIComponent(T)}/unarchive`,{method:"POST"}),ne=await te.json().catch(()=>({}));if(!te.ok)throw new Error(ne?.error||`Failed to unarchive initiative (${te.status})`);return Vn(ee=>Li(ee,ne)),Oc(),ne},[Oc,eo]),Vg=o.useCallback(async T=>{const te=await ia.prepareCreate(ft.current||"default",T||{}),ne=await Zp("/api/taskforce/workstream",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify(te.body)},te.operationId),ee=!ne.ok&&await Yp(ne),Ke=await ne.json().catch(()=>({}));if(!ne.ok){ee&&await ia.abandonCreate(te.fingerprint,te.operationId);const et=Ke?.retryAt?` Retry after ${Ke.retryAt}.`:"";throw new Error(`${Ke?.error||`Failed to create workstream (${ne.status})`}${et}`)}if(Ke?.id!==te.body.id)throw new Error("Created workstream identity did not match the retained request identity.");return await ia.confirmCreate(te.fingerprint,te.operationId),await Zr(),oe(et=>{const tt=F1(et,Ke);return tt?Li(et,tt):et}),Ke},[ft,Zr,ia]),vm=o.useCallback(async(T,te)=>{const ne=`/api/taskforce/workstream/${encodeURIComponent(T)}`,ee=te||{},Ke=wn.find($r=>$r.id===T),et=Ke?{updatedAt:Ke.updatedAt||null,initiativeId:Ke.initiativeId||null,ownerId:Ke.ownerId||null,isArchived:!!Ke.isArchived}:null,tt=await ia.prepareMutation(ft.current||"default",ne,ee,et),Wt=await Zp(ne,{method:"PATCH",headers:{"Content-Type":"application/json"},body:JSON.stringify(ee)},tt.operationId),tr=!Wt.ok&&await Yp(Wt),Pr=await Wt.json().catch(()=>({}));if(!Wt.ok){tr&&await ia.abandonMutation(tt.fingerprint,tt.operationId);const $r=Pr?.retryAt?` Retry after ${Pr.retryAt}.`:"";throw new Error(`${Pr?.error||`Failed to update workstream (${Wt.status})`}${$r}`)}if(Pr?.id!==T)throw new Error("Updated workstream identity did not match the requested workstream.");return await ia.confirmMutation(tt.fingerprint,tt.operationId),await Zr(),oe($r=>Li($r,Pr)),Pr},[ft,Zr,ia,wn]),Gg=o.useCallback(async(T,te)=>{const ne=`/api/taskforce/workstream/${encodeURIComponent(T)}/task-order`,ee={taskIds:te},Ke=wn.find($r=>$r.id===T),et=await ia.prepareMutation(ft.current||"default",ne,ee,{updatedAt:Ke?.updatedAt||null,workstreamId:T}),tt=await Zp(ne,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify(ee)},et.operationId),Wt=!tt.ok&&await Yp(tt),tr=await tt.json().catch(()=>({}));if(!tt.ok){Wt&&await ia.abandonMutation(et.fingerprint,et.operationId);const $r=tr?.retryAt?` Retry after ${tr.retryAt}.`:"";throw new Error(`${tr?.error||`Failed to reorder workstream tasks (${tt.status})`}${$r}`)}if(tr?.workstreamId!==T||!Array.isArray(tr?.taskIds))throw new Error("Reordered workstream task response did not match the request.");await ia.confirmMutation(et.fingerprint,et.operationId);const Pr=new Map(tr.taskIds.map(($r,_r)=>[$r,(_r+1)*1024]));Hn($r=>$r.map(_r=>Pr.has(_r.id)?{..._r,workstreamOrder:Pr.get(_r.id)}:_r)),await Zr()},[ft,Zr,ia,wn]),Kg=o.useCallback(async T=>{const te=`/api/taskforce/workstream/${encodeURIComponent(T)}/archive`,ne=wn.find(Wt=>Wt.id===T),ee=await ia.prepareMutation(ft.current||"default",te,{},ne?{updatedAt:ne.updatedAt||null,isArchived:!!ne.isArchived}:null),Ke=await Zp(te,{method:"POST"},ee.operationId),et=!Ke.ok&&await Yp(Ke),tt=await Ke.json().catch(()=>({}));if(!Ke.ok){et&&await ia.abandonMutation(ee.fingerprint,ee.operationId);const Wt=tt?.retryAt?` Retry after ${tt.retryAt}.`:"";throw new Error(`${tt?.error||`Failed to archive workstream (${Ke.status})`}${Wt}`)}if(tt?.id!==T)throw new Error("Archived workstream identity did not match the requested workstream.");return await ia.confirmMutation(ee.fingerprint,ee.operationId),await Zr(),oe(Wt=>Li(Wt,tt)),tt},[ft,Zr,ia,wn]),qg=o.useCallback(async T=>{const te=`/api/taskforce/workstream/${encodeURIComponent(T)}/unarchive`,ne=wn.find(Wt=>Wt.id===T),ee=await ia.prepareMutation(ft.current||"default",te,{},ne?{updatedAt:ne.updatedAt||null,isArchived:!!ne.isArchived}:null),Ke=await Zp(te,{method:"POST"},ee.operationId),et=!Ke.ok&&await Yp(Ke),tt=await Ke.json().catch(()=>({}));if(!Ke.ok){et&&await ia.abandonMutation(ee.fingerprint,ee.operationId);const Wt=tt?.retryAt?` Retry after ${tt.retryAt}.`:"";throw new Error(`${tt?.error||`Failed to unarchive workstream (${Ke.status})`}${Wt}`)}if(tt?.id!==T)throw new Error("Unarchived workstream identity did not match the requested workstream.");return await ia.confirmMutation(ee.fingerprint,ee.operationId),await Zr(),oe(Wt=>Li(Wt,tt)),tt},[ft,Zr,ia,wn]),wm=o.useRef(!1);o.useEffect(()=>{He(!0),!wm.current&&(wm.current=!0,gn())},[gn]),o.useEffect(()=>{M&&gn()},[M,gn]),o.useEffect(()=>{if(!V)return;let T=!1;const te=new AbortController,ne=typeof window<"u"?window.setTimeout(()=>te.abort(),5e3):null;return fetch(q("/api/taskforce/auth/providers"),{credentials:"include",signal:te.signal}).then(ee=>ee.ok?ee.json():null).then(ee=>{!T&&Array.isArray(ee?.providers)&&Jr(ee.providers)}).catch(()=>{}).finally(()=>{ne!==null&&typeof window<"u"&&window.clearTimeout(ne)}),()=>{T=!0,te.abort()}},[V,q]),o.useEffect(()=>{if(z!=="local"||!Le||typeof window>"u")return;const T=()=>{gn()},te=()=>{document.visibilityState==="visible"&&T()};window.addEventListener("focus",T),window.addEventListener("online",T),document.addEventListener("visibilitychange",te);const ne=window.setInterval(T,3e4);return()=>{window.removeEventListener("focus",T),window.removeEventListener("online",T),document.removeEventListener("visibilitychange",te),window.clearInterval(ne)}},[z,Le,gn]),o.useEffect(()=>{s&&s(pn.length)},[pn.length,s]);const ha=o.useMemo(()=>{const T=String(t||"").trim();return T?[String(a||"").trim(),T,String(r||"").trim()].join(":"):""},[r,t,a]),Wc=o.useRef(ha);Wc.current=ha;const Zn=o.useRef(null),to=o.useRef(null),$c=o.useRef(null),tc=o.useRef(null),Fc=o.useRef(null),Il=o.useRef(new Set),Fd=o.useRef(new Set),ii=o.useRef(new Map),ci=o.useRef(null),za=o.useRef(null),[Ud,li]=o.useState(0);o.useEffect(()=>{const T=tc.current;T&&rs.current?.ownerKey===T&&ts(),tc.current=null,Zn.current=null,to.current=null,$c.current=null,Fc.current=null,Il.current.clear(),Fd.current.clear(),ii.current.clear(),ci.current!==null&&typeof window<"u"&&(window.clearTimeout(ci.current),ci.current=null),za.current!==null&&typeof window<"u"&&(window.clearTimeout(za.current),za.current=null),li(te=>te+1)},[ts,ha]),o.useEffect(()=>()=>{ci.current!==null&&typeof window<"u"&&(window.clearTimeout(ci.current),ci.current=null),za.current!==null&&typeof window<"u"&&(window.clearTimeout(za.current),za.current=null)},[]);const bm=o.useRef(!1);o.useEffect(()=>{if(!Yr)return;if(!bm.current&&Gr.length>0){bm.current=!0;const te=Cd,ne=Gr.some(ee=>ee.label===te||ee.value===te);if(te&&ne){const ee=Gr.find(Ke=>Ke.label===te||Ke.value===te);ei(ee?.value||te)}else ei(oa(Gr));return}const T=Gr.some(te=>te.value===ll);Gr.length>0&&!T&&ei(oa(Gr))},[Yr,Gr,ll,oa,Cd]),o.useEffect(()=>{if(!Yr||!Ca||Gr.length===0)return;const T=ee=>!Gr.some(Ke=>Ke.value===ee.category),te=pn.some(T),ne=ua.some(T);if(te||ne){const ee=oa(Gr);te&&Hn(Ke=>Ke.map(et=>T(et)?{...et,category:ee}:et)),ne&&Pa(Ke=>Ke.map(et=>T(et)?{...et,category:ee}:et))}},[Yr,Ca,Gr,pn,ua,oa]),o.useEffect(()=>{},[O]);const wp=o.useCallback(async()=>{await Yn(rd(["active","archive","deleted","planning"],{ambiguous:!0}))},[Yn]);o.useEffect(()=>{if(typeof window>"u")return;const T=te=>{const ne=te.detail;(String(ne?.workspaceId||"").trim()||"default")===bt&&(ne?.authoritativeTask||Yn(rd(ne?.affectedCollections?.length?ne.affectedCollections:["active","archive"],{taskIds:ne?.taskId?[ne.taskId]:[]})))};return window.addEventListener(cd,T),()=>{window.removeEventListener(cd,T)}},[bt,Yn]);const di=String(bt||"").trim(),bp=String(Ct||"").trim(),zd=le("/taskforce-ws"),Sm=!!(V&&z==="cloud"&&Tt&&Je&&bp&&bp!=="anonymous"&&di&&!fv(di)&&zd);o.useEffect(()=>()=>{Rs.current!==null&&typeof window<"u"&&(window.clearTimeout(Rs.current),Rs.current=null)},[bt]);const Sp=o.useCallback(T=>{if(z!=="cloud")return;NC({workspaceId:di,source:"realtime"});const te=O1(T.type,T.invalidations);te.collections.length!==0&&(Yn(te),!(!te.ambiguous||typeof window>"u")&&(Rs.current!==null&&window.clearTimeout(Rs.current),Rs.current=window.setTimeout(()=>{Rs.current=null,Yn(te)},250)))},[di,z,Yn]);aC({enabled:Sm,workspaceId:di,websocketUrl:zd,onSignal:Sp,userId:bp||void 0}),YN({workspaceId:bt,isOpen:de,authBlocked:ct,authRequiredForApi:Mt,isAuthenticated:Je,canCallProtectedApi:Qe.canCallProtectedApi,shouldGateProtectedApiCalls:se,authSessionResolvedRef:Nd,authRequiredForApiRef:ip,isAuthenticatedRef:jd,dataVersionRef:om,refreshTaskCollectionsForDataVersion:wp,coordinatorDataVersion:Lu});const zs=o.useMemo(()=>{const T=new Map;for(const te of ua)T.set(te.id,te);for(const te of pn)T.set(te.id,te);return Array.from(T.values())},[pn,ua]),Ia=o.useMemo(()=>sa.map(T=>({...T.taskSnapshot,isDeleted:!0,deletedRecordId:T.id})),[sa]);o.useEffect(()=>{if(!(St||Xt)&&de&&!qt){if($e==="tasks"){const T=`${bt}:${$e}:${ce?"archive":"active"}:${xe}`,te=ce||xe==="archived",ne=xe==="deleted";if(!im.current){im.current=!0,jc.current=T,te&&Ua(!1),ne&&fa(!1);return}if(jc.current===T)return;jc.current=T,!te&&!ne&&ja(),Zr(),te&&Ua(!1),ne&&fa(!1);return}if($e==="settings"){const T=`${bt}:${$e}:${Ce}`;if(yl.current===T)return;yl.current=T,ls()}}},[bt,de,$e,Ce,ce,xe,ja,Zr,Ua,fa,ls,St,Xt,qt]);const rc=o.useCallback(async(T="")=>{try{const te=await fetch(`/api/taskforce/folders?path=${encodeURIComponent(T)}`);if(te.ok){const ne=await te.json();qe(ne.folders||[]),_e(ne.files||[]),Ge(T)}}catch(te){console.error("[Taskforce] Failed to fetch folders:",te)}},[]),Ap=o.useCallback(T=>{const te=[];if(T.path&&te.push(T.path),T.paths&&T.paths.length>0)for(const ne of T.paths)te.includes(ne)||te.push(ne);return te},[]),{validatePaths:Am,handleUpdateCategory:Cm,handleSaveCategory:Hd,handleAddPath:Cp,handleUpdateCategoryIcon:ro,handleUpdateCategoryColor:_p,handleRemovePath:no,handleSelectPath:_m,handleRemoveCategory:Ip,handleSaveType:Uc,handleRemoveType:Vd,handleUpdateType:zc,handleUpdateTaxonomies:Im,handleUpdatePriorities:nc,analyzeSystemTaxonomyPack:Tm,handleApplySystemTaxonomyPack:xm}=rN({activeCategories:Gr,activeTab:$e,activeTypes:Fn,archivedTasks:ua,browserTarget:F,category:ll,configLoaded:Yr,customCategories:pa,refreshTaskCollections:O,fetchTasks:ja,filterCategories:Ju,getCategoryPaths:Ap,normalizePath:go,pathValidation:Kn,setBrowserTarget:Ne,setCategory:ei,setCustomCategories:Wa,setCustomTypes:Zs,setFilterCategories:Qu,setPathValidation:Mo,setPriorities:ea,setShowFolderBrowser:it,setTaxonomies:Fa,tasks:pn}),Tl=o.useCallback(async T=>{const te=_s,ne={...te,...T};Js(ne);try{const ee=await fetch("/api/taskforce/taxonomy-display-labels",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({displayLabels:T})});if(!ee.ok)throw new Error(`Failed to save taxonomy display labels (${ee.status})`);const Ke=await ee.json().catch(()=>({}));Ke?.displayLabels&&typeof Ke.displayLabels=="object"&&Js({...ne,...Ke.displayLabels})}catch(ee){console.error("[Taskforce] Failed to update taxonomy display labels",ee),Js(te)}},[_s]),xl=o.useCallback(T=>{$e==="tasks"&&un.current&&Ws(un.current.scrollTop),re(T)},[$e]),Rm=o.useRef(async()=>!0),{handleNavigation:Yg,handleClose:Zg,resetForm:Tp,resolveWorkstreamIdInput:Rl,handleEdit:ac,handleOpenTaskById:xp,returnToPreviousTask:Jg,clearReturnToParentTask:Rp}=dN({activeCategories:Gr,activeTypes:Fn,activeTab:$e,attachments:op,checklistItems:ni,comments:Sd,description:Ts,editingTaskId:sn,flushPendingAutoSave:()=>Rm.current(),getDescriptionDraft:Fo,getPreferredCategoryValue:oa,getTitleDraft:ri,lastUsedCategory:Cd,newCommentText:Gi,relationshipTasks:zs,workstreams:wn,showArchive:ce,taxonomies:qn,setActiveTab:xl,setAssignee:bi,setAttachments:sm,setAttachmentsDirty:hl,setCategory:ei,setChecklistItems:Sr,setComments:Us,setComplexity:Vu,setDescription:vd,setDueDate:ti,setEditingTaskId:Sa,setError:Ea,setFormTaxonomies:Xf,setIsOpen:He,setNewCommentText:ai,setPendingNavigation:es,setWorkstreamInput:kd,setPriority:Vi,setScheduledDate:Wo,setShowArchive:pe,setStatus:yd,setTaskReturnTrail:aa,setTitle:Ai,setType:Bo,setUnsavedModalOpen:Ar,taskReturnTrail:na,title:Si});o.useEffect(()=>{const T=String(ns||"").trim();if(!Xi||!T)return;if(sn===T){As(null);return}if(Gn||qt)return;const te=tt=>tt.id===T||tt.id.endsWith(T);if(zs.find(te)){xp(T),As(null);return}const ee=String(ft.current||"default").trim()||"default",Ke=`${ee}:${T}`;if(Cn!==ee&&!yo.has(Ke)){Ua(!0).finally(()=>{(String(ft.current||"default").trim()||"default")===ee&&Ss(Wt=>Wt.has(Ke)?Wt:new Set(Wt).add(Ke))});return}const et=Ia.find(te);if(et){ac(et),As(null);return}if(ba!==ee){fa(!0);return}As(null)},[Cn,yo,ba,Ia,sn,Ua,fa,ac,xp,Gn,ns,zs,Xi,qt]),o.useEffect(()=>{const T=String(t||"").trim();if(!T||!ha||Zn.current===ha||!M||!Yr||!Xi||Gn||qt)return;const te=String(a||"").trim(),ne=String(ft.current||"default").trim()||"default",ee=()=>{const tr=tc.current;tr&&rs.current?.ownerKey===tr&&ts(),tc.current=null};if(te&&te!==ne){if(to.current===ha)return;if(z!=="cloud"||!Lt){to.current!==ha&&(to.current=ha,ra("This task is unavailable or you do not have access to it.","info",12e3));return}if(!Tt||!Je||ct||$c.current===ha||za.current!==null)return;const tr=ha,Pr=`${tr}:workspace`;$c.current=tr,Ps(te).then($r=>{if(Wc.current===tr&&!$r.success){const _r=(ii.current.get(Pr)||0)+1;if(ii.current.set(Pr,_r),_r<2&&typeof window<"u"){za.current=window.setTimeout(()=>{za.current=null,Wc.current===tr&&li(ca=>ca+1)},500);return}to.current=tr;const Rn=`deep-link-workspace:${tr}`;tc.current=Rn,ra("This task is unavailable or you do not have access to it.","info",12e3,{label:"Retry",onAction:()=>{Wc.current===tr&&(tc.current=null,to.current=null,ii.current.delete(Pr),ts(),li(ca=>ca+1))},ownerKey:Rn})}}).finally(()=>{$c.current===tr&&($c.current=null)});return}const Ke=tr=>{const Pr=tr.find(_r=>_r.id===T);if(Pr||te)return Pr;const $r=tr.filter(_r=>_r.id.endsWith(T));return $r.length===1?$r[0]:void 0},et=Ke(zs);if(et){ee(),Zn.current=ha,to.current=null,sn!==et.id&&(et.isArchived&&pe(!0),ac(et));return}const tt=(tr,Pr,$r)=>{const _r=`${ha}:${tr}`;if(Fc.current===_r||ci.current!==null)return;Fc.current=_r;const Rn=ha;Pr().then(ca=>{if(Wc.current!==Rn)return;if(ca){li(Es=>Es+1);return}const so=(ii.current.get(_r)||0)+1;if(ii.current.set(_r,so),so>=2){$r.add(Rn),li(Es=>Es+1);return}typeof window<"u"&&(ci.current=window.setTimeout(()=>{ci.current=null,Wc.current===Rn&&li(Es=>Es+1)},500))}).finally(()=>{Fc.current===_r&&(Fc.current=null)})};if(Cn!==ne&&!Il.current.has(ha)){tt("archive",()=>Ua(!0),Il.current);return}const Wt=Ke(Ia);if(Wt){ee(),Zn.current=ha,to.current=null,ac(Wt);return}if(ba!==ne&&!Fd.current.has(ha)){tt("deleted",()=>fa(!0),Fd.current);return}to.current!==ha&&(to.current=ha,ra("This task is unavailable or you do not have access to it.","info",12e3))},[Cn,ct,Tt,ts,Yr,ft,Ud,ha,ba,Ia,sn,Ua,fa,ac,t,Je,Gn,ra,zs,a,M,z,pe,Ps,Xi,qt,Lt]);const Gd=a1({enabled:w.syncV3TaskMetadataActivation&&z==="local",workspaceId:bt,isAuthenticated:Je,dispatchEnabled:dn}),Pl=h1({localRuntime:z==="local",enabled:w.syncV3TaskCreateActivation&&z==="local",workspaceId:bt,isAuthenticated:Je,dispatchEnabled:dn}),El=w.syncV3TaskStatusActivation&&z==="local",ao=C1({enabled:El,workspaceId:bt,isAuthenticated:Je,dispatchEnabled:dn}),sc=x1({enabled:z==="local",workspaceId:bt,isAuthenticated:Je,dispatchEnabled:dn}),oc=w.syncV3TaskDeleteActivation&&z==="local",Qg=E1({enabled:oc,workspaceId:bt,isAuthenticated:Je,dispatchEnabled:dn}),Xg=M1({enabled:oc,workspaceId:bt,isAuthenticated:Je,dispatchEnabled:dn}),{copiedId:ey,handleDelete:Kd,handleUpdateTask:qd,handleSetStatus:Yd,handleToggleComplete:Zd,handleToggleCancel:Pp,handleToggleInProgress:Nl,handleToggleReview:jl,handleArchiveTask:Ep,handleBulkArchive:Ri,handleUnarchive:ty,handleRestoreDeletedTask:Pm,handleRestoreSelectedDeletedTasks:ry,handlePermanentlyDeleteDeletedTask:Em,handleEmptyDeletedTasks:Pi,handleCopyId:ny,queueWorkspaceSyncFromAuthoritativeTaskState:ay}=ON({tasks:pn,archivedTasks:ua,editingTaskId:sn,setTasks:Hn,setArchivedTasks:Pa,setDeletedTasks:Dn,setError:Ea,resetForm:Tp,setActiveTab:xl,fetchTasks:ja,fetchArchive:Jo,fetchDeletedTasks:ol,mergeTaskFromServer:al,pushNotice:ra,cloudAuthConfigured:V,runtimeMode:z,isAuthenticated:Je,workspaceCloudSyncEnabled:dn,buildWorkspaceSyncSignature:Uu,pushWorkspaceChangesToCloud:Yf,workspacePendingSignatureRef:Bu,workspaceDeletedTaskIdsRef:Kf,workspaceDeletedTaskWatermarksRef:Wu,mutateTaskMetadata:Gd,mutateTaskStatus:ao,mutateTaskLifecycle:sc,mutateTaskDelete:Qg,mutateTaskRestore:Xg,durableTaskMetadataActivationEnabled:w.syncV3TaskMetadataActivation&&z==="local",durableTaskStatusActivationEnabled:El,durableTaskDeleteActivationEnabled:oc,durableTaskHttpRootActivationEnabled:w.syncV3TaskCloudHttpRootActivation,workspaceId:bt}),{autoSaveState:sy,flushAutoSave:Nm,scheduleWarningPrompt:oy,handleSubmit:Hs,confirmScheduleWarning:jm,cancelScheduleWarning:Ml,handleAddComment:ui}=PN({activeCategories:Gr,activeTab:$e,apiEndpoint:f,assignee:Rc,attachments:op,attachmentsDirty:Qs,category:ll,checklistItems:ni,comments:Sd,complexity:gd,description:Ts,dueDate:$o,createTaskDurably:Pl,durableTaskHttpRootActivationEnabled:w.syncV3TaskCloudHttpRootActivation,workspaceId:bt,updateTask:qd,editingTaskId:sn,fetchTasks:ja,formTaxonomies:Ki,getDescriptionDraft:Fo,getPreferredCategoryValue:oa,getTitleDraft:ri,mergeTaskFromServer:al,onTaskCreated:ac,workstreamInput:Pc,priority:hd,pushNotice:ra,queueWorkspaceSyncFromAuthoritativeTaskState:ay,relationshipTasks:zs,supplementalTasks:Ia,resetForm:Tp,resolveWorkstreamIdInput:Rl,scheduledDate:Qf,setActiveTab:xl,setAttachmentsDirty:hl,setComments:Us,setError:Ea,setLastUsedCategory:qu,setLoading:nl,setNewCommentText:ai,status:Jf,title:Si,taxonomies:qn,textDraftOccupied:Ci,type:xc});o.useEffect(()=>{Rm.current=Nm},[Nm]);const{handleSetWorkstreamForCurrentTask:iy}=EN({editingTaskId:sn,workstreamInput:Pc,pushNotice:ra,relationshipTasks:zs,resolveWorkstreamIdInput:Rl,setError:Ea,updateTask:qd}),{currentTask:Np,currentTaskWorkstream:cy,currentTaskInitiative:Mm}=oN({editingTaskId:sn,relationshipTasks:zs,initiatives:Gs,workstreams:wn,workstreamInput:Pc,resolveWorkstreamIdInput:Rl,supplementalTasks:Ia,assignee:Rc,setAssignee:bi,setChecklistItems:Sr,setComments:Us}),ly=eN({resolveCloudAuthUrl:q,currentWorkspaceId:bt,normalizedCloudAuthBaseUrl:ye,normalizedCloudMcpBaseUrl:ve,mergedConfig:l,availableWorkspaces:ht,currentTheme:Te,configLoaded:Yr,globalTheme:ot,themeUseGlobalDefault:Xe,keyShortcut:cn,jsonBackupEnabled:Zo,globalJsonBackupEnabled:ks,globalWeekStartsOn:ws,locale:Ra,supportedLocales:Qa,jsonBackupUseGlobalDefault:xa,manualComplexityEnabled:Oa,checklistDropdownEnabled:Vs,showTaskCardStatusLabel:Ls,pathSaved:Ie,settingsSection:Ce,setupState:at,buildInfo:va,saveSetupMode:Ld,saveWorkspaceProfile:Cl,setCurrentTheme:he,handleSaveTheme:wl,handleSaveGlobalTheme:Md,setKeyShortcut:kn,handleJsonBackupEnabledChange:cm,handleSaveGlobalJsonBackupEnabled:bl,handleSaveGlobalWeekStartsOn:dp,handleSaveLocale:Dd,handleManualComplexityEnabledChange:Dc,handleChecklistDropdownEnabledChange:Mg,handleShowTaskCardStatusLabelChange:up,handleResetProjectToGlobal:pp,handleSaveSettings:vl,initiativeTemplates:ho,fetchInitiativeTemplates:Os,createInitiativeFromTemplate:ym,setShowFolderBrowser:it,setBrowserTarget:Ne,fetchFolders:rc,activeCategories:Gr,pathValidation:Kn,taxonomyDisplayLabels:_s,handleUpdateCategory:Cm,handleRemoveCategory:Ip,handleSaveCategory:Hd,handleAddPath:Cp,handleRemovePath:no,handleUpdateCategoryIcon:ro,handleUpdateCategoryColor:_p,activeTypes:Fn,handleSaveType:Uc,handleRemoveType:Vd,handleUpdateType:zc,taxonomies:qn,handleUpdateTaxonomies:Im,priorities:zn,handleUpdatePriorities:nc,analyzeSystemTaxonomyPack:Tm,handleApplySystemTaxonomyPack:xm,handleUpdateTaxonomyDisplayLabels:Tl,projectRoot:mt,projectName:wt,mcpHostRoot:La,serverHostRoot:nr,mcpScriptPath:Ht,tenantId:rr,runtimeMode:z,workspaceSwitchingEnabled:Lt,deleteWorkspace:fm,setMcpHostRoot:mr,isAuthenticated:Je});o.useEffect(()=>{typeof window<"u"&&(window.__TASKFORCE_DEBUG__={tasks:pn,archivedTasks:ua,runtimeMode:z,currentWorkspaceId:bt,isAuthenticated:Je,workspaceCloudSyncEnabled:dn,realtimeSyncEnabled:Rr,fetchTasks:ja,fetchArchive:Kr,retryWorkspaceCloudSync:cl,resetWorkspaceSyncCursorAndPull:md,getSyncDiagnostics:Hu,__dispatch:{handleUpdateTask:qd,handleToggleComplete:Zd,handleArchiveTask:Ep,handleToggleCancel:Pp,handleToggleInProgress:Nl,handleToggleReview:jl,handleSubmit:Hs,handleDelete:Kd}})},[pn,ua,z,bt,Je,dn,Rr,ja,Kr,cl,md,Hu,qd,Zd,Ep,Pp,Nl,jl,Hs,Kd]);const Dl=Wn&&Wn.tone!=="error"?{message:Wn.message,type:"info"}:null,ic=String(y||w.wsBaseUrl||me||"").trim().replace(/\/+$/,"");return{config:{...l,cloudEnvironment:w.cloudEnvironment||l.cloudEnvironment||"",apiBaseUrl:me||l.apiBaseUrl,cloudAuthBaseUrl:ye||l.cloudAuthBaseUrl,wsBaseUrl:ic||l.wsBaseUrl},isOpen:de,setIsOpen:He,activeTab:$e,setActiveTab:xl,currentTheme:Te,setCurrentTheme:he,configLoaded:Yr,storagePath:G,saveSettings:vl,pathSaved:Ie,keyShortcut:cn,setKeyShortcut:kn,globalWeekStartsOn:ws,locale:Ra,supportedLocales:Qa,saveLocale:Dd,jsonBackupEnabled:Zo,setJsonBackupEnabled:Za,manualComplexityEnabled:Oa,checklistDropdownEnabled:Vs,showTaskCardStatusLabel:Ls,setManualComplexityEnabled:yn,mcpHostRoot:La,setMcpHostRoot:mr,settingsSection:Ce,setSettingsSection:ut,runtimeMode:z,workspaceMode:zt,workspaceSwitchingEnabled:Lt,cloudAuthConfigured:V,authRequiredForApi:Mt,authBlocked:ct,isAuthenticated:Je,authUserId:Ct,authUserEmail:Qt,authUserDisplayName:dr,authUserAvatarUrl:Tr,authWorkspaceId:Dt,userGlobalSyncStatus:il,workspaceLastPullAt:Qo,workspaceLastPushAt:Xo,workspaceLastErrorAt:Ig,userGlobalSyncError:Mu,workspaceLastErrorMessage:wi,workspaceLastSuccessfulSyncAt:pd,workspaceSyncPhase:xn,workspaceSyncSetupIntent:is,workspaceSyncStatus:Ff,workspaceSyncSummary:Uf,workspaceSyncRecommendedAction:zf,workspaceSyncBusy:fd,workspaceSyncPendingChanges:Du,localCoordinatorStatus:Vf,transferLocalCoordinatorOwnership:Gf,retryUserGlobalSettingsSync:Zf,retryWorkspaceCloudSync:cl,resetWorkspaceSyncCursorAndPull:md,getWorkspaceSyncDiagnostics:Hu,hasBetaAccess:ur,realtimeSyncEnabled:Rr,realtimeSyncFlagSource:Bn,currentWorkspaceId:bt,currentWorkspaceRole:Lg,availableWorkspaces:ht,assigneeOptions:Er,workspaceCloudSyncEnabled:dn,saveWorkspaceCloudSyncSettings:zu,applyWorkspaceSyncStateSnapshot:$u,bootstrapState:as,authSessionResolved:Tt,workspaceBootstrapPending:qt,bootstrapPhase:fr,bootstrapError:Mr,bootstrapStartedAt:Vt,setupState:at,runtimeCapabilities:Lr,refreshSetupContext:ec,retryBootstrapChecks:um,continueAfterCommercialOnboarding:hp,saveWorkspaceProfile:Cl,fetchWorkspaces:Lc,createWorkspace:pm,deleteWorkspace:fm,switchWorkspace:Ps,loginWithCredentials:Od,beginOAuthLogin:mm,availableAuthProviders:pr,fetchLoginMethods:yp,unlinkLoginMethod:Fg,addPasswordToAccount:Ug,changePassword:gm,beginOAuthLink:kp,registerWithCredentials:Bd,updateCurrentUserProfile:Og,requestEmailVerification:gp,confirmEmailVerification:Bg,requestPasswordReset:_l,confirmPasswordReset:Wg,inspectInviteAcceptance:Xs,acceptInviteWithToken:$g,joinInviteWithToken:hm,logout:Wd,showFolderBrowser:Fe,setShowFolderBrowser:it,folders:Me,files:ge,currentBrowsePath:Be,fetchFolders:rc,browserTarget:F,setBrowserTarget:Ne,groupBy:xd,setGroupBy:np,activeWorkspaceModule:Ed,setActiveWorkspaceModule:Dg,emptyColumnMode:ap,setEmptyColumnMode:Zi,zenMode:wa,setZenMode:Xa,handleSelectPath:_m,handleAddPath:Cp,handleRemovePath:no,tasks:pn,loadingTasks:Gn,archivedTasks:ua,archiveHydratedWorkspaceId:Cn,initiatives:Gs,workstreams:wn,planningBootstrapTaskSummaries:yt,planningLoadState:vr,workspaceTaskRelationships:Hf,deletedTasks:sa,activeCategories:Gr,activeTypes:Fn,priorities:zn,taxonomyDisplayLabels:_s,taxonomies:qn,searchQuery:Zu,setSearchQuery:bo,filterCategories:Ju,setFilterCategories:Qu,filterTypes:fl,setFilterTypes:Tg,filterPriorities:_d,setFilterPriorities:qi,filterStatus:Xu,setFilterStatus:ml,filterAssignees:cs,setFilterAssignees:si,filterTaxonomies:Uo,setFilterTaxonomies:Ii,hasInitedFilters:Id,sortBy:ep,setSortBy:tp,sortOrder:rp,setSortOrder:Yi,toggleSortOrder:Nc,showArchive:ce,setShowArchive:pe,taskScope:xe,setTaskScope:N,compressedCards:X,setCompressedCards:Ae,clearFilters:Ot,filteredTasks:tm,searchAgnosticTasks:sp,filteredArchive:rm,groupedTasks:Pd,collapsedCategories:Ji,setCollapsedCategories:Rd,fetchTasks:ja,fetchArchive:Kr,ensureArchiveHydrated:Ua,fetchDeletedTasks:_a,fetchPlanningEntities:Zr,fetchPlanningEntityDetail:sl,fetchAssigneeOptions:mp,createInitiative:km,updateInitiative:zg,archiveInitiative:Bc,unarchiveInitiative:Hg,createWorkstream:Vg,updateWorkstream:vm,archiveWorkstream:Kg,unarchiveWorkstream:qg,reorderWorkstreamTasks:Gg,handleEdit:ac,handleDelete:Kd,handleCopyId:ny,handleToggleComplete:Zd,handleToggleCancel:Pp,handleToggleInProgress:Nl,handleToggleReview:jl,handleArchiveTask:Ep,handleBulkArchive:Ri,handleUnarchive:ty,handleRestoreDeletedTask:Pm,handleRestoreSelectedDeletedTasks:ry,handlePermanentlyDeleteDeletedTask:Em,handleEmptyDeletedTasks:Pi,handleUpdateTask:qd,handleSetStatus:Yd,editingTaskId:sn,loading:vo,error:ud,clearTaskError:Sc,title:Si,setTitle:Ai,setTitleDraft:Ku,description:Ts,setDescription:vd,setDescriptionDraft:bd,checklistItems:ni,setChecklistItems:Sr,category:ll,setCategory:ei,type:xc,setType:Bo,priority:hd,setPriority:Vi,complexity:gd,setComplexity:Vu,status:Jf,setStatus:yd,assignee:Rc,setAssignee:bi,scheduledDate:Qf,setScheduledDate:Wo,dueDate:$o,setDueDate:ti,workstreamInput:Pc,setWorkstreamInput:kd,formTaxonomies:Ki,setFormTaxonomies:Xf,comments:Sd,newCommentText:Gi,setNewCommentText:ai,attachments:op,setAttachments:sm,attachmentsDirty:Qs,setAttachmentsDirty:hl,descriptionFocused:Pg,setDescriptionFocused:Eg,showMarkdownHelp:No,setShowMarkdownHelp:jo,isCapturingScreenshot:Ng,setIsCapturingScreenshot:jg,handleSubmit:Hs,resetForm:Tp,handleAddComment:ui,handleSetWorkstreamForCurrentTask:iy,handleOpenTaskById:xp,returnToPreviousTask:Jg,autoSaveState:sy,unsavedModalOpen:Xr,setUnsavedModalOpen:Ar,pendingNavigation:An,handleNavigation:Yg,handleClose:Zg,uiNotice:Wn,pushNotice:ra,clearNotice:ts,successBanner:Dl,taskReturnTrail:na,clearReturnToParentTask:Rp,copiedId:ey,recentlyChangedTaskIds:Ac,scheduleWarningPrompt:oy,confirmScheduleWarning:jm,cancelScheduleWarning:Ml,tasksScrollRef:un,setTasksScrollPos:Ws,taskforceAgentId:em,setTaskforceAgentId:ul,taskforceAgentConversationId:_i,setTaskforceAgentConversationId:Ec,taskforceAgentConversationByAgentId:pl,setTaskforceAgentConversationByAgentId:Yu,uiStateReady:Xi,handleUpdateCategory:Cm,handleRemoveCategory:Ip,handleSaveCategory:Hd,handleUpdateCategoryIcon:ro,handleUpdateCategoryColor:_p,handleSaveType:Uc,handleRemoveType:Vd,handleUpdateType:zc,handleUpdateTaxonomies:Im,handleUpdatePriorities:nc,handleUpdateTaxonomyDisplayLabels:Tl,pathValidation:Kn,validatePaths:Am,getCategoryPaths:Ap,customCategories:pa,setCustomCategories:Wa,projectRoot:mt,projectName:wt,mcpScriptPath:Ht,serverHostRoot:nr,commentsEndRef:Ad,currentTask:Np,currentTaskWorkstream:cy,currentTaskInitiative:Mm,initiativeTemplates:ho,fetchInitiativeTemplates:Os,createInitiativeFromTemplate:ym,settingsModel:ly}}const G1="modulepreload",K1=function(e){return"/taskforce/"+e},qb={},Po=function(t,r,a){let s=Promise.resolve();if(r&&r.length>0){let d=function(f){return Promise.all(f.map(p=>Promise.resolve(p).then(g=>({status:"fulfilled",value:g}),g=>({status:"rejected",reason:g}))))};document.getElementsByTagName("link");const l=document.querySelector("meta[property=csp-nonce]"),c=l?.nonce||l?.getAttribute("nonce");s=d(r.map(f=>{if(f=K1(f),f in qb)return;qb[f]=!0;const p=f.endsWith(".css"),g=p?'[rel="stylesheet"]':"";if(document.querySelector(`link[href="${f}"]${g}`))return;const h=document.createElement("link");if(h.rel=p?"stylesheet":G1,p||(h.as="script"),h.crossOrigin="",h.href=f,c&&h.setAttribute("nonce",c),document.head.appendChild(h),p)return new Promise((y,k)=>{h.addEventListener("load",y),h.addEventListener("error",()=>k(new Error(`Unable to preload CSS for ${f}`)))})}))}function i(l){const c=new Event("vite:preloadError",{cancelable:!0});if(c.payload=l,window.dispatchEvent(c),!c.defaultPrevented)throw l}return s.then(l=>{for(const c of l||[])c.status==="rejected"&&i(c.reason);return t().catch(i)})},q1="_filterGlow_eor56_8",Y1="_floatingButton_eor56_18",Z1="_badge_eor56_49",J1="_configBadge_eor56_66",Q1="_configBadgeActive_eor56_76",X1="_configBadgeRevoked_eor56_82",ej="_configBadgeExpired_eor56_88",tj="_coreModal_eor56_97",rj="_header_eor56_103",nj="_headerTitle_eor56_118",aj="_brandIcon_eor56_136",sj="_brandHomeButton_eor56_142",oj="_brandHomeStatic_eor56_143",ij="_brandCloudSuffix_eor56_169",cj="_projectSlash_eor56_174",lj="_projectNameGroup_eor56_181",dj="_projectNameGroupHidden_eor56_188",uj="_projectName_eor56_181",pj="_taskCountBadge_eor56_215",fj="_taskCountBadgeIcon_eor56_232",mj="_taskCountBadgeButton_eor56_236",hj="_taskCountBadgeActive_eor56_254",gj="_taskCountBadgeAlert_eor56_260",yj="_headerActions_eor56_266",kj="_sortDirectionBtn_eor56_273",vj="_sortDirectionBtnWidget_eor56_280",wj="_form_eor56_288",bj="_topRow_eor56_300",Sj="_field_eor56_306",Aj="_labelRow_eor56_312",Cj="_label_eor56_312",_j="_manageLink_eor56_326",Ij="_input_eor56_345",Tj="_select_eor56_346",xj="_textarea_eor56_347",Rj="_taskIdInlineLink_eor56_381",Pj="_readOnly_eor56_400",Ej="_selectWithConfig_eor56_408",Nj="_configBtn_eor56_418",jj="_configBtnActive_eor56_448",Mj="_hasPath_eor56_456",Dj="_pathIndicator_eor56_461",Lj="_formActions_eor56_467",Oj="_hasCancel_eor56_474",Bj="_submitBtn_eor56_478",Wj="_cancelBtn_eor56_494",$j="_successMessage_eor56_526",Fj="_errorMessage_eor56_532",Uj="_successIcon_eor56_544",zj="_spinner_eor56_564",Hj="_spin_eor56_564",Vj="_boardRefreshIndicator_eor56_568",Gj="_destructiveBtn_eor56_598",Kj="_warningBtn_eor56_621",qj="_viewTab_eor56_644",Yj="_loading_eor56_655",Zj="_emptyState_eor56_661",Jj="_taskList_eor56_671",Qj="_referenceBadge_eor56_677",Xj="_referenceBadgeLabel_eor56_698",e2="_referenceBadgeStatic_eor56_707",t2="_provisionalReferenceBadge_eor56_721",r2="_copiedReference_eor56_743",n2="_highlight_eor56_755",a2="_modal_eor56_767",s2="_priorityEmoji_eor56_775",o2="_metaItem_eor56_779",i2="_taskFormDateInput_eor56_793",c2="_metaBadge_eor56_803",l2="_complexityPill_eor56_818",d2="_complexityDots_eor56_822",u2="_dot_eor56_828",p2="_dotFilled_eor56_836",f2="_typePill_eor56_842",m2="_type_bug_eor56_846",h2="_type_feature_eor56_850",g2="_type_chore_eor56_854",y2="_type_refactor_eor56_858",k2="_type_documentation_eor56_862",v2="_type_research_eor56_866",w2="_type_security_eor56_874",b2="_statusActionsGroup_eor56_878",S2="_statusActionsGroupCompact_eor56_884",A2="_statusSelectWrap_eor56_888",C2="_statusTaxonomyDropdownWrap_eor56_894",_2="_statusTaxonomyDropdown_eor56_894",I2="_statusTaxonomyDropdownCompact_eor56_902",T2="_statusTaxonomyDropdownIconOnly_eor56_906",x2="_taxonomyDropdownButton_eor56_911",R2="_taxonomyDropdownButtonContent_eor56_928",P2="_statusTaxonomyDropdownIconOnlyPanel_eor56_932",E2="_actionBtn_eor56_938",N2="_startWorkBtn_eor56_962",j2="_workingBtn_eor56_971",M2="_pulse_eor56_1",D2="_reviewBtn_eor56_977",L2="_reviewActiveBtn_eor56_987",O2="_reviewPill_eor56_993",B2="_archiveTaskBtn_eor56_1000",W2="_bulkArchiveBtn_eor56_1009",$2="_bulkDeleteBtn_eor56_1031",F2="_deleteBtn_eor56_1060",U2="_completeBtn_eor56_1072",z2="_completeActiveBtn_eor56_1082",H2="_deleteActiveBtn_eor56_1088",V2="_disabledBtn_eor56_1094",G2="_archiveList_eor56_1101",K2="_archiveHeader_eor56_1109",q2="_settingsTab_eor56_1120",Y2="_settingsTabMcpOnly_eor56_1129",Z2="_settingsTabs_eor56_1138",J2="_settingsLayout_eor56_1152",Q2="_settingsLayoutMcpOnly_eor56_1159",X2="_settingsSidebar_eor56_1165",eM="_settingsSidebarHeader_eor56_1175",tM="_settingsSidebarNav_eor56_1184",rM="_settingsSidebarBtn_eor56_1193",nM="_settingsSidebarBtnActive_eor56_1217",aM="_settingsSidebarGroup_eor56_1224",sM="_settingsSidebarGroupBtn_eor56_1230",oM="_settingsSidebarGroupLabel_eor56_1234",iM="_settingsSidebarGroupChevron_eor56_1238",cM="_settingsSidebarSubnav_eor56_1244",lM="_settingsSidebarSubBtn_eor56_1251",dM="_appScrollbar_eor56_1274",uM="_settingsTabBtn_eor56_1278",pM="_settingsTabBtnActive_eor56_1304",fM="_settingsContent_eor56_1310",mM="_mcpRegistrationHint_eor56_1336",hM="_mcpRegistrationPrompt_eor56_1347",gM="_mcpCodexTrustNote_eor56_1366",yM="_mcpCodexTrustHeader_eor56_1377",kM="_mcpCodexTrustTitle_eor56_1384",vM="_mcpCodexTrustCode_eor56_1390",wM="_mcpAuthRequiredCard_eor56_1405",bM="_mcpAuthRequiredIcon_eor56_1417",SM="_mcpAuthRequiredBody_eor56_1430",AM="_mcpAuthRequiredActions_eor56_1437",CM="_settingsToast_eor56_1481",_M="_settingsToastSuccess_eor56_1498",IM="_settingsToastError_eor56_1504",TM="_inputWithPrefix_eor56_1510",xM="_pathHint_eor56_1517",RM="_settingGroup_eor56_1530",PM="_settingTitle_eor56_1536",EM="_settingTitleRow_eor56_1545",NM="_settingTitleActionBtn_eor56_1552",jM="_themeOptions_eor56_1572",MM="_buttonGrid_eor56_1577",DM="_themeBtn_eor56_1589",LM="_activeTheme_eor56_1613",OM="_pathInputGroup_eor56_1621",BM="_saveSettingsBtn_eor56_1630",WM="_shortcutInputWrapper_eor56_1651",$M="_inputIcon_eor56_1656",FM="_settingHelper_eor56_1665",UM="_browseBtn_eor56_1672",zM="_inlineCategoryManager_eor56_1691",HM="_categoryManager_eor56_1702",VM="_categoryList_eor56_1708",GM="_categoryChip_eor56_1720",KM="_categoryChipLabel_eor56_1733",qM="_chipActionBtn_eor56_1741",YM="_removeCategoryBtn_eor56_1761",ZM="_addCategoryForm_eor56_1781",JM="_addCategoryBtn_eor56_1786",QM="_filesList_eor56_1811",XM="_helpLink_eor56_1838",eD="_taskChildrenSummaryBadges_eor56_1857",tD="_taskChildrenProgressBar_eor56_1865",rD="_taskChildrenProgressBarSegmentDone_eor56_1876",nD="_taskChildrenProgressBarSegmentReview_eor56_1882",aD="_taskChildrenProgressBarSegmentInProgress_eor56_1888",sD="_taskChildrenProgressBarSegmentBlocked_eor56_1894",oD="_taskChildrenProgressText_eor56_1900",iD="_taskChildUnlinkBtn_eor56_1909",cD="_aboutText_eor56_1927",lD="_versionInfo_eor56_1934",dD="_filterBar_eor56_1942",uD="_kanbanHintText_eor56_1956",pD="_searchContainer_eor56_1962",fD="_searchIcon_eor56_1969",mD="_searchInput_eor56_1977",hD="_searchActive_eor56_2003",gD="_searchCount_eor56_2008",yD="_clearSearchBtn_eor56_2024",kD="_filterRow_eor56_2046",vD="_sortLabel_eor56_2052",wD="_archiveToggle_eor56_2060",bD="_filterContainer_eor56_2097",SD="_filterButton_eor56_2102",AD="_filterActive_eor56_2127",CD="_filterDropdown_eor56_2133",_D="_filterSearch_eor56_2148",ID="_filterSearchIcon_eor56_2156",TD="_filterSearchInput_eor56_2165",xD="_filterEmpty_eor56_2177",RD="_filterOption_eor56_2184",PD="_filterDivider_eor56_2214",ED="_filterSelect_eor56_2220",ND="_filterToggleBtn_eor56_2261",jD="_inProgressToggle_eor56_2283",MD="_activeInProgress_eor56_2301",DD="_activeFilter_eor56_2310",LD="_resetFiltersBtn_eor56_2320",OD="_categoryChip_disabled_eor56_2353",BD="_categoryVisibilityToggle_eor56_2363",WD="_editCategoryInput_eor56_2376",$D="_categoryChipActionBtn_eor56_2387",FD="_categoryChipActionBtn_active_eor56_2405",UD="_categoryGroup_eor56_2410",zD="_categoryHeader_eor56_2418",HD="_categoryTitle_eor56_2432",VD="_categoryCount_eor56_2442",GD="_categoryItems_eor56_2448",KD="_selectPriority_low_eor56_2465",qD="_selectPriority_medium_eor56_2470",YD="_selectPriority_high_eor56_2475",ZD="_selectPriority_critical_eor56_2480",JD="_levelSelect_eor56_2489",QD="_levelOption_eor56_2502",XD="_levelOptionFilled_eor56_2519",eL="_levelOption_priority_low_eor56_2526",tL="_levelOption_priority_medium_eor56_2531",rL="_levelOption_priority_high_eor56_2536",nL="_levelOption_priority_critical_eor56_2541",aL="_levelOption_complexity_tiny_eor56_2548",sL="_levelOption_complexity_low_eor56_2553",oL="_levelOption_complexity_medium_eor56_2558",iL="_levelOption_complexity_high_eor56_2563",cL="_levelOption_complexity_epic_eor56_2568",lL="_levelOptionActive_eor56_2575",dL="_levelOptionSelected_eor56_2580",uL="_levelLabel_eor56_2588",pL="_levelLabelFadeIn_eor56_1",fL="_closeConfigBtn_eor56_2613",mL="_configItem_eor56_2635",hL="_settingsLabel_eor56_2641",gL="_settingsHint_eor56_2650",yL="_pathList_eor56_2657",kL="_pathChip_eor56_2664",vL="_pathValid_eor56_2677",wL="_pathInvalid_eor56_2682",bL="_pathValidIcon_eor56_2687",SL="_pathInvalidIcon_eor56_2692",AL="_pathText_eor56_2697",CL="_removePathBtn_eor56_2704",_L="_pathCount_eor56_2726",IL="_specialistSection_eor56_2737",TL="_toggleHeading_eor56_2745",xL="_dropdownList_eor56_2785",RL="_specialistBadge_eor56_2794",PL="_iconGrid_eor56_2824",EL="_iconPickerBtn_eor56_2835",NL="_iconPickerBtnActive_eor56_2854",jL="_categorySubConfig_eor56_2861",ML="_colorPickerRow_eor56_2869",DL="_colorPickerGrid_eor56_2875",LL="_colorSwatch_eor56_2882",OL="_colorSwatchActive_eor56_2901",BL="_categoryChipIcon_eor56_2907",WL="_fieldIconWrapper_eor56_2912",$L="_fieldIcon_eor56_2912",FL="_field_dynamic_eor56_2934",UL="_fieldIcon_dynamic_eor56_2940",zL="_categoryTitleIcon_eor56_2944",HL="_editActionsGroup_eor56_2949",VL="_stickyActionHeader_eor56_2956",GL="_taskNoticeAnchor_eor56_2973",KL="_taskHierarchyHeader_eor56_2979",qL="_taskHierarchyBadgeRow_eor56_2986",YL="_taskHierarchyDivider_eor56_2994",ZL="_taskHierarchySegment_eor56_3000",JL="_taskHierarchyMeta_eor56_3007",QL="_taskHierarchyActionBtn_eor56_3020",XL="_taskWorkstreamPicker_eor56_3026",eO="_taskWorkstreamPickerIcon_eor56_3081",tO="_taskWorkstreamPickerPanel_eor56_3087",rO="_taskWorkstreamPickerOption_eor56_3091",nO="_taskSaveStatus_eor56_3113",aO="_taskSaveStatusCenter_eor56_3124",sO="_taskSaveStatusError_eor56_3132",oO="_primaryUpdateBtn_eor56_3136",iO="_secondaryHeaderBtn_eor56_3164",cO="_secondaryHeaderBtnDestructive_eor56_3185",lO="_attachmentCaptureContainer_eor56_3197",dO="_capturePrompt_eor56_3205",uO="_previewContainer_eor56_3219",pO="_previewHeader_eor56_3225",fO="_attachmentCapturePreview_eor56_3235",mO="_actions_eor56_3242",hO="_primaryButton_eor56_3248",gO="_secondaryButton_eor56_3263",yO="_iconButton_eor56_3278",kO="_attachmentGrid_eor56_3300",vO="_attachmentCard_eor56_3306",wO="_attachmentPreviewContainer_eor56_3320",bO="_attachmentPreviewButton_eor56_3337",SO="_contextFileLink_eor56_3355",AO="_attachmentActions_eor56_3381",CO="_attachmentActionBtn_eor56_3396",_O="_attachmentCaptionInput_eor56_3418",IO="_documentAttachmentCaptionInput_eor56_3419",TO="_hiddenInput_eor56_3439",xO="_contextMenuControl_eor56_3443",RO="_contextMenu_eor56_3443",PO="_contextAddMenu_eor56_3489",EO="_contextActionsMenu_eor56_3494",NO="_contextDestructiveMenuItem_eor56_3498",jO="_contextContent_eor56_3502",MO="_contextContentDropActive_eor56_3512",DO="_contextDropOverlay_eor56_3516",LO="_contextLinkComposer_eor56_3533",OO="_contextEmptyState_eor56_3540",BO="_contextGroupLabel_eor56_3550",WO="_contextNotice_eor56_3559",$O="_contextCaptionEditor_eor56_3564",FO="_attachmentCaptionLabel_eor56_3572",UO="_documentAttachmentList_eor56_3598",zO="_documentAttachmentItem_eor56_3604",HO="_documentAttachmentRow_eor56_3610",VO="_documentAttachmentLink_eor56_3619",GO="_documentAttachmentMain_eor56_3633",KO="_documentAttachmentReference_eor56_3641",qO="_documentAttachmentName_eor56_3646",YO="_documentAttachmentType_eor56_3655",ZO="_documentAttachmentTypeOutline_eor56_3671",JO="_documentAttachmentTypeFoldFill_eor56_3684",QO="_documentAttachmentTypeFoldLine_eor56_3689",XO="_documentAttachmentTypeLabel_eor56_3693",eB="_brokenImage_eor56_3699",tB="_brokenImagePlaceholder_eor56_3707",rB="_regionOverlay_eor56_3721",nB="_selectionBox_eor56_3732",aB="_exportRow_eor56_3740",sB="_exportItem_eor56_3745",oB="_taxonomyDrillDown_eor56_3754",iB="_drillDownList_eor56_3764",cB="_drillDownSection_eor56_3772",lB="_drillDownSectionHeader_eor56_3778",dB="_drillDownSectionTitle_eor56_3785",uB="_drillDownItem_eor56_3794",pB="_drillDownItemDimmed_eor56_3816",fB="_drillDownItemActive_eor56_3824",mB="_drillDownItemInfo_eor56_3829",hB="_drillDownItemText_eor56_3835",gB="_drillDownItemLabel_eor56_3840",yB="_drillDownItemSubtext_eor56_3845",kB="_addTaxonomyBtnSmall_eor56_3850",vB="_taxonomyDetailView_eor56_3872",wB="_slideIn_eor56_1",bB="_detailHeader_eor56_3892",SB="_detailTitle_eor56_3901",AB="_detailContent_eor56_3908",CB="_createOverlay_eor56_3915",_B="_createDialog_eor56_3927",IB="_zoomIn_eor56_1",TB="_dialogActions_eor56_3955",xB="_settingsGroup_eor56_3973",RB="_settingsItem_eor56_3979",PB="_mcpHealthCompactAlert_eor56_3985",EB="_mcpHealthUpdateRow_eor56_3986",NB="_mcpHealthBlockingAlert_eor56_3987",jB="_mcpHealthUpdateIcon_eor56_4015",MB="_mcpHealthCompactBody_eor56_4021",DB="_mcpHealthCompactActions_eor56_4038",LB="_mcpHealthStableAction_eor56_4044",OB="_mcpUpdateDialog_eor56_4049",BB="_mcpUpdateDialogIntro_eor56_4058",WB="_mcpUpdateRestartGuidance_eor56_4059",$B="_mcpUpdateVersionGrid_eor56_4066",FB="_mcpUpdateDiagnostics_eor56_4082",UB="_mcpUpdateLoading_eor56_4098",zB="_mcpUpdateNotice_eor56_4099",HB="_mcpUpdateCommands_eor56_4114",VB="_mcpUpdateSectionLabel_eor56_4120",GB="_mcpHealthCommandRow_eor56_4126",KB="_mcpHealthCommand_eor56_4126",qB="_mcpUpdateDialogActions_eor56_4169",YB="_mcpHealthCopyError_eor56_4175",ZB="_settingLabelGroup_eor56_4209",JB="_settingLabel_eor56_4209",QB="_settingDescription_eor56_4221",XB="_settingInput_eor56_4228",e5="_codeBlockWrapper_eor56_4251",t5="_codeHeader_eor56_4260",r5="_codeHeaderActions_eor56_4271",n5="_codeLabel_eor56_4278",a5="_codeHeaderDescription_eor56_4286",s5="_mcpTokenCardBody_eor56_4294",o5="_mcpTokenFormGrid_eor56_4302",i5="_mcpTokenOutputWrap_eor56_4309",c5="_mcpTokenValueField_eor56_4316",l5="_mcpTokenValueText_eor56_4326",d5="_mcpTokenValueInput_eor56_4339",u5="_mcpTokenActionRow_eor56_4344",p5="_settingsCodeBlock_eor56_4352",f5="_copyBtn_eor56_4367",m5="_copyBtnActive_eor56_4388",h5="_copyBtnNeutralActive_eor56_4394",g5="_headerDivider_eor56_4412",y5="_groupByContainer_eor56_4418",k5="_groupByLabel_eor56_4426",v5="_groupBySelect_eor56_4431",w5="_viewSwitcher_eor56_4453",b5="_selectWithIcon_eor56_4461",S5="_marginBottom16_eor56_4465",A5="_headerDraggable_eor56_4470",C5="_headerDragging_eor56_4474",_5="_filterSelectSort_eor56_4482",I5="_archiveRow_eor56_4486",T5="_taskScopeToggle_eor56_4492",x5="_taskScopeTabs_eor56_4505",R5="_taskScopeTab_eor56_4505",P5="_taskScopeTabActive_eor56_4550",E5="_taskToolbarAction_eor56_4558",N5="_overlayHighZ_eor56_4574",j5="_savedText_eor56_4584",M5="_shortcutInput_eor56_1651",D5="_saveSettingsBtnWrapper_eor56_4592",L5="_marginBottom12_eor56_4596",O5="_exportRowGrid_eor56_4600",B5="_settingSubtitleCustom_eor56_4605",W5="_capitalize_eor56_4611",$5="_marginTop12_eor56_4615",F5="_marginTop16_eor56_4619",U5="_labelGroupFlex_eor56_4623",z5="_codeBlockWrapperCustom_eor56_4629",H5="_kanbanWrapper_eor56_4635",V5="_kanbanContainer_eor56_4643",G5="_kanbanTopScroll_eor56_4665",K5="_kanbanTopScrollSpacer_eor56_4674",q5="_kanbanColumn_eor56_4678",Y5="_kanbanColumnSticky_eor56_4694",Z5="_kanbanColumnCollapsed_eor56_4700",J5="_kanbanColumnPast_eor56_4705",Q5="_kanbanColumnSelectedDay_eor56_4710",X5="_kanbanHeader_eor56_4717",eW="_kanbanCount_eor56_4727",tW="_kanbanHeaderDraggable_eor56_4747",rW="_kanbanHeaderPanning_eor56_4751",nW="_kanbanQuickAdd_eor56_4755",aW="_kanbanColorDot_eor56_4776",sW="_kanbanDroppable_eor56_4788",oW="_kanbanDroppableScroll_eor56_4797",iW="_kanbanEmpty_eor56_4807",cW="_kanbanCard_eor56_4817",lW="_kanbanCardWrapper_eor56_4827",dW="_taxonomyDropdownActive_eor56_4835",uW="_kanbanCardWrapperRaised_eor56_4839",pW="_kanbanCardTitle_eor56_4843",fW="_kanbanBadges_eor56_4847",mW="_kanbanBadge_eor56_4847",hW="_headerFlex_eor56_4863",gW="_marginBottom8_eor56_4870",yW="_marginBottom20_eor56_4874",kW="_configPanel_eor56_4878",vW="_configPanelLarge_eor56_4887",wW="_subLabelBlock_eor56_4891",bW="_subLabelBlock12_eor56_4898",SW="_flexBetween_eor56_4902",AW="_flexBetweenCenter_eor56_4909",CW="_deleteBtnSmall_eor56_4914",_W="_deleteBtnMedium_eor56_4920",IW="_trashIcon_eor56_4927",TW="_gridConfig_eor56_4931",xW="_flexColGap4_eor56_4938",RW="_flexColGap4Center_eor56_4944",PW="_flex1_eor56_4951",EW="_flexCol_eor56_4938",NW="_flexGrow1_eor56_4961",jW="_inputLabel_eor56_4965",MW="_inputLabelBlock_eor56_4969",DW="_checkboxInput_eor56_4975",LW="_configDividerMargin_eor56_4981",OW="_configDividerMargin24_eor56_4986",BW="_pathListMargin_eor56_4991",WW="_cancelBtnRed_eor56_4995",$W="_code_eor56_4251",FW="_workflowList_eor56_5022",UW="_workflowActions_eor56_5030",zW="_textBtn_eor56_5039",HW="_workflowGrid_eor56_5053",VW="_checkboxLabel_eor56_5061",GW="_checkboxSmall_eor56_5075",KW="_docWorkspace_eor56_5094",qW="_docIndexPanel_eor56_5105",YW="_docWorkspaceTrayMode_eor56_5117",ZW="_docViewerPanel_eor56_5117",JW="_docWorkspaceTrayOpen_eor56_5122",QW="_docTrayPanel_eor56_5126",XW="_docTrayPanelOpen_eor56_5150",e6="_docSpinning_eor56_5158",t6="_docSpin_eor56_5158",r6="_docViewerEmpty_eor56_5177",n6="_agentsModuleRoot_eor56_5192",a6="_agentsModuleWithTray_eor56_5204",s6="_agentsModuleTrayOpen_eor56_5208",o6="_agentTrayPanel_eor56_5212",i6="_agentTrayPanelOpen_eor56_5235",c6="_agentTrayHeader_eor56_5243",l6="_agentTrayTitle_eor56_5258",d6="_agentTrayContent_eor56_5270",u6="_agentTrayContentInner_eor56_5278",p6="_agentsModuleContent_eor56_5282",f6="_taskforceAgentsModuleRoot_eor56_5290",m6="_taskforceAgentsModuleMain_eor56_5301",h6="_taskforceAgentsModuleTrayOpen_eor56_5309",g6="_taskforceAgentRosterHeader_eor56_5313",y6="_taskforceAgentRosterTitle_eor56_5326",k6="_taskforceAgentRosterContent_eor56_5338",v6="_taskforceAgentLibraryPortal_eor56_5346",w6="_taskforceAgentBuilderNavigation_eor56_5352",b6="_taskforceAgentBuilderTabs_eor56_5375",S6="_taskforceAgentBuilderCreateBtn_eor56_5392",A6="_taskforceAgentBuilderTab_eor56_5375",C6="_taskforceAgentBuilderTabActive_eor56_5433",_6="_taskforceAgentBuilderPanel_eor56_5451",I6="_taskforceAgentBuilderEmpty_eor56_5459",T6="_taskforceAgentBuilderEmptyIcon_eor56_5468",x6="_taskforceAgentTestGrid_eor56_5480",R6="_taskforceAgentContextBanner_eor56_5487",P6="_taskforceAgentContextActions_eor56_5506",E6="_taskforceAssistantWorkspace_eor56_5530",N6="_taskforceAssistantWorkspaceContent_eor56_5540",j6="_taskforceAssistantWorkspaceOpen_eor56_5549",M6="_taskforceAssistantWorkspaceCollapsed_eor56_5553",D6="_taskforceModalWithAssistantPanel_eor56_5557",L6="_taskforceModalWithAssistantPanelCollapsed_eor56_5562",O6="_taskforceTaskModalOverlay_eor56_5566",B6="_taskforceAgentDrawerOverlay_eor56_5587",W6="_taskforceAgentDrawerOverlayCollapsed_eor56_5597",$6="_taskforceAgentDrawerPanel_eor56_5601",F6="_taskforceAgentDrawerHeader_eor56_5613",U6="_taskforceAgentDrawerAgentHeader_eor56_5623",z6="_taskforceAgentDrawerHeaderFallback_eor56_5624",H6="_taskforceAgentDrawerAgentAvatar_eor56_5632",V6="_taskforceAgentDrawerFallbackAvatar_eor56_5633",G6="_taskforceAgentDrawerAgentAvatarButton_eor56_5655",K6="_taskforceAgentDrawerAgentPicker_eor56_5679",q6="_taskforceAgentDrawerHeaderActions_eor56_5699",Y6="_taskforceAgentDrawerLoading_eor56_5705",Z6="_taskforceAgentDrawerSurface_eor56_5713",J6="_taskforceAgentDrawerControls_eor56_5723",Q6="_taskforceAgentProfileTray_eor56_5730",X6="_taskforceAgentProfileTrayIn_eor56_1",e$="_taskforceAgentProfileTrayHeader_eor56_5742",t$="_taskforceAgentProfileTrayIdentity_eor56_5750",r$="_taskforceAgentProfileTrayDetails_eor56_5758",n$="_taskforceAgentDrawerChatControls_eor56_5824",a$="_taskforceAgentConversationRename_eor56_5832",s$="_taskforceAgentConversationRenameError_eor56_5844",o$="_taskforceAgentDrawerConversationList_eor56_5851",i$="_taskforceAgentDrawerPrompt_eor56_5857",c$="_taskforceAgentDrawerPromptStatus_eor56_5877",l$="_taskforceAgentDrawerMetrics_eor56_5885",d$="_taskforceAgentOutputStack_eor56_5910",u$="_taskforceAgentOutputPanel_eor56_5917",p$="_taskforceAgentTestTitle_eor56_5928",f$="_taskforceAgentTestNotice_eor56_5955",m$="_taskforceAgentTestError_eor56_5956",h$="_taskforceAgentTestPending_eor56_5957",g$="_taskforceAgentTestActions_eor56_5990",y$="_taskforceAgentTestRestriction_eor56_6001",k$="_taskforceAgentTestResult_eor56_6008",v$="_taskforceAgentTestResultHeader_eor56_6018",w$="_taskforceAgentTestResponse_eor56_6036",b$="_taskforceAgentReadonlyField_eor56_6052",S$="_taskforceAgentAvatarPanel_eor56_6065",A$="_taskforceAgentAvatarEditControl_eor56_6077",C$="_taskforceAgentAvatarPreview_eor56_6083",_$="_taskforceAgentListAvatar_eor56_6084",I$="_taskforceAgentAvatarSyncing_eor56_6109",T$="_taskforceAgentAvatarSyncIcon_eor56_6113",x$="_taskforceAgentAvatarCopy_eor56_6126",R$="_taskforceAgentAvatarRole_eor56_6144",P$="_taskforceAgentToolbar_eor56_6164",E$="_taskforceAgentConversationSelect_eor56_6174",N$="_taskforceAgentList_eor56_6084",j$="_taskforceAgentListEmpty_eor56_6191",M$="_taskforceAgentSignatureColorField_eor56_6198",D$="_aiProfileColorPicker_eor56_6217",L$="_taskforceAgentBehaviorGrid_eor56_6222",O$="_taskforceAgentBehaviorWide_eor56_6228",B$="_taskforceAgentFieldHelper_eor56_6232",W$="_taskforceAgentPresentationGroup_eor56_6239",$$="_taskforceAgentLogList_eor56_6254",F$="_taskforceAgentLogEntry_eor56_6260",U$="_taskforceAgentToolDetails_eor56_6271",z$="_taskforceAgentToolActivity_eor56_6285",H$="_taskforceAgentToolActivityList_eor56_6313",V$="_taskforceAgentToolCall_eor56_6320",G$="_taskforceAgentToolCallFailed_eor56_6336",K$="_taskforceAgentToolCallName_eor56_6340",q$="_taskforceAgentToolCallStatus_eor56_6350",Y$="_taskforceAgentToolDetailsGrid_eor56_6356",Z$="_taskforceAgentLogSuccess_eor56_6391",J$="_taskforceAgentLogError_eor56_6395",Q$="_taskforceAgentLogTime_eor56_6399",X$="_taskforceAgentConversationList_eor56_6405",e3="_taskforceAgentConversationBody_eor56_6424",t3="_taskforceAgentConversationMessage_eor56_6425",r3="_taskforceAgentConversationEmpty_eor56_6430",n3="_taskforceAgentConversationMessageUser_eor56_6471",a3="_taskforceAgentConversationMessageAssistant_eor56_6483",s3="_taskforceAgentMetaGrid_eor56_6498",o3="_marginTop24_eor56_6526",i3="_settingSubTitle_eor56_6530",c3="_dangerBtn_eor56_6539",l3="_aiProfilesExplorer_eor56_6555",d3="_aiProfilesRosterPanel_eor56_6564",u3="_aiProfilesRosterSummary_eor56_6575",p3="_aiProfileSeatSummary_eor56_6584",f3="_aiProfilesRosterState_eor56_6588",m3="_aiProfilesListPane_eor56_6600",h3="_aiProfilesList_eor56_6600",g3="_aiProfilesDetailViewport_eor56_6620",y3="_aiProfilesSection_eor56_6627",k3="_aiProfilesSectionHeader_eor56_6633",v3="_aiProfileGroup_eor56_6641",w3="_aiProfileGroupSelected_eor56_6664",b3="_aiProfileGroupDuplicate_eor56_6671",S3="_aiProfileGroupHeader_eor56_6676",A3="_aiProfileGroupAvatar_eor56_6684",C3="_aiProfileGroupAvatarLogo_eor56_6706",_3="_aiProfileGroupIdentity_eor56_6718",I3="_aiProfileName_eor56_6727",T3="_aiProfileHandle_eor56_6735",x3="_aiProfileRole_eor56_6736",R3="_aiProfileSeatScopeIcon_eor56_6756",P3="_aiProfileGroupSignatureSwatch_eor56_6767",E3="_aiProfileSeatScopeIconDetail_eor56_6773",N3="_aiProfileSeatScopeIconCloud_eor56_6778",j3="_aiProfileSeatScopeIconLocal_eor56_6782",M3="_aiProfileDuplicateBadge_eor56_6786",D3="_aiProfileMergeSection_eor56_6798",L3="_aiProfileMergeRow_eor56_6805",O3="_aiProfileIdChip_eor56_6812",B3="_aiProfileKeepBadge_eor56_6824",W3="_aiProfileMergeActions_eor56_6838",$3="_aiProfileDetailPane_eor56_6845",F3="_aiProfileDetailCard_eor56_6851",U3="_aiProfileDetailHero_eor56_6864",z3="_aiProfileDetailIcon_eor56_6870",H3="_aiProfileDetailAvatar_eor56_6884",V3="_aiProfileDetailAvatarLogo_eor56_6888",G3="_aiProfileDetailHeading_eor56_6906",K3="_aiProfileDetailTitleRow_eor56_6911",q3="_aiProfileDetailTitle_eor56_6911",Y3="_aiProfileDetailMetaRow_eor56_6926",Z3="_aiProfileDetailHandle_eor56_6934",J3="_aiProfileDetailRole_eor56_6939",Q3="_aiProfileDetailLinkedCount_eor56_6946",X3="_aiProfileDetailDescription_eor56_6951",eF="_aiProfileSignatureColor_eor56_6958",tF="_aiProfileSignatureSwatch_eor56_6968",rF="_aiProfileSignatureColorButton_eor56_6986",nF="_aiProfileColorOption_eor56_7013",aF="_aiProfileDetailDataList_eor56_7027",sF="_aiProfileDetailDataGroup_eor56_7036",oF="_aiProfileDetailDateGroup_eor56_7043",iF="_aiProfileDetailDataRow_eor56_7048",cF="_aiProfileDetailDataLabel_eor56_7057",lF="_aiProfileDetailDataValue_eor56_7064",dF="_aiProfileStatusSelect_eor56_7070",uF="_aiProfileInstanceSection_eor56_7112",pF="_aiProfileInstanceSectionHeader_eor56_7118",fF="_aiProfileInstanceList_eor56_7128",mF="_aiProfileInstanceCard_eor56_7134",hF="_aiProfileIdFooter_eor56_7147",gF="_aiProfileIdFooterValue_eor56_7157",yF="_aiProfileDangerTextButton_eor56_7167",kF="_aiProfileInstanceTopRow_eor56_7199",vF="_aiProfileInstanceName_eor56_7206",wF="_aiProfileInstanceMeta_eor56_7213",bF="_aiProfileInlineError_eor56_7221",x={filterGlow:q1,floatingButton:Y1,badge:Z1,configBadge:J1,configBadgeActive:Q1,configBadgeRevoked:X1,configBadgeExpired:ej,coreModal:tj,header:rj,headerTitle:nj,brandIcon:aj,brandHomeButton:sj,brandHomeStatic:oj,brandCloudSuffix:ij,projectSlash:cj,projectNameGroup:lj,projectNameGroupHidden:dj,projectName:uj,taskCountBadge:pj,taskCountBadgeIcon:fj,taskCountBadgeButton:mj,taskCountBadgeActive:hj,taskCountBadgeAlert:gj,headerActions:yj,sortDirectionBtn:kj,sortDirectionBtnWidget:vj,form:wj,topRow:bj,field:Sj,labelRow:Aj,label:Cj,manageLink:_j,input:Ij,select:Tj,textarea:xj,taskIdInlineLink:Rj,readOnly:Pj,selectWithConfig:Ej,configBtn:Nj,configBtnActive:jj,hasPath:Mj,pathIndicator:Dj,formActions:Lj,hasCancel:Oj,submitBtn:Bj,cancelBtn:Wj,successMessage:$j,errorMessage:Fj,successIcon:Uj,spinner:zj,spin:Hj,boardRefreshIndicator:Vj,destructiveBtn:Gj,warningBtn:Kj,viewTab:qj,loading:Yj,emptyState:Zj,taskList:Jj,referenceBadge:Qj,referenceBadgeLabel:Xj,referenceBadgeStatic:e2,provisionalReferenceBadge:t2,copiedReference:r2,highlight:n2,modal:a2,priorityEmoji:s2,metaItem:o2,taskFormDateInput:i2,metaBadge:c2,complexityPill:l2,complexityDots:d2,dot:u2,dotFilled:p2,typePill:f2,type_bug:m2,type_feature:h2,type_chore:g2,type_refactor:y2,type_documentation:k2,type_research:v2,"type_ui-ux":"_type_ui-ux_eor56_870",type_security:w2,statusActionsGroup:b2,statusActionsGroupCompact:S2,statusSelectWrap:A2,statusTaxonomyDropdownWrap:C2,statusTaxonomyDropdown:_2,statusTaxonomyDropdownCompact:I2,statusTaxonomyDropdownIconOnly:T2,taxonomyDropdownButton:x2,taxonomyDropdownButtonContent:R2,statusTaxonomyDropdownIconOnlyPanel:P2,actionBtn:E2,startWorkBtn:N2,workingBtn:j2,pulse:M2,reviewBtn:D2,reviewActiveBtn:L2,reviewPill:O2,archiveTaskBtn:B2,bulkArchiveBtn:W2,bulkDeleteBtn:$2,deleteBtn:F2,completeBtn:U2,completeActiveBtn:z2,deleteActiveBtn:H2,disabledBtn:V2,archiveList:G2,archiveHeader:K2,settingsTab:q2,settingsTabMcpOnly:Y2,settingsTabs:Z2,settingsLayout:J2,settingsLayoutMcpOnly:Q2,settingsSidebar:X2,settingsSidebarHeader:eM,settingsSidebarNav:tM,settingsSidebarBtn:rM,settingsSidebarBtnActive:nM,settingsSidebarGroup:aM,settingsSidebarGroupBtn:sM,settingsSidebarGroupLabel:oM,settingsSidebarGroupChevron:iM,settingsSidebarSubnav:cM,settingsSidebarSubBtn:lM,appScrollbar:dM,settingsTabBtn:uM,settingsTabBtnActive:pM,settingsContent:fM,mcpRegistrationHint:mM,mcpRegistrationPrompt:hM,mcpCodexTrustNote:gM,mcpCodexTrustHeader:yM,mcpCodexTrustTitle:kM,mcpCodexTrustCode:vM,mcpAuthRequiredCard:wM,mcpAuthRequiredIcon:bM,mcpAuthRequiredBody:SM,mcpAuthRequiredActions:AM,settingsToast:CM,settingsToastSuccess:_M,settingsToastError:IM,inputWithPrefix:TM,pathHint:xM,settingGroup:RM,settingTitle:PM,settingTitleRow:EM,settingTitleActionBtn:NM,themeOptions:jM,buttonGrid:MM,themeBtn:DM,activeTheme:LM,pathInputGroup:OM,saveSettingsBtn:BM,shortcutInputWrapper:WM,inputIcon:$M,settingHelper:FM,browseBtn:UM,inlineCategoryManager:zM,categoryManager:HM,categoryList:VM,categoryChip:GM,categoryChipLabel:KM,chipActionBtn:qM,removeCategoryBtn:YM,addCategoryForm:ZM,addCategoryBtn:JM,filesList:QM,helpLink:XM,taskChildrenSummaryBadges:eD,taskChildrenProgressBar:tD,taskChildrenProgressBarSegmentDone:rD,taskChildrenProgressBarSegmentReview:nD,taskChildrenProgressBarSegmentInProgress:aD,taskChildrenProgressBarSegmentBlocked:sD,taskChildrenProgressText:oD,taskChildUnlinkBtn:iD,aboutText:cD,versionInfo:lD,filterBar:dD,kanbanHintText:uD,searchContainer:pD,searchIcon:fD,searchInput:mD,searchActive:hD,searchCount:gD,clearSearchBtn:yD,filterRow:kD,sortLabel:vD,archiveToggle:wD,filterContainer:bD,filterButton:SD,filterActive:AD,filterDropdown:CD,filterSearch:_D,filterSearchIcon:ID,filterSearchInput:TD,filterEmpty:xD,filterOption:RD,filterDivider:PD,filterSelect:ED,filterToggleBtn:ND,inProgressToggle:jD,activeInProgress:MD,activeFilter:DD,resetFiltersBtn:LD,categoryChip_disabled:OD,categoryVisibilityToggle:BD,editCategoryInput:WD,categoryChipActionBtn:$D,categoryChipActionBtn_active:FD,categoryGroup:UD,categoryHeader:zD,categoryTitle:HD,categoryCount:VD,categoryItems:GD,selectPriority_low:KD,selectPriority_medium:qD,selectPriority_high:YD,selectPriority_critical:ZD,"critical-glow":"_critical-glow_eor56_1",levelSelect:JD,levelOption:QD,levelOptionFilled:XD,levelOption_priority_low:eL,levelOption_priority_medium:tL,levelOption_priority_high:rL,levelOption_priority_critical:nL,levelOption_complexity_tiny:aL,levelOption_complexity_low:sL,levelOption_complexity_medium:oL,levelOption_complexity_high:iL,levelOption_complexity_epic:cL,levelOptionActive:lL,levelOptionSelected:dL,levelLabel:uL,levelLabelFadeIn:pL,closeConfigBtn:fL,configItem:mL,settingsLabel:hL,settingsHint:gL,pathList:yL,pathChip:kL,pathValid:vL,pathInvalid:wL,pathValidIcon:bL,pathInvalidIcon:SL,pathText:AL,removePathBtn:CL,pathCount:_L,specialistSection:IL,toggleHeading:TL,dropdownList:xL,specialistBadge:RL,iconGrid:PL,iconPickerBtn:EL,iconPickerBtnActive:NL,categorySubConfig:jL,colorPickerRow:ML,colorPickerGrid:DL,colorSwatch:LL,colorSwatchActive:OL,categoryChipIcon:BL,fieldIconWrapper:WL,fieldIcon:$L,field_dynamic:FL,fieldIcon_dynamic:UL,categoryTitleIcon:zL,editActionsGroup:HL,stickyActionHeader:VL,taskNoticeAnchor:GL,taskHierarchyHeader:KL,taskHierarchyBadgeRow:qL,taskHierarchyDivider:YL,taskHierarchySegment:ZL,taskHierarchyMeta:JL,taskHierarchyActionBtn:QL,taskWorkstreamPicker:XL,taskWorkstreamPickerIcon:eO,taskWorkstreamPickerPanel:tO,taskWorkstreamPickerOption:rO,taskSaveStatus:nO,taskSaveStatusCenter:aO,taskSaveStatusError:sO,primaryUpdateBtn:oO,secondaryHeaderBtn:iO,secondaryHeaderBtnDestructive:cO,attachmentCaptureContainer:lO,capturePrompt:dO,previewContainer:uO,previewHeader:pO,attachmentCapturePreview:fO,actions:mO,primaryButton:hO,secondaryButton:gO,iconButton:yO,attachmentGrid:kO,attachmentCard:vO,attachmentPreviewContainer:wO,attachmentPreviewButton:bO,contextFileLink:SO,attachmentActions:AO,attachmentActionBtn:CO,attachmentCaptionInput:_O,documentAttachmentCaptionInput:IO,hiddenInput:TO,contextMenuControl:xO,contextMenu:RO,contextAddMenu:PO,contextActionsMenu:EO,contextDestructiveMenuItem:NO,contextContent:jO,contextContentDropActive:MO,contextDropOverlay:DO,contextLinkComposer:LO,contextEmptyState:OO,contextGroupLabel:BO,contextNotice:WO,contextCaptionEditor:$O,attachmentCaptionLabel:FO,documentAttachmentList:UO,documentAttachmentItem:zO,documentAttachmentRow:HO,documentAttachmentLink:VO,documentAttachmentMain:GO,documentAttachmentReference:KO,documentAttachmentName:qO,documentAttachmentType:YO,documentAttachmentTypeOutline:ZO,documentAttachmentTypeFoldFill:JO,documentAttachmentTypeFoldLine:QO,documentAttachmentTypeLabel:XO,brokenImage:eB,brokenImagePlaceholder:tB,regionOverlay:rB,selectionBox:nB,exportRow:aB,exportItem:sB,taxonomyDrillDown:oB,drillDownList:iB,drillDownSection:cB,drillDownSectionHeader:lB,drillDownSectionTitle:dB,drillDownItem:uB,drillDownItemDimmed:pB,drillDownItemActive:fB,drillDownItemInfo:mB,drillDownItemText:hB,drillDownItemLabel:gB,drillDownItemSubtext:yB,addTaxonomyBtnSmall:kB,taxonomyDetailView:vB,slideIn:wB,detailHeader:bB,detailTitle:SB,detailContent:AB,createOverlay:CB,createDialog:_B,zoomIn:IB,dialogActions:TB,settingsGroup:xB,settingsItem:RB,mcpHealthCompactAlert:PB,mcpHealthUpdateRow:EB,mcpHealthBlockingAlert:NB,mcpHealthUpdateIcon:jB,mcpHealthCompactBody:MB,mcpHealthCompactActions:DB,mcpHealthStableAction:LB,mcpUpdateDialog:OB,mcpUpdateDialogIntro:BB,mcpUpdateRestartGuidance:WB,mcpUpdateVersionGrid:$B,mcpUpdateDiagnostics:FB,mcpUpdateLoading:UB,mcpUpdateNotice:zB,mcpUpdateCommands:HB,mcpUpdateSectionLabel:VB,mcpHealthCommandRow:GB,mcpHealthCommand:KB,mcpUpdateDialogActions:qB,mcpHealthCopyError:YB,settingLabelGroup:ZB,settingLabel:JB,settingDescription:QB,settingInput:XB,codeBlockWrapper:e5,codeHeader:t5,codeHeaderActions:r5,codeLabel:n5,codeHeaderDescription:a5,mcpTokenCardBody:s5,mcpTokenFormGrid:o5,mcpTokenOutputWrap:i5,mcpTokenValueField:c5,mcpTokenValueText:l5,mcpTokenValueInput:d5,mcpTokenActionRow:u5,settingsCodeBlock:p5,copyBtn:f5,copyBtnActive:m5,copyBtnNeutralActive:h5,headerDivider:g5,groupByContainer:y5,groupByLabel:k5,groupBySelect:v5,viewSwitcher:w5,selectWithIcon:b5,marginBottom16:S5,headerDraggable:A5,headerDragging:C5,filterSelectSort:_5,archiveRow:I5,taskScopeToggle:T5,taskScopeTabs:x5,taskScopeTab:R5,taskScopeTabActive:P5,taskToolbarAction:E5,overlayHighZ:N5,savedText:j5,shortcutInput:M5,saveSettingsBtnWrapper:D5,marginBottom12:L5,exportRowGrid:O5,settingSubtitleCustom:B5,capitalize:W5,marginTop12:$5,marginTop16:F5,labelGroupFlex:U5,codeBlockWrapperCustom:z5,kanbanWrapper:H5,kanbanContainer:V5,kanbanTopScroll:G5,kanbanTopScrollSpacer:K5,kanbanColumn:q5,kanbanColumnSticky:Y5,kanbanColumnCollapsed:Z5,kanbanColumnPast:J5,kanbanColumnSelectedDay:Q5,kanbanHeader:X5,kanbanCount:eW,kanbanHeaderDraggable:tW,kanbanHeaderPanning:rW,kanbanQuickAdd:nW,kanbanColorDot:aW,kanbanDroppable:sW,kanbanDroppableScroll:oW,kanbanEmpty:iW,kanbanCard:cW,kanbanCardWrapper:lW,taxonomyDropdownActive:dW,kanbanCardWrapperRaised:uW,kanbanCardTitle:pW,kanbanBadges:fW,kanbanBadge:mW,headerFlex:hW,marginBottom8:gW,marginBottom20:yW,configPanel:kW,configPanelLarge:vW,subLabelBlock:wW,subLabelBlock12:bW,flexBetween:SW,flexBetweenCenter:AW,deleteBtnSmall:CW,deleteBtnMedium:_W,trashIcon:IW,gridConfig:TW,flexColGap4:xW,flexColGap4Center:RW,flex1:PW,flexCol:EW,flexGrow1:NW,inputLabel:jW,inputLabelBlock:MW,checkboxInput:DW,configDividerMargin:LW,configDividerMargin24:OW,pathListMargin:BW,cancelBtnRed:WW,code:$W,workflowList:FW,workflowActions:UW,textBtn:zW,workflowGrid:HW,checkboxLabel:VW,checkboxSmall:GW,docWorkspace:KW,docIndexPanel:qW,docWorkspaceTrayMode:YW,docViewerPanel:ZW,docWorkspaceTrayOpen:JW,docTrayPanel:QW,docTrayPanelOpen:XW,docSpinning:e6,docSpin:t6,docViewerEmpty:r6,agentsModuleRoot:n6,agentsModuleWithTray:a6,agentsModuleTrayOpen:s6,agentTrayPanel:o6,agentTrayPanelOpen:i6,agentTrayHeader:c6,agentTrayTitle:l6,agentTrayContent:d6,agentTrayContentInner:u6,agentsModuleContent:p6,taskforceAgentsModuleRoot:f6,taskforceAgentsModuleMain:m6,taskforceAgentsModuleTrayOpen:h6,taskforceAgentRosterHeader:g6,taskforceAgentRosterTitle:y6,taskforceAgentRosterContent:k6,taskforceAgentLibraryPortal:v6,taskforceAgentBuilderNavigation:w6,taskforceAgentBuilderTabs:b6,taskforceAgentBuilderCreateBtn:S6,taskforceAgentBuilderTab:A6,taskforceAgentBuilderTabActive:C6,taskforceAgentBuilderPanel:_6,taskforceAgentBuilderEmpty:I6,taskforceAgentBuilderEmptyIcon:T6,taskforceAgentTestGrid:x6,taskforceAgentContextBanner:R6,taskforceAgentContextActions:P6,taskforceAssistantWorkspace:E6,taskforceAssistantWorkspaceContent:N6,taskforceAssistantWorkspaceOpen:j6,taskforceAssistantWorkspaceCollapsed:M6,taskforceModalWithAssistantPanel:D6,taskforceModalWithAssistantPanelCollapsed:L6,taskforceTaskModalOverlay:O6,taskforceAgentDrawerOverlay:B6,taskforceAgentDrawerOverlayCollapsed:W6,taskforceAgentDrawerPanel:$6,taskforceAgentDrawerHeader:F6,taskforceAgentDrawerAgentHeader:U6,taskforceAgentDrawerHeaderFallback:z6,taskforceAgentDrawerAgentAvatar:H6,taskforceAgentDrawerFallbackAvatar:V6,taskforceAgentDrawerAgentAvatarButton:G6,taskforceAgentDrawerAgentPicker:K6,taskforceAgentDrawerHeaderActions:q6,taskforceAgentDrawerLoading:Y6,taskforceAgentDrawerSurface:Z6,taskforceAgentDrawerControls:J6,taskforceAgentProfileTray:Q6,taskforceAgentProfileTrayIn:X6,taskforceAgentProfileTrayHeader:e$,taskforceAgentProfileTrayIdentity:t$,taskforceAgentProfileTrayDetails:r$,taskforceAgentDrawerChatControls:n$,taskforceAgentConversationRename:a$,taskforceAgentConversationRenameError:s$,taskforceAgentDrawerConversationList:o$,taskforceAgentDrawerPrompt:i$,taskforceAgentDrawerPromptStatus:c$,taskforceAgentDrawerMetrics:l$,taskforceAgentOutputStack:d$,taskforceAgentOutputPanel:u$,taskforceAgentTestTitle:p$,taskforceAgentTestNotice:f$,taskforceAgentTestError:m$,taskforceAgentTestPending:h$,taskforceAgentTestActions:g$,taskforceAgentTestRestriction:y$,taskforceAgentTestResult:k$,taskforceAgentTestResultHeader:v$,taskforceAgentTestResponse:w$,taskforceAgentReadonlyField:b$,taskforceAgentAvatarPanel:S$,taskforceAgentAvatarEditControl:A$,taskforceAgentAvatarPreview:C$,taskforceAgentListAvatar:_$,taskforceAgentAvatarSyncing:I$,taskforceAgentAvatarSyncIcon:T$,taskforceAgentAvatarCopy:x$,taskforceAgentAvatarRole:R$,taskforceAgentToolbar:P$,taskforceAgentConversationSelect:E$,taskforceAgentList:N$,taskforceAgentListEmpty:j$,taskforceAgentSignatureColorField:M$,aiProfileColorPicker:D$,taskforceAgentBehaviorGrid:L$,taskforceAgentBehaviorWide:O$,taskforceAgentFieldHelper:B$,taskforceAgentPresentationGroup:W$,taskforceAgentLogList:$$,taskforceAgentLogEntry:F$,taskforceAgentToolDetails:U$,taskforceAgentToolActivity:z$,taskforceAgentToolActivityList:H$,taskforceAgentToolCall:V$,taskforceAgentToolCallFailed:G$,taskforceAgentToolCallName:K$,taskforceAgentToolCallStatus:q$,taskforceAgentToolDetailsGrid:Y$,taskforceAgentLogSuccess:Z$,taskforceAgentLogError:J$,taskforceAgentLogTime:Q$,taskforceAgentConversationList:X$,taskforceAgentConversationBody:e3,taskforceAgentConversationMessage:t3,taskforceAgentConversationEmpty:r3,taskforceAgentConversationMessageUser:n3,taskforceAgentConversationMessageAssistant:a3,taskforceAgentMetaGrid:s3,marginTop24:o3,settingSubTitle:i3,dangerBtn:c3,aiProfilesExplorer:l3,aiProfilesRosterPanel:d3,aiProfilesRosterSummary:u3,aiProfileSeatSummary:p3,aiProfilesRosterState:f3,aiProfilesListPane:m3,aiProfilesList:h3,aiProfilesDetailViewport:g3,aiProfilesSection:y3,aiProfilesSectionHeader:k3,aiProfileGroup:v3,aiProfileGroupSelected:w3,aiProfileGroupDuplicate:b3,aiProfileGroupHeader:S3,aiProfileGroupAvatar:A3,aiProfileGroupAvatarLogo:C3,aiProfileGroupIdentity:_3,aiProfileName:I3,aiProfileHandle:T3,aiProfileRole:x3,aiProfileSeatScopeIcon:R3,aiProfileGroupSignatureSwatch:P3,aiProfileSeatScopeIconDetail:E3,aiProfileSeatScopeIconCloud:N3,aiProfileSeatScopeIconLocal:j3,aiProfileDuplicateBadge:M3,aiProfileMergeSection:D3,aiProfileMergeRow:L3,aiProfileIdChip:O3,aiProfileKeepBadge:B3,aiProfileMergeActions:W3,aiProfileDetailPane:$3,aiProfileDetailCard:F3,aiProfileDetailHero:U3,aiProfileDetailIcon:z3,aiProfileDetailAvatar:H3,aiProfileDetailAvatarLogo:V3,aiProfileDetailHeading:G3,aiProfileDetailTitleRow:K3,aiProfileDetailTitle:q3,aiProfileDetailMetaRow:Y3,aiProfileDetailHandle:Z3,aiProfileDetailRole:J3,aiProfileDetailLinkedCount:Q3,aiProfileDetailDescription:X3,aiProfileSignatureColor:eF,aiProfileSignatureSwatch:tF,aiProfileSignatureColorButton:rF,aiProfileColorOption:nF,aiProfileDetailDataList:aF,aiProfileDetailDataGroup:sF,aiProfileDetailDateGroup:oF,aiProfileDetailDataRow:iF,aiProfileDetailDataLabel:cF,aiProfileDetailDataValue:lF,aiProfileStatusSelect:dF,aiProfileInstanceSection:uF,aiProfileInstanceSectionHeader:pF,aiProfileInstanceList:fF,aiProfileInstanceCard:mF,aiProfileIdFooter:hF,aiProfileIdFooterValue:gF,aiProfileDangerTextButton:yF,aiProfileInstanceTopRow:kF,aiProfileInstanceName:vF,aiProfileInstanceMeta:wF,aiProfileInlineError:bF},SF="_standaloneWrapper_128c3_1",AF="_standalonePage_128c3_11",CF="_standaloneHeader_128c3_21",_F="_standaloneTitle_128c3_27",IF="_standaloneContent_128c3_31",TF="_workspaceToolRail_128c3_37",xF="_workspaceToolRailLeft_128c3_48",RF="_workspaceToolRailRight_128c3_57",PF="_workspaceToolRailMain_128c3_64",EF="_workspaceToolRailBottom_128c3_72",NF="_workspaceToolRailDivider_128c3_82",jF="_workspaceToolButton_128c3_89",MF="_headerTitleWidget_128c3_124",zr={standaloneWrapper:SF,standalonePage:AF,standaloneHeader:CF,standaloneTitle:_F,standaloneContent:IF,workspaceToolRail:TF,workspaceToolRailLeft:xF,workspaceToolRailRight:RF,workspaceToolRailMain:PF,workspaceToolRailBottom:EF,workspaceToolRailDivider:NF,workspaceToolButton:jF,headerTitleWidget:MF},DF="_overlay_11v7l_1",LF="_browser_11v7l_16",OF="_header_11v7l_27",BF="_pathInfo_11v7l_36",WF="_actions_11v7l_52",$F="_list_11v7l_57",FF="_item_11v7l_63",UF="_itemCurrent_11v7l_80",zF="_itemFile_11v7l_86",HF="_empty_11v7l_90",In={overlay:DF,browser:LF,header:OF,pathInfo:BF,actions:WF,list:$F,item:FF,itemCurrent:UF,itemFile:zF,empty:HF},VF="_overlay_1hk7m_2",GF="_overlayHighZ_1hk7m_15",KF="_modal_1hk7m_20",qF="_draggableModal_1hk7m_46",YF="_draggableHeader_1hk7m_53",ZF="_headerActions_1hk7m_61",JF="_modalContent_1hk7m_69",QF="_form_1hk7m_80",XF="_formActions_1hk7m_91",e4="_modalFooter_1hk7m_98",t4="_modalSizeSm_1hk7m_104",r4="_modalSizeMd_1hk7m_108",n4="_modalSizeMdWide_1hk7m_112",a4="_modalSizeLg_1hk7m_116",s4="_modalSizeXl_1hk7m_120",o4="_modalSizeFull_1hk7m_124",i4="_settingsViewModal_1hk7m_129",c4="_unsavedOverlay_1hk7m_148",l4="_unsavedModal_1hk7m_153",d4="_unsavedHeader_1hk7m_159",u4="_unsavedTitle_1hk7m_164",p4="_unsavedContent_1hk7m_168",f4="_unsavedText_1hk7m_172",m4="_unsavedActions_1hk7m_177",Jt={overlay:VF,overlayHighZ:GF,modal:KF,draggableModal:qF,draggableHeader:YF,headerActions:ZF,modalContent:JF,form:QF,formActions:XF,modalFooter:e4,modalSizeSm:t4,modalSizeMd:r4,modalSizeMdWide:n4,modalSizeLg:a4,modalSizeXl:s4,modalSizeFull:o4,settingsViewModal:i4,unsavedOverlay:c4,unsavedModal:l4,unsavedHeader:d4,unsavedTitle:u4,unsavedContent:p4,unsavedText:f4,unsavedActions:m4},h4=90;function BC(e){const t=Date.parse(String(e||"").trim());return Number.isFinite(t)?new Date(t+h4*24*60*60*1e3).toISOString():null}function WC(e,t){const r=o.useRef(t);o.useLayoutEffect(()=>{r.current=t},[t]);const a=o.useMemo(()=>y0(e),[e]),s=o.useMemo(()=>a,[a.revision]);return o.useMemo(()=>({resolve:s.resolve,activate:i=>r.current(i)}),[s])}function $C(e,t,r){const[a,s]=o.useState(()=>new Set),i=o.useMemo(()=>new Map(e.map(h=>[h.taskId,h])),[e]),l=o.useMemo(()=>t.map(h=>i.get(h)).filter(h=>!!h),[t,i]),c=o.useMemo(()=>new Set(l.map(h=>h.id)),[l]);o.useEffect(()=>{s(h=>{const y=r?new Set(Array.from(h).filter(k=>c.has(k))):new Set;return y.size===h.size&&Array.from(y).every(k=>h.has(k))?h:y})},[r,c]);const d=o.useMemo(()=>l.filter(h=>a.has(h.id)),[l,a]),f=o.useCallback((h,y)=>{s(k=>{const v=new Set(k);return y?v.add(h):v.delete(h),v})},[]),p=o.useCallback(()=>{s(new Set(l.map(h=>h.id)))},[l]),g=o.useCallback(()=>s(new Set),[]);return{selectedIds:a,selectedRecords:d,matchingRecords:l,selectedCount:d.length,allMatchingSelected:l.length>0&&d.length===l.length,someMatchingSelected:d.length>0&&d.length<l.length,toggle:f,selectAllMatching:p,clear:g}}const $k="taskforce:preview-context-attachment";function Ef(e,t){const r=new CustomEvent($k,{detail:{attachment:e,...t},cancelable:!0});return!window.dispatchEvent(r)}async function FC(e,t){const r=t.fetcher||fetch,a=new URLSearchParams({workspaceId:t.workspaceId});if(e.kind==="image"){const c=await r(`/api/taskforce/annotated-attachments/images/${encodeURIComponent(e.token)}?${a.toString()}`,{credentials:"include",headers:t.headers});if(!c.ok)throw new Error("Image not found");const f=(await c.json()).target;if(!f?.assetId||!f.path)throw new Error("Image target is unavailable");return{path:f.path,assetId:f.assetId,displayName:f.displayName,referenceNumber:e.referenceNumber,referenceLabel:f.imageReferenceLabel||e.token,linkRole:"image"}}const s=await r(`/api/taskforce/documents?${a.toString()}`,{credentials:"include",headers:t.headers});if(!s.ok)throw new Error("Document list unavailable");const l=(await s.json()).documents?.find(c=>c.referenceNumber===e.referenceNumber||String(c.referenceLabel||"").toUpperCase()===e.token);if(!l?.apiUrl)throw new Error("Document not found");return{path:l.apiUrl,fsPath:l.fsPath,assetId:l.assetId,displayName:l.title,originalFilename:l.originalFilename||void 0,referenceNumber:e.referenceNumber,referenceLabel:l.referenceLabel||e.token,linkRole:"reference"}}const fi={workspaceId:"workspaceId",task:"task",activity:"activity",comment:"comment",initiative:"initiative",workstream:"workstream",image:"image",document:"document"};function g4(e){const t=String(e||"").trim();if(!t)return null;try{const r=new URL(t);return r.protocol!=="http:"&&r.protocol!=="https:"?null:r.origin}catch{return null}}function y4(e){const t=g4(e.applicationBaseUrl),r=String(e.workspaceId).trim(),a=String(e.id||"").trim();if(!t||!r||!a)return null;const s=new URL("/",t);s.searchParams.set(fi.workspaceId,r),s.searchParams.set(fi[e.target],a);const i=String(e.activityId||"").trim();return e.target==="task"&&i&&s.searchParams.set(fi.activity,i),s.toString()}function k4(e){const t=e.charAt(0).toUpperCase()+e.slice(1).toLowerCase(),r={Category:"Categories",Priority:"Priorities",Status:"Statuses"};return r[t]?r[t]:`${e}s`}function Gl({label:e,options:t,selected:r,onChange:a,variant:s="label",containerStyle:i,renderOptionContent:l,searchable:c=!1,searchPlaceholder:d="Search options...",noResultsText:f="No matching options."}){const[p,g]=o.useState(!1),[h,y]=o.useState(""),k=o.useRef(null),v=o.useRef(null),C=o.useRef(null),S=c&&h.trim()?t.filter(E=>E.label.toLocaleLowerCase().includes(h.trim().toLocaleLowerCase())):t;o.useEffect(()=>{const E=K=>{k.current&&!k.current.contains(K.target)&&g(!1)};return document.addEventListener("mousedown",E),()=>document.removeEventListener("mousedown",E)},[]),o.useEffect(()=>{p&&c&&C.current?.focus()},[p,c]);const w=E=>{r.includes(E)?a(r.filter(K=>K!==E)):a([...r,E])},_=t.length>0&&t.every(E=>{const K=s==="label"?E.label:E.value;return r.includes(K)}),M=!t.some(E=>{const K=s==="label"?E.label:E.value;return r.includes(K)}),R=()=>{a(_?[]:t.map(E=>s==="label"?E.label:E.value))},P=t.filter(E=>{const K=s==="label"?E.label:E.value;return r.includes(K)}).length,b=k4(e),$=_?`All ${b}`:M?`No ${b}`:P===1?`1 ${e}`:`${P} ${b}`,I=()=>{y(""),g(E=>!E)};return n.jsxs("div",{className:x.filterContainer,ref:k,style:i,children:[n.jsxs("button",{ref:v,type:"button",className:`${x.filterButton} ${_?"":x.filterActive}`,onClick:I,title:`Filter by ${e}`,"aria-expanded":p,children:[n.jsx("span",{children:$}),n.jsx(dd,{size:14,style:{transform:p?"rotate(180deg)":"none",transition:"transform 0.2s",opacity:.5}})]}),p&&n.jsxs("div",{className:`${x.filterDropdown} ${x.appScrollbar} tf-scrollbar`,onKeyDown:E=>{E.key==="Escape"&&(E.preventDefault(),g(!1),v.current?.focus())},children:[c?n.jsxs("div",{className:x.filterSearch,children:[n.jsx(lg,{size:14,className:x.filterSearchIcon,"aria-hidden":"true"}),n.jsx("input",{ref:C,type:"search",role:"searchbox",className:`tf-field-shell ${x.filterSearchInput}`,value:h,placeholder:d,"aria-label":d,onChange:E=>y(E.target.value)})]}):null,n.jsxs("label",{className:x.filterOption,children:[n.jsx("input",{type:"checkbox",checked:_,onChange:R}),n.jsx("span",{style:{fontWeight:600},children:"Toggle All"})]}),n.jsx("div",{className:x.filterDivider}),S.map(E=>{const K=s==="label"?E.label:E.value,U=r.includes(K);return n.jsxs("label",{className:x.filterOption,children:[n.jsx("input",{type:"checkbox",checked:U,onChange:()=>w(K)}),l?l(E):n.jsx("span",{children:E.label})]},E.value)}),S.length===0?n.jsx("div",{className:x.filterEmpty,role:"status",children:f}):null]})]})}const v4="_taskItem_127l4_1",w4="_compressed_127l4_25",b4="_taskHeader_127l4_30",S4="_taskReferenceCluster_127l4_35",A4="_taskMeta_127l4_39",C4="_taskTitle_127l4_45",_4="_taskItemRecentlyChanged_127l4_75",I4="_assigneeAvatarShared_127l4_115",T4="_assigneePicker_127l4_128",x4="_inProgress_127l4_188",R4="_onHold_127l4_189",P4="_readyForReview_127l4_190",E4="_completed_127l4_191",N4="_cancelled_127l4_204",j4="_readOnly_127l4_215",M4="_archived_127l4_224",D4="_taskContent_127l4_234",L4="_kanbanCardOverlay_127l4_243",O4="_deletedExpiry_127l4_264",B4="_taskReferenceDivider_127l4_289",W4="_taskReferenceSegment_127l4_296",$4="_taskActions_127l4_303",F4="_taskMetaCompact_127l4_328",U4="_taskMetaRow_127l4_335",z4="_taskMetaBadgeGroup_127l4_345",H4="_taskMetaIdentityGroup_127l4_358",V4="_taskDescription_127l4_366",G4="_taskLatestComment_127l4_375",K4="_taskLatestCommentHeader_127l4_389",q4="_taskCommentCount_127l4_406",Y4="_taskLatestCommentText_127l4_416",Z4="_taskMetaCategory_127l4_426",J4="_taskMetaType_127l4_432",Q4="_taskMetaPriority_127l4_438",X4="_taskComplexityLabel_127l4_442",eU="_taskCancellationReason_127l4_447",tU="_archiveBadge_127l4_600",rU="_attachmentThumbnails_127l4_605",nU="_attachmentImageRow_127l4_612",aU="_attachmentDocumentList_127l4_619",sU="_attachmentThumbnail_127l4_605",oU="_contextDocThumb_127l4_654",iU="_contextDocMain_127l4_680",cU="_contextDocText_127l4_687",lU="_contextDocIcon_127l4_695",dU="_contextDocName_127l4_706",uU="_contextDocType_127l4_716",pU="_taskSpecialists_127l4_728",fU="_taxonomiesList_127l4_737",mU="_selected_127l4_798",hU="_selectionControl_127l4_803",ar={taskItem:v4,compressed:w4,taskHeader:b4,taskReferenceCluster:S4,taskMeta:A4,taskTitle:C4,taskItemRecentlyChanged:_4,assigneeAvatarShared:I4,assigneePicker:T4,inProgress:x4,onHold:R4,readyForReview:P4,completed:E4,cancelled:N4,readOnly:j4,archived:M4,taskContent:D4,kanbanCardOverlay:L4,deletedExpiry:O4,taskReferenceDivider:B4,taskReferenceSegment:W4,taskActions:$4,taskMetaCompact:F4,taskMetaRow:U4,taskMetaBadgeGroup:z4,taskMetaIdentityGroup:H4,taskDescription:V4,taskLatestComment:G4,taskLatestCommentHeader:K4,taskCommentCount:q4,taskLatestCommentText:Y4,taskMetaCategory:Z4,taskMetaType:J4,taskMetaPriority:Q4,taskComplexityLabel:X4,taskCancellationReason:eU,archiveBadge:tU,attachmentThumbnails:rU,attachmentImageRow:nU,attachmentDocumentList:aU,attachmentThumbnail:sU,contextDocThumb:oU,contextDocMain:iU,contextDocText:cU,contextDocIcon:lU,contextDocName:dU,contextDocType:uU,taskSpecialists:pU,taxonomiesList:fU,selected:mU,selectionControl:hU};function gU(e){return function(t){return zT(t,e)}}const yU="I-",kU=new RegExp("(?<![\\w-])(I-\\d+)(?![\\w-])","gi");function Nf(e){return Of(yU,e)}const vU="_prose_1rd59_1",wU="_taskReference_1rd59_56",bU="_tableScroll_1rd59_72",SU="_blockScroll_1rd59_99",AU="_compactCodePreview_1rd59_115",CU="_taskList_1rd59_194",_U="_taskListItem_1rd59_198",IU="_taskCheckbox_1rd59_202",TU="_compact_1rd59_115",xU="_compactHeading_1rd59_231",RU="_codeLanguage_1rd59_262",PU="_contentIndicator_1rd59_271",EU="_detail_1rd59_277",NU="_conversation_1rd59_300",jU="_conversationHeading_1rd59_313",MU="_document_1rd59_321",Ga={prose:vU,taskReference:wU,tableScroll:bU,blockScroll:SU,compactCodePreview:AU,taskList:CU,taskListItem:_U,taskCheckbox:IU,compact:TU,compactHeading:xU,codeLanguage:RU,contentIndicator:PU,detail:EU,conversation:NU,conversationHeading:jU,document:MU};function DU(e){const t=e.trim();if(!t)return"";if(/^(?:#|\/|\.\/|\.\.\/)/.test(t))return t;const r=t.match(/^([a-z][a-z0-9+.-]*):/i)?.[1]?.toLowerCase();return r?r==="http"||r==="https"||r==="mailto"?t:"":t}function Yb(e){return/^(?:https?:)?\/\//i.test(String(e||""))}function LU(e){return String(e||"").match(/(?:^|\s)language-([\w-]+)/)?.[1]||""}const OU=({children:e,variant:t,className:r,taskReferences:a,imageReferences:s,documentOverrides:i})=>{if(!e)return null;if(i&&t!=="document")throw new Error("documentOverrides are only supported by the document Markdown variant.");const l=g=>{if(typeof g=="string"){const k=(C,S,w,_)=>{const M=Array.from(C.matchAll(S));if(!M.length)return[C];const R=[];let P=0;return M.forEach((b,$)=>{const I=b[1],E=b.index??-1;if(E<P)return;E>P&&R.push(C.slice(P,E));const K=w(I);R.push(K?_(K,I,`${I}-${E}-${$}`):I),P=E+I.length}),P<C.length&&R.push(C.slice(P)),R};let v=[g];if(a&&(v=v.flatMap(C=>typeof C=="string"?k(C,h0,a.resolve,(S,w,_)=>n.jsx("button",{type:"button",className:Ga.taskReference,onClick:M=>{M.preventDefault(),M.stopPropagation(),a.activate(S)},children:w},`task-${_}`)):[C])),s&&(v=v.flatMap(C=>typeof C=="string"?k(C,kU,s.resolve,(S,w,_)=>n.jsx("button",{type:"button",className:Ga.taskReference,onClick:M=>{M.preventDefault(),M.stopPropagation(),s.activate(S)},children:w},`image-${_}`)):[C])),a?.entityReferences){const C=a.entityReferences;v=v.flatMap(S=>typeof S=="string"?k(S,u0,C.resolve,(w,_,M)=>n.jsx("button",{type:"button",className:Ga.taskReference,title:`Open ${w.kind} ${w.token}`,onClick:R=>{R.preventDefault(),R.stopPropagation(),C.activate(w)},children:_},`entity-${M}`)):[S])}return v.length===1?v[0]:v}if(Array.isArray(g))return g.map(l);if(!Q.isValidElement(g))return g;const h=g.props,y=typeof g.type=="string"?g.type:h.node?.tagName||"";return y==="a"||y==="button"||y==="code"||y==="pre"||y==="p"||h.children===void 0?g:Q.cloneElement(g,void 0,Q.Children.map(h.children,l))},c=(g,h)=>{const y=l(h);return t==="compact"?n.jsx("div",{className:Ga.compactHeading,children:y}):t==="conversation"?n.jsx("h3",{className:Ga.conversationHeading,children:y}):Q.createElement(`h${g}`,void 0,y)},d={h1:({children:g})=>c(1,g),h2:({children:g})=>c(2,g),h3:({children:g})=>c(3,g),h4:({children:g})=>c(4,g),h5:({children:g})=>c(5,g),h6:({children:g})=>c(6,g),p:({children:g})=>n.jsx("p",{children:l(g)}),ul:({children:g,className:h,node:y,...k})=>n.jsx("ul",{...k,className:`${h||""} ${String(h||"").includes("contains-task-list")?Ga.taskList:""}`.trim(),children:g}),ol:({children:g,className:h,node:y,...k})=>n.jsx("ol",{...k,className:`${h||""} ${String(h||"").includes("contains-task-list")?Ga.taskList:""}`.trim(),children:g}),li:({children:g,className:h,node:y,...k})=>{const v=String(h||"").includes("task-list-item");return n.jsx("li",{...k,className:`${h||""} ${v?Ga.taskListItem:""}`.trim(),children:l(g)})},input:({type:g,checked:h,node:y,...k})=>g!=="checkbox"?n.jsx("input",{type:g,checked:h,readOnly:!0,...k}):n.jsx("input",{...k,type:"checkbox",checked:!!h,readOnly:!0,className:Ga.taskCheckbox}),a:({href:g,children:h,node:y,...k})=>{if(!g)return n.jsx("span",{children:h});const v=Yb(g);return n.jsx("a",{...k,href:g,...v?{target:"_blank",rel:"noopener noreferrer"}:{},onClick:C=>C.stopPropagation(),children:h})},strong:({children:g})=>n.jsx("strong",{children:g}),em:({children:g})=>n.jsx("em",{children:g}),code:({children:g,className:h,node:y,...k})=>n.jsx("code",{className:h,...k,children:g}),pre:({children:g})=>{const h=Q.Children.toArray(g).find(Q.isValidElement),y=LU(h?.props.className);return t==="compact"?n.jsxs("div",{className:Ga.compactCodePreview,children:[y?n.jsx("span",{className:Ga.codeLanguage,children:y}):null,n.jsx("pre",{children:g})]}):n.jsx("div",{className:Ga.blockScroll,children:n.jsx("pre",{children:g})})},blockquote:({children:g})=>n.jsx("blockquote",{children:g}),table:({children:g,node:h,...y})=>t==="compact"?n.jsx("span",{className:Ga.contentIndicator,children:"[Table]"}):n.jsx("div",{className:Ga.tableScroll,role:"region","aria-label":"Scrollable table",tabIndex:0,children:n.jsx("table",{...y,children:g})}),img:({src:g,alt:h})=>{const y=String(h||"").trim();if(t==="compact"||t==="conversation"){if(!y)return null;const k=`[Image: ${y}]`;if(!g)return n.jsx("span",{className:Ga.contentIndicator,children:k});const v=Yb(g);return n.jsx("a",{href:g,className:Ga.contentIndicator,...v?{target:"_blank",rel:"noopener noreferrer"}:{},onClick:C=>C.stopPropagation(),children:k})}return n.jsx("img",{src:g,alt:y})},hr:()=>t==="compact"?null:n.jsx("hr",{})},f=t==="document"&&i?{...d,...i}:d,p=t==="document"?[Uw]:[Uw,VT];return n.jsx("div",{className:`${Ga.prose} ${Ga[t]} ${r||""}`.trim(),"data-markdown-surface":t,children:n.jsx(HT,{skipHtml:!0,remarkPlugins:p,rehypePlugins:[gU],urlTransform:DU,components:f,children:e})})},Sg=Q.memo(OU);function Fv({label:e,title:t,ariaLabel:r,copied:a=!1,disabled:s=!1,className:i="",onClick:l,children:c}){return n.jsx("button",{type:"button",className:`${x.referenceBadge} ${a?x.copiedReference:""} ${i}`.trim(),onClick:l,disabled:s,title:t,"aria-label":r,children:n.jsx("span",{className:x.referenceBadgeLabel,children:c??e})})}function Su({copied:e,disabled:t=!1,label:r,onClick:a,title:s="Copy task reference",ariaLabel:i,className:l="",provisional:c=!1}){return n.jsx(Fv,{copied:e,disabled:t,label:"",onClick:a,title:s,ariaLabel:i,className:`${c?x.provisionalReferenceBadge:""} ${l}`.trim(),children:r})}const BU=(e,t=10)=>{const r=Hh[e?.toLowerCase()]||{icon:"FileCode"},a=To[r.icon]||uT;return n.jsx(a,{size:t})},ch=(e,t)=>{if(!e)return null;const r=t.trim();if(!r)return e;const s=wg(r)?.match(/^(lt|t)-(\d+)$/),i=s?`${s[1]==="lt"?"l\\s*t":"t"}\\s*(?:-|\\s)?\\s*${s[2]}`:r.replace(/[.*+?^${}()|[\]\\]/g,"\\$&"),l=new RegExp(`^${i}$`,"i"),c=e.split(new RegExp(`(${i})`,"gi"));return n.jsx(n.Fragment,{children:c.map((d,f)=>l.test(d)?n.jsx("mark",{className:x.highlight,children:d},f):d)})};function jf(e){return e.trim().replace(/\\/g,"/")}function UC(e){return e.split("?")[0].split("#")[0]}function Ag(e){return typeof e=="string"?e:String(e.path||"").trim()}function zC(e){const r=UC(jf(e)).match(/\/api\/taskforce\/documents\/([^/]+)\/content$/i);if(!r?.[1])return null;try{return decodeURIComponent(r[1]).trim()||null}catch{return r[1].trim()||null}}function HC(e){if(!e.includes("/api/taskforce/context-link?path="))return null;try{const r=new URL(e,window.location.origin).searchParams.get("path");return r?jf(r):null}catch{return null}}function WU(e,t){const r=(t||(typeof e=="string"?"":e.fsPath||"")).trim();if(r)return jf(r);const a=Ag(e),s=HC(a);return s?jf(s):null}function $U(e,t){const r=String(typeof e=="string"?"":e.assetId||"").trim();if(r)return r;const a=Ag(e);return zC(a)}function VC(e,t){const r=Ag(e);return zC(r)?!0:[(t||(typeof e=="string"?"":e.fsPath||"")).trim(),typeof e=="string"?"":String(e.originalFilename||"").trim(),typeof e=="string"?"":String(e.displayName||"").trim(),typeof e=="string"?"":String(e.caption||"").trim(),HC(r)||"",r].some(s=>{if(!s)return!1;const i=UC(jf(s)).toLowerCase();return i.endsWith(".md")||i.endsWith(".markdown")})}function GC(e,t){const r=Ag(e),a=WU(e,t);if(!a||!VC(e,a))return!1;const s=$U(e),i=new CustomEvent("taskforce:open-markdown-document",{detail:{path:r,fsPath:a,...s?{assetId:s}:{},...typeof e!="string"&&e.taskId?{taskId:e.taskId}:{}},cancelable:!0});return!window.dispatchEvent(i)}function KC(e,t){return e?JSON.stringify([String(e.taskId||"").trim(),String(e.assetId||"").trim(),String(t||"").trim()]):""}function FU(e){const t=KC(e.currentTarget,e.currentSessionId);return!t||t===e.lastHydratedIdentity}function UU(e){return e.trim().replace(/\\/g,"/")}function qC(e){return typeof e=="string"?e:String(e.path||"").trim()}function zU(e){return/\.(png|jpe?g|webp|gif)(\?|#|$)/i.test(e)}function HU(e){return typeof e=="string"?UU(e).split("/").pop()||"Image attachment":String(e.caption||e.displayName||e.originalFilename||e.fsPath||e.path.split("/").pop()||"Image attachment").trim()}function YC(e,t){if(typeof e=="string")return!1;const r=String(e.assetId||"").trim(),a=qC(e);return!!(r&&a&&zU(a))}function ZC(e,t){if(!YC(e))return!1;const r=e,a=String(t?.taskId||r.taskId||"").trim(),s=String(t?.taskReferenceLabel||"").trim(),i=String(r.assetId||"").trim(),l=Nf(r),c=String(t?.sessionId||"").trim(),d=qC(e),f=new CustomEvent("taskforce:open-annotated-attachment",{detail:{...a?{taskId:a}:{},...s?{taskReferenceLabel:s}:{},assetId:i,...l?{imageReferenceLabel:l}:{},...c?{sessionId:c}:{},path:d,displayName:HU(e)},cancelable:!0});return!window.dispatchEvent(f)}function Zb(e,t){if(!e)return null;const r=String(e.taskId||"").trim(),a=String(e.assetId||"").trim(),s=String(e.path||"").trim(),i=String(e.displayName||"").trim()||"Image attachment";if(!a||!s)return null;const l=String(e.taskReferenceLabel||"").trim(),c=r?t.find(f=>f.id===r):void 0,d=r?l||hs(c)||r:void 0;return{...r?{taskId:r}:{},...d?{taskReferenceLabel:d}:{},assetId:a,imageReferenceLabel:String(e.imageReferenceLabel||"").trim()||void 0,sessionId:String(e.sessionId||"").trim()||void 0,path:s,displayName:i}}function qh(e){const t=String(e||"").trim().replace(/\\/g,"/");if(!t)return"";const r=t.split("/").filter(Boolean);return r[r.length-1]||""}function Uv(e){const t=String(e||"").trim(),r=t.lastIndexOf(".");return r<=0?{stem:t,ext:""}:{stem:t.slice(0,r),ext:t.slice(r)}}function JC(e,t){const r=String(e||"").trim(),a=String(t||"").trim();return r?a&&r.startsWith(`${a}-`)?r.slice(a.length+1):r.replace(/^asset-[a-z0-9-]+-/i,""):""}function VU(e){return String(e||"").replace(/-\d{13,}$/g,"").replace(/[_-]+/g," ").replace(/\s+/g," ").trim()}function Jb(e,t){const{stem:r,ext:a}=Uv(qh(e)),s=JC(r,t),i=VU(s||r);return i?`${i}${a}`:qh(e)||"Untitled document"}function Yy(e,t){const r=String(e||"").trim();if(!r)return!0;const a=qh(r),{stem:s}=Uv(a),i=String(t||"").trim();if(i&&s.toLowerCase()===i.toLowerCase())return!0;const l=JC(s,t);return l?l!==s:!0}function GU(e){const t=String(e.title||"").trim();if(t&&!Yy(t,e.assetId))return t;const r=String(e.logicalName||"").trim();if(r&&!Yy(r,e.assetId))return r;const a=String(e.displayName||"").trim();if(a&&!Yy(a,e.assetId))return a;const s=String(e.originalFilename||"").trim();if(s)return Jb(s,e.assetId);const i=String(e.fsPath||"").trim();return i?Jb(i,e.assetId):"Untitled document"}function KU(e){return GU(e)}function qU(e){const t=KU(e),r=String(e.originalFilename||e.fsPath||"").trim(),a=Uv(qh(r)).ext;return a?t.toLowerCase().endsWith(a.toLowerCase())?t:`${t}${a}`:t}const YU="_taxonomyDropdown_1k2p6_1",ZU="_taxonomyDropdownActive_1k2p6_6",JU="_taxonomyDropdownButton_1k2p6_11",QU="_taxonomyDropdownOpen_1k2p6_50",XU="_taxonomyDropdownButtonContent_1k2p6_56",ez="_taxonomyDropdownIcon_1k2p6_64",tz="_taxonomyDropdownLabel_1k2p6_72",rz="_taxonomyDropdownChevron_1k2p6_81",nz="_taxonomyDropdownChevronOpen_1k2p6_87",az="_taxonomyDropdownPanel_1k2p6_91",sz="_taxonomyDropdownOptions_1k2p6_111",oz="_taxonomyDropdownSearch_1k2p6_117",iz="_taxonomyDropdownSearchIcon_1k2p6_125",cz="_taxonomyDropdownSearchInput_1k2p6_134",lz="_taxonomyDropdownEmpty_1k2p6_148",dz="_taxonomyDropdownPanelPortal_1k2p6_155",uz="_taxonomyDropdownOption_1k2p6_111",pz="_taxonomyDropdownOptionHighlighted_1k2p6_205",fz="_taxonomyDropdownOptionSelected_1k2p6_211",ga={taxonomyDropdown:YU,taxonomyDropdownActive:ZU,taxonomyDropdownButton:JU,taxonomyDropdownOpen:QU,taxonomyDropdownButtonContent:XU,taxonomyDropdownIcon:ez,taxonomyDropdownLabel:tz,taxonomyDropdownChevron:rz,taxonomyDropdownChevronOpen:nz,taxonomyDropdownPanel:az,taxonomyDropdownOptions:sz,taxonomyDropdownSearch:oz,taxonomyDropdownSearchIcon:iz,taxonomyDropdownSearchInput:cz,taxonomyDropdownEmpty:lz,taxonomyDropdownPanelPortal:dz,taxonomyDropdownOption:uz,taxonomyDropdownOptionHighlighted:pz,taxonomyDropdownOptionSelected:fz};function Zy(e,t){const r=e||"var(--brand-primary)";return/^#[0-9a-f]{6}$/i.test(r)?`${r}${Math.round(t*255).toString(16).padStart(2,"0")}`:`color-mix(in srgb, ${r} ${Math.round(t*100)}%, transparent)`}function qo({value:e,options:t,onChange:r,placeholder:a="Select...",required:s=!1,disabled:i=!1,className:l="",ariaLabelledBy:c,ariaLabel:d,title:f,hideSelectedLabel:p=!1,hideChevron:g=!1,panelClassName:h="",portalPanel:y=!1,panelMinWidth:k,panelAlign:v="end",renderOptionContent:C,triggerContent:S,optionLabelColor:w,searchable:_=!1,searchPlaceholder:M="Search options...",noResultsText:R="No matching options."}){const[P,b]=o.useState(!1),[$,I]=o.useState(-1),[E,K]=o.useState({}),[U,L]=o.useState(),[D,ie]=o.useState(""),H=o.useRef(null),be=o.useRef(null),Z=o.useRef(null),me=o.useRef(null),Ve=o.useRef([]),Re=o.useRef(null),je=`taxonomy-listbox-${Q.useId().replace(/:/g,"")}`,ye=t.find(fe=>String(fe.value)===String(e)),ue=Q.useMemo(()=>{const fe=D.trim().toLocaleLowerCase();return!_||!fe?t:t.filter(ke=>ke.label.toLocaleLowerCase().includes(fe))},[t,D,_]);o.useEffect(()=>{if(!P)return;const fe=ke=>{const Y=ke.target,we=!!H.current?.contains(Y),q=!!Z.current?.contains(Y);!we&&!q&&(b(!1),I(-1))};return document.addEventListener("mousedown",fe),()=>document.removeEventListener("mousedown",fe)},[P]),o.useEffect(()=>{if(!P)I(-1);else{const fe=ue.findIndex(ke=>String(ke.value)===String(e));I(fe>=0?fe:ue.length>0?0:-1)}},[P,e,ue]),o.useEffect(()=>{P&&_&&Re.current?.focus()},[P,_]),o.useEffect(()=>{!P||$<0||Ve.current[$]?.scrollIntoView?.({block:"nearest"})},[$,P]),o.useEffect(()=>{if(!P||!y)return;const fe=we=>{const q=be.current;if(!q)return;const le=q.getBoundingClientRect(),$e=8,re=window.innerWidth,de=window.innerHeight,He=Math.max(0,re-$e*2);(we||me.current===null)&&(me.current=Math.min(Math.max(k||0,le.width),He));const ce=Math.min(me.current,He),pe=v==="start"?le.left:le.right-ce,xe=Math.min(Math.max($e,pe),Math.max($e,re-ce-$e)),N=Math.max(0,de-le.bottom-$e),X=Math.max(0,le.top-$e),Ae=Math.min(Z.current?.scrollHeight||280,280),Te=N>=Ae||N>=X,he=Te?N:X;K({position:"fixed",top:Te?le.bottom:void 0,bottom:Te?void 0:de-le.top,left:xe,width:ce,minWidth:ce,maxWidth:He,maxHeight:Math.min(Ae,he),zIndex:2e3})},ke=we=>{const q=we.target;q instanceof Node&&Z.current?.contains(q)||fe(!1)},Y=()=>fe(!0);return me.current=null,fe(!0),window.addEventListener("resize",Y),window.addEventListener("scroll",ke,!0),()=>{window.removeEventListener("resize",Y),window.removeEventListener("scroll",ke,!0),me.current=null}},[P,v,y,k]);const ve=()=>{if(_&&ie(""),y){const fe=H.current?.closest("[data-theme]");L(fe?.dataset.theme)}b(!0)},Pe=()=>{if(!i){if(P){b(!1);return}ve()}},Le=fe=>{r(fe.value),ie(""),b(!1),be.current?.focus()},se=fe=>{if(i)return;const ke=fe.currentTarget===Re.current;switch(fe.key){case"Enter":if(fe.preventDefault(),!P)ve();else if($>=0){const Y=ue[$];Y&&Le(Y)}break;case" ":if(ke)return;if(fe.preventDefault(),!P)ve();else if($>=0){const Y=ue[$];Y&&Le(Y)}break;case"Escape":fe.preventDefault(),b(!1),be.current?.focus();break;case"ArrowDown":fe.preventDefault(),P?ue.length===0?I(-1):I(Y=>Y<ue.length-1?Y+1:0):ve();break;case"ArrowUp":fe.preventDefault(),P?ue.length===0?I(-1):I(Y=>Y>0?Y-1:ue.length-1):ve();break;case"Home":if(ke)return;fe.preventDefault(),P&&I(ue.length>0?0:-1);break;case"End":if(ke)return;fe.preventDefault(),P&&I(ue.length>0?ue.length-1:-1);break;case"Tab":b(!1);break}},V=(fe,ke)=>{const Y=fe.icon&&To[fe.icon]?To[fe.icon]:ad,we=fe.color?Jn(fe.color):"var(--text-secondary)",q=ke?.hideLabel===!0;return n.jsxs(n.Fragment,{children:[n.jsx("span",{className:`taxonomyDropdownIcon ${ga.taxonomyDropdownIcon}`,style:{color:we},children:n.jsx(Y,{size:16})}),!q&&n.jsx("span",{className:`taxonomyDropdownLabel ${ga.taxonomyDropdownLabel}`,style:ke?.labelColor?{color:ke.labelColor}:void 0,children:fe.label})]})},W=(fe,ke)=>!ke?.hideLabel&&C?C(fe):V(fe,ke),z=P?n.jsxs("div",{ref:Z,id:`${je}-panel`,className:`taxonomyDropdownPanel ${ga.taxonomyDropdownPanel} ${y?ga.taxonomyDropdownPanelPortal:""} ${h}`,"data-theme":y?U:void 0,style:y?E:void 0,children:[_?n.jsxs("div",{className:ga.taxonomyDropdownSearch,children:[n.jsx(lg,{size:15,className:ga.taxonomyDropdownSearchIcon,"aria-hidden":"true"}),n.jsx("input",{ref:Re,type:"search",role:"searchbox",className:`tf-field-shell ${ga.taxonomyDropdownSearchInput}`,value:D,placeholder:M,"aria-label":M,"aria-controls":je,"aria-activedescendant":$>=0?`${je}-option-${$}`:void 0,onChange:fe=>ie(fe.target.value),onKeyDown:se})]}):null,n.jsx("div",{id:je,className:`tf-scrollbar tf-scrollbar--compact ${ga.taxonomyDropdownOptions}`,role:"listbox","aria-labelledby":c,"aria-label":d,children:ue.map((fe,ke)=>{const Y=String(fe.value)===String(e),we=ke===$;return n.jsx("div",{ref:q=>{Ve.current[ke]=q},id:`${je}-option-${ke}`,className:`taxonomyDropdownOption ${ga.taxonomyDropdownOption} ${Y?`taxonomyDropdownOptionSelected ${ga.taxonomyDropdownOptionSelected}`:""} ${we?`taxonomyDropdownOptionHighlighted ${ga.taxonomyDropdownOptionHighlighted}`:""}`,role:"option","aria-selected":Y,onClick:()=>Le(fe),onMouseEnter:()=>I(ke),style:(()=>{const q=fe.color,$e=Jn(q)||"var(--brand-primary)";return{"--option-color":$e,"--option-border":Zy($e,.18),"--option-bg":Zy($e,.06)}})(),children:W(fe,{labelColor:w})},String(fe.value))})}),ue.length===0?n.jsx("div",{className:ga.taxonomyDropdownEmpty,role:"status",children:R}):null]}):null;return n.jsxs("div",{ref:H,className:`taxonomyDropdown ${ga.taxonomyDropdown} ${P?`taxonomyDropdownActive ${ga.taxonomyDropdownActive}`:""} ${l}`,children:[n.jsxs("button",{ref:be,type:"button",className:`taxonomyDropdownButton ${ga.taxonomyDropdownButton} ${P?`taxonomyDropdownOpen ${ga.taxonomyDropdownOpen}`:""}`,onClick:Pe,onKeyDown:se,disabled:i,role:"combobox","aria-haspopup":"listbox","aria-expanded":P,"aria-controls":je,"aria-activedescendant":P&&$>=0?`${je}-option-${$}`:void 0,"aria-labelledby":c,"aria-label":d,title:f,style:(()=>{if(!ye)return{};const fe=ye.color,ke=Jn(fe);return{"--field-bg":Zy(ke,.06)}})(),children:[n.jsx("span",{className:`taxonomyDropdownButtonContent ${ga.taxonomyDropdownButtonContent}`,children:S??(ye?W(ye,{hideLabel:p}):n.jsxs(n.Fragment,{children:[n.jsx("span",{className:`taxonomyDropdownIcon ${ga.taxonomyDropdownIcon}`,children:n.jsx(ad,{size:16})}),n.jsx("span",{className:`taxonomyDropdownLabel ${ga.taxonomyDropdownLabel}`,children:a})]}))}),!g&&n.jsx(dd,{size:16,className:`taxonomyDropdownChevron ${ga.taxonomyDropdownChevron} ${P?`taxonomyDropdownChevronOpen ${ga.taxonomyDropdownChevronOpen}`:""}`})]}),y?z?yc.createPortal(z,document.body):null:z]})}function Yh({task:e,status:t,disabled:r=!1,actionDisabled:a,statusDisabled:s,compressed:i=!1,shortLabels:l=!1,showLabel:c=!0,onSetStatus:d,onStatusChange:f,onArchiveTask:p,onUnarchiveTask:g,archiveActionMode:h="auto"}){const y=e?.status||t||"task",v=h==="auto"?!!e&&(y==="done"||y==="cancelled")?"archive":"none":h,C=a??r,S=s??r,w=Ql.map(R=>({...R,label:(i||l)&&R.shortLabel||R.label})),_=Jn(Ql.find(R=>R.value===y)?.color)||"var(--text-secondary)",M={"--field-border":_,"--field-text":_,"--field-hover-border":_,"--field-focus-border":_,"--field-focus-ring":`color-mix(in srgb, ${_} 18%, transparent)`};return n.jsxs("div",{className:`${x.statusActionsGroup} ${i?x.statusActionsGroupCompact:""}`,children:[v==="archive"&&n.jsx("button",{type:"button",className:`${x.actionBtn} ${x.archiveTaskBtn}`,onClick:()=>e&&!C&&p?.(e),disabled:C,title:"Archive Now","aria-label":"Archive task",children:n.jsx(Xc,{size:i?12:16})}),v==="unarchive"&&n.jsx("button",{type:"button",className:`${x.actionBtn} ${x.archiveTaskBtn}`,onClick:()=>e&&!C&&g?.(e),disabled:C,title:"Unarchive task","aria-label":"Unarchive task",children:n.jsx(mi,{size:i?12:16})}),n.jsx("div",{className:`${x.statusSelectWrap} ${x.statusTaxonomyDropdownWrap}`,style:M,children:n.jsx(qo,{value:y,options:w,disabled:S||!e&&!f,ariaLabel:"Status",optionLabelColor:"var(--text-primary)",hideSelectedLabel:!c,hideChevron:!c,className:`${x.statusTaxonomyDropdown} ${i?x.statusTaxonomyDropdownCompact:""} ${c?"":x.statusTaxonomyDropdownIconOnly}`,panelClassName:c?"":x.statusTaxonomyDropdownIconOnlyPanel,portalPanel:!c,panelMinWidth:c?void 0:144,onChange:R=>{const P=R;if(e){d?.(e,P);return}f?.(P)}})})]})}function mz(e){return e==="taskId"?"Task":e==="title"?"Title":e==="description"?"Description":e==="assignee"?"Assigned to":e==="ownerId"?"Owner":e==="status"?"Status":e==="scheduledDate"?"Scheduled date":e==="dueDate"?"Due date":e==="workstreamId"?"Workstream":e==="initiativeId"?"Initiative":e}function hz(e){return e==="task"?"Task":e.replace(/[-_]+/g," ").replace(/\s+/g," ").trim().replace(/\b\w/g,t=>t.toUpperCase())}function ps(e,t,r){const a=r?.(t,e);if(typeof a=="string")return a;if(e==null||e==="")return"none";if(Array.isArray(e)){const s=e.map(i=>ps(i,t,r)).filter(Boolean);return s.length>0?s.join(", "):"none"}return typeof e=="object"?"updated":t==="status"?hz(String(e)):String(e)}function Qb(e){return Array.isArray(e)?e.map((t,r)=>{const a=t&&typeof t=="object"?t:{},s=Number(a.order);return{id:String(a.id||"").trim(),title:String(a.title||"").trim(),isCompleted:!!a.isCompleted,order:Number.isFinite(s)?s:r}}):[]}function gz(e){const t=Qb(e?.from),r=Qb(e?.to),a=new Map(t.map(l=>[l.id||l.title,l])),s=new Map(r.map(l=>[l.id||l.title,l]));for(const[l,c]of s.entries()){const d=a.get(l);if(!d)return c.title?`Checklist item added: ${c.title}`:"Checklist item added";if(d.isCompleted!==c.isCompleted)return c.title?c.isCompleted?`Checklist item completed: ${c.title}`:`Checklist item reopened: ${c.title}`:c.isCompleted?"Checklist item completed":"Checklist item reopened"}for(const[l,c]of a.entries())if(!s.has(l))return c.title?`Checklist item removed: ${c.title}`:"Checklist item removed";return t.length===r.length&&t.every(l=>s.has(l.id||l.title))&&t.some((c,d)=>{const f=r[d];return(c.id||c.title)!==(f?.id||f?.title)})?"Checklist reordered":"Checklist updated"}function zv(e){return e.split(/[?#]/,1)[0]||e}function Xb(e){const t=zv(e).replace(/\\/g,"/"),r=t.split("/").filter(Boolean);return r[r.length-1]||t}function yz(e){return/\.(png|jpe?g|webp|gif)$/i.test(zv(e))}function kz(e){return e.includes("/api/taskforce/documents/")?!0:/\.(pdf|txt|md|markdown|csv|json|docx?|html?|js|jsx|ts|tsx|css|py|java|go|rs|sh)$/i.test(zv(e))}function eS(e){return Array.isArray(e)?e.flatMap((t,r)=>{const a=t&&typeof t=="object"?t:null,s=typeof t=="string"?t:String(a?.path||"").trim(),i=String(a?.fsPath||"").trim(),l=String(a?.assetId||"").trim(),c=String(a?.referenceLabel||"").trim(),d=[a?.displayName,a?.originalFilename,a?.caption,c,i?Xb(i):"",s?Xb(s):""].map(h=>String(h||"").trim()).find(Boolean)||`Attachment ${r+1}`,f=l||i||s||`${d}:${r}`,p=[s,i,String(a?.originalFilename||"").trim(),String(a?.displayName||"").trim(),c].filter(Boolean),g=p.some(h=>yz(h))?"image":c.startsWith("D-")||p.some(h=>kz(h))?"document":"attachment";return[{key:f,label:d,kind:g}]}):[]}function vz(e,t){return t===1?e:e==="image"?"images":e==="document"?"documents":"attachments"}function lh(e){if(e.length===0)return"attachments";const t=e.reduce((a,s)=>(a[s.kind]+=1,a),{image:0,document:0,attachment:0}),r=Object.entries(t).filter(([,a])=>a>0).map(([a,s])=>s===1?a:`${s} ${vz(a,s)}`);return r.length===1?r[0]:e.length<=3&&r.length<=2?r.join(" and "):`${e.length} attachments`}function qc(e){return e&&e.charAt(0).toUpperCase()+e.slice(1)}function Jy(e){return Array.isArray(e)?e.map(t=>typeof t=="string"?t.trim():"").filter(Boolean):[]}function wz(e){if(Array.isArray(e.from)||Array.isArray(e.to)||!["fromCount","toCount","added","removed","updated"].some(c=>Object.prototype.hasOwnProperty.call(e,c)))return null;const r=Jy(e.added),a=Jy(e.removed),s=Jy(e.updated);if(r.length===1&&a.length===0&&s.length===0)return`Attachment attached: ${r[0]}`;if(a.length===1&&r.length===0&&s.length===0)return`Attachment removed: ${a[0]}`;if(r.length===1&&a.length===1&&s.length===0)return`Attachment replaced: ${a[0]} -> ${r[0]}`;if(s.length===1&&r.length===0&&a.length===0)return`Attachment updated: ${s[0]}`;if(s.length>0&&r.length===0&&a.length===0)return`${s.length} attachments updated`;if(r.length>0||a.length>0){const c=[...r.length>0?[`${r.length} ${r.length===1?"attachment":"attachments"} attached`]:[],...a.length>0?[`${a.length} ${a.length===1?"attachment":"attachments"} removed`]:[],...s.length>0?[`${s.length} ${s.length===1?"attachment":"attachments"} updated`]:[]];return qc(c.join(", "))}const i=Number(e.fromCount),l=Number(e.toCount);if(Number.isSafeInteger(i)&&i>=0&&Number.isSafeInteger(l)&&l>=0){const c=l-i;if(c===1)return"Attachment attached";if(c>1)return`${c} attachments attached`;if(c===-1)return"Attachment removed";if(c<-1)return`${Math.abs(c)} attachments removed`}return"Attachment details updated"}function bz(e){const t=e?wz(e):null;if(t)return t;const r=eS(e?.from),a=eS(e?.to),s=new Map(r.map(f=>[f.key,f])),i=new Map(a.map(f=>[f.key,f])),l=a.filter(f=>!s.has(f.key)),c=r.filter(f=>!i.has(f.key));if(l.length===1&&c.length===0)return`${qc(l[0].kind)} attached: ${l[0].label}`;if(c.length===1&&l.length===0)return`${qc(c[0].kind)} removed: ${c[0].label}`;if(l.length>0&&c.length===0)return`${qc(lh(l))} attached`;if(c.length>0&&l.length===0)return`${qc(lh(c))} removed`;if(l.length===1&&c.length===1)return`${qc(l[0].kind)} replaced: ${c[0].label} -> ${l[0].label}`;if(l.length>0||c.length>0)return`${qc(lh(l))} attached, ${lh(c)} removed`;const d=a.filter(f=>{const p=s.get(f.key);return p&&p.label!==f.label});if(d.length===1&&r.length===1&&a.length===1){const f=s.get(d[0].key);return`${qc(d[0].kind)} renamed: ${f?.label||"Attachment"} -> ${d[0].label}`}return"Attachment details updated"}function Zh(e,t,r){if(e==="checklistItems")return gz(t);if(e==="attachments")return bz(t);const a=mz(e);if(e==="title")return`${a}: updated`;if(e==="description"){const s=ps(t?.from,e,r)!=="none",i=ps(t?.to,e,r)!=="none";return!s&&i?`${a}: added`:s&&!i?`${a}: cleared`:`${a}: updated`}return`${a}: ${ps(t?.from,e,r)} -> ${ps(t?.to,e,r)}`}function QC(e,t){const r=e.details?.changes||{},a=Object.keys(r);if(e.action==="task-created")return"Task created";if(e.action==="task-comment-added")return"Comment added";if(e.action==="task-archived")return"Task marked done";if(e.action==="task-cancelled")return"Task cancelled";if(e.action==="task-unarchived")return"Task restored";if(e.action==="task-status-changed"&&r.status)return`Status changed: ${ps(r.status.from,"status",t)} -> ${ps(r.status.to,"status",t)}`;if(e.action==="task-schedule-changed")return r.scheduledDate?`Scheduled date changed: ${ps(r.scheduledDate.from,"scheduledDate",t)} -> ${ps(r.scheduledDate.to,"scheduledDate",t)}`:r.dueDate?`Due date changed: ${ps(r.dueDate.from,"dueDate",t)} -> ${ps(r.dueDate.to,"dueDate",t)}`:"Schedule updated";if(e.action==="task-relationship-changed"&&r.workstreamId)return`Workstream changed: ${ps(r.workstreamId.from,"workstreamId",t)} -> ${ps(r.workstreamId.to,"workstreamId",t)}`;if(e.action==="task-relationship-changed"&&r.initiativeId)return`Initiative changed: ${ps(r.initiativeId.from,"initiativeId",t)} -> ${ps(r.initiativeId.to,"initiativeId",t)}`;if(e.action==="task-attachments-changed")return r.attachments?Zh("attachments",r.attachments,t):"Attachments updated";if(a.length===1){const s=a[0],i=r[s];return Zh(s,i,t)}return a.length>1?`${a.length} fields updated`:"Task updated"}function EX(e,t){if(e.taskId||e.entityType==="task")return QC(e,t);const r=e.details?.changes||{},a=Object.keys(r),s=e.entityType==="initiative"?"Initiative":"Workstream",i=typeof e.details?.taskTitle=="string"&&e.details.taskTitle.trim().length>0?e.details.taskTitle.trim():null;return e.action==="initiative-created"?"Initiative created":e.action==="initiative-archived"?"Initiative archived":e.action==="initiative-unarchived"?"Initiative restored":e.action==="workstream-created"?"Workstream created":e.action==="workstream-archived"?"Workstream archived":e.action==="workstream-unarchived"?"Workstream restored":e.action==="workstream-task-added"?i?`Task added: ${i}`:"Task added":e.action==="workstream-task-removed"?i?`Task removed: ${i}`:"Task removed":e.action==="workstream-relationship-changed"&&r.initiativeId?`Initiative changed: ${ps(r.initiativeId.from,"initiativeId",t)} -> ${ps(r.initiativeId.to,"initiativeId",t)}`:(e.action==="initiative-attachments-changed"||e.action==="workstream-attachments-changed")&&r.attachments?Zh("attachments",r.attachments,t):a.length===1?Zh(a[0],r[a[0]],t):a.length>1?`${a.length} fields updated`:e.action==="initiative-updated"||e.action==="workstream-updated"?`${s} updated`:`${s} activity updated`}function Jh(e){const t=Date.parse(String(e.timestamp||""));return Number.isFinite(t)?t:null}function Sz(e){const t=e.details?.changes||{},r=Object.keys(t);if(e.action==="task-status-changed"&&t.status)return"status";if(e.action==="task-schedule-changed"){if(t.scheduledDate)return"scheduledDate";if(t.dueDate)return"dueDate"}if(e.action==="task-relationship-changed"){if(t.workstreamId)return"workstreamId";if(t.initiativeId)return"initiativeId"}return e.action==="task-attachments-changed"&&t.attachments?"attachments":r.length===1?r[0]:null}function NX(e){if(e.taskId||e.entityType==="task")return Sz(e);const t=e.details?.changes||{},r=Object.keys(t);return(e.action==="workstream-task-added"||e.action==="workstream-task-removed")&&e.details?.taskId?"taskId":e.action==="workstream-relationship-changed"&&t.initiativeId?"initiativeId":(e.action==="initiative-attachments-changed"||e.action==="workstream-attachments-changed")&&t.attachments?"attachments":r.length===1?r[0]:null}function XC(e){const t=new Map,r=new Set,a=s=>{if(s.type==="event"&&s.event.action==="task-comment-added"||s.type==="event"&&s.event.action==="task-updated"&&s.event.details?.saveSource==="autosave"&&Object.keys(s.event.details?.changes||{}).length===0)return;const i=s.type==="comment"?`comment:${String(s.comment.id||s.id).replace(/^comment:/,"")}`:`event:${String(s.event.id||s.id).replace(/^event:/,"")}`;t.set(i,{...s,id:i}),s.type==="comment"&&r.add(String(s.comment.id||s.id).replace(/^comment:/,""))};return Array.isArray(e.activity)&&e.activity.forEach(a),Array.isArray(e.comments)&&e.comments.forEach(s=>{const i=String(s.id||"").trim();!i||r.has(i)||a({id:`comment:${i}`,type:"comment",timestamp:s.timestamp,comment:s})}),[...t.values()].sort((s,i)=>{const l=Jh(s),c=Jh(i);return l!==null&&c!==null&&l!==c?l-c:l!==null&&c===null?-1:l===null&&c!==null?1:String(s.id||"").localeCompare(String(i.id||""))})}function Hv(e){return XC(e)}function Az(e){const t=Hv(e);return t.length===0?null:[...t].sort((r,a)=>{const s=Jh(r),i=Jh(a);return s!==null&&i!==null&&s!==i?i-s:s!==null&&i===null?-1:s===null&&i!==null?1:String(a.id||"").localeCompare(String(r.id||""))})[0]||null}function Cz(e,t){return e?e.type==="comment"?e.comment.text:QC(e.event,t):""}const e_="/taskforce/assets/antigravity-DRKQga2U.png",t_="data:image/svg+xml,%3csvg%20xmlns='http://www.w3.org/2000/svg'%20xmlns:xlink='http://www.w3.org/1999/xlink'%20viewBox='0%200%202406%202406'%3e%3cpath%20d='M1%20578.4C1%20259.5%20259.5%201%20578.4%201h1249.1c319%200%20577.5%20258.5%20577.5%20577.4V2406H578.4C259.5%202406%201%202147.5%201%201828.6V578.4z'%20fill='%2374aa9c'/%3e%3cpath%20id='a'%20d='M1107.3%20299.1c-197.999%200-373.9%20127.3-435.2%20315.3L650%20743.5v427.9c0%2021.4%2011%2040.4%2029.4%2051.4l344.5%20198.515V833.3h.1v-27.9L1372.7%20604c33.715-19.52%2070.44-32.857%20108.47-39.828L1447.6%20450.3C1361%20353.5%201237.1%20298.5%201107.3%20299.1zm0%20117.5-.6.6c79.699%200%20156.3%2027.5%20217.6%2078.4-2.5%201.2-7.4%204.3-11%206.1L952.8%20709.3c-18.4%2010.4-29.4%2030-29.4%2051.4V1248l-155.1-89.4V755.8c-.1-187.099%20151.601-338.9%20339-339.2z'%20fill='%23fff'/%3e%3cuse%20xlink:href='%23a'%20transform='rotate(60%201203%201203)'/%3e%3cuse%20xlink:href='%23a'%20transform='rotate(120%201203%201203)'/%3e%3cuse%20xlink:href='%23a'%20transform='rotate(180%201203%201203)'/%3e%3cuse%20xlink:href='%23a'%20transform='rotate(240%201203%201203)'/%3e%3cuse%20xlink:href='%23a'%20transform='rotate(300%201203%201203)'/%3e%3c/svg%3e",r_="data:image/svg+xml,%3csvg%20height='1em'%20style='flex:none;line-height:1'%20viewBox='0%200%2024%2024'%20width='1em'%20xmlns='http://www.w3.org/2000/svg'%3e%3ctitle%3eClaude%3c/title%3e%3cpath%20d='M4.709%2015.955l4.72-2.647.08-.23-.08-.128H9.2l-.79-.048-2.698-.073-2.339-.097-2.266-.122-.571-.121L0%2011.784l.055-.352.48-.321.686.06%201.52.103%202.278.158%201.652.097%202.449.255h.389l.055-.157-.134-.098-.103-.097-2.358-1.596-2.552-1.688-1.336-.972-.724-.491-.364-.462-.158-1.008.656-.722.881.06.225.061.893.686%201.908%201.476%202.491%201.833.365.304.145-.103.019-.073-.164-.274-1.355-2.446-1.446-2.49-.644-1.032-.17-.619a2.97%202.97%200%2001-.104-.729L6.283.134%206.696%200l.996.134.42.364.62%201.414%201.002%202.229%201.555%203.03.456.898.243.832.091.255h.158V9.01l.128-1.706.237-2.095.23-2.695.08-.76.376-.91.747-.492.584.28.48.685-.067.444-.286%201.851-.559%202.903-.364%201.942h.212l.243-.242.985-1.306%201.652-2.064.73-.82.85-.904.547-.431h1.033l.76%201.129-.34%201.166-1.064%201.347-.881%201.142-1.264%201.7-.79%201.36.073.11.188-.02%202.856-.606%201.543-.28%201.841-.315.833.388.091.395-.328.807-1.969.486-2.309.462-3.439.813-.042.03.049.061%201.549.146.662.036h1.622l3.02.225.79.522.474.638-.079.485-1.215.62-1.64-.389-3.829-.91-1.312-.329h-.182v.11l1.093%201.068%202.006%201.81%202.509%202.33.127.578-.322.455-.34-.049-2.205-1.657-.851-.747-1.926-1.62h-.128v.17l.444.649%202.345%203.521.122%201.08-.17.353-.608.213-.668-.122-1.374-1.925-1.415-2.167-1.143-1.943-.14.08-.674%207.254-.316.37-.729.28-.607-.461-.322-.747.322-1.476.389-1.924.315-1.53.286-1.9.17-.632-.012-.042-.14.018-1.434%201.967-2.18%202.945-1.726%201.845-.414.164-.717-.37.067-.662.401-.589%202.388-3.036%201.44-1.882.93-1.086-.006-.158h-.055L4.132%2018.56l-1.13.146-.487-.456.061-.746.231-.243%201.908-1.312-.006.006z'%20fill='%23D97757'%20fill-rule='nonzero'%3e%3c/path%3e%3c/svg%3e",n_="data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCAyNTYgMjU2IiByb2xlPSJpbWciIGFyaWEtbGFiZWxsZWRieT0idGl0bGUiPgogIDx0aXRsZSBpZD0idGl0bGUiPkNsYXVkZSBDb2RlIENsYXcnZCBtYXNjb3Q8L3RpdGxlPgogIDxyZWN0IHdpZHRoPSIyNTYiIGhlaWdodD0iMjU2IiBmaWxsPSIjZDk3NzU3Ii8+CiAgPGcKICAgIGZpbGw9IiNmN2YzZWUiCiAgICBmb250LWZhbWlseT0iTWVubG8sIE1vbmFjbywgQ29uc29sYXMsICdMaWJlcmF0aW9uIE1vbm8nLCBtb25vc3BhY2UiCiAgICBmb250LXNpemU9IjM1IgogICAgZm9udC13ZWlnaHQ9IjcwMCIKICAgIHRleHQtYW5jaG9yPSJtaWRkbGUiCiAgPgogICAgPHRleHQgeD0iMTI4IiB5PSIxMDIiPiYjeDI1OTA7JiN4MjU5QjsmI3gyNTg4OyYjeDI1ODg7JiN4MjU4ODsmI3gyNTlDOyYjeDI1OEM7PC90ZXh0PgogICAgPHRleHQgeD0iMTI4IiB5PSIxMzciPiYjeDI1OUQ7JiN4MjU5QzsmI3gyNTg4OyYjeDI1ODg7JiN4MjU4ODsmI3gyNTg4OyYjeDI1ODg7JiN4MjU5QjsmI3gyNTk4OzwvdGV4dD4KICAgIDx0ZXh0IHg9IjEyOCIgeT0iMTcyIiB4bWw6c3BhY2U9InByZXNlcnZlIj4gICYjeDI1OTg7JiN4MjU5ODsgJiN4MjU5RDsmI3gyNTlEOyAgPC90ZXh0PgogIDwvZz4KPC9zdmc+Cg==",a_="data:image/svg+xml,%3c?xml%20version='1.0'%20encoding='UTF-8'?%3e%3csvg%20width='92px'%20height='96px'%20viewBox='0%200%2092%2096'%20version='1.1'%20xmlns='http://www.w3.org/2000/svg'%20xmlns:xlink='http://www.w3.org/1999/xlink'%3e%3ctitle%3eGroup%20Copy%202%3c/title%3e%3cg%20id='Page-1'%20stroke='none'%20stroke-width='1'%20fill='none'%20fill-rule='evenodd'%3e%3cg%20id='icon-copy'%20transform='translate(-34,%20-40)'%20fill='%2324292F'%3e%3cg%20id='Group-Copy-2'%20transform='translate(34,%2040.5)'%3e%3cg%20id='Group-3-Copy-4'%20transform='translate(0,%200)'%3e%3cpath%20d='M65.4492701,16.3%20C76.3374701,16.3%2085.1635558,25.16479%2085.1635558,36.1%20L85.1635558,42.7%20L90.9027661,54.1647464%20C91.4694141,55.2966923%2091.4668177,56.6300535%2090.8957658,57.7597839%20L85.1635558,69.1%20L85.1635558,75.7%20C85.1635558,86.63554%2076.3374701,95.5%2065.4492701,95.5%20L26.0206986,95.5%20C15.1328272,95.5%206.30641291,86.63554%206.30641291,75.7%20L6.30641291,69.1%20L0.448507752,57.7954874%20C-0.14693501,56.6464093%20-0.149634367,55.2802504%200.441262896,54.1288283%20L6.30641291,42.7%20L6.30641291,36.1%20C6.30641291,25.16479%2015.1328272,16.3%2026.0206986,16.3%20L65.4492701,16.3%20Z%20M62.9301895,22%20L29.189529,22%20C19.8723267,22%2012.3191987,29.5552188%2012.3191987,38.875%20L12.3191987,44.5%20L7.44288578,53.9634655%20C6.84794449,55.1180686%206.85066096,56.4896598%207.45017099,57.6418974%20L12.3191987,67%20L12.3191987,72.625%20C12.3191987,81.9450625%2019.8723267,89.5%2029.189529,89.5%20L62.9301895,89.5%20C72.2476729,89.5%2079.8005198,81.9450625%2079.8005198,72.625%20L79.8005198,67%20L84.5682187,57.6061395%20C85.1432011,56.473244%2085.1458141,55.1345713%2084.5752587,53.9994398%20L79.8005198,44.5%20L79.8005198,38.875%20C79.8005198,29.5552188%2072.2476729,22%2062.9301895,22%20Z'%20id='Combined-Shape'%20fill-rule='nonzero'%3e%3c/path%3e%3ccircle%20id='Oval'%20cx='45.7349843'%20cy='11'%20r='11'%3e%3c/circle%3e%3c/g%3e%3crect%20id='Rectangle-Copy'%20stroke='%2324292F'%20stroke-width='8'%20x='31'%20y='44.5'%20width='5'%20height='22'%20rx='2.5'%3e%3c/rect%3e%3crect%20id='Rectangle-Copy-2'%20stroke='%2324292F'%20stroke-width='8'%20x='55'%20y='44.5'%20width='5'%20height='22'%20rx='2.5'%3e%3c/rect%3e%3c/g%3e%3c/g%3e%3c/g%3e%3c/svg%3e",s_="data:image/svg+xml,%3csvg%20height='1em'%20style='flex:none;line-height:1'%20viewBox='0%200%2024%2024'%20width='1em'%20xmlns='http://www.w3.org/2000/svg'%3e%3ctitle%3eCodex%3c/title%3e%3cpath%20d='M19.503%200H4.496A4.496%204.496%200%20000%204.496v15.007A4.496%204.496%200%20004.496%2024h15.007A4.496%204.496%200%200024%2019.503V4.496A4.496%204.496%200%200019.503%200z'%20fill='%23fff'%3e%3c/path%3e%3cpath%20d='M9.064%203.344a4.578%204.578%200%20012.285-.312c1%20.115%201.891.54%202.673%201.275.01.01.024.017.037.021a.09.09%200%2000.043%200%204.55%204.55%200%20013.046.275l.047.022.116.057a4.581%204.581%200%20012.188%202.399c.209.51.313%201.041.315%201.595a4.24%204.24%200%2001-.134%201.223.123.123%200%2000.03.115c.594.607.988%201.33%201.183%202.17.289%201.425-.007%202.71-.887%203.854l-.136.166a4.548%204.548%200%2001-2.201%201.388.123.123%200%2000-.081.076c-.191.551-.383%201.023-.74%201.494-.9%201.187-2.222%201.846-3.711%201.838-1.187-.006-2.239-.44-3.157-1.302a.107.107%200%2000-.105-.024c-.388.125-.78.143-1.204.138a4.441%204.441%200%2001-1.945-.466%204.544%204.544%200%2001-1.61-1.335c-.152-.202-.303-.392-.414-.617a5.81%205.81%200%2001-.37-.961%204.582%204.582%200%2001-.014-2.298.124.124%200%2000.006-.056.085.085%200%2000-.027-.048%204.467%204.467%200%2001-1.034-1.651%203.896%203.896%200%2001-.251-1.192%205.189%205.189%200%2001.141-1.6c.337-1.112.982-1.985%201.933-2.618.212-.141.413-.251.601-.33.215-.089.43-.164.646-.227a.098.098%200%2000.065-.066%204.51%204.51%200%2001.829-1.615%204.535%204.535%200%20011.837-1.388zm3.482%2010.565a.637.637%200%20000%201.272h3.636a.637.637%200%20100-1.272h-3.636zM8.462%209.23a.637.637%200%2000-1.106.631l1.272%202.224-1.266%202.136a.636.636%200%20101.095.649l1.454-2.455a.636.636%200%2000.005-.64L8.462%209.23z'%20fill='url(%23lobe-icons-codex-_R_0_)'%3e%3c/path%3e%3cdefs%3e%3clinearGradient%20gradientUnits='userSpaceOnUse'%20id='lobe-icons-codex-_R_0_'%20x1='12'%20x2='12'%20y1='3'%20y2='21'%3e%3cstop%20stop-color='%23B1A7FF'%3e%3c/stop%3e%3cstop%20offset='.5'%20stop-color='%237A9DFF'%3e%3c/stop%3e%3cstop%20offset='1'%20stop-color='%233941FF'%3e%3c/stop%3e%3c/linearGradient%3e%3c/defs%3e%3c/svg%3e",o_="/taskforce/assets/cursor-BM_3k4Y4.svg",i_="/taskforce/assets/gemini-cli-icon-dBAVjCcn.png",_z="data:image/svg+xml,%3csvg%20width='28'%20height='28'%20viewBox='0%200%2028%2028'%20fill='none'%20xmlns='http://www.w3.org/2000/svg'%3e%3cpath%20d='M14%2028C14%2026.0633%2013.6267%2024.2433%2012.88%2022.54C12.1567%2020.8367%2011.165%2019.355%209.905%2018.095C8.645%2016.835%207.16333%2015.8433%205.46%2015.12C3.75667%2014.3733%201.93667%2014%200%2014C1.93667%2014%203.75667%2013.6383%205.46%2012.915C7.16333%2012.1683%208.645%2011.165%209.905%209.905C11.165%208.645%2012.1567%207.16333%2012.88%205.46C13.6267%203.75667%2014%201.93667%2014%200C14%201.93667%2014.3617%203.75667%2015.085%205.46C15.8317%207.16333%2016.835%208.645%2018.095%209.905C19.355%2011.165%2020.8367%2012.1683%2022.54%2012.915C24.2433%2013.6383%2026.0633%2014%2028%2014C26.0633%2014%2024.2433%2014.3733%2022.54%2015.12C20.8367%2015.8433%2019.355%2016.835%2018.095%2018.095C16.835%2019.355%2015.8317%2020.8367%2015.085%2022.54C14.3617%2024.2433%2014%2026.0633%2014%2028Z'%20fill='url(%23gemini-gradient)'/%3e%3cdefs%3e%3cradialGradient%20id='gemini-gradient'%20cx='0'%20cy='0'%20r='1'%20gradientUnits='userSpaceOnUse'%20gradientTransform='translate(2.77876%2011.3795)%20rotate(18.6832)%20scale(29.8025%20238.737)'%3e%3cstop%20offset='0.0671246'%20stop-color='%239168C0'/%3e%3cstop%20offset='0.342551'%20stop-color='%235684D1'/%3e%3cstop%20offset='0.672076'%20stop-color='%231BA1E3'/%3e%3c/radialGradient%3e%3c/defs%3e%3c/svg%3e",Fk="/taskforce/assets/grok-BuodbWaG.svg",c_="data:image/svg+xml,%3csvg%20width='1200'%20height='1200'%20viewBox='0%200%201200%201200'%20fill='none'%20xmlns='http://www.w3.org/2000/svg'%3e%3crect%20width='1200'%20height='1200'%20rx='260'%20fill='%239046FF'/%3e%3cmask%20id='mask0_1106_4856'%20style='mask-type:luminance'%20maskUnits='userSpaceOnUse'%20x='272'%20y='202'%20width='655'%20height='796'%3e%3cpath%20d='M926.578%20202.793H272.637V997.857H926.578V202.793Z'%20fill='white'/%3e%3c/mask%3e%3cg%20mask='url(%23mask0_1106_4856)'%3e%3cpath%20d='M398.554%20818.914C316.315%201001.03%20491.477%201046.74%20620.672%20940.156C658.687%201059.66%20801.052%20970.473%20852.234%20877.795C964.787%20673.567%20919.318%20465.357%20907.64%20422.374C827.637%20129.443%20427.623%20128.946%20358.8%20423.865C342.651%20475.544%20342.402%20534.18%20333.458%20595.051C328.986%20625.86%20325.507%20645.488%20313.83%20677.785C306.873%20696.424%20297.68%20712.819%20282.773%20740.645C259.915%20783.881%20269.604%20867.113%20387.87%20823.883L399.051%20818.914H398.554Z'%20fill='white'/%3e%3cpath%20d='M636.123%20549.353C603.328%20549.353%20598.359%20510.097%20598.359%20486.742C598.359%20465.623%20602.086%20448.977%20609.293%20438.293C615.504%20428.852%20624.697%20424.131%20636.123%20424.131C647.555%20424.131%20657.492%20428.852%20664.447%20438.541C672.398%20449.474%20676.623%20466.12%20676.623%20486.742C676.623%20525.998%20661.471%20549.353%20636.375%20549.353H636.123Z'%20fill='black'/%3e%3cpath%20d='M771.24%20549.353C738.445%20549.353%20733.477%20510.097%20733.477%20486.742C733.477%20465.623%20737.203%20448.977%20744.41%20438.293C750.621%20428.852%20759.814%20424.131%20771.24%20424.131C782.672%20424.131%20792.609%20428.852%20799.564%20438.541C807.516%20449.474%20811.74%20466.12%20811.74%20486.742C811.74%20525.998%20796.588%20549.353%20771.492%20549.353H771.24Z'%20fill='black'/%3e%3c/g%3e%3c/svg%3e",l_="data:image/svg+xml,%3csvg%20height='1em'%20style='flex:none;line-height:1'%20viewBox='0%200%2024%2024'%20width='1em'%20xmlns='http://www.w3.org/2000/svg'%3e%3ctitle%3eMistral%3c/title%3e%3cpath%20d='M3.428%203.4h3.429v3.428H3.428V3.4zm13.714%200h3.43v3.428h-3.43V3.4z'%20fill='gold'%3e%3c/path%3e%3cpath%20d='M3.428%206.828h6.857v3.429H3.429V6.828zm10.286%200h6.857v3.429h-6.857V6.828z'%20fill='%23FFAF00'%3e%3c/path%3e%3cpath%20d='M3.428%2010.258h17.144v3.428H3.428v-3.428z'%20fill='%23FF8205'%3e%3c/path%3e%3cpath%20d='M3.428%2013.686h3.429v3.428H3.428v-3.428zm6.858%200h3.429v3.428h-3.429v-3.428zm6.856%200h3.43v3.428h-3.43v-3.428z'%20fill='%23FA500F'%3e%3c/path%3e%3cpath%20d='M0%2017.114h10.286v3.429H0v-3.429zm13.714%200H24v3.429H13.714v-3.429z'%20fill='%23E10500'%3e%3c/path%3e%3c/svg%3e",d_="data:image/svg+xml,%3csvg%20fill='%231FB8CD'%20role='img'%20viewBox='0%200%2024%2024'%20xmlns='http://www.w3.org/2000/svg'%3e%3ctitle%3ePerplexity%3c/title%3e%3cpath%20d='M22.3977%207.0896h-2.3106V.0676l-7.5094%206.3542V.1577h-1.1554v6.1966L4.4904%200v7.0896H1.6023v10.3976h2.8882V24l6.932-6.3591v6.2005h1.1554v-6.0469l6.9318%206.1807v-6.4879h2.8882V7.0896zm-3.4657-4.531v4.531h-5.355l5.355-4.531zm-13.2862.0676%204.8691%204.4634H5.6458V2.6262zM2.7576%2016.332V8.245h7.8476l-6.1149%206.1147v1.9723H2.7576zm2.8882%205.0404v-3.8852h.0001v-2.6488l5.7763-5.7764v7.0111l-5.7764%205.2993zm12.7086.0248-5.7766-5.1509V9.0618l5.7766%205.7766v6.5588zm2.8882-5.0652h-1.733v-1.9723L13.3948%208.245h7.8478v8.087z'/%3e%3c/svg%3e",u_="/taskforce/assets/vscode-C_7wk1WI.svg",p_="data:image/svg+xml,%3csvg%20width='1024'%20height='1024'%20viewBox='0%200%201024%201024'%20fill='none'%20xmlns='http://www.w3.org/2000/svg'%3e%3cg%20clip-path='url(%23clip0_109_63)'%3e%3crect%20width='1024'%20height='1024'%20fill='%23F9F3E9'/%3e%3cpath%20d='M897.246%20286.869H889.819C850.735%20286.808%20819.017%20318.46%20819.017%20357.539V515.589C819.017%20547.15%20792.93%20572.716%20761.882%20572.716C743.436%20572.716%20725.02%20563.433%20714.093%20547.85L552.673%20317.304C539.28%20298.16%20517.486%20286.747%20493.895%20286.747C457.094%20286.747%20423.976%20318.034%20423.976%20356.657V515.619C423.976%20547.181%20398.103%20572.746%20366.842%20572.746C348.335%20572.746%20329.949%20563.463%20319.021%20547.881L138.395%20289.882C134.316%20284.038%20125.154%20286.93%20125.154%20294.052V431.892C125.154%20438.862%20127.285%20445.619%20131.272%20451.34L309.037%20705.2C319.539%20720.204%20335.033%20731.344%20352.9%20735.392C397.616%20745.557%20438.77%20711.135%20438.77%20667.278V508.406C438.77%20476.845%20464.339%20451.279%20495.904%20451.279H495.995C515.02%20451.279%20532.857%20460.562%20543.785%20476.145L705.235%20706.661C718.659%20725.835%20739.327%20737.218%20763.983%20737.218C801.606%20737.218%20833.841%20705.9%20833.841%20667.308V508.376C833.841%20476.815%20859.41%20451.249%20890.975%20451.249H897.276C901.233%20451.249%20904.43%20448.053%20904.43%20444.097V294.021C904.43%20290.065%20901.233%20286.869%20897.276%20286.869H897.246Z'%20fill='%230B100F'/%3e%3c/g%3e%3cdefs%3e%3cclipPath%20id='clip0_109_63'%3e%3crect%20width='1024'%20height='1024'%20rx='100'%20fill='white'/%3e%3c/clipPath%3e%3c/defs%3e%3c/svg%3e",Vv={general:{id:"general",label:"General",generatedOption:!0},antigravity:{id:"antigravity",label:"Antigravity",logoKey:"antigravity",surfaceHint:"coding_tool",generatedOption:!0,signatureColor:"#e49d25"},"claude-code":{id:"claude-code",label:"Claude Code CLI",logoKey:"claude-code",surfaceHint:"cli",generatedOption:!0,signatureColor:"#d97757"},"claude-chat":{id:"claude-chat",label:"Claude Chat",logoKey:"claude-chat",surfaceHint:"chat_app",signatureColor:"#d97757"},cline:{id:"cline",label:"Cline",logoKey:"cline",surfaceHint:"ide",generatedOption:!0,signatureColor:"#25a9e4"},codex:{id:"codex",label:"Codex",logoKey:"codex",surfaceHint:"cli",generatedOption:!0,signatureColor:"#6366f1"},cursor:{id:"cursor",label:"Cursor",logoKey:"cursor",surfaceHint:"ide",generatedOption:!0,signatureColor:"#186e95"},"gemini-cli":{id:"gemini-cli",label:"Gemini CLI",logoKey:"gemini-cli",surfaceHint:"cli",generatedOption:!0,signatureColor:"#4285f4"},grok:{id:"grok",label:"Grok CLI",logoKey:"grok",surfaceHint:"cli",generatedOption:!0,signatureColor:"#181b95"},"grok-chat":{id:"grok-chat",label:"Grok",logoKey:"grok-chat",surfaceHint:"chat_app",signatureColor:"#181b95"},"gemini-chat":{id:"gemini-chat",label:"Gemini Spark",logoKey:"gemini-chat",surfaceHint:"chat_app",signatureColor:"#4285f4"},"mistral-chat":{id:"mistral-chat",label:"Mistral Vibe",logoKey:"mistral-chat",surfaceHint:"chat_app",signatureColor:"#fa520f"},"perplexity-chat":{id:"perplexity-chat",label:"Perplexity",logoKey:"perplexity-chat",surfaceHint:"chat_app",signatureColor:"#1fb8cd"},kiro:{id:"kiro",label:"Kiro",logoKey:"kiro",surfaceHint:"ide",generatedOption:!0,signatureColor:"#7c3aed"},openclaw:{id:"openclaw",label:"OpenClaw",surfaceHint:"agent",generatedOption:!0},vscode:{id:"vscode",label:"VS Code / Copilot",logoKey:"vscode",surfaceHint:"ide",generatedOption:!0,signatureColor:"#256ee4"},windsurf:{id:"windsurf",label:"Windsurf",logoKey:"windsurf",surfaceHint:"ide",generatedOption:!0,signatureColor:"#189587"},"chatgpt-desktop":{id:"chatgpt-desktop",label:"ChatGPT Desktop",logoKey:"chatgpt-desktop",surfaceHint:"chat_app",signatureColor:"#10a37f"}};function Iz(e){const t=String(e||"").trim().toLowerCase();return t==="claude-desktop"?"claude-chat":Object.prototype.hasOwnProperty.call(Vv,t)?t:null}function f_(e){const t=Iz(e);return t?Vv[t]:null}function jX(){return Object.values(Vv).filter(e=>e.generatedOption).map(({id:e,label:t})=>({id:e,label:t}))}function Tz(e){const t=e?.providerMetadata?.taskforce;return!t||typeof t!="object"||Array.isArray(t)?"":String(t.taskforceAgentId||"").trim()}function m_(e){return!!Tz(e)}function MX(e){if(!e||e.archivedAt||e.mergedIntoProfileId||m_(e)||e.surfaceType!=="agent")return!1;const t=e.providerMetadata?.connection,r=t&&typeof t=="object"&&!Array.isArray(t)?t.clientId:null,a=f_(r);return!(a?.logoKey||a?.surfaceHint&&a.surfaceHint!=="agent")}const xz={antigravity:e_,"chatgpt-desktop":t_,"claude-code":n_,"claude-chat":r_,"grok-chat":Fk,"gemini-chat":_z,"mistral-chat":l_,"perplexity-chat":d_,cline:a_,codex:s_,cursor:o_,"gemini-cli":i_,grok:Fk,kiro:c_,vscode:u_,windsurf:p_};function Rz(e){if(!e||m_(e))return"";const t=e.providerMetadata?.connection,r=t&&typeof t=="object"&&!Array.isArray(t)?t.clientId:null,a=f_(r);if(a?.logoKey)return xz[a.logoKey];if(!["chat_app","ide","cli","coding_tool"].includes(String(e.surfaceType||"")))return"";const s=[e.username,e.name].map(i=>String(i||"").toLowerCase()).join(" ");return!s.trim()||s.includes("openclaw")||s.includes("hermes agent")?"":s.includes("chatgpt")?t_:s.includes("claude code")?n_:s.includes("claude desktop")?r_:s.includes("cline")?a_:s.includes("codex")?s_:s.includes("cursor")?o_:s.includes("cascade")||s.includes("windsurf")?p_:s.includes("antigravity")?e_:s.includes("gemini")?i_:s.includes("grok")?Fk:s.includes("mistral")||s.includes("le chat")?l_:s.includes("perplexity")?d_:s.includes("kiro")?c_:s.includes("visual studio code")||s.includes("vs code")||s.includes("vscode")?u_:""}function Pz(e,t,r){const a=typeof e=="string"?e.trim():"";if(!a||a.startsWith("data:")||a.startsWith("blob:"))return a;const s=Number(t),i=Number.isFinite(s)&&s>0?String(Math.floor(s)):typeof r=="string"&&r.trim().length>0?r.trim():"";if(!i)return a;const[l,c=""]=a.split("#"),d=l.includes("?")?"&":"?";return`${l}${d}v=${encodeURIComponent(i)}${c?`#${c}`:""}`}function h_(e,t){const r=String(e||"").trim(),a=String(t||"").trim(),[s,i]=o.useState(r||a);return o.useEffect(()=>{i(r||a)},[r,a]),{activeImageUrl:s,handleImageError:()=>{if(s&&a&&s!==a){i(a);return}i("")}}}const Ez="_identity_1owqe_1",Nz="_avatar_1owqe_9",jz="_person_1owqe_17",Mz="_provider_1owqe_21",Dz="_unassigned_1owqe_25",Lz="_card_1owqe_31",Oz="_label_1owqe_51",Kl={identity:Ez,avatar:Nz,person:jz,provider:Mz,unassigned:Dz,card:Lz,label:Oz};function Cg({option:e,size:t=22,variant:r="default",unassignedIcon:a}){const s=gv(e.value),i=s?"":Pz(e.avatarUrl,e.avatarRevision,e.avatarUpdatedAt),l=!s&&e.kind==="agent"?Rz({name:e.label,username:e.username,surfaceType:e.surfaceType,providerMetadata:e.providerMetadata}):"",{activeImageUrl:c,handleImageError:d}=h_(i,l),f=To,p=s?Bf:e.icon,g=s&&a?a:p&&f[p]?f[p]:ad,h=s?Math.max(13,Math.round(t*.56)):Math.max(14,t-6),y=Jn(e.color)||(e.kind==="member"?"var(--color-green-500, #22c55e)":"var(--text-secondary, #888)");return n.jsx("span",{className:`${Kl.avatar} ${l?Kl.provider:Kl.person} ${s?Kl.unassigned:""} ${r==="card"?Kl.card:""}`.trim(),style:{width:t,height:t,color:c?void 0:y,"--assignee-avatar-color":y},"data-assignee-avatar":r,"aria-hidden":"true",children:c?n.jsx("img",{src:c,alt:"",onError:d}):n.jsx(g,{size:h,strokeWidth:s?1.6:void 0})})}function ju({option:e,size:t=22}){return n.jsxs("span",{className:Kl.identity,children:[n.jsx(Cg,{option:e,size:t}),n.jsx("span",{className:Kl.label,children:e.label})]})}function g_({workstreams:e,onSelect:t,disabled:r=!1}){const a=Q.useMemo(()=>e.filter(l=>!l.isArchived),[e]),s=Q.useMemo(()=>new Map(a.map(l=>[l.id,l])),[a]),i=Q.useMemo(()=>a.map(l=>({value:l.id,label:`${xu(l)||l.id} — ${l.title}`})),[a]);return n.jsx(qo,{value:"",options:i,onChange:l=>{const c=s.get(String(l));c&&t(c)},placeholder:"Select workstream…",ariaLabel:"Link task to workstream",title:i.length>0?"Link to workstream":"No workstreams available",disabled:r||i.length===0,className:x.taskWorkstreamPicker,panelClassName:x.taskWorkstreamPickerPanel,portalPanel:!0,panelAlign:"start",panelMinWidth:280,searchable:!0,searchPlaceholder:"Search workstreams…",noResultsText:"No matching workstreams.",hideChevron:!0,triggerContent:n.jsx("span",{className:x.taskWorkstreamPickerIcon,children:n.jsx(Au,{size:13,"aria-hidden":"true"})}),renderOptionContent:l=>{const c=s.get(String(l.value));return c?n.jsxs("span",{className:x.taskWorkstreamPickerOption,children:[n.jsx("span",{children:xu(c)||c.id}),n.jsx("span",{children:c.title})]}):l.label}})}const{MessageSquare:Bz,Gauge:Wz,ClipboardList:$z,HelpCircle:Fz,File:Uz}=To,zz=({task:e,searchQuery:t="",copiedId:r=null,taxonomies:a=[],types:s=[],priorities:i=[],categories:l=[],assigneeOptions:c=[],workstreams:d=[],taskWorkstream:f=null,taskInitiative:p=null,workspaceId:g=null,isOverlay:h=!1,isArchived:y=!1,readOnlyMode:k=null,isRecentlyChanged:v=!1,selectable:C=!1,selected:S=!1,onSelectionChange:w,onClick:_,onCopyId:M,onToggleInProgress:R,onToggleReview:P,onToggleComplete:b,onToggleCancel:$,onSetStatus:I,onArchiveTask:E,onUnarchive:K,onDelete:U,deleteActionTitle:L,taskReferences:D,onAssigneeChange:ie,onWorkstreamChange:H,compressed:be=!1,showStatusLabel:Z=!1})=>{const me=uv(e),Ve=me.label||(me.isProvisional?"Pending":""),Re=me.isProvisional,je=!!me.label,ye=xu(f)||f?.id||"",ue=IC(p)||p?.id||"",ve=i.find(F=>String(F.value)===String(e.priority)),Pe=_o(e.status),Le=Jn(Pe.color),se=l.find(F=>F.value===e.category||F.label===e.category),V=typeof e.complexity=="number"?e.complexity:Number(e.complexity??3),W=Number.isFinite(V)?Math.max(1,Math.min(5,Math.round(V))):3,z={1:"Tiny",2:"Low",3:"Mid",4:"High",5:"Epic"},fe={1:"tiny",2:"low",3:"medium",4:"high",5:"epic"},ke=z[W],Y=`var(--complexity-${fe[W]})`,we=Tf(e.assignee,c),q=Q.useMemo(()=>{const F=String(e.assignee||"").trim();if(!F||F===td.value)return td;const Ne=kA(c,e.assignee).find(ut=>String(ut.value||"").trim()===F);if(Ne)return Ne;const Ce=mk(F);return{...td,value:F,label:we,icon:Ce==="agent"?"Bot":"User",color:Ce==="agent"?"#8b5cf6":"#22c55e",kind:Ce}},[we,c,e.assignee]),le=Q.useMemo(()=>Az(e),[e]),$e=k||(e.isDeleted?"deleted":y?"archived":null),re=$e!==null,de=Q.useMemo(()=>{if($e!=="deleted"||!e.deletedExpiresAt)return"";const F=new Date(e.deletedExpiresAt);return Number.isNaN(F.getTime())?"":`Trash expires ${F.toLocaleString()}`},[$e,e.deletedExpiresAt]),He=!re&&!h&&!!ie&&c.length>0,ce=!re&&!h&&!!H,[pe,xe]=Q.useState(!1),N=Q.useCallback((F,Ne)=>{const Ce=String(Ne||"").trim();if(Ce){if(F==="assignee")return Tf(Ce,c);if(F==="workstreamId"&&Ce===f?.id)return ye||f.id;if(F==="initiativeId"&&Ce===p?.id)return ue||p.id}},[c,ue,p,f,ye]),X=Q.useMemo(()=>Cz(le,N),[N,le]),Ae=Q.useMemo(()=>Hv(e).filter(F=>F.type==="comment").length,[e]),Te=[ar.taskItem,e.status==="on-hold"?ar.onHold:"",e.status==="in-progress"?ar.inProgress:"",e.status==="review"?ar.readyForReview:"",e.status==="done"?ar.completed:"",e.status==="cancelled"?ar.cancelled:"",v?ar.taskItemRecentlyChanged:"",h?ar.kanbanCardOverlay:"",re?ar.readOnly:"",y?ar.archived:"",be?ar.compressed:"",S?ar.selected:""].filter(Boolean).join(" "),he=Jn(ve?.color),ot=s.find(F=>F.value===e.type),We=Jn(ot?.color)||kN(e.type),Xe=F=>{const Ne=typeof F=="string"?F:F.path,Ce=typeof F=="string"?"":(F.fsPath||"").trim(),ut=typeof F=="string"?"":(F.displayName||"").trim(),mt=typeof F=="string"?"":(F.originalFilename||"").trim(),Ue=typeof F=="string"?"":(F.caption||"").trim();return[Ce,mt,ut,Ue,Ne].some(kt=>/\.(png|jpe?g|webp|gif)(\?|#|$)/i.test(kt))},ae=F=>{const Ne=typeof F=="string"?F:F.path,Ce=Ne.includes("/api/taskforce/documents/"),ut=typeof F=="string"?"":(F.displayName||"").trim();if(Ce&&typeof F!="string")return qU({displayName:F.displayName,originalFilename:F.originalFilename,fsPath:F.fsPath,assetId:F.assetId||null});const mt=typeof F=="string"?"":(F.caption||"").trim();if(mt)return mt;if(ut)return ut;const Ue=typeof F=="string"?"":(F.originalFilename||"").trim();return Ue||Ne.split("?")[0].split("#")[0].split("/").pop()||"Context file"},G=F=>{const Ne=typeof F=="string"?F:F.path,Ce=typeof F=="string"?"":(F.fsPath||"").trim(),ut=typeof F=="string"?"":(F.caption||"").trim(),mt=typeof F=="string"?"":(F.originalFilename||"").trim(),Ue=[];if(Ce&&Ue.push(Ce),mt&&Ue.push(mt),ut&&Ue.push(ut),Ne.includes("/api/taskforce/context-link?path="))try{const kt=new URL(Ne,"http://localhost").searchParams.get("path");kt&&Ue.push(kt)}catch{}Ue.push(Ne);for(const wt of Ue){const rt=wt.split("?")[0].split("#")[0].split("/").pop()||"",Ht=rt.lastIndexOf(".");if(Ht<=0||Ht===rt.length-1)continue;const lr=rt.slice(Ht+1);if(lr)return lr.slice(0,5).toUpperCase()}return"FILE"},Ie={"--task-status-color":Le||"var(--border-primary)","--task-card-tint-color":re?"transparent":Le||"transparent","--task-change-glow-color":Le||"var(--brand-primary)",...Le?{borderColor:Le}:{}},Fe=F=>F.replace(/\b\w/g,Ne=>Ne.toUpperCase()),it=$f(a,[e]),Me=e.checklistItems||[],qe=Me.length,ge=qe>0?Me.filter(F=>F.isCompleted).length:0,_e=(F,Ne)=>{F.stopPropagation(),M?.(F,Ne)},Be=async F=>{if(!H||pe)return!1;xe(!0);try{return await H(e,F)!==!1}finally{xe(!1)}},Ge=F=>{const Ne=typeof F=="string"?F:F.path;return/^https?:\/\//i.test(Ne)?(window.open(Ne,"_blank"),!0):Ef(F,{ownerType:"task",ownerId:e.id,ownerReferenceLabel:Ve,workspaceId:g})};return n.jsxs("div",{className:Te,onClick:()=>_?.(e),style:Ie,"data-task-card":"true",children:[n.jsxs("div",{className:ar.taskHeader,children:[C&&n.jsx("label",{className:ar.selectionControl,onClick:F=>F.stopPropagation(),onPointerDown:F=>F.stopPropagation(),children:n.jsx("input",{type:"checkbox",checked:S,onChange:F=>w?.(F.target.checked),"aria-label":`Select ${Ve||e.title} for restore`})}),n.jsxs("div",{className:ar.taskReferenceCluster,children:[p?n.jsxs(n.Fragment,{children:[n.jsx(Su,{copied:r===ue,onClick:F=>_e(F,ue),disabled:!ue,title:p.title,ariaLabel:`Copy initiative reference ${ue}: ${p.title}`,className:y?ar.archiveBadge:"",label:ue}),n.jsx("span",{className:ar.taskReferenceDivider,children:"/"})]}):null,f?n.jsxs(n.Fragment,{children:[n.jsx(Su,{copied:r===ye,onClick:F=>_e(F,ye),disabled:!ye,title:f.title,ariaLabel:`Copy workstream reference ${ye}: ${f.title}`,className:y?ar.archiveBadge:"",label:ye}),n.jsx("span",{className:ar.taskReferenceDivider,children:"/"})]}):null,ce&&!f?n.jsx("div",{className:ar.taskReferenceSegment,onClick:F=>F.stopPropagation(),onPointerDown:F=>F.stopPropagation(),onKeyDown:F=>F.stopPropagation(),children:n.jsx(g_,{workstreams:d,disabled:pe,onSelect:F=>{Be(F.id)}})}):null,Ve?n.jsx("div",{className:ar.taskReferenceSegment,onClick:F=>F.stopPropagation(),onPointerDown:F=>F.stopPropagation(),onKeyDown:F=>F.stopPropagation(),children:n.jsx(Su,{copied:je&&r===me.label,onClick:F=>_e(F,me.label),disabled:!je,title:Re?"Temporary identifier — replaced after synchronization.":"Copy task reference",ariaLabel:Re?`Copy temporary task reference ${Ve}`:void 0,className:y?ar.archiveBadge:"",label:ch(Ve,t),provisional:Re})}):null]}),n.jsx("div",{className:ar.taskActions,onClick:F=>F.stopPropagation(),children:re?K||U?n.jsxs(n.Fragment,{children:[K&&n.jsx("button",{type:"button",className:x.actionBtn,onClick:()=>K(e.id),title:$e==="deleted"?`Restore to ${e.isArchived===!0?"Archived":"Active"}`:"Restore archived task",children:n.jsx(mi,{size:16})}),U&&n.jsx("button",{type:"button",className:`${x.actionBtn} ${x.deleteBtn}`,onClick:()=>U(e.id),title:L||($e==="deleted"?"Delete Permanently":"Move to Trash"),children:n.jsx(Lf,{size:16})})]}):null:n.jsx(Yh,{task:e,compressed:be,shortLabels:!0,showLabel:Z,onSetStatus:(F,Ne)=>{if(I){I(F,Ne);return}if(Ne==="in-progress"){R?.(F);return}if(Ne==="review"){P?.(F);return}if(Ne==="done"){b?.(F);return}Ne==="cancelled"&&$?.(F)},onArchiveTask:E})})]}),n.jsxs("div",{className:ar.taskContent,children:[re&&n.jsx("div",{className:`${ar.taskMeta} ${ar.taskMetaCompact}`}),n.jsxs("div",{children:[n.jsxs("div",{className:ar.taskTitle,style:be?{fontSize:"13px",lineHeight:"1.4"}:{},children:[$e==="archived"&&"✓ ",$e==="deleted"&&"Deleted: ",ch(e.title,t)]}),de&&n.jsx("div",{className:ar.deletedExpiry,title:"Trash items are permanently deleted 90 days after deletion.",children:de}),e.description&&!re&&!be&&n.jsx("div",{className:ar.taskDescription,children:n.jsx(Sg,{variant:"compact",taskReferences:D,children:e.description})})]}),e.attachments&&e.attachments.length>0&&!re&&!be&&n.jsxs("div",{className:ar.attachmentThumbnails,children:[n.jsx("div",{className:ar.attachmentImageRow,children:(e.attachments||[]).map((F,Ne)=>{const Ce=typeof F=="string"?F:F.path;return Xe(F)?n.jsx("button",{type:"button",className:ar.attachmentThumbnail,"aria-label":`Preview ${ae(F)}`,onPointerDown:ut=>ut.stopPropagation(),onClick:ut=>{ut.stopPropagation(),!Ge(F)&&(ZC(typeof F=="string"?{path:Ce}:F,{taskId:e.id,taskReferenceLabel:Ve})||window.open(Ce,"_blank"))},children:n.jsx("img",{src:Ce,alt:`Attachment ${Ne}`})},Ne):null})}),n.jsx("div",{className:ar.attachmentDocumentList,children:(e.attachments||[]).map((F,Ne)=>{const Ce=typeof F=="string"?F:F.path,ut=typeof F=="string"?void 0:F.fsPath,mt=ae(F);if(Xe(F))return null;const Ue=G(F);return n.jsxs("button",{type:"button",className:ar.contextDocThumb,onPointerDown:wt=>wt.stopPropagation(),onClick:wt=>{if(wt.stopPropagation(),Ge(F))return;const kt=typeof F=="string"?{path:F,taskId:e.id}:{...F,taskId:e.id};GC(kt,ut)||window.open(Ce,"_blank")},title:mt,style:{"--context-doc-accent":vN(Ue)},children:[n.jsxs("span",{className:ar.contextDocMain,children:[n.jsx("span",{className:ar.contextDocIcon,"aria-hidden":"true",children:n.jsx(Uz,{size:13})}),n.jsx("span",{className:ar.contextDocText,children:n.jsx("span",{className:ar.contextDocName,children:mt})})]}),n.jsx("span",{className:ar.contextDocType,children:Ue})]},Ne)})})]}),e.status==="cancelled"&&e.canceledReason&&!be&&n.jsxs("div",{className:ar.taskCancellationReason,children:[n.jsx("strong",{children:"Cancellation Reason:"})," ",ch(e.canceledReason,t)]}),(X||Ae>0)&&!re&&!be&&n.jsxs("div",{className:ar.taskLatestComment,"data-task-activity-summary":"true",children:[n.jsxs("div",{className:ar.taskLatestCommentHeader,children:[n.jsx("strong",{children:X?"Latest Activity:":"Activity:"}),Ae>0&&n.jsxs("span",{className:`${x.metaBadge} ${ar.taskCommentCount}`,title:`${Ae} ${Ae===1?"comment":"comments"}`,"aria-label":`${Ae} ${Ae===1?"comment":"comments"}`,children:[n.jsx(Bz,{size:12,"aria-hidden":"true"}),n.jsx("span",{children:Ae})]})]}),X&&n.jsx("div",{className:ar.taskLatestCommentText,title:X,children:ch(X,t)})]}),!re&&it.length>0&&!be&&n.jsx("div",{className:`${ar.taskSpecialists} ${ar.taxonomiesList}`,children:it.map(F=>{const Ne=e.taxonomies?.[F.id];return Ne?(Array.isArray(Ne)?Ne:[Ne]).map(ut=>{const mt=F.options.find(Ht=>Ht.value===ut);if(!mt)return null;const Ue=To[mt.icon||"Layers"]||pk,wt=Jn(mt.color)||"var(--text-primary)",kt=F.status==="retired"?`${F.label} (Retired)`:F.label,rt=mt.status==="retired"?`${mt.label} (Retired)`:mt.label;return n.jsx("span",{className:x.specialistBadge,style:{borderColor:`${wt}50`,backgroundColor:`${wt}15`,color:wt},title:`${kt}: ${Fe(rt)}`,children:n.jsx(Ue,{size:10})},`${F.id}-${ut}`)}):null})}),n.jsx("div",{className:ar.taskMeta,children:re?n.jsx("span",{children:e.category}):n.jsx(n.Fragment,{children:n.jsxs("div",{className:ar.taskMetaRow,style:be?{marginBottom:0}:void 0,children:[n.jsxs("div",{className:ar.taskMetaBadgeGroup,"data-task-meta-primary":"true",children:[(()=>{const F=Jn(se?.color),Ne=se?.icon||"Folder",Ce=To[Ne]||gc;return n.jsx("span",{className:`${x.metaBadge} ${ar.taskMetaCategory}`,title:Fe(e.category),style:{color:F||"var(--text-secondary)",backgroundColor:F?`${F}15`:"var(--bg-tertiary)",borderColor:F?`${F}40`:"transparent"},children:n.jsx(Ce,{size:14})})})(),n.jsx("span",{className:`${x.metaBadge} ${ar.taskMetaType} ${x[`type_${e.type}`]||""}`,title:Fe(e.type||po),style:{color:`var(--type-color, ${We})`,backgroundColor:`color-mix(in srgb, var(--type-color, ${We}), transparent 90%)`,borderColor:`color-mix(in srgb, var(--type-color, ${We}), transparent 75%)`},children:ot?.icon?(()=>{const F=To[ot.icon]||Fz;return n.jsx(F,{size:14})})():BU(e.type,14)}),ve&&n.jsx("span",{className:`${x.metaBadge} ${ar.taskMetaPriority}`,style:{color:he||"var(--text-secondary)",backgroundColor:he?`${he}15`:"var(--bg-tertiary)",borderColor:he?`${he}40`:"var(--border-color)"},title:`${ve.label}`,children:(()=>{const F=ve.icon||"AlertCircle",Ne=To[F]||pT;return n.jsx(Ne,{size:14})})()}),qe>0&&n.jsxs("span",{className:x.metaBadge,title:`${ge}/${qe} checklist items complete`,style:{color:"var(--text-muted)",backgroundColor:"var(--bg-tertiary)",borderColor:"var(--border-primary)",gap:"4px",padding:"0 8px"},children:[n.jsx($z,{size:14}),n.jsx("span",{children:`${ge}/${qe}`})]})]}),n.jsxs("div",{className:ar.taskMetaIdentityGroup,"data-task-meta-identity":"true",children:[n.jsxs("span",{className:x.metaBadge,title:`AI-estimated complexity: ${ke} (${W}/5)`,style:{color:Y,backgroundColor:`color-mix(in srgb, ${Y}, transparent 88%)`,borderColor:`color-mix(in srgb, ${Y}, transparent 72%)`,gap:"4px",padding:"0 8px"},children:[n.jsx(Wz,{size:14}),!be&&n.jsx("span",{className:ar.taskComplexityLabel,children:ke})]}),(()=>{const F=q.kind==="unassigned",Ne=n.jsx("span",{className:ar.assigneeAvatarShared,"data-task-assignee":"true","aria-hidden":He?"true":void 0,"aria-label":He?void 0:F?"Unassigned":`Assigned to ${we}`,children:n.jsx(Cg,{option:q,size:be?32:36,variant:"card",unassignedIcon:He?Ko:void 0})});return He?n.jsx("div",{className:ar.assigneePicker,title:F?"Assign task":we,onClick:Ce=>Ce.stopPropagation(),onPointerDown:Ce=>Ce.stopPropagation(),onKeyDown:Ce=>Ce.stopPropagation(),children:n.jsx(qo,{value:e.assignee||"unassigned",options:c,onChange:Ce=>ie?.(e,String(Ce)),ariaLabel:F?"Assign task":`Reassign task currently assigned to ${we}`,hideChevron:!0,portalPanel:!0,panelMinWidth:240,searchable:!0,searchPlaceholder:"Search assignees...",noResultsText:"No assignees found.",renderOptionContent:Ce=>{const ut=c.find(mt=>String(mt.value)===String(Ce.value));return ut?n.jsx(ju,{option:ut}):Ce.label},triggerContent:Ne})}):n.jsx("span",{title:we,children:Ne})})()]})]})})})]})]})},Mf=Q.memo(zz),Qh="168px",cu=[{value:"open",label:"Open"},{value:"archived",label:"Archived"},{value:"deleted",label:"Deleted"}];function Hz(){return n.jsx("span",{style:{fontSize:"12px",fontWeight:600,color:"var(--text-secondary)",marginRight:"4px"},children:_t("standalone.filtersCaps")})}function Jp({label:e,options:t,selected:r,onChange:a,variant:s="label",renderOptionContent:i,searchable:l=!1,searchPlaceholder:c,noResultsText:d}){return n.jsx(Gl,{label:e,options:t,selected:r,onChange:a,variant:s,renderOptionContent:i,searchable:l,searchPlaceholder:c,noResultsText:d,containerStyle:{flex:`0 0 ${Qh}`,maxWidth:Qh}})}function Vz({onClick:e,disabled:t,label:r="Reset filters"}){return n.jsx("button",{type:"button",className:"tf-control-icon",onClick:e,disabled:t,"aria-label":r,title:r,children:n.jsx(mi,{size:14,"aria-hidden":"true"})})}function tS({label:e,options:t,selected:r,onChange:a,allLabel:s,title:i}){const[l,c]=Q.useState(!1),d=Q.useRef(null),f=t.find(h=>h.value===r),p=f?.selectedLabel||f?.label||s;Q.useEffect(()=>{const h=y=>{d.current&&!d.current.contains(y.target)&&c(!1)};return document.addEventListener("mousedown",h),()=>document.removeEventListener("mousedown",h)},[]);const g=h=>{a(h),c(!1)};return n.jsxs("div",{className:x.filterContainer,ref:d,style:{flex:`0 0 ${Qh}`,maxWidth:Qh},children:[n.jsxs("button",{type:"button",className:`${x.filterButton} ${r?x.filterActive:""}`,onClick:()=>c(h=>!h),title:i||`Filter by ${e}`,"aria-haspopup":"listbox","aria-expanded":l,children:[n.jsx("span",{children:p}),n.jsx(dd,{size:14,style:{transform:l?"rotate(180deg)":"none",transition:"transform 0.2s",opacity:.5}})]}),l&&n.jsxs("div",{className:`${x.filterDropdown} ${x.appScrollbar} tf-scrollbar`,role:"listbox","aria-label":e,children:[n.jsxs("button",{type:"button",className:x.filterOption,onClick:()=>g(""),"aria-selected":!r,children:[n.jsx(hi,{size:14,style:{opacity:r?0:1}}),n.jsx("span",{style:{fontWeight:r?500:600},children:s})]}),n.jsx("div",{className:x.filterDivider}),t.map(h=>{const y=h.value===r;return n.jsxs("button",{type:"button",className:x.filterOption,onClick:()=>g(h.value),"aria-selected":y,children:[n.jsx(hi,{size:14,style:{opacity:y?1:0}}),n.jsx("span",{style:{fontWeight:y?600:500},children:h.label})]},h.value)})]})]})}function y_({scope:e,onScopeChange:t,className:r,labelClassName:a}){const s=Q.useRef([]),i=(l,c)=>{let d;l.key==="ArrowRight"?d=(c+1)%cu.length:l.key==="ArrowLeft"?d=(c-1+cu.length)%cu.length:l.key==="Home"?d=0:l.key==="End"&&(d=cu.length-1),d!==void 0&&(l.preventDefault(),s.current[d]?.focus(),t(cu[d].value))};return n.jsxs("div",{className:[x.taskScopeToggle,r].filter(Boolean).join(" "),children:[n.jsx("span",{className:a,children:"Scope"}),n.jsx("div",{className:x.taskScopeTabs,role:"tablist","aria-label":"Task scope",children:cu.map((l,c)=>{const d=e===l.value;return n.jsx("button",{ref:f=>{s.current[c]=f},type:"button",className:`${x.taskScopeTab} ${d?x.taskScopeTabActive:""}`,onClick:()=>t(l.value),onKeyDown:f=>i(f,c),role:"tab","aria-selected":d,tabIndex:d?0:-1,title:`Show ${l.label.toLowerCase()} tasks`,children:l.label},l.value)})})]})}function Gz({onClick:e,disabled:t=!1,className:r,title:a="Permanently delete all deleted tasks",children:s="Delete All Permanently"}){return n.jsxs("button",{type:"button",className:r,onClick:e,disabled:t,title:a,children:[n.jsx(Lf,{size:14}),s]})}const{Search:rS,ClipboardList:Kz,ChevronRight:qz,ChevronDown:Yz,Folder:Zz,Archive:Jz,RotateCcw:Qz,X:Xz,Plus:e8,ArrowUpDown:t8,Trash2:r8}=To,n8=new Map,a8=new Set,k_=o.forwardRef((e,t)=>{const{tasks:r,archivedTasks:a,categories:s,types:i,priorities:l,taxonomyDisplayLabels:c,assigneeOptions:d=[],workstreams:f=[],initiatives:p=[],workspaceId:g=null,searchQuery:h,filterCategories:y,filterTypes:k,filterPriorities:v,filterStatus:C,filterAssignees:S=[],filterTaxonomies:w,sortBy:_,sortOrder:M,showArchive:R,taskScope:P,collapsedCategories:b,loadingTasks:$,filteredTasks:I,filteredArchive:E,groupedTasks:K,filteredDeletedTasks:U=[],groupedDeletedTasks:L={},copiedId:D,recentlyChangedTaskIds:ie=[],showTaskCardStatusLabel:H=!1,deletedTaskRecordByTaskId:be=n8,selectedDeletedRecordIds:Z=a8,onDeletedSelectionChange:me,trashControls:Ve,onSearchChange:Re,onFilterCategoriesChange:je,onFilterTypesChange:ye,onFilterPrioritiesChange:ue,onFilterStatusChange:ve,onFilterAssigneesChange:Pe,onTaxonomyFilterChange:Le,onSortByChange:se,onSortOrderChange:V,onShowArchiveChange:W,onTaskScopeChange:z,onClearFilters:fe,onToggleCategory:ke,onEditTask:Y,onUpdateTask:we,taskReferences:q,onCopyId:le,onToggleInProgress:$e,onToggleReview:re,onToggleComplete:de,onToggleCancel:He,onSetStatus:ce,onArchiveTask:pe,onBulkArchive:xe,onUnarchive:N,onDelete:X,onFetchArchive:Ae,onAddTaskToCategory:Te,supplementalTasks:he=[],taxonomies:ot}=e,We=Q.useMemo(()=>new Set(ie),[ie]),Xe=Q.useMemo(()=>new Map(f.map(Ue=>[Ue.id,Ue])),[f]),ae=Q.useMemo(()=>new Map(p.map(Ue=>[Ue.id,Ue])),[p]),G=Q.useCallback(Ue=>{const wt=Ue.workstreamId&&Xe.get(Ue.workstreamId)||null,kt=wt?.initiativeId&&ae.get(wt.initiativeId)||null;return{taskWorkstream:wt,taskInitiative:kt}},[ae,Xe]),Ie=Q.useMemo(()=>[...r,...a,...he],[a,he,r]),Fe=Q.useCallback((Ue,wt)=>we(Ue.id,{assignee:wt}),[we]),it=!!z,Me=z,qe=P??(R?"archived":"open"),ge=it?qe==="archived"?E:qe==="deleted"?U:I:I,_e=it?qe==="archived"?{Archived:E}:qe==="deleted"?L:K:K,Be=it?qe==="deleted"?"deleted":qe==="archived"?"archived":null:null,Ge=wg(h),F=h?Ge?`No task found for ${Ge.toUpperCase()}`:_t("taskList.noMatchingTasks"):qe==="archived"?"No archived tasks found.":qe==="deleted"?"No deleted tasks found.":_t("taskList.noActiveTasks"),Ne=Q.useMemo(()=>{const Ue=s.filter(kt=>!kt.disabled),wt=s.filter(kt=>kt.disabled&&Ie.some(rt=>rt.category===kt.value));return[...Ue,...wt.filter(kt=>!Ue.some(rt=>rt.value===kt.value))].map(kt=>({value:kt.value,label:kt.disabled?`${kt.label} (Legacy)`:kt.label}))},[s,Ie]),Ce=Q.useMemo(()=>{const Ue=i.filter(kt=>kt.status!=="retired"),wt=i.filter(kt=>kt.status==="retired"&&Ie.some(rt=>rt.type===kt.value));return[...Ue,...wt.filter(kt=>!Ue.some(rt=>rt.value===kt.value))].map(kt=>({value:kt.value,label:kt.status==="retired"?`${kt.label} (Retired)`:kt.label}))},[Ie,i]),ut=Q.useMemo(()=>$f(ot,Ie).filter(Ue=>Ue.filterEnabled!==!1).map(Ue=>({...Ue,options:Dv(Ue,Ie)})),[Ie,ot]),mt=Q.useMemo(()=>[{value:"created",label:_t("taskList.sortCreated")},{value:"updated",label:_t("taskList.sortUpdated")},{value:"priority",label:_t("taskList.sortPriority")},...RC(ot,Ie)],[Ie,_t,ot]);return n.jsxs("div",{className:x.viewTab,ref:t,children:[n.jsxs("div",{className:x.filterBar,children:[n.jsxs("div",{className:x.searchContainer,children:[n.jsx(rS,{size:16,className:x.searchIcon}),n.jsx("input",{type:"text",className:x.searchInput,placeholder:_t("taskList.searchPlaceholder"),value:h,onChange:Ue=>Re(Ue.target.value)}),h&&n.jsx("button",{className:x.clearSearchBtn,onClick:()=>Re(""),title:_t("taskList.clearSearchTitle"),children:n.jsx(Xz,{size:14})})]}),n.jsxs("div",{className:x.filterRow,children:[n.jsx(Gl,{label:c?.category||_t("taskList.categoryLabel"),options:Ne,selected:y,onChange:je,variant:"value"}),n.jsx(Gl,{label:c?.type||_t("taskList.typeLabel"),options:Ce,selected:k,onChange:ye,variant:"value"})]}),n.jsxs("div",{className:x.filterRow,children:[n.jsx(Gl,{label:c?.priority||_t("taskList.priorityLabel"),options:l,selected:v,onChange:ue,variant:"value"}),n.jsx(Gl,{label:_t("taskList.statusLabel"),options:Ui,selected:C,onChange:ve,variant:"value"}),n.jsx(Gl,{label:_t("taskList.assigneeLabel"),options:d,selected:S,onChange:Ue=>Pe?.(Ue),variant:"value",renderOptionContent:Ue=>{const wt=d.find(kt=>String(kt.value)===String(Ue.value));return wt?n.jsx(ju,{option:wt,size:20}):Ue.label}})]}),ut.map(Ue=>n.jsx(Gl,{label:Ue.status==="retired"?`${Ue.label} (Retired)`:Ue.label,options:Ue.options.map(wt=>({...wt,label:wt.status==="retired"?`${wt.label} (Retired)`:wt.label})),selected:w[Ue.id]||[],onChange:wt=>Le(Ue.id,wt),variant:"value"},Ue.id)),n.jsxs("div",{className:x.filterRow,children:[n.jsxs("div",{className:x.sortLabel,children:[n.jsx(t8,{size:14,style:{marginRight:"4px"}})," ",_t("taskList.sortByLabel")]}),n.jsx("select",{value:_,onChange:Ue=>se(Ue.target.value),className:`${x.filterSelect} ${x.filterSelectSort} `,children:mt.map(Ue=>n.jsx("option",{value:Ue.value,children:Ue.label},Ue.value))}),n.jsx("button",{className:`${x.resetFiltersBtn} ${x.sortDirectionBtnWidget}`,onClick:V,title:_t(M==="desc"?"taskList.sortDirectionDescTitle":"taskList.sortDirectionAscTitle"),children:M==="desc"?n.jsx(Xk,{size:14}):n.jsx(WS,{size:14})}),n.jsx("button",{className:x.resetFiltersBtn,onClick:fe,title:_t("taskList.resetFiltersTitle"),children:n.jsx(Qz,{size:14})})]}),n.jsxs("div",{className:`${x.filterRow} ${x.archiveRow} `,children:[qe==="open"?n.jsxs("button",{className:`${x.bulkArchiveBtn} ${r.some(Ue=>Ue.status==="done"||Ue.status==="cancelled")?"":x.disabledBtn} `,onClick:()=>r.some(Ue=>Ue.status==="done"||Ue.status==="cancelled")&&xe(),disabled:!r.some(Ue=>Ue.status==="done"||Ue.status==="cancelled"),title:r.some(Ue=>Ue.status==="done"||Ue.status==="cancelled")?_t("taskList.archiveAllTitle"):_t("taskList.noTasksToArchiveTitle"),children:[n.jsx(Jz,{size:12}),n.jsx("span",{children:_t("taskList.archiveFinished")})]}):qe==="deleted"?n.jsx("div",{}):n.jsx("div",{}),it?n.jsx(y_,{scope:qe,onScopeChange:Ue=>{Me?.(Ue),Ue==="archived"?W(!0):R&&W(!1)},className:x.archiveToggle}):n.jsxs("label",{className:x.archiveToggle,children:[n.jsx("input",{type:"checkbox","aria-label":"Archived",checked:R,onChange:Ue=>{W(Ue.target.checked),Ue.target.checked&&Ae()}}),n.jsx("span",{children:"Include Archive"})]})]}),qe==="deleted"&&Ve]}),$&&r.length===0?n.jsx("div",{className:x.loading,children:n.jsx(Ln,{size:24,className:x.spinner})}):ge.length===0&&!$?n.jsxs("div",{className:x.emptyState,children:[h?n.jsx(rS,{size:48}):qe==="deleted"?n.jsx(r8,{size:48}):n.jsx(Kz,{size:48}),n.jsx("p",{children:F})]}):n.jsx("div",{className:x.taskList,style:{opacity:$?.6:1,transition:"opacity 0.2s ease"},children:Object.entries(_e).map(([Ue,wt])=>{if(wt.length===0)return null;const kt=b[Ue];return n.jsxs("div",{className:x.categoryGroup,children:[n.jsx("div",{className:x.categoryHeader,onClick:()=>ke(Ue),children:n.jsxs("div",{className:x.categoryTitle,children:[kt?n.jsx(qz,{size:16}):n.jsx(Yz,{size:16}),(()=>{const rt=s.find(rr=>rr.label===Ue),Ht=rt?.icon&&Ru[rt.icon]?Ru[rt.icon]:Zz,lr=Jn(rt?.color)||"var(--color-purple, #8b5cf6)";return n.jsx(Ht,{size:16,className:x.categoryTitleIcon,style:{color:lr}})})(),Ue,n.jsxs("span",{className:x.categoryCount,children:["(",wt.length,")"]}),Te&&n.jsx("button",{className:x.kanbanQuickAdd,onClick:rt=>{rt.stopPropagation(),Te(Ue)},title:_t("taskList.addTaskToCategoryTitle",{category:Ue}),style:{marginLeft:"auto"},disabled:Be!==null,children:n.jsx(e8,{size:14})})]})}),!kt&&n.jsx("div",{className:x.categoryItems,children:wt.map(rt=>(()=>{const{taskWorkstream:Ht,taskInitiative:lr}=G(rt),rr=Be==="deleted"?be.get(rt.id):void 0;return n.jsx(Mf,{task:rt,taskWorkstream:Ht,taskInitiative:lr,workspaceId:g,searchQuery:h,copiedId:D,taxonomies:ot,types:i,priorities:l,assigneeOptions:d,workstreams:f,onClick:Y,onAssigneeChange:Fe,onWorkstreamChange:(wr,st)=>we(wr.id,{workstreamId:st}),taskReferences:q,onCopyId:le,onToggleInProgress:$e,onToggleReview:re,onToggleComplete:de,onToggleCancel:He,onSetStatus:ce,onArchiveTask:pe,onUnarchive:Be?N:void 0,onDelete:Be?X:void 0,categories:s,isRecentlyChanged:We.has(rt.id),readOnlyMode:Be,selectable:!!(rr&&me),selected:!!(rr&&Z.has(rr.id)),onSelectionChange:rr?wr=>me?.(rr.id,wr):void 0,showStatusLabel:H},rt.id)})())})]},Ue)})}),!it&&R&&E.length>0&&n.jsxs("div",{className:x.archiveList,children:[n.jsx("div",{className:x.archiveHeader,children:"Archived"}),E.map(Ue=>(()=>{const{taskWorkstream:wt,taskInitiative:kt}=G(Ue);return n.jsx(Mf,{task:Ue,taskWorkstream:wt,taskInitiative:kt,workspaceId:g,searchQuery:h,copiedId:D,isArchived:!0,types:i,assigneeOptions:d,workstreams:f,onClick:Y,onCopyId:le,onSetStatus:ce,onUnarchive:N,onDelete:X,deleteActionTitle:"Delete Permanently",taskReferences:q,categories:s,showStatusLabel:H},Ue.id)})())]})]})});k_.displayName="TaskList";const s8="_formNotice_1h100_1",o8="_markdownPreview_1h100_12",i8="_descriptionField_1h100_18",c8="_descriptionImageStatus_1h100_22",l8="_descriptionImageError_1h100_23",d8="_taskFormLifecycle_1h100_46",u8="_taskFormMetaDivider_1h100_51",p8="_taskFormMetaGrid_1h100_58",f8="_compactMetaGrid_1h100_59",m8="_compactMetaSection_1h100_65",h8="_compactMetaField_1h100_71",g8="_compactMetaFieldHint_1h100_85",y8="_workflowAssignmentField_1h100_89",k8="_workflowAssignmentLabels_1h100_93",v8="_workflowAssignmentControls_1h100_94",w8="_workflowAssignmentSelector_1h100_101",b8="_workflowAssignmentError_1h100_110",S8="_workflowExecutionToggle_1h100_121",A8="_workflowExecutionVersion_1h100_147",C8="_workflowExecutionPanel_1h100_168",_8="_workflowExecutionHeader_1h100_176",I8="_workflowExecutionEyebrow_1h100_195",T8="_workflowExecutionSummary_1h100_196",x8="_workflowExecutionSpinner_1h100_206",R8="_workflowExecutionSteps_1h100_239",P8="_workflowExecutionStepCurrent_1h100_261",E8="_workflowExecutionStepMarker_1h100_266",N8="_workflowExecutionStepCompleted_1h100_277",j8="_workflowExecutionStepState_1h100_278",M8="_workflowExecutionStepBody_1h100_282",D8="_workflowExecutionStepTitle_1h100_286",L8="_workflowExecutionStepMeta_1h100_308",O8="_workflowExecutionEmpty_1h100_310",B8="_formFieldsetReset_1h100_350",W8="_formLayoutWithSidebar_1h100_357",$8="_formMainColumn_1h100_365",F8="_activitySidebar_1h100_372",U8="_activitySidebarHeader_1h100_382",z8="_activitySidebarTitle_1h100_389",H8="_taskFormDateRow_1h100_398",V8="_taskFormDateLabel_1h100_405",G8="_taskFormDateValue_1h100_413",K8="_taskFormMetaStack_1h100_421",q8="_taskFormMetaActor_1h100_427",Y8="_taskFormDateWarning_1h100_433",Z8="_taskFormDateError_1h100_439",J8="_helpHeader_1h100_445",Q8="_helpClose_1h100_456",X8="_markdownHelp_1h100_470",e7="_helpGrid_1h100_479",t7="_helpGridItem_1h100_485",r7="_settingsHint_1h100_497",n7="_sectionBlock_1h100_503",a7="_specialistSectionWithoutTaxonomies_1h100_509",s7="_softSectionSurface_1h100_514",o7="_stackedList_1h100_521",i7="_stackedListSpaced_1h100_526",c7="_checklistInputGroup_1h100_530",l7="_checklistRow_1h100_537",d7="_checklistRowDragging_1h100_546",u7="_checklistHandleBtn_1h100_550",p7="_checklistCheckboxBtn_1h100_573",f7="_checklistCheckboxBtnChecked_1h100_593",m7="_checklistItemText_1h100_598",h7="_checklistItemTextCompleted_1h100_606",g7="_checklistRemoveBtn_1h100_611",y7="_specialistChip_1h100_643",k7="_specialistChipActive_1h100_666",v7="_commentPanel_1h100_676",w7="_activitySidebarPanel_1h100_690",b7="_commentThread_1h100_698",S7="_activityTimelineRegion_1h100_702",A7="_activityLoadingThread_1h100_711",C7="_newActivityNotice_1h100_715",_7="_newActivityButton_1h100_723",I7="_emptyComments_1h100_767",T7="_activitySkeletonItem_1h100_781",x7="_activitySkeletonMeta_1h100_787",R7="_activitySkeletonBody_1h100_788",P7="_commentInputArea_1h100_912",E7="_commentInput_1h100_912",N7="_sendCommentBtn_1h100_955",j7="_taxonomyFieldsGrid_1h100_998",M7="_markdownPreviewContainer_1h100_1005",D7="_descriptionSurface_1h100_1010",gt={formNotice:s8,markdownPreview:o8,descriptionField:i8,descriptionImageStatus:c8,descriptionImageError:l8,taskFormLifecycle:d8,taskFormMetaDivider:u8,taskFormMetaGrid:p8,compactMetaGrid:f8,compactMetaSection:m8,compactMetaField:h8,compactMetaFieldHint:g8,workflowAssignmentField:y8,workflowAssignmentLabels:k8,workflowAssignmentControls:v8,workflowAssignmentSelector:w8,workflowAssignmentError:b8,workflowExecutionToggle:S8,workflowExecutionVersion:A8,workflowExecutionPanel:C8,workflowExecutionHeader:_8,workflowExecutionEyebrow:I8,workflowExecutionSummary:T8,workflowExecutionSpinner:x8,workflowExecutionSteps:R8,workflowExecutionStepCurrent:P8,workflowExecutionStepMarker:E8,workflowExecutionStepCompleted:N8,workflowExecutionStepState:j8,workflowExecutionStepBody:M8,workflowExecutionStepTitle:D8,workflowExecutionStepMeta:L8,workflowExecutionEmpty:O8,formFieldsetReset:B8,formLayoutWithSidebar:W8,formMainColumn:$8,activitySidebar:F8,activitySidebarHeader:U8,activitySidebarTitle:z8,taskFormDateRow:H8,taskFormDateLabel:V8,taskFormDateValue:G8,taskFormMetaStack:K8,taskFormMetaActor:q8,taskFormDateWarning:Y8,taskFormDateError:Z8,helpHeader:J8,helpClose:Q8,markdownHelp:X8,helpGrid:e7,helpGridItem:t7,settingsHint:r7,sectionBlock:n7,specialistSectionWithoutTaxonomies:a7,softSectionSurface:s7,stackedList:o7,stackedListSpaced:i7,checklistInputGroup:c7,checklistRow:l7,checklistRowDragging:d7,checklistHandleBtn:u7,checklistCheckboxBtn:p7,checklistCheckboxBtnChecked:f7,checklistItemText:m7,checklistItemTextCompleted:h7,checklistRemoveBtn:g7,specialistChip:y7,specialistChipActive:k7,commentPanel:v7,activitySidebarPanel:w7,commentThread:b7,activityTimelineRegion:S7,activityLoadingThread:A7,newActivityNotice:C7,newActivityButton:_7,emptyComments:I7,activitySkeletonItem:T7,activitySkeletonMeta:x7,activitySkeletonBody:R7,commentInputArea:P7,commentInput:E7,sendCommentBtn:N7,taxonomyFieldsGrid:j7,markdownPreviewContainer:M7,descriptionSurface:D7};function Qy({label:e,value:t,options:r,onChange:a,type:s="priority",hideLabel:i=!1,showSelectedLabel:l=!0}){const c=r.find(d=>String(d.value)===String(t));return n.jsxs("div",{className:x.field,children:[!i&&n.jsxs("div",{className:x.labelRow,children:[n.jsx("label",{className:x.label,children:e}),l&&c&&n.jsx("span",{className:x.levelLabel,style:{color:Jn(c.color)||(s==="priority"?`var(--priority-${t})`:s==="complexity"?`var(--complexity-${t})`:"var(--text-secondary)"),backgroundColor:(Jn(c.color)?`${Jn(c.color)}25`:void 0)||(s==="priority"?`color-mix(in srgb, var(--priority-${t}), transparent 85%)`:s==="complexity"?`color-mix(in srgb, var(--complexity-${t}), transparent 85%)`:"rgba(255,255,255,0.05)")},children:c.label})]}),n.jsx("div",{className:x.levelSelect,children:r.map((d,f)=>{const p=r.findIndex(y=>String(y.value)===String(t)),g=f<=p,h=String(d.value)===String(t);return n.jsx("button",{type:"button",className:`${x.levelOption} ${g?x.levelOptionFilled:""} ${g?x[`levelOption_${s}_${d.value}`]:""} ${h?x.levelOptionSelected:""}`,onClick:()=>a(d.value),title:d.label,style:{opacity:g?1:.15,backgroundColor:g?Jn(d.color)||(s==="priority"?`var(--priority-${d.value})`:s==="complexity"?`var(--complexity-${d.value})`:"var(--text-primary)"):void 0,color:g?s==="priority"&&String(d.value).toLowerCase()==="medium"?"black":"white":void 0,boxShadow:g&&(s==="priority"&&(String(d.value).toLowerCase()==="critical"||d.value===4)||s==="complexity"&&(String(d.value).toLowerCase()==="epic"||d.value===5))?`0 0 12px ${s==="priority"?"rgba(239, 68, 68, 0.6)":"rgba(217, 70, 239, 0.6)"}`:void 0}},String(d.value))})})]})}const nS=new Map;function L7(e){const t=e instanceof Date?e:new Date(e);return Number.isNaN(t.getTime())?null:t}function O7(e,t){const r=Object.entries(t).sort(([a],[s])=>a.localeCompare(s));return JSON.stringify([e,r])}function Xh(e,t,r){const a=L7(e);if(!a)return"";const s=r??fA(),i=O7(s,t);let l=nS.get(i);return l||(l=new Intl.DateTimeFormat(s,t),nS.set(i,l)),l.format(a)}function B7(e){return new Promise((t,r)=>{const a=new FileReader;a.onload=()=>t(String(a.result||"")),a.onerror=()=>r(a.error||new Error("Failed to read file")),a.readAsDataURL(e)})}async function dh(e,t){try{const a=await(typeof e.clone=="function"?e.clone():e).json().catch(()=>null),s=String(a?.error||a?.message||"").trim();if(s)return s}catch{}try{const a=(await(typeof e.clone=="function"?e.clone():e).text().catch(()=>"")).trim();if(a)return a}catch{}return t}async function W7(e,t){const r=String(t.workspaceId||"").trim(),a=String(t.ownerId||"").trim(),s={ownerType:t.ownerType,ownerId:a||null,taskId:t.ownerType==="task"&&a||null},i=globalThis.crypto?.randomUUID?.()||`context-upload-${Date.now()}-${Math.random().toString(16).slice(2)}`,l=()=>({"Content-Type":"application/json",...r?{"x-taskforce-workspace-id":r}:{},"x-taskforce-operation-id":i});let c=null,d=null;const f=await fetch("/api/taskforce/context-upload/init",{method:"POST",headers:l(),body:JSON.stringify({originalName:e.name,mimeType:e.type||"application/octet-stream",size:e.size,...s,workspaceId:r||null})});if(f.ok){const p=await f.json();if(p?.success&&typeof p?.uploadUrl=="string"&&typeof p?.path=="string"){let g=!1;try{const h=await fetch(p.uploadUrl,{method:String(p.method||"PUT"),headers:p.headers||{"Content-Type":e.type||"application/octet-stream"},body:e});if(!h.ok)d=await dh(h,`Upload failed for ${e.name}`);else{g=!0;const y=await fetch("/api/taskforce/context-upload/finalize",{method:"POST",headers:l(),body:JSON.stringify({relativePath:p.relativePath,mimeType:e.type||"application/octet-stream",originalName:e.name,size:e.size,...s,workspaceId:r||null})});if(!y.ok)throw new Error(await dh(y,`Upload failed for ${e.name}`));c=await y.json().catch(()=>null)}}catch(h){if(g)throw h;d=h instanceof Error?h.message:`Upload failed for ${e.name}`}}else p?.success&&typeof p?.path=="string"&&(c=p)}else d=await dh(f,`Upload failed for ${e.name}`);if(!c){const p=await B7(e),g=await fetch("/api/taskforce/context-upload",{method:"POST",headers:l(),body:JSON.stringify({file:p,originalName:e.name,...s,workspaceId:r||null})});if(!g.ok){const h=await dh(g,`Upload failed for ${e.name}`);throw new Error(d&&d!==h?`${h} (${d})`:h)}c=await g.json()}if(!c?.success||!c?.path)throw new Error(`Upload failed for ${e.name}`);return{path:c.path,fsPath:c.fsPath,caption:typeof c.caption=="string"&&c.caption.trim().length>0?c.caption:e.name,displayName:typeof c.displayName=="string"?c.displayName:void 0,originalFilename:typeof c.originalFilename=="string"?c.originalFilename:e.name,assetId:typeof c.assetId=="string"?c.assetId:void 0,referenceNumber:typeof c.referenceNumber=="number"?c.referenceNumber:null,referenceLabel:typeof c.referenceLabel=="string"?c.referenceLabel:void 0,taskId:t.ownerType==="task"&&typeof c.taskId=="string"?c.taskId:null,timestamp:typeof c.timestamp=="string"&&c.timestamp.trim().length>0?c.timestamp:new Date().toISOString()}}class bc extends Error{constructor(t,r){super(t),this.code=r,this.name="WorkflowManagerApiError"}}async function Yo(e,t,r){const a=new Headers(t?.headers||void 0);t?.body&&a.set("Content-Type","application/json");const s=String(r?.workspaceId||"").trim();s&&s!=="default"&&a.set("x-taskforce-workspace-id",s);const i=await ux(e,{credentials:"include",...t,headers:a},r?.apiBaseUrl),l=await i.json().catch(()=>({}));if(!i.ok||l.success===!1)throw new bc(String(l.error||`Workflow request failed (${i.status}).`),l.code);return l}async function $7(e){const t=await Yo("/api/taskforce/workflows",void 0,e);return Array.isArray(t.workflows)?t.workflows:[]}async function uh(e,t){return(await Yo(`/api/taskforce/tasks/${encodeURIComponent(e)}/workflow`,void 0,t)).assignment||null}async function F7(e,t){if(t?.runtimeMode!=="local"||!e.assignmentSnapshot)return e.taskSnapshot||null;try{return(await Yo(`/api/taskforce/workflow-executions/${encodeURIComponent(e.executionId)}/apply-cloud-state`,{method:"POST",body:JSON.stringify({assignment:e.assignmentSnapshot,taskAuthoritative:e.taskAuthoritative})},{workspaceId:t?.workspaceId})).task||null}catch{return null}}async function U7(e,t,r,a,s){const i=await Yo(`/api/taskforce/workflow-executions/${encodeURIComponent(e)}/complete-step?taskforceCloud=1`,{method:"POST",body:JSON.stringify({idempotencyKey:t,...a?{evidenceCommentId:a}:{},...s?{expectedStepId:s}:{}})},r);if(!i.result)throw new bc("The workflow step result was not returned.");let l=i.result.taskSnapshot||null;return i.result.assignmentSnapshot&&i.result.route!=="local-outbox"&&(l=await F7({executionId:e,taskId:i.result.execution.taskId,assignmentSnapshot:i.result.assignmentSnapshot,taskSnapshot:i.result.taskSnapshot,taskAuthoritative:i.result.taskAuthoritative},r)),i.result.taskSnapshot&&jN({workspaceId:r?.workspaceId,taskId:i.result.taskSnapshot.id,reason:"workflow-step",...l?{authoritativeTask:l}:{}}),i.result}async function aS(e,t,r){const a=await Yo(`/api/taskforce/tasks/${encodeURIComponent(e)}/workflow`,{method:"POST",body:JSON.stringify(t)},r);if(!a.assignment)throw new bc("The workflow assignment was not returned.");return a.assignment}async function z7(e,t,r){const a=await Yo(`/api/taskforce/tasks/${encodeURIComponent(e)}/workflow`,{method:"PUT",body:JSON.stringify(t)},r);if(!a.assignment)throw new bc("The workflow assignment was not returned.");return a.assignment}async function H7(e,t){await Yo(`/api/taskforce/tasks/${encodeURIComponent(e)}/workflow`,{method:"DELETE"},t)}async function DX(e){const t=await Yo(`/api/taskforce/workflows/${encodeURIComponent(e)}`);if(!t.workflow)throw new bc("Workflow details were not returned.");return t.workflow}async function LX(e){const t=await Yo("/api/taskforce/workflows",{method:"POST",body:JSON.stringify(e)});if(!t.workflow)throw new bc("The new workflow was not returned.");return t.workflow}async function OX(e,t){const r=await Yo(`/api/taskforce/workflows/${encodeURIComponent(e)}/draft`,{method:"PUT",body:JSON.stringify(t)});if(!r.workflow)throw new bc("The saved workflow draft was not returned.");return r.workflow}async function BX(e){const t=await Yo(`/api/taskforce/workflows/${encodeURIComponent(e)}/publish`,{method:"POST"});if(!t.workflow)throw new bc("The published workflow was not returned.");return t.workflow}async function WX(e){const t=await Yo(`/api/taskforce/workflows/${encodeURIComponent(e)}/draft`,{method:"POST"});if(!t.workflow)throw new bc("The new workflow draft was not returned.");return t.workflow}const Xy="__none__";function V7(e){return e.charAt(0).toUpperCase()+e.slice(1)}function G7({taskId:e,workspaceId:t,taskStatus:r,taskUpdatedAt:a,comments:s=[],assigneeOptions:i=[],currentActorId:l,apiBaseUrl:c,runtimeMode:d="local",disabled:f=!1,onActivatePendingWorkflow:p,onActiveOwnerChange:g}){const[h,y]=Q.useState([]),[k,v]=Q.useState(null),[C,S]=Q.useState(!0),[w,_]=Q.useState(!1),[M,R]=Q.useState(!1),[P,b]=Q.useState(!1),[$,I]=Q.useState(0),[E,K]=Q.useState(""),U=Q.useRef(0),L=Q.useRef(null),D=Q.useRef({taskId:e,revision:`${e}:${a||""}`}),ie=Q.useMemo(()=>({workspaceId:t,apiBaseUrl:c,runtimeMode:d}),[c,d,t]);Q.useEffect(()=>{const ce=++U.current;return S(!0),_(!1),R(!1),K(""),y([]),v(null),b(!1),I(0),L.current=null,Promise.allSettled([$7(ie),uh(e,ie)]).then(([pe,xe])=>{ce===U.current&&(pe.status==="fulfilled"&&y(pe.value.filter(N=>N.template.status==="active"&&!!N.latestPublishedVersion)),xe.status==="fulfilled"&&v(xe.value),xe.status==="rejected"?K(String(xe.reason?.message||"Unable to load workflow assignment.")):!xe.value&&pe.status==="rejected"&&K(String(pe.reason?.message||"Unable to load workflows.")),S(!1))}),()=>{U.current+=1}},[ie,e]);const H=k?.execution.taskId===e?k:null,be=H?["pending","running","paused"].includes(H.execution.status):!1,Z=be?H:null,me=H&&!h.some(({template:ce})=>ce.id===H.template.id)?[{template:H.template,draftVersionId:null,latestPublishedVersion:{id:H.version.id,versionNumber:H.version.versionNumber,publishedAt:H.version.publishedAt}},...h]:h,Ve=[...!H||be?[{value:Xy,label:"None"}]:[],...me.map(({template:ce})=>({value:ce.id,label:ce.name}))],Re=Z?.execution.status==="pending",je=!f&&!C&&!w&&(!Z||Re),ye=H?.template.id||Xy,ue=Q.useMemo(()=>[...H?.steps||[]].sort((ce,pe)=>ce.position-pe.position),[H?.steps]),ve=H?.execution.currentStepId&&ue.find(ce=>ce.id===H.execution.currentStepId)||null,Pe=H?.execution.currentStepId?ue.findIndex(ce=>ce.id===H.execution.currentStepId):-1,Le=H?.execution.status==="completed",se=Q.useMemo(()=>new Set((H?.events||[]).filter(ce=>ce.eventType==="step-completed"&&ce.stepId).map(ce=>ce.stepId)),[H?.events]),V=Z?.execution.status==="pending"?(ue.find(ce=>ce.isRequired)||ue[0])?.id:null,W=`task-workflow-execution-${e}`,z=C?"Loading...":E&&!H?"Unavailable":H?V7(H.execution.status):"Not assigned",fe=H?.version.versionNumber?`V${H.version.versionNumber}`:null,ke=z.replace(/\.+$/,""),Y=H?`Status: ${ke}${fe?`, ${fe}`:""}. ${P?"Hide":"View"} workflow execution.`:`Status: ${ke}.`,we=!f&&!M&&Z?.execution.status==="running"&&ve?.ownerType==="user"&&!!l&&ve.ownerId===l,q=Le&&h.find(({template:ce})=>ce.id===H?.template.id)||null,le=!!(!f&&!w&&q?.latestPublishedVersion);Q.useEffect(()=>{const ce=Z?.execution.id||null;if(!ce||Z?.execution.status!=="pending"||r!=="in-progress"||!p||L.current===ce)return;L.current=ce;const pe=U.current;_(!0),K(""),Promise.resolve(p()).then(async()=>{const xe=await uh(e,ie);if(pe!==U.current)return;if(xe?.execution.status==="pending")throw new Error("Workflow is still pending. Retry to start it.");const N=xe?.steps.find(X=>X.id===xe.execution.currentStepId);N?.ownerId&&g?.(N.ownerId),v(xe)}).catch(xe=>{pe===U.current&&(L.current=null,K(String(xe?.message||"Unable to start workflow.")))}).finally(()=>{pe===U.current&&_(!1)})},[$,Z,p,g,ie,e,r]);const $e=Q.useCallback(ce=>ce?Tf(ce,i):"Unassigned",[i]);Q.useEffect(()=>{D.current.taskId!==e&&(D.current={taskId:e,revision:`${e}:${a||""}`})},[e,a]),Q.useEffect(()=>{const ce=`${e}:${a||""}`;if(ce===D.current.revision||r!=="in-progress"||!Re)return;D.current={taskId:e,revision:ce};const pe=U.current;uh(e,ie).then(xe=>{pe===U.current&&v(xe)}).catch(xe=>{pe===U.current&&K(String(xe?.message||"Unable to refresh workflow assignment."))})},[Re,ie,e,r,a]),Q.useEffect(()=>{if(typeof window>"u")return;const ce=pe=>{const xe=pe.detail;if(xe?.reason!=="workflow-step")return;const N=String(xe.workspaceId||"").trim(),X=String(t||"").trim();if(X&&N!==X||String(xe.taskId||"").trim()!==e)return;const Te=++U.current;uh(e,ie).then(he=>{Te===U.current&&(v(he),K(""))}).catch(he=>{Te===U.current&&K(String(he?.message||"Unable to refresh workflow assignment."))})};return window.addEventListener(cd,ce),()=>window.removeEventListener(cd,ce)},[ie,e,t]);const re=async ce=>{const pe=String(ce);if(!je||pe===ye)return;const xe=U.current;_(!0),K("");try{if(pe===Xy){if(await H7(e,ie),xe!==U.current)return;v(null);return}const N=h.find(({template:he})=>he.id===pe),X=N?.latestPublishedVersion;if(!N||!X)return;const Ae={workflowTemplateId:N.template.id,workflowVersionId:X.id},Te=Z?await z7(e,Ae,ie):await aS(e,Ae,ie);if(xe!==U.current)return;v(Te)}catch(N){if(xe!==U.current)return;K(String(N?.message||"Unable to assign workflow."))}finally{xe===U.current&&_(!1)}},de=async()=>{if(!Z||!we)return;const ce=[...Z.events||[]].reverse().find(N=>N.eventType==="step-started"&&N.stepId===ve?.id)?.createdAt||Z.execution.startedAt||Z.execution.createdAt,pe=ve?.requiresCommentEvidence&&[...s].reverse().find(N=>N.author===l&&N.text.trim().length>0&&Date.parse(N.timestamp)>=Date.parse(ce))||null;if(ve?.requiresCommentEvidence&&!pe){K("Add a task comment for this workflow step before completing it.");return}const xe=U.current;R(!0),K("");try{const N=typeof crypto<"u"&&typeof crypto.randomUUID=="function"?crypto.randomUUID():`${Date.now()}-${Math.random().toString(36).slice(2)}`,X=await U7(Z.execution.id,N,ie,pe?.id,ve?.id);if(xe!==U.current)return;v(Ae=>Ae&&{...Ae,execution:X.execution,events:X.events})}catch(N){if(xe!==U.current)return;K(String(N?.message||"Unable to complete workflow step."))}finally{xe===U.current&&R(!1)}},He=async()=>{const ce=q?.latestPublishedVersion;if(!le||!q||!ce)return;const pe=U.current;_(!0),K("");try{const xe=await aS(e,{workflowTemplateId:q.template.id,workflowVersionId:ce.id},ie);if(pe!==U.current)return;v(xe)}catch(xe){if(pe!==U.current)return;K(String(xe?.message||"Unable to run workflow again."))}finally{pe===U.current&&_(!1)}};return n.jsxs("div",{className:`${x.field} ${gt.compactMetaField} ${gt.workflowAssignmentField}`,children:[n.jsxs("div",{className:gt.workflowAssignmentLabels,children:[n.jsx("label",{id:"task-workflow-label",className:x.label,children:"Workflow"}),n.jsx("span",{id:"task-workflow-status-label",className:x.label,children:"Status"})]}),n.jsxs("div",{className:gt.workflowAssignmentControls,children:[n.jsx(qo,{value:ye,options:Ve,onChange:ce=>{re(ce)},placeholder:C?"Loading workflows...":"None",ariaLabelledBy:"task-workflow-label",disabled:!je||Ve.length===1&&!Z,portalPanel:!0,panelMinWidth:280,panelAlign:"start",className:gt.workflowAssignmentSelector}),n.jsxs("button",{type:"button",className:gt.workflowExecutionToggle,onClick:()=>b(ce=>!ce),"aria-expanded":H?P:void 0,"aria-controls":H?W:void 0,"aria-label":Y,disabled:!H,children:[n.jsxs("span",{children:[z,fe?n.jsxs("span",{className:gt.workflowExecutionVersion,children:[" · ",fe]}):null]}),H?P?n.jsx(dd,{size:13,"aria-hidden":"true"}):n.jsx(sd,{size:13,"aria-hidden":"true"}):null]})]}),H&&P?n.jsxs("section",{id:W,className:gt.workflowExecutionPanel,"aria-label":"Workflow execution",children:[n.jsxs("div",{className:gt.workflowExecutionHeader,children:[n.jsxs("div",{children:[n.jsx("span",{className:gt.workflowExecutionEyebrow,children:"Workflow execution"}),n.jsx("strong",{children:H.version.name||H.template.name})]}),Le&&q?n.jsxs("button",{type:"button",className:"tf-button-secondary tf-button-compact",onClick:()=>{He()},disabled:!le,children:[w?n.jsx(Ln,{size:14,className:gt.workflowExecutionSpinner,"aria-hidden":"true"}):n.jsx(mi,{size:14,"aria-hidden":"true"}),"Run again"]}):null]}),n.jsxs("dl",{className:gt.workflowExecutionSummary,children:[n.jsxs("div",{children:[n.jsx("dt",{children:"Current step"}),n.jsx("dd",{children:Le?"Completed":ve?.name||(H.execution.status==="pending"?"Not started":"Not available")})]}),n.jsxs("div",{children:[n.jsx("dt",{children:"Owner"}),n.jsx("dd",{children:!Le&&ve?$e(ve.ownerId):"Unassigned"})]}),n.jsxs("div",{children:[n.jsx("dt",{children:"Version"}),n.jsx("dd",{children:H.version.versionNumber?`V${H.version.versionNumber}`:"Published"})]})]}),n.jsx("ol",{className:`${gt.workflowExecutionSteps} tf-scrollbar`,children:ue.map((ce,pe)=>{const xe=se.has(ce.id),N=!Le&&ce.id===H.execution.currentStepId,X=!xe&&!N&&Pe>=0&&pe<Pe,Ae=[xe?gt.workflowExecutionStepCompleted:"",N?gt.workflowExecutionStepCurrent:""].filter(Boolean).join(" ")||void 0;return n.jsxs("li",{className:Ae,"aria-current":N?"step":void 0,children:[n.jsx("span",{className:gt.workflowExecutionStepMarker,"aria-hidden":"true",children:xe?n.jsx(fT,{size:16}):N?n.jsx(mT,{size:17}):n.jsx(hT,{size:15})}),n.jsxs("span",{className:gt.workflowExecutionStepBody,children:[n.jsxs("span",{className:gt.workflowExecutionStepTitle,children:[n.jsx("span",{children:pe+1}),n.jsx("strong",{children:ce.name})]}),n.jsxs("span",{className:gt.workflowExecutionStepMeta,children:[$e(ce.ownerId)," · ",ce.isRequired?"Required":"Optional"]})]}),n.jsx("span",{className:gt.workflowExecutionStepState,children:xe?"Completed":X?"Skipped":N&&(we||M)?n.jsxs("button",{type:"button",className:"tf-button-secondary tf-button-compact",onClick:()=>{de()},disabled:M,children:[M?n.jsx(Ln,{size:14,className:gt.workflowExecutionSpinner,"aria-hidden":"true"}):n.jsx(hi,{size:14,"aria-hidden":"true"}),"Complete Step"]}):N?"Current":ce.id===V?"Starts here":"Upcoming"})]},ce.id)})}),ue.length===0?n.jsx("p",{className:gt.workflowExecutionEmpty,children:"No steps are available for this workflow version."}):null]}):null,E?n.jsxs("span",{className:gt.workflowAssignmentError,role:"alert",children:[E,Re&&r==="in-progress"&&p?n.jsx("button",{type:"button",className:"tf-button-secondary tf-button-compact",onClick:()=>I(ce=>ce+1),disabled:w,children:"Retry"}):null]}):null]})}const K7="_header_g17dz_1",q7="_title_g17dz_15",Y7="_actions_g17dz_24",Z7="_toggle_g17dz_30",ph={header:K7,title:q7,actions:Y7,toggle:Z7};function gf({label:e,count:t,showZeroCount:r=!1,actions:a,expanded:s,expandedTitle:i,collapsedTitle:l,onToggle:c,className:d="",controlsId:f}){const p=typeof t=="number"&&(r||t>0),g=s?dd:sd;return n.jsxs("div",{className:`${ph.header} ${d}`.trim(),children:[n.jsxs("span",{className:ph.title,children:[e,p?` (${t})`:""]}),a?n.jsx("span",{className:ph.actions,children:a}):null,n.jsx("button",{type:"button",className:`tf-control-icon ${ph.toggle}`.trim(),onClick:c,"aria-expanded":s,"aria-controls":f,"aria-label":s?i:l,title:s?i:l,children:n.jsx(g,{size:14,"aria-hidden":"true"})})]})}const J7="system:unverified-comment-import",v_="Imported comment",w_="This comment was recovered during synchronization, but its author could not be verified.";function b_(e){return String(e||"").trim().toLowerCase()===J7}const ek=280,Q7=48,X7=Q.lazy(()=>Po(()=>import("./EntityActivityTimeline-pJ2ZjZ-k.js"),__vite__mapDeps([0,1,2,3,4,5,6])).then(e=>({default:e.EntityActivityTimeline}))),e9=Q.lazy(()=>Po(()=>import("./TaskContextUpload-bl4fOOUz.js"),__vite__mapDeps([7,1,8,2,3,4,5,9])).then(e=>({default:e.TaskContextUpload})));function t9({count:e}){const t=Math.max(2,Math.min(e||3,4));return n.jsx("div",{className:`${gt.commentThread} ${gt.activityLoadingThread}`.trim(),"aria-busy":"true","aria-live":"polite","aria-label":"Loading activity",children:Array.from({length:t},(r,a)=>n.jsxs("div",{className:gt.activitySkeletonItem,children:[n.jsx("div",{className:gt.activitySkeletonMeta}),n.jsx("div",{className:gt.activitySkeletonBody})]},a))})}function r9({id:e,item:t,onToggle:r,onRemove:a}){const{attributes:s,listeners:i,setNodeRef:l,transform:c,transition:d,isDragging:f}=iv({id:e}),p={transform:dg.Transform.toString(c),transition:d,opacity:f?.88:1};return n.jsxs("div",{ref:l,style:p,className:`${gt.checklistRow} ${f?gt.checklistRowDragging:""}`.trim(),children:[n.jsx("button",{type:"button",className:gt.checklistHandleBtn,title:"Reorder checklist item","aria-label":"Reorder checklist item",...s,...i,children:n.jsx(ev,{size:14})}),n.jsx("button",{type:"button",className:`${gt.checklistCheckboxBtn} ${t.isCompleted?gt.checklistCheckboxBtnChecked:""}`.trim(),onClick:r,title:t.isCompleted?"Mark incomplete":"Mark complete","aria-label":t.isCompleted?"Mark checklist item incomplete":"Mark checklist item complete",children:t.isCompleted?n.jsx(hi,{size:14,strokeWidth:2.1}):null}),n.jsx("span",{className:`${gt.checklistItemText} ${t.isCompleted?gt.checklistItemTextCompleted:""}`.trim(),children:t.title}),n.jsx("button",{type:"button",className:gt.checklistRemoveBtn,onClick:a,title:"Remove checklist item","aria-label":"Remove checklist item",children:n.jsx(fo,{size:15,strokeWidth:1.9})})]})}function S_(e){const{editingTaskId:t,initialActivityEntryId:r,title:a,description:s,category:i,type:l,priority:c,complexity:d,manualComplexityEnabled:f=!1,assignee:p,scheduledDate:g,dueDate:h,checklistItems:y,comments:k,newCommentText:v,contextFiles:C,currentWorkspaceId:S,currentActorId:w,apiBaseUrl:_,runtimeMode:M="local",showImageReviews:R=!1,descriptionFocused:P,showMarkdownHelp:b,checklistEnabled:$=!0,formTaxonomies:I,onTaxonomyChange:E,onOpenSettings:K,categories:U,types:L,priorities:D,taxonomyDisplayLabels:ie,assigneeOptions:H,taxonomies:be,workstreams:Z=[],initiatives:me=[],copiedId:Ve,onTitleChange:Re,onTitleDraftChange:je,onDescriptionChange:ye,onDescriptionDraftChange:ue,onCategoryChange:ve,onTypeChange:Pe,onPriorityChange:Le,onComplexityChange:se,onAssigneeChange:V,onScheduledDateChange:W,onDueDateChange:z,onChecklistItemsChange:fe,onNewCommentTextChange:ke,onDescriptionFocusedChange:Y,onShowMarkdownHelpChange:we,onSubmit:q,onAddComment:le,onAddContextFile:$e,onRemoveContextFile:re,onUpdateContextCaption:de,onOpenContextImage:He,onCopyId:ce,onToggleInProgress:pe,onToggleReview:xe,onToggleComplete:N,onToggleCancel:X,onSetStatus:Ae,onArchiveTask:Te,onUnarchive:he,taskReferences:ot,currentTask:We,commentsEndRef:Xe}=e,ae=je||Re,G=ue||ye,Ie=hs(We),Fe=Q.useRef(null),it=Q.useRef(null),Me=Q.useRef(s),qe=Q.useRef(t),ge=`${String(S||"").trim()}\0${t||""}`,_e=Q.useRef(ge),Be=Q.useRef(0);_e.current!==ge&&(_e.current=ge,Be.current+=1);const[Ge,F]=Q.useState(!1),[Ne,Ce]=Q.useState(null);Q.useLayoutEffect(()=>{const J=qe.current!==t;Fe.current&&(J||document.activeElement!==Fe.current)&&(Fe.current.value=a),it.current&&(J||document.activeElement!==it.current)&&(it.current.value=s,Me.current=s),qe.current=t},[s,t,a]),Q.useEffect(()=>(F(!1),Ce(null),()=>{Be.current+=1}),[ge]);const ut=Q.useMemo(()=>{if(!He)return;const J=new Map;return C.forEach(Qe=>{if(typeof Qe=="string")return;const St=Nf(Qe);St&&J.set(St.toLowerCase(),Qe)}),{resolve:Qe=>J.get(Qe.toLowerCase())||null,activate:He}},[C,He]),mt=Q.useMemo(()=>lN(be,I),[be,I]),Ue=Q.useMemo(()=>{const J=U.find(Ft=>Ft.value===bu),Qe={value:bu,label:J?.label||ug,icon:J?.icon||"HelpCircle",color:J?.color||"var(--text-secondary)"},St=U.find(Ft=>Ft.value===i),at=U.filter(Ft=>!Ft.disabled||Ft.value===St?.value).filter(Ft=>Ft.value!==bu).map(Ft=>({value:Ft.value,label:Ft.disabled?`${Ft.label} (Legacy)`:Ft.label,icon:Ft.icon,color:Ft.color}));return[Qe,...at]},[U,i]),wt=Q.useMemo(()=>{const J=L.find(St=>St.value===l);return L.filter(St=>St.status!=="retired"||St.value===J?.value).map(St=>({value:St.value,label:St.status==="retired"?`${St.label} (Retired)`:St.label,icon:St.icon||"Box",color:St.color||"violet-500"}))},[L,l]),kt=J=>J&&Xh(J,{month:"short",day:"numeric",year:"numeric",hour:"2-digit",minute:"2-digit"})||null,rt=kt(We?.createdAt),Ht=kt(We?.updatedAt||We?.createdAt),lr=kt(We?.completedAt),rr=Q.useMemo(()=>{const J=new Date,Qe=J.getFullYear(),St=String(J.getMonth()+1).padStart(2,"0"),Xt=String(J.getDate()).padStart(2,"0");return`${Qe}-${St}-${Xt}`},[]),wr=!!(h&&g&&h<g),st=!!(h&&h<rr&&(!We||We.status!=="done"&&We.status!=="cancelled")),zt=y.filter(J=>J.isCompleted).length,[Lt,Mt]=Q.useState(""),[Ee,ct]=Q.useState(!0),[lt,Je]=Q.useState(!1),nt=Q.useRef(null),Ct=Q.useRef(null),Rt=!!We?.isArchived,Dt=!!We?.isDeleted,It=Rt||Dt,Qt=Q.useRef(null),ir=Q.useRef(null),dr=Q.useRef(null),sr=Q.useRef(null),pr=Q.useRef(null),Jr=Q.useRef(null),Tr=Q.useRef(null),br=Q.useRef(!0),[ur,Qr]=Q.useState(!1),Hr=Q.useRef(new Map),Gt=Q.useRef(void 0),bt=Q.useRef(0),gr=rv(Cf(nv,{activationConstraint:{distance:6}}));Q.useLayoutEffect(()=>{const J=Qt.current;if(!J)return;const Qe=Gt.current;if(Qe===t)return;Qe!==void 0&&Hr.current.set(Qe,bt.current);const St=Hr.current.get(t)??0;J.scrollTop=St,bt.current=St,Gt.current=t},[t]),Q.useLayoutEffect(()=>{ct(!0)},[t]),Q.useEffect(()=>{lt&&nt.current?.focus()},[lt]),Q.useEffect(()=>{Je(!1),Mt("")},[t]),Q.useEffect(()=>{Ee||(Je(!1),Mt(""))},[Ee]);const u=Q.useCallback(J=>{const Qe=J.currentTarget.scrollTop;bt.current=Qe,Hr.current.set(t,Qe)},[t]),ht=()=>{const J=Lt.trim();if(!J)return;const Qe=new Date().toISOString();fe([...y,{id:`checklist-draft-${Qe}-${y.length}`,taskId:t||"",title:J,isCompleted:!1,order:y.length,createdAt:Qe,updatedAt:Qe}]),Mt(""),Je(!1),window.requestAnimationFrame(()=>Ct.current?.focus())},yr=()=>{if(lt){nt.current?.focus();return}Ee||ct(!0),Je(!0)},Er=(J=!0)=>{Je(!1),Mt(""),J&&window.requestAnimationFrame(()=>Ct.current?.focus())},mn=async(J,Qe,St)=>{if(J.length===0||Ge)return;const Xt=Be.current,at=t,Ft=()=>Be.current===Xt&&_e.current===ge;F(!0),Ce(null);const Lr=[];let Nr=0,Rr=null;for(const Kt of J){if(Kt.size>10*1024*1024){Nr+=1,Rr="Images must be 10 MB or smaller.";continue}try{const Bn=await W7(Kt,{ownerType:"task",ownerId:at,workspaceId:S});if(!Ft())return;const Xn=Nf(Bn);if(!Xn)throw new Error("The uploaded image did not receive an image reference.");$e(Bn),nP({workspaceId:String(S||"").trim()||"default",ownerType:"task",ownerId:at,taskId:at,reason:"upload"}),Lr.push(Xn)}catch(Bn){Nr+=1,Rr=Bn instanceof Error?Bn.message:"The image could not be added."}}if(Ft()){if(Lr.length>0){const Kt=Me.current,Bn=Math.min(Qe,Kt.length),Xn=Math.min(Math.max(St,Bn),Kt.length),va=Kt.slice(0,Bn),Cr=Kt.slice(Xn),cn=va&&!/\s$/.test(va)?`
|
|
3
|
+
`:"",kn=Cr&&!/^\s/.test(Cr)?`
|
|
4
|
+
`:"",zn=`${cn}${Lr.join(`
|
|
5
|
+
`)}${kn}`,ea=`${va}${zn}${Cr}`,La=va.length+zn.length;Me.current=ea,it.current&&(it.current.value=ea),G(ea),ye(ea),window.requestAnimationFrame(()=>{it.current?.focus(),it.current?.setSelectionRange(La,La)})}if(Nr>0){const Kt=Lr.length>0?`${Nr} image${Nr===1?"":"s"} could not be added.`:Rr||(J.length===1?"The image could not be added.":"The images could not be added.");Ce(Kt)}F(!1)}},qt=J=>Array.from(J.items).filter(Qe=>Qe.kind==="file"&&/^(?:image\/(?:png|jpeg|webp))$/i.test(Qe.type)).map(Qe=>Qe.getAsFile()).filter(Qe=>!!Qe),Vr=J=>Array.from(J.files).filter(Qe=>/^(?:image\/(?:png|jpeg|webp))$/i.test(Qe.type)),Tt=J=>Array.from(J.items||[]).some(Qe=>Qe.kind==="file"&&/^(?:image\/(?:png|jpeg|webp))$/i.test(Qe.type))||Vr(J).length>0,Ut=J=>{Tt(J.dataTransfer)&&(J.preventDefault(),J.dataTransfer.dropEffect="copy")},fr=Q.useCallback(J=>{const{active:Qe,over:St}=J;if(!St||Qe.id===St.id)return;const Xt=y.findIndex(Nr=>Nr.id===Qe.id),at=y.findIndex(Nr=>Nr.id===St.id);if(Xt<0||at<0)return;const Ft=new Date().toISOString(),Lr=ZS(y,Xt,at).map((Nr,Rr)=>({...Nr,order:Rr,updatedAt:Ft}));fe(Lr)},[y,fe]),$t=J=>{const Qe=String(J||"").trim(),St=J.trim().replace(/^ai-profile-/i,"").replace(/[-_]+/g," ").replace(/\s+/g," ");return!St||St==="ai"||Qe.toLowerCase().startsWith("ai-profile-")?"AI Agent":`AI Agent - ${St.split(" ").map(at=>at.charAt(0).toUpperCase()+at.slice(1)).join(" ")}`},Mr=kA(H,p),Fr=Q.useMemo(()=>new Map(Mr.map(J=>[String(J.value),J])),[Mr]),Vt=Q.useMemo(()=>{const J=[We?.assigneeActor,We?.createdByActor].filter(Boolean);return new Map(J.map(Qe=>[String(Qe.id),Qe]))},[We?.assigneeActor,We?.createdByActor]),Dr=Q.useMemo(()=>new Map(Z.map(J=>[J.id,xu(J)||J.id])),[Z]),Ye=Q.useMemo(()=>new Map(me.map(J=>[J.id,IC(J)||J.id])),[me]),en=Q.useMemo(()=>Hv({activity:We?.activity,comments:k}),[k,We?.activity]),bn=(J,Qe)=>{const St=String(Qe||"").trim();if(St){if(J==="assignee")return Tf(St,Mr);if(J==="workstreamId")return Dr.get(St);if(J==="initiativeId")return Ye.get(St)}},tn=Q.useCallback((J,Qe,St)=>{if(St&&St.trim())return St.trim();const Xt=String(J||"").trim();if(!Xt)return Qe==="ai"?"AI Agent":_t("taskForm.you");const at=Vt.get(Xt);if(at?.label)return at.label;const Ft=Fr.get(Xt)||Fr.get(Xt.toLowerCase());return Ft?.label?Ft.label:Qe==="ai"?$t(Xt):Tf(Xt,Mr)||Xt},[Vt,Fr,$t,Mr]),ft=Q.useCallback(({actorId:J,actorType:Qe,actorProfile:St,fallbackKind:Xt})=>{const at=String(J||"").trim();if(b_(at))return{kind:"system",label:v_,ActorIcon:$S,description:w_};const Ft=at.toLowerCase(),Lr=Vt.get(at),Nr=Fr.get(at)||Fr.get(Ft),Rr=St||Lr||Nr||null,Kt=Qe==="system"?"system":Qe==="ai"||Rr?.kind==="ai"?"agent":Qe==="human"||Rr?.kind==="human"?"member":Nr?.kind==="agent"?"agent":Nr?.kind==="member"?"member":Xt||(Ft===""||Ft==="user"||Ft==="human"?"member":"agent"),Bn=Kt==="system"?"System":tn(at,Kt==="agent"?"ai":"human",Rr?.label||null),Xn=Rr?.color,va=String(Rr?.icon||(Kt==="agent"?"Bot":Kt==="member"?"User":"ClipboardList")),Cr=Ru[va]||(Kt==="agent"?Yl:Kt==="member"?wu:FS);return{kind:Kt,label:Bn,color:Xn,ActorIcon:Cr,isCurrentActorHint:Kt==="member"&&(Ft===""||Ft==="user"||Ft==="human")}},[Vt,Fr,tn]),rn=Q.useMemo(()=>{const J=en[en.length-1];if(!J)return null;if(J.type==="comment"){const St=J.comment;return tn(St.author,St.actor?.kind==="ai"?"ai":St.actor?.kind==="human"?"human":null,St.actor?.label||null)}const Qe=J.event;return tn(Qe.actor,Qe.actorType,Qe.actorProfile?.label||null)},[tn,en]),Nt=Q.useMemo(()=>{if(!We?.completedAt)return null;for(const Qe of en){if(Qe.type!=="event")continue;const St=Qe.event,Xt=St.details?.changes?.status?.to;if(Xt==="done"||Xt==="cancelled")return tn(St.actor,St.actorType,St.actorProfile?.label||null)}return rn},[We?.completedAt,rn,tn,en]),or=We?.createdByActor?.label||tn(We?.createdBy||null,We?.createdByActor?.kind==="ai"?"ai":We?.createdByActor?.kind==="human"?"human":null,We?.createdByActor?.label||null),xr=rn,hn=en.length,ys=en.filter(J=>J.type==="comment").length,Nn=en[0]?.id||null,Sn=en[hn-1]?.id||null,kr=String(r||"").trim(),cr=t&&kr?`${t}\0${kr}`:null,Wr=Q.useCallback(J=>({taskId:t,count:hn,firstItemId:Nn,lastItemId:Sn,scrollHeight:J.scrollHeight,scrollTop:J.scrollTop}),[hn,t,Nn,Sn]),on=Q.useCallback(()=>{const J=ir.current;J&&(J.scrollTop=J.scrollHeight,br.current=!0,Qr(!1),Tr.current=Wr(J))},[Wr]),dt=Q.useCallback(()=>{const J=ir.current,Qe=dr.current;return!J||!Qe||!cr||sr.current===cr?!1:(Qe.scrollIntoView?.({block:"center",inline:"nearest"}),Qe.focus({preventScroll:!0}),br.current=!1,Qr(!1),sr.current=cr,Tr.current=Wr(J),!0)},[cr,Wr]),Un=Q.useCallback(J=>{dr.current=J,J&&dt()},[dt]),Tn=Q.useCallback(J=>{Jr.current?.(J.currentTarget)},[]),jn=Q.useCallback(J=>{const St=J.scrollHeight-J.scrollTop-J.clientHeight<=Q7;br.current=St,St&&Qr(!1),Tr.current=Wr(J)},[Wr]);Q.useLayoutEffect(()=>{Jr.current=jn},[jn]);const an=Q.useCallback(J=>{if(pr.current?.disconnect(),pr.current=null,ir.current=J,!!J&&(cr&&sr.current!==cr?br.current=!1:(J.scrollTop=J.scrollHeight,br.current=!0),Qr(!1),typeof ResizeObserver<"u")){const Qe=new ResizeObserver(()=>{const St=ir.current;St&&Jr.current?.(St)});Qe.observe(J),pr.current=Qe}},[cr,t]);Q.useLayoutEffect(()=>{sr.current=null},[cr]),Q.useLayoutEffect(()=>{if(!t)return;const J=ir.current;if(!J)return;const Qe=Tr.current,St=Qe?.taskId!==t,Xt=!!(Qe&&hn>Qe.count),at=!!(Qe&&Xt&&Qe.lastItemId===Sn&&Qe.firstItemId!==Nn);if(cr&&dt()){Tr.current=Wr(J);return}St||br.current?on():at&&Qe?J.scrollTop=Qe.scrollTop+(J.scrollHeight-Qe.scrollHeight):Xt&&Qr(!0),Tr.current=Wr(J);const Ft=window.requestAnimationFrame(()=>{St||br.current?on():Tr.current=Wr(J)});return()=>window.cancelAnimationFrame(Ft)},[hn,cr,Wr,t,Nn,Sn,on,dt]);const Ds=Q.useCallback(()=>{on(),le()},[le,on]),da=n.jsxs("aside",{className:gt.activitySidebar,"aria-label":_t("taskForm.commentsSectionTitle"),children:[n.jsx("div",{className:gt.activitySidebarHeader,children:n.jsxs("h2",{className:gt.activitySidebarTitle,children:[_t("taskForm.commentsSectionTitle")," (",ys,")"]})}),n.jsxs("div",{className:`${gt.commentPanel} ${gt.activitySidebarPanel} tf-surface-panel`.trim(),children:[n.jsxs("div",{className:gt.activityTimelineRegion,children:[n.jsx(Q.Suspense,{fallback:n.jsx(t9,{count:hn}),children:n.jsx(X7,{activity:We?.activity,comments:k,formatFieldValue:bn,resolveActorPresentation:ft,currentActorId:w,taskReferences:ot,emptyMessage:_t(t?"taskForm.noComments":"taskForm.noActivity"),listClassName:gt.commentThread,emptyClassName:gt.emptyComments,listRef:an,endRef:Xe,onScroll:Tn,targetEntryId:kr,targetEntryRef:Un})}),ur?n.jsx("div",{className:gt.newActivityNotice,role:"status","aria-live":"polite",children:n.jsxs("button",{type:"button",className:gt.newActivityButton,onClick:on,"aria-label":_t("taskForm.newActivityAriaLabel"),children:[n.jsx(Xk,{size:14,"aria-hidden":"true"}),n.jsx("span",{children:_t("taskForm.newActivity")})]})}):null]}),n.jsxs("div",{className:gt.commentInputArea,children:[n.jsx("textarea",{className:`${gt.commentInput} tf-field-shell`,placeholder:t?_t("taskForm.commentPlaceholder"):"Comments become available after saving",value:v,onChange:J=>ke(J.target.value),disabled:!t||It,onKeyDown:J=>{J.key==="Enter"&&!J.shiftKey&&(J.preventDefault(),Ds())},rows:3}),n.jsx("button",{type:"button",className:`${gt.sendCommentBtn} tf-control-icon`,onClick:Ds,disabled:!t||It||!v.trim(),"aria-label":"Send comment",title:"Send comment",children:n.jsx(gT,{size:16,"aria-hidden":"true"})})]})]})]});return n.jsxs("form",{ref:Qt,onSubmit:q,onScroll:u,className:`${x.form} ${x.appScrollbar} tf-scrollbar`,children:[It&&n.jsx("div",{className:`${gt.formNotice} tf-text-helper`,children:Dt?"Deleted tasks are read-only. Restore the task to make changes.":"Archived tasks are read-only. Unarchive the task to make changes."}),n.jsxs("div",{className:gt.formLayoutWithSidebar,children:[n.jsx("fieldset",{disabled:It,className:gt.formFieldsetReset,children:n.jsxs("div",{className:gt.formMainColumn,children:[n.jsxs("div",{className:x.field,children:[n.jsx("label",{className:x.label,children:"Title"}),n.jsx("input",{ref:Fe,type:"text",defaultValue:a,onChange:J=>{const Qe=J.target.value;ae(Qe)},onBlur:J=>{J.currentTarget.value!==a&&Re(J.currentTarget.value)},placeholder:"What needs to be done?",className:x.input,required:!0,maxLength:255,autoFocus:!0})]}),n.jsxs("div",{className:`${x.field} ${gt.descriptionField}`,children:[n.jsxs("div",{className:x.labelRow,children:[n.jsx("label",{className:x.label,children:"Description"}),n.jsx("button",{type:"button",className:x.helpLink,onClick:()=>we(!b),title:"Markdown Help",tabIndex:-1,children:n.jsx(ad,{size:14})})]}),b&&n.jsxs("div",{className:gt.markdownHelp,children:[n.jsxs("div",{className:gt.helpHeader,children:[n.jsx("span",{children:"Markdown Guide"}),n.jsx("button",{onClick:()=>we(!1),className:gt.helpClose,children:n.jsx(fo,{size:12})})]}),n.jsxs("div",{className:gt.helpGrid,children:[n.jsx("div",{children:n.jsx("code",{children:"**bold**"})}),n.jsx("div",{children:n.jsx("code",{children:"_italic_"})}),n.jsx("div",{children:n.jsx("code",{children:"- list"})}),n.jsx("div",{children:n.jsx("code",{children:"1. list"})}),n.jsx("div",{className:gt.helpGridItem,children:n.jsx("code",{children:"`inline code`"})}),n.jsxs("div",{className:gt.helpGridItem,children:[n.jsx("code",{children:"```"}),n.jsx("br",{}),n.jsx("code",{children:"code block"}),n.jsx("br",{}),n.jsx("code",{children:"```"})]}),n.jsx("div",{children:n.jsx("code",{children:"[link](url)"})})]})]}),P||!s?n.jsx("textarea",{ref:it,className:`${x.textarea} ${gt.descriptionSurface}`,placeholder:"What needs to be done? (Markdown supported)",defaultValue:s,onChange:J=>{const Qe=J.target.value;Me.current=Qe,G(Qe)},onFocus:()=>Y(!0),onBlur:J=>{J.currentTarget.value!==s&&ye(J.currentTarget.value),Y(!1)},onPaste:J=>{const Qe=qt(J.clipboardData);if(Qe.length===0)return;J.preventDefault();const St=J.currentTarget;mn(Qe,St.selectionStart,St.selectionEnd)},onDragOver:Ut,onDrop:J=>{const Qe=Vr(J.dataTransfer);if(Qe.length===0)return;J.preventDefault(),J.stopPropagation();const St=J.currentTarget;mn(Qe,St.selectionStart,St.selectionEnd)},rows:9,autoFocus:P}):n.jsx("div",{className:`${x.textarea} ${gt.descriptionSurface} ${gt.markdownPreview} ${gt.markdownPreviewContainer}`,onClick:()=>Y(!0),onDragOver:Ut,onDrop:J=>{const Qe=Vr(J.dataTransfer);Qe.length!==0&&(J.preventDefault(),J.stopPropagation(),Y(!0),mn(Qe,s.length,s.length))},children:n.jsx(Sg,{variant:"detail",taskReferences:ot,imageReferences:ut,children:s})}),Ge&&n.jsx("div",{className:gt.descriptionImageStatus,role:"status",children:"Adding image to Context…"}),Ne&&n.jsx("div",{className:gt.descriptionImageError,role:"alert",children:Ne})]}),n.jsxs("div",{className:gt.compactMetaSection,children:[n.jsxs("div",{className:gt.compactMetaGrid,children:[n.jsxs("div",{className:`${x.field} ${gt.compactMetaField}`,children:[n.jsx("label",{id:"category-label",className:x.label,children:ie?.category||"Category"}),n.jsx(qo,{value:i,options:Ue,onChange:J=>ve(String(J)),required:!0,ariaLabelledBy:"category-label",portalPanel:!0,panelMinWidth:ek,panelAlign:"start"})]}),n.jsxs("div",{className:`${x.field} ${gt.compactMetaField}`,children:[n.jsx("label",{id:"type-label",className:x.label,children:ie?.type||"Type"}),n.jsx(qo,{value:l,options:wt,onChange:J=>Pe(String(J)),ariaLabelledBy:"type-label",portalPanel:!0,panelMinWidth:ek,panelAlign:"start"})]}),n.jsxs("div",{className:`${x.field} ${gt.compactMetaField}`,children:[n.jsx("label",{htmlFor:"task-form-scheduled-date",className:x.label,children:_t("taskForm.scheduledLabel")}),n.jsx("input",{id:"task-form-scheduled-date",type:"date",value:g,onChange:J=>W(J.target.value),className:`${x.input} ${x.taskFormDateInput}`})]}),n.jsxs("div",{className:`${x.field} ${gt.compactMetaField}`,children:[n.jsx("label",{id:"assignee-label",className:x.label,children:"Assigned To"}),n.jsx(qo,{value:p||"unassigned",options:Mr,onChange:J=>V(String(J)),ariaLabelledBy:"assignee-label",portalPanel:!0,panelMinWidth:ek,panelAlign:"start",searchable:!0,searchPlaceholder:"Search assignees...",noResultsText:"No assignees found.",renderOptionContent:J=>{const Qe=Fr.get(String(J.value));return Qe?n.jsx(ju,{option:Qe}):J.label}})]}),n.jsx("div",{className:gt.compactMetaField,children:n.jsx(Qy,{label:ie?.priority||"Priority",options:D,value:c,onChange:Le,type:"priority",showSelectedLabel:!1})}),n.jsxs("div",{className:`${x.field} ${gt.compactMetaField}`,children:[n.jsx("label",{htmlFor:"task-form-due-date",className:x.label,children:_t("taskForm.dueLabel")}),n.jsx("input",{id:"task-form-due-date",type:"date",value:h,onChange:J=>z(J.target.value),className:`${x.input} ${x.taskFormDateInput}`}),wr&&n.jsx("span",{className:`${gt.taskFormDateWarning} ${gt.compactMetaFieldHint}`,children:_t("taskForm.dueBeforeScheduled")}),st&&n.jsx("span",{className:`${gt.taskFormDateError} ${gt.compactMetaFieldHint}`,children:_t("taskForm.overdue")})]}),f&&n.jsx("div",{className:gt.compactMetaField,children:n.jsx(Qy,{label:"Complexity",options:[{value:1,label:"Tiny",color:"#10b981",icon:"Gauge"},{value:2,label:"Low",color:"#14b8a6",icon:"Gauge"},{value:3,label:"Medium",color:"#3b82f6",icon:"Gauge"},{value:4,label:"High",color:"#8b5cf6",icon:"Gauge"},{value:5,label:"Epic",color:"#d946ef",icon:"Gauge"}],value:d,onChange:se,type:"general"})})]}),t&&n.jsx(G7,{taskId:t,workspaceId:S,taskStatus:We?.status,taskUpdatedAt:We?.updatedAt,comments:k,assigneeOptions:Mr,currentActorId:w,apiBaseUrl:_,runtimeMode:M,disabled:!!(We?.isArchived||We?.isDeleted),onActivatePendingWorkflow:We&&Ae?()=>Ae(We,"in-progress",{allowSameStatus:!0}):void 0,onActiveOwnerChange:V})]}),n.jsxs("div",{className:gt.sectionBlock,children:[mt.length>0&&n.jsx("div",{className:gt.taxonomyFieldsGrid,children:mt.map(J=>{const Qe=I[J.id],St=Array.isArray(Qe)?Qe.map(at=>String(at)):Qe!=null&&Qe!==""?[String(Qe)]:[],Xt=J.options.filter(at=>at.status!=="retired"||St.includes(String(at.value)));return n.jsxs("div",{className:x.field,children:[n.jsx("label",{className:x.label,children:J.label}),J.description&&n.jsx("div",{className:`${gt.settingsHint} tf-text-helper`,children:J.description}),J.widgetType==="level"?n.jsx(Qy,{label:J.label,options:Xt.map(at=>({...at,label:at.status==="retired"?`${at.label} (Retired)`:at.label})),value:I[J.id]||"",onChange:at=>E(J.id,at),type:"general",hideLabel:!0}):J.multiSelect?n.jsx("div",{className:`${x.dropdownList} ${gt.softSectionSurface}`,children:Xt.map(at=>{const Ft=String(at.value),Lr=St.includes(Ft);return n.jsxs("button",{type:"button",className:`${gt.specialistChip} ${Lr?gt.specialistChipActive:""}`,onClick:()=>{const Nr=Lr?St.filter(Rr=>Rr!==Ft):[...St,Ft];E(J.id,Nr)},title:Lr?"Click to remove":"Click to add",children:[Lr&&n.jsx(hi,{size:12}),at.status==="retired"?`${at.label} (Retired)`:at.label]},Ft)})}):n.jsxs("div",{className:x.fieldIconWrapper,style:{"--field-color":"var(--text-primary)","--field-border":"rgba(255, 255, 255, 0.1)","--field-bg":"rgba(255, 255, 255, 0.02)"},children:[(()=>{const at=J.options.find(Nr=>String(Nr.value)===String(I[J.id])),Ft=at?.icon&&To[at.icon]?To[at.icon]:ad,Lr=at?.color||"var(--text-secondary)";return n.jsx("div",{className:x.fieldIcon,style:{color:Jn(Lr)},children:n.jsx(Ft,{size:16})})})(),n.jsxs("select",{value:I[J.id]||"",onChange:at=>E(J.id,at.target.value),className:`${x.select} ${x.field_dynamic}`,required:J.isRequired,children:[n.jsxs("option",{value:"",children:["Select ",J.label,"..."]}),Xt.map(at=>n.jsx("option",{value:at.value,children:at.status==="retired"?`${at.label} (Retired)`:at.label},at.value))]})]})]},J.id)})}),$&&n.jsxs("div",{className:`${x.specialistSection} ${mt.length===0?gt.specialistSectionWithoutTaxonomies:""}`.trim(),children:[n.jsx(gf,{label:`Checklist${y.length>0?` (${zt}/${y.length})`:""}`,expanded:Ee,expandedTitle:"Hide checklist",collapsedTitle:"Show checklist",onToggle:()=>{const J=!Ee;ct(J),J||Er(!1)},actions:n.jsx("div",{className:x.contextMenuControl,children:n.jsx("button",{ref:Ct,type:"button",className:"tf-control-icon","aria-label":"Add checklist item",title:"Add checklist item","aria-expanded":lt,onClick:yr,children:n.jsx(Ko,{size:14,"aria-hidden":"true"})})})}),Ee&&(lt||y.length>0)&&n.jsxs("div",{className:`${x.dropdownList} ${gt.stackedList} ${gt.stackedListSpaced}`,children:[lt&&n.jsxs("div",{className:`${x.pathInputGroup} ${gt.checklistInputGroup}`,children:[n.jsx("input",{ref:nt,type:"text",className:x.input,placeholder:"Add checklist item",value:Lt,onChange:J=>Mt(J.target.value),onKeyDown:J=>{J.key==="Enter"&&(J.preventDefault(),J.stopPropagation(),ht()),J.key==="Escape"&&(J.preventDefault(),J.stopPropagation(),Er())}}),n.jsx("button",{type:"button",className:"tf-control-icon tf-control-icon-compact",onClick:ht,disabled:!Lt.trim(),"aria-label":"Confirm checklist item",title:"Add checklist item",children:n.jsx(hi,{size:14,"aria-hidden":"true"})}),n.jsx("button",{type:"button",className:"tf-control-icon tf-control-icon-compact",onClick:()=>Er(),"aria-label":"Cancel checklist item",title:"Cancel",children:n.jsx(fo,{size:14,"aria-hidden":"true"})})]}),y.length>0&&n.jsx(av,{sensors:gr,collisionDetection:JS,onDragEnd:fr,children:n.jsx(sv,{items:y.map(J=>J.id),strategy:ov,children:y.map((J,Qe)=>n.jsx(r9,{id:J.id||`checklist-${Qe}`,item:J,onToggle:()=>{const St=new Date().toISOString();fe(y.map((Xt,at)=>at===Qe?{...Xt,isCompleted:!Xt.isCompleted,updatedAt:St}:Xt))},onRemove:()=>fe(y.filter((St,Xt)=>Xt!==Qe).map((St,Xt)=>({...St,order:Xt})))},J.id||`checklist-${Qe}`))})})]})]})]}),n.jsxs("div",{children:[n.jsx(Q.Suspense,{fallback:null,children:n.jsx(e9,{taskId:t,taskReferenceLabel:Ie,workspaceId:S,apiBaseUrl:_,showImageReviews:R&&!!We,contextFiles:C,onAddContextFile:$e,onRemoveContextFile:re,onUpdateContextCaption:de})}),n.jsx("div",{className:`${gt.taskFormLifecycle} ${gt.taskFormMetaDivider}`,children:n.jsx("div",{className:gt.taskFormMetaGrid,children:We&&n.jsxs(n.Fragment,{children:[n.jsxs("div",{className:gt.taskFormDateRow,children:[n.jsx("span",{className:gt.taskFormDateLabel,children:_t("taskForm.createdLabel")}),n.jsxs("span",{className:gt.taskFormMetaStack,children:[n.jsx("span",{className:gt.taskFormDateValue,children:rt||_t("taskForm.emptyValue")}),n.jsx("span",{className:gt.taskFormMetaActor,children:or?`by ${or}`:_t("taskForm.emptyValue")})]})]}),n.jsxs("div",{className:gt.taskFormDateRow,children:[n.jsx("span",{className:gt.taskFormDateLabel,children:_t("taskForm.updatedLabel")}),n.jsxs("span",{className:gt.taskFormMetaStack,children:[n.jsx("span",{className:gt.taskFormDateValue,children:Ht||_t("taskForm.emptyValue")}),n.jsx("span",{className:gt.taskFormMetaActor,children:xr?`by ${xr}`:_t("taskForm.emptyValue")})]})]}),n.jsxs("div",{className:gt.taskFormDateRow,children:[n.jsx("span",{className:gt.taskFormDateLabel,children:_t("taskForm.completedLabel")}),n.jsxs("span",{className:gt.taskFormMetaStack,children:[n.jsx("span",{className:gt.taskFormDateValue,children:lr||_t("taskForm.emptyValue")}),n.jsx("span",{className:gt.taskFormMetaActor,children:Nt?`by ${Nt}`:_t("taskForm.emptyValue")})]})]})]})})})]})]})}),da]})]})}function vu({ariaExpanded:e,ariaLabel:t,children:r,disabled:a=!1,onClick:s,title:i}){return n.jsx("button",{type:"button",className:`${x.referenceBadge} ${x.taskHierarchyActionBtn}`,onClick:s,disabled:a,title:i,"aria-label":t,"aria-expanded":e,children:r})}function A_({editingTaskId:e,loading:t,autoSaveState:r="idle",title:a,status:s="task",onStatusChange:i,showCreateSubmit:l=!0,handleSubmit:c,handleCopyId:d,copiedId:f,tasks:p,currentTask:g,currentTaskWorkstream:h,currentTaskInitiative:y,workstreams:k=[],onWorkstreamInputChange:v,onSetWorkstreamForCurrentTask:C,handleToggleInProgress:S,handleToggleReview:w,handleToggleComplete:_,handleToggleCancel:M,handleSetStatus:R,handleArchiveTask:P,handleUnarchiveTask:b,handleRestoreDeletedTask:$,handlePermanentlyDeleteDeletedTask:I,onAskAgent:E}){const K=g??(e&&p.find(ve=>ve.id===e)||null),U=!!K?.isArchived,L=!!K?.isDeleted,D=Q.useMemo(()=>{if(!L||!K?.deletedExpiresAt)return"";const ve=new Date(K.deletedExpiresAt);return Number.isNaN(ve.getTime())?"":`Trash expires ${ve.toLocaleString()}`},[K?.deletedExpiresAt,L]),ie=uv(K),H=ie.label||(ie.isProvisional?"Pending":""),be=ie.isProvisional,Z=!!ie.label,me=h?xu(h)||h.id:"",Ve=y?fs(y)||y.id:"",Re=Q.useCallback(ve=>{v?.(xu(ve)||ve.id),e&&C?.(ve.id)},[e,C,v]),je=Q.useCallback(()=>{v?.(""),e&&C?.(null)},[e,C,v]),ye=h?n.jsx(vu,{onClick:je,disabled:t||U||L,title:"Unlink task from workstream",ariaLabel:"Unlink task from workstream",children:n.jsx(pf,{size:13})}):null,ue=n.jsx("div",{className:x.taskHierarchyHeader,children:n.jsxs("div",{className:x.taskHierarchyBadgeRow,children:[y?n.jsx("span",{className:x.taskHierarchySegment,children:n.jsx(Su,{copied:f===Ve,onClick:ve=>d(ve,Ve),disabled:t,title:y.title,ariaLabel:`Copy initiative reference ${Ve}: ${y.title}`,label:Ve})}):null,h?n.jsxs("span",{className:x.taskHierarchySegment,children:[y?n.jsx("span",{className:x.taskHierarchyDivider,children:"/"}):null,n.jsx(Su,{copied:f===me,onClick:ve=>d(ve,me),disabled:t,title:h.title,ariaLabel:`Copy workstream reference ${me}: ${h.title}`,label:me})]}):n.jsx(g_,{workstreams:k,onSelect:Re,disabled:t||U||L}),!H&&ye?n.jsxs("span",{className:x.taskHierarchySegment,children:[n.jsx("span",{className:x.taskHierarchyDivider,children:"/"}),ye]}):null,H?n.jsxs("span",{className:x.taskHierarchySegment,children:[h?n.jsx("span",{className:x.taskHierarchyDivider,children:"/"}):null,ye,n.jsx(Su,{copied:Z&&f===ie.label,onClick:ve=>d(ve,ie.label),disabled:t||!Z,title:be?"Temporary identifier — replaced after synchronization.":_t("actionHeader.copyTaskIdTitle"),ariaLabel:be?`Copy temporary task reference ${H}`:void 0,label:H,provisional:be})]}):null,D?n.jsx("span",{className:x.taskHierarchyMeta,title:"Trash items are permanently deleted 90 days after deletion.",children:D}):null]})});return n.jsxs("div",{className:x.stickyActionHeader,children:[ue,e?n.jsxs(n.Fragment,{children:[n.jsx("div",{className:x.taskSaveStatusCenter,children:n.jsx("div",{className:`${x.taskSaveStatus} ${r==="error"?x.taskSaveStatusError:""}`,"aria-live":"polite",children:r==="saving"?n.jsxs(n.Fragment,{children:[n.jsx(Ln,{size:14,className:x.spinner}),n.jsx("span",{children:"Saving…"})]}):r==="saved"?n.jsx("span",{children:"Saved"}):r==="error"?n.jsx("span",{children:"Save failed"}):null})}),n.jsxs("div",{className:x.editActionsGroup,children:[E&&K?n.jsx("button",{type:"button",className:"tf-control-icon",onClick:()=>E(K),disabled:t,title:"Ask a Taskforce Agent about this task","aria-label":"Ask a Taskforce Agent about this task",children:n.jsx(Yl,{size:16})}):null,L&&K?.deletedRecordId?n.jsxs(n.Fragment,{children:[$&&n.jsx("button",{type:"button",className:x.actionBtn,onClick:()=>$(K.deletedRecordId||""),disabled:t,title:"Restore deleted task","aria-label":"Restore deleted task",children:n.jsx(mi,{size:16})}),I&&n.jsx("button",{type:"button",className:`${x.actionBtn} ${x.deleteBtn}`,onClick:()=>I(K.deletedRecordId||""),disabled:t,title:"Permanently delete deleted task","aria-label":"Permanently delete deleted task",children:n.jsx(Lf,{size:16})})]}):n.jsx(Yh,{task:K,disabled:t,statusDisabled:t||U,archiveActionMode:U?"unarchive":"auto",onSetStatus:(ve,Pe)=>{if(R){R(ve,Pe);return}if(Pe==="in-progress"){S(ve);return}if(Pe==="review"){w(ve);return}if(Pe==="done"){_(ve);return}Pe==="cancelled"&&M(ve)},onArchiveTask:P,onUnarchiveTask:ve=>b?.(ve.id)})]})]}):n.jsxs(n.Fragment,{children:[n.jsx("div",{className:x.taskSaveStatusCenter}),n.jsxs("div",{className:x.editActionsGroup,children:[n.jsx(Yh,{status:s,disabled:t,archiveActionMode:"none",onStatusChange:i}),l?n.jsxs("button",{type:"button",onClick:ve=>c(ve),disabled:t||!a.trim(),className:x.primaryUpdateBtn,title:_t("actionHeader.addTaskTitle"),children:[t?n.jsx(Ln,{size:16,className:x.spinner}):n.jsx(Ko,{size:16}),_t("actionHeader.addTask")]}):null]})]})]})}function n9(e={x:0,y:0}){const[t,r]=o.useState(e),[a,s]=o.useState(!1),[i,l]=o.useState({x:0,y:0}),[c,d]=o.useState(0),f=o.useRef(null),p=o.useCallback(y=>{const k=y.target;if(!(k.closest("button")||k.closest("input")||k.closest("select")||k.closest("textarea")||k.closest('[role="button"]')||k.closest(".no-drag"))){if(f.current){const v=f.current.getBoundingClientRect();d(v.top-t.y)}s(!0),l({x:y.clientX-t.x,y:y.clientY-t.y})}},[t]),g=o.useCallback(y=>{if(a){let k=y.clientX-i.x,v=y.clientY-i.y;v<-c&&(v=-c),r({x:k,y:v})}},[a,i,c]),h=o.useCallback(()=>{s(!1)},[]);return o.useEffect(()=>(a?(window.addEventListener("mousemove",g),window.addEventListener("mouseup",h)):(window.removeEventListener("mousemove",g),window.removeEventListener("mouseup",h)),()=>{window.removeEventListener("mousemove",g),window.removeEventListener("mouseup",h)}),[a,g,h]),{position:t,isDragging:a,handleMouseDown:p,modalRef:f,setPosition:r}}const yf=[];let Qp=0,tk="";function a9(e){return yf.push(e),()=>{const t=yf.lastIndexOf(e);t>=0&&yf.splice(t,1)}}function s9(){return Qp===0&&(tk=document.body.style.overflow,document.body.style.overflow="hidden"),Qp+=1,()=>{Qp=Math.max(0,Qp-1),Qp===0&&(document.body.style.overflow=tk,tk="")}}function Ro({isOpen:e,onClose:t,title:r,children:a,footer:s,size:i="md",theme:l=Dh,className:c,overlayStyle:d,headerActions:f,draggable:p=!1,isSettings:g=!1,closeOnOverlayClick:h=!0,closeDisabled:y=!1}){const k=o.useRef(null),v=o.useRef(null),C=o.useRef(t),S=o.useRef(y),w=o.useRef(Symbol("taskforce-modal")),_=o.useId(),{position:M,isDragging:R,handleMouseDown:P,modalRef:b}=n9();if(C.current=t,S.current=y,o.useEffect(()=>{if(e)return a9(w.current)},[e]),o.useEffect(()=>{const I=E=>{if(yf[yf.length-1]!==w.current)return;if(E.key==="Escape"&&e&&!S.current){C.current();return}if(E.key!=="Tab"||!e||!b.current)return;const K=Array.from(b.current.querySelectorAll('button:not([disabled]), [href], input:not([disabled]), select:not([disabled]), textarea:not([disabled]), [tabindex]:not([tabindex="-1"])'));if(K.length===0){E.preventDefault(),b.current.focus();return}const U=K[0],L=K[K.length-1];E.shiftKey&&document.activeElement===U?(E.preventDefault(),L.focus()):!E.shiftKey&&document.activeElement===L&&(E.preventDefault(),U.focus())};return e&&(v.current=document.activeElement instanceof HTMLElement?document.activeElement:null,window.requestAnimationFrame(()=>{(b.current?.querySelector("[data-modal-initial-focus]")??b.current?.querySelector("button:not([disabled]), [href], input:not([disabled]), select:not([disabled]), textarea:not([disabled])")??b.current)?.focus()})),window.addEventListener("keydown",I),()=>{window.removeEventListener("keydown",I),v.current?.focus()}},[e,b]),o.useEffect(()=>{if(e)return s9()},[e]),!e)return null;const $={sm:Jt.modalSizeSm,md:Jt.modalSizeMd,mdWide:Jt.modalSizeMdWide,lg:Jt.modalSizeLg,xl:Jt.modalSizeXl,full:Jt.modalSizeFull};return yc.createPortal(n.jsx("div",{className:`${Jt.overlay} ${c||""} ${Jt.overlayHighZ}`,style:d,ref:k,onClick:I=>{h&&!y&&I.target===k.current&&t()},children:n.jsxs("div",{ref:b,className:`tf-surface-modal tf-modal-shell ${Jt.modal} tf-scrollbar-scope ${$[i]} ${p?Jt.draggableModal:""} ${g?Jt.settingsViewModal:""}`,role:"dialog","aria-modal":"true","aria-labelledby":_,tabIndex:-1,"data-theme":l,style:{transform:p?`translate(${M.x}px, ${M.y}px)`:void 0,transition:R?"none":"transform 0.3s cubic-bezier(0.16, 1, 0.3, 1), opacity 0.3s ease-out"},children:[n.jsxs("div",{className:`tf-modal-header ${p?Jt.draggableHeader:""}`,onMouseDown:p?P:void 0,style:{cursor:p?R?"grabbing":"grab":"default"},children:[n.jsx("div",{className:"tf-modal-title",id:_,children:r}),n.jsxs("div",{className:Jt.headerActions,children:[f,n.jsx("button",{className:"tf-control-icon",onClick:t,disabled:y,title:"Close","aria-label":"Close",children:n.jsx(fo,{size:20})})]})]}),n.jsx("div",{className:Jt.modalContent,children:a}),s&&n.jsx("div",{className:`${Jt.formActions} ${Jt.modalFooter}`,children:s})]})}),document.body)}const o9="_toolbar_1nqyq_1",i9="_masterSelection_1nqyq_13",c9="_selectedCount_1nqyq_32",l9="_actionButton_1nqyq_36",d9="_emptyButton_1nqyq_47",u9="_dialogBody_1nqyq_52",p9="_destinationSummary_1nqyq_62",f9="_hint_1nqyq_66",m9="_progress_1nqyq_70",h9="_failures_1nqyq_77",g9="_spinner_1nqyq_102",Ao={toolbar:o9,masterSelection:i9,selectedCount:c9,actionButton:l9,emptyButton:d9,dialogBody:u9,destinationSummary:p9,hint:f9,progress:m9,failures:h9,spinner:g9};function C_({theme:e,selectedRecords:t,matchingCount:r,allMatchingSelected:a,someMatchingSelected:s,fullTrashCount:i,onSelectAllMatching:l,onClearSelection:c,onRestore:d,onEmptyEntireTrash:f}){const p=o.useRef(null),[g,h]=o.useState(!1),[y,k]=o.useState("previous"),[v,C]=o.useState(!1),[S,w]=o.useState(null),_=o.useMemo(()=>t.filter(E=>E.taskSnapshot.isArchived===!0).length,[t]),M=t.length-_;o.useEffect(()=>{p.current&&(p.current.indeterminate=s)},[s]);const R=async()=>{if(t.length===0||v)return;C(!0),w({requested:t.length,completed:0,succeeded:[],failed:[]});const E=await d(t,y,w);w(E),C(!1),E.failed.length===0&&(h(!1),w(null))},P=E=>{k(E),w(null),h(!0)},b=y==="archive",$=b?t.length:_,I=b?0:M;return n.jsxs(n.Fragment,{children:[n.jsxs("div",{className:Ao.toolbar,"aria-label":"Trash restore selection",children:[n.jsxs("label",{className:Ao.masterSelection,children:[n.jsx("input",{ref:p,type:"checkbox",checked:a,disabled:r===0||v,onChange:E=>{E.target.checked?l():c()},"aria-label":"Select all matching deleted tasks"}),n.jsxs("span",{className:Ao.selectedCount,children:[t.length," selected"]})]}),n.jsx("button",{type:"button",className:"tf-control-icon",onClick:c,disabled:t.length===0||v,"aria-label":"Clear selected tasks",title:"Clear selection",children:n.jsx(fo,{size:15,"aria-hidden":"true"})}),n.jsxs("button",{type:"button",className:`tf-control-icon ${Ao.actionButton}`,onClick:()=>P("previous"),disabled:t.length===0||v,children:[n.jsx(mi,{size:15,"aria-hidden":"true"}),"Restore"]}),n.jsxs("button",{type:"button",className:`tf-control-icon ${Ao.actionButton}`,onClick:()=>P("archive"),disabled:t.length===0||v,title:"Restore selected tasks directly to Archive",children:[n.jsx(Xc,{size:15,"aria-hidden":"true"}),"Restore to archive"]}),f&&n.jsxs("button",{type:"button",className:`tf-control-icon ${Ao.actionButton} ${Ao.emptyButton}`,onClick:f,disabled:i===0||v,title:i>0?`Permanently delete all ${i} tasks in Trash; filters and selection do not limit this action.`:"Trash is already empty",children:[n.jsx(Lf,{size:14,"aria-hidden":"true"}),"Empty Trash"]})]}),n.jsx(Ro,{isOpen:g,onClose:()=>{v||(h(!1),w(null))},closeDisabled:v,closeOnOverlayClick:!v,size:"sm",theme:e,title:b?"Restore selected tasks to Archive?":"Restore selected tasks?",footer:n.jsxs(n.Fragment,{children:[n.jsx("button",{type:"button",className:"tf-button-secondary tf-button-compact",onClick:()=>{h(!1),w(null)},disabled:v,children:"Cancel"}),n.jsxs("button",{type:"button",className:"tf-button-primary tf-button-compact","data-modal-initial-focus":!0,onClick:()=>{R()},disabled:v||t.length===0,children:[v?n.jsx(Ln,{size:15,className:Ao.spinner}):b?n.jsx(Xc,{size:15}):n.jsx(mi,{size:15}),S?.failed.length?"Retry failed":b?"Restore to archive":"Restore"]})]}),children:n.jsxs("div",{className:Ao.dialogBody,children:[n.jsxs("p",{children:["Restore ",t.length," task",t.length===1?"":"s","?"]}),n.jsxs("p",{className:Ao.destinationSummary,children:[$," to Archived · ",I," to Active"]}),n.jsx("p",{className:Ao.hint,children:b?"Active tasks will be marked Done and restored directly to Archive. Cancelled tasks remain Cancelled.":"Each task returns to the lifecycle state it had before deletion."}),S&&n.jsxs("div",{className:Ao.progress,"aria-live":"polite",children:[n.jsxs("strong",{children:[S.completed," / ",S.requested," completed"]}),S.failed.length>0&&n.jsxs("div",{className:Ao.failures,children:[n.jsxs("p",{children:[S.failed.length," failed and remain selected:"]}),n.jsx("ul",{children:S.failed.slice(0,8).map(E=>n.jsxs("li",{children:[n.jsx("span",{children:E.title||E.taskId}),n.jsx("span",{children:E.message})]},E.deletedRecordId))}),S.failed.length>8&&n.jsxs("p",{children:["And ",S.failed.length-8," more."]})]})]})]})})]})}const y9="_topNoticeLayer_1yiif_1",k9="_taskNoticeLayer_1yiif_13",v9="_topNotice_1yiif_1",w9="_topNoticeMessage_1yiif_37",b9="_topNoticeSuccess_1yiif_43",S9="_topNoticeError_1yiif_44",A9="_topNoticeInfo_1yiif_45",C9="_topNoticeDismiss_1yiif_63",fc={topNoticeLayer:y9,taskNoticeLayer:k9,topNotice:v9,topNoticeMessage:w9,topNoticeSuccess:b9,topNoticeError:S9,topNoticeInfo:A9,topNoticeDismiss:C9};function eg({notice:e,onDismiss:t,placement:r="top"}){if(!e)return null;const a=e.tone==="error"?fc.topNoticeError:e.tone==="success"?fc.topNoticeSuccess:fc.topNoticeInfo,s=e.tone==="error"?"alert":"status",i=r==="task"?`${fc.topNoticeLayer} ${fc.taskNoticeLayer}`:fc.topNoticeLayer;return n.jsx("div",{className:i,children:n.jsxs("div",{className:`${fc.topNotice} ${a}`,role:s,"aria-live":e.tone==="error"?"assertive":"polite",children:[e.tone==="error"?n.jsx(od,{size:14}):e.tone==="success"?n.jsx(hi,{size:14}):n.jsx(yT,{size:14}),n.jsx("span",{className:fc.topNoticeMessage,children:e.message}),e.actionLabel&&e.onAction&&n.jsx("button",{type:"button",className:"tf-button-ghost tf-button-compact",onClick:e.onAction,children:e.actionLabel}),t&&n.jsx("button",{type:"button",className:fc.topNoticeDismiss,onClick:t,"aria-label":"Dismiss notice",title:"Dismiss notice",children:n.jsx(fo,{size:14})})]})})}const _9="D-";function I9(e){return Of(_9,e)}const T9="_overlay_ey7rx_1",x9="_dialog_ey7rx_13",R9="_header_ey7rx_32",P9="_footer_ey7rx_33",E9="_titleGroup_ey7rx_53",N9="_secondaryActions_ey7rx_54",j9="_typeIcon_ey7rx_61",M9="_titleText_ey7rx_66",D9="_title_ey7rx_53",L9="_referenceBadge_ey7rx_79",O9="_content_ey7rx_83",B9="_image_ey7rx_93",W9="_pdf_ey7rx_100",$9="_textPreview_ey7rx_107",F9="_codePreview_ey7rx_108",U9="_message_ey7rx_125",z9="_unavailable_ey7rx_126",H9="_secondaryLink_ey7rx_145",Ta={overlay:T9,dialog:x9,header:R9,footer:P9,titleGroup:E9,secondaryActions:N9,typeIcon:j9,titleText:M9,title:D9,referenceBadge:L9,content:O9,image:B9,pdf:W9,textPreview:$9,codePreview:F9,message:U9,unavailable:z9,secondaryLink:H9},V9=/\.(?:md|markdown|txt|csv|json|js|ts|tsx|css|py|java|go|rs|sh)(?:[?#]|$)/i,G9=/\.(?:png|jpe?g|webp|gif)(?:[?#]|$)/i,K9=/\.pdf(?:[?#]|$)/i;function q9(e){return typeof e=="string"?e:e.path}function Y9(e){return typeof e=="string"?e.split("/").pop()||"Context attachment":e.caption||e.displayName||e.originalFilename||e.fsPath?.split("/").pop()||e.path.split("/").pop()||"Context attachment"}function Z9(e){return typeof e=="string"?[e]:[e.path,e.fsPath,e.originalFilename,e.displayName,e.caption].filter(t=>!!t)}function J9(e,t){const r=e.includes("?")?"&":"?";return`${e}${r}download=1&filename=${encodeURIComponent(t)}`}function Q9(e){return e.ownerType!=="task"?e.attachment:typeof e.attachment=="string"?{path:e.attachment,taskId:e.ownerId||null}:{...e.attachment,taskId:e.ownerId||e.attachment.taskId||null}}function __({theme:e}){const[t,r]=o.useState(null),[a,s]=o.useState(""),[i,l]=o.useState(!1),[c,d]=o.useState(null),[f,p]=o.useState(!1),g=o.useRef(null),h=o.useRef(null),y=o.useRef(null),k=o.useRef(0),v=o.useId();o.useEffect(()=>{const ie=H=>{const be=H;be.detail?.attachment&&(be.preventDefault(),k.current+=1,y.current!==null&&(window.clearTimeout(y.current),y.current=null),p(!1),r(be.detail))};return window.addEventListener($k,ie),()=>window.removeEventListener($k,ie)},[]),o.useEffect(()=>()=>{k.current+=1,y.current!==null&&window.clearTimeout(y.current)},[]),o.useEffect(()=>{if(!t)return;h.current=document.activeElement instanceof HTMLElement?document.activeElement:null;const ie=H=>{if(H.key==="Escape"){H.preventDefault(),H.stopPropagation(),r(null);return}if(H.key!=="Tab"||!g.current)return;const be=Array.from(g.current.querySelectorAll('button:not([disabled]), [href], iframe, [tabindex]:not([tabindex="-1"])'));if(be.length===0){H.preventDefault(),g.current.focus();return}const Z=be[0],me=be[be.length-1];H.shiftKey&&document.activeElement===Z?(H.preventDefault(),me.focus()):!H.shiftKey&&document.activeElement===me&&(H.preventDefault(),Z.focus())};return window.addEventListener("keydown",ie,!0),window.requestAnimationFrame(()=>g.current?.focus()),()=>{window.removeEventListener("keydown",ie,!0),h.current?.focus()}},[t]);const C=t?q9(t.attachment):"",S=t?Z9(t.attachment):[],w=/^https?:\/\//i.test(C),_=S.some(ie=>G9.test(ie)),M=S.some(ie=>K9.test(ie)),R=S.some(ie=>V9.test(ie))&&!w,P=S.some(ie=>/\.(?:md|markdown)(?:[?#]|$)/i.test(ie));if(o.useEffect(()=>{if(s(""),d(null),!t||!R){l(!1);return}const ie=new AbortController;return l(!0),fetch(C,{signal:ie.signal,headers:t.workspaceId?{"x-taskforce-workspace-id":t.workspaceId}:void 0}).then(async H=>{if(!H.ok)throw new Error("Preview unavailable");s(await H.text())}).catch(H=>{H instanceof DOMException&&H.name==="AbortError"||d(H instanceof Error?H.message:"Preview unavailable")}).finally(()=>{ie.signal.aborted||l(!1)}),()=>ie.abort()},[R,C,t]),!t)return null;const b=Y9(t.attachment),$=typeof t.attachment=="string"?null:t.attachment,I=_?Nf($):I9($),E=Q9(t),K=_&&YC(E,{taskId:t.ownerType==="task"?t.ownerId:null,taskReferenceLabel:t.ownerReferenceLabel}),U=!_&&VC(E,typeof E=="string"?void 0:E.fsPath),L=async()=>{if(!I)return;const ie=k.current;try{await navigator.clipboard.writeText(I)}catch{if(k.current!==ie)return;const H=document.createElement("textarea");H.value=I,document.body.appendChild(H),H.select(),document.execCommand("copy"),H.remove()}k.current===ie&&(p(!0),y.current!==null&&window.clearTimeout(y.current),y.current=window.setTimeout(()=>{k.current===ie&&(p(!1),y.current=null)},1200))},D=()=>{if(K?ZC(E,{taskId:t.ownerType==="task"?t.ownerId:null,taskReferenceLabel:t.ownerReferenceLabel}):GC(E,typeof E=="string"?void 0:E.fsPath)){r(null);return}window.open(C,"_blank","noopener,noreferrer")};return yc.createPortal(n.jsx("div",{className:Ta.overlay,"data-theme":e,onMouseDown:ie=>{ie.target===ie.currentTarget&&r(null)},children:n.jsxs("div",{ref:g,className:Ta.dialog,role:"dialog","aria-modal":"true","aria-labelledby":v,tabIndex:-1,children:[n.jsxs("header",{className:Ta.header,children:[n.jsxs("div",{className:Ta.titleGroup,children:[n.jsx("span",{className:Ta.typeIcon,"aria-hidden":"true",children:_?n.jsx(US,{size:16}):n.jsx(Sf,{size:16})}),n.jsxs("div",{className:Ta.titleText,children:[n.jsx("div",{className:Ta.title,id:v,children:b}),I&&n.jsx(Fv,{label:I,copied:f,onClick:()=>{L()},title:b,ariaLabel:f?`Copied ${I}`:`Copy ${I}`,className:Ta.referenceBadge})]})]}),n.jsx("button",{type:"button",className:"tf-control-icon","aria-label":"Close preview",title:"Close preview",onClick:()=>r(null),children:n.jsx(fo,{size:18})})]}),n.jsxs("div",{className:Ta.content,children:[_&&n.jsx("img",{className:Ta.image,src:C,alt:b}),M&&n.jsx("iframe",{className:Ta.pdf,src:C,title:`Preview ${b}`}),R&&i&&n.jsx("div",{className:Ta.message,children:"Loading preview…"}),R&&c&&n.jsx("div",{className:Ta.message,children:c}),R&&!i&&!c&&(P?n.jsx("div",{className:Ta.textPreview,children:n.jsx(Sg,{variant:"detail",children:a})}):n.jsx("pre",{className:Ta.codePreview,children:a})),!_&&!M&&!R&&n.jsxs("div",{className:Ta.unavailable,children:[n.jsx(Sf,{size:34,"aria-hidden":"true"}),n.jsx("strong",{children:"Preview unavailable"}),n.jsx("span",{children:"This file type can be opened or downloaded instead."})]})]}),n.jsxs("footer",{className:Ta.footer,children:[n.jsxs("div",{className:Ta.secondaryActions,children:[!w&&n.jsxs("a",{className:Ta.secondaryLink,href:J9(C,b),target:"_blank",rel:"noreferrer",children:[n.jsx(kT,{size:14})," Download"]}),(w||!K&&!U)&&n.jsxs("a",{className:Ta.secondaryLink,href:C,target:"_blank",rel:"noreferrer",children:[n.jsx(Bw,{size:14})," Open original"]})]}),(K||U)&&n.jsxs("button",{type:"button",className:"tf-button-primary tf-button-compact",onClick:D,children:[K?n.jsx(vT,{size:14}):n.jsx(Bw,{size:14}),K?"Open in Image Notes":"Open in Documents"]})]})]})}),document.body)}const X9=Q.lazy(()=>Po(()=>import("./TaskSettings-xVsxSa0g.js"),__vite__mapDeps([10,1,2,3,4,5,11])).then(e=>({default:e.TaskSettings})));function eH(e){const{activeTab:t,setActiveTab:r,isOpen:a,setIsOpen:s,currentTheme:i,setCurrentTheme:l,saveSettings:c,pathSaved:d,keyShortcut:f,setKeyShortcut:p,jsonBackupEnabled:g,setJsonBackupEnabled:h,mcpHostRoot:y,setMcpHostRoot:k,settingsSection:v,setSettingsSection:C,projectRoot:S,projectName:w,mcpScriptPath:_,serverHostRoot:M,showFolderBrowser:R,setShowFolderBrowser:P,folders:b,files:$,currentBrowsePath:I,fetchFolders:E,browserTarget:K,setBrowserTarget:U,handleSelectPath:L,handleAddPath:D,handleRemovePath:ie,tasks:H,loadingTasks:be,archivedTasks:Z,deletedTasks:me,activeCategories:Ve,activeTypes:Re,priorities:je,taxonomyDisplayLabels:ye,taxonomies:ue,searchQuery:ve,setSearchQuery:Pe,filterCategories:Le,setFilterCategories:se,filterTypes:V,setFilterTypes:W,filterPriorities:z,setFilterPriorities:fe,filterStatus:ke,setFilterStatus:Y,filterAssignees:we,setFilterAssignees:q,assigneeOptions:le,filterTaxonomies:$e,setFilterTaxonomies:re,sortBy:de,setSortBy:He,sortOrder:ce,toggleSortOrder:pe,showArchive:xe,setShowArchive:N,taskScope:X,setTaskScope:Ae,clearFilters:Te,filteredTasks:he,filteredArchive:ot,groupedTasks:We,collapsedCategories:Xe,setCollapsedCategories:ae,handleEdit:G,handleDelete:Ie,handleCopyId:Fe,handleUpdateTask:it,handleToggleComplete:Me,handleToggleCancel:qe,handleToggleInProgress:ge,handleToggleReview:_e,handleSetStatus:Be,handleArchiveTask:Ge,handleBulkArchive:F,handleUnarchive:Ne,handleRestoreDeletedTask:Ce,handleRestoreSelectedDeletedTasks:ut,handlePermanentlyDeleteDeletedTask:mt,handleEmptyDeletedTasks:Ue,fetchArchive:wt,editingTaskId:kt,loading:rt,error:Ht,clearTaskError:lr,title:rr,setTitle:wr,setTitleDraft:st,description:zt,setDescription:Lt,setDescriptionDraft:Mt,checklistItems:Ee,setChecklistItems:ct,category:lt,setCategory:Je,type:nt,setType:Ct,priority:Rt,setPriority:Dt,complexity:It,setComplexity:Qt,status:ir,setStatus:dr,manualComplexityEnabled:sr,checklistDropdownEnabled:pr,showTaskCardStatusLabel:Jr,assignee:Tr,setAssignee:br,scheduledDate:ur,setScheduledDate:Qr,dueDate:Hr,setDueDate:Gt,workstreamInput:bt,setWorkstreamInput:gr,formTaxonomies:u,setFormTaxonomies:ht,comments:yr,newCommentText:Er,setNewCommentText:mn,attachments:qt,setAttachments:Vr,setAttachmentsDirty:Tt,descriptionFocused:Ut,setDescriptionFocused:fr,showMarkdownHelp:$t,setShowMarkdownHelp:Mr,handleSubmit:Fr,resetForm:Vt,handleAddComment:Dr,handleSetWorkstreamForCurrentTask:Ye,handleOpenTaskById:en,autoSaveState:bn,unsavedModalOpen:tn,setUnsavedModalOpen:ft,pendingNavigation:rn,handleNavigation:Nt,handleClose:or,scheduleWarningPrompt:xr,confirmScheduleWarning:hn,cancelScheduleWarning:ys,uiNotice:Nn,pushNotice:Sn,clearNotice:kr,taskReturnTrail:cr,clearReturnToParentTask:Wr,returnToPreviousTask:on,copiedId:dt,recentlyChangedTaskIds:Un,tasksScrollRef:Tn,setTasksScrollPos:jn,currentTask:an,currentTaskWorkstream:Ds,currentTaskInitiative:da,handleUpdateCategory:J,handleRemoveCategory:Qe,handleSaveCategory:St,handleUpdateCategoryIcon:Xt,handleUpdateCategoryColor:at,handleSaveType:Ft,handleRemoveType:Lr,handleUpdateTaxonomies:Nr,handleUpdatePriorities:Rr,pathValidation:Kt,validatePaths:Bn,getCategoryPaths:Xn,commentsEndRef:va,currentWorkspaceId:Cr,authUserId:cn,settingsModel:kn,onHeaderMouseDown:zn,isDragging:ea}=e,La=WC(H,en),mr=o.useCallback(vt=>{if(vt.kind==="initiative"||vt.kind==="workstream"){const nn=vt.kind==="initiative"?e.initiatives.find(ta=>ta.referenceNumber===vt.referenceNumber):e.workstreams.find(ta=>ta.referenceNumber===vt.referenceNumber);if(!nn){Sn(`${vt.token} could not be found.`,"error");return}const vn=y4({applicationBaseUrl:window.location.origin,workspaceId:String(Cr||"default").trim()||"default",target:vt.kind,id:nn.id});if(!vn){Sn(`${vt.token} could not be opened.`,"error");return}window.open(vn,"_blank","noopener,noreferrer");return}const nr=String(Cr||"default").trim()||"default";FC(vt,{workspaceId:nr}).then(nn=>{Ef(nn,{ownerType:"task",ownerId:an?.id||null,ownerReferenceLabel:hs(an),workspaceId:nr})}).catch(()=>{Sn(`${vt.token} could not be opened.`,"error")})},[an,Cr,e.initiatives,e.workstreams,Sn]),Zo=o.useMemo(()=>({...La,entityReferences:{resolve:oA,activate:mr}}),[mr,La]),Za=o.useRef(null),[ks,Eo]=Q.useState(0);o.useLayoutEffect(()=>{if(t==="tasks"&&Tn.current&&ks>0){const vt=setTimeout(()=>{Tn.current&&(Tn.current.scrollTop=ks)},50);return()=>clearTimeout(vt)}},[t,ks,H]);const xa=vt=>{He(vt)},Ja=()=>{Nt(()=>{if(t==="add"||t==="settings"){if(t==="add"&&on())return;t==="add"&&cr.length>0&&Wr(),t==="add"&&Vt(),r("tasks")}else e.onClose?e.onClose():or()})},Ra=()=>{ft(!1),rn?(t==="add"&&Vt(),rn()):r("tasks")},vs=async()=>{await Fr({preventDefault:()=>{}}),ft(!1),rn&&rn()},Qa=(vt,nr)=>{ht(nn=>({...nn,[vt]:nr}))},ws=o.useCallback(vt=>{Vt(),Je(vt),Nt(()=>{r("add")})},[Vt,Je,r,Nt]),ln=Q.useMemo(()=>me.map(vt=>({...vt.taskSnapshot,isDeleted:!0,deletedRecordId:vt.id,deletedAt:vt.deletedAt,deletedExpiresAt:BC(vt.deletedAt)})),[me]),Oa=Q.useMemo(()=>new globalThis.Map(me.map(vt=>[vt.taskId,vt])),[me]),yn=Q.useMemo(()=>{const vt=bg(ve),nr={categories:Ve,types:Re,priorities:je,assigneeOptions:le,taxonomies:ue},nn=Ve.every(Ar=>Le.includes(Ar.value)),vn=Re.every(Ar=>V.includes(Ar.value)),ta=Array.from(new Set(z.map(Ar=>Number(Ar)).filter(Ar=>Number.isFinite(Ar)))),Os=je.map(Ar=>Number(Ar.value)).filter(Ar=>Number.isFinite(Ar)).every(Ar=>ta.includes(Ar)),Bs=["task","in-progress","review","done","cancelled","on-hold"].every(Ar=>ke.includes(Ar)),Xa=le.length>0&&le.every(Ar=>we.includes(Ar.value)),Xr=$f(ue,ln);return ln.filter(Ar=>{const An=Vh(Ar,vt,nr),es=nn||Le.includes(Ar.category),Wn=Os||ta.includes(Oh(Ar.priority)),ra=vn||V.includes(Ar.type||po),ts=Bs||ke.includes(Ar.status),rs=Xa||we.includes(Ar.assignee||"unassigned"),na=Object.entries($e).every(([aa,un])=>{const bs=Xr.find(Hn=>Hn.id===aa);if(!bs||Dv(bs,ln).every(Hn=>un.includes(Hn.value)))return!0;const pn=Ar.taxonomies?.[aa];return pn?Array.isArray(pn)?pn.some(Hn=>un.includes(Hn)):un.includes(pn):un.includes("")});return An&&es&&Wn&&ra&&ts&&rs&&na}).sort((Ar,An)=>Gh(Ar,An,de,ce,ue))},[Ve,Re,Z,le,ln,we,Le,z,ke,$e,V,je,ve,de,ce,ue,H]),Vs=Q.useMemo(()=>{const vt={};return yn.forEach(nr=>{const vn=Ve.find(ta=>ta.value===nr.category||ta.label===nr.category)?.label||nr.category||"General";vt[vn]||(vt[vn]=[]),vt[vn].push(nr)}),vt},[Ve,yn]),Mn=$C(me,yn.map(vt=>vt.id),X==="deleted"),Ls=X==="archived"?ot.length:X==="deleted"?yn.length:he.length;return n.jsxs(n.Fragment,{children:[n.jsxs("div",{ref:Za,className:`${Jt.modal} ${x.coreModal} ${t==="settings"?Jt.settingsViewModal:""}`,"data-theme":i,children:[n.jsxs("div",{className:"tf-modal-header",onMouseDown:zn,style:{cursor:zn?ea?"grabbing":"grab":"default"},children:[n.jsxs("div",{className:`tf-modal-title ${zr.headerTitleWidget}`,children:["Taskforce",w&&n.jsxs(n.Fragment,{children:[n.jsx("span",{className:x.projectSlash,children:"/"}),n.jsx("span",{className:x.projectName,style:{fontSize:"14px",padding:"1px 6px"},children:w})]}),n.jsx("span",{className:x.taskCountBadge,title:X==="deleted"?"Trash tasks — automatically deleted after 90 days":`${X.charAt(0).toUpperCase()+X.slice(1)} tasks`,children:Ls})]}),n.jsxs("div",{className:Jt.headerActions,children:[t==="tasks"&&n.jsx(n.Fragment,{children:n.jsx("button",{className:"tf-control-icon",onClick:()=>{Nt(()=>{Vt(),r("add")})},title:"Add New Task","aria-label":"Add New Task",children:n.jsx(Ko,{size:18})})}),n.jsx("button",{className:`tf-control-icon ${t==="settings"?"tf-control-icon-active":""}`,onClick:()=>{t!=="settings"&&Nt(()=>{r("settings")})},title:"Settings","aria-label":"Settings",children:n.jsx(Af,{size:18})}),n.jsx("button",{className:"tf-control-icon",onClick:Ja,title:t==="tasks"?"Close":"Back to Tasks","aria-label":t==="tasks"?"Close":"Back to Tasks",children:t==="tasks"?n.jsx(fo,{size:20}):n.jsx(wT,{size:20})})]})]}),n.jsx(eg,{notice:t==="add"?null:Nn,onDismiss:kr}),n.jsx(__,{theme:i}),t==="add"&&n.jsxs("div",{className:x.taskNoticeAnchor,children:[n.jsx(A_,{editingTaskId:kt,loading:rt,autoSaveState:bn,title:rr,status:ir,onStatusChange:dr,currentTask:an,currentTaskWorkstream:Ds,currentTaskInitiative:da,workstreams:e.workstreams,onWorkstreamInputChange:gr,onSetWorkstreamForCurrentTask:Ye,handleSubmit:Fr,handleCopyId:Fe,copiedId:dt,tasks:H,handleToggleInProgress:ge,handleToggleReview:_e,handleToggleComplete:Me,handleToggleCancel:qe,handleSetStatus:Be,handleArchiveTask:Ge,handleUnarchiveTask:vt=>{if(an?.isDeleted){const nr=Oa.get(vt);nr&&Ce(nr.id,nr.taskId);return}Ne(vt)},handleRestoreDeletedTask:vt=>{const nr=me.find(nn=>nn.id===vt);Ce(vt,nr?.taskId)},handlePermanentlyDeleteDeletedTask:vt=>{mt(vt)}}),n.jsx(eg,{notice:Ht?{message:Ht,tone:"error"}:Nn,onDismiss:()=>{lr(),kr()},placement:"task"})]}),t==="tasks"&&n.jsx(k_,{ref:Tn,tasks:H,archivedTasks:Z,categories:Ve,types:Re,priorities:je,workspaceId:Cr,taxonomyDisplayLabels:ye,taxonomies:ue,searchQuery:ve,filterCategories:Le,filterTypes:V,filterPriorities:z,filterStatus:ke,filterAssignees:we,assigneeOptions:le,filterTaxonomies:$e,sortBy:de,sortOrder:ce,showArchive:xe,taskScope:X,collapsedCategories:Xe,loadingTasks:be,filteredTasks:he,filteredArchive:ot,groupedTasks:We,filteredDeletedTasks:yn,groupedDeletedTasks:Vs,deletedTaskRecordByTaskId:Oa,selectedDeletedRecordIds:Mn.selectedIds,onDeletedSelectionChange:Mn.toggle,trashControls:n.jsx(C_,{theme:i,selectedRecords:Mn.selectedRecords,matchingCount:Mn.matchingRecords.length,allMatchingSelected:Mn.allMatchingSelected,someMatchingSelected:Mn.someMatchingSelected,fullTrashCount:me.length,onSelectAllMatching:Mn.selectAllMatching,onClearSelection:Mn.clear,onRestore:ut,onEmptyEntireTrash:()=>{confirm(`Permanently delete all ${me.length} tasks in Trash? Filters and selection do not limit this action. This cannot be undone.`)&&Ue()}}),copiedId:dt,recentlyChangedTaskIds:Un,showTaskCardStatusLabel:Jr,workstreams:e.workstreams,initiatives:e.initiatives,onSearchChange:Pe,onFilterCategoriesChange:vt=>se(vt),onFilterTypesChange:vt=>W(vt),onFilterPrioritiesChange:fe,onFilterStatusChange:Y,onFilterAssigneesChange:vt=>q(vt),onTaxonomyFilterChange:(vt,nr)=>re(nn=>({...nn,[vt]:nr})),onSortByChange:xa,onSortOrderChange:pe,onShowArchiveChange:N,onTaskScopeChange:Ae,onClearFilters:Te,onToggleCategory:vt=>ae(nr=>({...nr,[vt]:!nr[vt]})),onEditTask:G,onUpdateTask:it,taskReferences:Zo,onCopyId:Fe,onToggleInProgress:ge,onToggleReview:_e,onToggleComplete:Me,onToggleCancel:qe,onSetStatus:Be,onArchiveTask:Ge,onBulkArchive:F,onUnarchive:vt=>{const nr=Oa.get(vt);if(nr){Ce(nr.id,nr.taskId);return}Ne(vt)},onDelete:vt=>{const nr=Oa.get(vt);if(nr){mt(nr.id);return}Ie(vt)},onDeleteAllDeleted:()=>{Ue()},onFetchArchive:wt,onAddTaskToCategory:ws,supplementalTasks:ln}),t==="add"&&n.jsx(S_,{editingTaskId:kt,initialActivityEntryId:e.initialActivityEntryId,title:rr,description:zt,checklistItems:Ee,category:lt,type:nt,priority:Rt,complexity:It,manualComplexityEnabled:sr,assignee:Tr,scheduledDate:ur,dueDate:Hr,formTaxonomies:u,onTaxonomyChange:Qa,taxonomies:ue,comments:yr,newCommentText:Er,contextFiles:qt,currentWorkspaceId:Cr,currentActorId:cn,apiBaseUrl:"",descriptionFocused:Ut,showMarkdownHelp:$t,checklistEnabled:pr,categories:Ve,types:Re,priorities:je,taxonomyDisplayLabels:ye,assigneeOptions:le,workstreams:e.workstreams,initiatives:e.initiatives,copiedId:dt,onTitleChange:wr,onTitleDraftChange:st,onDescriptionChange:Lt,onDescriptionDraftChange:Mt,onChecklistItemsChange:ct,onCategoryChange:Je,onTypeChange:Ct,onPriorityChange:Dt,onComplexityChange:Qt,onAssigneeChange:br,onScheduledDateChange:Qr,onDueDateChange:Gt,onNewCommentTextChange:mn,onDescriptionFocusedChange:fr,onShowMarkdownHelpChange:Mr,onOpenSettings:vt=>{Nt(()=>{C(vt),r("settings")})},onSubmit:Fr,commentsEndRef:va,onAddComment:()=>Dr(Er),taskReferences:Zo,onAddContextFile:vt=>{Tt(!0),Vr(nr=>[...nr,vt])},onRemoveContextFile:async vt=>{Tt(!0),Vr(nr=>nr.filter((nn,vn)=>vn!==vt))},onUpdateContextCaption:(vt,nr)=>{Tt(!0),Vr(nn=>nn.map((vn,ta)=>ta!==vt?vn:typeof vn=="string"?{path:vn,caption:nr,timestamp:new Date().toISOString()}:{...vn,caption:nr}))},onOpenContextImage:vt=>{Ef(vt,{ownerType:"task",ownerId:kt,ownerReferenceLabel:hs(an),workspaceId:Cr})},onCopyId:Fe,onToggleInProgress:ge,onToggleReview:_e,onToggleComplete:Me,onToggleCancel:qe,onArchiveTask:Ge,onUnarchive:vt=>{if(an?.isDeleted){const nr=Oa.get(vt);nr&&Ce(nr.id,nr.taskId);return}Ne(vt)},currentTask:an}),t==="settings"&&n.jsx(o.Suspense,{fallback:n.jsx("div",{style:{display:"flex",alignItems:"center",justifyContent:"center",padding:"2rem"},children:n.jsx(Ln,{size:20,className:x.spinner})}),children:n.jsx(X9,{settingsModel:kn,onSectionChange:C})})]}),R&&yc.createPortal(n.jsx("div",{className:In.overlay,children:n.jsxs("div",{className:In.browser,children:[n.jsxs("div",{className:In.header,children:[n.jsxs("div",{className:In.pathInfo,children:[n.jsx(gc,{size:14}),n.jsx("span",{children:I||"Project Root"})]}),n.jsxs("div",{className:In.actions,children:[I&&n.jsx("button",{className:x.helpLink,onClick:()=>{const vt=I.split("/").filter(Boolean);vt.pop(),E(vt.length?vt.join("/")+"/":"")},children:"Back"}),n.jsx("button",{className:x.helpLink,onClick:()=>P(!1),children:"Close"})]})]}),n.jsxs("div",{className:In.list,children:[K&&typeof K=="object"&&n.jsxs("div",{className:`${In.item} ${In.itemCurrent}`,onClick:()=>L(I),children:[n.jsx(hi,{size:14})," Select Current: ./",I||"(root)"]}),b.map(vt=>n.jsxs("div",{className:In.item,onClick:()=>E(I+vt+"/"),children:[n.jsx(gc,{size:14})," ",vt,"/"]},vt)),$.map(vt=>n.jsxs("div",{className:`${In.item} ${In.itemFile}`,onClick:()=>L(I+vt),children:[n.jsx(Sf,{size:14})," ",vt]},vt)),b.length===0&&$.length===0&&n.jsx("div",{className:`${In.item} ${In.empty}`,children:"No items found"})]})]})}),document.body),tn&&n.jsx("div",{className:`${Jt.overlay} ${Jt.unsavedOverlay}`,children:n.jsxs("div",{className:`tf-surface-modal tf-modal-shell ${Jt.modal} ${Jt.unsavedModal}`,"data-theme":i,children:[n.jsx("div",{className:`tf-modal-header ${Jt.unsavedHeader}`,children:n.jsxs("div",{className:`tf-modal-title ${Jt.unsavedTitle}`,children:[n.jsx(od,{size:20}),"Unsaved Changes"]})}),n.jsx("div",{className:`${Jt.form} ${Jt.unsavedContent}`,children:n.jsx("p",{className:Jt.unsavedText,children:"You have unsaved changes. Would you like to save them?"})}),n.jsxs("div",{className:`${Jt.formActions} ${Jt.unsavedActions}`,children:[n.jsx("button",{className:x.cancelBtn,onClick:()=>ft(!1),title:"Close dialog and continue editing",children:"Keep Editing"}),n.jsx("button",{className:x.destructiveBtn,onClick:Ra,title:"Discard unsaved changes and leave",children:"Discard"}),n.jsxs("button",{className:x.submitBtn,onClick:vs,disabled:rt,title:"Save changes and leave",children:[rt?n.jsx(Ln,{size:16,className:x.spinner}):n.jsx(zS,{size:16}),"Save"]})]})]})}),xr&&n.jsx("div",{className:`${Jt.overlay} ${Jt.unsavedOverlay}`,children:n.jsxs("div",{className:`tf-surface-modal tf-modal-shell ${Jt.modal} ${Jt.unsavedModal}`,"data-theme":i,children:[n.jsx("div",{className:`tf-modal-header ${Jt.unsavedHeader}`,children:n.jsxs("div",{className:`tf-modal-title ${Jt.unsavedTitle}`,children:[n.jsx(od,{size:20}),"Date Warning"]})}),n.jsxs("div",{className:`${Jt.form} ${Jt.unsavedContent}`,children:[n.jsx("p",{className:Jt.unsavedText,children:"Due date is before scheduled date."}),n.jsxs("p",{style:{margin:0,fontSize:"12px",color:"var(--text-muted)"},children:["Due: ",xr.dueDate," · Scheduled: ",xr.scheduledDate]})]}),n.jsxs("div",{className:`${Jt.formActions} ${Jt.unsavedActions}`,children:[n.jsx("button",{className:x.cancelBtn,onClick:ys,children:"Go Back"}),n.jsx("button",{className:x.submitBtn,onClick:hn,children:"Save Anyway"})]})]})})]})}const tH="_accountMenuWrap_1mocf_1",rH="_avatarBtn_1mocf_5",nH="_avatarBadge_1mocf_9",aH="_avatarImage_1mocf_24",sH="_avatarIcon_1mocf_30",oH="_accountMenu_1mocf_1",iH="_accountMenuItem_1mocf_48",cH="_accountMenuItemActive_1mocf_68",lH="_accountMenuSection_1mocf_73",dH="_accountMenuSectionLabel_1mocf_79",uH="_accountMenuMeta_1mocf_88",pH="_accountMenuHint_1mocf_93",fH="_accountIdentityEmail_1mocf_99",mH="_accountIdentityBlock_1mocf_104",hH="_accountIdentityMetaLine_1mocf_109",gH="_accountIdentityMetaAction_1mocf_116",yH="_accountIdentityMetaValue_1mocf_125",kH="_accountIdentityMetaLabel_1mocf_130",vH="_accountMenuError_1mocf_159",wH="_accountHubCard_1mocf_165",bH="_profileAvatarEditor_1mocf_172",SH="_profileEditLayout_1mocf_178",AH="_profileFieldStack_1mocf_185",CH="_profileFieldLabel_1mocf_191",Zt={accountMenuWrap:tH,avatarBtn:rH,avatarBadge:nH,avatarImage:aH,avatarIcon:sH,accountMenu:oH,accountMenuItem:iH,accountMenuItemActive:cH,accountMenuSection:lH,accountMenuSectionLabel:dH,accountMenuMeta:uH,accountMenuHint:pH,accountIdentityEmail:fH,accountIdentityBlock:mH,accountIdentityMetaLine:hH,accountIdentityMetaAction:gH,accountIdentityMetaValue:yH,accountIdentityMetaLabel:kH,accountMenuError:vH,accountHubCard:wH,profileAvatarEditor:bH,profileEditLayout:SH,profileFieldStack:AH,profileFieldLabel:CH},_H="_authBlockedBanner_1virb_1",IH="_loginView_1virb_10",TH="_loginCard_1virb_20",xH="_loginCloseBtn_1virb_34",RH="_loginLogo_1virb_56",PH="_authBrandRow_1virb_62",EH="_setupHeaderRow_1virb_68",NH="_runtimeIconBadge_1virb_75",jH="_loginTitle_1virb_94",MH="_loginTitleAccent_1virb_105",DH="_loginSubtitle_1virb_109",LH="_loginError_1virb_115",OH="_loginField_1virb_121",BH="_loginFieldLabel_1virb_126",WH="_loginInput_1virb_133",$H="_loginPrimaryBtn_1virb_149",FH="_authPrimaryActions_1virb_154",UH="_registerConsent_1virb_159",zH="_registerConsentLink_1virb_167",HH="_authModeSwitch_1virb_177",VH="_authModeSwitchLink_1virb_184",GH="_authModeLinks_1virb_199",KH="_authSecondaryActions_1virb_207",qH="_authModeLink_1virb_199",YH="_optionGrid_1virb_236",ZH="_optionGroup_1virb_242",JH="_optionRow_1virb_247",QH="_inlineHint_1virb_254",XH="_actionRowEnd_1virb_260",eV="_oauthProviders_1virb_267",tV="_oauthDivider_1virb_274",rV="_oauthButtons_1virb_290",nV="_oauthButton_1virb_290",Ze={authBlockedBanner:_H,loginView:IH,loginCard:TH,loginCloseBtn:xH,loginLogo:RH,authBrandRow:PH,setupHeaderRow:EH,runtimeIconBadge:NH,loginTitle:jH,loginTitleAccent:MH,loginSubtitle:DH,loginError:LH,loginField:OH,loginFieldLabel:BH,loginInput:WH,loginPrimaryBtn:$H,authPrimaryActions:FH,registerConsent:UH,registerConsentLink:zH,authModeSwitch:HH,authModeSwitchLink:VH,authModeLinks:GH,authSecondaryActions:KH,authModeLink:qH,optionGrid:YH,optionGroup:ZH,optionRow:JH,inlineHint:QH,actionRowEnd:XH,oauthProviders:eV,oauthDivider:tV,oauthButtons:rV,oauthButton:nV},aV="_modalBody_xo2lt_1",sV="_mutedText_xo2lt_5",oV="_sectionText_xo2lt_10",iV="_modalActionsEnd_xo2lt_50",cV="_helpModalBody_xo2lt_56",lV="_helpHero_xo2lt_60",dV="_helpHeroIcon_xo2lt_67",uV="_helpHeroCopy_xo2lt_79",pV="_supportContactCard_xo2lt_84",fV="_supportContactHeader_xo2lt_90",mV="_supportEmailAddress_xo2lt_97",hV="_supportActionRow_xo2lt_112",gV="_supportAction_xo2lt_112",yV="_supportPanel_xo2lt_123",kV="_supportPanelHeader_xo2lt_132",vV="_memberRow_xo2lt_150",wV="_memberTitle_xo2lt_156",bV="_memberActions_xo2lt_160",SV="_selectRole_xo2lt_167",AV="_selectPermission_xo2lt_171",CV="_inviteRow_xo2lt_175",_V="_listHeading_xo2lt_179",IV="_auditList_xo2lt_184",TV="_auditPager_xo2lt_190",xV="_labelFixed_xo2lt_197",Br={modalBody:aV,mutedText:sV,sectionText:oV,modalActionsEnd:iV,helpModalBody:cV,helpHero:lV,helpHeroIcon:dV,helpHeroCopy:uV,supportContactCard:pV,supportContactHeader:fV,supportEmailAddress:mV,supportActionRow:hV,supportAction:gV,supportPanel:yV,supportPanelHeader:kV,memberRow:vV,memberTitle:wV,memberActions:bV,selectRole:SV,selectPermission:AV,inviteRow:CV,listHeading:_V,auditList:IV,auditPager:TV,labelFixed:xV};function RV({isOpen:e,theme:t,onClose:r,onConfirm:a}){return n.jsx(Ro,{isOpen:e,onClose:r,title:"New Workspace",size:"sm",theme:t,draggable:!0,footer:n.jsxs(n.Fragment,{children:[n.jsx("button",{type:"button",className:x.cancelBtn,onClick:r,children:"Cancel"}),n.jsx("button",{type:"button",className:x.submitBtn,onClick:a,children:"Start Setup"})]}),children:n.jsx("div",{className:`${Jt.form} ${Br.modalBody}`,children:n.jsx("p",{className:Br.sectionText,children:"Create and configure a new workspace."})})})}const PV="_editableAvatarButton_1qp11_1",EV="_editableAvatarImage_1qp11_47",NV="_editableAvatarFallback_1qp11_54",jV="_editableAvatarBadge_1qp11_65",MV="_editableAvatarProgress_1qp11_91",DV="_editableAvatarProgressError_1qp11_108",Ul={editableAvatarButton:PV,editableAvatarImage:EV,editableAvatarFallback:NV,editableAvatarBadge:jV,editableAvatarProgress:MV,editableAvatarProgressError:DV};function LV({label:e,imageUrl:t,fallbackImageUrl:r,fallback:a,accentColor:s,size:i=52,width:l,height:c,radius:d,editBadgeSize:f,editIconSize:p=16,disabled:g=!1,loading:h=!1,loadingLabel:y="Updating profile photo",error:k=!1,errorLabel:v="Profile photo update failed",className:C="",onClick:S}){const{activeImageUrl:w,handleImageError:_}=h_(t,r),M=l??i,R=c??i,P=typeof d=="number"?`${d}px`:d,b=typeof f=="number"?`${f}px`:f;return n.jsxs("button",{type:"button",className:`${Ul.editableAvatarButton} ${C}`.trim(),"aria-label":e,"aria-busy":h,title:e,onClick:S,disabled:g,style:{"--editable-avatar-size":`${i}px`,"--editable-avatar-width":`${M}px`,"--editable-avatar-height":`${R}px`,...P?{"--editable-avatar-radius":P}:{},...b?{"--editable-avatar-badge-size":b}:{},...s?{"--editable-avatar-accent":s}:{}},children:[w?n.jsx("img",{src:w,alt:"",className:Ul.editableAvatarImage,onError:_}):n.jsx("span",{className:Ul.editableAvatarFallback,children:a}),n.jsx("span",{className:Ul.editableAvatarBadge,"aria-hidden":"true",children:n.jsx(HS,{size:p})}),h?n.jsx("span",{className:Ul.editableAvatarProgress,role:"status","aria-label":y,children:n.jsx(Ln,{size:Math.max(16,Math.round(i*.24))})}):k?n.jsx("span",{className:`${Ul.editableAvatarProgress} ${Ul.editableAvatarProgressError}`,role:"status","aria-label":v,children:n.jsx(od,{size:Math.max(16,Math.round(i*.24))})}):null]})}const OV="_modalBody_1t6q4_1",BV="_layout_1t6q4_5",WV="_sectionTabs_1t6q4_11",$V="_sectionTab_1t6q4_11",FV="_sectionPanel_1t6q4_55",UV="_section_1t6q4_11",zV="_sectionHeader_1t6q4_65",HV="_cardHeader_1t6q4_66",VV="_planSummary_1t6q4_67",GV="_intervalRow_1t6q4_68",KV="_sectionCard_1t6q4_81",qV="_sectionActions_1t6q4_87",YV="_inlineActions_1t6q4_88",ZV="_loginMethodList_1t6q4_96",JV="_loginMethodRow_1t6q4_101",QV="_loginMethodIcon_1t6q4_110",XV="_loginMethodCopy_1t6q4_122",eG="_addPasswordForm_1t6q4_137",tG="_linkProviderBlock_1t6q4_138",rG="_fieldLabel_1t6q4_145",nG="_planName_1t6q4_157",qr={modalBody:OV,layout:BV,sectionTabs:WV,sectionTab:$V,sectionPanel:FV,section:UV,sectionHeader:zV,cardHeader:HV,planSummary:VV,intervalRow:GV,sectionCard:KV,sectionActions:qV,inlineActions:YV,loginMethodList:ZV,loginMethodRow:JV,loginMethodIcon:QV,loginMethodCopy:XV,addPasswordForm:eG,linkProviderBlock:tG,fieldLabel:rG,planName:nG},aG=new Set(["active","trialing","grace"]),sS={CHECKOUT_SESSION_EXPIRED:"Your previous checkout expired. Choose a plan to continue.",CHECKOUT_SESSION_SUPERSEDED:"A newer checkout replaced your previous checkout. Choose a plan to continue."},fh={planSelectionRequired:"Choose a plan to continue.",checkoutPending:"Complete checkout to continue.",misconfigured:"Onboarding policy is misconfigured. Contact support or a system administrator.",missingEntitlement:"No entitlement is linked to this account."};function ld(e){return String(e||"").trim()}function I_(e){return ld(e).toLowerCase()}function sG(e){return ld(e).toLowerCase()}function oG(e){return!!(ld(e?.stripeCustomerId)||ld(e?.stripeSubscriptionId))}function iG(e){const t=ld(e?.trialEnd||e?.effectiveUntil);if(t){const r=new Date(t);if(!Number.isNaN(r.getTime()))return r.getTime()<=Date.now()?"Your trial end date has passed. Billing status is updating.":`Your trial is active through ${r.toLocaleString()}.`}return"Your trial is active. Continue to Taskforce or manage billing anytime."}function cG(e){return aG.has(I_(e))}function Uk(e,t){const r=I_(e?.entitlementState),a=sG(e?.gate||t),s=ld(e?.billingConflictCode).toUpperCase(),i=ld(e?.message),l=cG(r),c=oG(e);return s==="CHECKOUT_SESSION_EXPIRED"?{entitlementState:r||null,gate:a||null,isActive:!1,allowReturnToApp:!1,statusTone:"info",message:sS.CHECKOUT_SESSION_EXPIRED,primaryAction:"choose_plan",primaryLabel:"Choose Plan",showManageBilling:c,markCurrentPlan:!1}:s==="CHECKOUT_SESSION_SUPERSEDED"?{entitlementState:r||null,gate:a||null,isActive:!1,allowReturnToApp:!1,statusTone:"info",message:sS.CHECKOUT_SESSION_SUPERSEDED,primaryAction:"choose_plan",primaryLabel:"Choose Plan",showManageBilling:c,markCurrentPlan:!1}:r==="trialing"?{entitlementState:r,gate:a||null,isActive:!0,allowReturnToApp:!0,statusTone:"success",message:iG(e),primaryAction:c?"manage_billing":"none",primaryLabel:c?"Manage Billing":null,showManageBilling:c,markCurrentPlan:!0}:l?{entitlementState:r||null,gate:a||null,isActive:!0,allowReturnToApp:!0,statusTone:"success",message:i||null,primaryAction:"none",primaryLabel:null,showManageBilling:c,markCurrentPlan:!0}:r==="suspended"?{entitlementState:r,gate:a||null,isActive:!1,allowReturnToApp:!1,statusTone:"error",message:"Your access is suspended because billing needs attention. Update billing to restore access.",primaryAction:c?"manage_billing":"open_plans",primaryLabel:c?"Manage Billing":"Open Plans",showManageBilling:c,markCurrentPlan:!1}:r==="canceled"?{entitlementState:r,gate:a||null,isActive:!1,allowReturnToApp:!1,statusTone:"error",message:"Your access has ended. Choose a plan to reactivate your workspace.",primaryAction:"choose_plan",primaryLabel:"Choose Plan",showManageBilling:c,markCurrentPlan:!1}:r==="pending_plan_selection"||e?.planSelectionRequired===!0||a==="plan_selection_required"?{entitlementState:r||"pending_plan_selection",gate:a||"plan_selection_required",isActive:!1,allowReturnToApp:!1,statusTone:"info",message:i||fh.planSelectionRequired,primaryAction:"choose_plan",primaryLabel:"Choose Plan",showManageBilling:!1,markCurrentPlan:!1}:r==="checkout_pending"||a==="checkout_pending"?{entitlementState:r||"checkout_pending",gate:a||"checkout_pending",isActive:!1,allowReturnToApp:!1,statusTone:"info",message:i||fh.checkoutPending,primaryAction:"open_plans",primaryLabel:"Open Plans",showManageBilling:c,markCurrentPlan:!1}:a==="misconfigured"?{entitlementState:r||null,gate:a,isActive:!1,allowReturnToApp:!1,statusTone:"error",message:fh.misconfigured,primaryAction:"none",primaryLabel:null,showManageBilling:!1,markCurrentPlan:!1}:a==="missing_entitlement"?{entitlementState:r||null,gate:a,isActive:!1,allowReturnToApp:!1,statusTone:"error",message:fh.missingEntitlement,primaryAction:"choose_plan",primaryLabel:"Choose Plan",showManageBilling:!1,markCurrentPlan:!1}:{entitlementState:r||null,gate:a||null,isActive:!1,allowReturnToApp:!1,statusTone:i?"error":"info",message:i||null,primaryAction:"none",primaryLabel:null,showManageBilling:c,markCurrentPlan:!1}}const zk=12,Hk=256,lG=new Set(["12345678","123456789","1234567890","admin123","changeme","letmein","letmein123","password","password1","password12","password123","password1234","qwerty","qwerty123","welcome","welcome123"]),dG=e=>String(e||"").trim().toLowerCase().replace(/[^a-z0-9]/g,"");function uG(e){const t=new Set,r=String(e?.email||"").trim().toLowerCase(),a=String(e?.displayName||"").trim().toLowerCase();if(r.includes("@")){const s=r.split("@")[0]||"",i=s.replace(/[^a-z0-9]/g,"");i.length>=4&&t.add(i);for(const l of s.split(/[^a-z0-9]+/))l.length>=4&&t.add(l)}for(const s of a.split(/[^a-z0-9]+/))s.length>=4&&t.add(s);return[...t]}function T_(){return[`Use at least ${zk} characters.`,`Use no more than ${Hk} characters.`,"Avoid common passwords or obvious patterns.","Do not include your email or display name."]}function Vk(e,t){const r=String(e||"");if(!r)return{ok:!1,code:"PASSWORD_REQUIRED",message:"Password is required."};if(r.length<zk)return{ok:!1,code:"PASSWORD_TOO_SHORT",message:`Password must be at least ${zk} characters.`};if(r.length>Hk)return{ok:!1,code:"PASSWORD_TOO_LONG",message:`Password must be no more than ${Hk} characters.`};const a=dG(r);return lG.has(a)?{ok:!1,code:"PASSWORD_TOO_COMMON",message:"Choose a less common password."}:uG(t).some(i=>a.includes(i))?{ok:!1,code:"PASSWORD_CONTAINS_PERSONAL_INFO",message:"Password cannot contain your email or display name."}:{ok:!0}}const oS={password:"Email & Password",google:"Google",github:"GitHub",apple:"Apple"},pG=[{id:"profile",label:"Profile",icon:wu},{id:"security",label:"Sign-in & Security",icon:bT},{id:"billing",label:"Plan & Billing",icon:ST}];function fG(e){const t=String(e||"").trim();return t?t.replace(/[_-]+/g," ").replace(/\b\w/g,r=>r.toUpperCase()):"Not available"}function mG({isOpen:e,theme:t,displayName:r,email:a,avatarDisplayUrl:s,accountBadgeInitial:i,profileSaveBusy:l,profileAvatarBusy:c,profileSaveError:d,profileSaveNotice:f,cloudAuthEnabled:p,availableAuthProviders:g,billingLoading:h,billingError:y,billingActionError:k,billingNotice:v,billingActionBusy:C,billingIntervalChoice:S,accountProfileSummary:w,onClose:_,onSaveProfile:M,onDisplayNameChange:R,onOpenAvatarManager:P,onFetchLoginMethods:b,onUnlinkLoginMethod:$,onAddPassword:I,onChangePassword:E,onLinkProvider:K,onBillingIntervalChange:U,onRefreshBilling:L,onUpdateInterval:D,onManageBilling:ie,onOpenPlans:H}){const[be,Z]=o.useState("profile"),[me,Ve]=o.useState([]),[Re,je]=o.useState(!1),[ye,ue]=o.useState(null),[ve,Pe]=o.useState(null),[Le,se]=o.useState(null),[V,W]=o.useState(!1),[z,fe]=o.useState(""),[ke,Y]=o.useState(!1),[we,q]=o.useState(null),[le,$e]=o.useState(!1),[re,de]=o.useState(!1),[He,ce]=o.useState(""),[pe,xe]=o.useState(""),[N,X]=o.useState(""),[Ae,Te]=o.useState(!1),[he,ot]=o.useState(null),[We,Xe]=o.useState(!1),ae=Uk(w),G=T_(),Ie=String(w?.planName||w?.planId||"No plan selected").trim()||"No plan selected",Fe=new Set(me.map(Ce=>Ce.provider)),it=Fe.has("password"),Me=g.filter(Ce=>Ce!=="password"&&!Fe.has(Ce));o.useEffect(()=>{e&&(Z("profile"),se(null),W(!1),fe(""),q(null),$e(!1),de(!1),ce(""),xe(""),X(""),ot(null),Xe(!1))},[e]),o.useEffect(()=>{be!=="security"&&(de(!1),ce(""),xe(""),X(""),ot(null))},[be]),o.useEffect(()=>{if(!e||be!=="security"||!p)return;let Ce=!1;return je(!0),ue(null),b().then(ut=>{Ce||(je(!1),ut.success&&ut.methods?Ve(ut.methods):ue(ut.error||"Failed to load login methods."))}),()=>{Ce=!0}},[be,p,e,b]);const qe=async Ce=>{Pe(Ce),se(null);const ut=await $(Ce);if(Pe(null),!ut.success){se(ut.error||"Unable to remove this login method.");return}Ve(mt=>mt.filter(Ue=>Ue.provider!==Ce))},ge=async()=>{const Ce=Vk(z,{email:a,displayName:r});if(!Ce.ok){q(Ce.message||"Password does not meet the password policy.");return}Y(!0),q(null);const ut=await I(z);if(Y(!1),!ut.success){q(ut.code==="IDENTITY_ALREADY_EXISTS"?"A password login already exists. Use Forgot Password from sign-in to recover it.":ut.error||"Failed to add password.");return}$e(!0),fe(""),W(!1);const mt=await b();mt.success&&mt.methods&&Ve(mt.methods)},_e=async()=>{if(pe!==N){ot("New passwords do not match.");return}const Ce=Vk(pe,{email:a,displayName:r});if(!Ce.ok){ot(Ce.message||"Password does not meet the password policy.");return}Te(!0),ot(null),Xe(!1);const ut=await E(He,pe);if(Te(!1),!ut.success){ot(ut.error||"Failed to change password.");return}ce(""),xe(""),X(""),de(!1),Xe(!0);const mt=await b();mt.success&&mt.methods&&Ve(mt.methods)},Be=()=>{if(ae.primaryAction==="manage_billing"){ie();return}H()},Ge=()=>n.jsxs("section",{className:qr.section,"aria-labelledby":"account-profile-heading",children:[n.jsx("div",{className:qr.sectionHeader,children:n.jsxs("div",{children:[n.jsx("h2",{className:"tf-heading-card",id:"account-profile-heading",children:"Profile"}),n.jsx("p",{className:"tf-text-secondary",children:"Manage how you appear across Taskforce."})]})}),n.jsxs("div",{className:`${qr.sectionCard} tf-surface-panel`,children:[n.jsxs("div",{className:Zt.profileEditLayout,children:[n.jsx("div",{className:Zt.profileAvatarEditor,children:n.jsx(LV,{label:"Edit profile photo",imageUrl:s,fallback:i,disabled:l||c,onClick:P})}),n.jsxs("div",{className:Zt.profileFieldStack,children:[n.jsxs("label",{className:Zt.profileFieldLabel,children:[n.jsx("span",{children:"Display name"}),n.jsx("input",{className:x.input,type:"text",value:r,onChange:Ce=>R(Ce.target.value),placeholder:"Display name",disabled:l})]}),n.jsxs("label",{className:Zt.profileFieldLabel,children:[n.jsx("span",{children:"Email"}),n.jsx("input",{className:x.input,type:"email",value:a,readOnly:!0,disabled:!0})]})]})]}),d&&n.jsx("p",{className:"tf-text-error",role:"alert",children:d}),f&&!d&&n.jsx("p",{className:"tf-text-secondary",role:"status",children:f}),n.jsx("div",{className:qr.sectionActions,children:n.jsx("button",{type:"button",className:"tf-button-primary tf-button-compact",onClick:M,disabled:l||c||!r.trim(),children:l?"Saving…":"Save profile"})})]})]}),F=()=>n.jsxs("section",{className:qr.section,"aria-labelledby":"account-security-heading",children:[n.jsx("div",{className:qr.sectionHeader,children:n.jsxs("div",{children:[n.jsx("h2",{className:"tf-heading-card",id:"account-security-heading",children:"Sign-in & Security"}),n.jsx("p",{className:"tf-text-secondary",children:"Manage the methods you use to sign in to your account."})]})}),n.jsxs("div",{className:`${qr.sectionCard} tf-surface-panel`,children:[n.jsx("div",{className:qr.cardHeader,children:n.jsxs("div",{children:[n.jsx("h3",{className:"tf-heading-card",children:"Login methods"}),n.jsx("p",{className:"tf-text-secondary",children:"Keep at least one sign-in method connected."})]})}),Re&&n.jsx("p",{className:"tf-text-secondary",children:"Loading login methods…"}),ye&&n.jsx("p",{className:"tf-text-error",role:"alert",children:ye}),Le&&n.jsx("p",{className:"tf-text-error",role:"alert",children:Le}),le&&n.jsx("p",{className:"tf-text-secondary",role:"status",children:"Password login added."}),We&&n.jsx("p",{className:"tf-text-secondary",role:"status",children:"Password changed."}),!Re&&me.length>0&&n.jsx("div",{className:qr.loginMethodList,children:me.map(Ce=>n.jsxs("div",{className:qr.loginMethodRow,children:[n.jsx("span",{className:qr.loginMethodIcon,"aria-hidden":"true",children:Ce.provider==="password"?n.jsx(AT,{size:16}):n.jsx(Au,{size:16})}),n.jsxs("span",{className:qr.loginMethodCopy,children:[n.jsx("strong",{children:oS[Ce.provider]||Ce.provider}),Ce.providerEmail&&n.jsx("span",{children:Ce.providerEmail})]}),me.length>1&&n.jsx("button",{type:"button",className:"tf-button-ghost tf-button-compact",disabled:ve===Ce.provider,onClick:()=>{qe(Ce.provider)},children:ve===Ce.provider?"Removing…":"Remove"})]},Ce.provider))}),!Re&&!ye&&it&&!re&&n.jsx("div",{className:qr.sectionActions,children:n.jsx("button",{type:"button",className:"tf-button-secondary tf-button-compact",onClick:()=>{de(!0),Xe(!1),ot(null)},children:"Change password"})}),re&&n.jsxs("div",{className:qr.addPasswordForm,children:[n.jsxs("label",{className:qr.fieldLabel,children:[n.jsx("span",{children:"Current password"}),n.jsx("input",{type:"password",className:x.input,value:He,onChange:Ce=>ce(Ce.target.value),disabled:Ae,autoComplete:"current-password"})]}),n.jsxs("label",{className:qr.fieldLabel,children:[n.jsx("span",{children:"New password"}),n.jsx("input",{type:"password",className:x.input,value:pe,onChange:Ce=>xe(Ce.target.value),disabled:Ae,autoComplete:"new-password"})]}),n.jsxs("label",{className:qr.fieldLabel,children:[n.jsx("span",{children:"Confirm new password"}),n.jsx("input",{type:"password",className:x.input,value:N,onChange:Ce=>X(Ce.target.value),disabled:Ae,autoComplete:"new-password"})]}),n.jsx("p",{className:"tf-text-helper",children:G.join(" ")}),he&&n.jsx("p",{className:"tf-text-error",role:"alert",children:he}),n.jsxs("div",{className:qr.inlineActions,children:[n.jsx("button",{type:"button",className:"tf-button-secondary tf-button-compact",onClick:()=>{de(!1),ce(""),xe(""),X(""),ot(null)},disabled:Ae,children:"Cancel"}),n.jsx("button",{type:"button",className:"tf-button-primary tf-button-compact",onClick:()=>{_e()},disabled:Ae||!He||!pe||!N,children:Ae?"Changing…":"Change password"})]})]}),!Re&&!ye&&!it&&!V&&n.jsx("div",{className:qr.sectionActions,children:n.jsx("button",{type:"button",className:"tf-button-secondary tf-button-compact",onClick:()=>{W(!0),$e(!1),q(null)},children:"Add password login"})}),V&&n.jsxs("div",{className:qr.addPasswordForm,children:[n.jsxs("label",{className:qr.fieldLabel,children:[n.jsx("span",{children:"New password"}),n.jsx("input",{type:"password",className:x.input,placeholder:"Use 12+ characters",value:z,onChange:Ce=>fe(Ce.target.value),disabled:ke,autoComplete:"new-password"})]}),n.jsx("p",{className:"tf-text-helper",children:G.join(" ")}),we&&n.jsx("p",{className:"tf-text-error",role:"alert",children:we}),n.jsxs("div",{className:qr.inlineActions,children:[n.jsx("button",{type:"button",className:"tf-button-secondary tf-button-compact",onClick:()=>{W(!1),fe(""),q(null)},disabled:ke,children:"Cancel"}),n.jsx("button",{type:"button",className:"tf-button-primary tf-button-compact",onClick:()=>{ge()},disabled:ke||!z,children:ke?"Saving…":"Save password"})]})]}),!Re&&!ye&&Me.length>0&&n.jsxs("div",{className:qr.linkProviderBlock,children:[n.jsx("p",{className:"tf-label-micro",children:"Link another account"}),n.jsx("div",{className:qr.inlineActions,children:Me.map(Ce=>n.jsxs("button",{type:"button",className:"tf-button-secondary tf-button-compact",onClick:()=>K(Ce),children:[n.jsx(Au,{size:15}),oS[Ce]||Ce]},Ce))})]})]})]}),Ne=()=>n.jsxs("section",{className:qr.section,"aria-labelledby":"account-billing-heading",children:[n.jsxs("div",{className:qr.sectionHeader,children:[n.jsxs("div",{children:[n.jsx("h2",{className:"tf-heading-card",id:"account-billing-heading",children:"Plan & Billing"}),n.jsx("p",{className:"tf-text-secondary",children:"Review your plan and open the secure billing portal."})]}),n.jsxs("button",{type:"button",className:"tf-button-ghost tf-button-compact",onClick:L,disabled:C||h,children:[n.jsx(VS,{size:14}),"Refresh"]})]}),n.jsxs("div",{className:`${qr.sectionCard} tf-surface-panel`,children:[h&&n.jsx("p",{className:"tf-text-secondary",children:"Loading billing status…"}),y&&n.jsx("p",{className:"tf-text-error",role:"alert",children:y}),k&&n.jsx("p",{className:"tf-text-error",role:"alert",children:k}),v&&n.jsx("p",{className:"tf-text-secondary",role:"status",children:v}),n.jsxs("div",{className:qr.planSummary,children:[n.jsxs("div",{children:[n.jsx("p",{className:"tf-label-micro",children:"Current plan"}),n.jsx("strong",{className:qr.planName,children:Ie})]}),n.jsx("span",{className:`tf-chip ${ae.isActive?"tf-chip-success":"tf-chip-neutral"}`,children:fG(w?.entitlementState)})]}),ae.message&&n.jsx("p",{className:ae.statusTone==="error"?"tf-text-error":"tf-text-secondary",children:ae.message}),w?.stripeSubscriptionId&&n.jsxs("div",{className:qr.intervalRow,children:[n.jsxs("label",{className:qr.fieldLabel,children:[n.jsx("span",{children:"Billing interval"}),n.jsxs("select",{className:x.input,value:S,onChange:Ce=>U(Ce.target.value==="year"?"year":"month"),disabled:C,children:[n.jsx("option",{value:"month",children:"Monthly"}),n.jsx("option",{value:"year",children:"Yearly"})]})]}),n.jsx("button",{type:"button",className:"tf-button-secondary tf-button-compact",onClick:D,disabled:C,children:"Update interval"})]}),n.jsxs("div",{className:qr.sectionActions,children:[(ae.primaryAction==="manage_billing"||ae.primaryAction==="none")&&n.jsx("button",{type:"button",className:"tf-button-secondary tf-button-compact",onClick:H,disabled:C,children:"View plans"}),ae.showManageBilling&&ae.primaryAction!=="manage_billing"&&n.jsx("button",{type:"button",className:"tf-button-secondary tf-button-compact",onClick:ie,disabled:C,children:"Manage billing"}),ae.primaryLabel&&n.jsx("button",{type:"button",className:"tf-button-primary tf-button-compact",onClick:Be,disabled:C,children:C?"Working…":ae.primaryLabel})]})]})]});return n.jsx(Ro,{isOpen:e,onClose:_,title:"Account Settings",size:"mdWide",theme:t,draggable:!0,children:n.jsx("div",{className:`${Jt.form} ${qr.modalBody}`,children:n.jsxs("div",{className:qr.layout,children:[n.jsx("div",{className:qr.sectionTabs,role:"tablist","aria-label":"Account settings sections","aria-orientation":"vertical",children:pG.map(Ce=>{const ut=Ce.icon,mt=Ce.id===be;return n.jsxs("button",{type:"button",role:"tab",id:`account-settings-tab-${Ce.id}`,"aria-controls":`account-settings-panel-${Ce.id}`,"aria-selected":mt,className:qr.sectionTab,onClick:()=>Z(Ce.id),children:[n.jsx(ut,{size:16}),n.jsx("span",{children:Ce.label})]},Ce.id)})}),n.jsxs("div",{className:qr.sectionPanel,role:"tabpanel",id:`account-settings-panel-${be}`,"aria-labelledby":`account-settings-tab-${be}`,children:[be==="profile"&&Ge(),be==="security"&&F(),be==="billing"&&Ne()]})]})})})}var iS=(e,t,r,a,s,i)=>{if(i===0)e.rect(t,r,a,s);else{let l=a-i,c=s-i;e.translate(t,r),e.arc(i,i,i,Math.PI,Math.PI*1.5),e.lineTo(l,0),e.arc(l,i,i,Math.PI*1.5,Math.PI*2),e.lineTo(a,c),e.arc(l,c,i,Math.PI*2,Math.PI*.5),e.lineTo(i,s),e.arc(i,c,i,Math.PI*.5,Math.PI),e.closePath(),e.translate(-t,-r)}},hG=(e,t,r,a,s,i)=>{e.fillStyle=i;let l=a/3,c=s/3;e.fillRect(t,r,1,s),e.fillRect(l+t,r,1,s),e.fillRect(l*2+t,r,1,s),e.fillRect(l*3+t,r,1,s),e.fillRect(l*4+t,r,1,s),e.fillRect(t,r,a,1),e.fillRect(t,c+r,a,1),e.fillRect(t,c*2+r,a,1),e.fillRect(t,c*3+r,a,1),e.fillRect(t,c*4+r,a,1)},gG=e=>!!e.match(/^\s*data:([a-z]+\/[a-z]+(;[a-z-]+=[a-z-]+)?)?(;base64)?,[a-z0-9!$&',()*+;=\-._~:@/?%\s]*\s*$/i),x_=(e,t)=>new Promise((r,a)=>{let s=new Image;s.addEventListener("load",()=>r(s)),s.addEventListener("error",a),!gG(e)&&t&&(s.crossOrigin=t),s.src=e}),yG=e=>new Promise((t,r)=>{let a=new FileReader;a.addEventListener("load",s=>{try{if(!s?.target?.result)throw Error("No image data");t(x_(s.target.result))}catch(i){r(i)}}),a.readAsDataURL(e)}),kG=typeof File<"u",cS=e=>Math.PI/180*e,lS={x:.5,y:.5},vG=class{constructor(e){this.imageState=lS,this.config={border:25,borderRadius:0,scale:1,rotate:0,color:[0,0,0,.5],backgroundColor:"",borderColor:void 0,showGrid:!1,gridColor:"#666",disableBoundaryChecks:!1,disableHiDPIScaling:!1,disableCanvasRotation:!0,crossOrigin:void 0,...e},this.pixelRatio=typeof window<"u"&&window.devicePixelRatio&&!this.config.disableHiDPIScaling?window.devicePixelRatio:1}getPixelRatio(){return this.pixelRatio}getImageState(){return this.imageState}setImageState(e){this.imageState=e}updateConfig(e){this.config={...this.config,...e}}isVertical(){return!this.config.disableCanvasRotation&&this.config.rotate%180!=0}getBorders(e){let t=e??this.config.border;return Array.isArray(t)?t:[t,t]}getDimensions(){let{width:e,height:t,rotate:r,border:a}=this.config,s={width:0,height:0},[i,l]=this.getBorders(a);return this.isVertical()?(s.width=t,s.height=e):(s.width=e,s.height=t),s.width+=i*2,s.height+=l*2,{canvas:s,rotate:r,width:e,height:t,border:a}}getXScale(){if(!this.imageState.width||!this.imageState.height)throw Error("Image dimension is unknown.");let e=this.config.width/this.config.height,t=this.imageState.width/this.imageState.height;return Math.min(1,e/t)}getYScale(){if(!this.imageState.width||!this.imageState.height)throw Error("Image dimension is unknown.");let e=this.config.height/this.config.width,t=this.imageState.height/this.imageState.width;return Math.min(1,e/t)}getCroppingRect(e){if(!this.imageState.width||!this.imageState.height)return{x:0,y:0,width:1,height:1};let t=e||{x:this.imageState.x,y:this.imageState.y},r=1/this.config.scale*this.getXScale(),a=1/this.config.scale*this.getYScale(),s={x:t.x-r/2,y:t.y-a/2,width:r,height:a},i=0,l=1-s.width,c=0,d=1-s.height;return(this.config.disableBoundaryChecks||r>1||a>1)&&(i=-s.width,l=1,c=-s.height,d=1),{...s,x:Math.max(i,Math.min(s.x,l)),y:Math.max(c,Math.min(s.y,d))}}getInitialSize(e,t){let r,a,s=this.getDimensions();return s.height/s.width>t/e?(r=s.height,a=r/t*e):(a=s.width,r=a/e*t),{height:r,width:a}}async loadImage(e){let t;if(kG&&e instanceof File)t=await yG(e);else if(typeof e=="string")t=await x_(e,this.config.crossOrigin);else throw Error("Invalid image source");let r={...this.getInitialSize(t.width,t.height),resource:t,x:.5,y:.5};return this.imageState=r,r}clearImage(){this.imageState=lS}calculatePosition(e=this.imageState,t){let[r,a]=this.getBorders(t);if(!e.width||!e.height)throw Error("Image dimension is unknown.");let s=this.getCroppingRect(),i=e.width*this.config.scale,l=e.height*this.config.scale,c=-s.x*i,d=-s.y*l;return this.isVertical()?(c+=a,d+=r):(c+=r,d+=a),{x:c,y:d,height:l,width:i}}paint(e){e.save(),e.scale(this.pixelRatio,this.pixelRatio),e.translate(0,0),e.fillStyle="rgba("+this.config.color.slice(0,4).join(",")+")";let t=this.config.borderRadius,r=this.getDimensions(),[a,s]=this.getBorders(r.border),i=r.canvas.height,l=r.canvas.width;t=Math.max(t,0),t=Math.min(t,l/2-a,i/2-s),e.beginPath(),iS(e,a,s,l-a*2,i-s*2,t),e.rect(l,0,-l,i),e.fill("evenodd"),this.config.borderColor&&(e.strokeStyle="rgba("+this.config.borderColor.slice(0,4).join(",")+")",e.lineWidth=1,e.beginPath(),iS(e,a+.5,s+.5,l-a*2-1,i-s*2-1,t),e.stroke()),this.config.showGrid&&hG(e,a,s,l-a*2,i-s*2,this.config.gridColor),e.restore()}paintImage(e,t,r,a=this.pixelRatio){if(!t.resource)return;let s=this.calculatePosition(t,r);e.save(),e.translate(e.canvas.width/2,e.canvas.height/2),e.rotate(this.config.rotate*Math.PI/180),e.translate(-(e.canvas.width/2),-(e.canvas.height/2)),this.isVertical()&&e.translate((e.canvas.width-e.canvas.height)/2,(e.canvas.height-e.canvas.width)/2),e.scale(a,a),e.globalCompositeOperation="destination-over",e.drawImage(t.resource,s.x,s.y,s.width,s.height),this.config.backgroundColor&&(e.fillStyle=this.config.backgroundColor,e.fillRect(0,0,e.canvas.width,e.canvas.height)),e.restore()}getImage(){let e=this.getCroppingRect(),t=this.imageState;if(!t.resource)throw Error("No image resource available, please report this to: https://github.com/mosch/react-avatar-editor/issues");e.x*=t.resource.width,e.y*=t.resource.height,e.width*=t.resource.width,e.height*=t.resource.height;let r=document.createElement("canvas");this.isVertical()?(r.width=Math.round(e.height),r.height=Math.round(e.width)):(r.width=Math.round(e.width),r.height=Math.round(e.height));let a=r.getContext("2d");if(!a)throw Error("No context found, please report this to: https://github.com/mosch/react-avatar-editor/issues");return a.translate(r.width/2,r.height/2),a.rotate(this.config.rotate*Math.PI/180),a.translate(-(r.width/2),-(r.height/2)),this.isVertical()&&a.translate((r.width-r.height)/2,(r.height-r.width)/2),this.config.backgroundColor&&(a.fillStyle=this.config.backgroundColor,a.fillRect(0,0,r.width,r.height)),a.drawImage(t.resource,-e.x,-e.y),r}getImageScaledToCanvas(){let e=this.getDimensions(),t=this.imageState,r=document.createElement("canvas");if(this.isVertical()?(r.width=e.height,r.height=e.width):(r.width=e.width,r.height=e.height),!t.resource)return r;let a=r.getContext("2d");if(!a)return r;let s=this.calculatePosition(t,0);return a.save(),a.translate(r.width/2,r.height/2),a.rotate(this.config.rotate*Math.PI/180),a.translate(-(r.width/2),-(r.height/2)),this.isVertical()&&a.translate((r.width-r.height)/2,(r.height-r.width)/2),this.config.backgroundColor&&(a.fillStyle=this.config.backgroundColor,a.fillRect(0,0,r.width,r.height)),a.drawImage(t.resource,s.x,s.y,s.width,s.height),a.restore(),r}calculateDragPosition(e,t,r,a){let s=r-e,i=a-t;if(!this.imageState.width||!this.imageState.height)throw Error("Image dimension is unknown.");let l=this.imageState.width*this.config.scale,c=this.imageState.height*this.config.scale,{x:d,y:f}=this.getCroppingRect();d*=l,f*=c;let p=this.config.rotate;p%=360,p=p<0?p+360:p;let g=Math.cos(cS(p)),h=Math.sin(cS(p)),y=d+s*g+i*h,k=f+-s*h+i*g,v=1/this.config.scale*this.getXScale(),C=1/this.config.scale*this.getYScale();return{x:y/l+v/2,y:k/c+C/2}}},dS=()=>{},wG=()=>{let e=!1;try{let t=Object.defineProperty({},"passive",{get:function(){e=!0}});window.addEventListener("test",dS,t),window.removeEventListener("test",dS,t)}catch{e=!1}return e},R_=o.forwardRef((e,t)=>{let{scale:r=1,rotate:a=0,border:s=25,borderRadius:i=0,width:l=200,height:c=200,color:d=[0,0,0,.5],showGrid:f=!1,gridColor:p="#666",disableBoundaryChecks:g=!1,disableHiDPIScaling:h=!1,disableCanvasRotation:y=!0,image:k,position:v,backgroundColor:C,crossOrigin:S,onLoadStart:w,onLoadFailure:_,onLoadSuccess:M,onImageReady:R,onImageChange:P,onMouseUp:b,onMouseMove:$,onPositionChange:I,borderColor:E,style:K}=e,U=o.useRef(null),L=o.useRef(new vG({width:l,height:c,border:s,borderRadius:i,scale:r,rotate:a,color:d,backgroundColor:C,borderColor:E,showGrid:f,gridColor:p,disableBoundaryChecks:g,disableHiDPIScaling:h,disableCanvasRotation:y,crossOrigin:S})),D=o.useRef(!1),ie=o.useRef(void 0),H=o.useRef(void 0),[be,Z]=o.useState(!1),[me,Ve]=o.useState(!1),[Re,je]=o.useState(L.current.getImageState()),ye=o.useRef(b);ye.current=b;let ue=o.useRef($);ue.current=$;let ve=o.useRef(I);ve.current=I,o.useEffect(()=>{L.current.updateConfig({width:l,height:c,border:s,borderRadius:i,scale:r,rotate:a,color:d,backgroundColor:C,borderColor:E,showGrid:f,gridColor:p,disableBoundaryChecks:g,disableHiDPIScaling:h,disableCanvasRotation:y,crossOrigin:S})},[l,c,s,i,r,a,d,C,E,f,p,g,h,y,S]);let Pe=o.useCallback(()=>{if(!U.current)throw Error("No canvas found, please report this to: https://github.com/mosch/react-avatar-editor/issues");return U.current},[]),Le=o.useCallback(()=>{let le=Pe().getContext("2d");if(!le)throw Error("No context found, please report this to: https://github.com/mosch/react-avatar-editor/issues");return le},[Pe]),se=o.useCallback(async le=>{Ve(!0),w?.();try{let $e=await L.current.loadImage(le);D.current=!1,Z(!1),je($e),R?.(),M?.($e)}catch{_?.()}finally{Ve(!1)}},[w,R,M,_]),V=o.useCallback(()=>{let le=Pe();Le().clearRect(0,0,le.width,le.height),L.current.clearImage(),je(L.current.getImageState())},[Pe,Le]),W=o.useCallback(()=>{let le=Le(),$e=Pe();le.clearRect(0,0,$e.width,$e.height),L.current.paint(le),L.current.paintImage(le,Re,s)},[Le,Pe,Re,s,l,c,i,r,a,d,C,E,f,p,g,h,y,S]),z=o.useCallback(le=>{le.preventDefault(),D.current=!0,ie.current=void 0,H.current=void 0,Z(!0)},[]),fe=o.useCallback(()=>{D.current=!0,ie.current=void 0,H.current=void 0,Z(!0)},[]);o.useImperativeHandle(t,()=>({getImage:()=>L.current.getImage(),getImageScaledToCanvas:()=>L.current.getImageScaledToCanvas(),getCroppingRect:()=>L.current.getCroppingRect()}),[]),o.useEffect(()=>{let le=Le();k&&se(k),L.current.paint(le);let $e=He=>{if(!D.current)return;He.cancelable&&He.preventDefault();let ce="targetTouches"in He?He.targetTouches[0].pageX:He.clientX,pe="targetTouches"in He?He.targetTouches[0].pageY:He.clientY,xe=ie.current,N=H.current;if(ie.current=ce,H.current=pe,xe!==void 0&&N!==void 0){let X=L.current.getImageState();if(X.width&&X.height){let Ae=L.current.calculateDragPosition(ce,pe,xe,N);ve.current?.(Ae);let Te={...X,...Ae};L.current.setImageState(Te),je(Te)}}ue.current?.(He)},re=()=>{D.current&&(D.current=!1,Z(!1),ye.current?.())},de=wG()?{passive:!1}:!1;return document.addEventListener("mousemove",$e,de),document.addEventListener("mouseup",re,de),document.addEventListener("touchmove",$e,de),document.addEventListener("touchend",re,de),()=>{document.removeEventListener("mousemove",$e,!1),document.removeEventListener("mouseup",re,!1),document.removeEventListener("touchmove",$e,!1),document.removeEventListener("touchend",re,!1)}},[]),o.useEffect(()=>{k?se(k):!k&&Re.x!==.5&&Re.y!==.5&&V()},[k,l,c,C]),o.useEffect(()=>{W()},[W]),o.useEffect(()=>{if(!me)return;let le=U.current;if(!le)return;let $e=le.getContext("2d");if(!$e)return;let re,de=performance.now(),He=ce=>{let pe=(ce-de)/1e3,xe=.03+Math.sin(pe*2.5)*.02+.02;$e.save(),$e.clearRect(0,0,le.width,le.height),$e.fillStyle=`rgba(255,255,255,${xe})`,$e.fillRect(0,0,le.width,le.height),$e.restore(),re=requestAnimationFrame(He)};return re=requestAnimationFrame(He),()=>cancelAnimationFrame(re)},[me]);let ke=o.useRef({image:k,width:l,height:c,position:v,scale:r,rotate:a,imageX:Re.x,imageY:Re.y});o.useEffect(()=>{let le=ke.current;(le.image!==k||le.width!==l||le.height!==c||le.position!==v||le.scale!==r||le.rotate!==a||le.imageX!==Re.x||le.imageY!==Re.y)&&(P?.(),ke.current={image:k,width:l,height:c,position:v,scale:r,rotate:a,imageX:Re.x,imageY:Re.y})},[k,l,c,v,r,a,Re.x,Re.y,P]);let Y=L.current.getDimensions(),we=L.current.getPixelRatio(),q={width:Y.canvas.width,height:Y.canvas.height,cursor:be?"grabbing":"grab",touchAction:"none",maxWidth:"none",maxHeight:"none"};return Q.createElement("canvas",{width:Y.canvas.width*we,height:Y.canvas.height*we,onMouseDown:z,onTouchStart:fe,style:{...q,...K},ref:U})});R_.displayName="AvatarEditor";const bG="_avatarManagerBody_1bfoi_1",SG="_editorPanel_1bfoi_7",AG="_editorFrame_1bfoi_13",CG="_gifPreviewImage_1bfoi_21",_G="_emptyPreview_1bfoi_28",IG="_controlPanel_1bfoi_41",TG="_zoomField_1bfoi_47",xG="_zoomSlider_1bfoi_52",RG="_actionGrid_1bfoi_57",PG="_fileInput_1bfoi_71",EG="_messageStack_1bfoi_75",NG="_footerActions_1bfoi_80",zo={avatarManagerBody:bG,editorPanel:SG,editorFrame:AG,gifPreviewImage:CG,emptyPreview:_G,controlPanel:IG,zoomField:TG,zoomSlider:xG,actionGrid:RG,fileInput:PG,messageStack:EG,footerActions:NG},rk=512,jG=48,mh=512;function uS(e,t,r){return new Promise(a=>{e.toBlob(a,t,r)})}function MG(e,t){const r=String(e).trim()||"avatar",a=r.lastIndexOf(".");return a<=0?`${r}${t}`:`${r.slice(0,a)}${t}`}async function DG(e,t){const r=e.getImageScaledToCanvas(),a=document.createElement("canvas");a.width=mh,a.height=mh;const s=a.getContext("2d");if(!s)throw new Error("Image editing requires a 2D canvas context.");s.drawImage(r,0,0,mh,mh);const l=await uS(a,"image/webp",.9)||await uS(a,"image/jpeg",.9);if(!l)throw new Error("Unable to prepare profile photo.");const c=l.type||"image/jpeg",d=c==="image/webp"?".webp":".jpg";return new File([l],MG(t,d),{type:c,lastModified:Date.now()})}function LG({isOpen:e,theme:t,title:r="Edit Photo",currentImageUrl:a,editorImageUrl:s="",fallbackInitial:i,accept:l,busy:c,generating:d=!1,generateLabel:f="Generate",hasPendingImage:p,canRemove:g,error:h,notice:y,onClose:k,onApplyImage:v,onGenerateImage:C,onRemoveImage:S,onDiscardPendingImage:w}){const _=o.useRef(null),M=o.useRef(null),R=o.useRef(!1),P=o.useRef(!1),[b,$]=o.useState(null),[I,E]=o.useState(""),[K,U]=o.useState(1.1),[L,D]=o.useState(!1),[ie,H]=o.useState(null),[be,Z]=o.useState(null);o.useEffect(()=>{e||($(null),E(""),U(1.1),D(!1),P.current=!1,H(null),Z(null))},[e]),o.useEffect(()=>{e&&(D(!1),P.current=!1)},[a,s,e]),o.useEffect(()=>{if(!b){E("");return}const W=URL.createObjectURL(b);return E(W),()=>URL.revokeObjectURL(W)},[b]);const me=I||s||a,Ve=b?.name||"avatar",Re=String(i||"").trim().charAt(0).toUpperCase(),je=ie||h,ye=be||y,ue=c||d,ve=o.useCallback(W=>{if(H(null),Z(null),!!W){if(!W.type.startsWith("image/")){H("Profile photo must be an image file.");return}W.type==="image/gif"&&Z("Animated GIFs will upload without repositioning."),$(W),U(1.1),D(!1),P.current=!1}},[]),Pe=o.useCallback(async()=>{H(null);const W=_.current;if(b?.type==="image/gif"){await v(b)&&k();return}if(!W||!me){H("Choose a profile photo first.");return}try{const z=await DG(W,Ve);await v(z,b,{preserveExistingSource:!b&&!!s})&&k()}catch(z){H(z instanceof Error?z.message:"Unable to prepare profile photo.")}},[a,me,s,v,k,b,Ve]),Le=o.useCallback(async()=>{if(!(!C||ue||R.current)){R.current=!0,H(null),Z(null);try{await C()&&($(null),U(1.1),D(!1),P.current=!1)}catch(W){H(W instanceof Error?W.message:"Unable to generate profile photo.")}finally{R.current=!1}}},[ue,C]),se=p||!!b||L,V=o.useMemo(()=>n.jsxs("div",{className:zo.footerActions,children:[n.jsx("button",{type:"button",className:"tf-button-secondary tf-button-compact",onClick:k,disabled:c,children:"Cancel"}),n.jsx("button",{type:"button",className:"tf-button-primary tf-button-compact",onClick:()=>{Pe()},disabled:ue||!se,children:c?"Applying...":"Apply Changes"})]}),[c,se,Pe,ue,k]);return n.jsx(Ro,{isOpen:e,onClose:k,title:r,size:"md",theme:t,draggable:!0,footer:V,children:n.jsxs("div",{className:zo.avatarManagerBody,children:[n.jsxs("div",{className:zo.editorPanel,children:[n.jsx("div",{className:`tf-surface-inset ${zo.editorFrame}`,onPointerDown:()=>{me&&b?.type!=="image/gif"&&(P.current=!0)},children:b?.type==="image/gif"&&I?n.jsx("img",{src:I,alt:"",className:zo.gifPreviewImage}):me?n.jsx(R_,{ref:_,image:me,width:rk,height:rk,border:jG,borderRadius:rk/2,scale:K,color:[15,15,26,.72],backgroundColor:"transparent",onPositionChange:()=>{P.current&&D(!0)},style:{width:"100%",height:"100%",maxWidth:"100%",maxHeight:"100%",display:"block",borderRadius:"var(--radius-lg)",boxShadow:"var(--box-shadow-sm)"},disableCanvasRotation:!0}):n.jsx("div",{className:zo.emptyPreview,"aria-hidden":"true",children:Re})}),n.jsxs("div",{className:zo.controlPanel,children:[n.jsx("input",{ref:M,type:"file","aria-label":"Choose profile photo",accept:l,className:zo.fileInput,onChange:W=>ve(W.target.files?.[0]||null),disabled:ue}),n.jsxs("div",{className:zo.actionGrid,children:[n.jsxs("button",{type:"button",className:"tf-button-secondary tf-button-compact",onClick:()=>M.current?.click(),disabled:ue,children:[n.jsx(CT,{size:16}),"Choose"]}),p&&w&&n.jsxs("button",{type:"button",className:"tf-button-secondary tf-button-compact",onClick:w,disabled:ue,children:[n.jsx(mi,{size:16}),"Discard"]}),C&&n.jsxs("button",{type:"button",className:"tf-button-secondary tf-button-compact",onClick:()=>{Le()},disabled:ue,"aria-busy":d,children:[d?n.jsx(Ln,{size:16,className:x.spinner}):n.jsx(_T,{size:16}),d?"Generating":f]}),g&&S&&n.jsxs("button",{type:"button",className:"tf-button-destructive tf-button-compact",onClick:S,disabled:ue,children:[n.jsx(Lf,{size:16}),"Remove"]})]}),n.jsxs("label",{className:`tf-field-stack ${zo.zoomField}`,children:[n.jsx("span",{className:"tf-field-label",children:"Zoom"}),n.jsx("input",{type:"range",min:"1",max:"3",step:"0.01",value:K,onChange:W=>{U(Number(W.target.value)),D(!0)},className:zo.zoomSlider,disabled:ue||!me||b?.type==="image/gif"})]})]})]}),(je||ye)&&n.jsxs("div",{className:zo.messageStack,children:[je&&n.jsx("p",{className:"tf-text-error",children:je}),ye&&!je&&n.jsx("p",{className:"tf-text-helper",children:ye})]})]})})}const Gk="support@taskforcehq.ai";function hh(e){return String(e||"").trim()}function OG(e={}){const t=hh(e.workspaceName),r=hh(e.workspaceId),a=hh(e.accountLabel),s=hh(e.runtimeMode),i=[t?`Workspace: ${t}`:"",r?`Workspace ID: ${r}`:"",a?`Account: ${a}`:"",s?`Runtime: ${s}`:""].filter(Boolean),l=["Hi Taskforce team,","","I need help with:","",i.length>0?"Context:":"",...i,(i.length>0,""),"What happened:",""].filter((d,f,p)=>d!==""||p[f-1]!==""),c=new URLSearchParams({subject:"Taskforce support request",body:l.join(`
|
|
6
|
+
`)});return`mailto:${Gk}?${c.toString()}`}function BG({isOpen:e,theme:t,onClose:r,onOpenSettings:a,supportMailtoHref:s}){const[i,l]=o.useState("idle"),c=async()=>{try{await navigator.clipboard.writeText(Gk),l("copied"),window.setTimeout(()=>l("idle"),1600)}catch{l("failed"),window.setTimeout(()=>l("idle"),2200)}};return n.jsx(Ro,{isOpen:e,onClose:r,title:"Help & Support",size:"sm",theme:t,draggable:!0,children:n.jsxs("div",{className:`${Jt.form} ${Br.modalBody} ${Br.helpModalBody}`,children:[n.jsxs("div",{className:Br.helpHero,children:[n.jsx("span",{className:Br.helpHeroIcon,"aria-hidden":"true",children:n.jsx(IT,{size:20})}),n.jsxs("div",{className:Br.helpHeroCopy,children:[n.jsx("h2",{className:"tf-heading-card",children:"How can we help?"}),n.jsx("p",{className:"tf-text-secondary",children:"Tell us what you were trying to do, what happened, and any workspace context that could help us reproduce it."})]})]}),n.jsxs("section",{className:`${Br.supportContactCard} tf-surface-panel`,"aria-labelledby":"support-email-heading",children:[n.jsx("div",{className:Br.supportContactHeader,children:n.jsxs("div",{children:[n.jsx("h3",{className:"tf-label-micro",id:"support-email-heading",children:"Email support"}),n.jsx("a",{className:Br.supportEmailAddress,href:s,children:Gk})]})}),n.jsxs("div",{className:Br.supportActionRow,children:[n.jsxs("a",{className:`tf-button-primary tf-button-compact ${Br.supportAction}`,href:s,children:[n.jsx(TT,{size:15}),"Email Support"]}),n.jsxs("button",{className:`tf-button-secondary tf-button-compact ${Br.supportAction}`,onClick:()=>{c()},type:"button",children:[i==="copied"?n.jsx(hi,{size:15}):n.jsx(GS,{size:15}),i==="copied"?"Copied":i==="failed"?"Copy failed":"Copy address"]})]})]}),n.jsxs("section",{className:Br.supportPanel,"aria-labelledby":"support-settings-heading",children:[n.jsxs("div",{className:Br.supportPanelHeader,children:[n.jsx(Af,{size:17,"aria-hidden":"true"}),n.jsxs("div",{children:[n.jsx("h3",{className:"tf-heading-card",id:"support-settings-heading",children:"Check workspace settings"}),n.jsx("p",{className:"tf-text-secondary",children:"Common workspace, appearance, and setup options are available in Settings."})]})]}),n.jsxs("button",{className:`tf-button-secondary tf-button-compact ${Br.supportAction}`,onClick:a,type:"button",children:[n.jsx(Af,{size:15}),"Open Settings"]})]})]})})}function WG({prompt:e,theme:t,onClose:r,onConfirm:a}){return n.jsx(Ro,{isOpen:!!e,onClose:r,title:"Date Warning",size:"sm",theme:t,draggable:!1,closeOnOverlayClick:!1,children:n.jsxs("div",{className:`${x.form} tf-inline-stack-sm`,style:{padding:"16px",gap:"12px"},children:[n.jsx("p",{className:"tf-text-body",children:"Due date is before scheduled date."}),e&&n.jsxs("p",{className:"tf-text-helper",children:["Due: ",e.dueDate," · Scheduled: ",e.scheduledDate]}),n.jsxs("div",{className:x.formActions,children:[n.jsx("button",{className:x.cancelBtn,onClick:r,children:"Go Back"}),n.jsx("button",{className:x.submitBtn,onClick:a,children:"Save Anyway"})]})]})})}function $G({isOpen:e,theme:t,onClose:r,onConfirm:a}){return n.jsx(Ro,{isOpen:e,onClose:r,title:"Cloud Sync Warning",size:"sm",theme:t,draggable:!1,closeOnOverlayClick:!1,children:n.jsxs("div",{className:`${x.form} tf-inline-stack-sm`,style:{padding:"16px",gap:"12px"},children:[n.jsx("p",{className:"tf-text-body",children:"Turning on cloud sync can renumber task, document, and image references to match the cloud workspace."}),n.jsxs("p",{className:"tf-text-helper",children:["Labels like ",n.jsx("code",{children:"T-12"}),", ",n.jsx("code",{children:"D-4"}),", and ",n.jsx("code",{children:"IMG-2"})," may change. Plain file attachments are not renumbered."]}),n.jsxs("div",{className:x.formActions,children:[n.jsx("button",{className:x.cancelBtn,onClick:r,children:"Go Back"}),n.jsx("button",{className:x.submitBtn,onClick:a,children:"Enable Sync Anyway"})]})]})})}const FG="_syncStatusOverlay_qjzsr_1",UG="_syncStatusModal_qjzsr_5",zG="_syncStatusTop_qjzsr_10",HG="_syncStatusMetaHeader_qjzsr_19",VG="_syncStatusBadge_qjzsr_26",GG="_syncStatusLabel_qjzsr_40",KG="_syncToggle_qjzsr_51",qG="_syncToggleControl_qjzsr_58",YG="_syncToggleControlEnabled_qjzsr_74",ZG="_syncToggleControlDisabled_qjzsr_80",JG="_syncToggleControlBusy_qjzsr_84",QG="_syncToggleControlBlocked_qjzsr_89",XG="_syncToggleInput_qjzsr_94",eK="_syncToggleState_qjzsr_107",tK="_syncToggleStateOn_qjzsr_121",rK="_syncToggleStateOff_qjzsr_125",nK="_syncToggleThumb_qjzsr_134",aK="_syncStatusOverview_qjzsr_145",sK="_syncStatusEventsPanel_qjzsr_146",oK="_syncStatusAdvanced_qjzsr_147",iK="_syncStatusOverviewRow_qjzsr_158",cK="_syncStatusSummaryValue_qjzsr_172",lK="_syncStatusValue_qjzsr_173",dK="_syncStatusIssueRow_qjzsr_181",uK="_syncStatusIssueRowError_qjzsr_185",pK="_syncStatusValueMuted_qjzsr_189",fK="_syncStatusValueError_qjzsr_196",mK="_syncStatusKeyMetrics_qjzsr_203",hK="_syncStatusCompactGrid_qjzsr_204",gK="_syncStatusCompactItem_qjzsr_217",yK="_syncStatusAdvancedContent_qjzsr_258",kK="_syncStatusDiagnosticsList_qjzsr_265",vK="_syncStatusOwnershipControl_qjzsr_271",wK="_syncStatusDiagnosticRow_qjzsr_292",bK="_syncStatusPanelHeader_qjzsr_314",SK="_syncStatusPanelMeta_qjzsr_321",AK="_syncStatusMismatchPanel_qjzsr_327",CK="_syncStatusMismatchItem_qjzsr_337",_K="_syncStatusEventFilters_qjzsr_356",IK="_syncStatusEventFilterActive_qjzsr_383",TK="_syncStatusEventsList_qjzsr_388",xK="_syncStatusEventItem_qjzsr_398",RK="_syncStatusEventItemError_qjzsr_405",PK="_syncStatusEventItemMuted_qjzsr_410",EK="_syncStatusEventLine_qjzsr_414",NK="_syncStatusFooter_qjzsr_424",jK="_syncStatusFooterPrimary_qjzsr_433",Pt={syncStatusOverlay:FG,syncStatusModal:UG,syncStatusTop:zG,syncStatusMetaHeader:HG,syncStatusBadge:VG,syncStatusLabel:GG,syncToggle:KG,syncToggleControl:qG,syncToggleControlEnabled:YG,syncToggleControlDisabled:ZG,syncToggleControlBusy:JG,syncToggleControlBlocked:QG,syncToggleInput:XG,syncToggleState:eK,syncToggleStateOn:tK,syncToggleStateOff:rK,syncToggleThumb:nK,syncStatusOverview:aK,syncStatusEventsPanel:sK,syncStatusAdvanced:oK,syncStatusOverviewRow:iK,syncStatusSummaryValue:cK,syncStatusValue:lK,syncStatusIssueRow:dK,syncStatusIssueRowError:uK,syncStatusValueMuted:pK,syncStatusValueError:fK,syncStatusKeyMetrics:mK,syncStatusCompactGrid:hK,syncStatusCompactItem:gK,syncStatusAdvancedContent:yK,syncStatusDiagnosticsList:kK,syncStatusOwnershipControl:vK,syncStatusDiagnosticRow:wK,syncStatusPanelHeader:bK,syncStatusPanelMeta:SK,syncStatusMismatchPanel:AK,syncStatusMismatchItem:CK,syncStatusEventFilters:_K,syncStatusEventFilterActive:IK,syncStatusEventsList:TK,syncStatusEventItem:xK,syncStatusEventItemError:RK,syncStatusEventItemMuted:PK,syncStatusEventLine:EK,syncStatusFooter:NK,syncStatusFooterPrimary:jK};function P_(e){return/\btaskforce session is invalid\b|\bauthenticated taskforce session is required\b/i.test(e||"")}function MK(e){if(!e)return null;const t=e.snapshot;if(e.phase!=="ready"){if(t?.state.ownershipMode==="browser-gateway"&&e.phase!=="error")return null;const me=e.phase==="error",Ve=P_(e.errorMessage);return{header:{actionable:!0,status:me?"attention":"syncing",syncEnabledLabel:"unknown",summary:me?"The shared sync coordinator status is unavailable.":"Reading shared sync coordinator status.",recommendedAction:me?Ve?"Sign out and sign back in, then retry sync.":"Retry sync. If the coordinator remains unavailable, restart the local server.":"Wait for the coordinator status check to finish.",lastError:e.errorMessage||(me?"Coordinator status unavailable.":"None")},pendingLocalChanges:"Unknown",incomingCloudChanges:"Not checked",stage:me?"unavailable":"checking coordinator",lastPullAt:null,lastPushAt:null,lastSyncedAt:null,busy:e.phase==="attaching",repairBusy:!1,diagnostics:[{label:"Coordinator",value:e.errorMessage||e.phase}]}}if(!t||t.state.ownershipMode!=="server")return null;const r=t.workspace,a=r?.runner||null,s=a?.checkpoint?.checkpoint||null,i=r?.outbox||null,l=i?.operationStates,c=l?.stale||0,d=l?.blocked??i?.blocked??0,f=l?.retryScheduled||0,p=!!(i?.recovery&&i.recovery.state!=="completed"),g=i?.attachmentApplyObligations?.open||0,h=t.credential.status!=="ready",y=t.state.transitionState!=="idle",k=!a||!a.running||!a.acceptingWork||!s,v=s?.controlState==="error"||!!s?.lastError,C=s?.controlState==="retry-wait"||f>0,S=t.permits.recoveryObligations,w=s?.pendingV2Push||null,_=w?.lastBatchProgress||null,M=Math.max(0,(w?.frozenPayload.changes.length||0)-(_?.completedChanges||0)),R=!!(_&&(_.failureDomain==="content"||_.failureDomain==="mixed")&&M>0),P=!!(s?.syncEnabled&&s.syncPhase==="attach-cloud"&&!s.lastPullAt),b=!!(a?.queuedCommandCount||["starting","pulling","pushing","repairing","stopping"].includes(s?.controlState||"")||(l?.inFlight??i?.inFlight??0)>0),$=b||(i?.pending||0)>0,I=R&&!b,E=b,K=s?.controlState==="repairing";let U="healthy",L="Sync is healthy.",D="No action needed.",ie=s?.lastError||"None";if(h)U="attention",L="Sync is paused because the coordinator credential is unavailable.",D="Sign in again, then retry sync.";else if(y)U="syncing",L="Sync ownership is changing safely.",D="Wait for the coordinator transition to finish.";else if(k)U="attention",L="The shared sync runner is unavailable.",D="Retry sync. If the runner does not recover, restart the local server.";else if(g>0)U="attention",L=`${g} incoming attachment ${g===1?"change is":"changes are"} waiting for content.`,D=s&&!s.syncEnabled?"Turn on sync to resume automatic attachment hydration.":"Wait for the scheduled attachment hydration retry.",ie=i?.attachmentApplyObligations?.lastError||ie;else if(S>0||d>0||c>0||p)U="attention",L="Durable local changes need reconciliation.",D=s&&!s.syncEnabled?"Turn on sync, then press Repair to reconcile and replay supported changes.":"Press Repair to reconcile and replay supported changes.";else if(I){U="attention";const me=_.failureDomain==="content"?"content":"push";L=`${_.failedChangeCount} ${me} ${_.failedChangeCount===1?"change is":"changes are"} waiting to retry; ${M} total push ${M===1?"change remains":"changes remain"}.`,D=s&&!s.syncEnabled?"Turn on sync to resume the bounded content retry.":"Wait for the scheduled content retry, or press Retry now."}else s&&!s.syncEnabled?(U="off",L="Workspace sync is turned off.",D="Turn on sync when you are ready to connect this workspace.",ie="None"):v&&!b?(U="attention",L=s?.lastError||"The shared sync runner reported an error.",D="Press Retry now. If the same issue returns, press Repair."):C?(U="attention",L="Sync is waiting for a scheduled retry.",D="Wait for the retry, or press Retry now."):P?(U="attention",L="The initial cloud baseline has not completed.",D="Keep sync enabled until the first cloud check completes."):$&&(U="syncing",L="The shared sync runner is processing workspace changes.",D="Wait for the current transfer to finish.");const H=s?.lastPullAt?s.controlState==="pulling"?"Checking — total unknown":"No known backlog at last check":s?.controlState==="pulling"?"Checking — total unknown":"Not checked",be=i?i.activeDepth+M:w?M:"Unknown",Z=s?.controlState||"unavailable";return{header:{actionable:!0,status:U,syncEnabledLabel:s?.syncEnabled?"yes":"no",summary:L,recommendedAction:D,lastError:ie},pendingLocalChanges:be,incomingCloudChanges:H,stage:Z,lastPullAt:s?.lastPullAt||null,lastPushAt:s?.lastPushAt||null,lastSyncedAt:s?.lastSyncedAt||null,busy:E,repairBusy:K,diagnostics:[{label:"Coordinator",value:`Generation ${t.state.coordinatorGeneration}; server-owned`},{label:"Durable outbox",value:i?`${l?.pending??i.pending} pending, ${f} retry scheduled, ${l?.inFlight??i.inFlight} in flight, ${c} stale, ${d} blocked`:"Unavailable"},{label:"Recovery obligations",value:String(S)},{label:"Attachment apply obligations",value:i?.attachmentApplyObligations?`${i.attachmentApplyObligations.open} open, ${i.attachmentApplyObligations.due} due, ${i.attachmentApplyObligations.totalAttempts} attempts`:"Unavailable"},{label:"Content push backlog",value:R?`${_.failedChangeCount} blocked ${_.failureDomain==="content"?"content":"push"} ${_.failedChangeCount===1?"change":"changes"}; ${M} total push ${M===1?"change remains":"changes remain"}; ${_.completedBatches}/${_.totalBatches} batches settled`:"None"},{label:"Oldest actionable change",value:i?.oldestActionableAt||"None"},{label:"Local data version",value:String(t.state.localDataVersion)}]}}function DK(e){switch(e){case"auth-required":return{summary:"Sync is paused until you sign in again.",recommendedAction:"Sign in, then press Sync to retry."};case"attach-cloud":return{summary:"This workspace still needs its first cloud pull before local pushes can run.",recommendedAction:"Keep this window open for the first cloud pull. If it seems stuck, press Repair."};case"provision-local":return{summary:"This workspace is still doing its first cloud upload before normal pulls can run.",recommendedAction:"Keep this window open until the first cloud upload finishes."};case"repair-active":return{summary:"Repair is already running for this workspace.",recommendedAction:"Wait for repair to finish before retrying sync."};case"retry-pending":return{summary:"Sync hit a temporary problem and is waiting for its scheduled retry.",recommendedAction:"Wait for the automatic retry, or press Sync to retry now."};case"lease-held":return{summary:"Another local window is already syncing this workspace.",recommendedAction:"Use a single local window for sync, or close the other syncing window."};case"invalid-workspace":return{summary:"Workspace setup is required before sync can run.",recommendedAction:"Open or create a named workspace before retrying sync."};case"cloud-auth-unconfigured":return{summary:"Cloud sync is unavailable because cloud authentication is not configured.",recommendedAction:"Configure cloud authentication before turning on sync."};case"runtime-not-local":return{summary:"Workspace sync controls are only available in the local runtime.",recommendedAction:"Open this workspace in the local app to manage sync."};case"sync-disabled":return{summary:"Workspace sync is currently turned off.",recommendedAction:"Turn on sync when you are ready to connect this workspace to cloud."};default:return null}}function LK(e){const t=e.runtimeMode==="local"&&e.isAuthenticated;if(t){const r=Math.max(0,Number(e.coordinatorRecoveryObligations||0)),a=DK(e.retryBlockedReason||e.pullBlockedReason||e.pushBlockedReason||null);return r>0&&e.retryBlockedReason!=="auth-required"&&e.pullBlockedReason!=="auth-required"&&e.pushBlockedReason!=="auth-required"&&e.retryBlockedReason!=="repair-active"&&e.pullBlockedReason!=="repair-active"&&e.pushBlockedReason!=="repair-active"?{actionable:t,status:"attention",syncEnabledLabel:e.workspaceCloudSyncEnabled?"yes":"no",summary:`${r} durable sync recovery obligation${r===1?"":"s"} remain.`,recommendedAction:e.workspaceCloudSyncEnabled?"Press Repair to reconcile the durable sync ledger.":"Turn on sync, then press Repair to reconcile the durable sync ledger.",lastError:e.workspaceSyncError}:{actionable:t,status:e.workspaceSyncStatus,syncEnabledLabel:e.workspaceCloudSyncEnabled?"yes":"no",summary:a?.summary||e.workspaceSyncSummary,recommendedAction:a?.recommendedAction||e.workspaceSyncRecommendedAction,lastError:e.workspaceSyncError}}return{actionable:t,status:"off",syncEnabledLabel:"no",summary:"Sign in to enable workspace sync controls on this device.",recommendedAction:"Sign in to manage workspace sync for this workspace.",lastError:"Sign in to enable workspace sync controls on this device."}}function OK({isOpen:e,theme:t,currentWorkspaceLabel:r,syncStatus:a,syncStatusMeta:s,workspaceCloudSyncEnabled:i,syncControlBusy:l,canManageWorkspaceSync:c,workspaceSyncSummary:d,workspaceSyncRecommendedAction:f,workspaceSyncRepairBusy:p,referenceMismatchCount:g,syncStageLabel:h,workspaceSyncPendingChanges:y,incomingCloudChanges:k,formattedLastSyncTime:v,formattedLastPullTime:C,formattedLastPushTime:S,syncLastError:w,activeReferenceMismatchSummaries:_,syncDiagnosticsSummary:M,syncEventRows:R,syncEventsListRef:P,workspaceSyncRepairQueued:b,workspaceSyncBusy:$,workspaceSyncCopied:I,coordinatorOwnershipMode:E,coordinatorOwnershipTransferBusy:K,coordinatorOwnershipTransferDisabled:U,onClose:L,onToggleWorkspaceSync:D,onRepairSync:ie,onCopyReport:H,onRetrySync:be,onTransferCoordinatorOwnership:Z}){const[me,Ve]=o.useState("all");o.useEffect(()=>{e&&Ve("all")},[e]);const Re=a==="attention",je=p?g>0?`Repair is reconciling cloud state, including ${g} reference mismatch${g===1?"":"es"}.`:"Repair is reconciling workspace state from the cloud.":Re&&w!=="None"?w:Re?d:"No active issue.",ye=!p&&Re&&w!=="None",ue=/\banother local taskforce process owns workspace synchronization\b/i.test(w),ve=P_(w),Pe=i&&!ue&&!ve&&(Re||$||p||b),Le=i&&!ue&&!ve&&($||Re||/\bpress sync\b/i.test(f)),se=o.useMemo(()=>me==="issues"?R.filter(W=>W.tone==="error"):R,[me,R]),V=n.jsxs("div",{className:Pt.syncStatusFooter,children:[n.jsxs("button",{className:x.cancelBtn,onClick:H,title:"Copy the current sync manager report for support or AI troubleshooting.",children:[n.jsx(GS,{size:14}),n.jsx("span",{children:I?"Copied":"Copy Report"})]}),n.jsxs("div",{className:Pt.syncStatusFooterPrimary,children:[n.jsx("button",{className:x.cancelBtn,onClick:ie,disabled:!Pe||p||b,title:p?"Repair is running now.":b?"Repair is queued and will start when the current sync finishes.":i?ue?"Repair is unavailable in this process. Use the Taskforce process that owns workspace synchronization.":ve?"Sign out and sign back in before running Repair.":$?"Queue a repair to start automatically when the current sync finishes.":Pe?"Advanced recovery: clear the saved pull cursor and re-fetch cloud state from the beginning.":"Repair is available when sync needs attention.":"Turn on workspace sync before running Repair.",children:p?n.jsxs(n.Fragment,{children:[n.jsx(Ln,{size:14,className:x.spinner}),"Repairing..."]}):b?"Repair Queued":"Repair"}),n.jsx("button",{className:x.submitBtn,onClick:be,disabled:!Le||$,title:$?"A sync request is already running.":i?ue?"Retry is unavailable in this process. Use the Taskforce process that owns workspace synchronization.":ve?"Sign out and sign back in before retrying sync.":Le?"Retry workspace synchronization now.":"No retry is currently needed.":"Turn on workspace sync before retrying.",children:$?n.jsxs(n.Fragment,{children:[n.jsx(Ln,{size:14,className:x.spinner}),"Syncing..."]}):n.jsxs(n.Fragment,{children:[n.jsx(VS,{size:14}),"Retry now"]})})]})]});return n.jsx(Ro,{isOpen:e,onClose:L,title:"Sync Manager",size:"mdWide",theme:t,draggable:!0,className:Pt.syncStatusOverlay,footer:V,children:n.jsxs("div",{className:`${Jt.form} ${Pt.syncStatusModal}`,children:[n.jsxs("div",{className:Pt.syncStatusTop,children:[n.jsxs("div",{className:Pt.syncStatusMetaHeader,children:[n.jsx("div",{className:Pt.syncStatusBadge,style:{borderColor:s.border,background:s.background,color:s.color},children:s.label}),n.jsxs("span",{className:Pt.syncStatusLabel,children:["Workspace: ",n.jsx("code",{children:r})]})]}),n.jsx("label",{className:Pt.syncToggle,children:n.jsxs("span",{className:[Pt.syncToggleControl,i?Pt.syncToggleControlEnabled:Pt.syncToggleControlDisabled,l?Pt.syncToggleControlBusy:"",c?"":Pt.syncToggleControlBlocked].filter(Boolean).join(" "),children:[n.jsx("input",{className:Pt.syncToggleInput,type:"checkbox",role:"switch","aria-label":"Enable Sync",checked:i,disabled:!c||l,onChange:W=>D(W.target.checked)}),n.jsx("span",{className:`${Pt.syncToggleState} ${Pt.syncToggleStateOn}`,children:"On"}),n.jsx("span",{className:`${Pt.syncToggleState} ${Pt.syncToggleStateOff}`,children:"Off"}),n.jsx("span",{className:Pt.syncToggleThumb})]})})]}),n.jsxs("section",{className:Pt.syncStatusOverview,"aria-label":"Sync status",children:[n.jsxs("div",{className:Pt.syncStatusOverviewRow,children:[n.jsx("span",{className:Pt.syncStatusLabel,children:"Health"}),n.jsx("span",{className:Pt.syncStatusSummaryValue,children:d})]}),n.jsxs("div",{className:Pt.syncStatusOverviewRow,children:[n.jsx("span",{className:Pt.syncStatusLabel,children:"Next step"}),n.jsx("span",{className:Pt.syncStatusSummaryValue,children:f})]}),n.jsxs("div",{className:[Pt.syncStatusOverviewRow,Pt.syncStatusIssueRow,ye?Pt.syncStatusIssueRowError:""].filter(Boolean).join(" "),children:[n.jsxs("span",{className:Pt.syncStatusLabel,children:[ye?n.jsx(od,{size:12}):null,"Current issue"]}),n.jsx("span",{className:ye?Pt.syncStatusValueError:Pt.syncStatusValueMuted,children:je})]})]}),n.jsxs("div",{className:Pt.syncStatusKeyMetrics,children:[n.jsxs("div",{className:Pt.syncStatusCompactItem,children:[n.jsx("span",{className:Pt.syncStatusLabel,children:"Outgoing local changes"}),n.jsx("span",{className:Pt.syncStatusValue,children:y})]}),n.jsxs("div",{className:Pt.syncStatusCompactItem,children:[n.jsx("span",{className:Pt.syncStatusLabel,children:"Incoming cloud changes"}),n.jsx("span",{className:Pt.syncStatusValue,children:k})]}),n.jsxs("div",{className:Pt.syncStatusCompactItem,children:[n.jsx("span",{className:Pt.syncStatusLabel,children:"Last cloud check"}),n.jsx("span",{className:Pt.syncStatusValue,children:C})]})]}),n.jsxs("details",{className:Pt.syncStatusAdvanced,children:[n.jsxs("summary",{children:[n.jsx("span",{children:"Advanced diagnostics"}),n.jsx(dd,{size:16,"aria-hidden":"true"})]}),n.jsxs("div",{className:Pt.syncStatusAdvancedContent,children:[n.jsxs("div",{className:Pt.syncStatusCompactGrid,children:[n.jsxs("div",{className:Pt.syncStatusCompactItem,children:[n.jsx("span",{className:Pt.syncStatusLabel,children:"Stage"}),n.jsx("span",{className:Pt.syncStatusValue,children:h})]}),n.jsxs("div",{className:Pt.syncStatusCompactItem,children:[n.jsx("span",{className:Pt.syncStatusLabel,children:"Last upload"}),n.jsx("span",{className:Pt.syncStatusValue,children:S})]}),n.jsxs("div",{className:Pt.syncStatusCompactItem,children:[n.jsx("span",{className:Pt.syncStatusLabel,children:"Last successful transfer"}),n.jsx("span",{className:Pt.syncStatusValue,children:v})]})]}),n.jsx("div",{className:Pt.syncStatusDiagnosticsList,children:M.map(W=>n.jsxs("div",{className:Pt.syncStatusDiagnosticRow,children:[n.jsx("span",{className:Pt.syncStatusLabel,children:W.label}),n.jsx("span",{className:Pt.syncStatusValue,children:W.value})]},W.label))}),E?n.jsxs("div",{className:Pt.syncStatusOwnershipControl,children:[n.jsxs("div",{children:[n.jsx("span",{className:Pt.syncStatusLabel,children:"Sync coordinator"}),n.jsx("span",{className:Pt.syncStatusValue,children:E==="server"?"Local server owns background synchronization.":"This browser owns background synchronization."})]}),n.jsx("button",{className:x.cancelBtn,type:"button",onClick:Z,disabled:K||U,title:K?"Sync ownership is transferring.":U?"Finish active sync or recovery work before transferring ownership.":E==="server"?"Return background synchronization to this browser.":"Move background synchronization to the local Taskforce server.",children:K?n.jsxs(n.Fragment,{children:[n.jsx(Ln,{size:14,className:x.spinner}),"Transferring..."]}):E==="server"?"Use browser sync":"Use server sync"})]}):null,g>0&&n.jsxs("div",{className:Pt.syncStatusMismatchPanel,children:[n.jsxs("div",{className:Pt.syncStatusPanelHeader,children:[n.jsx("span",{className:Pt.syncStatusLabel,children:"Identifier integrity"}),n.jsxs("span",{className:Pt.syncStatusPanelMeta,children:[g," mismatch",g===1?"":"es"," detected"]})]}),n.jsx("span",{className:Pt.syncStatusValue,children:"Cloud-backed sync preserved the incoming cloud reference and renumbered the displaced local item."}),_.map(W=>n.jsxs("div",{className:Pt.syncStatusMismatchItem,children:[n.jsx("span",{className:Pt.syncStatusValue,children:W.pathLabel}),W.refsLabel?n.jsx("span",{className:Pt.syncStatusPanelMeta,children:W.refsLabel}):null]},W.key))]})]})]}),n.jsxs("section",{className:Pt.syncStatusEventsPanel,"aria-label":"Recent sync events",children:[n.jsxs("div",{className:Pt.syncStatusPanelHeader,children:[n.jsx("span",{className:Pt.syncStatusLabel,children:"Recent events"}),n.jsxs("div",{className:Pt.syncStatusEventFilters,"aria-label":"Filter recent events",children:[n.jsx("button",{type:"button",className:me==="all"?Pt.syncStatusEventFilterActive:"","aria-pressed":me==="all",onClick:()=>Ve("all"),children:"All"}),n.jsx("button",{type:"button",className:me==="issues"?Pt.syncStatusEventFilterActive:"","aria-pressed":me==="issues",onClick:()=>Ve("issues"),children:"Issues"})]})]}),n.jsx("div",{ref:P,className:Pt.syncStatusEventsList,children:se.length>0?se.map(W=>n.jsx("div",{className:[Pt.syncStatusEventItem,W.tone==="error"?Pt.syncStatusEventItemError:"",W.tone==="muted"?Pt.syncStatusEventItemMuted:""].filter(Boolean).join(" "),children:n.jsx("span",{className:Pt.syncStatusEventLine,children:W.text})},W.key)):n.jsx("div",{className:`${Pt.syncStatusEventItem} ${Pt.syncStatusEventItemMuted}`,children:n.jsx("span",{className:Pt.syncStatusEventLine,children:"No issues in recent events."})})})]})]})})}function BK({isOpen:e,theme:t,teamPlanMode:r,teamMgmtError:a,teamManagementTab:s,teamUsersLoading:i,teamUsers:l,teamActionBusyUserId:c,teamInviteFeedback:d,teamInviteEmail:f,teamInviteRole:p,teamInvitePermissionMode:g,teamInviteBusy:h,pendingInvites:y,teamAuditLoading:k,teamAuditEvents:v,teamAuditPage:C,teamAuditPages:S,teamAuditHasMore:w,onClose:_,onOpenMembersTab:M,onOpenInvitesTab:R,onOpenAuditTab:P,onMemberRoleChange:b,onMemberPermissionChange:$,onToggleMemberDisabled:I,onRevokeInvite:E,onRemoveMember:K,onInviteEmailChange:U,onInviteRoleChange:L,onInvitePermissionModeChange:D,onSubmitInvite:ie,onLoadAuditPrevious:H,onLoadAuditNext:be}){return n.jsx(Ro,{isOpen:e,onClose:_,title:"Team Management",size:"md",theme:t,draggable:!0,children:n.jsxs("div",{className:`${Jt.form} ${Br.modalBody}`,children:[r==="personal"&&n.jsx("p",{className:Ze.loginError,children:"Team management is only available in TEAM accounts."}),a&&n.jsx("p",{className:Ze.loginError,children:a}),n.jsxs("div",{className:`${x.settingsTabs} tf-scrollbar tf-scrollbar--track-transparent tf-scrollbar--compact`,children:[n.jsx("button",{className:`${x.settingsTabBtn} ${s==="members"?x.settingsTabBtnActive:""}`,onClick:M,children:"Members"}),n.jsx("button",{className:`${x.settingsTabBtn} ${s==="invites"?x.settingsTabBtnActive:""}`,onClick:R,children:"Invites"}),n.jsx("button",{className:`${x.settingsTabBtn} ${s==="audit"?x.settingsTabBtnActive:""}`,onClick:P,children:"Audit Log"})]}),s==="members"&&n.jsxs("div",{className:Zt.accountHubCard,children:[i&&n.jsx("p",{className:Br.mutedText,children:"Loading members..."}),!i&&l.length===0&&n.jsx("p",{className:Br.mutedText,children:"No users found."}),!i&&l.map(Z=>n.jsxs("div",{className:Br.memberRow,children:[n.jsx("div",{className:Br.memberTitle,children:Z.displayName||Z.email}),n.jsxs("div",{className:Zt.accountMenuMeta,children:[Z.email," · ",Z.status,Z.disabled?" · deactivated":""]}),n.jsxs("div",{className:Br.memberActions,children:[n.jsxs("select",{className:`${x.input} ${Br.selectRole}`,value:Z.role,onChange:me=>b(Z.userId,me.target.value),disabled:c===Z.userId,children:[n.jsx("option",{value:"owner",children:"Owner"}),n.jsx("option",{value:"admin",children:"Admin"}),n.jsx("option",{value:"member",children:"Member"})]}),Z.role==="member"&&n.jsxs("select",{className:`${x.input} ${Br.selectPermission}`,value:Z.permissionMode,onChange:me=>$(Z.userId,me.target.value),disabled:c===Z.userId,children:[n.jsx("option",{value:"read-write",children:"Read / Write"}),n.jsx("option",{value:"read-only",children:"Read Only"})]}),n.jsx("button",{className:x.cancelBtn,disabled:c===Z.userId,onClick:()=>I(Z.userId,!Z.disabled),children:Z.disabled?"Reactivate":"Deactivate"}),Z.status==="invited"&&n.jsx("button",{className:x.cancelBtn,disabled:c===Z.userId,onClick:()=>E(Z.userId),children:"Revoke Invite"}),n.jsx("button",{className:x.cancelBtn,disabled:c===Z.userId,onClick:()=>K(Z.userId),children:"Remove"})]})]},Z.userId))]}),s==="invites"&&n.jsxs("div",{className:Zt.accountHubCard,children:[d&&n.jsx("p",{className:Br.sectionText,children:d}),n.jsxs("div",{className:x.pathInputGroup,children:[n.jsx("label",{className:`${x.label} ${Br.labelFixed}`,children:"Email"}),n.jsx("input",{className:x.input,value:f,onChange:Z=>U(Z.target.value),placeholder:"name@example.com"})]}),n.jsxs("div",{className:x.pathInputGroup,children:[n.jsx("label",{className:`${x.label} ${Br.labelFixed}`,children:"Role"}),n.jsxs("select",{className:`${x.input} ${Br.selectRole}`,value:p,onChange:Z=>L(Z.target.value==="admin"?"admin":"member"),children:[n.jsx("option",{value:"member",children:"Member"}),n.jsx("option",{value:"admin",children:"Admin"})]}),p==="member"&&n.jsxs("select",{className:`${x.input} ${Br.selectPermission}`,value:g,onChange:Z=>D(Z.target.value==="read-only"?"read-only":"read-write"),children:[n.jsx("option",{value:"read-write",children:"Read / Write"}),n.jsx("option",{value:"read-only",children:"Read Only"})]}),n.jsx("button",{className:x.submitBtn,disabled:h||!f.trim()||r!=="team",onClick:ie,children:h?"Sending...":"Send Invite"})]}),n.jsxs("div",{className:Br.inviteRow,children:[n.jsx("div",{className:Br.listHeading,children:"Pending Invites"}),y.length===0&&n.jsx("p",{className:Br.mutedText,children:"No pending invites."}),y.map(Z=>n.jsxs("div",{className:Br.memberRow,children:[n.jsx("div",{className:Br.memberTitle,children:Z.displayName||Z.email}),n.jsxs("div",{className:Zt.accountMenuMeta,children:[Z.email," · ",Z.role]})]},Z.userId))]})]}),s==="audit"&&n.jsxs("div",{className:Zt.accountHubCard,children:[k&&n.jsx("p",{className:Br.mutedText,children:"Loading audit entries..."}),!k&&v.length===0&&n.jsx("p",{className:Br.mutedText,children:"No audit events for this workspace."}),!k&&n.jsx("div",{className:Br.auditList,children:v.map(Z=>n.jsxs("div",{className:Br.memberRow,children:[n.jsx("div",{className:Zt.accountMenuMeta,children:new Date(Z.createdAt).toLocaleString()}),n.jsx("div",{className:Br.memberTitle,children:Z.action}),n.jsxs("div",{className:Zt.accountMenuMeta,children:[Z.actorUserId," (",Z.actorRole,")"]})]},Z.id))}),n.jsxs("div",{className:Br.auditPager,children:[n.jsx("button",{className:x.cancelBtn,disabled:k||C===0,onClick:H,children:"Previous"}),n.jsxs("span",{className:Zt.accountMenuMeta,children:["Page ",C+1," of ",S]}),n.jsx("button",{className:x.cancelBtn,disabled:k||!w||C+1>=S,onClick:be,children:"Next"})]})]}),n.jsx("div",{className:`${Jt.formActions} ${Br.modalActionsEnd}`,children:n.jsx("button",{className:x.cancelBtn,onClick:_,children:"Close"})})]})})}const WK="_title_j8q8h_1",$K="_message_j8q8h_8",FK="_actions_j8q8h_14",nk={title:WK,message:$K,actions:FK};function UK({isOpen:e,onKeepEditing:t,onDiscard:r,title:a="Unsaved Changes",message:s="Discard your unsaved workflow changes?",theme:i}){return n.jsx(Ro,{isOpen:e,onClose:t,title:n.jsxs("span",{className:nk.title,children:[n.jsx(od,{size:18})," ",a]}),size:"sm",closeOnOverlayClick:!1,theme:i,footer:n.jsxs("div",{className:nk.actions,children:[n.jsx("button",{type:"button",className:"tf-button-secondary",onClick:t,"data-modal-initial-focus":!0,children:"Keep Editing"}),n.jsx("button",{type:"button",className:"tf-button-destructive",onClick:r,children:"Discard"})]}),children:n.jsx("p",{className:nk.message,children:s})})}const E_=e=>{const t=e.status||"task";return t==="done"||t==="cancelled"?"completed":t},zK=(e,t,r)=>{if(E_(e)===t)return null;const s={status:t};return t==="task"||t==="on-hold"?(s.inProgress=!1,s.readyForReview=!1,s.completed=!1,s.cancelled=!1,s.completedAt=null,s):t==="in-progress"?(s.inProgress=!0,s.readyForReview=!1,s.completed=!1,s.cancelled=!1,s.completedAt=null,s):t==="review"?(s.inProgress=!1,s.readyForReview=!0,s.completed=!1,s.cancelled=!1,s.completedAt=null,s):t==="done"||t==="completed"?(s.status="done",s.inProgress=!1,s.readyForReview=!1,s.completed=!0,s.cancelled=!1,s.completedAt=r,s):(t==="cancelled"&&(s.status="cancelled"),s)},HK=({targetTasks:e,overTaskId:t,isBelowOverItem:r})=>{if(!t)return e.length;const a=e.findIndex(s=>s.id===t);return a<0?e.length:a+(r?1:0)},N_=(e,t=new Map)=>{const r=new Map(t);return e.forEach((a,s)=>{r.set(a.id,{...r.get(a.id)||{},orderInDay:s})}),r},Gv=e=>Array.from(e.entries()).map(([t,r])=>({taskId:t,updates:r})),j_=({sourceColumnId:e,targetColumnId:t,sourceTasks:r,updates:a})=>!e||e===t?a:N_(r,a),VK=({activeTask:e,sourceColumnId:t,targetTasks:r,sourceTasks:a,insertAt:s})=>{const i=[...r];i.splice(s,0,e);let l=new Map;return i.forEach((c,d)=>{if(c.id===e.id){l.set(c.id,{...l.get(c.id)||{},...e.scheduledDate?{scheduledDate:null,scheduledWeekKey:null}:{},orderInDay:d});return}l.set(c.id,{...l.get(c.id)||{},orderInDay:d})}),l=j_({sourceColumnId:t,targetColumnId:"backlog",sourceTasks:a,updates:l}),Gv(l)},GK=({activeTask:e,targetTasks:t,insertAt:r})=>{const a=[...t];return a.splice(r,0,e),Gv(N_(a))},KK=({activeTask:e,sourceColumnId:t,targetColumnId:r,targetTasks:a,sourceTasks:s,insertAt:i,scheduledDate:l,scheduledWeekKey:c})=>{const d=[...a];d.splice(i,0,e);let f=new Map;return d.forEach((p,g)=>{if(p.id===e.id){f.set(p.id,{...f.get(p.id)||{},scheduledDate:l,scheduledWeekKey:c,orderInDay:g});return}f.set(p.id,{...f.get(p.id)||{},orderInDay:g})}),f=j_({sourceColumnId:t,targetColumnId:r,sourceTasks:s,updates:f}),Gv(f)},qK=({activeTask:e,sourceColumnId:t,targetColumnId:r,targetTasks:a,sourceTasks:s,overTaskId:i,isBelowOverItem:l,scheduleDates:c,parseToIsoWeekKey:d,todayDate:f})=>{const p=["mon","tue","wed","thu","fri","sat","sun"];if(!(r==="backlog"||r==="expired"||p.includes(r)))return null;const h=HK({targetTasks:a,overTaskId:i,isBelowOverItem:l});if(r==="expired")return t!=="expired"?null:{kind:"updates",updates:GK({activeTask:e,targetTasks:a,insertAt:h})};if(r==="backlog")return{kind:"updates",updates:VK({activeTask:e,sourceColumnId:t,targetTasks:a,sourceTasks:s,insertAt:h})};if(!p.includes(r))return null;const y=c[r];return y?!(e.status==="done"||e.status==="cancelled")&&y<f?{kind:"blocked",reason:"Only completed work can be scheduled in the past."}:{kind:"updates",updates:KK({activeTask:e,sourceColumnId:t,targetColumnId:r,targetTasks:a,sourceTasks:s,insertAt:h,scheduledDate:y,scheduledWeekKey:d(y)}),selectedDate:y}:null},Eh="expired::",YK=new Map,ZK=new Set;function JK({tasks:e,columns:t,groupBy:r,searchQuery:a,copiedId:s,taxonomies:i,types:l,priorities:c,assigneeOptions:d=[],onUpdateTask:f,onTaskClick:p,taskReferences:g,onCopyId:h,onToggleInProgress:y,onToggleReview:k,onToggleComplete:v,onToggleCancel:C,onSetStatus:S,onArchiveTask:w,onUnarchive:_,onDelete:M,allTasks:R=[],onAddTaskToColumn:P,emptyColumnMode:b="show",filterCategories:$=[],filterTypes:I=[],filterPriorities:E=[],filterStatus:K=[],filterAssignees:U=[],filtersReady:L=!0,scheduleFilteredTaskIds:D,categories:ie=[],compressed:H=!1,readOnlyMode:be=null,recentlyChangedTaskIds:Z=[],scheduleDates:me,onScheduleDaySelected:Ve,persistedScrollLeft:Re,onScrollLeftChange:je,sortBy:ye="created",sortOrder:ue="desc",planningDropTargets:ve=null,onAssignTaskToWorkstream:Pe,onAssignWorkstreamToInitiative:Le,showTaskCardStatusLabel:se=!1,workstreams:V=[],initiatives:W=[],workspaceId:z=null,deletedTaskRecordByTaskId:fe=YK,selectedDeletedRecordIds:ke=ZK,onDeletedSelectionChange:Y}){const[we,q]=o.useState(null),[le,$e]=o.useState(!1),[re,de]=o.useState(!1),He=o.useMemo(()=>new Set(Z),[Z]),ce=o.useMemo(()=>new Map(V.map(Ee=>[Ee.id,Ee])),[V]),pe=o.useMemo(()=>new Map(W.map(Ee=>[Ee.id,Ee])),[W]),xe=o.useCallback(Ee=>{const ct=Ee.workstreamId&&ce.get(Ee.workstreamId)||null,lt=ct?.initiativeId&&pe.get(ct.initiativeId)||null;return{taskWorkstream:ct,taskInitiative:lt}},[pe,ce]),N=o.useMemo(()=>new Set(e.map(Ee=>Ee.id)),[e]),X=o.useCallback(Ee=>Ee.startsWith(Eh)?Ee.slice(Eh.length):Ee,[]),Ae=o.useCallback(Ee=>N.has(X(Ee)),[N,X]),Te=o.useMemo(()=>new Set(D||[]),[D]),he=o.useRef(null),ot=o.useCallback(Ee=>{const ct=Ee?.data?.current||{},lt=String(Ee?.id||"");let Je=String(ct.taskId||""),nt=String(ct.workstreamId||"");!Je&<&&Ae(lt)&&(Je=X(lt)),!nt&<.startsWith("planning-workstream:")&&(nt=lt.slice(20));let Ct=String(ct.type||"");return Ct||(Je?Ct="task-card":nt&&(Ct="planning-workstream")),{activeId:lt,type:Ct,taskId:Je,workstreamId:nt}},[X,Ae]),We=rv(Cf(nv,{activationConstraint:{distance:10}}),Cf(XS,{coordinateGetter:QS})),Xe=E_,ae=o.useMemo(()=>{const Ee=new Date,ct=Ee.getFullYear(),lt=String(Ee.getMonth()+1).padStart(2,"0"),Je=String(Ee.getDate()).padStart(2,"0");return`${ct}-${lt}-${Je}`},[]),G=o.useMemo(()=>{const Ee=Je=>{const nt=Je.match(/^(\d{4})-(\d{2})-(\d{2})$/);if(!nt)return null;const Ct=new Date(Date.UTC(Number(nt[1]),Number(nt[2])-1,Number(nt[3]))),Rt=Ct.getUTCDay()||7;Ct.setUTCDate(Ct.getUTCDate()+4-Rt);const Dt=new Date(Date.UTC(Ct.getUTCFullYear(),0,1)),It=Math.ceil(((Ct.getTime()-Dt.getTime())/864e5+1)/7);return`${Ct.getUTCFullYear()}-W${String(It).padStart(2,"0")}`};return{dates:{...(()=>{const Je=new Date,nt=Je.getDay(),Ct=nt===0?-6:1-nt,Rt=new Date(Je);Rt.setDate(Je.getDate()+Ct);const Dt=ir=>{const dr=ir.getFullYear(),sr=String(ir.getMonth()+1).padStart(2,"0"),pr=String(ir.getDate()).padStart(2,"0");return`${dr}-${sr}-${pr}`},It={mon:"",tue:"",wed:"",thu:"",fri:"",sat:"",sun:""};return["mon","tue","wed","thu","fri","sat","sun"].forEach((ir,dr)=>{const sr=new Date(Rt);sr.setDate(Rt.getDate()+dr),It[ir]=Dt(sr)}),It})(),...me||{}},parseToIsoWeekKey:Ee}},[me]),Ie=Ee=>{const ct=Ee.scheduledDate||null;return ct?new Map([[G.dates.mon,"mon"],[G.dates.tue,"tue"],[G.dates.wed,"wed"],[G.dates.thu,"thu"],[G.dates.fri,"fri"],[G.dates.sat,"sat"],[G.dates.sun,"sun"]]).get(ct)||"__offweek":"backlog"},Fe=o.useMemo(()=>{if(r==="schedule")return[];const Ee=new Set(t.map(nt=>String(nt.value))),ct=new Set(t.map(nt=>nt.label)),lt=[],Je=nt=>{const Ct=r==="status"?Xe(nt):nt[r],Rt=String(Ct??"");if(!Rt||Ee.has(Rt)||ct.has(Rt))return null;if(r==="category"){const Dt=ie.find(It=>It.value===Rt||It.label===Rt);return{value:Rt,label:Dt?.label||Rt,icon:Dt?.icon||"Folder",color:Dt?.color}}if(r==="type"){const Dt=l?.find(It=>It.value===Rt||It.label===Rt);return{value:Rt,label:Dt?.label||Rt,icon:Dt?.icon||"CheckSquare",color:Dt?.color}}if(r==="priority"){const Dt=c?.find(It=>Number(It.value)===Number(Rt));return{value:Number.isFinite(Number(Rt))?Number(Rt):Rt,label:Dt?.label||Rt,icon:Dt?.icon||"Flag",color:Dt?.color}}if(r==="complexity")return{value:Number.isFinite(Number(Rt))?Number(Rt):Rt,label:Rt,icon:"Gauge"};if(r==="status")return{value:Rt,label:Rt,icon:"Circle"};if(r==="assignee"){const Dt=d.find(It=>It.value===Rt);return{value:Rt,label:Dt?.label||Rt,icon:Dt?.icon==="HelpCircle"?"Circle":Dt?.icon,color:Dt?.color}}return{value:Rt,label:Rt}};for(const nt of e){const Ct=Je(nt);Ct&&(lt.push(Ct),Ee.add(String(Ct.value)),ct.add(Ct.label))}return lt},[d,ie,r,t,c,e,l]),it=o.useMemo(()=>[...t,...Fe],[Fe,t]),Me=o.useMemo(()=>{const Ee=new Map;for(const ct of it)Ee.set(String(ct.value),ct),Ee.has(ct.label)||Ee.set(ct.label,ct);return Ee},[it]),qe=o.useMemo(()=>{const Ee={};return it.forEach(lt=>{Ee[String(lt.value)]=0}),(R.length>0?R:e).forEach(lt=>{let Je="";if(r==="status")Je=Xe(lt);else if(r==="schedule")Je=Ie(lt);else{const Ct=lt[r];Je=String(Ct??"")}const nt=Me.get(Je);if(nt&&Ee[String(nt.value)]++,r==="schedule"){const Ct=lt.status==="done"||lt.status==="cancelled";lt.scheduledDate&&!Ct&<.scheduledDate<ae&&Me.has("expired")&&(Ee.expired=(Ee.expired||0)+1)}}),Ee},[R,e,it,r,Me,ae]),ge=o.useMemo(()=>{const Ee={};if(it.forEach(ct=>{Ee[String(ct.value)]=[]}),e.forEach(ct=>{let lt="";if(r==="status")lt=Xe(ct);else if(r==="schedule")lt=Ie(ct);else{const nt=ct[r];lt=String(nt??"")}const Je=Me.get(lt);if(Je){if(r==="schedule"&&String(Je.value)==="backlog"&&!Te.has(ct.id))return;Ee[String(Je.value)].push(ct)}if(r==="schedule"){const nt=ct.status==="done"||ct.status==="cancelled";ct.scheduledDate&&!nt&&ct.scheduledDate<ae&&Ee.expired&&Ee.expired.push(ct)}}),r==="schedule"){const ct=(Je,nt)=>{const Ct=typeof Je.orderInDay=="number"?Je.orderInDay:Number.MAX_SAFE_INTEGER,Rt=typeof nt.orderInDay=="number"?nt.orderInDay:Number.MAX_SAFE_INTEGER;return Ct!==Rt?Ct-Rt:String(Je.createdAt||"").localeCompare(String(nt.createdAt||""))},lt=(Je,nt)=>Gh(Je,nt,ye,ue,i);Object.keys(Ee).forEach(Je=>{if(Je==="backlog"||Je==="expired"){Ee[Je].sort(lt);return}Ee[Je].sort(ct)})}return Ee},[e,it,r,Me,Te,ae,ye,ue,i]),_e=we?X(we):null,Be=_e?e.find(Ee=>Ee.id===_e):null,Ge=o.useRef(null),F=o.useRef(null),Ne=o.useRef({pointerId:null,startX:0,startY:0,startScrollLeft:0,didPan:!1}),Ce=o.useRef(-1),ut=(Ee,ct)=>L?r==="category"?!$.includes(String(Ee)):r==="type"?!I.includes(String(Ee)):r==="priority"?!E.some(lt=>Number(lt)===Number(Ee)):r==="status"?String(Ee)==="completed"?!K.includes("done")&&!K.includes("cancelled"):!K.includes(String(Ee)):r==="assignee"?!U.includes(String(Ee)):!1:!1,mt=o.useMemo(()=>{let Je=0;return it.forEach((nt,Ct)=>{const Rt=ge[String(nt.value)]||[],Dt=ut(nt.value,nt.label),It=r!=="schedule"&&b==="hide"&&Rt.length===0;if(Dt||It)return;const Qt=b==="collapse"&&Rt.length===0;Je+=Qt?72:320,Je+=4}),Je},[it,ge,b,r,$,I,E,K,U,L]),Ue=o.useCallback(Ee=>{if(!je)return;const ct=Math.max(0,Math.round(Ee));ct!==Ce.current&&(Ce.current=ct,je(ct))},[je]);o.useEffect(()=>{const Ee=Ge.current,ct=F.current;if(!Ee||!ct)return;let lt=!1,Je=!1;const nt=()=>{!Ee||Je||(lt=!0,Ee.scrollLeft=ct.scrollLeft,Ue(ct.scrollLeft),setTimeout(()=>lt=!1,0))},Ct=()=>{!ct||lt||(Je=!0,ct.scrollLeft=Ee.scrollLeft,Ue(Ee.scrollLeft),setTimeout(()=>Je=!1,0))};return ct.addEventListener("scroll",nt),Ee.addEventListener("scroll",Ct),()=>{ct.removeEventListener("scroll",nt),Ee.removeEventListener("scroll",Ct)}},[Ue]);const wt=o.useRef(!1);o.useEffect(()=>{if(wt.current)return;if(typeof Re!="number"||!Number.isFinite(Re)){wt.current=!0;return}const Ee=Ge.current,ct=F.current;if(!Ee||!ct)return;const lt=Math.max(0,Ee.scrollWidth-Ee.clientWidth),Je=Math.min(Math.max(0,Re),lt);Ee.scrollLeft=Je,ct.scrollLeft=Je,wt.current=!0},[Re,mt]),o.useEffect(()=>{const Ee=()=>{const ct=Ge.current;if(!ct){de(!1);return}de(ct.scrollWidth>ct.clientWidth+4)};return Ee(),window.addEventListener("resize",Ee),()=>{window.removeEventListener("resize",Ee)}},[mt,it.length,ge]),o.useEffect(()=>{const Ee=lt=>{const Je=Ne.current;if(Je.pointerId===null||Je.pointerId!==lt.pointerId)return;const nt=lt.clientX-Je.startX,Ct=lt.clientY-Je.startY;if(!Je.didPan){if(Math.abs(nt)<7||Math.abs(nt)<Math.abs(Ct))return;Je.didPan=!0,$e(!0),document.body.style.userSelect="none"}const Rt=Je.startScrollLeft-nt;Ge.current&&(Ge.current.scrollLeft=Rt),F.current&&(F.current.scrollLeft=Rt),lt.preventDefault()},ct=()=>{const lt=Ne.current;lt.pointerId!==null&&(lt.pointerId=null,lt.didPan=!1,le&&($e(!1),document.body.style.userSelect=""))};return window.addEventListener("pointermove",Ee),window.addEventListener("pointerup",ct),window.addEventListener("pointercancel",ct),()=>{window.removeEventListener("pointermove",Ee),window.removeEventListener("pointerup",ct),window.removeEventListener("pointercancel",ct),document.body.style.userSelect=""}},[le]);const kt=Ee=>{!re||Ee.target?.closest('button, a, input, select, textarea, [role="button"], [data-no-header-pan="true"]')||(Ne.current.pointerId=Ee.pointerId,Ne.current.startX=Ee.clientX,Ne.current.startY=Ee.clientY,Ne.current.startScrollLeft=Ge.current?.scrollLeft||0,Ne.current.didPan=!1)},rt=Ee=>{q(Ee.active.id)},Ht=Ee=>{const ct=ot(Ee.active),lt=String(Ee.over?.data?.current?.type||"");ct.type==="task-card"&<.startsWith("planning-")?he.current=`${String(Ee.over?.id||"")}:${lt}`:he.current&&(he.current=null)},lr=Ee=>{const{active:ct,over:lt}=Ee;he.current=null,q(null);const Je=ot(ct),nt=Je.type,Ct=String(lt?.data?.current?.type||""),Rt=Je.taskId,Dt=Je.workstreamId,It=String(lt?.data?.current?.workstreamId||""),Qt=String(lt?.data?.current?.initiativeId||"");if(nt==="task-card"&&Ct==="planning-workstream-target"&&Rt&&It){Pe?.(Rt,It);return}if(nt==="planning-workstream"){if(Ct==="planning-initiative-target"&&Dt&&Qt){Le?.(Dt,Qt);return}return}const ir=String(ct.id),dr=lt?String(lt.id):null,sr=X(ir);dr&&X(dr);const pr=e.find(Gt=>Gt.id===sr);if(!pr||!dr)return;const Jr=rr(ir),br=String(ct?.data?.current?.sortable?.containerId||"")||Jr,Qr=String(lt?.data?.current?.sortable?.containerId||"")||rr(dr);if(!Qr)return;const Hr=Me.get(Qr)||it.find(Gt=>String(Gt.value)===Qr||Gt.label===Qr);if(Hr){if(r==="schedule"){const gr=String(Hr.value),u=dr&&Ae(dr)?X(dr):null,ht=lt?.rect,Er=ct.rect.current.translated||ct.rect.current.initial,mn=!!(ht&&Er&&Er.top+Er.height/2>ht.top+ht.height/2),qt=(ge[gr]||[]).filter(Ut=>Ut.id!==sr),Vr=(ge[String(br)]||[]).filter(Ut=>Ut.id!==sr),Tt=qK({activeTask:pr,sourceColumnId:br,targetColumnId:gr,targetTasks:qt,sourceTasks:Vr,overTaskId:u,isBelowOverItem:mn,scheduleDates:G.dates,parseToIsoWeekKey:G.parseToIsoWeekKey,todayDate:ae});if(!Tt)return;if(Tt.kind==="blocked"){window.alert(Tt.reason);return}Tt.updates.forEach(({taskId:Ut,updates:fr})=>f(Ut,fr)),Tt.selectedDate&&Ve?.(Tt.selectedDate);return}let Gt=Hr.value;if(r==="status"){const gr=String(Gt),u=zK(pr,gr,new Date().toISOString());u&&f(pr.id,u);return}(r==="priority"||r==="complexity")&&(Gt=Number(Gt));const bt=pr[r];if(String(bt??"")!==String(Gt??"")){const gr={[r]:Gt};f(pr.id,gr)}}},rr=Ee=>{if(Me.has(Ee)){const Je=Me.get(Ee);return Je?String(Je.value):Ee}if(r==="schedule"&&Ee.startsWith(Eh))return"expired";const ct=X(Ee),lt=e.find(Je=>Je.id===ct);if(lt){let Je="";r==="status"?Je=Xe(lt):r==="schedule"?Je=Ie(lt):Je=String(lt[r]??"");const nt=Me.get(Je);return nt?String(nt.value):null}return null},wr={sideEffects:qT({styles:{active:{opacity:"0"}}})},st=Ee=>{try{const ct=KT(Ee);if(ct.length>0){const lt=ct.find(It=>String(It.id).startsWith("planning-"));if(lt)return[lt];const Je=Ee.pointerCoordinates;if(!Je)return[ct[0]];const nt=ct.filter(It=>{const Qt=String(It.id);return Ae(Qt)&&Qt!==we});if(nt.length===0){const Qt=ct.filter(sr=>{const pr=String(sr.id);return!Ae(pr)}).find(sr=>!!rr(String(sr.id)))||null,ir=Qt?rr(String(Qt.id)):null,dr=(Ee.droppableContainers||[]).filter(sr=>{const pr=String(sr.id);return!Ae(pr)||pr===we?!1:ir?rr(pr)===ir:!0});if(dr.length>0){const sr=zw({...Ee,droppableContainers:dr});if(sr.length>0)return[sr[0]]}return Qt?[Qt]:[ct[0]]}const Ct=nt;let Rt=Ct[0],Dt=Number.POSITIVE_INFINITY;for(const It of Ct){const Qt=Ee.droppableRects?.get(It.id);if(!Qt)continue;const ir=Qt.left+Qt.width/2,dr=Qt.top+Qt.height/2,sr=Je.x-ir,pr=Je.y-dr,Jr=sr*sr+pr*pr;Jr<Dt&&(Dt=Jr,Rt=It)}return[Rt]}return zw(Ee)}catch(ct){return console.error("[TaskKanban] collision detection error",ct),[]}},zt=o.useCallback((Ee,ct)=>f(Ee.id,{assignee:ct}),[f]),Lt=o.useCallback((Ee,ct)=>Pe?Pe(Ee.id,ct):f(Ee.id,{workstreamId:ct}),[Pe,f]),Mt=o.useMemo(()=>({searchQuery:a,copiedId:s,taxonomies:i,types:l,priorities:c,workspaceId:z,assigneeOptions:d,workstreams:V,onAssigneeChange:zt,onWorkstreamChange:Lt,onCopyId:h,onToggleInProgress:y,onToggleReview:k,onToggleComplete:v,onToggleCancel:C,onSetStatus:S,onArchiveTask:w,onUnarchive:_,onDelete:M,taskReferences:g,categories:ie,readOnlyMode:be,resolveTaskHierarchy:xe,groupBy:r,showStatusLabel:se,deletedTaskRecordByTaskId:fe,selectedDeletedRecordIds:ke,onDeletedSelectionChange:Y}),[d,ie,s,fe,r,zt,Lt,w,h,M,Y,S,C,v,y,k,_,c,be,xe,a,ke,se,g,i,l,z,V]);return n.jsxs(av,{sensors:We,collisionDetection:st,onDragStart:rt,onDragOver:Ht,onDragEnd:lr,onDragCancel:Ee=>{he.current=null,q(null)},children:[ve,n.jsxs("div",{className:x.kanbanWrapper,children:[n.jsx("div",{ref:F,className:`${x.kanbanTopScroll} tf-scrollbar`,children:n.jsx("div",{className:x.kanbanTopScrollSpacer,style:{width:`${mt}px`}})}),n.jsx("div",{className:x.kanbanContainer,ref:Ge,children:it.map(Ee=>{const ct=ge[String(Ee.value)]||[],lt=ut(Ee.value,Ee.label),Je=r!=="schedule"&&b==="hide"&&ct.length===0,nt=r==="schedule",Ct=nt&&it.some(pr=>String(pr.value)==="backlog"),Rt=nt&&String(Ee.value)==="backlog",Dt=nt&&String(Ee.value)==="expired",It=ge.backlog||[],ir=b==="collapse"&&It.length===0?72:320,dr=Rt?0:Dt?Ct?ir+4:0:void 0,sr=Rt?6:Dt?5:void 0;return lt||Je?null:n.jsx(QK,{id:String(Ee.value),title:Ee.label,color:Ee.color,icon:Ee.icon,assigneeOption:r==="assignee"?d.find(pr=>String(pr.value)===String(Ee.value)):void 0,tasks:ct,activeId:we,activeTaskId:_e,totalCount:qe[String(Ee.value)],onAddTask:()=>P?.(r,Ee.value),onTaskClick:p,commonCardProps:Mt,changedTaskIdSet:He,collapseEmpty:b==="collapse",compressed:H,onHeaderPointerDown:kt,isHeaderPanning:le,headerPanEnabled:re,stickyLeft:dr,stickyZIndex:sr,isPast:!!Ee.isPast,isSelected:!!Ee.isSelected,isWeekend:!!Ee.isWeekend,disableSorting:!1,scheduleDate:r==="schedule"?G.dates[String(Ee.value)]:void 0,onScheduleDaySelected:Ve},String(Ee.value))})})]}),yc.createPortal(n.jsx(GT,{dropAnimation:wr,children:Be?(()=>{const{taskWorkstream:Ee,taskInitiative:ct}=xe(Be);return n.jsx(Mf,{task:Be,taskWorkstream:Ee,taskInitiative:ct,isOverlay:!0,...Mt,isArchived:Be.isArchived,categories:ie,compressed:H,isRecentlyChanged:He.has(Be.id)})})():null}),document.body)]})}const QK=Q.memo(function({id:t,title:r,color:a,icon:s,assigneeOption:i,tasks:l,activeId:c=null,activeTaskId:d=null,totalCount:f,onAddTask:p,onTaskClick:g,commonCardProps:h,changedTaskIdSet:y,collapseEmpty:k,compressed:v,onHeaderPointerDown:C,isHeaderPanning:S=!1,headerPanEnabled:w=!1,stickyLeft:_,stickyZIndex:M,isPast:R=!1,isSelected:P=!1,isWeekend:b=!1,disableSorting:$=!1,scheduleDate:I,onScheduleDaySelected:E}){const{setNodeRef:K}=cv({id:t,data:{type:"Column"}}),U=k&&l.length===0,L=d?l.filter(Z=>Z.id!==d):l,D=typeof _=="number",ie=o.useRef(null),H=Z=>t==="expired"?`${Eh}${Z}`:Z,be=Z=>{if(!I||!E)return;const me=Z.target;me&&(me.closest('[data-task-card="true"]')||me.closest(`.${x.kanbanCardWrapper}`)||E(I))};return n.jsxs("div",{ref:K,className:`${x.kanbanColumn} ${U?x.kanbanColumnCollapsed:""} ${D?x.kanbanColumnSticky:""} ${R?x.kanbanColumnPast:""} ${P?x.kanbanColumnSelectedDay:""} ${b?x.kanbanColumnWeekend:""}`,style:D?{left:`${_}px`,zIndex:M??4}:void 0,onClick:be,children:[n.jsxs("div",{className:`${x.kanbanHeader} ${w?x.kanbanHeaderDraggable:""} ${S?x.kanbanHeaderPanning:""}`,style:{borderTopColor:Jn(a)||"var(--color-purple)"},onPointerDown:C,children:[n.jsxs("div",{style:{display:"flex",alignItems:"center",gap:"8px",minWidth:0,overflow:"hidden"},children:[i?n.jsx(Cg,{option:i,size:20}):(()=>{const Z=s&&Ru[s]?Ru[s]:gc,me=Jn(a)||"var(--color-purple)";return n.jsx(Z,{size:16,style:{color:me}})})(),!U&&n.jsx("span",{style:{whiteSpace:"nowrap",overflow:"hidden",textOverflow:"ellipsis"},children:r})]}),n.jsxs("div",{style:{display:"flex",alignItems:"center",gap:"8px",flexShrink:0},children:[(!U||f>0)&&n.jsx("span",{className:x.kanbanCount,children:U?f:`${l.length} / ${f}`}),!h.readOnlyMode&&n.jsx("button",{className:"tf-control-icon tf-control-icon-compact",onClick:Z=>{Z.stopPropagation(),p()},title:`Add task to ${r}`,"aria-label":`Add task to ${r}`,"data-no-header-pan":"true",children:n.jsx(Ko,{size:14})})]})]}),n.jsx("div",{className:x.kanbanDroppable,children:n.jsx("div",{className:`${x.kanbanDroppableScroll} ${x.appScrollbar} tf-scrollbar`,ref:ie,children:$?L.map(Z=>n.jsx("div",{className:x.kanbanCardWrapper,children:(()=>{const{taskWorkstream:me,taskInitiative:Ve}=h.resolveTaskHierarchy?.(Z)||{},Re=h.deletedTaskRecordByTaskId?.get(Z.id);return n.jsx(Mf,{task:Z,taskWorkstream:me,taskInitiative:Ve,onClick:g,...h,isArchived:Z.isArchived,readOnlyMode:h.readOnlyMode||null,compressed:v,isRecentlyChanged:!1,selectable:!!(Re&&h.onDeletedSelectionChange),selected:!!(Re&&h.selectedDeletedRecordIds?.has(Re.id)),onSelectionChange:Re?je=>h.onDeletedSelectionChange?.(Re.id,je):void 0})})()},Z.id)):n.jsx(sv,{id:t,items:L.map(Z=>H(Z.id)),strategy:ov,children:L.map(Z=>n.jsx(XK,{sortableId:H(Z.id),task:Z,onClick:g,commonCardProps:h,compressed:v,isRecentlyChanged:y.has(Z.id)},H(Z.id)))})})})]})}),XK=Q.memo(function({sortableId:t,task:r,onClick:a,commonCardProps:s,compressed:i,isRecentlyChanged:l=!1}){const c=!!s?.readOnlyMode,{attributes:d,listeners:f,setNodeRef:p,transform:g,transition:h,isDragging:y}=iv({id:t,disabled:c,data:{type:"task-card",taskId:r.id}}),k={transform:dg.Transform.toString(g),transition:h,opacity:y?0:1,pointerEvents:y?"none":"auto"},v=s?.groupBy==="schedule",C=!v&&l;return n.jsx("div",{ref:p,style:k,...c?{}:d,...c?{}:f,className:`${x.kanbanCardWrapper} ${C?x.kanbanCardWrapperRaised:""}`,children:(()=>{const{taskWorkstream:S,taskInitiative:w}=s.resolveTaskHierarchy?.(r)||{},_=s.deletedTaskRecordByTaskId?.get(r.id);return n.jsx(Mf,{task:r,taskWorkstream:S,taskInitiative:w,onClick:a,...s,isArchived:r.isArchived,readOnlyMode:s?.readOnlyMode||null,compressed:i,isRecentlyChanged:v?!1:l,selectable:!!(_&&s.onDeletedSelectionChange),selected:!!(_&&s.selectedDeletedRecordIds?.has(_.id)),onSelectionChange:_?M=>s.onDeletedSelectionChange?.(_.id,M):void 0})})()})});function eq(e,t,r){const a=String(t);if(e==="category"){const s=r.categories.find(i=>String(i.value)===a||i.label===a);return s?{category:s.label}:{}}return e==="type"?{type:a}:e==="priority"?Number.isFinite(Number(t))?{priority:Number(t)}:{}:e==="complexity"?Number.isFinite(Number(t))?{complexity:Number(t)}:{}:e==="assignee"?a.trim().length>0?{assignee:a}:{}:e==="status"?a==="completed"?{status:"done"}:a==="task"||a==="on-hold"||a==="in-progress"||a==="review"||a==="done"||a==="cancelled"?{status:a}:{}:e==="schedule"?a==="backlog"||a==="expired"?{}:{scheduledDate:a}:{}}function tq({authUserId:e,taskScope:t,workspaceId:r}){const[a,s]=o.useState(null);o.useEffect(()=>{s(null)},[e,r]),o.useEffect(()=>{t!=="open"&&s(null)},[t]);const i=o.useCallback(c=>{s(d=>d===c?null:c)},[]),l=o.useCallback(()=>{s(null)},[]);return{taskHeaderQuickFilter:a,toggleTaskHeaderQuickFilter:i,clearTaskHeaderQuickFilter:l}}function rq(e,t,r,a){return e.status==="done"||e.status==="cancelled"||String(e.assignee||"").trim()!==r?!1:t==="overdue"?!!(e.dueDate&&e.dueDate<a):!0}function tg(e,t){return e==="deleted"?!1:e==="archived"?t:!t}function pS(e,t){return t===null?e:e.filter(r=>t.has(r.id))}function nq(e,t,r){const a=t.filter(c=>tg(r,!!c.isArchived)),s=r==="deleted"?[]:e.filter(c=>tg(r,!!c.isArchived)?!0:r!=="archived"?!1:a.some(d=>d.initiativeId===c.id)).map(c=>({...c,workstreams:a.filter(d=>d.initiativeId===c.id)})),i=a.filter(c=>!c.initiativeId),l=[...s.flatMap(c=>c.workstreams),...i];return{initiatives:s,standaloneWorkstreams:i,visibleWorkstreams:l,initiativeById:new Map(s.map(c=>[c.id,c])),workstreamById:new Map(l.map(c=>[c.id,c]))}}function M_(e){return typeof e.occurredAt=="string"&&e.occurredAt.trim().length>0?e.occurredAt:"unknown-time"}function aq(e){return typeof e.eventType=="string"&&e.eventType.trim().length>0?e.eventType.trim():"sync"}function sq(e){const t=kg(e.details),r=t?t.source:null;return typeof r=="string"?r.trim():""}function fS(e){const t=String(e||"").trim();switch(t){case"auth-required":return"sign in required";case"lease-held":return"another window is already syncing";case"sync-disabled":return"sync is turned off";case"attach-cloud":return"initial cloud pull required";case"provision-local":return"initial cloud upload required";default:return t.length>0?t.replace(/-/g," "):"blocked"}}function mS(e){const t=String(e||"").trim();switch(t){case"attach-cloud":return"initial cloud pull";case"provision-local":return"initial cloud upload";case"active":return"active sync";case"error":return"error recovery";case"idle":return"idle sync";default:return t.length>0?t.replace(/-/g," "):"sync"}}function rg(e){if(e==null)return null;const t=Number(e);return Number.isFinite(t)?Math.max(0,Math.floor(t)):null}function hS(e,t,r){const a=rg(e);if(a===null)return null;const s=rg(t),i=a===1&&(s===null||s===1)?r:`${r}s`;return`${a}${s===null?"":`/${s}`} ${i}`}function oq(e,t){const r=rg(e);if(r===null)return null;const a=r>=1024*1024?`${(r/(1024*1024)).toFixed(1)} MiB`:r>=1024?`${(r/1024).toFixed(1)} KiB`:`${r} B`;return String(t||"")==="content-bodies"?`${a} content`:a}function iq(e){const t=M_(e),r=kg(e.details),a=sq(e);if(a==="server-runner.transfer"){const s=r?.transfer&&typeof r.transfer=="object"?r.transfer:{},i=String(s.direction||"").trim(),l=String(s.operation||e.eventType||"sync").trim(),c=String(s.outcome||e.status||"").trim()==="error"?"failed":"succeeded",d=[hS(s.processedChanges,s.knownTotalChanges,"change"),hS(s.processedPages,s.knownTotalPages,"page"),oq(s.transferredBytes,s.transferredBytesScope)].filter(g=>!!g),f=rg(s.durationMs),p=c==="failed"&&typeof e.errorMessage=="string"&&e.errorMessage.trim()?`: ${e.errorMessage.trim()}`:"";return`${t} ${i?`${i} `:""}${l} ${c}${d.length>0?` (${d.join(", ")})`:""}${f===null?"":` in ${f}ms`}${p}`}return a==="retry.blocked"?`${t} manual retry blocked: ${fS(r?.reason)} during ${mS(r?.phase)}`:a==="repair.started"?`${t} manual repair started: ${mS(r?.repairPhase)} selected`:a==="repair.blocked"?`${t} manual repair blocked: ${fS(r?.reason)}`:null}function Pu(e,t=0){const r=String(e.id??"").trim();return r?`id:${r}`:[String(e.occurredAt||"").trim()||"unknown-time",String(e.eventType||"").trim()||"sync",String(e.status||"").trim()||"unknown-status",String(e.statusCode??""),String(e.changeCount??""),String(e.requestMs??""),String(e.errorMessage||"").trim(),cC(e.details),String(t)].join("|")}function cq(e,t,r=15){const a=new Map;for(const[s,i]of e.entries())a.set(Pu(i,s),i);for(const[s,i]of t.entries())a.set(Pu(i,s),i);return Array.from(a.values()).sort((s,i)=>String(i.occurredAt||"").localeCompare(String(s.occurredAt||""))).slice(0,Math.max(1,r))}function lq(e,t){if(e.length!==t.length)return!1;for(let r=0;r<e.length;r+=1)if(Pu(e[r],r)!==Pu(t[r],r))return!1;return!0}function D_(e){const t=iq(e);if(t)return t;const r=M_(e),a=aq(e),s=e.status==="error"?"failed":"succeeded",i=Number(e.changeCount),l=Number.isFinite(i)?` (${Math.max(0,Math.floor(i))} change${Math.floor(i)===1?"":"s"})`:"",c=Number(e.requestMs),d=Number.isFinite(c)?` in ${Math.max(0,Math.floor(c))}ms`:"",f=Number(e.statusCode),p=Number.isFinite(f)?` [${Math.floor(f)}]`:"",g=typeof e.errorMessage=="string"&&e.errorMessage.trim().length>0?`: ${e.errorMessage.trim()}`:"";return`${r} ${a} ${s}${l}${d}${p}${g}`}function dq(e){const t=D_(e),r=String(e.occurredAt||"").trim();if(!r||!t.startsWith(r))return t;const a=new Date(r);return Number.isNaN(a.getTime())?t:`${a.toLocaleString()}${t.slice(r.length)}`}function uq(e){return e.status==="error"?null:[String(e.eventType||"").trim()||"sync",String(e.status||"").trim()||"unknown-status",String(e.statusCode??""),String(e.changeCount??""),String(e.errorMessage||"").trim(),cC(e.details)].join("|")}function Nh(e){if(!e)return"Never";const t=new Date(e);return Number.isNaN(t.getTime())?"Never":t.toLocaleString()}function L_(e){switch(e){case"off":return{label:"Off",icon:"off",color:"#94a3b8",border:"rgba(148, 163, 184, 0.35)",background:"rgba(148, 163, 184, 0.12)"};case"syncing":return{label:"Syncing",icon:"cloud",color:"#60a5fa",border:"rgba(96, 165, 250, 0.35)",background:"rgba(59, 130, 246, 0.12)"};case"attention":return{label:"Needs Attention",icon:"cloud",color:"#fda4af",border:"rgba(253, 164, 175, 0.4)",background:"rgba(239, 68, 68, 0.12)"};default:return{label:"Healthy",icon:"cloud",color:"#86efac",border:"rgba(134, 239, 172, 0.4)",background:"rgba(34, 197, 94, 0.12)"}}}function pq(e,t){return L_(t?e:"off")}function O_(e,t,r){if(t)return"Repairing";if(r&&e==="error")return"Recovering";switch(e){case"provision-local":return"Initial cloud upload";case"attach-cloud":return"Initial cloud pull";case"active":return"Active";case"error":return"Error";default:return"Idle"}}function fq(e){return[{label:"AI profile snapshot",value:`${e.aiProfileSnapshotCount} local profile${e.aiProfileSnapshotCount===1?"":"s"}`},{label:"AI profile raw response",value:`${e.aiProfileSnapshotRawCount} from route`},{label:"Last pushed AI profiles",value:`${e.lastPushedAiProfileCount} tracked`},{label:"AI watermark map",value:`${e.lastPushedAiProfileWatermarkCount} tracked`},{label:"Document snapshot",value:`${e.documentSnapshotCount} local doc${e.documentSnapshotCount===1?"":"s"}`},{label:"Asset snapshot",value:`${e.assetSnapshotCount} local asset${e.assetSnapshotCount===1?"":"s"}`},{label:"Queued full AI sync",value:e.forceFullAiProfilePushQueued?"Yes":"No"},{label:"Durable outbox",value:e.durableOutbox?e.durableOutbox.operationStates?`${e.durableOutbox.operationStates.pending} pending, ${e.durableOutbox.operationStates.retryScheduled} retry scheduled, ${e.durableOutbox.operationStates.inFlight} in flight, ${e.durableOutbox.operationStates.stale} stale, ${e.durableOutbox.operationStates.blocked} blocked`:`${e.durableOutbox.pending} pending, ${e.durableOutbox.inFlight} in flight, ${e.durableOutbox.blocked} blocked`:"Unavailable"},{label:"Durable recovery",value:(()=>{const t=e.durableOutbox?.recovery?`${e.durableOutbox.recovery.state}; ${e.durableOutbox.recovery.replayAccepted}/${e.durableOutbox.recovery.replayTotal} replayed`:null,r=e.coordinatorRecoveryObligations||0,a=r>0?`${r} coordinator obligations open`:null;return[t,a].filter(Boolean).join(", ")||"None"})()},{label:"AI snapshot last fetch",value:Nh(e.aiProfileSnapshotLastFetchAt)},{label:"AI snapshot fetch error",value:e.aiProfileSnapshotLastFetchError||"None"},{label:"AI snapshot skip reason",value:e.aiProfileSnapshotLastSkipReason||"None"}]}function mq({syncRecentEvents:e,syncRecentEventsError:t,syncRecentEventsLoading:r}){if(r&&e.length===0)return[{key:"loading",text:"Loading recent sync events...",tone:"muted"}];if(t)return[{key:"error",text:t,tone:"error"}];if(e.length===0)return[{key:"empty",text:"No recent sync events recorded.",tone:"muted"}];const a=[];for(const[s,i]of e.entries()){const l=uq(i),c=a[a.length-1];if(l&&c?.signature===l){c.repeatCount+=1,c.text=`${c.baseText} × ${c.repeatCount}`;continue}const d=dq(i);a.push({key:Pu(i,s),text:d,tone:i.status==="error"?"error":"default",signature:l,repeatCount:1,baseText:d})}return a.map(({signature:s,repeatCount:i,baseText:l,...c})=>c)}function B_(e){const t=[];for(const r of e){if(String(r.errorMessage||"").toLowerCase().includes("reference number mismatch")){t.push(r);continue}if(String(r.status||"").toLowerCase()==="success")break}return t}function hq(e){return B_(e).length}function gq(e){return B_(e).map((t,r)=>{const a=t.details&&typeof t.details=="object"?t.details:null,s=String(a?.path||"").trim(),i=String(a?.referenceLabel||"").trim(),l=String(a?.taskTitle||a?.existingTaskTitle||"").trim(),c=Number(a?.existingReferenceNumber),d=Number(a?.incomingReferenceNumber),f=s||l||i||`Mismatch ${r+1}`,p=Number.isFinite(c)||Number.isFinite(d)?`Existing ${Number.isFinite(c)?c:"?"} vs incoming ${Number.isFinite(d)?d:"?"}`:i?`Both claimed ${i}`:null;return{key:Pu(t,r),pathLabel:f,refsLabel:p}})}function yq({currentWorkspaceId:e,syncStatusLabel:t,workspaceSyncSummary:r,workspaceSyncRecommendedAction:a,formattedLastSyncTime:s,formattedLastPullTime:i,formattedLastPushTime:l,workspaceSyncDiagnostics:c,workspaceSyncPendingChanges:d,syncLastError:f,syncStageLabel:p,referenceMismatchCount:g,syncRecentEvents:h}){const y=["Taskforce Sync Manager",`Workspace ID: ${e}`,`Status: ${t}`,`Summary: ${r}`,`Recommended action: ${a}`,`Last successful sync: ${s}`,`Last pull from cloud: ${i}`,`Last push to cloud: ${l}`,`Last error at: ${Nh(c.lastErrorAt)}`,`Pending local changes: ${d}`,`Last error: ${f}`,`Sync stage: ${p}`,`Push blocked reason: ${c.pushBlockedReason||"None"}`,`Pull blocked reason: ${c.pullBlockedReason||"None"}`,`Retry blocked reason: ${c.retryBlockedReason||"None"}`,`Repair active: ${c.repairActive?"Yes":"No"}`,`Push in flight: ${c.pushInFlight?"Yes":"No"}`,`Pull in flight: ${c.pullInFlight?"Yes":"No"}`,`Retry pending: ${c.retryPending?"Yes":"No"}`,`AI profile snapshot: ${c.aiProfileSnapshotCount}`,`AI profile raw response: ${c.aiProfileSnapshotRawCount}`,`Last pushed AI profiles tracked: ${c.lastPushedAiProfileCount}`,`AI profile watermarks tracked: ${c.lastPushedAiProfileWatermarkCount}`,`AI snapshot last fetch: ${Nh(c.aiProfileSnapshotLastFetchAt)}`,`AI snapshot fetch error: ${c.aiProfileSnapshotLastFetchError||"None"}`,`AI snapshot skip reason: ${c.aiProfileSnapshotLastSkipReason||"None"}`,`Document snapshot: ${c.documentSnapshotCount}`,`Asset snapshot: ${c.assetSnapshotCount}`,`Reference mismatches detected: ${g}`,`Queued full AI sync: ${c.forceFullAiProfilePushQueued?"Yes":"No"}`,`Durable outbox pending: ${c.durableOutbox?.pending??"Unavailable"}`,`Durable outbox in flight: ${c.durableOutbox?.inFlight??"Unavailable"}`,`Durable outbox blocked: ${c.durableOutbox?.blocked??"Unavailable"}`,`Durable outbox retry scheduled: ${c.durableOutbox?.operationStates?.retryScheduled??"Unavailable"}`,`Durable outbox stale: ${c.durableOutbox?.operationStates?.stale??"Unavailable"}`,`Durable outbox oldest active: ${Nh(c.durableOutbox?.oldestActiveCreatedAt)}`,`Durable outbox blocked error code: ${c.durableOutbox?.blockedErrorCode||"None"}`,`Durable recovery state: ${c.durableOutbox?.recovery?.state||"None"}`,`Durable recovery replay total: ${c.durableOutbox?.recovery?.replayTotal??0}`,`Durable recovery replay pending: ${c.durableOutbox?.recovery?.replayPending??0}`,`Durable recovery replay in flight: ${c.durableOutbox?.recovery?.replayInFlight??0}`,`Durable recovery replay blocked: ${c.durableOutbox?.recovery?.replayBlocked??0}`,`Durable recovery replay accepted: ${c.durableOutbox?.recovery?.replayAccepted??0}`,`Durable recovery obligations (coordinator): ${c.coordinatorRecoveryObligations??"Unavailable"}`],k=h.map(v=>D_(v));return[...y,"","Recent sync events",...k.length>0?k:["No recent sync events recorded."]].join(`
|
|
7
|
+
`)}const gS="/api/taskforce/account/profile-summary",kq=9e4,mu=new Map;function gh(){return typeof performance<"u"?performance.now():Date.now()}function W_(e,t){const r=String(e||"").trim();if(!r)return"";const a=String(t||"").trim();return a?`${r}::${a}`:r}function yS(e,t){mu.delete(W_(e,t?.identityKey))}async function vq(e,t){const r=String(e||"").trim(),a=W_(e,t?.identityKey);if(!a||!r)return null;const s=t?.force===!0,i=Date.now(),l=mu.get(a);if(!s&&l?.payload!==void 0&&i-l.fetchedAt<kq)return hr("account_profile_summary_cache_hit",{url:r,cacheKey:a,ageMs:i-l.fetchedAt}),l.payload;if(!s&&l?.promise)return hr("account_profile_summary_request_reused",{url:r,cacheKey:a}),l.promise;const c=gh(),d=(async()=>{const f=await fetch(r,{method:"GET",credentials:"include"});if(!f.ok)throw new Error(String((await f.json().catch(()=>({})))?.error||"Failed to load account summary."));const g=await f.json().catch(()=>({}))||null;return mu.set(a,{payload:g,fetchedAt:Date.now(),promise:null}),hr("account_profile_summary_loaded",{url:r,cacheKey:a,durationMs:Math.round(gh()-c),fromCache:!1}),g})().catch(f=>{const p=l?.payload??null;if(p)return mu.set(a,{payload:p,fetchedAt:l?.fetchedAt??Date.now(),promise:null}),hr("account_profile_summary_failed",{url:r,cacheKey:a,durationMs:Math.round(gh()-c),error:f instanceof Error?f.message:String(f||"Unknown error"),returnedStale:!0}),p;throw mu.delete(a),hr("account_profile_summary_failed",{url:r,cacheKey:a,durationMs:Math.round(gh()-c),error:f instanceof Error?f.message:String(f||"Unknown error"),returnedStale:!1}),f});return mu.set(a,{payload:l?.payload??null,fetchedAt:l?.fetchedAt??0,promise:d}),d}const wq=512,bq=5*1024*1024,Sq=[.9,.82,.74,.66,.58],Aq=[.9,.82,.74,.66,.58],Cq=[1,.85,.7,.55,.4],_q=new Set(["image/png","image/jpeg","image/webp"]);function Iq(e,t){const r=document.createElement("canvas");return r.width=Math.max(1,Math.round(e)),r.height=Math.max(1,Math.round(t)),r}async function Tq(e){const t=URL.createObjectURL(e);try{const r=await new Promise((a,s)=>{const i=new Image;i.onload=()=>a(i),i.onerror=()=>s(new Error("Failed to load image.")),i.src=t});return{width:r.naturalWidth||r.width,height:r.naturalHeight||r.height,source:r}}finally{URL.revokeObjectURL(t)}}async function xq(e){const t=Iq(e.width,e.height),r=t.getContext("2d");if(!r)throw new Error("Image optimization requires a 2D canvas context.");return r.drawImage(e.image.source,0,0,t.width,t.height),await new Promise((a,s)=>{t.toBlob(i=>{if(i){a(i);return}s(new Error("Failed to encode resized image."))},e.type,e.quality)})}const Rq={loadImage:Tq,renderToBlob:xq};function kS(e,t){return e==="image/png"?".png":e==="image/jpeg"?".jpg":e==="image/webp"?".webp":(t.includes(".")?t.slice(t.lastIndexOf(".")):"")||".img"}function vS(e,t){const r=String(e||"").trim();if(!r)return`avatar${t}`;const a=r.lastIndexOf(".");return a<=0?`${r}${t}`:`${r.slice(0,a)}${t}`}function Pq(e){const t=e==="image/jpeg"?"image/jpeg":"image/webp";return Array.from(new Set([t,"image/webp","image/jpeg"]))}function Eq(e){return e==="image/webp"?Sq:e==="image/jpeg"?Aq:[void 0]}async function Nq(e,t,r=Rq){const a=Number.isFinite(t?.maxBytes)&&(t?.maxBytes||0)>0?Math.floor(t?.maxBytes):bq,s=Number.isFinite(t?.maxDimension)&&(t?.maxDimension||0)>0?Math.floor(t?.maxDimension):wq;if(!_q.has(e.type))return{file:e,optimized:!1,exceededLimit:e.size>a};const i=await r.loadImage(e),l=Math.max(i.width,i.height,1);if(e.size<=a&&l<=s)return{file:e,optimized:!1,exceededLimit:!1};const c=Math.min(1,s/l);let d=null;for(const p of Cq){const g=Math.min(1,c*p),h=Math.max(1,Math.round(i.width*g)),y=Math.max(1,Math.round(i.height*g));for(const k of Pq(e.type))for(const v of Eq(k)){const C=await r.renderToBlob({image:i,width:h,height:y,type:k,quality:v});if((!d||C.size<d.size)&&(d=C),C.size<=a)return{file:new File([C],vS(e.name,kS(C.type||k,e.name)),{type:C.type||k,lastModified:e.lastModified}),optimized:!0,exceededLimit:!1}}}if(!d)return{file:e,optimized:!1,exceededLimit:!0};const f=new File([d],vS(e.name,kS(d.type||e.type,e.name)),{type:d.type||e.type,lastModified:e.lastModified});return{file:f,optimized:f.size<e.size,exceededLimit:f.size>a}}function jq(e,t){return Array.from([...e,...t].reduce((r,a)=>r.set(a.id,a),new Map).values())}function $_(e){return e.status==="done"||e.status==="cancelled"}function Mq({isArchived:e,tasks:t,dataReady:r}){return{archiveReady:r&&!e&&t.length>0&&t.every($_),activeTaskCount:t.filter(a=>!a.isArchived).length,activeWorkstreamCount:0}}function Dq({isArchived:e,workstreams:t,dataReady:r}){const a=t.flatMap(s=>s.tasks||[]);return{archiveReady:r&&!e&&t.length>0&&a.length>0&&a.every($_),activeTaskCount:a.filter(s=>!s.isArchived).length,activeWorkstreamCount:t.filter(s=>!s.isArchived).length}}async function F_({workstream:e,allowEmpty:t=!1,archiveTask:r,archiveWorkstream:a}){if(e.isArchived)return!0;const s=e.tasks||[];if(!t&&s.length===0||s.some(i=>i.status!=="done"&&i.status!=="cancelled"))return!1;for(const i of s)if(!i.isArchived&&!await r(i.id))return!1;return await a(e.id),!0}async function Lq({workstreams:e,archiveTask:t,archiveWorkstream:r,archiveInitiative:a,initiativeId:s}){const i=e.flatMap(l=>l.tasks||[]);if(e.length===0||i.length===0||i.some(l=>l.status!=="done"&&l.status!=="cancelled"))return!1;for(const l of e)if(!await F_({workstream:l,allowEmpty:!0,archiveTask:t,archiveWorkstream:r}))return!1;return await a(s),!0}function U_({isArchived:e,taskCount:t,completedTaskCount:r,archiveReady:a,entityType:s,activeWorkstreamCount:i=0}){return e?{mode:"archived"}:t===0?s==="initiative"&&i>0?{mode:"blocked",remainingKind:"workstream"}:{mode:"empty"}:Math.max(0,t-r)>0?{mode:"blocked",remainingKind:"task"}:a?{mode:"ready"}:{mode:"checking"}}const Kk="data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiIHN0YW5kYWxvbmU9Im5vIj8+CjwhLS0gQ3JlYXRlZCB3aXRoIElua3NjYXBlIChodHRwOi8vd3d3Lmlua3NjYXBlLm9yZy8pIC0tPgoKPHN2ZwogICB3aWR0aD0iMzY2LjY3Nzg2IgogICBoZWlnaHQ9IjMzMS4zMDkzMyIKICAgdmlld0JveD0iMCAwIDk3LjAxNjg1IDg3LjY1ODkyMyIKICAgdmVyc2lvbj0iMS4xIgogICBpZD0ic3ZnMSIKICAgeG1sOnNwYWNlPSJwcmVzZXJ2ZSIKICAgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIgogICB4bWxuczpzdmc9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj48ZGVmcwogICAgIGlkPSJkZWZzMSIgLz48ZwogICAgIGlkPSJsYXllcjEiCiAgICAgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoMTMwLjk2ODgxLC04NzIuMDY2NjgpIj48ZwogICAgICAgaWQ9ImcxLTctMS02LTItMS05IgogICAgICAgdHJhbnNmb3JtPSJtYXRyaXgoNC45ODE1NDc5LDAsMCw0Ljk4NTU4MjIsLTYzNS4zODE5NiwxMzcuOTM1MTIpIj48cGF0aAogICAgICAgICBzdHlsZT0iZm9udC1zdHlsZTppdGFsaWM7Zm9udC13ZWlnaHQ6Ym9sZDtmb250LXNpemU6MTkuNDgxOXB4O2xpbmUtaGVpZ2h0OjIuNTtmb250LWZhbWlseTonUnVzc28gT25lJzstaW5rc2NhcGUtZm9udC1zcGVjaWZpY2F0aW9uOidSdXNzbyBPbmUgTWVkaXVtIEl0YWxpYyc7dGV4dC1hbGlnbjpjZW50ZXI7bGV0dGVyLXNwYWNpbmc6MHB4O3RleHQtYW5jaG9yOm1pZGRsZTtmaWxsOiNmZmZmZmY7ZmlsbC1ydWxlOmV2ZW5vZGQ7c3Ryb2tlOiNmZmZmZmY7c3Ryb2tlLXdpZHRoOjAuNjEzNjA0O3N0cm9rZS1saW5lY2FwOnJvdW5kO3N0cm9rZS1saW5lam9pbjpyb3VuZCIKICAgICAgICAgZD0ibSAxNDkuNDQwNjYsMTYxLjE5NTA1IGggLTMuNTA2NzQgdiAtMTAuOTA5ODYgaCAtNC4wOTEyIHYgLTIuNzI3NDcgaCAxMS42ODkxNCB2IDIuNzI3NDcgaCAtNC4wOTEyIHoiCiAgICAgICAgIGlkPSJ0ZXh0MS00LTMtMy0xLTAtMyIKICAgICAgICAgdHJhbnNmb3JtPSJza2V3WCgtMTUpIgogICAgICAgICBhcmlhLWxhYmVsPSJUIiAvPjxwYXRoCiAgICAgICAgIHN0eWxlPSJmb250LXN0eWxlOml0YWxpYztmb250LXdlaWdodDpib2xkO2ZvbnQtc2l6ZToxOS40ODE5cHg7bGluZS1oZWlnaHQ6Mi41O2ZvbnQtZmFtaWx5OidSdXNzbyBPbmUnOy1pbmtzY2FwZS1mb250LXNwZWNpZmljYXRpb246J1J1c3NvIE9uZSBNZWRpdW0gSXRhbGljJzt0ZXh0LWFsaWduOmVuZDtsZXR0ZXItc3BhY2luZzowcHg7dGV4dC1hbmNob3I6ZW5kO2ZpbGw6I2ZmOGEwMDtmaWxsLXJ1bGU6ZXZlbm9kZDtzdHJva2U6I2ZmOGEwMDtzdHJva2Utd2lkdGg6MC42MTM2MDQ7c3Ryb2tlLWxpbmVjYXA6cm91bmQ7c3Ryb2tlLWxpbmVqb2luOnJvdW5kIgogICAgICAgICBkPSJtIDE1My41Mzg4OCwxNjQuNTI2NiBoIC0zLjUwNjc0IHYgLTEzLjYzNzMzIGggMTAuODEyNDUgdiAyLjcyNzQ2IGggLTcuMzA1NzEgdiAzLjIxNDUyIGggNS43NDcxNiB2IDIuNzI3NDYgaCAtNS43NDcxNiB6IgogICAgICAgICBpZD0idGV4dDEtOS04LTQtMy03LTItNyIKICAgICAgICAgdHJhbnNmb3JtPSJza2V3WCgtMTUpIgogICAgICAgICBhcmlhLWxhYmVsPSJGIiAvPjwvZz48L2c+PC9zdmc+Cg==",z_="data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiIHN0YW5kYWxvbmU9Im5vIj8+CjwhLS0gQ3JlYXRlZCB3aXRoIElua3NjYXBlIChodHRwOi8vd3d3Lmlua3NjYXBlLm9yZy8pIC0tPgoKPHN2ZwogICB3aWR0aD0iMzY2LjY3Nzg5IgogICBoZWlnaHQ9IjMzMS4zMDkzMyIKICAgdmlld0JveD0iMCAwIDk3LjAxNjg1OCA4Ny42NTg5MjMiCiAgIHZlcnNpb249IjEuMSIKICAgaWQ9InN2ZzEiCiAgIHhtbDpzcGFjZT0icHJlc2VydmUiCiAgIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIKICAgeG1sbnM6c3ZnPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+PGRlZnMKICAgICBpZD0iZGVmczEiIC8+PGcKICAgICBpZD0ibGF5ZXIxIgogICAgIHRyYW5zZm9ybT0idHJhbnNsYXRlKDE4Ni4xOTU2MywtNzgwLjY1NTczKSI+PGcKICAgICAgIGlkPSJnMS03LTEtNi0yLTEiCiAgICAgICB0cmFuc2Zvcm09Im1hdHJpeCg0Ljk4MTU0NzksMCwwLDQuOTg1NTgyMiwtNjkwLjYwODc4LDQ2LjUyNDE0OCkiPjxwYXRoCiAgICAgICAgIHN0eWxlPSJmb250LXN0eWxlOml0YWxpYztmb250LXdlaWdodDpib2xkO2ZvbnQtc2l6ZToxOS40ODE5cHg7bGluZS1oZWlnaHQ6Mi41O2ZvbnQtZmFtaWx5OidSdXNzbyBPbmUnOy1pbmtzY2FwZS1mb250LXNwZWNpZmljYXRpb246J1J1c3NvIE9uZSBNZWRpdW0gSXRhbGljJzt0ZXh0LWFsaWduOmNlbnRlcjtsZXR0ZXItc3BhY2luZzowcHg7dGV4dC1hbmNob3I6bWlkZGxlO2ZpbGwtcnVsZTpldmVub2RkO3N0cm9rZTojMDAwMDAwO3N0cm9rZS13aWR0aDowLjYxMzYwNDtzdHJva2UtbGluZWNhcDpyb3VuZDtzdHJva2UtbGluZWpvaW46cm91bmQiCiAgICAgICAgIGQ9Im0gMTQ5LjQ0MDY2LDE2MS4xOTUwNSBoIC0zLjUwNjc0IHYgLTEwLjkwOTg2IGggLTQuMDkxMiB2IC0yLjcyNzQ3IGggMTEuNjg5MTQgdiAyLjcyNzQ3IGggLTQuMDkxMiB6IgogICAgICAgICBpZD0idGV4dDEtNC0zLTMtMS0wIgogICAgICAgICB0cmFuc2Zvcm09InNrZXdYKC0xNSkiCiAgICAgICAgIGFyaWEtbGFiZWw9IlQiIC8+PHBhdGgKICAgICAgICAgc3R5bGU9ImZvbnQtc3R5bGU6aXRhbGljO2ZvbnQtd2VpZ2h0OmJvbGQ7Zm9udC1zaXplOjE5LjQ4MTlweDtsaW5lLWhlaWdodDoyLjU7Zm9udC1mYW1pbHk6J1J1c3NvIE9uZSc7LWlua3NjYXBlLWZvbnQtc3BlY2lmaWNhdGlvbjonUnVzc28gT25lIE1lZGl1bSBJdGFsaWMnO3RleHQtYWxpZ246ZW5kO2xldHRlci1zcGFjaW5nOjBweDt0ZXh0LWFuY2hvcjplbmQ7ZmlsbDojZmY4YTAwO2ZpbGwtcnVsZTpldmVub2RkO3N0cm9rZTojZmY4YTAwO3N0cm9rZS13aWR0aDowLjYxMzYwNDtzdHJva2UtbGluZWNhcDpyb3VuZDtzdHJva2UtbGluZWpvaW46cm91bmQiCiAgICAgICAgIGQ9Im0gMTUzLjUzODg4LDE2NC41MjY2IGggLTMuNTA2NzQgdiAtMTMuNjM3MzMgaCAxMC44MTI0NSB2IDIuNzI3NDYgaCAtNy4zMDU3MSB2IDMuMjE0NTIgaCA1Ljc0NzE2IHYgMi43Mjc0NiBoIC01Ljc0NzE2IHoiCiAgICAgICAgIGlkPSJ0ZXh0MS05LTgtNC0zLTctMiIKICAgICAgICAgdHJhbnNmb3JtPSJza2V3WCgtMTUpIgogICAgICAgICBhcmlhLWxhYmVsPSJGIiAvPjwvZz48L2c+PC9zdmc+Cg==",wS="data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZlcnNpb249IjEuMSIgeG1sbnM6eGxpbms9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmsiIHdpZHRoPSIxMDAwIiBoZWlnaHQ9IjEwMDAiPjxzdHlsZT4KICAgICNsaWdodC1pY29uIHsKICAgICAgZGlzcGxheTogaW5saW5lOwogICAgfQogICAgI2RhcmstaWNvbiB7CiAgICAgIGRpc3BsYXk6IG5vbmU7CiAgICB9CgogICAgQG1lZGlhIChwcmVmZXJzLWNvbG9yLXNjaGVtZTogZGFyaykgewogICAgICAjbGlnaHQtaWNvbiB7CiAgICAgICAgZGlzcGxheTogbm9uZTsKICAgICAgfQogICAgICAjZGFyay1pY29uIHsKICAgICAgICBkaXNwbGF5OiBpbmxpbmU7CiAgICAgIH0KICAgIH0KICA8L3N0eWxlPjxnIGlkPSJsaWdodC1pY29uIj48c3ZnIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgdmVyc2lvbj0iMS4xIiB4bWxuczp4bGluaz0iaHR0cDovL3d3dy53My5vcmcvMTk5OS94bGluayIgd2lkdGg9IjEwMDAiIGhlaWdodD0iMTAwMCI+PGc+PGcgdHJhbnNmb3JtPSJtYXRyaXgoMi43MjcxODkyNTA0ODkwMzI3LDAsMCwyLjcyNzE4OTI1MDQ4OTAzMjcsMCw0OC4yMjgzNzgzMTg2MzgxOSkiPjxzdmcgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiIHdpZHRoPSIzNjYuNjc3ODkiIGhlaWdodD0iMzMxLjMwOTMzIiB2aWV3Qm94PSIwIDAgOTcuMDE2ODU4IDg3LjY1ODkyMyIgaWQ9InN2ZzEiIHhtbDpzcGFjZT0icHJlc2VydmUiIHhtbG5zOnN2Zz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciPjxkZWZzIGlkPSJkZWZzMSI+PC9kZWZzPjxnIGlkPSJsYXllcjEiIHRyYW5zZm9ybT0idHJhbnNsYXRlKDE4Ni4xOTU2MywtNzgwLjY1NTczKSI+PGcgaWQ9ImcxLTctMS02LTItMSIgdHJhbnNmb3JtPSJtYXRyaXgoNC45ODE1NDc5LDAsMCw0Ljk4NTU4MjIsLTY5MC42MDg3OCw0Ni41MjQxNDgpIj48cGF0aCBzdHlsZT0iZm9udC1zdHlsZTppdGFsaWM7Zm9udC13ZWlnaHQ6Ym9sZDtmb250LXNpemU6MTkuNDgxOXB4O2xpbmUtaGVpZ2h0OjIuNTtmb250LWZhbWlseTonUnVzc28gT25lJzstaW5rc2NhcGUtZm9udC1zcGVjaWZpY2F0aW9uOidSdXNzbyBPbmUgTWVkaXVtIEl0YWxpYyc7dGV4dC1hbGlnbjpjZW50ZXI7bGV0dGVyLXNwYWNpbmc6MHB4O3RleHQtYW5jaG9yOm1pZGRsZTtmaWxsLXJ1bGU6ZXZlbm9kZDtzdHJva2U6IzAwMDAwMDtzdHJva2Utd2lkdGg6MC42MTM2MDQ7c3Ryb2tlLWxpbmVjYXA6cm91bmQ7c3Ryb2tlLWxpbmVqb2luOnJvdW5kIiBkPSJtIDE0OS40NDA2NiwxNjEuMTk1MDUgaCAtMy41MDY3NCB2IC0xMC45MDk4NiBoIC00LjA5MTIgdiAtMi43Mjc0NyBoIDExLjY4OTE0IHYgMi43Mjc0NyBoIC00LjA5MTIgeiIgaWQ9InRleHQxLTQtMy0zLTEtMCIgdHJhbnNmb3JtPSJza2V3WCgtMTUpIiBhcmlhLWxhYmVsPSJUIj48L3BhdGg+PHBhdGggc3R5bGU9ImZvbnQtc3R5bGU6aXRhbGljO2ZvbnQtd2VpZ2h0OmJvbGQ7Zm9udC1zaXplOjE5LjQ4MTlweDtsaW5lLWhlaWdodDoyLjU7Zm9udC1mYW1pbHk6J1J1c3NvIE9uZSc7LWlua3NjYXBlLWZvbnQtc3BlY2lmaWNhdGlvbjonUnVzc28gT25lIE1lZGl1bSBJdGFsaWMnO3RleHQtYWxpZ246ZW5kO2xldHRlci1zcGFjaW5nOjBweDt0ZXh0LWFuY2hvcjplbmQ7ZmlsbDojZmY4YTAwO2ZpbGwtcnVsZTpldmVub2RkO3N0cm9rZTojZmY4YTAwO3N0cm9rZS13aWR0aDowLjYxMzYwNDtzdHJva2UtbGluZWNhcDpyb3VuZDtzdHJva2UtbGluZWpvaW46cm91bmQiIGQ9Im0gMTUzLjUzODg4LDE2NC41MjY2IGggLTMuNTA2NzQgdiAtMTMuNjM3MzMgaCAxMC44MTI0NSB2IDIuNzI3NDYgaCAtNy4zMDU3MSB2IDMuMjE0NTIgaCA1Ljc0NzE2IHYgMi43Mjc0NiBoIC01Ljc0NzE2IHoiIGlkPSJ0ZXh0MS05LTgtNC0zLTctMiIgdHJhbnNmb3JtPSJza2V3WCgtMTUpIiBhcmlhLWxhYmVsPSJGIj48L3BhdGg+PC9nPjwvZz48L3N2Zz48L2c+PC9nPjwvc3ZnPjwvZz48ZyBpZD0iZGFyay1pY29uIj48c3ZnIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgdmVyc2lvbj0iMS4xIiB4bWxuczp4bGluaz0iaHR0cDovL3d3dy53My5vcmcvMTk5OS94bGluayIgd2lkdGg9IjEwMDAiIGhlaWdodD0iMTAwMCI+PGc+PGcgdHJhbnNmb3JtPSJtYXRyaXgoMi43MjcxODk0NzM2MTU4ODcsMCwwLDIuNzI3MTg5NDczNjE1ODg3LDAsNDguMjI4MzQxMzU2NjMzOTA1KSI+PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZlcnNpb249IjEuMSIgd2lkdGg9IjM2Ni42Nzc4NiIgaGVpZ2h0PSIzMzEuMzA5MzMiIHZpZXdCb3g9IjAgMCA5Ny4wMTY4NSA4Ny42NTg5MjMiIGlkPSJzdmcxIiB4bWw6c3BhY2U9InByZXNlcnZlIiB4bWxuczpzdmc9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj48ZGVmcyBpZD0iZGVmczEiPjwvZGVmcz48ZyBpZD0ibGF5ZXIxIiB0cmFuc2Zvcm09InRyYW5zbGF0ZSgxMzAuOTY4ODEsLTg3Mi4wNjY2OCkiPjxnIGlkPSJnMS03LTEtNi0yLTEtOSIgdHJhbnNmb3JtPSJtYXRyaXgoNC45ODE1NDc5LDAsMCw0Ljk4NTU4MjIsLTYzNS4zODE5NiwxMzcuOTM1MTIpIj48cGF0aCBzdHlsZT0iZm9udC1zdHlsZTppdGFsaWM7Zm9udC13ZWlnaHQ6Ym9sZDtmb250LXNpemU6MTkuNDgxOXB4O2xpbmUtaGVpZ2h0OjIuNTtmb250LWZhbWlseTonUnVzc28gT25lJzstaW5rc2NhcGUtZm9udC1zcGVjaWZpY2F0aW9uOidSdXNzbyBPbmUgTWVkaXVtIEl0YWxpYyc7dGV4dC1hbGlnbjpjZW50ZXI7bGV0dGVyLXNwYWNpbmc6MHB4O3RleHQtYW5jaG9yOm1pZGRsZTtmaWxsOiNmZmZmZmY7ZmlsbC1ydWxlOmV2ZW5vZGQ7c3Ryb2tlOiNmZmZmZmY7c3Ryb2tlLXdpZHRoOjAuNjEzNjA0O3N0cm9rZS1saW5lY2FwOnJvdW5kO3N0cm9rZS1saW5lam9pbjpyb3VuZCIgZD0ibSAxNDkuNDQwNjYsMTYxLjE5NTA1IGggLTMuNTA2NzQgdiAtMTAuOTA5ODYgaCAtNC4wOTEyIHYgLTIuNzI3NDcgaCAxMS42ODkxNCB2IDIuNzI3NDcgaCAtNC4wOTEyIHoiIGlkPSJ0ZXh0MS00LTMtMy0xLTAtMyIgdHJhbnNmb3JtPSJza2V3WCgtMTUpIiBhcmlhLWxhYmVsPSJUIj48L3BhdGg+PHBhdGggc3R5bGU9ImZvbnQtc3R5bGU6aXRhbGljO2ZvbnQtd2VpZ2h0OmJvbGQ7Zm9udC1zaXplOjE5LjQ4MTlweDtsaW5lLWhlaWdodDoyLjU7Zm9udC1mYW1pbHk6J1J1c3NvIE9uZSc7LWlua3NjYXBlLWZvbnQtc3BlY2lmaWNhdGlvbjonUnVzc28gT25lIE1lZGl1bSBJdGFsaWMnO3RleHQtYWxpZ246ZW5kO2xldHRlci1zcGFjaW5nOjBweDt0ZXh0LWFuY2hvcjplbmQ7ZmlsbDojZmY4YTAwO2ZpbGwtcnVsZTpldmVub2RkO3N0cm9rZTojZmY4YTAwO3N0cm9rZS13aWR0aDowLjYxMzYwNDtzdHJva2UtbGluZWNhcDpyb3VuZDtzdHJva2UtbGluZWpvaW46cm91bmQiIGQ9Im0gMTUzLjUzODg4LDE2NC41MjY2IGggLTMuNTA2NzQgdiAtMTMuNjM3MzMgaCAxMC44MTI0NSB2IDIuNzI3NDYgaCAtNy4zMDU3MSB2IDMuMjE0NTIgaCA1Ljc0NzE2IHYgMi43Mjc0NiBoIC01Ljc0NzE2IHoiIGlkPSJ0ZXh0MS05LTgtNC0zLTctMi03IiB0cmFuc2Zvcm09InNrZXdYKC0xNSkiIGFyaWEtbGFiZWw9IkYiPjwvcGF0aD48L2c+PC9nPjwvc3ZnPjwvZz48L2c+PC9zdmc+PC9nPjwvc3ZnPg==";function Oq({projectName:e,currentWorkspaceId:t,brandLabel:r="TaskForce",brandHomeLabel:a="Go to Kanban",onBrandClick:s,runtimeMode:i="local",theme:l=Dh,meta:c,actions:d}){const f=o.useRef(null),p=o.useRef(null),[g,h]=o.useState(!0),y=sA(l)?z_:Kk,k=String(e||"").trim(),v=String(t||"").trim(),C=v.toLowerCase(),S=!!(k&&(i!=="cloud"||C&&C!=="default")),w=o.useCallback(()=>{if(!S){h(!0);return}const b=f.current,$=p.current;if(!b||!$)return;const I=b.getBoundingClientRect().width,E=$.getBoundingClientRect().width;if(I<=0||E<=0)return;const K=window.getComputedStyle(b),U=Number.parseFloat(K.columnGap||K.gap||"0")||0,L=Array.from(b.children).filter(H=>{if(H===$)return!1;const be=H.getBoundingClientRect();return be.width>0&&be.height>0}),ie=L.reduce((H,be)=>H+be.getBoundingClientRect().width,0)+E+U*L.length;h(ie<=I)},[S]);o.useLayoutEffect(()=>{w();const b=f.current,$=p.current;if(!b||!$)return;if(typeof ResizeObserver>"u")return window.addEventListener("resize",w),()=>window.removeEventListener("resize",w);const I=new ResizeObserver(w);return I.observe(b),I.observe($),()=>I.disconnect()},[w,k,c]);const _=S&&g,M=()=>{if(!v||typeof navigator>"u")return;const b=navigator.clipboard;b?.writeText&&b.writeText(v).catch(()=>{})},R=b=>{b.key!=="Enter"&&b.key!==" "||(b.preventDefault(),M())},P=n.jsxs(n.Fragment,{children:[n.jsx("img",{src:y,alt:"Taskforce Logo",className:x.brandIcon,onError:b=>{const $=b.currentTarget;$.src!==wS?$.src=wS:$.style.display="none"}}),n.jsx("span",{children:r}),i==="cloud"&&n.jsx("span",{className:x.brandCloudSuffix,children:"HQ"})]});return n.jsxs("div",{className:`${x.header} ${zr.standaloneHeader}`,children:[n.jsxs("div",{ref:f,className:`${x.headerTitle} ${zr.standaloneTitle}`,children:[s?n.jsx("button",{type:"button",className:x.brandHomeButton,onClick:s,title:a,"aria-label":a,children:P}):n.jsx("span",{className:x.brandHomeStatic,children:P}),S&&n.jsxs("span",{ref:p,className:`${x.projectNameGroup} ${_?"":x.projectNameGroupHidden}`.trim(),"aria-hidden":_?void 0:!0,children:[n.jsx("span",{className:x.projectSlash,children:"/"}),n.jsx("span",{className:x.projectName,title:_&&v?`Workspace ID: ${v}`:void 0,role:_&&v?"button":void 0,tabIndex:_&&v?0:void 0,onClick:M,onMouseDown:b=>b.preventDefault(),onKeyDown:R,children:k})]}),c]}),n.jsx("div",{className:x.headerActions,style:{gap:"16px"},children:d})]})}function Wi(e){return`${e.type}:${e.id}`}function Bq(e){if(!Array.isArray(e))return;const t=new Set,r=[];for(const a of e){if(!a||typeof a!="object"||Array.isArray(a))continue;const s=a.type,i=a.id;if(s!=="initiative"&&s!=="workstream"||typeof i!="string")continue;const l=i.trim();if(!l)continue;const c={type:s,id:l},d=Wi(c);t.has(d)||(t.add(d),r.push(c))}return r}function Wq(e,t){const r=Wi(t);return e.some(s=>Wi(s)===r)?e.filter(s=>Wi(s)!==r):[...e,t]}const $q="taskforce.uiState.layout.v1",Fq=/^\d{4}-\d{2}-\d{2}$/,Uq=/^\d{4}-\d{2}$/;function zq(e){const t=String(e.workspaceId||"default").trim()||"default",r=String(e.userId||"anonymous").trim()||"anonymous",a=mg(`user:${r}`);return`${e.runtimeMode}:${t}:user:${a}`}function Eu(e){return!!(e&&typeof e=="object"&&!Array.isArray(e))}function yh(e){if(!Array.isArray(e))return;const t=Array.from(new Set(e.filter(r=>typeof r=="string").map(r=>r.trim()).filter(Boolean)));return t.length>0?t:[]}function Df(e){if(!(typeof e!="number"||!Number.isFinite(e)||e<0))return Math.round(e)}function Hq(e,t){if(!Eu(e))return;const r=Object.entries(e).map(([a,s])=>{const i=a.trim(),l=Df(s);return i&&l!==void 0?[i,l]:null}).filter(a=>a!==null).slice(-50);return Object.fromEntries(r)}function Vq(e){if(!Eu(e))return null;const t=typeof e.zoomLevel=="number"&&Number.isFinite(e.zoomLevel)?Math.min(4,Math.max(.25,e.zoomLevel)):void 0,r=Df(e.scrollLeft),a=Df(e.scrollTop);return t===void 0||r===void 0||a===void 0?null:{zoomLevel:t,scrollLeft:r,scrollTop:a}}function Gq(e){if(!Eu(e))return;const t=Object.entries(e).map(([r,a])=>{const s=r.trim(),i=Vq(a);return s&&i?[s,i]:null}).filter(r=>r!==null).slice(-50);return Object.fromEntries(t)}function Kq(e){if(e===null)return null;if(!Eu(e)||e.type!=="initiative"&&e.type!=="workstream"||typeof e.id!="string")return;const t=e.id.trim();return t?{type:e.type,id:t}:null}function H_(e){if(!Eu(e))return null;const t={},r=y=>{typeof e[y]=="boolean"&&(t[y]=e[y])};["scheduleShowWeekends","scheduleShowBacklog","scheduleOnlyExpired","scheduleSidebarOpen","showFilters","documentTrayOpen","imageTrayOpen","agentTrayOpen","taskforceAgentRosterTrayOpen","taskforceAgentDrawerOpen","taskforceAgentPanelCollapsed","planningDrawerOpen","planningTreeCollapsed","planningPrimaryCollapsed","planningSecondaryCollapsed","planningFavoritesSectionCollapsed","planningInitiativesSectionCollapsed","planningWorkstreamsSectionCollapsed"].forEach(y=>r(y)),(e.planningNavigatorSort==="default"||e.planningNavigatorSort==="title"||e.planningNavigatorSort==="owner"||e.planningNavigatorSort==="progress")&&(t.planningNavigatorSort=e.planningNavigatorSort),(e.planningTaskArrangeMode==="execution"||e.planningTaskArrangeMode==="ready"||e.planningTaskArrangeMode==="priority")&&(t.planningTaskArrangeMode=e.planningTaskArrangeMode);const a=Bq(e.planningFavorites);a&&(t.planningFavorites=a),typeof e.scheduleSelectedDate=="string"&&Fq.test(e.scheduleSelectedDate)&&(t.scheduleSelectedDate=e.scheduleSelectedDate),typeof e.scheduleCalendarMonth=="string"&&Uq.test(e.scheduleCalendarMonth)&&(t.scheduleCalendarMonth=e.scheduleCalendarMonth);const s=Df(e.scheduleScrollLeft);s!==void 0&&(t.scheduleScrollLeft=s);const i=yh(e.documentTypeFilters);i&&(t.documentTypeFilters=i);const l=yh(e.documentAttachmentFilters);l&&(t.documentAttachmentFilters=l),typeof e.documentSortField=="string"&&(t.documentSortField=e.documentSortField),(e.documentSortOrder==="asc"||e.documentSortOrder==="desc")&&(t.documentSortOrder=e.documentSortOrder);const c=yh(e.documentPinnedDocIds)?.slice(-50);c&&(t.documentPinnedDocIds=c),typeof e.documentSearchQuery=="string"&&(t.documentSearchQuery=e.documentSearchQuery),typeof e.documentSelectedDocId=="string"?t.documentSelectedDocId=e.documentSelectedDocId.trim()||null:e.documentSelectedDocId===null&&(t.documentSelectedDocId=null);const d=Hq(e.documentScrollByDocId);d&&(t.documentScrollByDocId=d);const f=Df(e.documentListScrollTop);f!==void 0&&(t.documentListScrollTop=f);const p=yh(e.planningExpandedInitiativeIds);p&&(t.planningExpandedInitiativeIds=p);const g=Kq(e.planningDrawerDetail);g!==void 0&&(t.planningDrawerDetail=g),typeof e.planningNestedWorkstreamDetailId=="string"?t.planningNestedWorkstreamDetailId=e.planningNestedWorkstreamDetailId.trim()||null:e.planningNestedWorkstreamDetailId===null&&(t.planningNestedWorkstreamDetailId=null),Eu(e.annotatedTarget)?t.annotatedTarget=e.annotatedTarget:e.annotatedTarget===null&&(t.annotatedTarget=null),typeof e.annotatedSessionId=="string"?t.annotatedSessionId=e.annotatedSessionId.trim()||null:e.annotatedSessionId===null&&(t.annotatedSessionId=null);const h=Gq(e.annotatedViewportByContextKey);return h&&(t.annotatedViewportByContextKey=h),t}function qq(e,t){if(!e)return{state:t,localFallbackPatch:{}};const r={},a=r;for(const[s,i]of Object.entries(e))Object.prototype.hasOwnProperty.call(t,s)||(a[s]=i);return{state:{...e,...t},localFallbackPatch:r}}function _g(e,t){return Object.is(e,t)?!0:JSON.stringify(e)===JSON.stringify(t)}function Yq(e,t){const r={},a=r;for(const[s,i]of Object.entries(t))_g(e[s],i)||(a[s]=i);return r}function Zq(e,t){return Object.entries(t).every(([r,a])=>Object.prototype.hasOwnProperty.call(e,r)&&_g(e[r],a))}function bS(e,t){const r=e;for(const[a,s]of Object.entries(t))_g(r[a],s)&&delete r[a]}function V_(e){const t=pv(e);return`${$q}.${t}`}function kh(e){const t=String(e.currentWorkspaceId||"").trim();return!e.useCloudProxy||!t||t==="default"?e.headers:{...e.headers||{},"x-taskforce-workspace-id":t}}function Jq(e){if(typeof window>"u")return null;try{const t=window.localStorage.getItem(V_(e));return t?H_(JSON.parse(t)):null}catch{return null}}function SS(e,t){if(!(typeof window>"u"))try{window.localStorage.setItem(V_(t),JSON.stringify(e))}catch{}}function Qq(e){const{currentWorkspaceId:t,loadKey:r,enabled:a=!0,headers:s,useCloudProxy:i=!1,remotePlanningFavoritesAuthoritative:l=!1,snapshot:c,onApplyState:d}=e,[f,p]=o.useState(""),g=o.useRef(""),h=o.useRef(0),y=o.useRef(c),k=o.useRef(c),v=o.useRef({}),C=o.useRef(null),S=o.useRef(d);return o.useEffect(()=>{S.current=d},[d]),o.useEffect(()=>{y.current=c},[c]),o.useEffect(()=>{if(!a){g.current="",h.current=0,k.current=y.current,v.current={},C.current=null,p("");return}if(g.current===r)return;g.current=r,h.current=0,k.current=y.current,v.current={},C.current=null,p("");let w=!1;const _=h.current,M=Jq(r),R=!!M;return M&&(C.current={source:y.current,target:M},S.current(M),p(r)),(async()=>{try{const b=new URLSearchParams({key:"layout"});t&&b.set("workspaceId",t),i&&b.set("taskforceCloud","1");const $=await fetch(`/api/taskforce/ui-state?${b.toString()}`,{method:"GET",credentials:"include",headers:kh({headers:s,currentWorkspaceId:t,useCloudProxy:i})}),I=$.ok?await $.json().catch(()=>({})):{},E=H_(I?.state),K=E&&l?{...E,planningFavorites:E.planningFavorites??[]}:E;if(!w&&K&&h.current===_){const{state:U,localFallbackPatch:L}=qq(M,K);C.current={source:y.current,target:U},S.current(U),SS(U,r),Object.keys(L).length>0&&await ff({stateKey:"layout",workspaceId:t,headers:kh({headers:s,currentWorkspaceId:t,useCloudProxy:i}),patch:L,dedupeScope:r,useCloudProxy:i})}}catch{}finally{!w&&!R&&(C.current||(k.current=y.current),p(r))}})(),()=>{w=!0}},[t,a,s,r,l,i]),o.useEffect(()=>{if(f!==r)return;const w=C.current;if(w){if(Zq(c,w.target)){k.current=c,C.current=null;return}if(_g(c,w.source))return;C.current=null}const _=Yq(k.current,c);if(k.current=c,Object.keys(_).length===0)return;h.current+=1,SS(c,r),Object.assign(v.current,_);const M=window.setTimeout(async()=>{const R={...v.current};if(Object.keys(R).length!==0)try{const P=await ff({stateKey:"layout",workspaceId:t,headers:kh({headers:s,currentWorkspaceId:t,useCloudProxy:i}),patch:R,dedupeScope:r,useCloudProxy:i});(P.skipped&&P.reason==="unchanged"||!P.skipped&&P.response?.ok&&P.payload?.success!==!1)&&bS(v.current,R)}catch{}},250);return()=>window.clearTimeout(M)},[t,s,r,f,c,i]),o.useEffect(()=>{if(typeof window>"u"||f!==r)return;const w=()=>{const M={...v.current};Object.keys(M).length!==0&&ff({stateKey:"layout",workspaceId:t,headers:kh({headers:s,currentWorkspaceId:t,useCloudProxy:i}),patch:M,keepalive:!0,dedupeScope:r,useCloudProxy:i}).then(R=>{(R.skipped&&R.reason==="unchanged"||!R.skipped&&R.response?.ok&&R.payload?.success!==!1)&&bS(v.current,M)}).catch(()=>{})},_=()=>{document.visibilityState==="hidden"&&w()};return window.addEventListener("pagehide",w),document.addEventListener("visibilitychange",_),()=>{window.removeEventListener("pagehide",w),document.removeEventListener("visibilitychange",_)}},[t,s,r,f,i]),{ready:a&&f===r}}function Xq({value:e,placeholder:t,active:r=!1,onChange:a,onClear:s,clearTitle:i}){return n.jsxs("div",{className:x.searchContainer,style:{width:"240px"},children:[n.jsx(lg,{size:16,className:x.searchIcon}),n.jsx("input",{type:"text",className:`${x.searchInput} ${r?x.searchActive:""}`,placeholder:t,value:e,onChange:l=>a(l.target.value)}),e&&s&&n.jsx("button",{className:x.clearSearchBtn,onClick:s,title:i,children:n.jsx("span",{"aria-hidden":"true",children:"×"})})]})}function AS({label:e,value:t,options:r,onChange:a,trailingAction:s,width:i}){return n.jsxs("div",{className:x.groupByContainer,style:i?{width:i}:void 0,children:[n.jsx("span",{className:x.groupByLabel,children:e}),n.jsx("select",{className:`${x.select} ${x.groupBySelect}`,value:t,onChange:l=>a(l.target.value),children:r.map(l=>n.jsx("option",{value:l.value,children:l.label},String(l.value)))}),s]})}function vh({actions:e}){return n.jsx(n.Fragment,{children:e.map(t=>n.jsx("button",{className:`tf-control-icon ${t.active?"tf-control-icon-active":""} ${t.className||""}`.trim(),onClick:t.onClick,title:t.title,disabled:t.disabled,"aria-disabled":t.ariaDisabled,"aria-expanded":t.ariaExpanded,"aria-controls":t.ariaControls,children:t.icon},t.key))})}function CS(){return n.jsx("div",{className:x.headerDivider})}function eY({icon:e,label:t,onClick:r,disabled:a=!1}){return n.jsxs("button",{className:x.primaryUpdateBtn,onClick:r,disabled:a,children:[e," ",t]})}function tY({children:e,id:t}){return n.jsx("div",{id:t,className:x.filterToolbar,style:{padding:"8px 24px",borderBottom:"1px solid var(--border-primary)",background:"var(--bg-secondary)",boxShadow:"0 4px 18px rgba(8, 10, 24, 0.12)",display:"flex",alignItems:"center",gap:"12px",flexWrap:"wrap",position:"relative",zIndex:50},children:e})}function rY({categoryFilterOptions:e,typeFilterOptions:t,priorities:r,taxonomyDisplayLabels:a,filterCategories:s,setFilterCategories:i,filterTypes:l,setFilterTypes:c,filterPriorities:d,setFilterPriorities:f,filterStatus:p,setFilterStatus:g,filterAssignees:h,setFilterAssignees:y,assigneeOptions:k,initiativeFilterOptions:v=[],selectedInitiativeId:C="",setSelectedInitiativeId:S=()=>{},workstreamFilterOptions:w=[],selectedWorkstreamId:_="",setSelectedWorkstreamId:M=()=>{},taskScope:R,setTaskScope:P,showArchive:b,setShowArchive:$,onDeleteAllDeleted:I,clearFilters:E,clearFiltersDisabled:K=!1}){return n.jsxs(n.Fragment,{children:[n.jsx(Hz,{}),n.jsx(Jp,{label:a?.category||_t("standalone.categoryLabel"),options:e,selected:s,onChange:U=>i(U),variant:"value"}),n.jsx(Jp,{label:a?.type||_t("standalone.typeLabel"),options:t,selected:l,onChange:U=>c(U),variant:"value"}),n.jsx(Jp,{label:a?.priority||_t("standalone.priorityLabel"),options:r,selected:d,onChange:U=>f(U),variant:"value"}),n.jsx(Jp,{label:_t("standalone.statusLabel"),options:Ui,selected:p,onChange:U=>g(U),variant:"value"}),n.jsx(Jp,{label:_t("standalone.assigneeLabel"),options:k,selected:h,onChange:U=>y(U),variant:"value",searchable:!0,searchPlaceholder:"Search assignees...",noResultsText:"No assignees found.",renderOptionContent:U=>{const L=k.find(D=>String(D.value)===String(U.value));return L?n.jsx(ju,{option:L,size:20}):U.label}}),n.jsx("div",{className:x.headerDivider,style:{height:"16px",margin:"0 8px"}}),n.jsx(tS,{label:"Initiative",options:v,selected:C,onChange:S,allLabel:"All Initiatives",title:"Filter by initiative"}),n.jsx(tS,{label:"Workstream",options:w,selected:_,onChange:M,allLabel:"All Workstreams",title:"Filter by workstream"}),n.jsx(Vz,{onClick:E,disabled:K,label:"Reset task filters and sort"}),n.jsx("div",{style:{flex:1}}),R==="deleted"&&I&&n.jsx(Gz,{onClick:I,className:`${x.bulkArchiveBtn} ${x.taskToolbarAction} ${x.bulkDeleteBtn}`,title:"Empty trash",children:"Empty Trash"}),n.jsx(y_,{scope:R,onScopeChange:U=>{P(U),U==="archived"?$(!0):b&&$(!1)},className:x.groupByContainer,labelClassName:x.groupByLabel})]})}function nY(e){return n.jsx(tY,{id:e.id,children:n.jsx(rY,{...e})})}const aY="_drawer_12rwh_1",sY="_drawerBody_12rwh_5",oY="_paneShell_12rwh_13",iY="_collapsedPaneShell_12rwh_22",cY="_collapsedPaneHeader_12rwh_31",lY="_collapsedPaneLabel_12rwh_43",dY="_collapsedPaneMuted_12rwh_53",uY="_treePane_12rwh_66",pY="_treePaneSplit_12rwh_76",fY="_detailPane_12rwh_80",mY="_paneHeader_12rwh_90",hY="_paneHeaderLabel_12rwh_104",gY="_paneContent_12rwh_118",yY="_sectionTitle_12rwh_132",kY="_sectionHeaderRow_12rwh_141",vY="_headerActionGroup_12rwh_148",wY="_toggleActive_12rwh_155",bY="_archiveVisibilityToggle_12rwh_161",SY="_sectionGroup_12rwh_167",AY="_navigatorControls_12rwh_173",CY="_navigatorSearchRow_12rwh_179",_Y="_navigatorSearch_12rwh_179",IY="_navigatorClearSearch_12rwh_223",TY="_navigatorOptions_12rwh_244",xY="_navigatorOptionField_12rwh_255",RY="_navigatorOptionLabel_12rwh_262",PY="_navigatorDropdown_12rwh_268",EY="_navigatorDropdownTrigger_12rwh_282",NY="_navigatorEmpty_12rwh_295",jY="_scopeSummary_12rwh_324",MY="_treeList_12rwh_361",DY="_treeChildren_12rwh_374",LY="_treeTaskChildren_12rwh_384",OY="_visuallyHidden_12rwh_388",BY="_treeRow_12rwh_408",WY="_detailChildCard_12rwh_409",$Y="_treeRowArchived_12rwh_429",FY="_rowLeadingActions_12rwh_434",UY="_rowButton_12rwh_435",zY="_treeRowDetailOpen_12rwh_440",HY="_treeRowDropReady_12rwh_458",VY="_treeRowDropActive_12rwh_462",GY="_treeRowDropMode_12rwh_468",KY="_treeChevron_12rwh_468",qY="_scopeButton_12rwh_470",YY="_favoriteButton_12rwh_471",ZY="_dragHandle_12rwh_472",JY="_treeRowDragging_12rwh_476",QY="_rowBody_12rwh_491",XY="_rowButtonWithGrip_12rwh_504",eZ="_rowContent_12rwh_526",tZ="_rowTopRow_12rwh_536",rZ="_rowReferenceActions_12rwh_545",nZ="_rowRelationshipPicker_12rwh_552",aZ="_rowActions_12rwh_564",sZ="_emptyPanel_12rwh_604",oZ="_emptyPanelTitle_12rwh_613",iZ="_emptyPanelText_12rwh_619",cZ="_loadingState_12rwh_625",lZ="_loadingRow_12rwh_631",dZ="_loadingBadge_12rwh_643",uZ="_loadingTitle_12rwh_644",pZ="_loadingMeta_12rwh_645",fZ="_failureState_12rwh_666",mZ="_failureStateCompact_12rwh_675",hZ="_failureCopy_12rwh_679",gZ="_relationshipState_12rwh_705",yZ="_relationshipStateTitle_12rwh_716",kZ="_relationshipStateText_12rwh_722",vZ="_relationshipPaneContentEmpty_12rwh_729",wZ="_relationshipStateEmpty_12rwh_739",bZ="_detailHero_12rwh_753",SZ="_detailReferenceRow_12rwh_760",AZ="_detailTitle_12rwh_767",CZ="_detailTopRow_12rwh_774",_Z="_detailTopActions_12rwh_781",IZ="_detailDescription_12rwh_789",TZ="_detailDescriptionMarkdown_12rwh_802",xZ="_detailOwnerField_12rwh_812",RZ="_detailOwnerLabel_12rwh_818",PZ="_detailSummaryMeta_12rwh_824",EZ="_passiveGuidance_12rwh_828",NZ="_editorCard_12rwh_843",jZ="_inlineEditorCard_12rwh_850",MZ="_editorSelect_12rwh_855",DZ="_ownerSelect_12rwh_859",LZ="_editorField_12rwh_863",OZ="_editorLabel_12rwh_869",BZ="_editorActions_12rwh_875",WZ="_listCard_12rwh_895",$Z="_activityTimelineList_12rwh_904",FZ="_activityTimelineEmpty_12rwh_910",UZ="_sectionDropReady_12rwh_914",zZ="_sectionDropActive_12rwh_919",HZ="_sectionDropMode_12rwh_925",VZ="_linkPickerRow_12rwh_929",GZ="_editorRelationshipRow_12rwh_930",KZ="_relationshipRecovery_12rwh_937",qZ="_listItem_12rwh_953",YZ="_listItemButton_12rwh_962",ZZ="_detailCardButton_12rwh_971",JZ="_listItemText_12rwh_977",QZ="_detailChildCardSelected_12rwh_1001",XZ="_detailChildCardArchived_12rwh_1009",eJ="_detailChildReferenceRow_12rwh_1014",tJ="_detailChildCardTopRow_12rwh_1020",rJ="_detailChildActions_12rwh_1036",nJ="_relationshipPickerRow_12rwh_1045",ze={drawer:aY,drawerBody:sY,paneShell:oY,collapsedPaneShell:iY,collapsedPaneHeader:cY,collapsedPaneLabel:lY,collapsedPaneMuted:dY,treePane:uY,treePaneSplit:pY,detailPane:fY,paneHeader:mY,paneHeaderLabel:hY,paneContent:gY,sectionTitle:yY,sectionHeaderRow:kY,headerActionGroup:vY,toggleActive:wY,archiveVisibilityToggle:bY,sectionGroup:SY,navigatorControls:AY,navigatorSearchRow:CY,navigatorSearch:_Y,navigatorClearSearch:IY,navigatorOptions:TY,navigatorOptionField:xY,navigatorOptionLabel:RY,navigatorDropdown:PY,navigatorDropdownTrigger:EY,navigatorEmpty:NY,scopeSummary:jY,treeList:MY,treeChildren:DY,treeTaskChildren:LY,visuallyHidden:OY,treeRow:BY,detailChildCard:WY,treeRowArchived:$Y,rowLeadingActions:FY,rowButton:UY,treeRowDetailOpen:zY,treeRowDropReady:HY,treeRowDropActive:VY,treeRowDropMode:GY,treeChevron:KY,scopeButton:qY,favoriteButton:YY,dragHandle:ZY,treeRowDragging:JY,rowBody:QY,rowButtonWithGrip:XY,rowContent:eZ,rowTopRow:tZ,rowReferenceActions:rZ,rowRelationshipPicker:nZ,rowActions:aZ,emptyPanel:sZ,emptyPanelTitle:oZ,emptyPanelText:iZ,loadingState:cZ,loadingRow:lZ,loadingBadge:dZ,loadingTitle:uZ,loadingMeta:pZ,failureState:fZ,failureStateCompact:mZ,failureCopy:hZ,relationshipState:gZ,relationshipStateTitle:yZ,relationshipStateText:kZ,relationshipPaneContentEmpty:vZ,relationshipStateEmpty:wZ,detailHero:bZ,detailReferenceRow:SZ,detailTitle:AZ,detailTopRow:CZ,detailTopActions:_Z,detailDescription:IZ,detailDescriptionMarkdown:TZ,detailOwnerField:xZ,detailOwnerLabel:RZ,detailSummaryMeta:PZ,passiveGuidance:EZ,editorCard:NZ,inlineEditorCard:jZ,editorSelect:MZ,ownerSelect:DZ,editorField:LZ,editorLabel:OZ,editorActions:BZ,listCard:WZ,activityTimelineList:$Z,activityTimelineEmpty:FZ,sectionDropReady:UZ,sectionDropActive:zZ,sectionDropMode:HZ,linkPickerRow:VZ,editorRelationshipRow:GZ,relationshipRecovery:KZ,listItem:qZ,listItemButton:YZ,detailCardButton:ZZ,listItemText:JZ,detailChildCardSelected:QZ,detailChildCardArchived:XZ,detailChildReferenceRow:eJ,detailChildCardTopRow:tJ,detailChildActions:rJ,relationshipPickerRow:nJ},aJ="_description_ued10_1",sJ="_visuallyHidden_ued10_6",ng={description:aJ,visuallyHidden:sJ},oJ=Q.lazy(()=>Po(()=>import("./EntityActivityTimeline-pJ2ZjZ-k.js"),__vite__mapDeps([0,1,2,3,4,5,6])).then(e=>({default:e.EntityActivityTimeline}))),iJ=Q.lazy(()=>Po(()=>import("./ContextAttachmentManager-CMxSzHqc.js"),__vite__mapDeps([8,1,2,3,4,5])).then(e=>({default:e.ContextAttachmentManager})));function G_(){return n.jsx("span",{className:ng.visuallyHidden,"aria-hidden":"true",children:"Loading planning details"})}function cJ({description:e,label:t,taskReferences:r,className:a,markdownClassName:s}){const i=String(e||"").trim();return i?n.jsx("div",{className:`${ng.description} ${a||""}`.trim(),role:"region",tabIndex:0,"aria-label":`${t} description`,children:n.jsx(Sg,{variant:"detail",className:s,taskReferences:r,children:i})}):null}function lJ({entityType:e,entityId:t,referenceLabel:r,workspaceId:a,attachments:s,onAddAttachment:i,onRemoveAttachment:l,onUpdateAttachmentCaption:c,readOnly:d=!1,defaultExpanded:f=!0}){return n.jsx(Q.Suspense,{fallback:n.jsx(G_,{}),children:n.jsx(iJ,{ownerType:e,ownerId:t,ownerReferenceLabel:r,workspaceId:a,attachments:s||[],onAddAttachment:p=>i?.(p),onRemoveAttachment:p=>l?.(p),onUpdateAttachmentCaption:(p,g)=>c?.(p,g),readOnly:d,defaultExpanded:f})})}function dJ({entityType:e,item:t,assigneeOptions:r,currentActorId:a,taskReferences:s,parentInitiative:i=null,defaultExpanded:l=!1,listClassName:c,emptyClassName:d,hydrationState:f,onRetryHydration:p}){const[g,h]=Q.useState(l);Q.useEffect(()=>{h(l)},[l,e,t.id]),Q.useEffect(()=>{if(!(f?.status!=="error"||!p))return window.addEventListener("online",p),()=>window.removeEventListener("online",p)},[f?.status,p]);const y=Q.useMemo(()=>{const M=new Map;for(const R of r){const P=String(R.value||"").trim();P&&(M.set(P,R),M.set(P.toLowerCase(),R))}return M},[r]),k=Q.useCallback((M,R,P)=>{if(P&&P.trim())return P.trim();const b=String(M||"").trim();return b?y.get(b)?.label||y.get(b.toLowerCase())?.label||b:R==="ai"?"AI Agent":"You"},[y]),v=Q.useCallback(M=>{const R=String(M.actorId||"").trim();if(b_(R))return{kind:"system",label:v_,ActorIcon:$S,description:w_};const P=y.get(R)||y.get(R.toLowerCase()),b=M.actorProfile||P||null,$=M.actorType==="system"?"system":M.actorType==="ai"||b?.kind==="ai"||P?.kind==="agent"?"agent":M.actorType==="human"||b?.kind==="human"||P?.kind==="member"?"member":M.fallbackKind||"member",I=String(b&&"icon"in b&&b.icon?b.icon:$==="agent"?"Bot":$==="member"?"User":"ClipboardList"),E=Ru[I]||($==="agent"?Yl:$==="member"?wu:FS);return{kind:$,label:$==="system"?"System":k(R,$==="agent"?"ai":"human",b&&"label"in b&&b.label||null),color:b&&"color"in b&&b.color||void 0,ActorIcon:E,isCurrentActorHint:$==="member"&&(R===""||R.toLowerCase()==="user"||R.toLowerCase()==="human")}},[y,k]),C=Q.useCallback((M,R)=>{const P=String(R||"").trim();if(P){if(M==="ownerId")return y.get(P)?.label||y.get(P.toLowerCase())?.label||P;if(M==="initiativeId"&&i&&P===i.id)return fs(i)||i.title}},[y,i]),S=Q.useMemo(()=>XC({activity:t.activity,comments:t.comments}).length,[t.activity,t.comments]),w=Q.useCallback(()=>{h(M=>{const R=!M;return R&&f?.status==="error"&&p?.(),R})},[f?.status,p]),_=f?.error?`${f.error} Retry activity refresh`:"Retry activity refresh";return n.jsxs(n.Fragment,{children:[n.jsx(gf,{label:"Activity",count:S,showZeroCount:!0,expanded:g,expandedTitle:"Hide activity",collapsedTitle:"Show activity",onToggle:w,actions:f?.status==="error"&&p?n.jsx("button",{type:"button",className:"tf-control-icon",onClick:p,"aria-label":"Retry activity refresh",title:_,children:n.jsx(mi,{size:13,"aria-hidden":"true"})}):null}),f?.status==="loading"?n.jsx("span",{className:ng.visuallyHidden,role:"status","aria-live":"polite",children:"Loading latest activity…"}):null,f?.status==="error"?n.jsx("span",{className:ng.visuallyHidden,role:"status","aria-live":"polite",children:"Activity could not be refreshed. Existing activity is still shown."}):null,g?n.jsx(Q.Suspense,{fallback:n.jsx(G_,{}),children:n.jsx(oJ,{activity:t.activity,comments:t.comments,formatFieldValue:C,resolveActorPresentation:v,currentActorId:a,taskReferences:s,emptyMessage:`No ${e} activity yet.`,listClassName:c,emptyClassName:d})}):null]})}const uJ="_identity_1yyv1_1",pJ="_avatar_1yyv1_9",fJ="_picker_1yyv1_16",mJ="_identityDropdown_1yyv1_17",wh={identity:uJ,avatar:pJ,picker:fJ,identityDropdown:mJ};function K_({role:e,option:t,label:r,value:a,options:s=[],onChange:i,disabled:l=!1}){const[c,d]=Q.useState(!1),f=String(t?.label||r||"").trim(),p=t||(f?{...td,value:f,label:f,icon:"User",kind:"member"}:td),g=e==="owner"?`Owner: ${p.label}`:`Assigned to ${p.label}`,h=e==="owner"?`Change owner currently set to ${p.label}`:`Reassign task currently assigned to ${p.label}`,y=Q.useMemo(()=>_u(s),[s]),k=Q.useMemo(()=>new Map(y.map(S=>[S.value,S])),[y]),v=n.jsx("span",{className:wh.identity,title:i&&!l?h:g,"aria-label":g,children:n.jsx("span",{className:wh.avatar,children:n.jsx(Cg,{option:p,size:22,variant:"card"})})});if(!i||l)return v;const C=String(a||t?.value||td.value);return n.jsx("span",{className:wh.picker,onClick:S=>S.stopPropagation(),onPointerDown:S=>S.stopPropagation(),onKeyDown:S=>S.stopPropagation(),children:n.jsx(qo,{value:C,options:y,onChange:async S=>{d(!0);try{await i(String(S))}catch{}finally{d(!1)}},disabled:c,ariaLabel:h,className:wh.identityDropdown,hideChevron:!0,portalPanel:!0,panelAlign:"end",panelMinWidth:240,searchable:!0,searchPlaceholder:e==="owner"?"Search owners...":"Search assignees...",noResultsText:e==="owner"?"No owners found.":"No assignees found.",renderOptionContent:S=>{const w=k.get(String(S.value));return w?n.jsx(ju,{option:w}):S.label},triggerContent:v})})}const hJ="_referenceBadgeButton_f0046_1",gJ="_referenceBadgeStatic_f0046_2",yJ="_title_f0046_13",kJ="_meta_f0046_27",vJ="_cardFooter_f0046_38",wJ="_cardFooterMeta_f0046_47",bJ="_noTasks_f0046_55",SJ="_scopeCount_f0046_63",AJ="_contextCount_f0046_68",CJ="_progressTrack_f0046_75",_J="_progressSegment_f0046_84",IJ="_progressSegmentCancelled_f0046_90",TJ="_progressSegmentTodo_f0046_94",xJ="_progressFill_f0046_98",uo={referenceBadgeButton:hJ,referenceBadgeStatic:gJ,title:yJ,meta:kJ,cardFooter:vJ,cardFooterMeta:wJ,noTasks:bJ,scopeCount:SJ,contextCount:AJ,progressTrack:CJ,progressSegment:_J,progressSegmentCancelled:IJ,progressSegmentTodo:TJ,progressFill:xJ},RJ=["done","review","in-progress","on-hold","cancelled","task"];function nd({label:e,entityType:t,entityName:r,interactive:a=!0,provisional:s=!1,pending:i=!1}){const[l,c]=Q.useState(!1),d=s||i?x.provisionalReferenceBadge:"",f=r?.trim(),p=Q.useCallback(async g=>{g.stopPropagation();try{await navigator.clipboard.writeText(e),c(!0),window.setTimeout(()=>c(!1),1200)}catch{c(!1)}},[e]);return!a||i?n.jsx("span",{className:`${x.referenceBadge} ${x.referenceBadgeStatic} ${uo.referenceBadgeStatic} ${d}`.trim(),title:i?"Canonical reference pending synchronization.":f||(s?"Temporary identifier — replaced after synchronization.":void 0),children:n.jsx("span",{children:e})}):n.jsx(Fv,{copied:l,label:e,onClick:p,title:f||(s?"Temporary identifier — replaced after synchronization.":`Copy ${t} reference`),ariaLabel:l?`Copied ${s?"temporary ":""}${t} reference`:s?`Copy temporary ${t} reference ${e}`:`Copy ${t} reference`,className:`${uo.referenceBadgeButton} ${d}`.trim(),children:e})}function q_({children:e}){return n.jsx("span",{className:uo.title,"data-planning-card-title":"true",children:e})}function Y_({children:e,className:t=""}){return n.jsx("span",{className:`${uo.meta} ${t}`.trim(),children:e})}function Z_(){return n.jsx("span",{className:uo.noTasks,children:"No tasks yet"})}function J_({children:e,identity:t}){return n.jsxs("div",{className:uo.cardFooter,children:[n.jsx("div",{className:uo.cardFooterMeta,children:e}),t]})}function Q_({count:e}){const t=Math.max(0,Number(e)||0),r=`${t} context ${t===1?"item":"items"}`;return n.jsxs("span",{className:uo.contextCount,"aria-label":r,title:r,children:[n.jsx(xT,{size:12,"aria-hidden":"true"}),n.jsx("span",{"aria-hidden":"true",children:t})]})}function X_({value:e,label:t,statusCounts:r}){const a=Math.min(100,Math.max(0,Number(e)||0)),s=RJ.map(d=>{const f=Math.max(0,Number(r?.[d])||0),p=_o(d);return{status:d,count:f,label:p.shortLabel||p.label,color:d==="task"||d==="cancelled"?void 0:Jn(p.color)}}),i=s.reduce((d,f)=>d+f.count,0),l=s.filter(d=>d.count>0).map(d=>`${d.label}: ${d.count}`).join(", "),c=l?`${t}. ${l}`:t;return n.jsx("div",{className:uo.progressTrack,role:"progressbar","aria-label":c,title:l||void 0,"aria-valuemin":0,"aria-valuemax":100,"aria-valuenow":a,children:i>0?s.map(d=>d.count>0?n.jsx("span",{"aria-hidden":"true","data-progress-status":d.status,className:`${uo.progressSegment} ${d.status==="cancelled"?uo.progressSegmentCancelled:""} ${d.status==="task"?uo.progressSegmentTodo:""}`.trim(),style:{width:`${d.count/i*100}%`,backgroundColor:d.color}},d.status):null):n.jsx("span",{className:uo.progressFill,style:{width:`${a}%`},"aria-hidden":"true"})})}function eI({item:e,workstreamCount:t,className:r=""}){const a=e.taskCount>0,s=Math.max(0,Number(t)||0);return n.jsxs(Y_,{className:r,children:[t!==void 0?n.jsxs(n.Fragment,{children:[n.jsxs("span",{className:uo.scopeCount,children:[s," ",s===1?"workstream":"workstreams"]}),n.jsx("span",{"aria-hidden":"true",children:"•"})]}):null,a?n.jsxs(n.Fragment,{children:[n.jsxs("span",{children:[e.completedTaskCount," of ",e.taskCount," complete"]}),n.jsx("span",{"aria-hidden":"true",children:"•"})]}):null,n.jsx(Q_,{count:e.attachmentCount})]})}function tI({item:e,entityType:t,workstreamCount:r,ownerOption:a,ownerOptions:s,onChangeOwner:i}){const l=e.taskCount>0;return n.jsxs(n.Fragment,{children:[n.jsx(q_,{children:e.title}),l?n.jsx(X_,{value:e.progressPercent,label:`${e.title}: ${e.progressPercent}% resolved`,statusCounts:e.statusCounts}):null,n.jsxs(J_,{identity:n.jsx(K_,{role:"owner",option:a,label:e.ownerLabel,value:e.ownerId,options:s,onChange:i,disabled:!!e.isArchived}),children:[l?null:n.jsx(Z_,{}),n.jsx(eI,{item:e,workstreamCount:t==="initiative"?r:void 0})]})]})}const PJ="_card_6phn6_1",EJ="_content_6phn6_34",NJ="_compact_6phn6_52",jJ="_archived_6phn6_57",MJ="_referenceRow_6phn6_75",DJ="_topRow_6phn6_85",LJ="_actions_6phn6_101",zl={card:PJ,content:EJ,compact:NJ,archived:jJ,referenceRow:MJ,topRow:DJ,actions:LJ};function rI({task:e,assigneeOption:t,assigneeOptions:r,showStatusLabel:a,onOpen:s,onAssigneeChange:i,onStatusChange:l,referenceAction:c,actions:d,feedback:f,referenceInteractive:p=!0,compact:g=!1}){const h=uv(e),y=h.label,k=_o(e.status),v=k.value==="task"?"":k.shortLabel||k.label,C=Jn(k.color),S=y?`Open task ${y}: ${e.title}`:`Open task ${e.title}`,w=_=>{!s||_.key!=="Enter"&&_.key!==" "||(_.preventDefault(),s())};return n.jsxs("div",{className:`${zl.card} ${g?zl.compact:""} ${e.isArchived?zl.archived:""}`.trim(),"data-task-status":k.value,style:{"--planning-task-status-color":C},children:[n.jsxs("div",{className:zl.topRow,children:[n.jsxs("div",{className:zl.referenceRow,children:[c,y?n.jsx(nd,{label:y,entityType:"task",interactive:p,provisional:h.isProvisional}):n.jsx("span",{"aria-hidden":"true"})]}),n.jsxs("div",{className:zl.actions,onClick:_=>_.stopPropagation(),children:[d,n.jsx(Yh,{status:k.value,disabled:!!e.isArchived||!l,compressed:!0,shortLabels:!0,showLabel:a,archiveActionMode:"none",onStatusChange:l})]})]}),f,n.jsxs("div",{role:s?"button":void 0,tabIndex:s?0:void 0,className:zl.content,onClick:s,onKeyDown:w,"aria-label":s?S:void 0,children:[n.jsx(q_,{children:e.title}),n.jsx(J_,{identity:n.jsx(K_,{role:"assignee",option:t,value:e.assignee,options:r,onChange:i,disabled:!!e.isArchived}),children:n.jsxs(Y_,{children:[v?n.jsxs(n.Fragment,{children:[v,n.jsx("span",{"aria-hidden":"true",children:" • "})]}):null,n.jsx(Q_,{count:e.attachmentCount}),e.isArchived?n.jsxs(n.Fragment,{children:[n.jsx("span",{"aria-hidden":"true",children:" • "}),"archived"]}):null]})})]})]})}const ak=Object.freeze([{value:"execution",label:"Execution order",description:"Shared order planned for this workstream."},{value:"ready",label:"Ready first",description:"Shows tasks with completed prerequisites first."},{value:"priority",label:"Priority",description:"Shows higher-priority tasks first."}]);function OJ(e){return e==="ready"||e==="priority"?e:"execution"}function BJ(e,t){const r=new Set(t);if(r.size!==t.length)throw new Error("Visible task order contains duplicate task ids.");if(e.filter(i=>r.has(i.id)).length!==r.size)throw new Error("Visible task order contains tasks outside this workstream.");let s=0;return e.map(i=>r.has(i.id)?t[s++]:i.id)}function df(e){const t=_o(e.status).value;return t==="done"||t==="cancelled"}function Kv(e,t){const r=typeof e.workstreamOrder=="number"&&Number.isFinite(e.workstreamOrder)?e.workstreamOrder:Number.POSITIVE_INFINITY,a=typeof t.workstreamOrder=="number"&&Number.isFinite(t.workstreamOrder)?t.workstreamOrder:Number.POSITIVE_INFINITY;return r!==a?r-a:String(e.createdAt||"").localeCompare(String(t.createdAt||""))||e.id.localeCompare(t.id)}function _S(e,t){return e.dependencyState?e.dependencyState==="ready":(e.prerequisiteTaskIds||[]).every(r=>_o(t.get(r)?.status).value==="done")}function ag(e){return e.map((t,r)=>({task:t,index:r})).sort((t,r)=>Kv(t.task,r.task)||t.index-r.index).map(({task:t})=>t)}function WJ(e,t){const r=new Set(e.map(f=>f.id)),a=new Map,s=new Map(e.map(f=>[f.id,0]));for(const f of e)for(const p of f.prerequisiteTaskIds||[]){const g=t.get(p);!g||df(g)||!r.has(p)||(a.set(p,[...a.get(p)||[],f.id]),s.set(f.id,(s.get(f.id)||0)+1))}const i=new Map(e.map(f=>[f.id,f])),l=ag(e.filter(f=>s.get(f.id)===0)),c=[];for(;l.length>0;){const f=l.shift();c.push(f);for(const p of a.get(f.id)||[]){const g=(s.get(p)||0)-1;if(s.set(p,g),g===0){const h=i.get(p);h&&(l.push(h),l.sort(Kv))}}}if(c.length===e.length)return c;const d=new Set(c.map(f=>f.id));return[...c,...ag(e.filter(f=>!d.has(f.id)))]}function qk(e,t){const r=new Map(e.map(a=>[a.id,a]));if(t==="ready"){const a=e.filter(l=>!df(l)),s=ag(a.filter(l=>_S(l,r))),i=WJ(a.filter(l=>!_S(l,r)),r);return[...s,...i,...ag(e.filter(df))]}return e.map((a,s)=>({task:a,index:s})).sort((a,s)=>{const i=a.task,l=s.task,c=Number(df(i))-Number(df(l));if(c)return c;if(t==="priority"){const d=Number(l.priority||0)-Number(i.priority||0);if(d)return d}return Kv(i,l)||a.index-s.index}).map(({task:a})=>a)}const $J="_control_1n99m_1",qv={control:$J},FJ="_trigger_11iyx_1",UJ={trigger:FJ};function zJ({value:e,onChange:t}){const r=ak.find(a=>a.value===e)||ak[0];return n.jsx(qo,{value:e,options:[...ak],onChange:a=>t(a),ariaLabel:"Arrange workstream tasks",className:qv.control,portalPanel:!0,panelAlign:"end",triggerContent:n.jsxs("span",{className:UJ.trigger,title:r.description,children:[n.jsx(tv,{size:14,"aria-hidden":"true"}),n.jsx("span",{children:r.label})]})})}const HJ="_list_oepxi_1",VJ="_item_oepxi_6",GJ="_grip_oepxi_13",KJ="_card_oepxi_40",kf={list:HJ,item:VJ,grip:GJ,card:KJ};function qJ(e){const t=iv({id:e.task.id,disabled:e.disabled});return n.jsxs("div",{ref:t.setNodeRef,className:kf.item,style:{transform:dg.Transform.toString(t.transform),transition:t.transition},children:[n.jsx("button",{type:"button",className:kf.grip,disabled:e.disabled,"aria-label":`Reorder ${e.task.title}`,title:"Drag to change execution order",...t.attributes,...t.listeners,children:n.jsx(ev,{size:15,"aria-hidden":"true"})}),n.jsx("div",{className:kf.card,children:e.children})]})}function YJ(e){const[t,r]=Q.useState(()=>e.tasks.map(p=>p.id)),[a,s]=Q.useState(!1),i=e.tasks.map(p=>p.id).join("\0");Q.useEffect(()=>r(e.tasks.map(p=>p.id)),[i]);const l=rv(Cf(nv,{activationConstraint:{distance:6}}),Cf(XS,{coordinateGetter:QS})),c=Q.useMemo(()=>{const p=new Map(e.tasks.map(g=>[g.id,g]));return t.map(g=>p.get(g)).filter(g=>!!g)},[t,e.tasks]),d=e.mode==="execution"&&!!e.onReorder,f=Q.useCallback(async p=>{if(!d||a||!p.over||p.active.id===p.over.id)return;const g=t,h=g.indexOf(String(p.active.id)),y=g.indexOf(String(p.over.id));if(h<0||y<0)return;const k=new Map(c.map(S=>[S.id,S])),v=S=>S?.status==="done"||S?.status==="cancelled";if(v(k.get(g[h]))!==v(k.get(g[y])))return;const C=ZS(g,h,y);r(C),s(!0);try{await e.onReorder?.(C)}catch{r(g)}finally{s(!1)}},[d,t,c,e,a]);return d?n.jsx(av,{sensors:l,collisionDetection:JS,onDragEnd:p=>{f(p)},children:n.jsx(sv,{items:t,strategy:ov,children:n.jsx("div",{className:`${kf.list} ${e.className||""}`.trim(),"aria-busy":a||void 0,children:c.map(p=>n.jsx(qJ,{task:p,disabled:a,children:e.children(p)},p.id))})})}):n.jsx("div",{className:`${kf.list} ${e.className||""}`.trim(),children:e.tasks.map(p=>n.jsx(Q.Fragment,{children:e.children(p)},p.id))})}const ZJ="_prompt_16ixe_1",JJ="_actions_16ixe_20",IS={prompt:ZJ,actions:JJ};function Yk({entityType:e,title:t,activeTaskCount:r=0,activeWorkstreamCount:a=0,busy:s,onCancel:i,onConfirm:l}){const c=[r>0?`${r} completed/cancelled ${r===1?"task":"tasks"}`:"",e==="initiative"&&a>0?`${a} ${a===1?"workstream":"workstreams"}`:""].filter(Boolean),d=c.length===0?"":c.length===1?`${c[0]} and `:`${c.join(", ")}, and `;return n.jsxs("div",{className:`${IS.prompt} tf-surface-inset`,role:"group","aria-label":`Confirm archive ${e} ${t}`,children:[n.jsxs("span",{children:["Archive ",d,"this ",e,"?"]}),n.jsxs("div",{className:IS.actions,children:[n.jsx("button",{type:"button",className:"tf-control-icon tf-control-icon-compact",disabled:s,onClick:i,title:"Cancel archive","aria-label":"Cancel archive",children:n.jsx(fo,{size:14,"aria-hidden":"true"})}),n.jsx("button",{type:"button",className:"tf-control-icon tf-control-icon-compact",disabled:s,onClick:l,title:"Confirm archive","aria-label":s?"Archiving":"Confirm archive",children:n.jsx(hi,{size:14,"aria-hidden":"true"})})]})]})}const QJ="_title_sy4bx_1",XJ="_content_sy4bx_7",eQ="_help_sy4bx_17",tQ="_actions_sy4bx_22",bh={title:QJ,content:XJ,help:eQ,actions:tQ};function rQ({item:e,busy:t,theme:r,onCancel:a,onConfirm:s}){return n.jsx(Ro,{isOpen:!!e,onClose:a,closeDisabled:t,closeOnOverlayClick:!1,size:"sm",theme:r,title:n.jsxs("span",{className:bh.title,children:[n.jsx(pf,{size:17,"aria-hidden":"true"}),"Unlink ",e?.entityType||"item"]}),footer:n.jsxs("div",{className:bh.actions,children:[n.jsx("button",{type:"button",className:"tf-button-secondary",disabled:t,onClick:a,"data-modal-initial-focus":!0,children:"Cancel"}),n.jsx("button",{type:"button",className:"tf-button-destructive",disabled:t,onClick:s,children:t?"Unlinking…":"Unlink"})]}),children:e?n.jsxs("div",{className:bh.content,children:[n.jsxs("p",{children:["Unlink ",n.jsx("strong",{children:e.referenceLabel})," ",e.title," from ",e.parentLabel,"?"]}),n.jsx("p",{className:bh.help,children:"The item will remain available and can be linked again later."})]}):null})}const nQ="_triggerAction_1b041_1",aQ="_triggerSelection_1b041_2",sQ="_option_1b041_15",oQ="_optionTopRow_1b041_22",iQ="_optionTitle_1b041_33",cQ="_optionMeta_1b041_42",lu={triggerAction:nQ,triggerSelection:aQ,option:sQ,optionTopRow:oQ,optionTitle:iQ,optionMeta:cQ};function sg({options:e,selectedId:t="",entityLabel:r,onSelect:a,disabled:s=!1,className:i=""}){const l=Q.useMemo(()=>new Map(e.map(p=>[p.id,p])),[e]),c=Q.useMemo(()=>e.map(p=>({value:p.id,label:[p.referenceLabel,p.title,p.meta].filter(Boolean).join(" ")})),[e]),d=l.get(t),f=`Link ${r}`;return n.jsx(qo,{value:t,options:c,onChange:p=>{const g=l.get(String(p));g&&a(g)},disabled:s||e.length===0,className:`${qv.control} ${i}`.trim(),portalPanel:!0,panelAlign:"start",panelMinWidth:320,searchable:!0,searchPlaceholder:`Search ${r}s by title or reference`,noResultsText:`No matching ${r}s.`,ariaLabel:f,triggerContent:d?n.jsxs("span",{className:lu.triggerSelection,children:[n.jsx(nd,{label:d.referenceLabel,entityType:r,entityName:d.title}),n.jsx("span",{children:d.title})]}):n.jsxs("span",{className:lu.triggerAction,children:[n.jsx(Au,{size:14,"aria-hidden":"true"}),n.jsx("span",{children:f})]}),renderOptionContent:p=>{const g=l.get(String(p.value));return g?n.jsxs("span",{className:lu.option,children:[n.jsxs("span",{className:lu.optionTopRow,children:[n.jsx(nd,{label:g.referenceLabel,entityType:r,entityName:g.title}),n.jsx("span",{className:lu.optionTitle,children:g.title})]}),g.meta?n.jsx("span",{className:lu.optionMeta,children:g.meta}):null]}):p.label},placeholder:f})}function nI(e,t){const r=String(t||"").trim(),a=new Map;for(const s of e){const i=String(s?.value||"").trim();if(!i||i==="unassigned"||typeof s.archivedAt=="string"&&s.archivedAt.trim().length>0)continue;const l=String(s.label||i).trim()||i,c=String(s.kind||"").trim().toLowerCase(),d=String(s.username||"").trim().toLowerCase(),f=c==="agent"?`agent:${d||l.toLowerCase()}`:`value:${i}`;(!a.has(f)||i===r)&&a.set(f,{...s,value:i,label:l})}return Array.from(a.values()).sort((s,i)=>s.label.localeCompare(i.label,void 0,{sensitivity:"base"}))}function Fi(e){const t=e.kind==="agent"?"agent":e.kind==="member"?"member":"unassigned";return{value:e.value,label:e.label,icon:e.icon||(t==="agent"?"Bot":t==="member"?"User":Bf),color:e.color||(t==="agent"?"var(--brand-primary)":t==="member"?"var(--status-success)":gg),kind:t,avatarUrl:e.avatarUrl,avatarRevision:e.avatarRevision,avatarUpdatedAt:e.avatarUpdatedAt,username:e.username,surfaceType:e.surfaceType,providerMetadata:e.providerMetadata,archivedAt:e.archivedAt}}function Yv({value:e,options:t,leadingOptions:r=[],includeUnassigned:a=!0,onChange:s,disabled:i,ariaLabel:l,className:c}){const d=Q.useMemo(()=>{const p=r.map(y=>({...y,value:String(y.value||"").trim(),label:String(y.label||y.value||"").trim()})).filter(y=>y.value&&y.label),g=new Set(p.map(y=>y.value)),h=nI(t,e).filter(y=>!g.has(y.value));return[...p,...a?[{value:"",label:"Unassigned",icon:Bf,color:gg,kind:"unassigned"}]:[],...h]},[a,r,t,e]),f=Q.useMemo(()=>new Map(d.map(p=>[p.value,Fi(p)])),[d]);return n.jsx(qo,{value:e,options:d.map(p=>({value:p.value,label:p.label,icon:p.icon||void 0,color:p.color||void 0})),onChange:p=>s(String(p)),disabled:i,ariaLabel:l,className:c,portalPanel:!0,panelAlign:"start",panelMinWidth:240,searchable:!0,searchPlaceholder:"Search owners...",noResultsText:"No owners found.",renderOptionContent:p=>{const g=f.get(String(p.value));return g?n.jsx(ju,{option:g}):p.label}})}const TS=[{value:"default",label:"Default order"},{value:"title",label:"Title"},{value:"owner",label:"Owner"},{value:"progress",label:"Progress"}];function jh(e,t,r){if(t==="all")return!0;const a=String(e.ownerId||"").trim();return t==="unassigned"?!a:t==="mine"?!!r&&a===r:a===t}function Mh(e,t,r){if(!r)return!0;const a=t==="initiative"?fs(e):Io(e);return e.title.toLocaleLowerCase().includes(r)||a.toLocaleLowerCase().includes(r)}function sk({item:e,entityType:t,showArchivedPlanning:r,searchQuery:a,ownerFilter:s,currentOwnerId:i}){return(r||!e.isArchived)&&jh(e,s,i.trim())&&Mh(e,t,a.trim().toLocaleLowerCase())}function Sh(e,t){return t==="default"?e:e.map((r,a)=>({item:r,index:a})).sort((r,a)=>{let s=0;if(t==="title")s=r.item.title.localeCompare(a.item.title,void 0,{sensitivity:"base"});else if(t==="owner"){const i=String(r.item.ownerLabel||"").trim(),l=String(a.item.ownerLabel||"").trim();!i&&l?s=1:i&&!l?s=-1:s=i.localeCompare(l,void 0,{sensitivity:"base"})}else s=a.item.progressPercent-r.item.progressPercent;return s||r.index-a.index}).map(({item:r})=>r)}function lQ({initiatives:e,standaloneWorkstreams:t,showArchivedPlanning:r,searchQuery:a,ownerFilter:s,currentOwnerId:i,sort:l}){const c=a.trim().toLocaleLowerCase(),d=!!c||s!=="all",f=i.trim(),g=e.filter(C=>r||!C.isArchived).flatMap(C=>{const S=(C.allWorkstreams||C.workstreams).filter($=>r||!$.isArchived);if(!d)return[{initiative:C,workstreams:Sh(S,l)}];const w=jh(C,s,f),_=Mh(C,"initiative",c),M=w&&_,R=S.filter($=>jh($,s,f)),P=R.filter($=>Mh($,"workstream",c)),b=M&&c?R:P;return!M&&b.length===0?[]:[{initiative:C,workstreams:Sh(b,l)}]}),h=new Map(g.map(C=>[C.initiative.id,C])),y=Sh(g.map(({initiative:C})=>C),l).map(C=>h.get(C.id)),k=t.filter(C=>(r||!C.isArchived)&&jh(C,s,f)&&Mh(C,"workstream",c)),v=Sh(k,l);return{initiatives:y,standaloneWorkstreams:v,hasCriteria:d,resultCount:y.length+y.reduce((C,S)=>C+S.workstreams.length,0)+v.length}}const vf=392,zi=392,ok=56,aI=1280,dQ=vf+zi;function uQ(e,t=0){const r=Math.max(0,e-t);return r>=aI?"wide":r>=dQ?"medium":"narrow"}function pQ(e){const t=Q.useCallback(()=>typeof window>"u"?aI+e:window.innerWidth,[e]),[r,a]=Q.useState(t);return Q.useEffect(()=>{const s=()=>a(t());return s(),window.addEventListener("resize",s),()=>window.removeEventListener("resize",s)},[t]),{viewportWidth:r,availableWidth:Math.max(0,r-e),layoutMode:uQ(r,e)}}function sI(e,t,r,a,s){return(e?ok:vf)+(t?r?ok:zi:0)+(a?s?ok:zi:0)}function ik({visible:e,disabled:t,disabledLabel:r,itemLabel:a,onToggle:s}){const i=e?`Hide archived ${a}`:`Show archived ${a}`,l=t?r||`No archived ${a}`:i;return n.jsx("button",{type:"button",className:`tf-control-icon ${ze.archiveVisibilityToggle} ${e?ze.toggleActive:""}`.trim(),title:l,"aria-label":l,"aria-pressed":e,disabled:t,onClick:s,children:e?n.jsx(KS,{size:15,"aria-hidden":"true"}):n.jsx(RT,{size:15,"aria-hidden":"true"})})}function xS(e){return e.type==="initiative"?(e.item.allWorkstreams||e.item.workstreams).filter(t=>!!t.isArchived).length:(e.item.tasks||[]).filter(t=>!!t.isArchived).length}function Xp({rowId:e,rowType:t,referenceLabel:r,item:a,ownerOption:s,ownerOptions:i,workstreamCount:l,active:c,isArchived:d=!1,detailOpen:f=!1,canExpand:p=!1,expanded:g=!1,controlsId:h,onToggleExpand:y,onToggleScope:k,onOpenDetails:v,onChangeOwner:C,initiativeLinkOptions:S=[],onLinkInitiative:w,favorite:_,favoriteReady:M,onToggleFavorite:R,onArchiveReady:P,hierarchyInteractions:b=!0}){const{title:$}=a,[I,E]=Q.useState(!1),[K,U]=Q.useState(!1),[L,D]=Q.useState(!1),[ie,H]=Q.useState(!1),{active:be}=eA(),Z=String(be?.data?.current?.type||""),me=b&&t==="workstream"&&Z==="task-card",Ve=b&&t==="initiative"&&Z==="planning-workstream",Re=t==="workstream"?"planning-workstream-target":"planning-initiative-target",{setNodeRef:je,isOver:ye}=cv({id:`${Re}:${e}`,data:t==="workstream"?{type:Re,workstreamId:e}:{type:Re,initiativeId:e},disabled:!b}),ue=b&&t==="workstream",{attributes:ve,listeners:Pe,setNodeRef:Le,transform:se,isDragging:V}=YT({id:`planning-workstream:${e}`,data:{type:"planning-workstream",workstreamId:e},disabled:!ue}),W=ue&&se?{transform:dg.Translate.toString(se)}:void 0,z=me||Ve,fe=t==="initiative"?"workstreams":"tasks",ke=p&&!!y,Y=p?`${g?"Collapse":"Expand"} ${fe} for ${$}`:`No ${fe} for ${$}`,we=!!(a.archiveReady&&!d&&P),q=Q.useRef({}),[le,$e]=Q.useState("favorite"),re=Q.useMemo(()=>[...M?["favorite"]:[],...we?["archive"]:[],"scope",...ke?["disclosure"]:[]],[we,ke,M]),de=re.includes(le)?le:re[0];Q.useEffect(()=>{de&&de!==le&&$e(de)},[le,de]);const He=Q.useCallback(Te=>{$e(Te)},[]),ce=Q.useCallback(Te=>{if(!["ArrowLeft","ArrowRight","Home","End"].includes(Te.key))return;const ot=Te.target.closest("[data-planning-row-action]")?.dataset.planningRowAction;if(!ot||!re.includes(ot))return;Te.preventDefault();const We=re.indexOf(ot),Xe=Te.key==="Home"?0:Te.key==="End"?re.length-1:Te.key==="ArrowRight"?(We+1)%re.length:(We-1+re.length)%re.length,ae=re[Xe];$e(ae),q.current[ae]?.focus()},[re]),pe=async()=>{if(!(!P||K)){U(!0);try{await P()&&E(!1)}finally{U(!1)}}},xe=async Te=>{if(!(!w||ie)){H(!0);try{await w(Te)!==!1&&D(!1)}finally{H(!1)}}},N=t==="workstream"&&!!w,X=d||ie||S.length===0,Ae=d?"Unarchive this workstream before linking an initiative":S.length===0?"No initiatives available":"Link initiative";return n.jsx("div",{ref:je,style:W,className:`${ze.treeRow} ${d?ze.treeRowArchived:""} ${f?ze.treeRowDetailOpen:""} ${z?ze.treeRowDropReady:""} ${ye?ze.treeRowDropActive:""} ${V?ze.treeRowDragging:""} ${z?ze.treeRowDropMode:""}`,"data-board-scoped":c||void 0,children:n.jsxs("div",{className:ze.rowContent,children:[n.jsxs("div",{className:ze.rowTopRow,children:[n.jsxs("div",{className:ze.rowReferenceActions,children:[N?n.jsx(vu,{disabled:X,onClick:Te=>{Te.stopPropagation(),D(he=>!he)},title:Ae,ariaLabel:"Link initiative",ariaExpanded:L,children:n.jsx(Au,{size:14,"aria-hidden":"true"})}):null,n.jsx(nd,{label:r||"Reference pending",entityType:t,entityName:$,pending:!r})]}),n.jsxs("div",{className:ze.rowActions,role:"toolbar","aria-label":`${t==="initiative"?"Initiative":"Workstream"} actions for ${$}`,"aria-orientation":"horizontal",onKeyDown:ce,children:[n.jsx("button",{type:"button",ref:Te=>{q.current.favorite=Te},className:`tf-control-icon tf-control-icon-compact ${ze.favoriteButton} ${_?"tf-control-icon-active":""}`.trim(),onClick:R,onFocus:()=>He("favorite"),disabled:!M,tabIndex:de==="favorite"?0:-1,"data-planning-row-action":"favorite",title:M?_?`Remove ${t} from Favorites`:`Add ${t} to Favorites`:"Loading Favorites","aria-label":M?_?`Remove ${t} ${$} from Favorites`:`Add ${t} ${$} to Favorites`:`Loading Favorites for ${t} ${$}`,"aria-pressed":_,children:n.jsx(PT,{size:14,fill:_?"currentColor":"none","aria-hidden":"true"})}),we?n.jsx("button",{type:"button",ref:Te=>{q.current.archive=Te},className:"tf-control-icon tf-control-icon-compact",onClick:()=>E(!0),onFocus:()=>He("archive"),tabIndex:de==="archive"?0:-1,"data-planning-row-action":"archive",title:`Archive completed ${t}`,"aria-label":`Archive completed ${t} ${$}`,"aria-expanded":I,children:n.jsx(Xc,{size:14,"aria-hidden":"true"})}):null,n.jsx("button",{type:"button",ref:Te=>{q.current.scope=Te},className:`tf-control-icon tf-control-icon-compact ${ze.scopeButton} ${c?"tf-control-icon-active":""}`.trim(),onClick:k,onFocus:()=>He("scope"),tabIndex:de==="scope"?0:-1,"data-planning-row-action":"scope",title:c?"Clear board scope":"Scope board to this item","aria-label":c?`Clear board scope for ${$}`:`Scope board to ${$}`,"aria-pressed":c,children:n.jsx(ET,{size:14,"aria-hidden":"true"})}),n.jsx("button",{type:"button",ref:Te=>{q.current.disclosure=Te},className:`tf-control-icon tf-control-icon-compact ${ze.treeChevron}`.trim(),onClick:ke?y:void 0,onFocus:()=>He("disclosure"),tabIndex:de==="disclosure"?0:-1,"data-planning-row-action":"disclosure",title:Y,"aria-label":Y,"aria-expanded":ke?g:!1,"aria-controls":ke&&g?h:void 0,disabled:!ke,children:g&&ke?n.jsx(dd,{size:14,"aria-hidden":"true"}):n.jsx(sd,{size:14,"aria-hidden":"true"})})]})]}),N&&L?n.jsxs("div",{className:`${ze.relationshipPickerRow} ${ze.rowRelationshipPicker}`.trim(),role:"group","aria-label":`Link ${$} to initiative`,children:[n.jsx(sg,{options:S,entityLabel:"initiative",onSelect:Te=>{xe(Te)},disabled:ie}),n.jsx("button",{type:"button",className:"tf-control-icon tf-control-icon-compact",disabled:ie,onClick:()=>D(!1),title:"Cancel initiative link","aria-label":"Cancel initiative link",children:n.jsx(fo,{size:14,"aria-hidden":"true"})})]}):null,n.jsxs("div",{className:ze.rowBody,children:[ue?n.jsx("div",{className:ze.rowLeadingActions,"data-planning-leading-actions":"true",children:n.jsx("button",{type:"button",ref:Le,className:ze.dragHandle,title:"Drag workstream","aria-label":`Drag workstream ${$}`,"data-planning-drag-handle":"true",...ve,...Pe,children:n.jsx(ev,{size:15,"aria-hidden":"true"})})}):null,n.jsx("div",{role:"button",tabIndex:0,className:`${ze.rowButton} ${ue?ze.rowButtonWithGrip:""}`.trim(),onClick:v,onKeyDown:Te=>{Te.key!=="Enter"&&Te.key!==" "||(Te.preventDefault(),v())},"aria-label":`View ${t} details for ${$}`,"aria-pressed":f,children:n.jsx(tI,{item:a,entityType:t,workstreamCount:l,ownerOption:s?Fi(s):void 0,ownerOptions:i.map(Fi),onChangeOwner:C})})]}),I?n.jsx(Yk,{entityType:t,title:$,activeTaskCount:a.archiveActiveTaskCount,activeWorkstreamCount:a.archiveActiveWorkstreamCount,busy:K,onCancel:()=>E(!1),onConfirm:()=>{pe()}}):null]})})}function fQ({task:e,assigneeOption:t,assigneeOptions:r,showTaskCardStatusLabel:a,onOpenTaskById:s,onChangeTaskAssignee:i,onSetTaskStatus:l,onArchivePlanningTask:c}){const[d,f]=Q.useState(!1),p=_o(e.status).value,g=!e.isArchived&&(p==="done"||p==="cancelled")&&!!c;return n.jsx("div",{className:`${ze.listItemButton} ${ze.detailCardButton}`.trim(),children:n.jsx(rI,{task:e,assigneeOption:t?Fi(t):void 0,assigneeOptions:r.map(Fi),showStatusLabel:a,onOpen:s?()=>s(e.id):void 0,onAssigneeChange:i?h=>i(e.id,h):void 0,onStatusChange:l?h=>l(e.id,h):void 0,actions:g?n.jsx("button",{type:"button",className:"tf-control-icon tf-control-icon-compact",disabled:d,onClick:async h=>{h.stopPropagation(),f(!0);try{await c?.(e.id)}finally{f(!1)}},title:"Archive task","aria-label":`Archive task ${hs(e)||e.title}`,children:n.jsx(Xc,{size:14,"aria-hidden":"true"})}):void 0,compact:!0})})}function ef({label:e,onExpand:t,muted:r=!1}){return n.jsx("div",{className:`${ze.paneShell} ${ze.collapsedPaneShell} ${r?ze.collapsedPaneMuted:""}`.trim(),"data-relationship-state":r?"missing":void 0,children:n.jsxs("div",{className:ze.collapsedPaneHeader,children:[n.jsx("button",{type:"button",className:"tf-control-icon",onClick:t,title:`Expand ${e}`,"aria-label":`Expand ${e} pane`,children:n.jsx(sd,{size:16,"aria-hidden":"true"})}),n.jsx("span",{className:ze.collapsedPaneLabel,children:e})]})})}function RS({label:e,title:t,description:r,onCollapse:a,action:s,paneRef:i}){const l=!r&&!s;return n.jsxs("div",{ref:i,"data-planning-pane":`${e.toLowerCase()}-relationship`,className:`${ze.paneShell} ${x.appScrollbar} tf-scrollbar ${ze.detailPane}`.trim(),style:{flex:`0 0 ${zi}px`,width:`${zi}px`,minWidth:`${zi}px`,maxWidth:`${zi}px`},children:[n.jsxs("div",{className:ze.paneHeader,children:[n.jsx("h2",{className:ze.paneHeaderLabel,tabIndex:-1,"data-planning-pane-heading":!0,children:e}),n.jsx("button",{type:"button",className:"tf-control-icon",onClick:a,"aria-label":`Collapse ${e} pane`,title:`Collapse ${e} pane`,children:n.jsx(lo,{size:16,"aria-hidden":"true"})})]}),n.jsx("div",{className:`${ze.paneContent} ${l?ze.relationshipPaneContentEmpty:""}`.trim(),children:n.jsxs("div",{className:`${ze.relationshipState} ${l?ze.relationshipStateEmpty:""}`.trim(),"data-relationship-display":l?"empty":"detail",children:[n.jsx("span",{className:ze.relationshipStateTitle,children:t}),r?n.jsx("p",{className:ze.relationshipStateText,children:r}):null,s?n.jsx("button",{type:"button",className:"tf-button-secondary tf-button-compact",onClick:s.onClick,children:s.label}):null]})})]})}function mQ({initiatives:e,standaloneWorkstreams:t,planningLoadState:r,taskScope:a,showArchivedPlanning:s,currentOwnerId:i,assigneeOptions:l,showTaskCardStatusLabel:c=!1,taskArrangeMode:d="execution",activeInitiativeId:f,activeWorkstreamId:p,navigatorSort:g,navigatorSortReady:h,onNavigatorSortChange:y,planningFavorites:k,onTogglePlanningFavorite:v,favoritesSectionCollapsed:C,initiativesSectionCollapsed:S,workstreamsSectionCollapsed:w,onToggleFavoritesSection:_,onToggleInitiativesSection:M,onToggleWorkstreamsSection:R,expandedInitiativeIds:P,detail:b,secondaryPane:$,onCreateInitiative:I,onCreateWorkstream:E,onToggleInitiative:K,onSelectInitiative:U,onSelectWorkstream:L,onOpenInitiativeDetails:D,onOpenWorkstreamDetails:ie,onOpenNestedWorkstreamDetails:H,onOpenTaskById:be,onSetTaskStatus:Z,onChangePlanningOwner:me,onChangeTaskAssignee:Ve,onArchivePlanningTask:Re,onArchiveResolvedWorkstream:je,onArchiveResolvedInitiative:ye,linkOptions:ue,onAssignInitiativeToWorkstream:ve,onRetryPlanning:Pe}){const[Le,se]=Q.useState(""),[V,W]=Q.useState("all"),[z,fe]=Q.useState(!1),[ke,Y]=Q.useState(()=>new Set),[we,q]=Q.useState(()=>new Set),le=Q.useMemo(()=>new Map(l.filter(G=>!String(G.archivedAt||"").trim()).map(G=>[String(G.value||"").trim(),G])),[l]),$e=Q.useMemo(()=>{const G=String(i||"").trim(),Ie=G?nI(l,G).find(Fe=>Fe.value===G):void 0;return[{value:"all",label:"All owners",icon:"Users",color:"var(--text-secondary)",kind:"unassigned"},...G?[{...Ie,value:"mine",label:"Owned by me",icon:Ie?.icon||"User",color:Ie?.color||"var(--text-secondary)",kind:Ie?.kind||"member"}]:[],{value:"unassigned",label:"Unassigned",icon:Bf,color:gg,kind:"unassigned"}]},[l,i]),re=Q.useMemo(()=>lQ({initiatives:e,standaloneWorkstreams:t,showArchivedPlanning:s,searchQuery:Le,ownerFilter:V,currentOwnerId:String(i||""),sort:g}),[i,e,g,V,Le,s,t]),de=Q.useMemo(()=>new Set(k.map(Wi)),[k]),He=Q.useMemo(()=>{const G=new Map(e.filter(Fe=>sk({item:Fe,entityType:"initiative",showArchivedPlanning:s,searchQuery:Le,ownerFilter:V,currentOwnerId:String(i||"")})).map(Fe=>[Fe.id,Fe])),Ie=new Map;return e.forEach(Fe=>{(Fe.allWorkstreams||Fe.workstreams).forEach(it=>{sk({item:it,entityType:"workstream",showArchivedPlanning:s,searchQuery:Le,ownerFilter:V,currentOwnerId:String(i||"")})&&Ie.set(it.id,{item:it,parentInitiativeId:Fe.id})})}),t.forEach(Fe=>{sk({item:Fe,entityType:"workstream",showArchivedPlanning:s,searchQuery:Le,ownerFilter:V,currentOwnerId:String(i||"")})&&Ie.set(Fe.id,{item:Fe,parentInitiativeId:null})}),k.reduce((Fe,it)=>{if(it.type==="initiative"){const qe=G.get(it.id);return qe&&Fe.push({favorite:it,item:qe,parentInitiativeId:null}),Fe}const Me=Ie.get(it.id);return Me&&Fe.push({favorite:it,...Me}),Fe},[])},[i,e,V,k,Le,s,t]);if(a==="deleted")return n.jsxs("div",{className:ze.scopeSummary,role:"status",children:[n.jsx("strong",{children:"Planning is not shown in Trash"}),n.jsx("span",{children:"Switch the task scope away from Trash to manage initiatives and workstreams."})]});if(r.status==="loading")return n.jsx(hQ,{});if(r.status==="error")return n.jsx(Ah,{title:"Planning unavailable",message:r.error||"Planning could not be loaded.",retrying:r.isRefreshing,onRetry:Pe});const ce=e.filter(G=>!!G.isArchived).length,pe=t.filter(G=>!!G.isArchived).length,xe=e.length>0||t.length>0,N=re.hasCriteria||g!=="default",X=()=>{se(""),W("all"),h&&y("default")},Ae=G=>{Y(Ie=>{const Fe=new Set(Ie);return Fe.has(G)?Fe.delete(G):Fe.add(G),Fe})},Te=G=>{q(Ie=>{const Fe=new Set(Ie);return Fe.has(G)?Fe.delete(G):Fe.add(G),Fe})},he=(G,Ie=ke.has(G.id),Fe=`planning-tasks-${G.id}`,it=`Tasks in ${G.title}`)=>{if(!Ie)return null;const Me=G.tasks||[],qe=qk(s?Me:Me.filter(ge=>!ge.isArchived),d);return n.jsx("ul",{id:Fe,className:`${ze.treeChildren} ${ze.treeTaskChildren}`.trim(),"aria-label":it,children:qe.length>0?qe.map(ge=>n.jsx("li",{children:n.jsx(fQ,{task:ge,assigneeOption:ge.assignee?le.get(ge.assignee):void 0,assigneeOptions:l,showTaskCardStatusLabel:c,onOpenTaskById:be,onSetTaskStatus:Z,onChangeTaskAssignee:Ve,onArchivePlanningTask:Re})},ge.id)):n.jsx("li",{className:ze.passiveGuidance,children:"Archived tasks are hidden."})})},ot=re.hasCriteria?"No matching initiatives":ce>0?"No active initiatives":"No initiatives yet",We=re.hasCriteria?"No initiatives match the current planning search and owner filter.":ce>0?`${ce} archived ${ce===1?"initiative is":"initiatives are"} hidden. Use the archive visibility control above to view ${ce===1?"it":"them"}.`:n.jsxs(n.Fragment,{children:["Initiatives give larger efforts a clear home without crowding the task board. Use the ",n.jsx("code",{children:"+"})," action above to create the first one."]}),Xe=re.hasCriteria?"No matching standalone workstreams":pe>0?"No active standalone workstreams":"No standalone workstreams yet",ae=re.hasCriteria?"No standalone workstreams match the current planning search and owner filter.":pe>0?`${pe} archived standalone ${pe===1?"workstream is":"workstreams are"} hidden. Use the archive visibility control above to view ${pe===1?"it":"them"}.`:n.jsxs(n.Fragment,{children:["Smaller projects can still use workstreams without needing initiative-level structure. Use the ",n.jsx("code",{children:"+"})," action above to add one."]});return n.jsxs(n.Fragment,{children:[r.status==="partial"&&r.collections.initiatives==="ready"&&r.collections.workstreams==="ready"?n.jsx(Ah,{compact:!0,title:"Planning may be incomplete",message:r.error||"The latest planning refresh did not finish. Existing data is still shown.",retrying:r.isRefreshing,onRetry:Pe}):null,xe?n.jsxs("div",{className:ze.navigatorControls,children:[n.jsxs("div",{className:ze.navigatorSearchRow,children:[n.jsxs("div",{className:ze.navigatorSearch,children:[n.jsx(lg,{size:14,"aria-hidden":"true"}),n.jsx("span",{className:ze.visuallyHidden,children:"Search planning"}),n.jsx("input",{type:"search",value:Le,onChange:G=>se(G.target.value),placeholder:"Search initiatives and workstreams","aria-label":"Search planning"}),Le?n.jsx("button",{type:"button",className:ze.navigatorClearSearch,onClick:()=>se(""),"aria-label":"Clear planning search",title:"Clear search",children:n.jsx(fo,{size:13,"aria-hidden":"true"})}):null]}),n.jsx("button",{type:"button",className:`tf-control-icon ${z||V!=="all"||g!=="default"?ze.toggleActive:""}`.trim(),"aria-label":"Filter and sort planning",title:"Filter and sort planning","aria-expanded":z,"aria-controls":"planning-navigator-options",onClick:()=>fe(G=>!G),children:n.jsx(qS,{size:15,"aria-hidden":"true"})})]}),z?n.jsxs("div",{id:"planning-navigator-options",className:ze.navigatorOptions,children:[n.jsxs("div",{className:ze.navigatorOptionField,children:[n.jsx("span",{className:ze.navigatorOptionLabel,children:"Owner"}),n.jsx(Yv,{value:V,options:l,leadingOptions:$e,includeUnassigned:!1,onChange:W,disabled:!1,ariaLabel:"Filter planning by owner",className:ze.navigatorDropdown})]}),n.jsxs("div",{className:ze.navigatorOptionField,children:[n.jsx("span",{className:ze.navigatorOptionLabel,children:"Sort"}),n.jsx(qo,{value:g,options:TS,onChange:G=>y(String(G)),disabled:!h,ariaLabel:"Sort planning",className:ze.navigatorDropdown,portalPanel:!0,panelAlign:"start",triggerContent:n.jsxs("span",{className:ze.navigatorDropdownTrigger,children:[n.jsx(tv,{size:14,"aria-hidden":"true"}),n.jsx("span",{children:TS.find(G=>G.value===g)?.label})]}),renderOptionContent:G=>G.label})]}),n.jsx("button",{type:"button",className:"tf-control-icon",onClick:X,disabled:!N,"aria-label":"Reset planning filters and sort",title:"Reset planning filters and sort",children:n.jsx(mi,{size:14,"aria-hidden":"true"})})]}):null,n.jsxs("span",{className:ze.visuallyHidden,role:"status","aria-live":"polite",children:[re.resultCount," planning ",re.resultCount===1?"result":"results"]})]}):null,re.hasCriteria&&re.resultCount===0?n.jsxs("div",{className:ze.navigatorEmpty,role:"status",children:[n.jsx("strong",{children:"No planning matches"}),n.jsx("span",{children:"Try another title or reference, or clear the owner filter."}),n.jsx("button",{type:"button",onClick:X,children:"Clear search and filters"})]}):n.jsxs(n.Fragment,{children:[He.length>0?n.jsxs("div",{className:ze.sectionGroup,children:[n.jsx(gf,{label:"Favorites",count:He.length,expanded:!C,expandedTitle:"Collapse favorites",collapsedTitle:"Expand favorites",onToggle:_,controlsId:"planning-favorites-section"}),n.jsx("ul",{id:"planning-favorites-section",className:ze.treeList,"aria-label":"Favorite planning items",hidden:C,children:He.map(({favorite:G,item:Ie,parentInitiativeId:Fe})=>{const it=G.type==="initiative"?b?.type==="initiative"&&b.item.id===Ie.id:b?.type==="workstream"&&b.item.id===Ie.id||$?.kind==="detail"&&$.detail.item.id===Ie.id,Me=G.type==="initiative"?Ie:null,qe=G.type==="workstream"?Ie:null,ge=Me?Me.allWorkstreams||Me.workstreams:[],_e=ge.filter(Ne=>s||!Ne.isArchived),Be=`favorite:${G.type}:${Ie.id}`,Ge=we.has(Be),F=`planning-${Be.replaceAll(":","-")}-children`;return n.jsxs("li",{children:[n.jsx(Xp,{rowId:`favorite:${G.type}:${Ie.id}`,rowType:G.type,referenceLabel:G.type==="initiative"?fs(Ie):Io(Ie),item:Ie,ownerOption:Ie.ownerId?le.get(Ie.ownerId):void 0,ownerOptions:l,onChangeOwner:Ne=>me(G.type,Ie.id,Ne==="unassigned"?"":Ne),workstreamCount:Me?_e.length:void 0,active:G.type==="initiative"?f===Ie.id&&!p:p===Ie.id,isArchived:!!Ie.isArchived,detailOpen:it,canExpand:G.type==="initiative"?ge.length>0:!!qe?.tasks?.length,expanded:Ge,controlsId:F,onToggleExpand:()=>Te(Be),onToggleScope:()=>{G.type==="initiative"?U(Ie.id):L(Ie.id,Fe)},favoriteReady:h,onOpenDetails:()=>{G.type==="initiative"?D(Ie.id):Fe?(D(Fe),H(Ie.id)):ie(Ie.id)},favorite:!0,onToggleFavorite:()=>v(G),onArchiveReady:G.type==="initiative"?ye?()=>ye(Ie.id):void 0:je?()=>je(Ie.id):void 0,hierarchyInteractions:!1,initiativeLinkOptions:G.type==="workstream"&&!Fe?ue.initiatives:void 0,onLinkInitiative:G.type==="workstream"&&!Fe?Ne=>ve(Ie.id,Ne.referenceLabel):void 0}),Me&&Ge?n.jsx("ul",{id:F,className:ze.treeChildren,"aria-label":`Workstreams in favorite ${Me.title}`,children:_e.length>0?_e.map(Ne=>{const Ce=`${Be}:workstream:${Ne.id}`,ut=we.has(Ce),mt=`planning-${Ce.replaceAll(":","-")}-children`;return n.jsxs("li",{children:[n.jsx(Xp,{rowId:Ce,rowType:"workstream",referenceLabel:Io(Ne),item:Ne,ownerOption:Ne.ownerId?le.get(Ne.ownerId):void 0,ownerOptions:l,onChangeOwner:Ue=>me("workstream",Ne.id,Ue==="unassigned"?"":Ue),active:p===Ne.id,isArchived:!!Ne.isArchived,detailOpen:b?.type==="workstream"&&b.item.id===Ne.id||$?.kind==="detail"&&$.detail.item.id===Ne.id,canExpand:!!Ne.tasks?.length,expanded:ut,controlsId:mt,onToggleExpand:()=>Te(Ce),onToggleScope:()=>L(Ne.id,Me.id),onOpenDetails:()=>{D(Me.id),H(Ne.id)},favorite:de.has(Wi({type:"workstream",id:Ne.id})),favoriteReady:h,onToggleFavorite:()=>v({type:"workstream",id:Ne.id}),onArchiveReady:je?()=>je(Ne.id):void 0,hierarchyInteractions:!1}),he(Ne,ut,mt,`Tasks in favorite ${Me.title} / ${Ne.title}`)]},Ne.id)}):n.jsx("li",{className:ze.passiveGuidance,children:"Archived workstreams are hidden."})}):null,qe?he(qe,Ge,F,`Tasks in favorite ${qe.title}`):null]},Wi(G))})})]}):null,n.jsxs("div",{className:ze.sectionGroup,children:[n.jsx(gf,{label:"Initiatives",count:re.initiatives.length,showZeroCount:!0,actions:r.collections.initiatives==="ready"?n.jsx("button",{type:"button",className:"tf-control-icon",title:"Create initiative","aria-label":"Create initiative",onClick:I,children:n.jsx(Ko,{size:15})}):null,expanded:!S,expandedTitle:"Collapse initiatives",collapsedTitle:"Expand initiatives",onToggle:M,controlsId:S?void 0:"planning-initiatives-section"}),S?null:n.jsx("ul",{id:"planning-initiatives-section",className:ze.treeList,"aria-label":"Initiatives",children:r.collections.initiatives==="error"?n.jsx("li",{children:n.jsx(Ah,{compact:!0,title:"Initiatives unavailable",message:"Initiatives could not be loaded.",retrying:r.isRefreshing,onRetry:Pe})}):re.initiatives.length===0?n.jsxs("li",{className:ze.emptyPanel,children:[n.jsx("div",{className:ze.emptyPanelTitle,children:ot}),n.jsx("div",{className:ze.emptyPanelText,children:We})]}):re.initiatives.map(({initiative:G,workstreams:Ie})=>{const Fe=G.allWorkstreams||G.workstreams,it=s?Fe:Fe.filter(ge=>!ge.isArchived),Me=Ie,qe=re.hasCriteria?Me.length>0:P.has(G.id);return n.jsxs("li",{children:[n.jsx(Xp,{rowId:G.id,rowType:"initiative",referenceLabel:fs(G),item:G,ownerOption:G.ownerId?le.get(G.ownerId):void 0,ownerOptions:l,onChangeOwner:ge=>me("initiative",G.id,ge==="unassigned"?"":ge),workstreamCount:it.length,active:f===G.id&&!p,isArchived:!!G.isArchived,detailOpen:b?.type==="initiative"&&b.item.id===G.id,canExpand:Fe.length>0,expanded:qe,controlsId:`planning-children-${G.id}`,onToggleExpand:()=>K(G.id),onToggleScope:()=>U(G.id),onOpenDetails:()=>D(G.id),favorite:de.has(Wi({type:"initiative",id:G.id})),favoriteReady:h,onToggleFavorite:()=>v({type:"initiative",id:G.id}),onArchiveReady:ye?()=>ye(G.id):void 0}),qe&&Me.length>0&&n.jsx("ul",{id:`planning-children-${G.id}`,className:ze.treeChildren,"aria-label":`Workstreams in ${G.title}`,children:Me.map(ge=>n.jsxs("li",{children:[n.jsx(Xp,{rowId:ge.id,rowType:"workstream",referenceLabel:Io(ge),item:ge,ownerOption:ge.ownerId?le.get(ge.ownerId):void 0,ownerOptions:l,onChangeOwner:_e=>me("workstream",ge.id,_e==="unassigned"?"":_e),active:p===ge.id,isArchived:!!ge.isArchived,detailOpen:b?.type==="workstream"&&b.item.id===ge.id||$?.kind==="detail"&&$.detail.item.id===ge.id,canExpand:(ge.tasks||[]).length>0,expanded:ke.has(ge.id),controlsId:`planning-tasks-${ge.id}`,onToggleExpand:()=>Ae(ge.id),onToggleScope:()=>L(ge.id,G.id),onOpenDetails:()=>{D(G.id),H(ge.id)},favorite:de.has(Wi({type:"workstream",id:ge.id})),favoriteReady:h,onToggleFavorite:()=>v({type:"workstream",id:ge.id}),onArchiveReady:je?()=>je(ge.id):void 0}),he(ge)]},ge.id))})]},G.id)})})]}),n.jsxs("div",{className:ze.sectionGroup,children:[n.jsx(gf,{label:"Workstreams",count:re.standaloneWorkstreams.length,showZeroCount:!0,actions:r.collections.workstreams==="ready"?n.jsx("button",{type:"button",className:"tf-control-icon",title:"Create workstream","aria-label":"Create workstream",onClick:E,children:n.jsx(Ko,{size:15})}):null,expanded:!w,expandedTitle:"Collapse workstreams",collapsedTitle:"Expand workstreams",onToggle:R,controlsId:w?void 0:"planning-workstreams-section"}),w?null:n.jsx("ul",{id:"planning-workstreams-section",className:ze.treeList,"aria-label":"Standalone workstreams",children:r.collections.workstreams==="error"?n.jsx("li",{children:n.jsx(Ah,{compact:!0,title:"Workstreams unavailable",message:"Workstreams could not be loaded.",retrying:r.isRefreshing,onRetry:Pe})}):re.standaloneWorkstreams.length===0?n.jsxs("li",{className:ze.emptyPanel,children:[n.jsx("div",{className:ze.emptyPanelTitle,children:Xe}),n.jsx("div",{className:ze.emptyPanelText,children:ae})]}):re.standaloneWorkstreams.map(G=>n.jsxs("li",{children:[n.jsx(Xp,{rowId:G.id,rowType:"workstream",referenceLabel:Io(G),item:G,ownerOption:G.ownerId?le.get(G.ownerId):void 0,ownerOptions:l,onChangeOwner:Ie=>me("workstream",G.id,Ie==="unassigned"?"":Ie),active:p===G.id,isArchived:!!G.isArchived,detailOpen:b?.type==="workstream"&&b.item.id===G.id||$?.kind==="detail"&&$.detail.item.id===G.id,canExpand:(G.tasks||[]).length>0,expanded:ke.has(G.id),controlsId:`planning-tasks-${G.id}`,onToggleExpand:()=>Ae(G.id),onToggleScope:()=>L(G.id,null),onOpenDetails:()=>ie(G.id),favorite:de.has(Wi({type:"workstream",id:G.id})),favoriteReady:h,onToggleFavorite:()=>v({type:"workstream",id:G.id}),onArchiveReady:je?()=>je(G.id):void 0,initiativeLinkOptions:ue.initiatives,onLinkInitiative:Ie=>ve(G.id,Ie.referenceLabel)}),he(G)]},G.id))})]})]})]})}function hQ(){return n.jsxs("div",{className:ze.loadingState,role:"status","aria-live":"polite",children:[n.jsx("span",{className:ze.visuallyHidden,children:"Loading planning"}),[0,1,2].map(e=>n.jsxs("div",{className:ze.loadingRow,"aria-hidden":"true",children:[n.jsx("span",{className:ze.loadingBadge}),n.jsx("span",{className:ze.loadingTitle}),n.jsx("span",{className:ze.loadingMeta})]},e))]})}function Ah({title:e,message:t,retrying:r,onRetry:a,compact:s=!1}){return n.jsxs("div",{className:`${ze.failureState} ${s?ze.failureStateCompact:""} tf-surface-inset`.trim(),role:"alert",children:[n.jsxs("div",{className:ze.failureCopy,children:[n.jsx("strong",{children:e}),n.jsx("span",{children:t})]}),n.jsx("button",{type:"button",className:"tf-button-ghost tf-button-compact",disabled:r,onClick:a,children:r?"Retrying…":"Retry"})]})}function PS({detail:e,showArchivedChildren:t,inlineEditor:r,selectedChildWorkstreamId:a,currentWorkspaceId:s,currentActorId:i,theme:l,onOpenNestedWorkstreamDetails:c,onArchivePlanningTask:d,onArchiveResolvedWorkstream:f,onArchiveResolvedEntity:p,onEdit:g,onChangeOwner:h,onChangePlanningOwner:y,onArchive:k,onUnarchive:v,onCreateTaskInWorkstream:C,onCreateWorkstreamInInitiative:S,onOpenTaskById:w,onChangeTaskAssignee:_,taskReferences:M,onAssignTaskToWorkstream:R,onAssignInitiativeToWorkstream:P,onAttachTaskToWorkstreamByReference:b,onAttachWorkstreamToInitiativeByReference:$,onAddPlanningContextFile:I,onRemovePlanningContextFile:E,onUpdatePlanningContextCaption:K,parentInitiative:U=null,assigneeOptions:L,linkOptions:D,showTaskCardStatusLabel:ie=!1,taskArrangeMode:H="execution",onTaskArrangeModeChange:be=()=>{},onReorderWorkstreamTasks:Z,onSetTaskStatus:me,hydrationState:Ve,onRetryHydration:Re}){const je=Q.useId(),[ye,ue]=Q.useState(!1),[ve,Pe]=Q.useState(!1),[Le,se]=Q.useState(null),[V,W]=Q.useState(null),[z,fe]=Q.useState(!1),[ke,Y]=Q.useState(null),[we,q]=Q.useState(!1),[le,$e]=Q.useState(!1),[re,de]=Q.useState(!1),[He,ce]=Q.useState(null),[pe,xe]=Q.useState(String(e.item.ownerId||"")),[N,X]=Q.useState(!1),{active:Ae}=eA(),Te=String(Ae?.data?.current?.type||""),he=e.type==="workstream"&&Te==="task-card",ot=e.type==="initiative"&&Te==="planning-workstream",We=e.type==="initiative"?"planning-initiative-target":"planning-workstream-target",{setNodeRef:Xe,isOver:ae}=cv({id:`${We}:detail:${e.item.id}`,data:e.type==="initiative"?{type:We,initiativeId:e.item.id}:{type:We,workstreamId:e.item.id}}),G=e.type==="initiative"?"Workstreams":"Tasks",Ie=Q.useMemo(()=>{if(e.type!=="initiative")return[];const st=new Set(e.item.workstreams.map(Lt=>Lt.id)),zt=(e.item.allWorkstreams||[]).filter(Lt=>!!Lt.isArchived&&!st.has(Lt.id));return[...e.item.workstreams,...zt]},[e.item,e.type]),Fe=Q.useMemo(()=>e.type!=="workstream"?[]:e.item.tasks||[],[e.item,e.type]),it=Q.useMemo(()=>new Map(L.filter(st=>!String(st.archivedAt||"").trim()).map(st=>[String(st.value||"").trim(),st])),[L]),Me=t?Ie:Ie.filter(st=>!st.isArchived),qe=qk(t?Fe:Fe.filter(st=>!st.isArchived),H),ge=e.type==="initiative"?Me.length:qe.length,_e=e.type==="initiative"?"Initiative":"Workstream",Be=e.type==="initiative"?fs(e.item):Io(e.item),Ge=U_({entityType:e.type,isArchived:e.item.isArchived,taskCount:e.item.taskCount,completedTaskCount:e.item.completedTaskCount,archiveReady:e.item.archiveReady,activeWorkstreamCount:e.item.archiveActiveWorkstreamCount}),F=Ge.mode==="archived"?`Unarchive ${_e.toLowerCase()}`:Ge.mode==="blocked"?`Archive unavailable — active ${Ge.remainingKind==="task"?"tasks":"workstreams"} remain`:Ge.mode==="checking"?"Archive availability is still loading":`Archive ${_e.toLowerCase()}`;Q.useEffect(()=>{ue(!1),Pe(!1),se(null),W(null),fe(!1),$e(!1)},[e.item.id,e.type]),Q.useEffect(()=>{xe(String(e.item.ownerId||""))},[e.item.id,e.item.ownerId,e.type]);const Ne=Q.useCallback(async st=>{if(!h||N||st===pe)return;const zt=pe;xe(st),X(!0);try{await h(st)}catch{xe(zt)}finally{X(!1)}},[N,h,pe]),Ce=Q.useCallback(async()=>{if(!(!p||re)){de(!0);try{await p(e.item.id)&&$e(!1)}finally{de(!1)}}},[re,e.item.id,p]),ut=e.type==="initiative"?!!$:!!b,mt=Q.useCallback(async st=>{if(ye)return;const zt=e.type==="initiative"?$:b;if(zt){ue(!0);try{await zt(e.item.id,st.referenceLabel)}finally{ue(!1)}}},[e.item.id,e.type,ye,b,$]),Ue=Q.useCallback(async st=>{if(!(!P||e.type!=="workstream"||z)){fe(!0);try{await P(e.item.id,st.referenceLabel)!==!1&&Pe(!1)}finally{fe(!1)}}},[e.item.id,e.type,z,P]),wt=e.type==="workstream"&&U?fs(U):"",kt=Q.useMemo(()=>new Set(e.type==="initiative"?Ie.map(st=>st.id):Fe.map(st=>st.id)),[Ie,e.type,Fe]),rt=Q.useMemo(()=>(e.type==="initiative"?D.workstreams:D.tasks).filter(st=>!kt.has(st.id)),[e.type,D.tasks,D.workstreams,kt]),Ht=Q.useCallback(async()=>{if(!(!Le||z)){fe(!0);try{if(Le.entityType==="workstream"){if(!P)return;const st=e.type==="initiative"?Be:wt;if(await P?.(Le.id,null)===!1)return;W({entityType:Le.entityType,id:Le.id,message:`${Le.referenceLabel} removed from its initiative.`,onUndo:async()=>{if(!st)return;await P?.(Le.id,st)!==!1&&W(null)}})}else{if(!R||await R(Le.id,null)===!1)return;W({entityType:Le.entityType,id:Le.id,message:`${Le.referenceLabel} removed from this workstream.`,onUndo:async()=>{await R(Le.id,e.item.id)!==!1&&W(null)}})}se(null)}finally{fe(!1)}}},[e.item.id,e.type,Be,z,P,R,wt,Le]),lr=Q.useCallback(async()=>{if(!(!V||z)){fe(!0);try{await V.onUndo()}finally{fe(!1)}}},[z,V]),rr=Q.useCallback((st,zt)=>V?.entityType===st&&V.id===zt?n.jsxs("div",{className:ze.relationshipRecovery,role:"status",children:[n.jsx("span",{children:V.message}),n.jsx("button",{type:"button",className:"tf-button-ghost tf-button-compact",disabled:z,onClick:()=>{lr()},children:z?"Restoring…":"Undo"})]}):null,[lr,z,V]),wr=V&&!kt.has(V.id)?n.jsxs("div",{className:ze.relationshipRecovery,role:"status",children:[n.jsx("span",{children:V.message}),n.jsx("button",{type:"button",className:"tf-button-ghost tf-button-compact",disabled:z,onClick:()=>{lr()},children:z?"Restoring…":"Undo"})]}):null;return n.jsxs(n.Fragment,{children:[n.jsxs("div",{className:ze.detailHero,children:[n.jsxs("div",{className:ze.detailTopRow,children:[n.jsxs("div",{className:ze.detailReferenceRow,children:[e.type==="workstream"?n.jsx(n.Fragment,{children:wt?n.jsxs(n.Fragment,{children:[n.jsx(nd,{label:wt,entityType:"initiative",entityName:U?.title}),n.jsx("span",{className:x.taskHierarchyDivider,children:"/"}),r?null:n.jsx(vu,{disabled:!P,onClick:()=>{se({entityType:"workstream",id:e.item.id,referenceLabel:Be,title:e.item.title,parentLabel:U?`${fs(U)} ${U.title}`.trim():wt})},title:"Unlink workstream from initiative",ariaLabel:"Unlink workstream from initiative",children:n.jsx(pf,{size:14,"aria-hidden":"true"})})]}):null}):null,e.type==="workstream"&&!wt&&!r?n.jsx(vu,{disabled:!P,onClick:()=>Pe(!0),title:"Link initiative",ariaLabel:"Link initiative",ariaExpanded:ve,children:n.jsx(Au,{size:14,"aria-hidden":"true"})}):null,n.jsx(nd,{label:Be||"Reference pending",entityType:e.type,entityName:e.item.title,pending:!Be})]}),n.jsx("div",{className:ze.detailTopActions,children:r?n.jsxs(n.Fragment,{children:[n.jsx("button",{type:"button",className:"tf-button-ghost tf-button-compact",onClick:r.onCancel,disabled:r.isSubmitting,children:"Cancel"}),n.jsx("button",{type:"submit",form:je,className:"tf-button-primary tf-button-compact",disabled:r.isSubmitting,children:r.isSubmitting?"Saving…":"Save"})]}):n.jsxs(n.Fragment,{children:[n.jsx("button",{type:"button",className:"tf-control-icon",disabled:Ge.mode==="blocked"||Ge.mode==="checking",onClick:()=>{Ge.mode==="archived"?v?.():Ge.mode==="empty"?k?.():Ge.mode==="ready"&&$e(!0)},title:F,"aria-label":F,"aria-expanded":Ge.mode==="ready"?le:void 0,children:Ge.mode==="archived"?n.jsx(mi,{size:14,"aria-hidden":"true"}):n.jsx(Xc,{size:14,"aria-hidden":"true"})}),n.jsx("button",{type:"button",className:"tf-control-icon",onClick:()=>{Pe(!1),g()},title:`Edit ${_e.toLowerCase()} details`,"aria-label":`Edit ${_e.toLowerCase()} details`,children:n.jsx(HS,{size:14,"aria-hidden":"true"})})]})})]}),le&&Ge.mode==="ready"?n.jsx(Yk,{entityType:e.type,title:e.item.title,activeTaskCount:e.item.archiveActiveTaskCount,activeWorkstreamCount:e.item.archiveActiveWorkstreamCount,busy:re,onCancel:()=>$e(!1),onConfirm:()=>{Ce()}}):null,e.type==="workstream"?rr("workstream",e.item.id):null,e.type==="workstream"&&!wt&&ve?n.jsxs("div",{className:ze.relationshipPickerRow,role:"group","aria-label":"Link workstream to initiative",children:[n.jsx(sg,{options:D.initiatives,entityLabel:"initiative",onSelect:Ue,disabled:!P||z}),n.jsx("button",{type:"button",className:"tf-control-icon tf-control-icon-compact",disabled:z,onClick:()=>Pe(!1),title:"Cancel initiative link","aria-label":"Cancel initiative link",children:n.jsx(fo,{size:14,"aria-hidden":"true"})})]}):null,r?n.jsx(Zk,{editor:r.editor,draftTitle:r.draftTitle,draftDescription:r.draftDescription,draftOwner:r.draftOwner,draftInitiativeId:r.draftInitiativeId,assigneeOptions:L,initiativeLinkOptions:D.initiatives,draftInitiativeSummary:r.draftInitiativeSummary,onChangeDraftTitle:r.onChangeDraftTitle,onChangeDraftDescription:r.onChangeDraftDescription,onChangeDraftOwner:r.onChangeDraftOwner,onChangeDraftInitiativeId:r.onChangeDraftInitiativeId,onCancel:r.onCancel,onSubmit:r.onSubmit,isSubmitting:r.isSubmitting,inline:!0,formId:je}):n.jsxs(n.Fragment,{children:[n.jsx("h3",{className:ze.detailTitle,children:e.item.title}),n.jsx(cJ,{description:e.item.description,label:_e,taskReferences:M,className:`${ze.detailDescription} ${x.appScrollbar} tf-scrollbar`.trim(),markdownClassName:ze.detailDescriptionMarkdown})]}),n.jsxs("div",{className:ze.detailOwnerField,children:[n.jsx("span",{className:ze.detailOwnerLabel,children:"Owner"}),n.jsx(Yv,{value:pe,disabled:!h||N,onChange:st=>{Ne(st)},ariaLabel:`${_e} owner`,options:L,className:`${qv.control} ${ze.ownerSelect}`})]}),e.item.taskCount>0?n.jsx(X_,{value:e.item.progressPercent,label:`${e.item.progressPercent}% resolved`,statusCounts:e.item.statusCounts}):n.jsx(Z_,{}),n.jsx(eI,{item:e.item,workstreamCount:e.type==="initiative"?e.item.workstreamCount??e.item.workstreams.length:void 0,className:ze.detailSummaryMeta}),e.item.taskCount>0?n.jsx("span",{className:ze.passiveGuidance,children:"Lifetime progress includes archived tasks."}):null]}),n.jsxs("div",{ref:Xe,className:`${ze.listCard} ${he||ot?ze.sectionDropReady:""} ${ae?ze.sectionDropActive:""} ${he||ot?ze.sectionDropMode:""}`.trim(),children:[n.jsxs("div",{className:ze.sectionHeaderRow,children:[n.jsxs("div",{className:ze.sectionTitle,children:[G," (",ge,")"]}),n.jsx("div",{className:ze.headerActionGroup,children:e.type==="initiative"?n.jsx("button",{type:"button",className:"tf-control-icon",title:"Create workstream in this initiative","aria-label":"Create workstream in this initiative",onClick:()=>S?.(e.item.id),children:n.jsx(Ko,{size:15})}):n.jsx("button",{type:"button",className:"tf-control-icon",title:"Create task in this workstream","aria-label":"Create task in this workstream",onClick:()=>C?.(e.item.id),children:n.jsx(Ko,{size:15})})})]}),n.jsx("div",{className:ze.linkPickerRow,children:n.jsx(sg,{options:rt,entityLabel:e.type==="initiative"?"workstream":"task",onSelect:mt,disabled:!ut||ye})}),e.type==="workstream"?n.jsx(zJ,{value:H,onChange:be}):null,e.type==="initiative"?Me.length>0?Me.map(st=>{const zt=Io(st),Lt=()=>c?.(st.id),Mt=a===st.id,Ee=ke===st.id,ct=async()=>{if(!(!f||we)){q(!0);try{await f(st.id)&&Y(null)}finally{q(!1)}}};return n.jsx("div",{className:`${ze.listItemButton} ${ze.detailCardButton}`.trim(),children:n.jsxs("div",{className:`${ze.listItem} ${ze.detailChildCard} ${Mt?ze.detailChildCardSelected:""} ${st.isArchived?ze.detailChildCardArchived:""}`.trim(),children:[n.jsxs("div",{className:ze.detailChildCardTopRow,children:[n.jsxs("div",{className:ze.detailChildReferenceRow,children:[n.jsx(vu,{disabled:!P,onClick:lt=>{lt.stopPropagation(),se({entityType:"workstream",id:st.id,referenceLabel:zt,title:st.title,parentLabel:`${Be} ${e.item.title}`.trim()})},title:`Unlink ${zt||st.title} from initiative`,ariaLabel:`Unlink ${zt||st.title} from initiative`,children:n.jsx(pf,{size:14,"aria-hidden":"true"})}),zt?n.jsx(nd,{label:zt,entityType:"workstream",entityName:st.title}):n.jsx("span",{"aria-hidden":"true"})]}),n.jsx("div",{className:ze.detailChildActions,onClick:lt=>lt.stopPropagation(),children:st.archiveReady&&!st.isArchived&&f?n.jsx("button",{type:"button",className:"tf-control-icon",onClick:()=>Y(st.id),title:"Archive completed workstream","aria-label":`Archive completed workstream ${st.title}`,"aria-expanded":Ee,children:n.jsx(Xc,{size:14,"aria-hidden":"true"})}):null})]}),rr("workstream",st.id),Ee?n.jsx(Yk,{entityType:"workstream",title:st.title,activeTaskCount:st.archiveActiveTaskCount,busy:we,onCancel:()=>Y(null),onConfirm:()=>{ct()}}):null,n.jsx("div",{role:"button",tabIndex:0,"aria-current":Mt?"true":void 0,className:ze.listItemText,onClick:Lt,onKeyDown:lt=>{lt.key!=="Enter"&<.key!==" "||(lt.preventDefault(),Lt())},children:n.jsx(tI,{item:st,entityType:"workstream",ownerOption:st.ownerId&&it.has(st.ownerId)?Fi(it.get(st.ownerId)):void 0,ownerOptions:L.map(Fi),onChangeOwner:y?lt=>y("workstream",st.id,lt==="unassigned"?"":lt):void 0})})]})},st.id)}):n.jsx("div",{className:ze.passiveGuidance,children:"No workstreams are linked to this initiative."}):qe.length>0?n.jsx(YJ,{tasks:qe,mode:H,onReorder:Z?st=>Z(e.item.id,BJ(qk(Fe,"execution"),st)):void 0,children:st=>{const zt=hs(st)||st.id,Lt=_o(st.status);return n.jsx("div",{className:`${ze.listItemButton} ${ze.detailCardButton}`.trim(),children:n.jsx(rI,{task:st,assigneeOption:st.assignee&&it.has(st.assignee)?Fi(it.get(st.assignee)):void 0,assigneeOptions:L.map(Fi),showStatusLabel:ie,onOpen:w?()=>w(st.id):void 0,onAssigneeChange:_?Mt=>_(st.id,Mt):void 0,onStatusChange:me?Mt=>me(st.id,Mt):void 0,feedback:rr("task",st.id),referenceAction:n.jsx(vu,{disabled:!R,onClick:Mt=>{Mt.stopPropagation(),se({entityType:"task",id:st.id,referenceLabel:zt,title:st.title,parentLabel:`${Be} ${e.item.title}`.trim()})},title:`Unlink ${zt||st.title} from workstream`,ariaLabel:`Unlink ${zt||st.title} from workstream`,children:n.jsx(pf,{size:14,"aria-hidden":"true"})}),actions:!st.isArchived&&(Lt.value==="done"||Lt.value==="cancelled")&&d?n.jsx("button",{type:"button",className:"tf-control-icon",disabled:He===st.id,onClick:async Mt=>{Mt.stopPropagation(),ce(st.id);try{await d(st.id)}finally{ce(null)}},title:"Archive task","aria-label":`Archive task ${zt||st.title}`,children:n.jsx(Xc,{size:14,"aria-hidden":"true"})}):void 0})},st.id)}}):n.jsx("div",{className:ze.passiveGuidance,children:"No tasks are linked to this workstream."}),wr]}),n.jsx("div",{className:ze.listCard,children:n.jsx(lJ,{entityType:e.type,entityId:e.item.id,referenceLabel:Be,workspaceId:s,attachments:e.item.attachments,readOnly:!!e.item.isArchived,onAddAttachment:st=>I?.(e.type,e.item.id,st),onRemoveAttachment:st=>E?.(e.type,e.item.id,st),onUpdateAttachmentCaption:(st,zt)=>K?.(e.type,e.item.id,st,zt)})}),n.jsx("div",{className:ze.listCard,children:n.jsx(dJ,{entityType:e.type,item:e.item,assigneeOptions:L.map(Fi),currentActorId:i,taskReferences:M,parentInitiative:U,listClassName:ze.activityTimelineList,emptyClassName:ze.activityTimelineEmpty,hydrationState:Ve,onRetryHydration:Re})}),n.jsx(rQ,{item:Le,busy:z,theme:l,onCancel:()=>se(null),onConfirm:()=>{Ht()}})]})}function Zk({editor:e,draftTitle:t,draftDescription:r,draftOwner:a,draftInitiativeId:s,assigneeOptions:i,initiativeLinkOptions:l,draftInitiativeSummary:c,onChangeDraftTitle:d,onChangeDraftDescription:f,onChangeDraftOwner:p,onChangeDraftInitiativeId:g,onCancel:h,onSubmit:y,isSubmitting:k,inline:v=!1,formId:C}){const S=e.entityType==="initiative"?"Initiative":"Workstream",w=Q.useId(),_=Q.useId(),M=Q.useId(),R=Q.useRef(null),[P,b]=Q.useState(null),$=k?e.mode==="create"?`Creating ${S}...`:`Saving ${S}...`:e.mode==="create"?`Create ${S}`:`Save ${S}`,I=Q.useCallback(K=>{if(K.preventDefault(),!t.trim()){b(`${S} title is required.`),R.current?.focus();return}b(null),y()},[t,S,y]),E=Q.useCallback(K=>{!v||K.key!=="Escape"||k||(K.preventDefault(),h())},[v,k,h]);return n.jsxs("form",{id:C,className:`${ze.editorCard} ${v?ze.inlineEditorCard:""}`.trim(),onSubmit:I,onKeyDown:E,noValidate:!0,children:[n.jsxs("div",{className:ze.editorField,children:[n.jsxs("label",{className:ze.editorLabel,htmlFor:w,children:[S," title"]}),n.jsx("input",{ref:R,id:w,"data-planning-editor-title":!0,className:x.input,disabled:k,required:!0,"aria-invalid":P?"true":void 0,"aria-describedby":P?_:void 0,value:t,onChange:K=>{P&&b(null),d(K.target.value)},placeholder:e.entityType==="initiative"?"Enter initiative title":"Enter workstream title"}),P?n.jsx("p",{id:_,className:"tf-text-error",children:P}):null]}),n.jsxs("div",{className:ze.editorField,children:[n.jsxs("label",{className:ze.editorLabel,htmlFor:M,children:[S," description"]}),n.jsx("textarea",{id:M,className:x.textarea,disabled:k,value:r,onChange:K=>f(K.target.value),placeholder:e.entityType==="initiative"?"Describe the broader outcome this initiative is meant to achieve.":"Describe the lane of work this workstream will coordinate.",rows:5})]}),e.entityType==="workstream"&&n.jsxs("div",{className:ze.editorField,children:[n.jsx("span",{className:ze.editorLabel,children:"Initiative"}),n.jsxs("div",{className:ze.editorRelationshipRow,children:[n.jsx(sg,{options:l,selectedId:c?.id||"",entityLabel:"initiative",disabled:k,onSelect:K=>g(K.referenceLabel)}),s.trim()?n.jsx("button",{type:"button",className:"tf-button-ghost tf-button-compact",disabled:k,onClick:()=>g(""),children:"Remove"}):null]})]}),v?null:n.jsxs("div",{className:ze.editorField,children:[n.jsxs("span",{className:ze.editorLabel,children:[S," owner"]}),n.jsx(Yv,{disabled:k,value:a,onChange:p,ariaLabel:`${S} owner`,options:i,className:ze.editorSelect})]}),v?null:n.jsxs("div",{className:ze.editorActions,children:[n.jsx("button",{type:"button",className:x.secondaryHeaderBtn,onClick:h,disabled:k,children:"Cancel"}),n.jsx("button",{type:"submit",className:x.primaryUpdateBtn,disabled:k,children:$})]})]})}function gQ({open:e,leftOffset:t=0,returnFocusRef:r,onWidthChange:a,initiatives:s,standaloneWorkstreams:i,planningLoadState:l,onRetryPlanning:c,taskScope:d,activeInitiativeId:f,activeWorkstreamId:p,navigatorSort:g,navigatorSortReady:h,onNavigatorSortChange:y,taskArrangeMode:k="execution",onTaskArrangeModeChange:v=()=>{},onReorderWorkstreamTasks:C,planningFavorites:S,onTogglePlanningFavorite:w,favoritesSectionCollapsed:_,initiativesSectionCollapsed:M,workstreamsSectionCollapsed:R,onToggleFavoritesSection:P,onToggleInitiativesSection:b,onToggleWorkstreamsSection:$,expandedInitiativeIds:I,detail:E,editor:K,secondaryEditor:U=null,secondaryPane:L,primaryHydrationState:D,secondaryHydrationState:ie,onRetryPrimaryHydration:H,onRetrySecondaryHydration:be,currentWorkspaceId:Z,currentOwnerId:me,theme:Ve,assigneeOptions:Re,linkOptions:je,showTaskCardStatusLabel:ye=!1,draftInitiativeSummary:ue,draftTitle:ve,draftDescription:Pe,draftOwner:Le,draftInitiativeId:se,onChangeDraftTitle:V,onChangeDraftDescription:W,onChangeDraftOwner:z,onChangeDraftInitiativeId:fe,onCollapseTreePane:ke,onExpandTreePane:Y,onCollapsePrimaryPane:we,onExpandPrimaryPane:q,onCollapseSecondaryPane:le,onExpandSecondaryPane:$e,onBackFromSecondary:re,treeCollapsed:de,primaryCollapsed:He,secondaryCollapsed:ce,onCancelEditor:pe,onCancelSecondaryEditor:xe,onSubmitEditor:N,isSubmittingEditor:X,onCreateInitiative:Ae,onCreateWorkstream:Te,onToggleInitiative:he,onSelectInitiative:ot,onSelectWorkstream:We,onOpenInitiativeDetails:Xe,onOpenWorkstreamDetails:ae,onOpenNestedWorkstreamDetails:G,onEditInitiative:Ie,onEditWorkstream:Fe,onChangePlanningOwner:it,onChangeTaskAssignee:Me,onArchiveInitiative:qe,onUnarchiveInitiative:ge,onArchiveWorkstream:_e,onUnarchiveWorkstream:Be,onArchivePlanningTask:Ge,onArchiveResolvedWorkstream:F,onArchiveResolvedInitiative:Ne,onCreateTaskInWorkstream:Ce,onCreateWorkstreamInInitiative:ut,onAssignInitiativeToWorkstream:mt,onOpenTaskById:Ue,onSetTaskStatus:wt,taskReferences:kt,onAssignTaskToWorkstream:rt,onAttachTaskToWorkstreamByReference:Ht,onAttachWorkstreamToInitiativeByReference:lr,onAddPlanningContextFile:rr,onRemovePlanningContextFile:wr,onUpdatePlanningContextCaption:st}){const zt=K?.mode==="edit"&&E&&K.entityType===E.type&&K.targetId===E.item.id?K:null,Lt=U?.mode==="edit"&&L?.kind==="detail"&&U.entityType===L.detail.type&&U.targetId===L.detail.item.id?U:null,Mt=K&&!zt?K:null,Ee=!!(E||Mt),ct=!!L,lt=Mt?.entityType||E?.type||null,Je=lt==="initiative",nt=lt==="workstream",[Ct,Rt]=Q.useState(!1),[Dt,It]=Q.useState(!1),[Qt,ir]=Q.useState(!1),[dr,sr]=Q.useState({initiative:!1,workstream:!1}),pr=Q.useMemo(()=>{const kr=[...s.flatMap(cr=>cr.allWorkstreams||cr.workstreams),...i];return s.filter(cr=>!!cr.isArchived).length+kr.filter(cr=>!!cr.isArchived).length+kr.reduce((cr,Wr)=>cr+(Wr.tasks||[]).filter(on=>!!on.isArchived).length,0)},[s,i]),{availableWidth:Jr,layoutMode:Tr}=pQ(t),br=Tr==="wide",ur=br&&de,Qr=br&&He,Hr=br&&ce,gr=sI(ur,!0,Je?Qr:!Ct,!0,nt?Qr:ct?Hr:!Dt),u=Tr!=="narrow"||!Ee&&!ct,ht=Ee&&(br||!ct),yr=ct,mn=br?gr:Tr==="medium"?vf+(ht||yr?zi:0):Jr,qt=Math.max(0,Math.min(mn,Jr)),Vr=Math.max(0,qt-(u?vf:0)),Tt=Mt?Mt.entityType==="initiative"?Mt.mode==="create"?"New Initiative":"Edit Initiative":Mt.mode==="create"?"New Workstream":"Edit Workstream":E?.type==="initiative"?"Initiative":"Workstream",Ut=L?.kind==="editor"?L.editor.mode==="create"?"New Workstream":"Edit Workstream":"Workstream",fr=Mt?null:E,$t=L?.kind==="detail"?L.detail:null,Mr=Q.useCallback(kr=>{sr(cr=>({...cr,[kr]:!cr[kr]}))},[]),Fr=Q.useCallback(kr=>{const cr=String(kr.initiativeId||"").trim();return cr&&s.find(Wr=>Wr.id===cr)||null},[s]),Vt=Q.useRef(null),Dr=Q.useRef(null),Ye=Q.useRef(null),en=Q.useRef(null),bn=Q.useRef(null),tn=Q.useRef(e),ft=Q.useRef(""),rn=Lt?`secondary:inline-editor:${Lt.targetId}`:L?`secondary:${L.kind}:${L.kind==="detail"?L.detail.item.id:`${L.editor.mode}:${L.editor.entityType}:${L.editor.mode==="edit"?L.editor.targetId:""}`}`:zt?`primary:inline-editor:${zt.targetId}`:Mt?`primary:editor:${Mt.mode}:${Mt.entityType}:${Mt.mode==="edit"?Mt.targetId:""}`:E?`primary:detail:${E.type}:${E.item.id}`:"tree";Q.useEffect(()=>{const kr=tn.current;if(tn.current=e,kr&&!e){r?.current?.focus(),ft.current="";return}if(!e||kr&&ft.current===rn)return;ft.current=rn;const cr=yr?Ye.current:ht?Dr.current:Vt.current,Wr=window.requestAnimationFrame(()=>{(cr?.querySelector("[data-planning-editor-title]")||cr?.querySelector("[data-planning-pane-heading]"))?.focus()});return()=>window.cancelAnimationFrame(Wr)},[rn,e,r,ht,yr]);const Nt=Q.useCallback(()=>{if(K){pe();return}E?.type==="initiative"&&Xe(""),E?.type==="workstream"&&ae("")},[E,K,pe,Xe,ae]),or=Q.useCallback(kr=>({flex:`0 0 ${kr}px`,width:`${kr}px`,minWidth:`${kr}px`,maxWidth:`${kr}px`}),[]);Q.useEffect(()=>{a?.(qt)},[qt,a]),Q.useEffect(()=>{Ct&&en.current?.querySelector("[data-planning-pane-heading]")?.focus()},[Ct]),Q.useEffect(()=>{Dt&&bn.current?.querySelector("[data-planning-pane-heading]")?.focus()},[Dt]);const xr=E?.type==="workstream"?E.item:null,hn=xr?Fr(xr):ue,ys=!!(hn||String(xr?.initiativeId||"").trim()),Nn=hn?{title:hn.title,description:xr?`${xr.title} belongs to this initiative.`:"This workstream will belong to the selected initiative.",action:xr?{label:"Open initiative",onClick:()=>Xe(hn.id)}:void 0}:xr&&ys?{title:"Initiative unavailable",description:`${xr.title} is assigned to an initiative that is not available in the current planning data.`}:xr?{title:"Not linked to an initiative"}:{title:"No initiative selected"},Sn={title:"No workstream selected"};return n.jsx("aside",{className:ze.drawer,"aria-label":"Planning","aria-hidden":!e,inert:!e,"data-layout":Tr,style:{position:"absolute",top:0,left:e?`${t}px`:`${t-qt-24}px`,bottom:0,width:`${qt}px`,minWidth:0,maxWidth:`calc(100vw - ${t}px)`,borderRight:"1px solid var(--border-color)",background:"var(--bg-secondary)",boxSizing:"border-box",display:"flex",flexDirection:"column",zIndex:35,overflow:"hidden",pointerEvents:e?"auto":"none",transition:"left 220ms cubic-bezier(0.4, 0, 0.2, 1)",willChange:"left"},children:n.jsxs("div",{className:ze.drawerBody,children:[u&&(ur?n.jsx(ef,{label:"Planning",onExpand:Y}):n.jsxs("div",{ref:Vt,"data-planning-pane":"tree",className:`${ze.paneShell} ${x.appScrollbar} tf-scrollbar ${ze.treePane} ${Ee&&!He?ze.treePaneSplit:""}`.trim(),style:or(Tr==="narrow"?qt:vf),children:[n.jsxs("div",{className:ze.paneHeader,children:[n.jsx("h2",{className:ze.paneHeaderLabel,tabIndex:-1,"data-planning-pane-heading":!0,children:"Planning"}),n.jsxs("div",{className:ze.headerActionGroup,children:[n.jsx(ik,{visible:Qt,disabled:d==="deleted"||pr===0,disabledLabel:d==="deleted"?"Archive visibility unavailable in Trash":void 0,itemLabel:"planning items",onToggle:()=>ir(kr=>!kr)}),br?n.jsx("button",{type:"button",className:"tf-control-icon",onClick:ke,"aria-label":"Collapse Planning pane",title:"Collapse Planning pane",children:n.jsx(lo,{size:16,"aria-hidden":"true"})}):null]})]}),n.jsx("div",{className:ze.paneContent,"aria-busy":l.status==="loading"||l.isRefreshing,children:n.jsx(mQ,{initiatives:s,standaloneWorkstreams:i,planningLoadState:l,taskScope:d,showArchivedPlanning:Qt,currentOwnerId:me,assigneeOptions:Re,showTaskCardStatusLabel:ye,taskArrangeMode:k,activeInitiativeId:f,activeWorkstreamId:p,navigatorSort:g,navigatorSortReady:h,onNavigatorSortChange:y,planningFavorites:S,onTogglePlanningFavorite:w,favoritesSectionCollapsed:_,initiativesSectionCollapsed:M,workstreamsSectionCollapsed:R,onToggleFavoritesSection:P,onToggleInitiativesSection:b,onToggleWorkstreamsSection:$,expandedInitiativeIds:I,detail:E,secondaryPane:L,onCreateInitiative:Ae,onCreateWorkstream:Te,onToggleInitiative:he,onSelectInitiative:ot,onSelectWorkstream:We,onOpenInitiativeDetails:Xe,onOpenWorkstreamDetails:ae,onOpenNestedWorkstreamDetails:G,onOpenTaskById:Ue,onSetTaskStatus:wt,onChangePlanningOwner:it,onChangeTaskAssignee:Me,onArchivePlanningTask:Ge,onArchiveResolvedWorkstream:F,onArchiveResolvedInitiative:Ne,linkOptions:je,onAssignInitiativeToWorkstream:mt,onRetryPlanning:c})})]})),br&&!Je&&(Ct?n.jsx(RS,{label:"Initiative",title:Nn.title,description:Nn.description,action:Nn.action,onCollapse:()=>Rt(!1),paneRef:en}):n.jsx(ef,{label:"Initiative",muted:!ys,onExpand:()=>Rt(!0)})),ht&&(Qr?n.jsx(ef,{label:lt==="initiative"?"Initiative":"Workstream",onExpand:q}):n.jsxs("div",{ref:Dr,"data-planning-pane":"primary",className:`${ze.paneShell} ${x.appScrollbar} tf-scrollbar ${ze.detailPane}`.trim(),style:or(br?zi:Vr),children:[n.jsxs("div",{className:ze.paneHeader,children:[Tr==="narrow"?n.jsx("button",{type:"button",className:"tf-control-icon",onClick:Nt,"aria-label":"Back to Planning",title:"Back to Planning",children:n.jsx(lo,{size:16,"aria-hidden":"true"})}):null,n.jsx("h2",{className:ze.paneHeaderLabel,tabIndex:-1,"data-planning-pane-heading":!0,children:Tt}),n.jsxs("div",{className:ze.headerActionGroup,children:[fr?n.jsx(ik,{visible:dr[fr.type],disabled:xS(fr)===0,itemLabel:fr.type==="initiative"?"workstreams":"tasks",onToggle:()=>Mr(fr.type)}):null,br?n.jsx("button",{type:"button",className:"tf-control-icon",onClick:we,"aria-label":`Collapse ${Tt} pane`,title:`Collapse ${Tt} pane`,children:n.jsx(lo,{size:16,"aria-hidden":"true"})}):null]})]}),n.jsx("div",{className:ze.paneContent,"aria-busy":D?.status==="loading",children:Mt?n.jsx(Zk,{editor:Mt,draftTitle:ve,draftDescription:Pe,draftOwner:Le,draftInitiativeId:se,assigneeOptions:Re,initiativeLinkOptions:je.initiatives,draftInitiativeSummary:ue,onChangeDraftTitle:V,onChangeDraftDescription:W,onChangeDraftOwner:z,onChangeDraftInitiativeId:fe,onCancel:pe,onSubmit:N,isSubmitting:X}):E?n.jsx(PS,{detail:E,showArchivedChildren:dr[E.type],inlineEditor:zt?{editor:zt,draftTitle:ve,draftDescription:Pe,draftOwner:Le,draftInitiativeId:se,draftInitiativeSummary:ue,onChangeDraftTitle:V,onChangeDraftDescription:W,onChangeDraftOwner:z,onChangeDraftInitiativeId:fe,onCancel:pe,onSubmit:N,isSubmitting:X}:null,selectedChildWorkstreamId:L?.kind==="detail"?L.detail.item.id:null,currentWorkspaceId:Z,currentActorId:me,theme:Ve,assigneeOptions:Re,linkOptions:je,showTaskCardStatusLabel:ye,taskArrangeMode:k,onTaskArrangeModeChange:v,onReorderWorkstreamTasks:C,hydrationState:D,onRetryHydration:H,onSetTaskStatus:E.type==="workstream"?wt:void 0,onArchivePlanningTask:E.type==="workstream"?Ge:void 0,onArchiveResolvedWorkstream:E.type==="initiative"?F:void 0,onArchiveResolvedEntity:E.type==="initiative"?Ne:F,onOpenNestedWorkstreamDetails:E.type==="initiative"?G:void 0,onCreateTaskInWorkstream:E.type==="workstream"?Ce:void 0,onCreateWorkstreamInInitiative:E.type==="initiative"?ut:void 0,onOpenTaskById:E.type==="workstream"?Ue:void 0,onChangeTaskAssignee:E.type==="workstream"?Me:void 0,taskReferences:kt,onAssignTaskToWorkstream:E.type==="workstream"?rt:void 0,onAssignInitiativeToWorkstream:mt,onAttachTaskToWorkstreamByReference:E.type==="workstream"?Ht:void 0,onAttachWorkstreamToInitiativeByReference:E.type==="initiative"?lr:void 0,parentInitiative:E.type==="workstream"?Fr(E.item):null,onEdit:()=>E.type==="initiative"?Ie(E.item.id):Fe(E.item.id),onChangeOwner:kr=>it(E.type,E.item.id,kr),onChangePlanningOwner:it,onArchive:()=>E.type==="initiative"?qe(E.item.id):_e(E.item.id),onUnarchive:()=>E.type==="initiative"?ge(E.item.id):Be(E.item.id),onAddPlanningContextFile:rr,onRemovePlanningContextFile:wr,onUpdatePlanningContextCaption:st}):null})]})),br&&!nt&&!ct&&(Dt?n.jsx(RS,{label:"Workstream",title:Sn.title,description:Sn.description,action:Sn.action,onCollapse:()=>It(!1),paneRef:bn}):n.jsx(ef,{label:"Workstream",muted:!0,onExpand:()=>It(!0)})),yr&&(Hr?n.jsx(ef,{label:"Workstream",onExpand:$e}):n.jsxs("div",{ref:Ye,"data-planning-pane":"secondary",className:`${ze.paneShell} ${x.appScrollbar} tf-scrollbar ${ze.detailPane}`.trim(),style:or(br?zi:Vr),children:[n.jsxs("div",{className:ze.paneHeader,children:[br?null:n.jsx("button",{type:"button",className:"tf-control-icon",onClick:Lt&&xe||re,"aria-label":Lt?"Cancel workstream editing":`Back to ${Tt}`,title:Lt?"Cancel workstream editing":`Back to ${Tt}`,children:n.jsx(lo,{size:16,"aria-hidden":"true"})}),n.jsx("h2",{className:ze.paneHeaderLabel,tabIndex:-1,"data-planning-pane-heading":!0,children:Ut}),n.jsxs("div",{className:ze.headerActionGroup,children:[$t?n.jsx(ik,{visible:dr.workstream,disabled:xS($t)===0,itemLabel:"tasks",onToggle:()=>Mr("workstream")}):null,br?n.jsx("button",{type:"button",className:"tf-control-icon",onClick:le,"aria-label":`Collapse ${Ut} pane`,title:`Collapse ${Ut} pane`,children:n.jsx(lo,{size:16,"aria-hidden":"true"})}):null]})]}),n.jsx("div",{className:ze.paneContent,"aria-busy":ie?.status==="loading",children:L?.kind==="editor"?n.jsx(Zk,{editor:L.editor,draftTitle:ve,draftDescription:Pe,draftOwner:Le,draftInitiativeId:se,assigneeOptions:Re,initiativeLinkOptions:je.initiatives,draftInitiativeSummary:ue,onChangeDraftTitle:V,onChangeDraftDescription:W,onChangeDraftOwner:z,onChangeDraftInitiativeId:fe,onCancel:re,onSubmit:N,isSubmitting:X}):L?n.jsx(PS,{detail:L.detail,showArchivedChildren:dr.workstream,inlineEditor:Lt?{editor:Lt,draftTitle:ve,draftDescription:Pe,draftOwner:Le,draftInitiativeId:se,draftInitiativeSummary:ue,onChangeDraftTitle:V,onChangeDraftDescription:W,onChangeDraftOwner:z,onChangeDraftInitiativeId:fe,onCancel:xe||re,onSubmit:N,isSubmitting:X}:null,currentWorkspaceId:Z,currentActorId:me,theme:Ve,assigneeOptions:Re,linkOptions:je,showTaskCardStatusLabel:ye,taskArrangeMode:k,onTaskArrangeModeChange:v,onReorderWorkstreamTasks:C,hydrationState:ie,onRetryHydration:be,onSetTaskStatus:wt,onArchivePlanningTask:Ge,onArchiveResolvedEntity:F,onCreateTaskInWorkstream:Ce,onOpenTaskById:Ue,onChangeTaskAssignee:Me,taskReferences:kt,onAssignTaskToWorkstream:rt,onAssignInitiativeToWorkstream:mt,onAttachTaskToWorkstreamByReference:Ht,parentInitiative:Fr(L.detail.item),onEdit:()=>Fe(L.detail.item.id),onChangeOwner:kr=>it("workstream",L.detail.item.id,kr),onChangePlanningOwner:it,onArchive:()=>_e(L.detail.item.id),onUnarchive:()=>Be(L.detail.item.id),onAddPlanningContextFile:rr,onRemovePlanningContextFile:wr,onUpdatePlanningContextCaption:st}):null})]}))]})})}function yQ(e,t,r){const a=String(t||"").trim();if(a)return e.some(l=>l.id===a)?{initiativeId:a,invalid:!1}:{initiativeId:null,invalid:!0};const s=r.trim();if(!s)return{initiativeId:null,invalid:!1};const i=Mk(e,s);return i?{initiativeId:i.id,invalid:!1}:{initiativeId:null,invalid:!0}}function kQ(e){return e.taskScope==="open"&&e.summaryCount>0&&(e.loadingTasks||e.activeTaskCount===0||!e.archiveHydrated)}const vQ={"annotated_attachments.workspace_access":{enabled:!0,description:"Annotated Attachment workspace readiness gate.",owner:"taskforce",removalMilestone:"Annotated Attachment GA"},"documents.workspace_access":{enabled:!0,description:"Document Manager/editor workspace readiness gate.",owner:"taskforce",removalMilestone:"Document Manager GA"},"workflow_manager.workspace_access":{enabled:!0,description:"Workflow Manager workspace readiness gate.",owner:"taskforce",removalMilestone:"Workflow Manager GA"},"taskforce_agents.workspace_access":{enabled:!0,description:"Taskforce Agents workspace readiness gate.",owner:"taskforce",removalMilestone:"Taskforce Agents workspace GA"},"ai_profiles.workspace_access":{enabled:!0,description:"AI Profiles workspace readiness gate.",owner:"taskforce",removalMilestone:"AI Profiles workspace GA"},"planning.workspace_access":{enabled:!1,description:"Planning workspace readiness gate.",owner:"taskforce",removalMilestone:"Planning workspace GA"}},wf="annotated_attachments.workspace_access",bf="documents.workspace_access",og="workflow_manager.workspace_access",ql="taskforce_agents.workspace_access",ig="ai_profiles.workspace_access",cg="planning.workspace_access",wQ=Object.entries(vQ).reduce((e,[t,r])=>(e[t]={key:t,enabled:!!r.enabled,description:String(r.description||""),owner:String(r.owner||""),removalMilestone:String(r.removalMilestone||"")},e),{});function bQ(e){const t=String(e||"").trim();return t&&wQ[t]||null}function SQ(e){const t=bQ(e);return t?t.enabled?{featureKey:e,allowed:!0,source:"app_gate",code:"OK"}:{featureKey:e,allowed:!1,source:"app_gate",code:"APP_GATE_DISABLED"}:{featureKey:e,allowed:!0,source:"none",code:"OK"}}function du(e){return SQ(e.featureKey)}const Hl={tasks:"Tasks",planning:"Planning",docs:"Documents",annotate:"Image Notes",workflowManager:"Workflow Manager",taskforceAgents:"Taskforce Agents",aiProfiles:"AI Profiles"},AQ=["tasks","planning","docs","annotate","workflowManager","taskforceAgents","aiProfiles"];function CQ(e){const t=e?.featureAccess||{},r={tasks:{id:"tasks",label:Hl.tasks,featureKey:null,enabled:!0,fallbackModuleId:"tasks"},planning:{id:"planning",label:Hl.planning,featureKey:cg,enabled:t[cg]?.allowed??!1,fallbackModuleId:"tasks"},docs:{id:"docs",label:Hl.docs,featureKey:bf,enabled:t[bf]?.allowed??!0,fallbackModuleId:"tasks"},annotate:{id:"annotate",label:Hl.annotate,featureKey:wf,enabled:t[wf]?.allowed??!1,fallbackModuleId:"tasks"},workflowManager:{id:"workflowManager",label:Hl.workflowManager,featureKey:og,enabled:t[og]?.allowed??!1,fallbackModuleId:"tasks"},taskforceAgents:{id:"taskforceAgents",label:Hl.taskforceAgents,featureKey:ql,enabled:t[ql]?.allowed??!1,fallbackModuleId:"tasks"},aiProfiles:{id:"aiProfiles",label:Hl.aiProfiles,featureKey:ig,enabled:t[ig]?.allowed??!1,fallbackModuleId:"tasks"}};return AQ.map(a=>r[a])}function _Q(e){switch(e){case"planning":return{mode:e,moduleId:"planning",layoutVariant:"planning-module",headerSections:[],primaryAction:null};case"docs":return{mode:e,moduleId:"docs",layoutVariant:"docs-minimal",headerSections:[],primaryAction:null};case"annotate":return{mode:e,moduleId:"annotate",layoutVariant:"annotated-module",headerSections:[],primaryAction:null};case"workflowManager":return{mode:e,moduleId:"workflowManager",layoutVariant:"workflow-manager-module",headerSections:[],primaryAction:null};case"taskforceAgents":return{mode:e,moduleId:"taskforceAgents",layoutVariant:"taskforce-agents-module",headerSections:[],primaryAction:null};case"aiProfiles":return{mode:e,moduleId:"aiProfiles",layoutVariant:"ai-profiles-module",headerSections:[],primaryAction:null};default:return{mode:"tasks",moduleId:"tasks",layoutVariant:"tasks-default",headerSections:["search","sort","divider-primary","grouping","divider-secondary","task-display-actions"],primaryAction:"add-task"}}}function ES(e,t){const r=e==="agents"?"aiProfiles":e,a=t.find(s=>s.id===r);return a?a.enabled?a.id:a.fallbackModuleId:"tasks"}const IQ="_weekLabel_vet2o_1",TQ="_sectionTitle_vet2o_6",xQ="_calendarHeader_vet2o_11",RQ="_monthLabel_vet2o_18",PQ="_weekdayGrid_vet2o_23",EQ="_weekdayLabel_vet2o_30",NQ="_calendarGrid_vet2o_36",jQ="_calendarDay_vet2o_42",MQ="_calendarDayDot_vet2o_55",DQ="_jumpRow_vet2o_67",LQ="_displaySection_vet2o_73",OQ="_toggleLabel_vet2o_79",BQ="_expiredSummary_vet2o_87",WQ="_actionButton_vet2o_95",Ka={weekLabel:IQ,sectionTitle:TQ,calendarHeader:xQ,monthLabel:RQ,weekdayGrid:PQ,weekdayLabel:EQ,calendarGrid:NQ,calendarDay:jQ,calendarDayDot:MQ,jumpRow:DQ,displaySection:LQ,toggleLabel:OQ,expiredSummary:BQ,actionButton:WQ},NS=["mon","tue","wed","thu","fri","sat","sun"],$Q={mon:"Mon",tue:"Tue",wed:"Wed",thu:"Thu",fri:"Fri",sat:"Sat",sun:"Sun"};function Xl(e){const t=e.getFullYear(),r=String(e.getMonth()+1).padStart(2,"0"),a=String(e.getDate()).padStart(2,"0");return`${t}-${r}-${a}`}function uf(e){const t=e.match(/^(\d{4})-(\d{2})-(\d{2})$/);if(!t)return null;const r=new Date(Number(t[1]),Number(t[2])-1,Number(t[3]));return Number.isNaN(r.getTime())?null:r}function Jk(e,t){const r=e.getDay(),a=t==="sunday"?-r:r===0?-6:1-r,s=new Date(e);return s.setHours(0,0,0,0),s.setDate(s.getDate()+a),s}function FQ(e,t){return t==="sunday"?{sun:0,mon:1,tue:2,wed:3,thu:4,fri:5,sat:6}[e]:{mon:0,tue:1,wed:2,thu:3,fri:4,sat:5,sun:6}[e]}function oI(e,t){const r=new Date(e);return r.setDate(e.getDate()+t),r}function UQ(e){const t=e.match(/^(\d{4})-(\d{2})-(\d{2})$/);if(!t)return null;const r=new Date(Date.UTC(Number(t[1]),Number(t[2])-1,Number(t[3]))),a=r.getUTCDay()||7;r.setUTCDate(r.getUTCDate()+4-a);const s=new Date(Date.UTC(r.getUTCFullYear(),0,1)),i=Math.ceil(((r.getTime()-s.getTime())/864e5+1)/7);return`${r.getUTCFullYear()}-W${String(i).padStart(2,"0")}`}const Qk=320;function zQ({open:e,onClose:t,scheduleSelectedDate:r,setScheduleSelectedDate:a,scheduleCalendarMonth:s,setScheduleCalendarMonth:i,scheduleShowWeekends:l,setScheduleShowWeekends:c,scheduleShowBacklog:d,setScheduleShowBacklog:f,scheduleOnlyExpired:p,setScheduleOnlyExpired:g,expiredScheduledCount:h,overdueDueCount:y,expiredLeafCandidates:k,expiredRecoveryCandidates:v,onMoveExpiredToSelectedWeek:C,onMoveExpiredToBacklog:S,scheduleBulkBusy:w,globalWeekStartsOn:_,resolvedLocale:M,todayDateOnly:R,scheduleBaseTasks:P,scheduleWeekStart:b,scheduleWeekLabel:$}){const I=Q.useMemo(()=>{const[D,ie]=s.split("-"),H=Number(D),be=Number(ie);if(!Number.isInteger(H)||!Number.isInteger(be)||be<1||be>12){const Z=uf(r)||new Date;return new Date(Z.getFullYear(),Z.getMonth(),1)}return new Date(H,be-1,1)},[s,r]),E=Q.useMemo(()=>Xh(I,{month:"long",year:"numeric"},M),[I,M]),K=Q.useMemo(()=>{const D=Jk(I,_);return Array.from({length:42},(ie,H)=>oI(D,H))},[I,_]),U=Q.useMemo(()=>{const D=new Map;for(const ie of P){const H=ie.scheduledDate||"";if(!H)continue;const Z=!(ie.status==="done"||ie.status==="cancelled")&&H<R,me=D.get(H);me?(me.count+=1,Z&&(me.hasExpired=!0)):D.set(H,{count:1,hasExpired:Z})}return D},[P,R]),L=Q.useMemo(()=>_==="sunday"?["Sun","Mon","Tue","Wed","Thu","Fri","Sat"]:["Mon","Tue","Wed","Thu","Fri","Sat","Sun"],[_]);return n.jsxs("aside",{className:`${x.appScrollbar} tf-scrollbar tf-sidebar-shell`,style:{transform:e?"translateX(0)":"translateX(108%)",pointerEvents:e?"auto":"none",transition:"transform 220ms cubic-bezier(0.4, 0, 0.2, 1)",willChange:"transform",width:`${Qk}px`,minWidth:`${Qk}px`},children:[n.jsxs("div",{className:"tf-sidebar-header",children:[n.jsxs("div",{className:"tf-sidebar-title",children:[n.jsx(NT,{size:16}),n.jsx("span",{children:"Schedule Controls"})]}),n.jsx("button",{type:"button",className:"tf-control-icon",onClick:t,title:"Hide Schedule Sidebar",children:n.jsx(sd,{size:16})})]}),n.jsxs("div",{className:Ka.weekLabel,children:["Week of ",$]}),n.jsxs("div",{className:"tf-sidebar-section tf-surface-panel",children:[n.jsxs("div",{className:Ka.calendarHeader,children:[n.jsx("button",{className:"tf-control-icon",onClick:()=>{const D=new Date(I);D.setMonth(I.getMonth()-1),i(`${D.getFullYear()}-${String(D.getMonth()+1).padStart(2,"0")}`)},title:"Previous month",children:n.jsx(lo,{size:14})}),n.jsx("div",{className:Ka.monthLabel,children:E}),n.jsx("button",{className:"tf-control-icon",onClick:()=>{const D=new Date(I);D.setMonth(I.getMonth()+1),i(`${D.getFullYear()}-${String(D.getMonth()+1).padStart(2,"0")}`)},title:"Next month",children:n.jsx(sd,{size:14})})]}),n.jsx("div",{className:Ka.weekdayGrid,children:L.map(D=>n.jsx("div",{className:Ka.weekdayLabel,children:D},D))}),n.jsx("div",{className:Ka.calendarGrid,children:K.map(D=>{const ie=Xl(D),H=D.getMonth()!==I.getMonth(),be=Jk(D,_),Z=Xl(be)===Xl(b),me=ie===r,Ve=ie===R,Re=ie<R,je=U.get(ie),ye=!!je,ue=!!je?.hasExpired;return n.jsxs("button",{onClick:()=>{a(ie),i(`${D.getFullYear()}-${String(D.getMonth()+1).padStart(2,"0")}`)},className:Ka.calendarDay,style:{"--calendar-day-border":me?"1px solid #2563eb":Ve?"1px solid rgba(245, 158, 11, 0.95)":"1px solid transparent","--calendar-day-background":me?"rgba(59,130,246,0.22)":Ve?"rgba(245,158,11,0.16)":Z?"rgba(59,130,246,0.18)":"transparent","--calendar-day-color":H?"var(--text-helper)":"var(--text-primary)","--calendar-day-font-weight":me||Ve?700:500,"--calendar-day-opacity":Re?.42:1},title:`${Ve?`${ie} (Today)`:ie}`+(ye?` • ${je?.count} scheduled`:"")+(ue?" • includes expired":""),children:[D.getDate(),ye&&n.jsx("span",{className:Ka.calendarDayDot,style:{"--calendar-dot-background":ue?"#ef4444":"#3b82f6","--calendar-dot-opacity":H?.6:.95}})]},ie)})}),n.jsx("div",{className:Ka.jumpRow,children:n.jsx("button",{className:"tf-control-icon",onClick:()=>{const D=new Date;a(Xl(D)),i(`${D.getFullYear()}-${String(D.getMonth()+1).padStart(2,"0")}`)},title:"Jump to current week",children:"Today"})})]}),n.jsxs("div",{className:`tf-sidebar-section tf-surface-panel ${Ka.displaySection}`,children:[n.jsx("div",{className:Ka.sectionTitle,children:"Display"}),n.jsxs("label",{className:Ka.toggleLabel,children:[n.jsx("input",{type:"checkbox",checked:l,onChange:D=>c(D.target.checked)}),"Show weekends"]}),n.jsxs("label",{className:Ka.toggleLabel,children:[n.jsx("input",{type:"checkbox",checked:d,onChange:D=>f(D.target.checked)}),"Show backlog"]}),n.jsxs("label",{className:Ka.toggleLabel,children:[n.jsx("input",{type:"checkbox",checked:p,onChange:D=>g(D.target.checked)}),"Only expired/overdue"]})]}),h>0&&n.jsxs("div",{className:"tf-sidebar-section tf-surface-panel",children:[n.jsx("div",{className:Ka.sectionTitle,children:"Expired Tasks"}),n.jsxs("div",{className:Ka.expiredSummary,children:[n.jsxs("span",{children:[h," expired"]}),n.jsxs("span",{children:[y," overdue"]})]}),n.jsx("button",{className:`tf-control-icon ${Ka.actionButton}`,onClick:C,disabled:w||k.length===0,title:"Move expired leaf tasks to the selected week while keeping weekday alignment",children:w?"Working...":"Schedule to selected week"}),n.jsx("button",{className:`tf-control-icon ${Ka.actionButton}`,onClick:S,disabled:w||v.length===0,title:"Unschedule expired/overdue tasks back to backlog",children:w?"Working...":"Unschedule to backlog"})]})]})}const HQ=[{value:"implementation-plan",label:"Plans"},{value:"review",label:"Reviews"},{value:"walkthrough",label:"Walkthroughs"},{value:"planning",label:"Planning"},{value:"other",label:"Other"}],VQ=[{value:"attached",label:"Attached"},{value:"unattached",label:"Unattached"}];function iI(e,t){return e&&(t==="owner"||t==="admin")}function GQ(e,t,r){return iI(e,t)&&r==="team"}function KQ({isOpen:e,workspaceId:t,refreshKeys:r}){const[a,s]=o.useState([]),[i,l]=o.useState(!1),[c,d]=o.useState(null),f=o.useRef(null),p=o.useRef(null);o.useLayoutEffect(()=>{p.current=YQ(f.current,p.current)},[a]);const g=o.useCallback(async()=>{const h=await fetch(`/api/taskforce/sync/events?workspace_id=${encodeURIComponent(t)}&limit=15`,{method:"GET",credentials:"include"});if(!h.ok)throw new Error(`Failed to load sync events (${h.status})`);const y=await h.json().catch(()=>({}));return Array.isArray(y?.events)?y.events.filter(k=>k&&typeof k=="object"):[]},[t]);return o.useEffect(()=>{if(!e)return;let h=!1;const y=a.length===0;return y&&l(!0),g().then(k=>{h||(p.current=qQ(f.current),s(v=>{const C=v.length===0?k:cq(v,k,15);return lq(v,C)?v:C}),d(null))}).catch(k=>{if(h)return;const v=k instanceof Error&&k.message.trim().length>0?k.message.trim():"Unable to load recent sync events.";d(v),y&&s([])}).finally(()=>{h||y&&l(!1)}),()=>{h=!0}},[e,g,...r]),{syncRecentEvents:a,syncRecentEventsLoading:i,syncRecentEventsError:c,syncEventsListRef:f,loadRecentSyncEvents:g}}function qQ(e){return e&&e.scrollTop>8?{scrollTop:e.scrollTop,scrollHeight:e.scrollHeight}:null}function YQ(e,t){if(!t||!e)return null;const r=e.scrollHeight-t.scrollHeight;return e.scrollTop=t.scrollTop+Math.max(0,r),null}function ZQ({currentWorkspaceId:e,syncStatusLabel:t,workspaceSyncSummary:r,workspaceSyncRecommendedAction:a,formattedLastSyncTime:s,formattedLastPullTime:i,formattedLastPushTime:l,workspaceSyncDiagnostics:c,workspaceSyncPendingChanges:d,syncLastError:f,workspaceSyncPhase:p,referenceMismatchCount:g,syncRecentEvents:h,loadRecentSyncEvents:y,pushNotice:k,resetWorkspaceSyncCursorAndPull:v,workspaceSyncBusy:C,durableRepairQueueAvailable:S=!1}){const[w,_]=o.useState(!1),[M,R]=o.useState(!1),[P,b]=o.useState(!1),$=o.useCallback(async()=>{try{const K=h.length>0?h:await y(),U=yq({currentWorkspaceId:e,syncStatusLabel:t,workspaceSyncSummary:r,workspaceSyncRecommendedAction:a,formattedLastSyncTime:s,formattedLastPullTime:i,formattedLastPushTime:l,workspaceSyncDiagnostics:c,workspaceSyncPendingChanges:d,syncLastError:f,syncStageLabel:O_(p,w,C),referenceMismatchCount:g,syncRecentEvents:K});await navigator.clipboard.writeText(U),b(!0),window.setTimeout(()=>{b(!1)},1800),k("Sync details copied to clipboard.","success")}catch{b(!1),k("Failed to copy sync details.","error")}},[e,i,l,s,y,k,g,f,h,t,c,p,d,a,r,C,w]),I=o.useCallback(async()=>{R(!1),_(!0);try{await v()}finally{_(!1)}},[v]),E=o.useCallback(()=>{if(!w){if(C&&!S){R(!0);return}I()}},[S,I,C,w]);return o.useEffect(()=>{M&&(C||w||I())},[I,C,w,M]),{workspaceSyncRepairBusy:w,workspaceSyncRepairQueued:M,workspaceSyncCopied:P,handleCopySyncDetails:$,handleQueueOrRunRepairSync:E}}function JQ({canManageWorkspaceSync:e,workspaceCloudSyncEnabled:t,saveWorkspaceCloudSyncSettings:r}){const[a,s]=o.useState(!1),[i,l]=o.useState(!1),[c,d]=o.useState(!1),[f,p]=o.useState(null),g=o.useCallback(async S=>{if(e){p(null),d(!0);try{const w=await r({enabled:S});w.success||p(w.error||(S?"Failed to enable sync.":"Failed to disable sync."))}finally{d(!1)}}},[e,r]),h=o.useCallback(async S=>{if(S&&!t){l(!0);return}await g(S)},[g,t]),y=o.useCallback(()=>{l(!1)},[]),k=o.useCallback(()=>{l(!1),g(!0)},[g]),v=o.useCallback(()=>{s(!0)},[]),C=o.useCallback(()=>{s(!1)},[]);return{showSyncStatusModal:a,showSyncEnableWarning:i,workspaceSyncToggleBusy:c,workspaceSyncError:f,syncControlBusy:c,openSyncStatusModal:v,closeSyncStatusModal:C,handleWorkspaceSyncToggle:h,cancelSyncEnableWarning:y,confirmSyncEnableWarning:k}}const jS=Q.lazy(()=>Po(()=>import("./TaskSettings-xVsxSa0g.js"),__vite__mapDeps([10,1,2,3,4,5,11])).then(e=>({default:e.TaskSettings}))),QQ=Q.lazy(()=>Po(()=>import("./AnnotatedAttachmentWorkspace-DHNYaNg6.js"),__vite__mapDeps([12,1,4,13,2,14,3,5,15])).then(e=>({default:e.AnnotatedAttachmentWorkspaceShell}))),XQ=Q.lazy(()=>Po(()=>import("./DocumentWorkspace-BC7sy5TG.js"),__vite__mapDeps([16,1,13,2,14,3,4,5,17])).then(e=>({default:e.DocumentWorkspaceShell}))),MS=Q.lazy(()=>Po(()=>import("./TaskforceAgentsModule-CkAxW19K.js"),__vite__mapDeps([18,1,19,2,3,4,5,20])).then(e=>({default:e.TaskforceAgentsModule}))),eX=Q.lazy(()=>Po(()=>import("./WorkflowManagerModule-BKqIGVnF.js"),__vite__mapDeps([21,1,2,3,4,5,22])).then(e=>({default:e.WorkflowManagerModule}))),tX=Q.lazy(()=>Po(()=>import("./AiProfilesModule-DPxQeF9N.js"),__vite__mapDeps([23,1,19,2,3,4,5])).then(e=>({default:e.AiProfilesModule}))),rX=Q.lazy(()=>Po(()=>import("./PlanningModule-t5GbvVR9.js"),__vite__mapDeps([24,1,2,3,4,5,25])).then(e=>({default:e.PlanningModule}))),nX=Q.lazy(()=>Po(()=>import("./PlansPage-BVH_NfgT.js"),__vite__mapDeps([26,1,2,5,3,4,27])).then(e=>({default:e.PlansPage})));function DS(e,t,r){const a=t.trim();if(!a)return e;const s={...e};return delete s[a],s[a]=r,Object.fromEntries(Object.entries(s).slice(-50))}const aX="image/png,image/jpeg,image/webp,image/gif",sX=5*1024*1024,ck=56,oX=e=>e;function iX(e,t){const r=hg(e);if(r)return Gw(r).label.toUpperCase();for(const a of t){const s=String(a||"").trim();if(!s)continue;const i=mv(s);if(i)return Gw(i).label.toUpperCase();let l=s.toLowerCase();try{l=new URL(s.includes("://")?s:`https://${s}`).hostname.toLowerCase()}catch{l=s.toLowerCase()}if(!(l.includes("localhost")||l.includes("127.0.0.1")||l.includes("::1")))return l.toUpperCase()}return"UNKNOWN"}function tf(){return typeof performance<"u"?performance.now():Date.now()}function cX(e){const a=tA(),s=rA(),i=o.useMemo(()=>new URLSearchParams(s.search),[s.search]),l=String(i.get("screen")||"").trim().toLowerCase()==="plans",c=o.useCallback(m=>{const A=new URLSearchParams(s.search);A.set("screen","plans");for(const[B,Se]of Object.entries(m||{}))Se==null||String(Se).trim()===""?A.delete(B):A.set(B,String(Se));a(`/?${A.toString()}${s.hash||""}`)},[s.hash,s.search,a]),d=o.useCallback(()=>{const m=new URLSearchParams(s.search);m.delete("screen"),m.delete("gate"),m.delete("checkout"),m.delete("planId"),m.delete("planVersionId"),m.delete("interval");const A=m.toString();a(`${s.pathname==="/"?"/":s.pathname}${A?`?${A}`:""}${s.hash||""}`)},[s.hash,s.pathname,s.search,a]),{activeTab:f,setActiveTab:p,activeCategories:g,groupBy:h,setGroupBy:y,activeWorkspaceModule:k,setActiveWorkspaceModule:v,emptyColumnMode:C,setEmptyColumnMode:S,zenMode:w,setZenMode:_,filterStatus:M,setFilterStatus:R,tasks:P,handleEdit:b,handleSubmit:$,resetForm:I,handleUpdateTask:E,handleSetStatus:K,editingTaskId:U,loading:L,error:D,title:ie,setTitle:H,setTitleDraft:be,description:Z,setDescription:me,setDescriptionDraft:Ve,checklistItems:Re,setChecklistItems:je,category:ye,setCategory:ue,type:ve,setType:Pe,priority:Le,setPriority:se,complexity:V,setComplexity:W,status:z,setStatus:fe,assignee:ke,setAssignee:Y,scheduledDate:we,setScheduledDate:q,dueDate:le,setDueDate:$e,workstreamInput:re,setWorkstreamInput:de,manualComplexityEnabled:He,checklistDropdownEnabled:ce,showTaskCardStatusLabel:pe,formTaxonomies:xe,setFormTaxonomies:N,comments:X,newCommentText:Ae,setNewCommentText:Te,attachments:he,setAttachments:ot,setAttachmentsDirty:We,descriptionFocused:Xe,setDescriptionFocused:ae,showMarkdownHelp:G,setShowMarkdownHelp:Ie,handleAddComment:Fe,handleSetWorkstreamForCurrentTask:it,handleOpenTaskById:Me,taxonomies:qe,activeTypes:ge,priorities:_e,taxonomyDisplayLabels:Be,copiedId:Ge,handleCopyId:F,handleToggleInProgress:Ne,handleToggleComplete:Ce,handleToggleReview:ut,handleToggleCancel:mt,handleArchiveTask:Ue,handleDelete:wt,handleUnarchive:kt,handleRestoreDeletedTask:rt,handleRestoreSelectedDeletedTasks:Ht,handlePermanentlyDeleteDeletedTask:lr,handleEmptyDeletedTasks:rr,fetchTasks:wr,searchQuery:st,setSearchQuery:zt,filterCategories:Lt,setFilterCategories:Mt,filterTypes:Ee,setFilterTypes:ct,filterPriorities:lt,setFilterPriorities:Je,filterAssignees:nt,setFilterAssignees:Ct,hasInitedFilters:Rt,assigneeOptions:Dt,taskScope:It,setTaskScope:Qt,compressedCards:ir,setCompressedCards:dr,sortBy:sr,setSortBy:pr,clearFilters:Jr,settingsModel:Tr,configLoaded:br,currentTheme:ur,setCurrentTheme:Qr,pathSaved:Hr,saveSettings:Gt,keyShortcut:bt,setKeyShortcut:gr,globalWeekStartsOn:u,locale:ht,jsonBackupEnabled:yr,setJsonBackupEnabled:Er,mcpHostRoot:mn,setMcpHostRoot:qt,settingsSection:Vr,setSettingsSection:Tt,runtimeMode:Ut,workspaceSwitchingEnabled:fr,cloudAuthConfigured:$t,authRequiredForApi:Mr,authBlocked:Fr,isAuthenticated:Vt,authUserId:Dr,authWorkspaceId:Ye,authUserEmail:en,authUserDisplayName:bn,authUserAvatarUrl:tn,authSessionResolved:ft,realtimeSyncEnabled:rn,realtimeSyncFlagSource:Nt,workspaceCloudSyncEnabled:or,workspaceSyncPhase:xr,workspaceSyncStatus:hn,workspaceSyncSummary:ys,workspaceSyncRecommendedAction:Nn,workspaceSyncBusy:Sn,workspaceSyncPendingChanges:kr,localCoordinatorStatus:cr,transferLocalCoordinatorOwnership:Wr,saveWorkspaceCloudSyncSettings:on,pushNotice:dt,userGlobalSyncStatus:Un,workspaceLastSuccessfulSyncAt:Tn,workspaceLastPullAt:jn,workspaceLastPushAt:an,workspaceLastErrorAt:Ds,userGlobalSyncError:da,workspaceLastErrorMessage:J,retryWorkspaceCloudSync:Qe,resetWorkspaceSyncCursorAndPull:St,getWorkspaceSyncDiagnostics:Xt,currentWorkspaceId:at,currentWorkspaceRole:Ft,availableWorkspaces:Lr,switchWorkspace:Nr,updateCurrentUserProfile:Rr,resolveCloudAuthUrl:Kt=oX,logout:Bn,fetchLoginMethods:Xn,unlinkLoginMethod:va,addPasswordToAccount:Cr,changePassword:cn,beginOAuthLogin:kn,beginOAuthLink:zn,availableAuthProviders:ea,projectRoot:La,projectName:mr,mcpScriptPath:Zo,serverHostRoot:Za,showFolderBrowser:ks,setShowFolderBrowser:Eo,folders:xa,files:Ja,currentBrowsePath:Ra,fetchFolders:vs,browserTarget:Qa,setBrowserTarget:ws,handleSelectPath:ln,handleAddPath:Oa,handleRemovePath:yn,handleUpdateCategory:Vs,handleRemoveCategory:Mn,handleSaveCategory:Ls,handleUpdateCategoryIcon:vt,handleUpdateCategoryColor:nr,handleSaveType:nn,handleRemoveType:vn,handleUpdateTaxonomies:ta,handleUpdatePriorities:ho,pathValidation:Os,taskforceAgentId:wa,setTaskforceAgentId:Bs,taskforceAgentConversationId:Xa,setTaskforceAgentConversationId:Xr,taskforceAgentConversationByAgentId:Ar,setTaskforceAgentConversationByAgentId:An,uiStateReady:es,initiativeTemplates:Wn,fetchInitiativeTemplates:ra,createInitiativeFromTemplate:ts,uiNotice:rs,clearNotice:na,clearTaskError:aa,taskReturnTrail:un,clearReturnToParentTask:bs,returnToPreviousTask:Ws,tasksScrollRef:go,setTasksScrollPos:pn,commentsEndRef:Hn,autoSaveState:ua,unsavedModalOpen:Pa,setUnsavedModalOpen:Gs,pendingNavigation:Vn,handleNavigation:wn,currentTask:oe,currentTaskWorkstream:yt,currentTaskInitiative:Yt,scheduleWarningPrompt:vr,confirmScheduleWarning:Ur,cancelScheduleWarning:sa}=e,Dn=WC(P,Me),Cn=ht||fA();o.useEffect(()=>{const m=String(mr||"").trim();document.title=m?`Taskforce - ${m}`:"Taskforce"},[mr]);const gi=()=>{Gs(!1),Vn?(f==="add"&&I(),Vn()):(f==="add"&&I(),p("tasks"))},ba=async()=>{await $({preventDefault:()=>{}}),Gs(!1),Vn&&Vn()},[Ba,yo]=o.useState(!1),[Ss,ko]=o.useState(!0),[Bt,Gn]=o.useState(!1),[$n,sn]=o.useState(!0),[Sa,ns]=o.useState(Xl(new Date)),[As,Ks]=o.useState(()=>{const m=new Date;return`${m.getFullYear()}-${String(m.getMonth()+1).padStart(2,"0")}`}),[No,jo]=o.useState(0),[pa,Wa]=o.useState(!1),[Yr,$a]=o.useState(!1),[Kn,Mo]=o.useState(!1),yi=o.useRef(null),[qs,Ys]=o.useState(!0),[Aa,as]=o.useState(!0),[Cs,Do]=o.useState(!0),[Zs,_s]=o.useState(!0),[Js,qn]=o.useState(!0),[Fa,Gr]=o.useState(!1),[rl,oa]=o.useState(null),Fn=o.useRef(!1),vo=o.useRef(null),[nl,ud]=o.useState(ck),[Ea,Sc]=o.useState(!1),[Na,Ca]=o.useState(!1),[ss,os]=o.useState(!1),[Lo,$s]=o.useState(!1),[Ac,Hi]=o.useState(!1),[Cc,_c]=o.useState(!1),[Ic,al]=o.useState("default"),[_a,Zr]=o.useState("execution"),[sl,ja]=o.useState([]),[Kr,Ua]=o.useState(""),[fa,Jo]=o.useState(""),[ol,O]=o.useState(new Set),[j,xt]=o.useState(null),[Et,At]=o.useState(null),[De,Fs]=o.useState({}),[er,Yn]=o.useState(null),[Oo,ma]=o.useState(null),[Is,gn]=o.useState(""),[il,ki]=o.useState(""),[Mu,vi]=o.useState(""),[Qo,Xo]=o.useState(""),[Ig,wi]=o.useState(!1),pd=o.useRef({taskId:null,attachments:[]}),dn=o.useMemo(()=>Xl(new Date),[]),xn=String(Dr||"").trim(),{taskHeaderQuickFilter:is,toggleTaskHeaderQuickFilter:Ff,clearTaskHeaderQuickFilter:Uf}=tq({authUserId:xn,workspaceId:at,taskScope:It}),zf=o.useRef(new Map),fd=o.useRef(new Map),[Du,Hf]=o.useState(()=>HQ.map(m=>m.value)),[Lu,Vf]=o.useState(()=>VQ.map(m=>m.value)),[Ou,Gf]=o.useState("updated"),[Bu,Kf]=o.useState("desc"),[Wu,qf]=o.useState([]),[$u,Fu]=o.useState(""),[Uu,Yf]=o.useState(null),[zu,Zf]=o.useState({}),[cl,md]=o.useState(0),[Hu,Tc]=o.useState(null),[ll,ei]=o.useState(null),[xc,Bo]=o.useState(null),[hd,Vi]=o.useState(null),[gd,Vu]=o.useState({}),[Jf,yd]=o.useState(0),Rc=o.useRef(null),[bi,Qf]=o.useState({}),Wo=o.useRef(!1),$o=o.useRef(null),ti=o.useRef(null),Pc=o.useRef(null),kd=o.useRef(new Set);o.useEffect(()=>{pd.current={taskId:U||null,attachments:he}},[U,he]);const Si=o.useCallback(m=>{const A=U||null,B=pd.current,Se=B.taskId===A?B.attachments:he,Oe=m(Se);pd.current={taskId:A,attachments:Oe},ot(Oe),We(!0),A&&E(A,{attachments:Oe}).then(jt=>{const Ir=pd.current;jt!==!1&&Ir.taskId===A&&Ir.attachments===Oe&&We(!1)}).catch(()=>{})},[he,U,E,ot,We]),Ai=o.useMemo(()=>{const m={},A=String(at||"").trim();return Ut==="cloud"&&A&&A!=="default"&&(m["x-taskforce-workspace-id"]=A),m},[Ut,at]),Ts=o.useMemo(()=>zq({runtimeMode:Ut,workspaceId:at,userId:xn}),[at,xn,Ut]),vd=o.useRef(Ts),dl=vd.current===Ts,xs=dl?xc:null,wd=dl?hd:null,Ci=o.useMemo(()=>`taskforce:task-origin-workspace-module:${Ts}`,[Ts]),Gu=o.useMemo(()=>Ut==="cloud"?ft:br,[ft,br,Ut]),wo=o.useRef(!1),Ku=o.useRef(!1),bd=o.useCallback(m=>{const A=String(m||"").trim();if(!(!A||typeof window>"u")){wo.current=!0;try{window.sessionStorage.setItem(Ci,A)}catch{}}},[Ci]),ri=o.useCallback(()=>{if(wo.current=!1,!(typeof window>"u"))try{window.sessionStorage.removeItem(Ci)}catch{}},[Ci]);o.useEffect(()=>{$o.current=xc},[xc]),o.useEffect(()=>{ti.current=hd},[hd]),o.useEffect(()=>{vd.current!==Ts&&(vd.current=Ts,$o.current=null,ti.current=null,Pc.current=null,Bo(null),Vi(null))},[Ts]);const Fo=o.useMemo(()=>({[bf]:du({featureKey:bf}),[wf]:du({featureKey:wf}),[og]:du({featureKey:og}),[ql]:du({featureKey:ql}),[ig]:du({featureKey:ig}),[cg]:du({featureKey:cg})}),[Ut]),ni=o.useMemo(()=>CQ({featureAccess:Fo}),[Fo]),Sr=o.useMemo(()=>ES(k,ni),[k,ni]),Sd=Kn||Sr==="planning";o.useEffect(()=>{Sd&&e.ensureArchiveHydrated(!0)},[Sd,e.ensureArchiveHydrated,at]);const[Us,Gi]=o.useState(!1),[ai,Ki]=o.useState(!1),[Xf,Ad]=o.useState(null),[Cd,qu]=o.useState(null),em=o.useCallback(m=>{qu(m)},[]),ul=o.useCallback(m=>{const A=String(m.agentId||"").trim(),B=String(m.conversationId||"").trim();Bs(A),Xr(B),A&&An(Se=>{if(B)return Se[A]===B?Se:{...Se,[A]:B};if(!Se[A])return Se;const Oe={...Se};return delete Oe[A],Oe})},[An,Xr,Bs]),_i=Fo[bf]?.allowed??!1,Ec=Fo[wf]?.allowed??!1,pl=Fo[ql]?.allowed??!1,Yu="Documents is not available in this build yet.",Zu="Annotate is not available in this build yet.",bo=o.useCallback(m=>{if(f!=="add"){m();return}wn(()=>{$a(!1),I(),p("tasks"),m()})},[f,wn,I,p]);o.useEffect(()=>{const m=A=>{const B=A,Se=B.detail?.fsPath,Oe=String(B.detail?.assetId||"").trim()||null;if(!(!Se&&!Oe)){if(B.preventDefault(),!_i){dt(Yu,"error");return}bo(()=>{bd(B.detail?.taskId),Tc(Se||null),ei(Oe),v("docs")})}};return window.addEventListener("taskforce:open-markdown-document",m),()=>{window.removeEventListener("taskforce:open-markdown-document",m)}},[_i,Yu,bo,dt,bd,v]),o.useEffect(()=>{Sr!==k&&v(Sr)},[k,Sr,v]),o.useEffect(()=>{Sr==="docs"&&_i||(Tc(null),ei(null))},[_i,Sr]),o.useEffect(()=>{if(!Ku.current&&!(Sr!=="docs"&&Sr!=="annotate")&&(Ku.current=!0,!(wo.current||typeof window>"u")))try{if(!String(window.sessionStorage.getItem(Ci)||"").trim())return;window.sessionStorage.removeItem(Ci),v("tasks")}catch{}},[Sr,v,Ci]),o.useEffect(()=>{Ku.current=!1,wo.current=!1},[Ci]);const Ju=o.useCallback(m=>{typeof m.scheduleShowWeekends=="boolean"&&yo(m.scheduleShowWeekends),typeof m.scheduleShowBacklog=="boolean"&&ko(m.scheduleShowBacklog),typeof m.scheduleOnlyExpired=="boolean"&&Gn(m.scheduleOnlyExpired),typeof m.scheduleSidebarOpen=="boolean"&&sn(m.scheduleSidebarOpen),typeof m.scheduleSelectedDate=="string"&&ns(m.scheduleSelectedDate),typeof m.scheduleCalendarMonth=="string"&&Ks(m.scheduleCalendarMonth),typeof m.scheduleScrollLeft=="number"&&jo(m.scheduleScrollLeft),typeof m.showFilters=="boolean"&&Wa(m.showFilters),Array.isArray(m.documentTypeFilters)&&Hf(m.documentTypeFilters),Array.isArray(m.documentAttachmentFilters)&&Vf(m.documentAttachmentFilters),(m.documentSortField==="updated"||m.documentSortField==="reference"||m.documentSortField==="name"||m.documentSortField==="size"||m.documentSortField==="created")&&Gf(m.documentSortField),(m.documentSortOrder==="asc"||m.documentSortOrder==="desc")&&Kf(m.documentSortOrder),Array.isArray(m.documentPinnedDocIds)&&qf(m.documentPinnedDocIds),typeof m.documentSearchQuery=="string"&&Fu(m.documentSearchQuery),(typeof m.documentSelectedDocId=="string"||m.documentSelectedDocId===null)&&Yf(m.documentSelectedDocId),Zf(m.documentScrollByDocId&&typeof m.documentScrollByDocId=="object"?m.documentScrollByDocId:{}),typeof m.documentListScrollTop=="number"&&md(m.documentListScrollTop),typeof m.planningDrawerOpen=="boolean"&&Mo(m.planningDrawerOpen),typeof m.documentTrayOpen=="boolean"&&Ys(m.documentTrayOpen),typeof m.imageTrayOpen=="boolean"&&as(m.imageTrayOpen),typeof m.agentTrayOpen=="boolean"&&Do(m.agentTrayOpen),typeof m.taskforceAgentRosterTrayOpen=="boolean"&&_s(m.taskforceAgentRosterTrayOpen),typeof m.taskforceAgentDrawerOpen=="boolean"&&Gi(m.taskforceAgentDrawerOpen),typeof m.taskforceAgentPanelCollapsed=="boolean"&&Ki(m.taskforceAgentPanelCollapsed),typeof m.planningTreeCollapsed=="boolean"&&Sc(m.planningTreeCollapsed),typeof m.planningPrimaryCollapsed=="boolean"&&Ca(m.planningPrimaryCollapsed),typeof m.planningSecondaryCollapsed=="boolean"&&os(m.planningSecondaryCollapsed),$s(!!m.planningFavoritesSectionCollapsed),Hi(!!m.planningInitiativesSectionCollapsed),_c(!!m.planningWorkstreamsSectionCollapsed),(m.planningNavigatorSort==="default"||m.planningNavigatorSort==="title"||m.planningNavigatorSort==="owner"||m.planningNavigatorSort==="progress")&&al(m.planningNavigatorSort),Zr(OJ(m.planningTaskArrangeMode)),ja(Array.isArray(m.planningFavorites)?m.planningFavorites:[]),Array.isArray(m.planningExpandedInitiativeIds)&&O(new Set(m.planningExpandedInitiativeIds)),m.planningDrawerDetail!==void 0&&xt(m.planningDrawerDetail),(typeof m.planningNestedWorkstreamDetailId=="string"||m.planningNestedWorkstreamDetailId===null)&&At(m.planningNestedWorkstreamDetailId);const A=m.annotatedTarget&&typeof m.annotatedTarget=="object"?m.annotatedTarget:null,B=A&&typeof m.annotatedSessionId=="string"?m.annotatedSessionId:null;FU({currentTarget:$o.current,currentSessionId:ti.current,lastHydratedIdentity:Pc.current})&&($o.current=A,ti.current=B,Pc.current=KC(A,B),Bo(A),Vi(B)),Vu(m.annotatedViewportByContextKey&&typeof m.annotatedViewportByContextKey=="object"?m.annotatedViewportByContextKey:{})},[]),Qu=o.useMemo(()=>({scheduleShowWeekends:Ba,scheduleShowBacklog:Ss,scheduleOnlyExpired:Bt,scheduleSidebarOpen:$n,scheduleSelectedDate:Sa,scheduleCalendarMonth:As,scheduleScrollLeft:No,showFilters:pa,documentTypeFilters:Du,documentAttachmentFilters:Lu,documentSortField:Ou,documentSortOrder:Bu,documentPinnedDocIds:Wu,documentSearchQuery:$u,documentSelectedDocId:Uu,documentScrollByDocId:zu,documentListScrollTop:cl,documentTrayOpen:qs,imageTrayOpen:Aa,agentTrayOpen:Cs,taskforceAgentRosterTrayOpen:Zs,taskforceAgentDrawerOpen:Us,taskforceAgentPanelCollapsed:ai,planningDrawerOpen:Kn,planningTreeCollapsed:Ea,planningPrimaryCollapsed:Na,planningSecondaryCollapsed:ss,planningFavoritesSectionCollapsed:Lo,planningInitiativesSectionCollapsed:Ac,planningWorkstreamsSectionCollapsed:Cc,planningNavigatorSort:Ic,planningTaskArrangeMode:_a,planningFavorites:sl,planningExpandedInitiativeIds:Array.from(ol),planningDrawerDetail:j,planningNestedWorkstreamDetailId:Et,annotatedTarget:xs,annotatedSessionId:wd,annotatedViewportByContextKey:gd}),[Ba,Ss,Bt,$n,Sa,As,No,pa,Du,Lu,Ou,Bu,Wu,$u,Uu,zu,cl,qs,Aa,Cs,Zs,Us,ai,Kn,Ea,Na,ss,Lo,Ac,Cc,Ic,_a,sl,ol,j,Et,xs,wd,gd]);o.useEffect(()=>{ja([])},[Ts]);const{ready:_d}=Qq({currentWorkspaceId:at,loadKey:Ts,enabled:Ut!=="cloud"||ft,headers:Ai,remotePlanningFavoritesAuthoritative:!!xn&&xn!=="anonymous",useCloudProxy:Ut==="local"&&!!xn&&xn!=="anonymous",snapshot:Qu,onApplyState:Ju});o.useEffect(()=>{h==="schedule"&&sn(!0)},[h]);const{showArchive:qi,setShowArchive:fl,fetchArchive:Tg,filteredArchive:Xu}=e,ml=o.useMemo(()=>Xu.map(m=>({...m,isArchived:!0})),[Xu]),cs=o.useMemo(()=>e.archivedTasks.map(m=>({...m,isArchived:!0})),[e.archivedTasks]),si=o.useMemo(()=>[...e.searchAgnosticTasks,...cs],[cs,e.searchAgnosticTasks]),xg=o.useCallback(m=>{const A=String(m||"").trim();if(!A)return"";const B=si.find(Se=>Se.id===A);return hs(B)||""},[si]),Rg=o.useCallback(m=>{const A=String(m||"").trim();if(!A)return"";const B=String(bi[A]||"").trim();if(B)return B;for(const Se of si)for(const Oe of Se.attachments||[]){if(!Oe||typeof Oe!="object"||String(Oe.assetId||"").trim()!==A)continue;const jt=Nf({referenceNumber:typeof Oe.referenceNumber=="number"?Oe.referenceNumber:null,referenceLabel:String(Oe.referenceLabel||"").trim()||null});if(jt)return jt}return""},[si,bi]);o.useEffect(()=>{const m=A=>{const B=A,Se=Zb(B.detail,si);if(Se){if(B.preventDefault(),!Ec){dt(Zu,"error");return}bo(()=>{$o.current=Se;const Oe=String(Se.sessionId||"").trim()||null;ti.current=Oe,Bo(Se),Vi(Oe),yd(jt=>jt+1),bd(Se.taskId),v("annotate")})}};return window.addEventListener("taskforce:open-annotated-attachment",m),()=>{window.removeEventListener("taskforce:open-annotated-attachment",m)}},[si,Ec,Zu,bo,dt,bd,v]),o.useEffect(()=>{if(!xs)return;const m=Zb(xs,si);m&&(m.taskReferenceLabel===xs.taskReferenceLabel&&m.imageReferenceLabel===xs.imageReferenceLabel||Bo(m))},[si,xs]),o.useEffect(()=>{const m=$o.current,A=String(m?.assetId||"").trim();if(!A)return;const B=String(bi[A]||"").trim();B&&B!==String(m?.imageReferenceLabel||"").trim()&&Bo(Se=>!Se||String(Se.assetId||"").trim()!==A?Se:{...Se,imageReferenceLabel:B})},[bi,xs]),o.useEffect(()=>{if(!Gu)return;const A=String(xs?.assetId||"").trim();if(!A||kd.current.has(A)||String(bi[A]||"").trim())return;let B=!1;kd.current.add(A);const Se=String(at||"default").trim()||"default",Oe=new URLSearchParams({workspaceId:Se});return(async()=>{try{const Ir=await fetch(`/api/taskforce/annotated-attachments/images/${encodeURIComponent(A)}?${Oe.toString()}`,{method:"GET",credentials:"include",headers:Ai});if(!Ir.ok)return;const Or=await Ir.json().catch(()=>({})),Ma=String(Or?.target?.imageReferenceLabel||"").trim();if(!Ma||B)return;Qf(fn=>fn[A]===Ma?fn:{...fn,[A]:Ma})}catch{}finally{kd.current.delete(A)}})(),()=>{B=!0}},[Gu,bi,at,xs,Ai]);const Uo=o.useMemo(()=>e.deletedTasks.map(m=>({...m.taskSnapshot,isDeleted:!0,deletedRecordId:m.id,deletedAt:m.deletedAt,deletedExpiresAt:BC(m.deletedAt)})),[e.deletedTasks]),Ii=o.useMemo(()=>{const m=new Map;return e.deletedTasks.forEach(A=>{m.set(A.taskSnapshot.id,A)}),m},[e.deletedTasks]),Id=o.useMemo(()=>{const m=Uo,A=bg(st),B={categories:g,types:ge,priorities:_e,assigneeOptions:e.assigneeOptions,taxonomies:qe},Se=g.every(fn=>Lt.includes(fn.value)),Oe=ge.every(fn=>Ee.includes(fn.value)),jt=new Set(lt.map(fn=>String(fn))),Ir=_e.every(fn=>jt.has(String(fn.value))),Or=new Set(M.map(fn=>String(fn))),Ma=Ui.every(fn=>Or.has(String(fn.value)));return m.filter(fn=>{const Vc=Vh(fn,A,B),nu=Se||Lt.includes(fn.category),au=Oe||Ee.includes(fn.type||po),Bm=Ir||jt.has(String(fn.priority)),Wm=Ma||Or.has(String(fn.status)),$m=nt.length===0||nt.includes(fn.assignee||"unassigned");return Vc&&nu&&au&&Bm&&Wm&&$m})},[g,ge,Uo,nt,Lt,lt,M,Ee,_e,st]),Td=o.useMemo(()=>[...e.tasks,...cs,...Uo],[cs,Uo,e.tasks]),ep=o.useMemo(()=>{const m=g.filter(B=>!B.disabled).map(B=>({value:B.value,label:B.label})),A=g.filter(B=>B.disabled&&Td.some(Se=>Se.category===B.value)).map(B=>({value:B.value,label:`${B.label} (Legacy)`}));return[...m,...A]},[g,Td]),tp=o.useMemo(()=>{const m=ge.filter(B=>B.status!=="retired").map(B=>({value:B.value,label:B.label})),A=ge.filter(B=>B.status==="retired"&&Td.some(Se=>(Se.type||po)===B.value)).map(B=>({value:B.value,label:`${B.label} (Retired)`}));return[...m,...A]},[ge,Td]),rp=o.useCallback(m=>is?m.filter(A=>rq(A,is,xn,dn)):m,[xn,is,dn]),Yi=o.useMemo(()=>rp(e.filteredTasks),[rp,e.filteredTasks]),Nc=o.useMemo(()=>It==="archived"?ml:It==="deleted"?Id:qi?[...Yi,...ml]:Yi,[ml,Id,Yi,qi,It]),xd=o.useMemo(()=>It==="open"?is?Yi:e.tasks.filter(m=>!m.isArchived):Nc,[Nc,e.tasks,Yi,is,It]),np=o.useMemo(()=>new Set(Nc.map(m=>m.id)),[Nc]),ap=o.useMemo(()=>It==="archived"?cs:It==="deleted"?Uo:qi?[...e.tasks,...cs]:e.tasks,[cs,Uo,e.tasks,qi,It]),Zi=o.useMemo(()=>{const m=new Map;for(const A of cs)m.set(A.id,A);for(const A of Uo)m.set(A.id,A);for(const A of e.tasks)m.set(A.id,A);return Array.from(m.values())},[cs,Uo,e.tasks]),Ji=o.useMemo(()=>{const m=new Map;return Zi.forEach(A=>m.set(A.id,A)),m},[Zi]),Rd=o.useMemo(()=>{const m=new Map;Dt.forEach(Se=>{m.set(String(Se.value),Se.label)});const A=String(Dr||"").trim(),B=String(bn||en||"").trim();return A&&B&&m.set(A,B),m},[Dt,bn,en,Dr]),Ot=o.useMemo(()=>{const m=new Map;e.workspaceTaskRelationships.forEach(pt=>{if(pt.deletedAt||pt.kind!=="dependency")return;const jr=m.get(pt.sourceTaskId)||[];jr.push(pt.targetTaskId),m.set(pt.sourceTaskId,jr)});const A=jq(e.tasks,cs),B=new Map(A.map(pt=>[pt.id,pt])),Se=pt=>{const jr=m.get(pt)||[];if(jr.length===0)return"ready";let Pn=!1;for(const Ni of jr){const ji=B.get(Ni);if(!ji||_o(ji.status).value==="cancelled"){Pn=!0;continue}if(_o(ji.status).value!=="done")return"blocked"}return Pn?"invalid":"ready"},Oe=A,jt=A,Ir=(pt,jr)=>({progressPercent:pt>0?Math.round(jr/pt*100):0,taskCount:pt,completedTaskCount:jr}),Or=pt=>{const jr={task:0,"on-hold":0,"in-progress":0,review:0,done:0,cancelled:0};return pt.forEach(Pn=>{jr[_o(Pn.status).value]+=1}),jr},Ma=pt=>{const jr=Or([]);return pt.forEach(Pn=>{Object.entries(Pn.statusCounts||{}).forEach(([Ni,ji])=>{jr[Ni]+=Number(ji)||0})}),jr},fn=kQ({taskScope:It,summaryCount:e.planningBootstrapTaskSummaries.length,loadingTasks:e.loadingTasks,activeTaskCount:e.tasks.length,archiveHydrated:e.archiveHydratedWorkspaceId===at}),Vc=new Map,nu=new Map,au=new Map;fn?e.planningBootstrapTaskSummaries.forEach(pt=>{const jr=(pt.tasks||[]).map(Pn=>({...Pn,prerequisiteTaskIds:m.get(Pn.id)||[],dependencyState:Se(Pn.id)}));Vc.set(pt.workstreamId,{...pt,tasks:jr}),nu.set(pt.workstreamId,jr),au.set(pt.workstreamId,Or(jr))}):(Oe.forEach(pt=>{const jr=String(pt.workstreamId||"").trim();if(!jr)return;const Pn=Vc.get(jr)||{workstreamId:jr,taskCount:0,completedTaskCount:0,tasks:[]};Pn.taskCount+=1,(pt.status==="done"||pt.status==="cancelled")&&(Pn.completedTaskCount+=1);const Ni=au.get(jr)||Or([]);Ni[_o(pt.status).value]+=1,au.set(jr,Ni),Vc.set(jr,Pn)}),jt.forEach(pt=>{const jr=String(pt.workstreamId||"").trim();if(!jr)return;const Pn=nu.get(jr)||[];Pn.push({id:pt.id,referenceNumber:pt.referenceNumber??null,localReferenceNumber:pt.localReferenceNumber??null,referenceLabel:pt.referenceLabel,title:pt.title,createdAt:pt.createdAt,status:pt.status||null,priority:Number(pt.priority)||0,workstreamOrder:pt.workstreamOrder??null,prerequisiteTaskIds:m.get(pt.id)||[],dependencyState:Se(pt.id),assignee:pt.assignee||null,attachmentCount:Array.isArray(pt.attachments)?pt.attachments.length:0,isArchived:!!pt.isArchived}),nu.set(jr,Pn)}));const Bm=new Map,Wm=new Map,$m=new Map,Iy=new Map,aT=pt=>{const jr=Vc.get(pt.id),Pn=nu.get(pt.id)||jr?.tasks||[],Ni=Ir(jr?.taskCount||0,jr?.completedTaskCount||0),ji=Mq({isArchived:!!pt.isArchived,tasks:Pn,dataReady:!fn}),Fm={id:pt.id,referenceNumber:pt.referenceNumber??null,title:pt.title,description:String(pt.description||"").trim()||void 0,ownerId:pt.ownerId?String(pt.ownerId):null,ownerLabel:pt.ownerId?Rd.get(String(pt.ownerId))||String(pt.ownerId):null,...Ni,statusCounts:au.get(pt.id)||Or([]),initiativeId:pt.initiativeId||null,commentCount:Array.isArray(pt.comments)?pt.comments.length:0,comments:Array.isArray(pt.comments)?pt.comments:[],activity:Array.isArray(pt.activity)?pt.activity:[],entityEvents:Array.isArray(pt.entityEvents)?pt.entityEvents:[],attachmentCount:Array.isArray(pt.attachments)?pt.attachments.length:0,attachments:Array.isArray(pt.attachments)?pt.attachments:[],isArchived:!!pt.isArchived,archiveReady:ji.archiveReady,archiveActiveTaskCount:ji.activeTaskCount,tasks:Pn};if(Bm.set(pt.id,Pn.map(Gc=>Gc.id)),pt.initiativeId){Wm.set(pt.id,pt.initiativeId);const Gc=Iy.get(pt.initiativeId)||[];Gc.push(Fm),Iy.set(pt.initiativeId,Gc)}return Fm},Ty=e.workstreams.map(aT),sT=Ty.filter(pt=>tg(It,!!pt.isArchived)),xy=e.initiatives.map(pt=>{const jr=Iy.get(pt.id)||[],Pn=jr.filter(Up=>tg(It,!!Up.isArchived)),Ni=jr.reduce((Up,Ry)=>Up+Ry.taskCount,0),ji=jr.reduce((Up,Ry)=>Up+Ry.completedTaskCount,0),Fm=Ir(Ni,ji),Gc=Dq({isArchived:!!pt.isArchived,workstreams:jr,dataReady:!fn});return{id:pt.id,referenceNumber:pt.referenceNumber??null,title:pt.title,description:String(pt.description||"").trim()||void 0,ownerId:pt.ownerId?String(pt.ownerId):null,ownerLabel:pt.ownerId?Rd.get(String(pt.ownerId))||String(pt.ownerId):null,...Fm,statusCounts:Ma(jr),workstreamCount:Pn.length,workstreams:Pn,allWorkstreams:jr,commentCount:Array.isArray(pt.comments)?pt.comments.length:0,comments:Array.isArray(pt.comments)?pt.comments:[],activity:Array.isArray(pt.activity)?pt.activity:[],entityEvents:Array.isArray(pt.entityEvents)?pt.entityEvents:[],attachmentCount:Array.isArray(pt.attachments)?pt.attachments.length:0,attachments:Array.isArray(pt.attachments)?pt.attachments:[],isArchived:!!pt.isArchived,archiveReady:Gc.archiveReady,archiveActiveTaskCount:Gc.activeTaskCount,archiveActiveWorkstreamCount:Gc.activeWorkstreamCount}}),{initiatives:Ow,standaloneWorkstreams:oT,initiativeById:iT,workstreamById:cT}=nq(xy,sT,It),lT=Ty.filter(pt=>!pt.initiativeId);return Ow.forEach(pt=>{$m.set(pt.id,pt.workstreams.flatMap(jr=>(jr.tasks||[]).map(Pn=>Pn.id)))}),{initiatives:Ow,standaloneWorkstreams:oT,allInitiatives:xy,allStandaloneWorkstreams:lT,allInitiativeById:new Map(xy.map(pt=>[pt.id,pt])),allWorkstreamById:new Map(Ty.map(pt=>[pt.id,pt])),workstreamTaskIds:Bm,workstreamInitiativeIds:Wm,initiativeTaskIds:$m,workstreamById:cT,initiativeById:iT}},[cs,at,e.archiveHydratedWorkspaceId,Rd,e.initiatives,e.loadingTasks,e.planningBootstrapTaskSummaries,e.workspaceTaskRelationships,e.tasks,e.workstreams,It]),tm=o.useMemo(()=>Ot.initiatives.map(m=>{const A=fs(m);return{value:m.id,label:A||m.title}}),[Ot.initiatives]),sp=o.useMemo(()=>{const m=(Oe,jt)=>Oe.title.localeCompare(jt.title,void 0,{sensitivity:"base"}),A=Array.from(Ot.allInitiativeById.values()).filter(Oe=>!Oe.isArchived).map(Oe=>({id:Oe.id,referenceLabel:fs(Oe)||Oe.id,title:Oe.title,meta:`${Oe.workstreamCount||0} workstream${Oe.workstreamCount===1?"":"s"}`})).sort(m),B=Array.from(Ot.allWorkstreamById.values()).filter(Oe=>!Oe.isArchived).map(Oe=>({id:Oe.id,referenceLabel:Io(Oe)||Oe.id,title:Oe.title,meta:Oe.initiativeId?`In ${Ot.allInitiativeById.get(Oe.initiativeId)?.title||"another initiative"}`:"Standalone workstream"})).sort(m),Se=Zi.filter(Oe=>!Oe.isArchived&&!Oe.isDeleted).map(Oe=>({id:Oe.id,referenceLabel:hs(Oe)||Oe.id,title:Oe.title,meta:Oe.workstreamId?`In ${Ot.allWorkstreamById.get(Oe.workstreamId)?.title||"another workstream"}`:"Unassigned to a workstream"})).sort(m);return{initiatives:A,workstreams:B,tasks:Se}},[Zi,Ot.allInitiativeById,Ot.allWorkstreamById]),rm=o.useMemo(()=>{const A=(Kr?Ot.initiativeById.get(Kr)?.workstreams||[]:Ot.initiatives.flatMap(Se=>Se.workstreams)).map(Se=>{const Oe=Io(Se);return{value:Se.id,label:Oe||Se.title}}),B=Kr?[]:Ot.standaloneWorkstreams.map(Se=>{const Oe=Io(Se);return{value:Se.id,label:Oe||Se.title}});return[...A,...B]},[Ot.initiativeById,Ot.initiatives,Ot.standaloneWorkstreams,Kr]),Pd=o.useMemo(()=>fa?new Set(Ot.workstreamTaskIds.get(fa)||[]):Kr?new Set(Ot.initiativeTaskIds.get(Kr)||[]):null,[Ot.initiativeTaskIds,Ot.workstreamTaskIds,Kr,fa]),nm=o.useMemo(()=>{if(!j)return null;if(j.type==="initiative"){const A=Ot.allInitiativeById.get(j.id);return A?{type:"initiative",item:A}:null}const m=Ot.allWorkstreamById.get(j.id);return m?{type:"workstream",item:m}:null},[j,Ot.allInitiativeById,Ot.allWorkstreamById]),Ed=o.useMemo(()=>{if(!Et)return null;const m=Ot.allWorkstreamById.get(Et);return m?{type:"workstream",item:m}:null},[Et,Ot.allWorkstreamById]),am=o.useMemo(()=>Oo?.mode==="create"?{kind:"editor",editor:Oo}:Ed?{kind:"detail",detail:Ed}:null,[Ed,Oo]),Pg=j?De[`${j.type}:${j.id}`]:void 0,Eg=Et?De[`workstream:${Et}`]:void 0,Ng=sI(Ea,!!(nm||er),Na,!!am,ss),[jg,op]=o.useState(Ng),sm=o.useMemo(()=>{if(!Qo.trim())return null;const m=Ot.allInitiativeById.get(Qo);return m||Mk(Ot.allInitiatives,Qo)},[Qo,Ot.allInitiativeById,Ot.allInitiatives]);o.useEffect(()=>{Kr&&!Ot.initiativeById.has(Kr)&&Ua(""),fa&&!Ot.workstreamById.has(fa)&&Jo("")},[Ot.initiativeById,Ot.workstreamById,Kr,fa]);const Qs=o.useMemo(()=>h==="schedule"?xd:Nc,[h,Nc,xd]),hl=o.useMemo(()=>h!=="schedule"||!Bt?Qs:Qs.filter(m=>{if(m.status==="done"||m.status==="cancelled")return!1;const B=!!m.scheduledDate&&m.scheduledDate<dn,Se=!!m.dueDate&&m.dueDate<dn;return B||Se}),[h,Bt,Qs,dn]),om=o.useMemo(()=>pS(hl,Pd),[hl,Pd]),Rs=$C(e.deletedTasks,om.map(m=>m.id),It==="deleted"),im=o.useMemo(()=>pS(ap,Pd),[ap,Pd]),Nd=o.useMemo(()=>Array.from(np),[np]),ip=o.useCallback(m=>{ns(m);const A=uf(m);A&&Ks(`${A.getFullYear()}-${String(A.getMonth()+1).padStart(2,"0")}`)},[]),jd=o.useCallback(m=>{h==="schedule"&&jo(m)},[h]),gl=o.useCallback(m=>{if(It==="deleted"){const A=Ii.get(m);if(!A)return;rt(A.id,A.taskId);return}kt(m)},[Ii,rt,kt,It]),cp=o.useCallback(m=>{if(It==="deleted"){const A=Ii.get(m);if(!A||!window.confirm("Permanently delete this task? This cannot be undone."))return;lr(A.id);return}wt(m)},[Ii,wt,lr,It]),Qi=o.useMemo(()=>h!=="schedule"?[]:Qs.filter(m=>{if(m.status==="done"||m.status==="cancelled")return!1;const B=!!m.scheduledDate&&m.scheduledDate<dn,Se=!!m.dueDate&&m.dueDate<dn;return B||Se}),[h,Qs,dn]),jc=o.useMemo(()=>h!=="schedule"?0:Qs.filter(m=>m.status==="done"||m.status==="cancelled"?!1:!!m.scheduledDate&&m.scheduledDate<dn).length,[h,Qs,dn]),yl=o.useMemo(()=>h!=="schedule"?0:Qs.filter(m=>m.status==="done"||m.status==="cancelled"?!1:!!m.dueDate&&m.dueDate<dn).length,[h,Qs,dn]),Mc=o.useMemo(()=>!xn||xn==="anonymous"?0:P.filter(m=>m.status==="done"||m.status==="cancelled"?!1:String(m.assignee||"").trim()===xn).length,[xn,P]),kl=o.useMemo(()=>!xn||xn==="anonymous"?0:P.filter(m=>m.status==="done"||m.status==="cancelled"||String(m.assignee||"").trim()!==xn?!1:!!m.dueDate&&m.dueDate<dn).length,[xn,P,dn]),lp=o.useMemo(()=>h!=="schedule"?[]:Qs.filter(m=>m.status==="done"||m.status==="cancelled"?!1:!!m.scheduledDate&&m.scheduledDate<dn),[h,Qs,dn]),vl=Qi,[wl,Md]=o.useState(!1),cm=()=>{wn(()=>{Ws()||(f==="add"&&un.length>0&&bs(),$a(!1),f==="add"&&I(),p("tasks"))})};o.useEffect(()=>{f!=="add"&&$a(!1)},[f]);const bl=o.useCallback(async(m,A,B)=>{m.status===A&&!B?.allowSameStatus||await K(m,A)},[K]),dp=o.useCallback(async(m,A)=>{const B=Ji.get(m);if(!B){dt("Task details are still loading.","info");return}await bl(B,A),await e.fetchPlanningEntities()},[bl,Ji,e.fetchPlanningEntities,dt]),Dd=o.useCallback(async(m,A)=>{await E(m,{assignee:A})!==!1&&await e.fetchPlanningEntities()},[E,e.fetchPlanningEntities]),Dc=o.useCallback(async m=>{const A=Ji.get(m);return A?A.isArchived?!0:A.status!=="done"&&A.status!=="cancelled"?(dt("Only completed or cancelled tasks can be archived from Planning.","error"),!1):Ue(A):(dt("Task details are still loading.","info"),!1)},[Ue,Ji,dt]),Mg=o.useCallback(async m=>{const A=await Dc(m);return A&&(await e.fetchPlanningEntities(),dt("Task archived","success")),A},[Dc,e.fetchPlanningEntities,dt]),up=o.useCallback(async m=>{const A=Ot.allWorkstreamById.get(m);if(!A?.archiveReady)return dt("This workstream is no longer ready to archive.","error"),!1;try{return await F_({workstream:A,archiveTask:Dc,archiveWorkstream:e.archiveWorkstream})?(dt("Completed tasks and workstream archived","success"),!0):(dt("Workstream archive stopped safely. Resolve any remaining tasks and retry.","error"),!1)}catch(B){return dt(B instanceof Error?`Workstream archive stopped safely: ${B.message}`:"Workstream archive stopped safely. Retry to archive the remaining items.","error"),!1}},[Dc,Ot.allWorkstreamById,e.archiveWorkstream,dt]),pp=o.useCallback(async m=>{const A=Ot.allInitiativeById.get(m);if(!A?.archiveReady)return dt("This initiative is no longer ready to archive.","error"),!1;try{return await Lq({initiativeId:A.id,workstreams:A.allWorkstreams||A.workstreams,archiveTask:Dc,archiveWorkstream:e.archiveWorkstream,archiveInitiative:e.archiveInitiative})?(dt("Completed tasks, workstreams, and initiative archived","success"),!0):(dt("Initiative archive stopped safely. Resolve any remaining tasks and retry.","error"),!1)}catch(B){return dt(B instanceof Error?`Initiative archive stopped safely: ${B.message}`:"Initiative archive stopped safely. Retry to archive the remaining items.","error"),!1}},[Dc,Ot.allInitiativeById,e.archiveInitiative,e.archiveWorkstream,dt]),lm=o.useCallback(async(m,A)=>{const B=m==="initiative"?Ot.allInitiativeById.get(A):Ot.allWorkstreamById.get(A);if(!B)return dt(`${m==="initiative"?"Initiative":"Workstream"} not found.`,"error"),!1;const Se=U_({entityType:m,isArchived:B.isArchived,taskCount:B.taskCount,completedTaskCount:B.completedTaskCount,archiveReady:B.archiveReady,activeWorkstreamCount:B.archiveActiveWorkstreamCount});if(Se.mode==="archived")return!0;if(Se.mode==="ready")return m==="initiative"?pp(A):up(A);if(Se.mode!=="empty")return dt(Se.mode==="blocked"?`Archive unavailable while active ${Se.remainingKind==="task"?"tasks":"workstreams"} remain.`:"Archive availability is still loading.","error"),!1;try{return m==="initiative"?await e.archiveInitiative(A):await e.archiveWorkstream(A),dt(`${m==="initiative"?"Initiative":"Workstream"} archived`,"success"),!0}catch(Oe){return dt(Oe instanceof Error?Oe.message:`Failed to archive ${m}.`,"error"),!1}},[pp,up,Ot.allInitiativeById,Ot.allWorkstreamById,e.archiveInitiative,e.archiveWorkstream,dt]),dm=o.useCallback(async(m,A)=>{try{return m==="initiative"?await e.unarchiveInitiative(A):await e.unarchiveWorkstream(A),dt(`${m==="initiative"?"Initiative":"Workstream"} unarchived`,"success"),!0}catch(B){return dt(B instanceof Error?B.message:`Failed to unarchive ${m}.`,"error"),!1}},[e.unarchiveInitiative,e.unarchiveWorkstream,dt]),fp=o.useCallback((m,A)=>{I();const B=eq(m,A,{categories:g});B.category&&ue(B.category),B.type&&Pe(B.type),typeof B.priority=="number"&&se(B.priority),typeof B.complexity=="number"&&W(B.complexity),B.assignee&&Y(B.assignee),B.status&&fe(B.status),B.scheduledDate&&q(B.scheduledDate),p("add")},[I,g,ue,Pe,se,W,fe,Y,q,p]);Q.useEffect(()=>{M&&!M.includes("done")&&R(m=>[...m,"done"])},[]);const[Dg,Xi]=o.useState(!1),[Ti,So]=o.useState(!1),[oi,ls]=o.useState(!1),Lc=o.useRef(!1),[mp,Ps]=o.useState(!1),[Sl,um]=o.useState(!1),[Al,ec]=o.useState(""),[Lg,hp]=o.useState(!1),[xi,pm]=o.useState(!1),[fm,Ld]=o.useState("members"),[Cl,Od]=o.useState(null),[mm,Bd]=o.useState("unknown"),[Og,gp]=o.useState(!1),[Bg,_l]=o.useState(null),[Wg,Xs]=o.useState(null),[$g,hm]=o.useState(!1),[yp,Fg]=o.useState([]),[Ug,gm]=o.useState(null),[kp,vp]=o.useState(""),[Wd,$d]=o.useState("member"),[eo,ia]=o.useState("read-write"),[ym,km]=o.useState(!1),[zg,Oc]=o.useState(null),[Bc,Hg]=o.useState(0),[Vg,vm]=o.useState(!1),[Gg,Kg]=o.useState([]),[qg,wm]=o.useState(!1),[ha,Wc]=o.useState(1),[Zn,to]=o.useState(null),[$c,tc]=o.useState(!1),[Fc,Il]=o.useState(null),[Fd,ii]=o.useState(!1),[ci,za]=o.useState(null),[Ud,li]=o.useState(!1),[bm,wp]=o.useState(null),[di,bp]=o.useState("month"),[zd,Sm]=o.useState(""),[Sp,zs]=o.useState(""),[Ia,rc]=o.useState(null),[Ap,Am]=o.useState(!1),[Cm,Hd]=o.useState(!1),[Cp,ro]=o.useState(null),[_p,no]=o.useState(null),_m=25,Ip=o.useRef(null),Uc=o.useRef(null),Vd=o.useRef({billing:!1,teamManagement:!1}),zc=o.useRef(null);o.useEffect(()=>{zc.current=Zn},[Zn]),o.useEffect(()=>{if(!Ti)return;const m=A=>{Ip.current?.contains(A.target)||So(!1)};return document.addEventListener("mousedown",m),()=>document.removeEventListener("mousedown",m)},[Ti]);const Im=Ut==="cloud"&&fr&&Vt,nc=Vt&&(Ut==="cloud"||$t),Tm=Ut==="local"&&Vt,xm=cr?.phase==="ready"&&cr.snapshot?.state.ownershipMode==="server"?cr.snapshot.workspace?.runner?.checkpoint?.checkpoint.syncEnabled:null,Tl=typeof xm=="boolean"?xm:or,{showSyncStatusModal:xl,showSyncEnableWarning:Rm,workspaceSyncError:Yg,syncControlBusy:Zg,openSyncStatusModal:Tp,closeSyncStatusModal:Rl,handleWorkspaceSyncToggle:ac,cancelSyncEnableWarning:xp,confirmSyncEnableWarning:Jg}=JQ({canManageWorkspaceSync:Tm,workspaceCloudSyncEnabled:Tl,saveWorkspaceCloudSyncSettings:on}),Rp=o.useMemo(()=>{const m=Lr.find(Se=>Se.id===at),A=String(m?.name||"").trim();if(A)return A;if(Ut==="local"){const Se=String(mr||"").trim();if(Se)return Se}return String(at||"").trim()||"Workspace"},[Lr,at,mr,Ut]),Gd=iI(nc,Cl),Pl=GQ(nc,Cl,mm),El=String(bn||"").trim(),ao=String(tn||"").trim(),sc=String(en||"").trim(),oc=El||sc,Qg=oc.length>0,Xg=sc.length>0,ey=o.useMemo(()=>OG({workspaceName:Rp,workspaceId:at,accountLabel:oc||sc,runtimeMode:Ut}),[sc,oc,at,Rp,Ut]),Kd=(oc||sc||"").trim(),Yd=Vt&&ft&&Kd.length>0?Kd.charAt(0).toUpperCase():"",Zd=ao,Pp=Vt&&ft&&Zd.length>0,Nl=String(Sp||ao).trim(),jl=String(Zn?.planName||Zn?.planId||"").trim(),Ep=jl.length>0,Ri=String(Zn?.workspaceId||Ye||at||"").trim(),ty=Ut==="cloud"?"CLOUD":"LOCAL",Pm=e.config?.apiBaseUrl||"",ry=o.useMemo(()=>iX(e.config?.cloudEnvironment,[String(e.config?.cloudBaseUrl||""),String(e.config?.cloudAuthBaseUrl||""),String(e.config?.apiBaseUrl||""),String(e.config?.baseUrl||"")]),[e.config?.cloudEnvironment,e.config?.cloudBaseUrl,e.config?.cloudAuthBaseUrl,e.config?.apiBaseUrl,e.config?.baseUrl]),Em=$t&&!ft;o.useEffect(()=>{oi&&!Lc.current&&(Sm(El),zs(ao),rc(null),ro(null),no(null)),Lc.current=oi},[ao,El,oi]);const Pi=o.useCallback(async m=>{const A=String(m||"").trim();if(!(!A||!$t))try{await fetch(Kt("/api/taskforce/auth/profile/avatar/discard"),{method:"POST",headers:{"Content-Type":"application/json"},credentials:"include",body:JSON.stringify({draftId:A})})}catch{}},[$t,Kt]),ny=o.useCallback(()=>{const m=Ia;ls(!1),Ps(!1),ro(null),no(null),rc(null),zs(ao),m&&Pi(m)},[ao,Pi,Ia]),ay=o.useCallback(async m=>{if(!m||!$t)return!1;if(!m.type.startsWith("image/"))return ro("Profile photo must be an image file."),no(null),!1;Am(!0),ro(null),no(null);try{const A=await Nq(m,{maxBytes:sX});if(A.exceededLimit){const fn=m.type==="image/gif"?"Animated GIF profile photos must be 5 MB or smaller.":"Profile photo must be 5 MB or smaller.";throw new Error(fn)}const B=A.file,Se=await fetch(Kt("/api/taskforce/auth/profile/avatar/init"),{method:"POST",headers:{"Content-Type":"application/json"},credentials:"include",body:JSON.stringify({originalName:B.name,mimeType:B.type,size:B.size})}),Oe=await Se.json().catch(()=>({}));if(!Se.ok||!Oe?.success||typeof Oe?.draftId!="string"||typeof Oe?.relativePath!="string")throw new Error(Oe?.error||"Failed to start avatar upload.");if(!(await fetch(Kt("/api/taskforce/auth/profile/avatar/upload"),{method:"POST",headers:{"Content-Type":B.type||"application/octet-stream","x-taskforce-avatar-draft-id":Oe.draftId},credentials:"include",body:B})).ok)throw new Error("Failed to upload avatar.");const Ir=await fetch(Kt("/api/taskforce/auth/profile/avatar/finalize"),{method:"POST",headers:{"Content-Type":"application/json"},credentials:"include",body:JSON.stringify({draftId:Oe.draftId,relativePath:Oe.relativePath})}),Or=await Ir.json().catch(()=>({}));if(!Ir.ok||!Or?.success||typeof Or?.draftId!="string")throw new Error(Or?.error||"Failed to finalize avatar upload.");const Ma=Ia;return rc(Or.draftId),zs(typeof Or?.avatarUrl=="string"?Or.avatarUrl:""),no(null),Ma&&Ma!==Or.draftId&&Pi(Ma),!0}catch(A){return ro(A instanceof Error?A.message:"Failed to upload profile photo."),!1}finally{Am(!1)}},[$t,Pi,Ia,Kt]),sy=o.useCallback(()=>{if(!Ia)return;const m=Ia;rc(null),zs(ao),no(null),ro(null),Pi(m)},[ao,Pi,Ia]),Nm=o.useCallback(()=>{const m=Ia;rc(null),zs(""),no(ao?"Profile photo will be removed when you save.":null),ro(null),m&&Pi(m)},[ao,Pi,Ia]),oy=o.useCallback(async()=>{const m=zd.trim();if(!m){ro("Display name is required."),no(null);return}Hd(!0),ro(null),no(null);const A=await Rr({displayName:m,avatarDraftId:Ia,clearAvatar:!Ia&&!Sp&&!!ao});if(!A.success){ro(A.error||"Failed to update profile."),Hd(!1);return}no("Profile updated."),rc(null),zs(""),Hd(!1),Ps(!1)},[ao,Ia,Sp,zd,Rr]),Hs=o.useCallback(()=>{const m={},A=String(Ri||"").trim();A&&(m["x-taskforce-workspace-id"]=A);const B=Cl||Ft;return(B==="owner"||B==="admin"||B==="member"||B==="read-only")&&(m["x-taskforce-workspace-role"]=B),m},[Ft,Ri,Cl]),jm=o.useCallback(m=>{const A=Vt,B=m==="account_menu"&&nc;Uc.current=tf(),Vd.current={billing:A,teamManagement:B},hr("account_surface_opened",{surface:m,expectsBilling:A,expectsTeamManagement:B}),!A&&!B&&(hr("account_surface_ready",{surface:m,durationMs:0,teamManagementVisible:!1,billingPlanId:null}),Uc.current=null)},[nc,Vt]),Ml=o.useCallback(m=>{const A=Vd.current;if(A[m]=!1,A.billing||A.teamManagement)return;const B=Uc.current;B!==null&&(hr("account_surface_ready",{surface:oi?"account_settings":Ti?"account_menu":"closed",durationMs:Math.round(tf()-B),teamManagementVisible:Pl,billingPlanId:String(Zn?.planId||"").trim()||null}),Uc.current=null)},[Zn?.planId,Pl,Ti,oi]),ui=o.useCallback(async m=>{const A=Kt(gS);if(!Vt)return to(null),Il(null),Od(null),Bd("unknown"),gp(!1),_l(null),yS(A,{identityKey:Dr}),Ml("billing"),Ml("teamManagement"),null;const B=tf();tc(!0),Il(null),gp(nc),_l(null);try{const Se=await vq(A,{identityKey:Dr,force:m?.force===!0}),Oe=Se?.workspaceRole==="owner"||Se?.workspaceRole==="admin"||Se?.workspaceRole==="member"||Se?.workspaceRole==="read-only"?Se.workspaceRole:null,jt=Se?.teamPlanMode==="team"||Se?.teamPlanMode==="personal"?Se.teamPlanMode:"unknown";return to(Se),Od(Oe),Bd(jt),_l(null),hr("account_profile_summary_resolved",{durationMs:Math.round(tf()-B),planId:String(Se?.planId||"").trim()||null,gate:String(Se?.gate||"").trim()||null,teamManagementAllowed:Se?.teamManagementAllowed===!0}),Se}catch(Se){const Oe=Se instanceof Error?Se.message:"Failed to load account summary.",jt=!!zc.current;return Il(Oe),jt?_l(null):(Od(null),Bd("unknown"),_l(Oe)),hr("account_profile_summary_failed",{durationMs:Math.round(tf()-B),error:Oe,preservedSummary:jt}),zc.current}finally{tc(!1),gp(!1),Ml("billing"),Ml("teamManagement")}},[Dr,nc,Vt,Ml,Kt]),iy=o.useCallback(m=>{to(m);const A=m?.workspaceRole==="owner"||m?.workspaceRole==="admin"||m?.workspaceRole==="member"||m?.workspaceRole==="read-only"?m.workspaceRole:null,B=m?.teamPlanMode==="team"||m?.teamPlanMode==="personal"?m.teamPlanMode:"unknown";Od(A),Bd(B)},[]),Np=o.useMemo(()=>Uk(Zn).allowReturnToApp,[Zn]),cy=o.useCallback(async()=>{const m=new URLSearchParams;m.set("screen","plans"),m.set("interval",di);const A=String(Zn?.planId||"").trim(),B=String(Zn?.planVersionId||"").trim();A&&m.set("planId",A),B&&m.set("planVersionId",B),a(`/?${m.toString()}`)},[Zn?.planId,Zn?.planVersionId,di,a]),Mm=o.useCallback(async()=>{za(null),wp(null),ii(!0);try{const m=await fetch(Kt("/api/taskforce/billing/portal-session"),{method:"POST",credentials:"include"}),A=await m.json().catch(()=>({}));if(!m.ok){za(String(A?.error||"Failed to create portal session."));return}const B=String(A?.url||"").trim();if(!B){za("Portal session did not return a redirect URL.");return}window.location.assign(B)}catch{za("Failed to open billing portal.")}finally{ii(!1)}},[Kt]),ly=o.useCallback(async()=>{za(null),wp(null),ii(!0);try{const m=String(Zn?.planVersionId||"").trim();if(!m){za("No active plan version is linked to this account.");return}const A=await fetch(Kt("/api/taskforce/billing/subscription"),{method:"POST",credentials:"include",headers:{"Content-Type":"application/json"},body:JSON.stringify({planVersionId:m,interval:di})}),B=await A.json().catch(()=>({}));if(!A.ok){za(String(B?.error||"Failed to update subscription interval."));return}wp("Subscription updated."),yS(Kt(gS),{identityKey:Dr}),await ui()}catch{za("Failed to update subscription interval.")}finally{ii(!1)}},[Zn?.planVersionId,Dr,di,ui,Kt]);o.useEffect(()=>{!Vt||!ft||ui()},[ft,Vt,ui]),o.useEffect(()=>{!oi&&!Ti||ui()},[ui,Ti,oi]);const Dl=o.useCallback(async()=>{if(Gd){hm(!0),Xs(null);try{const m=await fetch("/api/taskforce/admin/users",{method:"GET",credentials:"include",headers:Hs()}),A=await m.json().catch(()=>({}));if(!m.ok){Xs(A?.error||"Failed to load workspace users.");return}const B=Array.isArray(A?.users)?A.users:[],Se={owner:0,admin:1,member:2,"read-only":3},Oe=B.map(jt=>({userId:String(jt?.userId||""),email:String(jt?.email||""),displayName:typeof jt?.displayName=="string"?jt.displayName:null,role:jt?.role==="owner"||jt?.role==="admin"||jt?.role==="member"||jt?.role==="read-only"?jt.role:"member",permissionMode:jt?.permissionMode==="read-only"?"read-only":"read-write",status:String(jt?.status||"active"),disabled:jt?.disabled===!0}));Oe.sort((jt,Ir)=>{const Or=(Se[jt.role]??99)-(Se[Ir.role]??99);return Or!==0?Or:(jt.displayName||jt.email).localeCompare(Ir.displayName||Ir.email,void 0,{sensitivity:"base"})}),Fg(Oe)}catch{Xs("Failed to load workspace users.")}finally{hm(!1)}}},[Gd,Hs]),ic=o.useCallback(async m=>{if(!Gd)return;const A=Math.max(0,Math.floor(m));vm(!0),Xs(null);try{const B=A*_m,Se=await fetch(`/api/taskforce/admin/workspace-audit-logs?limit=${_m}&offset=${B}`,{method:"GET",credentials:"include",headers:Hs()}),Oe=await Se.json().catch(()=>({}));if(!Se.ok){Xs(Oe?.error||"Failed to load workspace audit log.");return}const jt=Array.isArray(Oe?.events)?Oe.events:[];Kg(jt.map(Or=>({id:String(Or?.id||""),action:String(Or?.action||""),actorUserId:String(Or?.actorUserId||""),actorRole:String(Or?.actorRole||""),createdAt:String(Or?.createdAt||Or?.ts||"")}))),Hg(A);const Ir=Math.max(1,Number(Oe?.pages||1));Wc(Ir),wm(A+1<Ir)}catch{Xs("Failed to load workspace audit log.")}finally{vm(!1)}},[Gd,Hs]),jp=o.useCallback(async()=>{await Promise.all([Dl(),ic(Bc)])},[Dl,ic,Bc]),T=o.useCallback((m="login")=>{const A=`${s.pathname}${s.search}${s.hash}`,B=!A||A==="/login"||!A.startsWith("/")?"/":A;So(!1),ls(!1),Rl(),a(`/login?mode=${m}&next=${encodeURIComponent(B)}`)},[Rl,s.hash,s.pathname,s.search,a]),te=o.useCallback(m=>{So(!1),hp(!1);const A=new URLSearchParams({step:"workspace"});m?.intent==="create-workspace"&&A.set("intent","create-workspace"),a(`/setup?${A.toString()}`,{replace:!0})},[a]),ne=o.useCallback(async()=>{if(Ud)return;if(li(!0),!Vt){try{d()}finally{li(!1)}return}const m=zc.current;if(m&&!Uk(m).allowReturnToApp){li(!1);return}d(),(async()=>{try{const A=await e.continueAfterCommercialOnboarding();if(!A.success){dt(A.error||"Unable to finish onboarding.","error"),A.destination==="login"&&a("/login",{replace:!0});return}A.destination==="setup"&&te()}finally{li(!1)}})()},[zc,d,Vt,a,te,Ud,e,dt]),ee=o.useCallback(()=>{if(l){ne();return}wn(()=>{ri(),v("tasks"),Mo(!1),xt(null),At(null),Yn(null),$a(!1),f==="add"&&I(),p("tasks"),(s.pathname!=="/"||s.search)&&a("/")})},[f,ri,wn,ne,l,s.pathname,s.search,a,I,p,v]),Ke=o.useCallback(m=>{Ff(m),Qt("open"),fl(!1),v("tasks"),l&&d()},[d,l,v,fl,Qt,Ff]),et=o.useCallback(async m=>{if(!(!m||Sl)){if(Fa&&!Fn.current){oa(()=>()=>{et(m)});return}ec(""),um(!0);try{const A=await Nr(m);if(!A.success){if(A.code==="WORKSPACE_NOT_FOUND"||A.code==="WORKSPACE_ID_REQUIRED"){te();return}ec(A.error||"Failed to switch workspace.");return}await wr(!0),So(!1)}finally{um(!1)}}},[Nr,Sl,wr,te,Fa]),tt=o.useCallback(async()=>{So(!1),pm(!0),Ld("members"),((await ui())?.teamManagementAllowed??Pl)&&(await Dl(),await ic(0))},[Pl,ui,ic,Dl]),Wt=o.useCallback(async(m,A)=>{Xs(null),gm(m);try{const B=await A(),Se=await B.json().catch(()=>({}));if(!B.ok){Xs(Se?.error||"Team management action failed.");return}await jp()}catch{Xs("Team management action failed.")}finally{gm(null)}},[jp]),tr=o.useCallback(async()=>{const m=kp.trim();if(m){km(!0),Xs(null),Oc(null);try{const A=await fetch("/api/taskforce/admin/users/invite",{method:"POST",headers:{"Content-Type":"application/json",...Hs()},credentials:"include",body:JSON.stringify({workspaceId:Ri,email:m,role:Wd,permissionMode:Wd==="member"?eo:"read-write"})}),B=await A.json().catch(()=>({}));if(!A.ok){Xs(B?.error||"Failed to send invite.");return}vp(""),B?.inviteEmailSent===!1?Oc(`Invite created, but email delivery failed${B?.inviteEmailError?`: ${String(B.inviteEmailError)}`:"."}`):Oc("Invite sent."),await jp()}catch{Xs("Failed to send invite.")}finally{km(!1)}}},[at,jp,Hs,kp,eo,Wd]),Pr=o.useMemo(()=>st.trim().length>0,[st]),$r=o.useMemo(()=>yp.filter(m=>m.status==="invited"),[yp]),_r=o.useMemo(()=>{const m=Lt.length!==g.length,A=Ee.length!==ge.length,B=lt.length!==_e.length,Se=M.length!==Ui.length,Oe=nt.length!==Dt.length,jt=is!==null,Ir=Kr.length>0,Or=fa.length>0;return m||A||B||Se||Oe||jt||Ir||Or},[g.length,ge.length,Dt.length,nt.length,Lt.length,lt.length,M.length,Ee.length,_e.length,Kr,fa,is]),Rn=Sr,ca=o.useMemo(()=>_Q(Rn),[Rn]);o.useLayoutEffect(()=>{if(!Us&&f!=="add")return;const m=()=>{const Se=vo.current,Oe=Se?Math.ceil(Se.getBoundingClientRect().bottom):ck;ud(Math.max(ck,Oe))};m(),window.addEventListener("resize",m);const A=vo.current,B=typeof ResizeObserver<"u"?new ResizeObserver(m):null;return B&&A&&B.observe(A),()=>{window.removeEventListener("resize",m),B?.disconnect()}},[f,Us]),o.useEffect(()=>{pl||Gi(!1)},[pl]);const so=ca.moduleId==="tasks"&&_r,Es=Pr||_r,Mp=It==="archived"?cs.length:It==="deleted"?Uo.length:P.length,Dm=It==="archived"?ml.length:It==="deleted"?Id.length:Yi.length,Hc=Es?`${Dm}/${Mp}`:`${Mp}`,Lm=Es?`${It.charAt(0).toUpperCase()+It.slice(1)} tasks matching current filters`:It==="deleted"?"Trash tasks — automatically deleted after 90 days":`${It.charAt(0).toUpperCase()+It.slice(1)} tasks`,lI=Ut==="local"&&Vt,cc=o.useCallback(m=>{if(!m)return"Never";const A=new Date(m);return Number.isNaN(A.getTime())?"Never":A.toLocaleString()},[]),dI=o.useMemo(()=>cc(Tn),[cc,Tn]);o.useMemo(()=>cc(jn),[cc,jn]),o.useMemo(()=>cc(an),[cc,an]);const Zv=Yg||J||da||"None",lc=Xt(),Dp=cr?.snapshot?.permits.recoveryObligations||0,uI=o.useMemo(()=>LK({runtimeMode:Ut,isAuthenticated:Vt,workspaceSyncStatus:hn,workspaceCloudSyncEnabled:or,workspaceSyncSummary:ys,workspaceSyncRecommendedAction:Nn,workspaceSyncError:Zv,coordinatorRecoveryObligations:Dp,pushBlockedReason:lc.pushBlockedReason||null,pullBlockedReason:lc.pullBlockedReason||null,retryBlockedReason:lc.retryBlockedReason||null}),[Ut,Vt,hn,or,ys,Nn,Zv,Dp,lc.pushBlockedReason,lc.pullBlockedReason,lc.retryBlockedReason]),Ha=o.useMemo(()=>MK(cr),[cr]),Ei=Ha?.header||uI,dy=Ha?Ha.pendingLocalChanges:kr,pI=Ha?Ha.lastPullAt:jn,fI=Ha?Ha.lastPushAt:an,mI=Ha?Ha.lastSyncedAt:Tn,Jv=cc(pI),Qv=cc(fI),Xv=cc(mI),ew=Ha?Ha.busy:Sn,uy=cr?.snapshot?.state.ownershipMode||null,Lp=uy==="server"||uy==="browser-gateway"?uy:null,[py,tw]=o.useState(!1),hI=cr?.phase!=="ready"||!cr.snapshot||cr.snapshot.state.transitionState!=="idle"||cr.snapshot.permits.active>0||Dp>0,gI=o.useCallback(async()=>{if(!(!Lp||py)){tw(!0);try{const m=Lp==="server"?"browser-gateway":"server";await Wr(m),dt(m==="server"?"The local Taskforce server now owns background synchronization.":"This browser now owns background synchronization.","success")}catch(m){dt(m instanceof Error&&m.message.trim()?m.message:"Sync ownership could not be transferred.","error")}finally{tw(!1)}}},[Lp,py,dt,Wr]),rw=Ei.lastError,[Op,nw]=o.useState(Ei.status),yI=o.useMemo(()=>Ha?.diagnostics||fq({...lc,coordinatorRecoveryObligations:Dp}),[Ha,lc,Dp]),{syncRecentEvents:Ll,syncRecentEventsLoading:aw,syncRecentEventsError:sw,syncEventsListRef:kI,loadRecentSyncEvents:vI}=KQ({isOpen:xl,workspaceId:at,refreshKeys:[an,jn,Ds,hn]}),ow=Ei.actionable&&hn==="syncing"&&xr==="active"&&dy===0;o.useEffect(()=>{if(!ow){nw(Ei.status);return}const m=window.setTimeout(()=>{nw(Ei.status)},1200);return()=>window.clearTimeout(m)},[Ei.status,ow]);const wI=o.useMemo(()=>mq({syncRecentEvents:Ll,syncRecentEventsError:sw,syncRecentEventsLoading:aw}),[Ll,sw,aw]),iw=o.useMemo(()=>hq(Ll),[Ll]),bI=o.useMemo(()=>gq(Ll),[Ll]),cw=o.useMemo(()=>L_(Op),[Op]),Bp=o.useMemo(()=>pq(Op,Tl),[Tl,Op]),{workspaceSyncRepairBusy:fy,workspaceSyncRepairQueued:SI,workspaceSyncCopied:AI,handleCopySyncDetails:CI,handleQueueOrRunRepairSync:_I}=ZQ({currentWorkspaceId:at,syncStatusLabel:cw.label,workspaceSyncSummary:Ei.summary,workspaceSyncRecommendedAction:Ei.recommendedAction,formattedLastSyncTime:Xv,formattedLastPullTime:Jv,formattedLastPushTime:Qv,workspaceSyncDiagnostics:lc,workspaceSyncPendingChanges:dy,syncLastError:rw,workspaceSyncPhase:xr,referenceMismatchCount:iw,syncRecentEvents:Ll,loadRecentSyncEvents:vI,pushNotice:dt,resetWorkspaceSyncCursorAndPull:St,workspaceSyncBusy:ew,durableRepairQueueAvailable:Lp==="server"}),II=Ha?Ha.repairBusy:fy,TI=o.useMemo(()=>Ha?.stage||O_(xr,fy,Sn),[Ha,Sn,xr,fy]),lw=o.useMemo(()=>uf(Sa)||new Date,[Sa]),Ol=o.useMemo(()=>Jk(lw,u),[lw,u]),dc=o.useMemo(()=>{const m={mon:"",tue:"",wed:"",thu:"",fri:"",sat:"",sun:""};return NS.forEach(A=>{const B=FQ(A,u);m[A]=Xl(oI(Ol,B))}),m},[Ol,u]),dw=o.useCallback(m=>{const A=uf(m);if(!A)return dc.mon;const B=A.getDay();return dc[B===1?"mon":B===2?"tue":B===3?"wed":B===4?"thu":B===5?"fri":B===6?Ba?"sat":"fri":Ba?"sun":"fri"]||dc.mon},[dc,Ba]),xI=o.useCallback(async()=>{if(!(wl||vl.length===0)){Md(!0);try{for(const m of vl){const A=m.scheduledDate||m.dueDate||dn,B=dw(A);await E(m.id,{scheduledDate:B,scheduledWeekKey:UQ(B),orderInDay:null})}await wr(!0)}finally{Md(!1)}}},[wl,vl,dn,dw,E,wr]),RI=o.useCallback(async()=>{if(!(wl||Qi.length===0)){Md(!0);try{for(const m of Qi)await E(m.id,{scheduledDate:null,scheduledWeekKey:null,orderInDay:null});await wr(!0)}finally{Md(!1)}}},[wl,Qi,E,wr]),PI=o.useMemo(()=>Xh(Ol,{month:"short",day:"numeric",year:"numeric"},Cn),[Ol,Cn]),uw=o.useMemo(()=>{const B=(Ba?u==="sunday"?["sun","mon","tue","wed","thu","fri","sat"]:NS:["mon","tue","wed","thu","fri"]).map(Oe=>{const jt=uf(dc[Oe])||Ol,Ir=dc[Oe],Or=Oe==="sat"||Oe==="sun";return{value:Oe,label:`${$Q[Oe]} ${Xh(jt,{month:"short",day:"numeric"},Cn)}`,color:Or?"#1e3a8a":"#3b82f6",icon:"Calendar",date:Ir,isPast:Ir<dn,isSelected:Ir===Sa,isWeekend:Or}}),Se=lp.length>0;return[...Ss?[{value:"backlog",label:"Backlog",color:"#64748b",icon:"Inbox"}]:[],...Se?[{value:"expired",label:"Expired",color:"#ef4444",icon:"AlertTriangle"}]:[],...B]},[Ba,Ss,dc,Ol,lp.length,dn,Sa,u,Cn]),pw=o.useMemo(()=>{switch(h){case"category":return g;case"type":return(ge||[]).map(m=>({...m,icon:m.icon||Hh[m.value]?.icon,color:m.color||Hh[m.value]?.color}));case"priority":return _e;case"complexity":return[{value:1,label:"Tiny",icon:"Gauge",color:"#10b981"},{value:2,label:"Low",icon:"Gauge",color:"#14b8a6"},{value:3,label:"Medium",icon:"Gauge",color:"#3b82f6"},{value:4,label:"High",icon:"Gauge",color:"#8b5cf6"},{value:5,label:"Epic",icon:"Gauge",color:"#d946ef"}];case"assignee":return Dt.map(m=>({value:m.value,label:m.label,icon:m.icon==="HelpCircle"?"Circle":m.icon,color:m.color}));case"status":return[...Ui.filter(m=>m.value!=="done"&&m.value!=="cancelled"),{value:"completed",label:"Completed",icon:_o("done").icon,color:_o("done").color}];case"schedule":return uw;default:return g}},[h,g,ge,_e,Dt,uw]),EI=n.jsxs("div",{className:Zt.accountMenuWrap,ref:Ip,children:[n.jsx("button",{className:`tf-control-icon ${Zt.avatarBtn}`,onClick:()=>{So(m=>{const A=!m;return A?jm("account_menu"):(Uc.current=null,Vd.current={billing:!1,teamManagement:!1}),A})},title:Vt?"Account":"Account (Not signed in)","aria-label":Vt?"Account":"Account (Not signed in)","aria-haspopup":"menu","aria-expanded":Ti,children:n.jsx("span",{className:Zt.avatarBadge,"aria-hidden":"true",children:Pp?n.jsx("img",{src:Zd,alt:"",className:Zt.avatarImage}):Yd||n.jsx(wu,{size:14,className:Zt.avatarIcon})})}),Ti&&n.jsxs("div",{className:Zt.accountMenu,role:"menu","aria-label":"Account menu",children:[n.jsxs("div",{className:Zt.accountMenuSection,children:[n.jsx("div",{className:Zt.accountMenuSectionLabel,children:"Account"}),n.jsx("div",{className:Zt.accountMenuHint,children:Em?"Checking sign-in status...":Vt?n.jsx(n.Fragment,{children:Qg?n.jsx(n.Fragment,{children:n.jsxs("span",{className:Zt.accountIdentityBlock,children:[n.jsx("span",{className:Zt.accountIdentityEmail,children:oc}),Xg&&El&&n.jsxs("span",{className:Zt.accountIdentityMetaLine,children:[n.jsx("span",{className:Zt.accountIdentityMetaLabel,children:"Email"}),n.jsx("span",{className:Zt.accountIdentityMetaValue,children:sc})]}),$c?n.jsxs("span",{className:Zt.accountIdentityMetaLine,children:[n.jsx("span",{className:Zt.accountIdentityMetaLabel,children:"Subscription"}),n.jsx("span",{className:Zt.accountIdentityMetaValue,children:"Loading…"})]}):Ep?n.jsxs("button",{"aria-label":`Subscription ${jl}`,className:`${Zt.accountIdentityMetaLine} ${Zt.accountIdentityMetaAction}`,onClick:()=>{So(!1),c()},type:"button",children:[n.jsx("span",{className:Zt.accountIdentityMetaLabel,children:"Subscription"}),n.jsx("span",{className:Zt.accountIdentityMetaValue,children:jl})]}):Fc?n.jsxs("span",{className:Zt.accountIdentityMetaLine,children:[n.jsx("span",{className:Zt.accountIdentityMetaLabel,children:"Subscription"}),n.jsx("span",{className:Zt.accountIdentityMetaValue,children:"Unavailable"})]}):null,n.jsxs("span",{className:Zt.accountIdentityMetaLine,children:[n.jsx("span",{className:Zt.accountIdentityMetaLabel,children:"Runtime"}),n.jsx("span",{className:Zt.accountIdentityMetaValue,children:ty})]}),n.jsxs("span",{className:Zt.accountIdentityMetaLine,children:[n.jsx("span",{className:Zt.accountIdentityMetaLabel,children:"Environment"}),n.jsx("span",{className:Zt.accountIdentityMetaValue,children:ry})]})]})}):"Signed in"}):"Not signed in"})]}),Im&&n.jsxs("div",{className:Zt.accountMenuSection,children:[n.jsx("div",{className:Zt.accountMenuSectionLabel,children:"Workspaces (Owned + Invited)"}),Lr.length===0&&n.jsx("div",{className:Zt.accountMenuHint,children:"No workspaces found for this account yet."}),Lr.map(m=>n.jsxs("button",{className:`${Zt.accountMenuItem} ${m.id===at?Zt.accountMenuItemActive:""}`,onClick:()=>et(m.id),role:"menuitem",disabled:Sl||m.id===at,title:m.description||m.name,children:[n.jsx(gc,{size:15}),n.jsxs("span",{style:{display:"flex",flexDirection:"column",gap:"2px"},children:[n.jsx("span",{children:m.name}),n.jsx("span",{className:Zt.accountMenuMeta,children:m.role})]})]},m.id)),n.jsxs("button",{className:Zt.accountMenuItem,onClick:()=>{ec(""),hp(!0),So(!1)},role:"menuitem",disabled:Sl,children:[n.jsx(Ko,{size:15}),"Create Workspace"]}),Al&&n.jsx("div",{className:Zt.accountMenuError,children:Al})]}),Og?n.jsx("div",{className:Zt.accountMenuHint,children:"Resolving team management access..."}):Pl?n.jsxs("button",{className:Zt.accountMenuItem,onClick:()=>{tt()},role:"menuitem",children:[n.jsx(Py,{size:15}),"Team Management"]}):Bg?n.jsx("div",{className:Zt.accountMenuHint,children:"Team Management unavailable right now."}):null,Vt&&n.jsxs("button",{className:Zt.accountMenuItem,onClick:()=>{So(!1),jm("account_settings"),ls(!0)},role:"menuitem",children:[n.jsx(Af,{size:15}),"Account Settings"]}),n.jsxs("button",{className:Zt.accountMenuItem,onClick:()=>{So(!1),Xi(!0)},role:"menuitem",children:[n.jsx(ad,{size:15}),"Help & Support"]}),Ut==="local"&&!Vt&&!Em&&n.jsxs("button",{className:Zt.accountMenuItem,onClick:()=>{T("login")},role:"menuitem",children:[n.jsx(wu,{size:15}),"Sign In / Register"]}),Vt&&n.jsxs("button",{className:Zt.accountMenuItem,onClick:async()=>{So(!1),await Bn(),Ut==="cloud"&&a("/login",{replace:!0})},role:"menuitem",children:[n.jsx(jT,{size:15}),"Sign Out"]})]})]}),fw=o.useCallback(()=>{S(m=>m==="show"?"collapse":m==="collapse"?"hide":"show")},[S]),mw=o.useCallback(()=>{I(),v("tasks"),p("add")},[I,p,v]),NI=o.useCallback(m=>{const A=e.workstreams.find(B=>B.id===m);I(),de(Io(A)||m),v("tasks"),p("add")},[e.workstreams,I,p,v,de]),hw=o.useCallback(m=>{Wo.current=!1,wi(!1),Yn(m),Ca(!1),ma(null),os(!1),gn(""),ki(""),vi("");const A=m.entityType==="workstream"&&Kr&&Ot.initiativeById.get(Kr)||null;Xo(A?fs(A):""),At(null)},[Ot.initiativeById,Kr]),gw=o.useCallback((m,A)=>{Wo.current=!1,wi(!1),ma(m),os(!1),gn(""),ki(""),vi("");const B=m.entityType==="workstream"&&((A?Ot.initiativeById.get(A):null)||Kr&&Ot.initiativeById.get(Kr))||null;Xo(B?fs(B):""),At(null)},[Ot.initiativeById,Kr]),my=o.useCallback(()=>{Wo.current=!1,wi(!1),Yn(null),gn(""),ki(""),vi(""),Xo("")},[]),hy=o.useCallback(()=>{Wo.current=!1,wi(!1),ma(null),gn(""),ki(""),vi(""),Xo("")},[]),jI=o.useCallback(async()=>{const m=Oo||er;if(!m||Wo.current)return;const A=Is.trim();if(!A)return;Wo.current=!0,wi(!0);const B=!!Oo,Se=Mu.trim()||null;try{if(m.entityType==="initiative")if(m.mode==="edit")await e.updateInitiative(m.targetId,{title:A,description:il.trim()||null}),xt({type:"initiative",id:m.targetId}),dt("Initiative updated","success");else{const Oe=await e.createInitiative({title:A,description:il.trim()||null,ownerId:Se});xt({type:"initiative",id:Oe.id}),At(null),dt("Initiative created","success")}else{const Oe=yQ(Ot.allInitiatives,m.mode==="create"?m.initiativeId:null,Qo);if(Oe.invalid){dt("Initiative not found by that reference.","error");return}const jt={title:A,description:il.trim()||null,initiativeId:Oe.initiativeId,...m.mode==="create"?{ownerId:Se}:{}};if(m.mode==="edit")await e.updateWorkstream(m.targetId,jt),B?At(m.targetId):(xt({type:"workstream",id:m.targetId}),At(null)),dt("Workstream updated","success");else{const Ir=await e.createWorkstream(jt);B?At(Ir.id):(xt({type:"workstream",id:Ir.id}),At(null)),dt("Workstream created","success")}}B?hy():my()}catch(Oe){dt(Oe instanceof Error?Oe.message:"Failed to save planning item.","error")}finally{Wo.current=!1,wi(!1)}},[my,hy,il,Qo,Mu,Is,er,Oo,Ot.allInitiatives,e,dt]),MI=o.useCallback(m=>{O(A=>{const B=new Set(A);return B.has(m)?B.delete(m):B.add(m),B})},[]),DI=o.useCallback(m=>{Ua(A=>A===m?"":m),Jo("")},[]),LI=o.useCallback((m,A)=>{Jo(B=>{const Se=B===m?"":m;return Ua(Se&&A||""),Se})},[]),Wp=o.useCallback(m=>{Yn(null),ma(null),Ca(!1),os(!1),xt(m?{type:"initiative",id:m}:null),At(null)},[]),$p=o.useCallback(m=>{Yn(null),ma(null),Ca(!1),os(!1),xt(m?{type:"workstream",id:m}:null),At(null)},[]),OI=o.useCallback(m=>{ma(null),os(!1),At(m)},[]),yw=o.useCallback(m=>{if(m.kind==="initiative"||m.kind==="workstream"){const Se=m.kind==="initiative"?e.initiatives.find(Oe=>Oe.referenceNumber===m.referenceNumber):e.workstreams.find(Oe=>Oe.referenceNumber===m.referenceNumber);if(!Se){dt(`${m.token} could not be found.`,"error");return}bo(()=>{v("planning"),Mo(!0),m.kind==="initiative"?Wp(Se.id):$p(Se.id)});return}const A=String(at||"default").trim()||"default",B=Se=>{Ef(Se,{ownerType:"task",ownerId:U,ownerReferenceLabel:hs(oe),workspaceId:A})};FC(m,{workspaceId:A,headers:Ai}).then(B).catch(()=>{dt(`${m.token} could not be opened.`,"error")})},[oe,at,U,bo,Wp,$p,e.initiatives,e.workstreams,dt,v,Ai]),kw=o.useMemo(()=>({...Dn,entityReferences:{resolve:oA,activate:yw}}),[yw,Dn]);o.useEffect(()=>{const m=String(i.get(fi.initiative)||"").trim(),A=String(i.get(fi.workstream)||"").trim(),B=String(i.get(fi.document)||"").trim(),Se=String(i.get(fi.image)||"").trim(),Oe=m?`initiative:${m}`:A?`workstream:${A}`:B?`document:${B}`:Se?`image:${Se}`:"";if(!Oe||Rc.current===Oe)return;if(m||A){const Or=m?e.initiatives.find(Ma=>Ma.id===m):e.workstreams.find(Ma=>Ma.id===A);if(!Or)return;Rc.current=Oe,bo(()=>{v("planning"),Mo(!0),m?Wp(Or.id):$p(Or.id)});return}if(B){if(!_i)return;Rc.current=Oe,bo(()=>{Tc(null),ei(B),v("docs")});return}if(!Ec)return;Rc.current=Oe;const jt=String(at||"default").trim()||"default",Ir=new URLSearchParams({workspaceId:jt});fetch(`/api/taskforce/annotated-attachments/images/${encodeURIComponent(Se)}?${Ir.toString()}`,{credentials:"include",headers:Ai}).then(async Or=>{if(!Or.ok)throw new Error("Image not found");const Ma=await Or.json();if(!Ma.target?.assetId||!Ma.target.path)throw new Error("Image target is unavailable");bo(()=>{const fn=Ma.target;$o.current=fn,ti.current=null,Bo(fn),Vi(null),yd(Vc=>Vc+1),v("annotate")})}).catch(()=>{dt(`Image ${Se} could not be opened.`,"error")})},[Ec,at,_i,bo,Wp,$p,e.initiatives,e.workstreams,dt,i,v,Ai]);const Jd=o.useCallback(async m=>{const A=`${m.type}:${m.id}`;Fs(B=>({...B,[A]:{status:"loading",error:null}}));try{await e.fetchPlanningEntityDetail(m.type,m.id),Fs(B=>({...B,[A]:{status:"ready",error:null}}))}catch(B){Fs(Se=>({...Se,[A]:{status:"error",error:B instanceof Error?B.message:"Failed to load the latest planning details."}}))}},[e.fetchPlanningEntityDetail]);o.useEffect(()=>{const m=new Map;if(j?.id&&m.set(`${j.type}:${j.id}`,j),Et&&m.set(`workstream:${Et}`,{type:"workstream",id:Et}),m.size!==0)for(const A of m.values())Jd(A)},[Jd,j?.id,j?.type,Et]);const gy=o.useCallback((m,A)=>{if(m==="workstream"&&A){gw({mode:"create",entityType:"workstream",initiativeId:A},A);return}if(hw({mode:"create",entityType:m}),m==="workstream"){const B=(A?Ot.initiativeById.get(A):null)||(Kr?Ot.initiativeById.get(Kr):null)||null;Xo(B?fs(B):"")}},[hw,gw,Ot.initiativeById,Kr]),vw=o.useCallback((m,A)=>{if(Wo.current=!1,wi(!1),m==="initiative"){const B=Ot.allInitiativeById.get(A);if(!B)return;ma(null),Yn({mode:"edit",entityType:"initiative",targetId:A}),gn(B.title),ki(B.description||""),vi(B.ownerId?String(B.ownerId):""),Xo("");return}else{const B=Ot.allWorkstreamById.get(A);if(!B)return;const Se=Et===A;Se?(Yn(null),ma({mode:"edit",entityType:"workstream",targetId:A})):(ma(null),Yn({mode:"edit",entityType:"workstream",targetId:A})),gn(B.title),ki(B.description||""),vi(B.ownerId?String(B.ownerId):"");const Oe=B.initiativeId&&Ot.allInitiativeById.get(B.initiativeId)||null;if(Xo(Oe?fs(Oe):""),Se)return}At(null)},[Et,Ot.allInitiativeById,Ot.allWorkstreamById]),yy=o.useCallback(async(m,A,B)=>{const Se=B.trim()||null;try{m==="initiative"?await e.updateInitiative(A,{ownerId:Se}):await e.updateWorkstream(A,{ownerId:Se}),dt(`${m==="initiative"?"Initiative":"Workstream"} owner updated`,"success")}catch(Oe){throw dt(Oe instanceof Error?Oe.message:"Failed to update owner.","error"),Oe}},[e,dt]),Qd=o.useCallback(async(m,A)=>{const B=e.workstreams.find(Ir=>Ir.id===m);if(!B)return dt("Workstream not found.","error"),!1;const Se=typeof A=="string"?A.trim():A===null?"":Qo.trim(),Oe=Se.length===0?null:Mk(Ot.allInitiatives,Se);if(Se.length>0&&!Oe)return dt("Initiative not found by that reference.","error"),!1;const jt=Oe?.id||null;if((B.initiativeId||null)===jt)return dt(jt?"Workstream already belongs to that initiative.":"Workstream is already standalone.","info"),!1;try{return await e.updateWorkstream(m,{initiativeId:jt}),Xo(Oe?fs(Oe):""),dt(jt?"Initiative set":"Initiative removed","success"),!0}catch{return dt("Failed to set initiative.","error"),!1}},[Qo,Ot.allInitiatives,e,dt]),Xd=o.useCallback(async(m,A)=>{const B=Ji.get(m);if(!B)return dt("Task not found.","error"),!1;const Se=A||null;if(Ot.initiativeById.has(m)||Ot.workstreamById.has(m))return dt("Only execution tasks can be moved into workstreams.","error"),!1;if(Se&&!Ot.workstreamById.has(Se))return dt("Workstream not found.","error"),!1;if((B.workstreamId||null)===Se)return dt(Se?"Task already belongs to that workstream.":"Task is already standalone.","info"),!1;try{return await e.handleUpdateTask(m,{workstreamId:Se})===!1?!1:(await e.fetchPlanningEntities(),dt(Se?"Workstream set":"Workstream removed","success"),!0)}catch{return dt("Failed to set workstream.","error"),!1}},[Ji,Ot.initiativeById,Ot.workstreamById,e,dt]),ky=o.useCallback(async(m,A)=>{const B=A.trim();if(!B)return dt("Enter a task reference.","error"),!1;const Se=fg(B),Oe=Zi.find(jt=>jt.id===B||hs(jt)===B||Se!==null&&jt.referenceNumber===Se);return Oe?Xd(Oe.id,m):(dt("Task not found by that reference.","error"),!1)},[Xd,Zi,dt]),vy=o.useCallback(async(m,A)=>{const B=A.trim();if(!B)return dt("Enter a workstream reference.","error"),!1;const Se=Ot.allInitiativeById.get(m);if(!Se)return dt("Initiative not found.","error"),!1;const Oe=_C(B),jt=e.workstreams.find(Ir=>Ir.id===B||Io(Ir)===B||Oe!==null&&Ir.referenceNumber===Oe);return jt?Qd(jt.id,fs(Se)):(dt("Workstream not found by that reference.","error"),!1)},[Qd,Ot.allInitiativeById,e.workstreams,dt]),eu=o.useCallback((m,A)=>{const B=`${m}:${A}`,Se=zf.current.get(B);if(Se)return Se;const Oe=m==="initiative"?e.initiatives.find(jt=>jt.id===A):e.workstreams.find(jt=>jt.id===A);return Array.isArray(Oe?.attachments)?Oe.attachments:[]},[e.initiatives,e.workstreams]),tu=o.useCallback((m,A,B)=>{const Se=`${m}:${A}`;zf.current.set(Se,B);const jt=(fd.current.get(Se)||Promise.resolve()).catch(()=>{}).then(()=>m==="initiative"?e.updateInitiative(A,{attachments:B}):e.updateWorkstream(A,{attachments:B}));fd.current.set(Se,jt),jt.catch(Ir=>{dt(Ir instanceof Error?Ir.message:"Failed to update planning context.","error")}).finally(()=>{fd.current.get(Se)===jt&&fd.current.delete(Se)})},[e,dt]),wy=o.useCallback((m,A,B)=>{const Se=eu(m,A);tu(m,A,[...Se,B])},[eu,tu]),by=o.useCallback((m,A,B)=>{const Se=eu(m,A);tu(m,A,Se.filter((Oe,jt)=>jt!==B))},[eu,tu]),Sy=o.useCallback((m,A,B,Se)=>{const jt=eu(m,A).map((Ir,Or)=>Or!==B?Ir:typeof Ir=="string"?{path:Ir,caption:Se,timestamp:new Date().toISOString()}:{...Ir,caption:Se});tu(m,A,jt)},[eu,tu]),ww=o.useCallback(m=>{Ua(m),Jo("")},[]),bw=o.useCallback(m=>{Jo(m),Ua(m&&Ot.workstreamInitiativeIds.get(m)||"")},[Ot.workstreamInitiativeIds]),Om=o.useCallback(m=>{const A=ES(m,ni);if(A!==m){const B=ni.find(Se=>Se.id===m)?.label||"That module";dt(`${B} is not available in this build yet.`,"error");return}if(Sr==="workflowManager"&&A!=="workflowManager"&&Fa&&!Fn.current){oa(()=>()=>Om(m));return}ri(),v(A)},[ri,dt,Sr,v,Fa,ni]),Sw=o.useCallback(()=>{if(Sr==="tasks"&&Kn){Mo(!1),xt(null),At(null),Yn(null);return}if(Sr!=="tasks"){v("tasks"),Mo(!0);return}Mo(m=>!m)},[Kn,Sr,v]),Aw=o.useCallback(()=>{if(Sr!=="docs"){v("docs"),Ys(!0);return}Ys(m=>!m)},[Sr,v]),Cw=o.useCallback(()=>{if(Sr!=="annotate"){v("annotate"),as(!0);return}as(m=>!m)},[Sr,v]),_w=o.useCallback(()=>{if(Sr!=="aiProfiles"){v("aiProfiles"),Do(!0);return}Do(m=>!m)},[Sr,v]),Iw=o.useCallback(()=>{if(Sr!=="taskforceAgents"){v("taskforceAgents"),_s(!0);return}_s(m=>!m)},[Sr,v]),Tw=o.useCallback(()=>{if(Sr!=="workflowManager"){v("workflowManager"),qn(!0);return}qn(m=>!m)},[Sr,v]),Fp=o.useCallback(()=>{Gi(!1),Ad(null),qu(null)},[]),Ay=o.useCallback(m=>{if(!Fo[ql]?.allowed){dt("Taskforce Agents are unavailable for this workspace.","error");return}const A=hs(m)||m.id;Ad({taskId:m.id,taskReference:A,taskTitle:m.title}),Ki(!1),Gi(!0),$a(!1)},[dt,Fo]),xw=o.useCallback(()=>{if(oe&&U){Ay(oe);return}if(!Fo[ql]?.allowed){dt("Taskforce Agents are unavailable for this workspace.","error");return}Ad(null),Ki(!1),Gi(!0)},[oe,U,Ay,dt,Fo]),BI=o.useCallback(m=>{const A=String(m||"").trim();A&&(ul({agentId:A,conversationId:Ar[A]||null}),Ad(null),Ki(!1),Gi(!0))},[ul,Ar]),WI=o.useCallback(m=>{Me(m),$a(!1)},[Me]),$I=o.useCallback(m=>{ri(),v("tasks"),Me(m)},[ri,Me,v]),FI=o.useCallback(m=>{ri(),v("tasks"),Me(m)},[ri,Me,v]),UI=o.useCallback((m,A)=>{const B=A?.sessionId??null;$o.current=m,ti.current=B,Bo(m),Vi(B),yd(Se=>Se+1),v("annotate")},[v]),zI=o.useCallback(({target:m,sessionId:A})=>{$o.current=m,ti.current=A,Bo(B=>!B&&!m||B&&m&&B.taskId===m.taskId&&B.taskReferenceLabel===m.taskReferenceLabel&&B.assetId===m.assetId&&B.imageReferenceLabel===m.imageReferenceLabel&&B.path===m.path&&B.displayName===m.displayName?B:m),Vi(B=>B===A?B:A)},[]),HI=o.useCallback((m,A)=>{const B=m.trim(),Se=Math.max(0,Math.round(A));B&&Zf(Oe=>Oe[B]===Se?Oe:DS(Oe,B,Se))},[]),VI=o.useCallback(m=>{const A=Math.max(0,Math.round(m));md(B=>B===A?B:A)},[]),GI=o.useCallback((m,A)=>{const B=m.trim();if(!B)return;const Se={zoomLevel:Math.min(4,Math.max(.25,A.zoomLevel)),scrollLeft:Math.max(0,Math.round(A.scrollLeft)),scrollTop:Math.max(0,Math.round(A.scrollTop))};Vu(Oe=>{const jt=Oe[B];return jt&&jt.zoomLevel===Se.zoomLevel&&jt.scrollLeft===Se.scrollLeft&&jt.scrollTop===Se.scrollTop?Oe:DS(Oe,B,Se)})},[]),Rw=o.useMemo(()=>[{value:"created",label:_t("standalone.sortCreated")},{value:"updated",label:_t("standalone.sortUpdated")},{value:"priority",label:_t("standalone.sortPriority")},{value:"complexity",label:_t("standalone.sortComplexity")},...RC(qe,[...e.searchAgnosticTasks,...cs])],[cs,e.searchAgnosticTasks,qe]),Pw=o.useMemo(()=>[{value:"status",label:_t("standalone.groupStatus")},{value:"category",label:_t("standalone.groupCategory")},{value:"type",label:_t("standalone.groupType")},{value:"priority",label:_t("standalone.groupPriority")},{value:"complexity",label:_t("standalone.groupComplexity")},{value:"assignee",label:_t("standalone.groupAssignee")},{value:"schedule",label:_t("standalone.groupSchedule")}],[]),Ew=o.useMemo(()=>ni.filter(m=>m.enabled),[ni]),Nw=o.useMemo(()=>[{key:"empty-columns",icon:C==="show"?n.jsx(Ww,{size:16}):C==="collapse"?n.jsx($w,{size:16}):n.jsx(KS,{size:16}),title:_t(C==="show"?"standalone.showEmptyColumns":C==="collapse"?"standalone.compressEmptyColumns":"standalone.hideEmptyColumns"),onClick:fw,active:C!=="show"},{key:"compressed-cards",icon:ir?n.jsx(MT,{size:16}):n.jsx(DT,{size:16}),title:_t(ir?"standalone.expandCards":"standalone.compressCards"),onClick:()=>dr(!ir),active:ir}],[ir,fw,C]),KI=o.useMemo(()=>ca.moduleId!=="tasks"?[]:[{key:"filter-toggle",icon:n.jsx(qS,{size:16}),title:_t("standalone.toggleFilters"),onClick:()=>Wa(!pa),active:pa,ariaExpanded:pa,ariaControls:"task-workspace-filters",className:so?x.filterGlow:""}],[so,Wa,pa,ca.moduleId]),qI=o.useMemo(()=>{const m=[];return pl&&m.push({key:"ask-agent",icon:n.jsx(Yl,{size:16}),title:Us?"Close Taskforce Agent":"Ask Taskforce Agent",onClick:Us?Fp:xw,active:Us}),m},[Fp,xw,Us,pl]),YI=o.useMemo(()=>n.jsx(nY,{id:"task-workspace-filters",categoryFilterOptions:ep,typeFilterOptions:tp,priorities:_e,taxonomyDisplayLabels:Be,filterCategories:Lt,setFilterCategories:Mt,filterTypes:Ee,setFilterTypes:ct,filterPriorities:lt,setFilterPriorities:Je,filterStatus:M,setFilterStatus:R,filterAssignees:nt,setFilterAssignees:Ct,assigneeOptions:Dt,initiativeFilterOptions:tm,selectedInitiativeId:Kr,setSelectedInitiativeId:ww,workstreamFilterOptions:rm,selectedWorkstreamId:fa,setSelectedWorkstreamId:bw,taskScope:It,setTaskScope:Qt,showArchive:qi,setShowArchive:fl,clearFiltersDisabled:!Pr&&!_r&&sr==="created"&&e.sortOrder==="desc",clearFilters:()=>{Jr(),Uf(),Ua(""),Jo("")}}),[Dt,ep,Jr,nt,Lt,lt,M,Ee,_r,Pr,ww,bw,tm,_e,e.sortOrder,Kr,fa,Ct,Mt,Je,R,ct,Ua,Jo,fl,Qt,sr,Uf,qi,It,Be,tp,rm]),ZI=o.useMemo(()=>[{key:"zen-toggle",icon:n.jsx(LT,{size:16,fill:w?"currentColor":"none"}),title:_t(w?"standalone.exitZenMode":"standalone.enterZenMode"),onClick:()=>_(),active:w}],[_,w]),JI=o.useMemo(()=>({search:n.jsx(Xq,{value:st,placeholder:_t("standalone.searchPlaceholder"),active:Pr,onChange:zt,onClear:()=>zt(""),clearTitle:_t("standalone.clearSearchTitle")}),sort:n.jsx(AS,{label:n.jsxs(n.Fragment,{children:[n.jsx(tv,{size:12})," ",_t("standalone.sortLabel")]}),value:sr,options:Rw,onChange:m=>pr(m),trailingAction:n.jsx("button",{className:`tf-control-icon ${x.sortDirectionBtn}`,onClick:()=>e.toggleSortOrder(),title:e.sortOrder==="desc"?_t("standalone.sortDirectionDescTitle"):_t("standalone.sortDirectionAscTitle"),children:e.sortOrder==="desc"?n.jsx(Xk,{size:14}):n.jsx(WS,{size:14})})}),"divider-primary":n.jsx(CS,{}),grouping:n.jsx(AS,{label:n.jsxs(n.Fragment,{children:[n.jsx(pk,{size:12})," ",_t("standalone.groupLabel")]}),value:h,options:Pw,onChange:m=>y(m)}),"divider-secondary":n.jsx(CS,{}),"task-display-actions":n.jsx(vh,{actions:Nw})}),[h,Pw,Om,Pr,e,st,y,zt,pr,sr,Rw,Nw,ca.moduleId]),QI=o.useMemo(()=>({"add-task":n.jsx(eY,{icon:n.jsx(Ko,{size:16}),label:_t("standalone.addTask"),onClick:mw}),"add-document":null}),[mw]),Bl=o.useMemo(()=>{const m=`${zr.workspaceToolButton} tf-control-icon tf-control-icon-quiet`,A=`${m} tf-control-icon-active`,B={tasks:n.jsx(FT,{size:18}),planning:n.jsx(pk,{size:18}),docs:n.jsx(Sf,{size:18}),annotate:n.jsx(US,{size:18}),workflowManager:n.jsx(Fw,{size:18}),taskforceAgents:n.jsx(Yl,{size:18}),aiProfiles:n.jsx(Py,{size:18})},Se=Sr==="planning"?n.jsx("span",{className:zr.workspaceToolButton,"aria-hidden":"true"}):Sr==="docs"?n.jsx("button",{type:"button",className:qs?A:m,onClick:Aw,title:qs?"Collapse document tray":"Document tray","aria-label":qs?"Collapse document tray":"Document tray",children:qs?n.jsx(lo,{size:18}):n.jsx(gc,{size:18})}):Sr==="annotate"?n.jsx("button",{type:"button",className:Aa?A:m,onClick:Cw,title:Aa?"Collapse image tray":"Image tray","aria-label":Aa?"Collapse image tray":"Image tray",children:Aa?n.jsx(lo,{size:18}):n.jsx(gc,{size:18})}):Sr==="aiProfiles"?n.jsx("button",{type:"button",className:Cs?A:m,onClick:_w,title:Cs?"Collapse AI Profile tray":"MCP settings tray","aria-label":Cs?"Collapse AI Profile tray":"MCP settings tray",children:Cs?n.jsx(lo,{size:18}):n.jsx(WT,{size:18})}):Sr==="taskforceAgents"?n.jsx("button",{type:"button",className:Zs?A:m,onClick:Iw,title:Zs?"Collapse builder library":"Builder library","aria-label":Zs?"Collapse builder library":"Builder library",children:Zs?n.jsx(lo,{size:18}):n.jsx(Py,{size:18})}):Sr==="workflowManager"?n.jsx("button",{type:"button",className:Js?A:m,onClick:Tw,title:Js?"Collapse workflow library":"Workflow library","aria-label":Js?"Collapse workflow library":"Workflow library",children:Js?n.jsx(lo,{size:18}):n.jsx(Fw,{size:18})}):n.jsx("button",{ref:yi,type:"button",className:Sr==="tasks"&&Kn?A:m,onClick:Sw,title:Sr==="tasks"&&Kn?"Collapse planning trays":"Planning","aria-label":Sr==="tasks"&&Kn?"Collapse planning trays":"Planning",children:Sr==="tasks"&&Kn?n.jsx(lo,{size:18}):n.jsx($T,{size:18})});return n.jsxs("aside",{className:`${zr.workspaceToolRail} ${zr.workspaceToolRailLeft}`,"aria-label":"Workspace tools",children:[n.jsxs("div",{className:zr.workspaceToolRailMain,children:[Se&&n.jsxs(n.Fragment,{children:[Se,n.jsx("div",{className:zr.workspaceToolRailDivider})]}),Ew.map(Oe=>n.jsx("button",{type:"button",className:Sr===Oe.id?A:m,onClick:()=>Om(Oe.id),title:Oe.label,"aria-label":Oe.label,children:B[Oe.id]},Oe.id))]}),n.jsxs("div",{className:zr.workspaceToolRailBottom,children:[n.jsx("div",{className:zr.workspaceToolRailDivider}),n.jsx("button",{type:"button",className:f==="settings"?A:m,onClick:()=>{if(Sr==="workflowManager"&&Fa&&!Fn.current){oa(()=>()=>{Tt("general"),p("settings")});return}Tt("general"),p("settings")},title:"Workspace Settings","aria-label":"Workspace Settings",children:n.jsx(Af,{size:18})})]})]})},[f,Cs,qs,_w,Aw,Cw,Om,Sw,Iw,Tw,Aa,Kn,Sr,Tt,p,Zs,Js,Fa,Ew]),[jw,XI]=o.useState(null),eT=o.useCallback(m=>{XI(m)},[]),Mw=o.useCallback((m,A)=>Jd({type:m,id:A}),[Jd]),Dw=o.useCallback(async(m,A)=>{const B=A.title.trim();if(!B)throw new Error(`${m==="initiative"?"Initiative":"Workstream"} title is required.`);try{if(m==="initiative"){const Oe=await e.createInitiative({title:B,description:A.description?.trim()||null,ownerId:A.ownerId?.trim()||null});return dt("Initiative created","success"),{id:Oe.id}}const Se=await e.createWorkstream({title:B,description:A.description?.trim()||null,ownerId:A.ownerId?.trim()||null,initiativeId:A.initiativeId?.trim()||null});return dt("Workstream created","success"),{id:Se.id}}catch(Se){throw dt(Se instanceof Error?Se.message:"Failed to create planning item.","error"),Se}},[e.createInitiative,e.createWorkstream,dt]),Lw=o.useCallback(async(m,A,B)=>{const Se=B.title.trim();if(!Se)throw new Error(`${m==="initiative"?"Initiative":"Workstream"} title is required.`);try{const Oe={title:Se,description:B.description?.trim()||null};if(m==="initiative"){await e.updateInitiative(A,Oe),dt("Initiative updated","success");return}await e.updateWorkstream(A,Oe),dt("Workstream updated","success")}catch(Oe){throw dt(Oe instanceof Error?Oe.message:"Failed to update planning item.","error"),Oe}},[e.updateInitiative,e.updateWorkstream,dt]),Cy=o.useCallback(async(m,A)=>{try{await e.reorderWorkstreamTasks(m,A)}catch(B){throw dt(B instanceof Error?B.message:"Failed to reorder workstream tasks.","error"),B}},[e.reorderWorkstreamTasks,dt]),ru=o.useMemo(()=>({initiatives:Ot.allInitiatives,standaloneWorkstreams:Ot.allStandaloneWorkstreams,assigneeOptions:Dt,currentOwnerId:xn==="anonymous"?null:xn,currentWorkspaceId:at,theme:ur,taskReferences:Dn,loadState:e.planningLoadState,hydrationStateByEntity:De,hydrateEntity:Mw,retry:()=>{e.fetchPlanningEntities()},openTask:Me,setTaskStatus:dp,setTaskAssignee:Dd,linkOptions:sp,assignWorkstreamToInitiative:Qd,assignTaskToWorkstream:Xd,attachWorkstreamToInitiative:vy,attachTaskToWorkstream:ky,archiveEntity:lm,unarchiveEntity:dm,changeOwner:yy,createEntity:Dw,updateEntity:Lw,addContextFile:wy,removeContextFile:by,updateContextCaption:Sy,showTaskCardStatusLabel:pe,taskArrangeMode:_a,setTaskArrangeMode:Zr,reorderWorkstreamTasks:Cy}),[at,ur,yy,Qd,Xd,ky,vy,lm,dm,Dw,wy,Me,by,dp,Dd,Sy,Mw,Dt,xn,Ot.allInitiatives,Ot.allStandaloneWorkstreams,sp,De,e.fetchPlanningEntities,e.planningLoadState,pe,_a,Cy,Dn,Lw]),tT=n.jsx(gQ,{open:Kn,leftOffset:56,returnFocusRef:yi,theme:ur,initiatives:ru.initiatives,standaloneWorkstreams:ru.standaloneWorkstreams,planningLoadState:ru.loadState,onRetryPlanning:ru.retry,taskScope:It,activeInitiativeId:Kr,activeWorkstreamId:fa,navigatorSort:Ic,navigatorSortReady:_d,onNavigatorSortChange:al,taskArrangeMode:_a,onTaskArrangeModeChange:Zr,onReorderWorkstreamTasks:Cy,planningFavorites:_d?sl:[],onTogglePlanningFavorite:m=>{ja(A=>Wq(A,m))},favoritesSectionCollapsed:Lo,initiativesSectionCollapsed:Ac,workstreamsSectionCollapsed:Cc,onToggleFavoritesSection:()=>$s(m=>!m),onToggleInitiativesSection:()=>Hi(m=>!m),onToggleWorkstreamsSection:()=>_c(m=>!m),expandedInitiativeIds:ol,detail:nm,editor:er,secondaryEditor:Oo,secondaryPane:am,primaryHydrationState:Pg,secondaryHydrationState:Eg,onRetryPrimaryHydration:j?()=>{Jd(j)}:void 0,onRetrySecondaryHydration:Et?()=>{Jd({type:"workstream",id:Et})}:void 0,onWidthChange:op,currentWorkspaceId:at,currentOwnerId:xn==="anonymous"?"":xn,linkOptions:sp,showTaskCardStatusLabel:pe,assigneeOptions:Dt.map(m=>({value:String(m.value),label:m.label,icon:m.icon,color:m.color,kind:m.kind,avatarUrl:m.avatarUrl??null,avatarRevision:m.avatarRevision??null,avatarUpdatedAt:m.avatarUpdatedAt??null,username:m.username??null,surfaceType:m.surfaceType??null,providerMetadata:m.providerMetadata??null,archivedAt:m.archivedAt??null})),draftInitiativeSummary:sm,draftTitle:Is,draftDescription:il,draftOwner:Mu,draftInitiativeId:Qo,onChangeDraftTitle:gn,onChangeDraftDescription:ki,onChangeDraftOwner:vi,onChangeDraftInitiativeId:Xo,onCollapseTreePane:()=>Sc(!0),onExpandTreePane:()=>Sc(!1),onCollapsePrimaryPane:()=>Ca(!0),onExpandPrimaryPane:()=>Ca(!1),onCollapseSecondaryPane:()=>os(!0),onExpandSecondaryPane:()=>os(!1),onBackFromSecondary:()=>{Wo.current=!1,wi(!1),ma(null),At(null)},treeCollapsed:Ea,primaryCollapsed:Na,secondaryCollapsed:ss,onCancelEditor:my,onCancelSecondaryEditor:hy,onSubmitEditor:jI,isSubmittingEditor:Ig,onCreateInitiative:()=>gy("initiative"),onCreateWorkstream:()=>gy("workstream"),onCreateTaskInWorkstream:NI,onCreateWorkstreamInInitiative:m=>gy("workstream",m),onAssignInitiativeToWorkstream:Qd,onOpenTaskById:ru.openTask,onSetTaskStatus:dp,onChangeTaskAssignee:Dd,onArchivePlanningTask:Mg,onArchiveResolvedWorkstream:up,onArchiveResolvedInitiative:pp,taskReferences:Dn,onAssignTaskToWorkstream:Xd,onAttachTaskToWorkstreamByReference:ky,onAttachWorkstreamToInitiativeByReference:vy,onAddPlanningContextFile:wy,onRemovePlanningContextFile:by,onUpdatePlanningContextCaption:Sy,onToggleInitiative:MI,onSelectInitiative:DI,onSelectWorkstream:LI,onOpenInitiativeDetails:Wp,onOpenWorkstreamDetails:$p,onOpenNestedWorkstreamDetails:OI,onEditInitiative:m=>vw("initiative",m),onEditWorkstream:m=>vw("workstream",m),onChangePlanningOwner:yy,onArchiveInitiative:m=>{e.archiveInitiative(m).then(()=>{dt("Initiative archived","success")}).catch(A=>{dt(A instanceof Error?A.message:"Failed to archive initiative.","error")})},onUnarchiveInitiative:m=>{e.unarchiveInitiative(m).then(()=>{dt("Initiative unarchived","success")}).catch(A=>{dt(A instanceof Error?A.message:"Failed to unarchive initiative.","error")})},onArchiveWorkstream:m=>{e.archiveWorkstream(m).then(()=>{dt("Workstream archived","success")}).catch(A=>{dt(A instanceof Error?A.message:"Failed to archive workstream.","error")})},onUnarchiveWorkstream:m=>{e.unarchiveWorkstream(m).then(()=>{dt("Workstream unarchived","success")}).catch(A=>{dt(A instanceof Error?A.message:"Failed to unarchive workstream.","error")})}}),rT=ca.headerSections.map(m=>{const A=JI[m];return A?n.jsx(Q.Fragment,{children:A},m):null}).filter(Boolean),nT=ca.primaryAction?QI[ca.primaryAction]:null,_y=Us?n.jsx("div",{className:`${x.taskforceAgentDrawerOverlay} ${ai?x.taskforceAgentDrawerOverlayCollapsed:""}`.trim(),style:{top:`${nl}px`},"data-theme":ur,"aria-label":"Taskforce Agent chat",children:n.jsx("aside",{className:ai?`${zr.workspaceToolRail} ${zr.workspaceToolRailRight}`:x.taskforceAgentDrawerPanel,children:ai?n.jsxs("div",{className:zr.workspaceToolRailMain,children:[n.jsx("button",{type:"button",className:`${zr.workspaceToolButton} tf-control-icon tf-control-icon-quiet tf-control-icon-active`,onClick:()=>Ki(!1),title:"Expand agent chat","aria-label":"Expand agent chat",children:n.jsx(Yl,{size:16})}),n.jsx("button",{type:"button",className:`${zr.workspaceToolButton} tf-control-icon tf-control-icon-quiet`,onClick:Fp,title:"Close agent chat","aria-label":"Close agent chat",children:n.jsx(fo,{size:16})})]}):n.jsxs(n.Fragment,{children:[n.jsxs("div",{className:x.taskforceAgentDrawerHeader,children:[Cd||n.jsxs("div",{className:x.taskforceAgentDrawerHeaderFallback,children:[n.jsx("span",{className:x.taskforceAgentDrawerFallbackAvatar,"aria-hidden":"true",children:n.jsx(Yl,{size:16})}),n.jsx("strong",{children:"Loading agent..."})]}),n.jsxs("div",{className:x.taskforceAgentDrawerHeaderActions,children:[n.jsx("button",{type:"button",className:"tf-control-icon",onClick:()=>Ki(!0),title:"Collapse agent chat","aria-label":"Collapse agent chat",children:n.jsx(sd,{size:16})}),n.jsx("button",{type:"button",className:"tf-control-icon",onClick:Fp,title:"Close agent chat","aria-label":"Close agent chat",children:n.jsx(fo,{size:16})})]})]}),n.jsx(o.Suspense,{fallback:n.jsx("div",{className:x.taskforceAgentDrawerLoading,children:n.jsx(Ln,{size:18,className:x.spinner})}),children:n.jsx(MS,{workspaceId:at,launchContext:Xf,onClearLaunchContext:Fp,onOpenTaskContext:WI,taskReferences:Dn,surface:"taskDrawer",runtimeMode:Ut,cloudAuthConfigured:$t,authSessionResolved:ft,isAuthenticated:Vt,resolveCloudAuthUrl:Kt,theme:ur,rememberedAgentId:wa,rememberedConversationId:Xa,rememberedConversationByAgentId:Ar,rememberedSelectionReady:es,onRememberSelection:ul,onRenderDrawerHeader:em})})]})})}):null;return n.jsxs("div",{className:`${zr.standaloneWrapper} ${w?x.zenModeEnabled:""}`,"data-theme":ur,children:[n.jsx("div",{ref:vo,style:{flexShrink:0},children:n.jsx(Oq,{projectName:mr,currentWorkspaceId:at,runtimeMode:Ut,theme:ur,onBrandClick:ee,meta:n.jsxs(n.Fragment,{children:[n.jsx("span",{className:x.taskCountBadge,title:Lm,children:Hc}),xn&&xn!=="anonymous"&&n.jsxs(n.Fragment,{children:[n.jsxs("button",{type:"button",className:`${x.taskCountBadge} ${x.taskCountBadgeButton} ${is==="assigned-to-me"?x.taskCountBadgeActive:""}`.trim(),onClick:()=>Ke("assigned-to-me"),title:is==="assigned-to-me"?"Clear assigned-to-me quick filter":"Filter to my open tasks","aria-label":`${is==="assigned-to-me"?"Clear":"Apply"} assigned to me quick filter (${Mc} task${Mc===1?"":"s"})`,"aria-pressed":is==="assigned-to-me",children:[n.jsx(wu,{size:13,className:x.taskCountBadgeIcon,"aria-hidden":"true"}),Mc]}),n.jsxs("button",{type:"button",className:`${x.taskCountBadge} ${x.taskCountBadgeButton} ${kl>0?x.taskCountBadgeAlert:""} ${is==="overdue"?x.taskCountBadgeActive:""}`.trim(),onClick:()=>Ke("overdue"),title:is==="overdue"?"Clear my-overdue-tasks quick filter":"Filter to my overdue tasks","aria-label":`${is==="overdue"?"Clear":"Apply"} my overdue tasks quick filter (${kl} task${kl===1?"":"s"})`,"aria-pressed":is==="overdue",children:[n.jsx(OT,{size:13,className:x.taskCountBadgeIcon,"aria-hidden":"true"}),kl]})]}),lI&&n.jsx("button",{className:"tf-control-icon",onClick:Tp,title:`Sync manager: ${Bp.label} | Last success: ${dI}`,style:{marginLeft:"6px",height:"24px",width:"24px",padding:0,borderRadius:"999px",border:`1px solid ${Bp.border}`,background:Bp.background,color:Bp.color,display:"inline-flex",alignItems:"center",justifyContent:"center"},children:Bp.icon==="off"?n.jsx(BT,{size:16}):n.jsx(YS,{size:16})})]}),actions:n.jsxs(n.Fragment,{children:[l&&n.jsxs(n.Fragment,{children:[Vt&&Zn?.stripeCustomerId&&n.jsx("button",{className:"tf-control-icon",onClick:()=>{Mm()},title:"Manage billing",disabled:Fd,children:"Manage billing"}),n.jsx("button",{className:"tf-control-icon",onClick:()=>{if(Np){ne();return}d()},title:Np?"Continue to Taskforce":"Back",disabled:Ud,children:Np?"Take Me to Taskforce":"Back"})]}),!l&&n.jsxs(n.Fragment,{children:[rT,n.jsx(vh,{actions:KI}),nT]}),n.jsx(vh,{actions:ZI}),!l&&n.jsx(vh,{actions:qI}),EI]})})}),n.jsx(eg,{notice:f==="add"?null:rs,onDismiss:na}),n.jsx(__,{theme:ur}),Fr&&n.jsx("div",{className:Ze.authBlockedBanner,children:"Authentication required for this environment. Use the Account menu to sign in."}),n.jsx("div",{className:`${x.taskforceAssistantWorkspace} ${Us?x.taskforceAssistantWorkspaceOpen:""} ${ai?x.taskforceAssistantWorkspaceCollapsed:""}`.trim(),children:n.jsx("div",{className:x.taskforceAssistantWorkspaceContent,children:l?n.jsx("div",{className:`${zr.standalonePage} ${zr.standaloneContent} ${x.appScrollbar} tf-scrollbar`,style:{position:"relative",display:"flex",flex:1,minHeight:0,overflowY:"auto",overflowX:"hidden",scrollbarGutter:"stable",background:"var(--surface-page)"},children:n.jsx(o.Suspense,{fallback:n.jsx("div",{style:{display:"flex",alignItems:"center",justifyContent:"center",flex:1},children:n.jsx(Ln,{size:20,className:x.spinner})}),children:n.jsx(nX,{...e,currentTheme:ur,projectName:mr,currentWorkspaceId:at,authUserId:Dr,apiBaseUrl:Pm,connectedEnvironmentSource:e.config?.cloudAuthBaseUrl||e.config?.apiBaseUrl||"",resolveCloudAuthUrl:Kt,embedded:!0,shellOwnsScroll:!0,onAccountProfileSummaryChange:iy,onContinueToTaskforce:ne,continueBusy:Ud})})}):Sr==="planning"?n.jsxs("div",{className:`${zr.standalonePage} ${zr.standaloneContent}`,style:{position:"relative",display:"flex",flex:1,minHeight:0,overflow:"hidden",paddingLeft:"56px"},children:[Bl,n.jsx(o.Suspense,{fallback:n.jsx("div",{style:{display:"flex",alignItems:"center",justifyContent:"center",flex:1},children:n.jsx(Ln,{size:20,className:x.spinner})}),children:n.jsx(rX,{model:ru})})]}):Sr==="docs"&&_i?n.jsxs("div",{className:`${zr.standalonePage} ${zr.standaloneContent}`,style:{position:"relative",display:"flex",flex:1,minHeight:0,overflow:"hidden",paddingLeft:"56px"},children:[Bl,n.jsx(o.Suspense,{fallback:n.jsx("div",{style:{display:"flex",alignItems:"center",justifyContent:"center",flex:1},children:n.jsx(Ln,{size:20,className:x.spinner})}),children:n.jsx(XQ,{taskReferences:Dn,tasks:P,runtimeMode:Ut,workspaceId:at,apiBaseUrl:e.config?.apiBaseUrl||"",cloudAuthBaseUrl:e.config?.cloudAuthBaseUrl||"",typeFilters:Du,attachmentFilters:Lu,onTypeFiltersChange:Hf,onAttachmentFiltersChange:Vf,sortField:Ou,sortOrder:Bu,onSortFieldChange:Gf,onSortOrderChange:Kf,pinnedDocIds:Wu,onPinnedDocIdsChange:qf,searchQuery:$u,onSearchQueryChange:Fu,selectedDocId:Uu,onSelectedDocIdChange:Yf,selectionReady:_d,documentScrollByDocId:zu,onDocumentScrollChange:HI,documentListScrollTop:cl,onDocumentListScrollChange:VI,documentTrayOpen:qs,onCloseDocumentTray:()=>Ys(!1),requestedDocPath:Hu,requestedDocAssetId:ll,onRequestedDocHandled:()=>{Tc(null),ei(null)},onBackToTask:FI,enableTaskGeneration:!0})})]}):Sr==="annotate"&&Ec?n.jsxs("div",{className:`${zr.standalonePage} ${zr.standaloneContent}`,style:{position:"relative",display:"flex",flex:1,minHeight:0,overflow:"hidden",paddingLeft:"56px"},children:[Bl,n.jsx(o.Suspense,{fallback:n.jsx("div",{style:{display:"flex",alignItems:"center",justifyContent:"center",flex:1},children:n.jsx(Ln,{size:20,className:x.spinner})}),children:n.jsx(QQ,{runtimeMode:Ut,apiBaseUrl:e.config?.apiBaseUrl||"",cloudAuthBaseUrl:e.config?.cloudAuthBaseUrl||"",workspaceId:at,sessionLoadReady:Gu,requestedTarget:xs,requestedSessionId:wd,requestedOpenVersion:Jf,imageTrayOpen:Aa,onCloseImageTray:()=>as(!1),resolveTaskReferenceLabel:xg,resolveImageReferenceLabel:Rg,onOpenTarget:UI,onContextChange:zI,viewportByContextKey:gd,onViewportChange:GI,onBackToTask:$I})})]}):Sr==="workflowManager"?n.jsxs("div",{className:`${zr.standalonePage} ${zr.standaloneContent}`,style:{position:"relative",display:"flex",flex:1,minHeight:0,overflow:"hidden",paddingLeft:"56px"},children:[Bl,n.jsx(o.Suspense,{fallback:n.jsx("div",{style:{display:"flex",alignItems:"center",justifyContent:"center",flex:1},children:n.jsx(Ln,{size:20,className:x.spinner})}),children:n.jsx(eX,{workspaceId:at,libraryTrayOpen:Js,onCloseLibraryTray:()=>qn(!1),assigneeOptions:Dt,theme:ur,onUnsavedChangesChange:Gr})})]}):Sr==="taskforceAgents"?n.jsxs("div",{className:`${zr.standalonePage} ${zr.standaloneContent}`,style:{position:"relative",display:"flex",flex:1,minHeight:0,overflow:"hidden",paddingLeft:"56px"},children:[Bl,n.jsx(o.Suspense,{fallback:n.jsx("div",{style:{display:"flex",alignItems:"center",justifyContent:"center",flex:1},children:n.jsx(Ln,{size:20,className:x.spinner})}),children:n.jsx(MS,{workspaceId:at,taskReferences:Dn,agentRosterTrayOpen:Zs,onCloseAgentRosterTray:()=>_s(!1),runtimeMode:Ut,cloudAuthConfigured:$t,authSessionResolved:ft,isAuthenticated:Vt,resolveCloudAuthUrl:Kt,theme:ur,rememberedAgentId:wa,rememberedConversationId:Xa,rememberedConversationByAgentId:Ar,rememberedSelectionReady:es,onRememberSelection:ul,onOpenConversation:BI})})]}):Sr==="aiProfiles"?n.jsxs("div",{className:`${zr.standalonePage} ${zr.standaloneContent}`,style:{position:"relative",display:"flex",flex:1,minHeight:0,overflow:"hidden",paddingLeft:"56px"},children:[Bl,n.jsx(o.Suspense,{fallback:n.jsx("div",{style:{display:"flex",alignItems:"center",justifyContent:"center",flex:1},children:n.jsx(Ln,{size:20,className:x.spinner})}),children:n.jsx(tX,{workspaceId:at,runtimeMode:Ut,cloudAuthConfigured:$t,authSessionResolved:ft,isAuthenticated:Vt,cloudAiProfileSeatUsage:Zn?.aiProfileSeatUsage??null,agentTrayOpen:Cs,onCloseAgentTray:()=>Do(!1),resolveCloudAuthUrl:Kt,theme:ur,onNotice:dt,mcpSettingsNode:n.jsx(jS,{settingsModel:{...Tr,initialSection:"mcp",onOpenCloudAuth:T},renderMode:"mcp-only"})})})]}):n.jsxs("div",{className:`${zr.standalonePage} ${zr.standaloneContent} `,style:{position:"relative",opacity:e.loadingTasks?.7:1,transition:"opacity 0.2s ease, padding 220ms cubic-bezier(0.4, 0, 0.2, 1)",display:"flex",flex:1,minHeight:0,paddingLeft:"56px"},children:[Bl,n.jsxs("div",{style:{position:"relative",width:"100%",minWidth:0,flex:1,minHeight:0,display:"flex",flexDirection:"column",overflow:"hidden"},children:[pa&&YI,n.jsxs("div",{style:{position:"relative",width:"100%",minWidth:0,flex:1,minHeight:0,display:"flex",flexDirection:"column",overflow:"hidden",transition:"padding 220ms cubic-bezier(0.4, 0, 0.2, 1)",paddingLeft:Kn?`${jg+6}px`:"6px",paddingRight:h==="schedule"&&$n?`${Qk}px`:0},children:[n.jsx("div",{ref:eT,style:{position:"absolute",top:0,right:0,bottom:0,left:"-56px",zIndex:35,pointerEvents:"none"}}),e.loadingTasks&&hl.length>0&&n.jsx("div",{className:x.boardRefreshIndicator,"aria-live":"polite","aria-label":"Refreshing tasks",children:n.jsx(Ln,{size:14,className:x.spinner})}),It==="deleted"&&n.jsx(C_,{theme:ur,selectedRecords:Rs.selectedRecords,matchingCount:Rs.matchingRecords.length,allMatchingSelected:Rs.allMatchingSelected,someMatchingSelected:Rs.someMatchingSelected,fullTrashCount:e.deletedTasks.length,onSelectAllMatching:Rs.selectAllMatching,onClearSelection:Rs.clear,onRestore:Ht,onEmptyEntireTrash:()=>{const m=e.deletedTasks.length;m>0&&window.confirm(`Permanently delete all ${m} tasks in Trash? Filters and selection do not limit this action. This cannot be undone.`)&&rr()}}),n.jsx(JK,{tasks:om,allTasks:im,columns:pw,groupBy:h,scheduleDates:dc,searchQuery:st,filterCategories:Lt,filterTypes:Ee,filterPriorities:lt,filterStatus:M,filterAssignees:nt,filtersReady:Rt,assigneeOptions:Dt,scheduleFilteredTaskIds:Nd,copiedId:Ge,taxonomies:qe,types:ge,priorities:_e,workspaceId:at,deletedTaskRecordByTaskId:Ii,selectedDeletedRecordIds:Rs.selectedIds,onDeletedSelectionChange:Rs.toggle,onUpdateTask:E,onTaskClick:b,taskReferences:kw,onCopyId:F,onToggleInProgress:Ne,onToggleReview:ut,onToggleComplete:Ce,onToggleCancel:mt,onSetStatus:bl,onArchiveTask:Ue,onAddTaskToColumn:fp,showTaskCardStatusLabel:pe,onScheduleDaySelected:ip,persistedScrollLeft:h==="schedule"?No:void 0,onScrollLeftChange:jd,emptyColumnMode:C,categories:g,compressed:ir,readOnlyMode:It==="deleted"?"deleted":It==="archived"?"archived":null,recentlyChangedTaskIds:e.recentlyChangedTaskIds,sortBy:sr,sortOrder:e.sortOrder,planningDropTargets:jw?yc.createPortal(tT,jw):null,onAssignTaskToWorkstream:Xd,onAssignWorkstreamToInitiative:Qd,workstreams:e.workstreams,initiatives:e.initiatives,onUnarchive:gl,onDelete:cp},`${h}-${pw.map(m=>String(m.value)).join("|")}-${dc.mon}`),h==="schedule"&&!$n&&n.jsx("button",{type:"button",className:"tf-control-icon",onClick:()=>{xt(null),sn(!0)},title:"Show Schedule Sidebar",style:{position:"absolute",top:"10px",right:"10px",zIndex:20},children:n.jsx(lo,{size:16})}),h==="schedule"&&n.jsx(zQ,{open:$n,onClose:()=>sn(!1),scheduleSelectedDate:Sa,setScheduleSelectedDate:ns,scheduleCalendarMonth:As,setScheduleCalendarMonth:Ks,scheduleShowWeekends:Ba,setScheduleShowWeekends:yo,scheduleShowBacklog:Ss,setScheduleShowBacklog:ko,scheduleOnlyExpired:Bt,setScheduleOnlyExpired:Gn,expiredScheduledCount:jc,overdueDueCount:yl,expiredLeafCandidates:vl,expiredRecoveryCandidates:Qi,onMoveExpiredToSelectedWeek:xI,onMoveExpiredToBacklog:RI,scheduleBulkBusy:wl,globalWeekStartsOn:u,resolvedLocale:Cn,todayDateOnly:dn,scheduleBaseTasks:xd,scheduleWeekStart:Ol,scheduleWeekLabel:PI})]})]})]})})}),_y&&typeof document<"u"?yc.createPortal(_y,document.body):_y,n.jsxs(Ro,{isOpen:f==="add",onClose:cm,title:U?oe?.isDeleted?"Deleted Task":"Edit Task":"New Task",size:Yr?"full":"xl",theme:ur,className:`${x.taskforceTaskModalOverlay} ${Us?x.taskforceModalWithAssistantPanel:""} ${ai?x.taskforceModalWithAssistantPanelCollapsed:""}`.trim(),overlayStyle:{"--taskforce-task-modal-backdrop-top":`${nl}px`,"--taskforce-task-modal-backdrop-left":"56px"},headerActions:n.jsxs(n.Fragment,{children:[U?null:n.jsxs("button",{type:"button",onClick:m=>$(m),disabled:L||!ie.trim(),className:x.primaryUpdateBtn,title:_t("actionHeader.addTaskTitle"),children:[L?n.jsx(Ln,{size:16,className:x.spinner}):n.jsx(Ko,{size:16}),_t("actionHeader.addTask")]}),n.jsx("button",{className:"tf-control-icon",onClick:()=>$a(m=>!m),title:Yr?"Exit full screen":"Enter full screen","aria-label":Yr?"Exit full screen":"Enter full screen",children:Yr?n.jsx($w,{size:18}):n.jsx(Ww,{size:18})})]}),draggable:!Yr,closeOnOverlayClick:!1,children:[n.jsxs("div",{className:x.taskNoticeAnchor,children:[n.jsx(A_,{editingTaskId:U,loading:L,autoSaveState:ua,title:ie,status:z,onStatusChange:fe,showCreateSubmit:!1,currentTask:oe,currentTaskWorkstream:yt,currentTaskInitiative:Yt,workstreams:e.workstreams,onWorkstreamInputChange:de,onSetWorkstreamForCurrentTask:it,handleSubmit:$,handleCopyId:F,copiedId:Ge,tasks:P,handleToggleInProgress:Ne,handleToggleReview:ut,handleToggleComplete:Ce,handleToggleCancel:mt,handleSetStatus:bl,handleArchiveTask:Ue,handleUnarchiveTask:m=>{if(oe?.isDeleted){const A=Ii.get(m);if(!A)return;rt(A.id,A.taskId);return}kt(m)},handleRestoreDeletedTask:oe?.deletedRecordId?m=>{const A=e.deletedTasks.find(B=>B.id===m);rt(m,A?.taskId)}:void 0,handlePermanentlyDeleteDeletedTask:oe?.deletedRecordId?m=>{window.confirm("Permanently delete this task? This cannot be undone.")&&(lr(m),I(),p("tasks"))}:void 0,onAskAgent:Ay}),n.jsx(eg,{notice:D?{message:D,tone:"error"}:rs,onDismiss:()=>{aa(),na()},placement:"task"})]}),n.jsx(S_,{editingTaskId:U,initialActivityEntryId:e.initialActivityEntryId,title:ie,description:Z,checklistItems:Re,category:ye,type:ve,priority:Le,complexity:V,manualComplexityEnabled:He,assignee:ke,scheduledDate:we,dueDate:le,formTaxonomies:xe,onTaxonomyChange:(m,A)=>N(B=>({...B,[m]:A})),taxonomies:qe,comments:X,newCommentText:Ae,contextFiles:he,currentWorkspaceId:at,currentActorId:Dr,apiBaseUrl:Pm,runtimeMode:Ut,showImageReviews:!0,descriptionFocused:Xe,showMarkdownHelp:G,checklistEnabled:ce,categories:g,types:ge,priorities:_e,taxonomyDisplayLabels:Be,assigneeOptions:Dt,workstreams:e.workstreams,initiatives:e.initiatives,copiedId:Ge,onTitleChange:H,onTitleDraftChange:be,onDescriptionChange:me,onDescriptionDraftChange:Ve,onChecklistItemsChange:je,onCategoryChange:ue,onTypeChange:Pe,onPriorityChange:se,onComplexityChange:W,onAssigneeChange:Y,onScheduledDateChange:q,onDueDateChange:$e,onNewCommentTextChange:Te,onDescriptionFocusedChange:ae,onShowMarkdownHelpChange:Ie,onOpenSettings:m=>{Tt(m),p("settings")},onSubmit:$,commentsEndRef:Hn,onAddComment:()=>Fe(Ae),taskReferences:kw,onAddContextFile:m=>{Si(A=>[...A,m])},onRemoveContextFile:async m=>{Si(A=>A.filter((B,Se)=>Se!==m))},onUpdateContextCaption:(m,A)=>{Si(B=>B.map((Se,Oe)=>Oe!==m?Se:typeof Se=="string"?{path:Se,caption:A,timestamp:new Date().toISOString()}:{...Se,caption:A}))},onOpenContextImage:m=>{Ef(m,{ownerType:"task",ownerId:U,ownerReferenceLabel:hs(oe),workspaceId:at})},onCopyId:F,onToggleInProgress:Ne,onToggleReview:ut,onToggleComplete:Ce,onToggleCancel:mt,onSetStatus:bl,onArchiveTask:Ue,onUnarchive:m=>{if(oe?.isDeleted){const A=Ii.get(m);if(!A)return;rt(A.id,A.taskId);return}kt(m)},currentTask:oe})]}),n.jsx(Ro,{isOpen:f==="settings",onClose:cm,title:"Settings",size:"xl",theme:ur,draggable:!0,isSettings:!0,closeOnOverlayClick:!1,children:n.jsx(o.Suspense,{fallback:n.jsx("div",{style:{display:"flex",alignItems:"center",justifyContent:"center",padding:"2rem"},children:n.jsx(Ln,{size:20,className:x.spinner})}),children:n.jsx(jS,{settingsModel:{...Tr,onOpenCloudAuth:T},onSectionChange:Tt})})}),n.jsx(WG,{prompt:vr,theme:ur,onClose:sa,onConfirm:Ur}),n.jsx($G,{isOpen:Rm,theme:ur,onClose:xp,onConfirm:Jg}),n.jsx(BG,{isOpen:Dg,theme:ur,onClose:()=>Xi(!1),supportMailtoHref:ey,onOpenSettings:()=>{Xi(!1),p("settings"),Tt("general")}}),n.jsx(mG,{isOpen:oi,theme:ur,displayName:zd,email:sc,avatarDisplayUrl:Nl,accountBadgeInitial:Yd,profileSaveBusy:Cm,profileAvatarBusy:Ap,profileSaveError:Cp,profileSaveNotice:_p,cloudAuthEnabled:$t,availableAuthProviders:ea,billingLoading:$c,billingError:Fc,billingActionError:ci,billingNotice:bm,billingActionBusy:Fd,billingIntervalChoice:di,accountProfileSummary:Zn,onClose:ny,onSaveProfile:()=>{oy()},onDisplayNameChange:Sm,onOpenAvatarManager:()=>{ro(null),no(null),Ps(!0)},onFetchLoginMethods:Xn,onUnlinkLoginMethod:va,onAddPassword:Cr,onChangePassword:cn,onLinkProvider:m=>zn(m),onBillingIntervalChange:bp,onRefreshBilling:()=>{ui()},onUpdateInterval:()=>{ly()},onManageBilling:()=>{Mm()},onOpenPlans:()=>{ls(!1),cy()}}),n.jsx(LG,{isOpen:mp,theme:ur,title:"Edit Profile Photo",currentImageUrl:Nl,fallbackInitial:Yd,accept:aX,busy:Ap,hasPendingImage:!!Ia,canRemove:!!Nl,error:Cp,notice:_p,onClose:()=>Ps(!1),onApplyImage:ay,onRemoveImage:Nm,onDiscardPendingImage:sy}),n.jsx(BK,{isOpen:xi,theme:ur,teamPlanMode:mm,teamMgmtError:Wg,teamManagementTab:fm,teamUsersLoading:$g,teamUsers:yp,teamActionBusyUserId:Ug,teamInviteFeedback:zg,teamInviteEmail:kp,teamInviteRole:Wd,teamInvitePermissionMode:eo,teamInviteBusy:ym,pendingInvites:$r,teamAuditLoading:Vg,teamAuditEvents:Gg,teamAuditPage:Bc,teamAuditPages:ha,teamAuditHasMore:qg,onClose:()=>pm(!1),onOpenMembersTab:()=>{Ld("members"),Dl()},onOpenInvitesTab:()=>Ld("invites"),onOpenAuditTab:()=>{Ld("audit"),ic(Bc)},onMemberRoleChange:(m,A)=>{Wt(m,async()=>fetch(`/api/taskforce/admin/users/${encodeURIComponent(m)}/role`,{method:"PATCH",headers:{"Content-Type":"application/json",...Hs()},credentials:"include",body:JSON.stringify({workspaceId:Ri,role:A})}))},onMemberPermissionChange:(m,A)=>{Wt(m,async()=>fetch(`/api/taskforce/admin/users/${encodeURIComponent(m)}/permission-mode`,{method:"PATCH",headers:{"Content-Type":"application/json",...Hs()},credentials:"include",body:JSON.stringify({workspaceId:Ri,mode:A})}))},onToggleMemberDisabled:(m,A)=>{Wt(m,async()=>fetch(`/api/taskforce/admin/users/${encodeURIComponent(m)}/disable`,{method:"PATCH",headers:{"Content-Type":"application/json",...Hs()},credentials:"include",body:JSON.stringify({workspaceId:Ri,disabled:A})}))},onRevokeInvite:m=>{Wt(m,async()=>fetch(`/api/taskforce/admin/users/${encodeURIComponent(m)}/invite/revoke`,{method:"POST",headers:{"Content-Type":"application/json",...Hs()},credentials:"include",body:JSON.stringify({workspaceId:Ri})}))},onRemoveMember:m=>{Wt(m,async()=>fetch(`/api/taskforce/admin/users/${encodeURIComponent(m)}?workspaceId=${encodeURIComponent(Ri)}`,{method:"DELETE",headers:Hs(),credentials:"include"}))},onInviteEmailChange:vp,onInviteRoleChange:$d,onInvitePermissionModeChange:ia,onSubmitInvite:()=>{tr()},onLoadAuditPrevious:()=>{ic(Bc-1)},onLoadAuditNext:()=>{ic(Bc+1)}}),n.jsx(RV,{isOpen:Lg,theme:ur,onClose:()=>hp(!1),onConfirm:()=>te({intent:"create-workspace"})}),n.jsx(OK,{isOpen:xl,theme:ur,currentWorkspaceLabel:Rp,syncStatus:Op,syncStatusMeta:cw,workspaceCloudSyncEnabled:Tl,syncControlBusy:Zg,canManageWorkspaceSync:Tm,workspaceSyncSummary:Ei.summary,workspaceSyncRecommendedAction:Ei.recommendedAction,workspaceSyncRepairBusy:II,referenceMismatchCount:iw,syncStageLabel:TI,workspaceSyncPendingChanges:dy,incomingCloudChanges:Ha?.incomingCloudChanges||"Unknown",formattedLastSyncTime:Xv,formattedLastPullTime:Jv,formattedLastPushTime:Qv,syncLastError:rw,activeReferenceMismatchSummaries:bI,syncDiagnosticsSummary:yI,syncEventRows:wI,syncEventsListRef:kI,workspaceSyncRepairQueued:SI,workspaceSyncBusy:ew,workspaceSyncCopied:AI,coordinatorOwnershipMode:Lp,coordinatorOwnershipTransferBusy:py,coordinatorOwnershipTransferDisabled:hI,onClose:Rl,onToggleWorkspaceSync:m=>{ac(m)},onRepairSync:_I,onCopyReport:()=>{CI()},onRetrySync:()=>{Qe().catch(()=>{})},onTransferCoordinatorOwnership:()=>{gI()}}),n.jsx(UK,{isOpen:!!rl,onKeepEditing:()=>oa(null),onDiscard:()=>{const m=rl;oa(null),Fn.current=!0,m?.(),window.setTimeout(()=>{Fn.current=!1},0)},theme:ur}),Pa&&yc.createPortal(n.jsx("div",{className:`${Jt.overlay} ${Jt.unsavedOverlay}`,style:{zIndex:2e3},children:n.jsxs("div",{className:`tf-surface-modal tf-modal-shell ${Jt.modal} ${Jt.unsavedModal}`,"data-theme":ur,children:[n.jsx("div",{className:`tf-modal-header ${Jt.unsavedHeader}`,children:n.jsxs("div",{className:`tf-modal-title ${Jt.unsavedTitle}`,children:[n.jsx(od,{size:20}),"Unsaved Changes"]})}),n.jsx("div",{className:`${Jt.form} ${Jt.unsavedContent}`,children:n.jsx("p",{className:Jt.unsavedText,children:"You have unsaved changes. Would you like to save them?"})}),n.jsxs("div",{className:`${Jt.formActions} ${Jt.unsavedActions}`,children:[n.jsx("button",{className:x.cancelBtn,onClick:()=>Gs(!1),title:"Close dialog and continue editing",children:"Keep Editing"}),n.jsx("button",{className:x.destructiveBtn,onClick:gi,title:"Discard unsaved changes and leave",children:"Discard"}),n.jsxs("button",{className:x.submitBtn,onClick:ba,disabled:L,title:"Save changes and leave",children:[L?n.jsx(Ln,{size:16,className:x.spinner}):n.jsx(zS,{size:16}),"Save"]})]})]})}),document.body),ks&&yc.createPortal(n.jsx("div",{className:In.overlay,children:n.jsxs("div",{className:In.browser,children:[n.jsxs("div",{className:In.header,children:[n.jsxs("div",{className:In.pathInfo,children:[n.jsx(gc,{size:14}),n.jsx("span",{children:Ra||"Project Root"})]}),n.jsxs("div",{className:In.actions,children:[Ra&&n.jsx("button",{className:x.helpLink,onClick:()=>{const m=Ra.split("/").filter(Boolean);m.pop(),vs(m.length?m.join("/")+"/":"")},children:"Back"}),n.jsx("button",{className:x.helpLink,onClick:()=>Eo(!1),children:"Close"})]})]}),n.jsxs("div",{className:In.list,children:[Qa&&typeof Qa=="object"&&n.jsxs("div",{className:`${In.item} ${In.itemFile} ${In.itemCurrent}`,onClick:()=>ln(Ra),children:[n.jsx(hi,{size:14})," Select Current: ./",Ra||"(root)"]}),xa.map(m=>n.jsxs("div",{className:In.item,onClick:()=>vs(Ra+m+"/"),children:[n.jsx(gc,{size:14})," ",m,"/"]},m)),Ja.map(m=>n.jsxs("div",{className:`${In.item} ${In.itemFile}`,onClick:()=>ln(Ra+m),children:[n.jsx(Sf,{size:14})," ",m]},m)),xa.length===0&&Ja.length===0&&n.jsx("div",{className:`${In.item} ${In.empty}`,children:"No items found"})]})]})}),document.body)]})}function lX(e){const t=e.setupState,r=e.runtimeMode,a=e.isAuthenticated,s=!!(t&&r==="cloud"&&a&&t.globalSetupState==="missing"),i=!!(t&&r==="local"&&t.globalSetupState==="missing"),l=!!(t&&r==="cloud"&&a&&t.workspaceSetupState==="missing"),c=!!(t&&r==="local"&&t.workspaceSetupState==="missing"),d=!!(t&&(t.forceSetup||t.forceGlobalSetup||t.forceWorkspaceSetup||s||l||i||c));if(!d)return{setupGateActive:!1,needsGlobalSetup:!1,needsWorkspaceSetup:!1,hasSetupReadError:!1,phase:"ready"};const f=!!(t&&(t.forceSetup||t.forceGlobalSetup||s||i)),p=!!(t&&(t.forceSetup||t.forceWorkspaceSetup||l||c)),g=!!(f&&t?.globalSetupState==="missing"),h=!!(p&&t?.workspaceSetupState==="missing"),y=!!(f&&t?.globalSetupState==="unreadable"),k=!!(p&&t?.workspaceSetupState==="unreadable"),v=y||k;return{setupGateActive:d,needsGlobalSetup:g,needsWorkspaceSetup:h,hasSetupReadError:v,phase:v?"setup-read-error":g?"needs-global-setup":h?"needs-workspace-setup":"ready"}}const lk="/taskforce/assets/taskforce-BxLPokNB.png";function LS(e){return{categories:!!e?.categories?.length,types:!!e?.types?.length,priorities:!!e?.priorities?.length}}function dk(e){return(Array.isArray(e)?e:[]).map(t=>String(t.label||t.value||"").trim()).filter(Boolean).join(", ")}function uk(e={}){const t=new URLSearchParams;t.set("screen","plans");for(const[r,a]of Object.entries(e)){const s=String(a||"").trim();s&&t.set(r,s)}return`/?${t.toString()}`}function Vl(e,t){const r=String(t||"").trim();if(!r.startsWith("/")||r==="/")return e;try{const a=new URL(e,"https://taskforce.local");return a.searchParams.set("next",r),`${a.pathname}${a.search}${a.hash}`}catch{return e}}function OS({config:e={},initialTaskId:t,initialActivityEntryId:r,onTaskCountChange:a,onHeaderMouseDown:s,isDragging:i,onClose:l,mode:c="standalone"}){const d=rA(),f=o.useMemo(()=>new URLSearchParams(d.search),[d.search]),p=String(f.get(fi.workspaceId)||"").trim()||void 0,g=String(t||f.get(fi.task)||"").trim()||void 0,h=String(r||f.get(fi.activity)||f.get(fi.comment)||"").trim()||void 0,y=String(f.get("planId")||"").trim(),k=String(f.get("planVersionId")||"").trim(),v=String(f.get("interval")||"").trim(),C=d.pathname==="/pricing",S=d.pathname==="/plans",w=d.pathname==="/"&&String(f.get("screen")||"").trim().toLowerCase()==="plans",_=uk(),M=uk({gate:"plan_selection_required"}),R=tA(),[P,b]=o.useState(""),[$,I]=o.useState(""),[E,K]=o.useState(""),[U,L]=o.useState(""),[D,ie]=o.useState("login"),[H,be]=o.useState(""),[Z,me]=o.useState(!1),[Ve,Re]=o.useState(null),[je,ye]=o.useState(null),[ue,ve]=o.useState(null),[Pe,Le]=o.useState(!1),[se,V]=o.useState(""),[W,z]=o.useState(""),[fe,ke]=o.useState(null),[Y,we]=o.useState(null),[q,le]=o.useState("unknown"),[$e,re]=o.useState(!1),[de,He]=o.useState([]),[ce,pe]=o.useState(null),[xe,N]=o.useState(null),[X,Ae]=o.useState(null),[Te,he]=o.useState(!1),[ot,We]=o.useState(0),[Xe,ae]=o.useState(0),[G,Ie]=o.useState(()=>Date.now()),[Fe,it]=o.useState("core"),[Me,qe]=o.useState(!1),[ge,_e]=o.useState(null),[Be,Ge]=o.useState(null),[F,Ne]=o.useState(""),[Ce,ut]=o.useState(""),[mt,Ue]=o.useState("local"),[wt,kt]=o.useState("details"),[rt,Ht]=o.useState([]),[lr,rr]=o.useState(""),[wr,st]=o.useState(!1),[zt,Lt]=o.useState(null),[Mt,Ee]=o.useState(!1),[ct,lt]=o.useState(null),[Je,nt]=o.useState(!1),Ct=o.useRef(!1),Rt=o.useMemo(()=>TC(),[]),[Dt,It]=o.useState(Rt),[Qt,ir]=o.useState(()=>Rt.find(oe=>oe.isDefaultStarter)?.id||Rt[0]?.id||""),[dr,sr]=o.useState(()=>LS(Rt.find(oe=>oe.isDefaultStarter)||Rt[0]||null)),[pr,Jr]=o.useState(!1),[Tr,br]=o.useState(null),[ur,Qr]=o.useState(!1),[Hr,Gt]=o.useState(null),[bt,gr]=o.useState(!1),u=V1({config:e,initialTaskId:g,initialActivityEntryId:h,requestedWorkspaceId:p,onTaskCountChange:a,onClose:l}),{runtimeMode:ht,workspaceSwitchingEnabled:yr,currentWorkspaceId:Er,cloudAuthConfigured:mn,authRequiredForApi:qt,authBlocked:Vr,isAuthenticated:Tt,hasBetaAccess:Ut,authSessionResolved:fr,setupState:$t,runtimeCapabilities:Mr,refreshSetupContext:Fr,retryBootstrapChecks:Vt,createWorkspace:Dr,saveWorkspaceProfile:Ye,fetchWorkspaces:en,applyWorkspaceSyncStateSnapshot:bn,workspaceCloudSyncEnabled:tn,workspaceSyncPhase:ft,workspaceSyncSetupIntent:rn,workspaceSyncSummary:Nt,workspaceSyncRecommendedAction:or,workspaceSyncBusy:xr,workspaceLastErrorMessage:hn,retryWorkspaceCloudSync:ys,settingsModel:Nn,fetchTasks:Sn,bootstrapState:kr,loginWithCredentials:cr,beginOAuthLogin:Wr,availableAuthProviders:on,registerWithCredentials:dt,requestEmailVerification:Un,confirmEmailVerification:Tn,requestPasswordReset:jn,confirmPasswordReset:an,inspectInviteAcceptance:Ds,acceptInviteWithToken:da,joinInviteWithToken:J,authUserEmail:Qe,currentTheme:St,logout:Xt}=u,at=o.useCallback(async(oe,yt)=>{const Yt=await fetch("/api/taskforce/ui-state",{method:"POST",headers:{"Content-Type":"application/json"},credentials:"include",body:JSON.stringify({workspaceId:oe,stateKey:"workspace-sync",patch:yt})}),vr=await Yt.json().catch(()=>({}));if(!Yt.ok||vr?.success===!1)throw new Error(vr?.error||`Failed to configure workspace sync (${Yt.status})`);return vr},[]),Ft=o.useMemo(()=>Dt.find(oe=>oe.id===Qt)||Dt.find(oe=>oe.isDefaultStarter)||Dt[0]||null,[Qt,Dt]);sA(St);const Lr=Kk,Nr=o.useMemo(()=>{const oe=String(e.cloudAuthBaseUrl||e.apiBaseUrl||"").trim();return oe?oe.replace(/\/+$/,""):""},[e.apiBaseUrl,e.cloudAuthBaseUrl]),Rr=ht==="cloud"||Mr?.runtimeMode==="cloud",Kt=!Rr&&mn&&!!Nr,Bn=typeof window<"u"&&/^app\./i.test(window.location.hostname),Xn=ht==="cloud"&&qt,va=ht==="cloud"&&Vr,Cr=d.pathname==="/login",cn=d.pathname==="/setup",kn=d.pathname==="/coming-soon",zn="/setup?step=workspace&source=cloud&postAuth=select-cloud-workspace",ea=!Rr&&mt==="cloud",La=ea&&Kt,mr=o.useMemo(()=>{if(ct)return ct;if(rn!=="attach-cloud-import")return null;const oe=String(Er||"").trim();if(!oe||oe.toLowerCase()==="default")return null;const yt=rt.find(Yt=>Yt.id===oe);return{workspaceId:oe,name:yt?.name||oe}},[rt,Er,ct,rn]),Zo=!!(mr&&Er===mr.workspaceId),Za=!!(mr&&Zo&&ft==="error"),ks=!!(mr&&Zo&&tn&&ft==="active"&&!xr),Eo=o.useMemo(()=>{if(!mr)return[];const oe=Me?"In progress":"Complete",yt=Za?"Needs attention":xr||ft==="attach-cloud"?"In progress":ft==="active"?"Complete":"Waiting",Yt=Je?"In progress":ks?"Ready":"Waiting";return[`Connect workspace: ${oe}`,`Import cloud data: ${yt}`,`Open local workspace: ${Yt}`]},[mr,Me,Za,xr,ft,Je,ks]),xa=Bn?(!Tt||Vr)&&!C&&!S&&!w:(Xn&&!Tt||va)&&!C&&!S&&!w,Ja=ht==="cloud"&&Tt&&!Ut&&!C&&!S&&!w,Ra=ht==="cloud"&&Tt&&fr&&Hr?.canAccessApp===!1&&Hr?.canAccessPlans!==!1&&!C&&!S&&!w,vs=ht==="cloud"&&Tt&&(!fr||!bt),Qa=mn,ws=o.useMemo(()=>{switch(D){case"register":return"Create Account | Taskforce";case"verify":return"Verify Email | Taskforce";case"forgot":return"Reset Password | Taskforce";case"reset":return"Set New Password | Taskforce";case"invite":return"Accept Invite | Taskforce";default:return"Sign In | Taskforce"}},[D]),ln=o.useMemo(()=>String(new URLSearchParams(d.search).get("step")||"").trim().toLowerCase(),[d.search]),Oa=o.useMemo(()=>String(new URLSearchParams(d.search).get("intent")||"").trim().toLowerCase(),[d.search]),yn=cn&&ln==="workspace"&&Oa==="create-workspace",Vs=c!=="widget"&&kr.authPending&&!Cr&&!cn&&!C&&!S&&!w&&(ht==="cloud"||Bn),Mn=o.useMemo(()=>lX({setupState:$t?{globalSetupState:$t.globalSetupState,workspaceSetupState:$t.workspaceSetupState,runtimeMode:$t.runtimeMode,workspaceId:$t.workspaceId,mode:$t.mode,forceSetup:$t.forceSetup,forceGlobalSetup:$t.forceGlobalSetup,forceWorkspaceSetup:$t.forceWorkspaceSetup}:null,runtimeMode:ht,isAuthenticated:Tt}),[$t,ht,Tt]),Ls=Mn.setupGateActive,vt=Mn.needsGlobalSetup,nr=Mn.needsWorkspaceSetup,nn=Mn.hasSetupReadError,vn=c!=="widget"&&kr.auth.resolved&&!xa&&!Ja&&!C&&!S&&!w&&!Cr&&kr.appPending&&(cn||ht==="cloud"||Bn),ta=ht==="cloud"&&Pe&&!w,ho=kr.subtitle,Os=yn||cn&&!!mr||cn&&Ls&&(nn||vt||nr),wa=o.useMemo(()=>Vs?"auth-bootstrap":ta||vn?"app-bootstrap":Cr?"login":xa&&!Cr?"login-redirect":kn&&Ja?"coming-soon":Os?"guided-setup":"app",[kn,Cr,Ja,xa,ta,Vs,vn,Os]),Bs=o.useCallback((oe,yt,Yt)=>{const vr=String(oe||"").trim().toLowerCase(),Ur=String(yt||"").trim().toLowerCase();return!!(!vr||vr==="system default workspace"||Ur&&vr===Ur)},[]);o.useEffect(()=>{const oe=$t?.mode==="operations"?"operations":"core";it(oe)},[$t?.mode]),o.useEffect(()=>{if(ht!=="cloud"||!Tt){Gt(null),gr(!1);return}if(!fr){Gt(null),gr(!1);return}Gt(null),gr(!1);let oe=!1;return(async()=>{try{const yt=await fetch("/api/taskforce/account/access-status",{method:"GET",credentials:"include"}),Yt=await yt.json().catch(()=>({}));if(oe)return;if(!yt.ok){Gt(null),gr(!0);return}const vr=String(Yt?.gate||"").trim().toLowerCase();if(vr!=="ok"&&vr!=="plan_selection_required"&&vr!=="checkout_pending"&&vr!=="misconfigured"&&vr!=="missing_entitlement"){Gt(null),gr(!0);return}Gt({gate:vr,canAccessApp:Yt?.canAccessApp===!0,canAccessPlans:Yt?.canAccessPlans!==!1,message:typeof Yt?.message=="string"?Yt.message:null}),gr(!0)}catch{oe||(Gt(null),gr(!0))}})(),()=>{oe=!0}},[fr,Tt,ht,d.pathname,d.search]),o.useEffect(()=>{if(yn){Ne(""),ut("");return}if(!$t)return;const oe=String($t.workspace?.name||"").trim(),yt=String($t.suggestedWorkspaceName||"").trim(),Yt=Bs(oe,$t.workspaceId,$t.workspace?.description)?yt:oe;Ne(Yt||yt||oe),ut(String($t.workspace?.description||""))},[$t?.workspace?.name,$t?.workspace?.description,$t?.suggestedWorkspaceName,$t?.workspaceId,yn,Bs]),o.useEffect(()=>{if(!cn||ln!=="workspace")return;if(kt("details"),mr&&Kt){Ue("cloud"),Ee(!1);return}if(String(new URLSearchParams(d.search).get("source")||"").trim().toLowerCase()==="cloud"&&Kt){Ue("cloud"),Ee(!1);return}Ue("local")},[mr,Kt,cn,d.search,ln]);const Xa=o.useCallback(async()=>{if(!Kt||!Tt){Ht([]),rr("");return}st(!0),Lt(null);try{const oe=await fetch(`${Nr}/api/taskforce/workspaces`,{method:"GET",credentials:"include"}),yt=await oe.json().catch(()=>({}));if(!oe.ok||yt?.success===!1){Ht([]),rr(""),Lt(yt?.error||`Failed to load cloud projects (${oe.status})`);return}const Yt=Array.isArray(yt?.workspaces)?yt.workspaces.map(vr=>({id:String(vr?.id||"").trim(),name:String(vr?.name||vr?.id||"").trim(),description:typeof vr?.description=="string"?vr.description:null})).filter(vr=>vr.id.length>0):[];Ht(Yt),rr(vr=>vr&&Yt.some(Ur=>Ur.id===vr)?vr:Yt[0]?.id||"")}catch{Ht([]),rr(""),Lt("Failed to load cloud projects.")}finally{st(!1)}},[Kt,Tt,Nr]);o.useEffect(()=>{mt==="cloud"&&Xa()},[Xa,mt]),o.useEffect(()=>{if(!cn||ln!=="workspace"||mt==="cloud")return;let oe=!1;return Jr(!0),br(null),fetch("/api/taskforce/taxonomy-library",{method:"GET",credentials:"include"}).then(async yt=>{if(!yt.ok)throw new Error(`Failed to load setup libraries (${yt.status})`);const Yt=await yt.json().catch(()=>({})),vr=Array.isArray(Yt?.packs)?Yt.packs:[];oe||vr.length===0||(It(vr),ir(Ur=>vr.some(sa=>sa.id===Ur)?Ur:vr.find(sa=>sa.isDefaultStarter)?.id||vr[0]?.id||""))}).catch(yt=>{oe||(It(Rt),br(yt instanceof Error?yt.message:"Failed to load setup libraries."))}).finally(()=>{oe||Jr(!1)}),()=>{oe=!0}},[Rt,cn,ln,mt]),o.useEffect(()=>{sr(LS(Ft))},[Qt,Ft]),o.useEffect(()=>{mt==="cloud"&&kt("details")},[mt]),o.useEffect(()=>{La||(lt(null),nt(!1),Ct.current=!1)},[La]),o.useEffect(()=>{!Za||!mr||(Ge(null),_e(hn||`Failed to import "${mr.name}" from cloud. Retry import to continue.`))},[mr,Za,hn]),o.useEffect(()=>{if(!ks||!mr||Ct.current)return;let oe=!1;return Ct.current=!0,nt(!0),_e(null),Ge(`Workspace import complete. Opening ${mr.name}...`),(async()=>{try{if(await Fr(),await Promise.all([en(),Sn(!0)]),oe)return;await at(mr.workspaceId,{setupIntent:null}),bn({enabled:tn,phase:ft,setupIntent:null}),lt(null),R("/",{replace:!0})}catch{if(oe)return;Ge(null),_e(`Imported "${mr.name}" but failed to finish opening it.`),nt(!1),Ct.current=!1}})(),()=>{oe=!0}},[mr,bn,Sn,en,ks,R,at,Fr]);const Xr=o.useMemo(()=>{const oe=new URLSearchParams(d.search).get("next")||"/";if(oe.startsWith("/"))return oe==="/login"?"/":oe;try{const yt=new URL(oe),Yt=yt.hostname.toLowerCase(),vr=Yt==="localhost"||Yt==="127.0.0.1"||Yt==="::1",Ur=Yt==="taskforcehq.ai"||Yt.endsWith(".taskforcehq.ai");if((yt.protocol==="http:"||yt.protocol==="https:")&&(vr||Ur))return yt.toString()}catch{return"/"}return"/"},[d.search]),Ar=o.useMemo(()=>Xr.startsWith("/")?Xr:"/",[Xr]),An=o.useCallback((oe,yt)=>{if(oe){if(oe.startsWith("/")){R(oe,{replace:yt?.replace===!0});return}typeof window<"u"&&(yt?.replace===!0?window.location.replace(oe):window.location.assign(oe))}},[R]),es=o.useMemo(()=>{try{const oe=new URL(Ar,"https://taskforce.local");return oe.pathname==="/setup"&&oe.searchParams.get("step")==="workspace"&&oe.searchParams.get("source")==="cloud"&&oe.searchParams.get("postAuth")==="select-cloud-workspace"}catch{return!1}},[Ar]),Wn=o.useCallback((oe=Xr)=>{const yt=es?zn:"/setup?step=workspace";return es?yt:Vl(yt,oe)},[Xr,es]),ra=v==="year"?"year":"month",ts=o.useCallback(oe=>!!(oe?.planSelectionRequired||oe?.checkoutPending||oe?.commercialState==="pending_plan_selection"||oe?.commercialState==="checkout_pending"),[]),rs=o.useCallback(oe=>oe?.planSelectionRequired||oe?.commercialState==="pending_plan_selection"?Vl(M,Xr):oe?.checkoutPending||oe?.commercialState==="checkout_pending"?Vl(uk({gate:"checkout_pending",checkout:k?"start":null,planId:y||null,planVersionId:k||null,interval:k?ra:null}),Xr):Xr,[Xr,M,ra,y,k]),na=o.useMemo(()=>{const oe=String(new URLSearchParams(d.search).get("mode")||"").trim().toLowerCase();return oe==="register"?Qa?"register":"login":oe==="verify"||oe==="forgot"||oe==="reset"||oe==="invite"?oe:"login"},[Qa,d.search]),aa=o.useMemo(()=>String(new URLSearchParams(d.search).get("token")||"").trim(),[d.search]),un=o.useCallback(oe=>{const yt=new URLSearchParams(d.search),Yt=oe==="register"&&!Qa?"login":oe;Yt==="login"?yt.delete("mode"):yt.set("mode",Yt);const vr=yt.toString();R(`/login${vr?`?${vr}`:""}`,{replace:!0})},[Qa,d.search,R]);o.useEffect(()=>{Cr&&(ie(na),na==="verify"&&aa&&be(aa),na==="reset"&&aa&&V(aa),na==="invite"&&aa&&z(aa))},[Cr,na,aa]),o.useEffect(()=>{D!=="verify"&&(Cr&&na==="verify"||(me(!1),Re(null),ye(null)))},[D,Cr,na]),o.useEffect(()=>{D!=="register"&&L("")},[D]),o.useEffect(()=>{if(!ue||!Tt||!ue.commercialOnboardingGate&&(!fr||vs))return;const oe=!ue.commercialOnboardingGate&&ue.workspaceSetupRequired?Wn():ue.path,yt=`${d.pathname}${d.search}${d.hash||""}`;if(oe.startsWith("/")){yt!==oe&&R(oe,{replace:!0});return}An(oe,{replace:!0})},[fr,vs,Tt,d.hash,d.pathname,d.search,R,An,ue,Wn]),o.useEffect(()=>{if(!Pe||!fr)return;if(!Tt){Le(!1),ve(null);return}if(bt&&Hr?.canAccessApp===!0){b(""),I(""),K(""),L(""),ve(null),Le(!1);return}const oe=ue?.commercialOnboardingGate?ue.path:M,yt=`${d.pathname}${d.search}${d.hash||""}`;if(oe.startsWith("/")){yt!==oe&&R(oe,{replace:!0});return}An(oe,{replace:!0})},[Hr?.canAccessApp,bt,fr,Pe,Tt,d.hash,d.pathname,d.search,R,An,ue,M]),o.useEffect(()=>{if(!ue||!Tt)return;const oe=!ue.commercialOnboardingGate&&ue.workspaceSetupRequired?Wn():ue.path;`${d.pathname}${d.search}${d.hash||""}`===oe&&(ue.commercialOnboardingGate||(b(""),I(""),K(""),L(""),ve(null)))},[d.hash,d.pathname,d.search,Tt,ue,Wn,ht]),o.useEffect(()=>{Cr&&(document.title=ws)},[ws,Cr]),o.useEffect(()=>{if(!Cr||D!=="invite"||!W.trim())return;let oe=!0;return(async()=>{const yt=await Ds(W);if(oe)if(yt.success){ke(yt.email||null),we(yt.workspaceId||null),re(yt.passwordRequired===!0);const Yt=(yt.availableMethods||[]).filter(sa=>sa==="google"||sa==="github"||sa==="apple");He(yt.inviteeState==="pending_setup"?Yt:[]);const vr=!!(Tt&&Qe&&yt.email&&Qe.trim().toLowerCase()===yt.email.trim().toLowerCase()),Ur=yt.passwordRequired===!0?"new_user":vr?"existing_user_ready":"existing_user_signed_out";le(Ur),pe(Ur==="new_user"?"Create your account password to join this workspace.":Ur==="existing_user_ready"?"Invite ready. Confirm to join this workspace.":"Sign in with the invited account to join this workspace."),N(null),Ae(null)}else ke(null),we(null),le("invalid"),re(!1),He([]),N(ua(yt)),Ae(yt.code||yt.state||null)})(),()=>{oe=!1}},[Cr,D,W,Ds,Tt,Qe]),o.useEffect(()=>{D==="invite"&&q==="existing_user_signed_out"&&fe&&b(oe=>oe.trim()?oe:fe)},[D,q,fe]),o.useEffect(()=>{if(!(ot>Date.now()||Xe>Date.now()))return;const yt=window.setInterval(()=>Ie(Date.now()),1e3);return()=>window.clearInterval(yt)},[ot,Xe]);const bs=Math.max(0,Math.ceil((ot-G)/1e3)),Ws=Math.max(0,Math.ceil((Xe-G)/1e3)),go=bs>0,pn=Ws>0,Hn=o.useMemo(()=>T_(),[]),ua=oe=>{const yt=oe.error||"Request failed.",Yt=oe.code||oe.state;return Yt?`[${Yt}] ${yt}`:yt},Pa=oe=>oe?.deliveryAttempted===!1?oe?.intro||"If that account exists and still needs verification, we sent an email.":oe?.emailSent===!1?`Verification email failed to send. ${oe?.emailError||"Try Resend Verification again."}`:"Verification email resent.",Gs=oe=>oe?.deliveryAttempted===!1?"If that account exists, we sent password reset instructions.":oe?.emailSent===!1?`Password reset email failed to send. ${oe?.emailError||"Try again in a minute."}`:"Password reset instructions sent.";o.useEffect(()=>{if(c==="widget"||Cr&&Te)return;const oe=`${d.pathname}${d.search}${d.hash||""}`,yt=cn?Xr:oe,Yt=ht==="cloud"&&Tt&&bt&&Hr?.canAccessApp===!1&&Hr?.canAccessPlans!==!1;if(kr.workspace.pending&&!Yt)return;if(Ja){kn||R("/coming-soon",{replace:!0});return}if(kn&&!Ja){R("/",{replace:!0});return}if(xa){if(!Cr){const Ur=`${d.pathname}${d.search}${d.hash}`;R(`/login?next=${encodeURIComponent(Ur||"/")}`,{replace:!0});return}return}else{const Ur=Cr&&D==="invite"&&W.trim().length>0;if(Cr&&Tt&&!Ur&&(!!ue||kr.workspace.pending||D==="register"||D==="verify"||!kr.config.loaded||vs))return;Cr&&Tt&&!Ur&&An(Xr,{replace:!0})}if(!(Cr&&!Tt||ue&&Tt||Cr&&Tt&&(D==="register"||D==="verify"||D==="invite"&&W.trim().length>0))&&!Pe&&!w){if(Ra){if(!w){const Ur=encodeURIComponent(String(Hr?.gate||"plan_selection_required"));R(Vl(`/?screen=plans&gate=${Ur}`,oe),{replace:!0})}return}if(mr){cn&&ln==="workspace"&&new URLSearchParams(d.search).get("source")==="cloud"||R(zn,{replace:!0});return}if(!(w&&vs)&&!(w&&ht==="cloud"&&bt&&Hr?.canAccessApp===!1&&Hr?.canAccessPlans!==!1)){if(Ls){if(nn){(!cn||ln!=="error")&&R(Vl("/setup?step=error",yt),{replace:!0});return}if(vt){(!cn||ln!=="global")&&R(Vl("/setup?step=global",yt),{replace:!0});return}if(nr){(!cn||ln!=="workspace")&&R(Wn(yt),{replace:!0});return}cn&&An(Xr,{replace:!0});return}cn&&$t&&!yn&&An(Xr,{replace:!0})}}},[c,xa,Ja,Ra,Cr,cn,kn,S,w,Hr,Hr?.gate,bt,D,Pe,vs,Ls,$t,nn,yn,mr,vt,nr,ln,kr,ht,Te,Tt,bt,W,d.pathname,d.search,d.hash,R,An,Ar,Xr,ue,zn]),o.useEffect(()=>{if(c==="widget"||ht!=="local"||!kr.config.loaded||Cr||cn)return;const oe=String(Er||"").trim().toLowerCase();if(!oe||oe==="default"){const yt=`${d.pathname}${d.search}${d.hash||""}`;R(Vl("/setup?step=workspace",yt),{replace:!0})}},[c,ht,kr.config.loaded,Cr,cn,Er,d.hash,d.pathname,d.search,R]);const Vn=o.useCallback(async()=>{Qr(!0);try{await Vt()}finally{Qr(!1)}},[Vt]),wn=o.useCallback(async()=>{await Xt(),R("/login",{replace:!0})},[Xt,R]);if(c==="widget")return n.jsx(eH,{...u,initialActivityEntryId:h,onHeaderMouseDown:s,isDragging:i,onClose:l});if(C){const oe=new URLSearchParams(d.search);return oe.set("screen","plans"),n.jsx(Hw,{to:`/?${oe.toString()}${d.hash||""}`,replace:!0})}if(S){const oe=new URLSearchParams(d.search);return oe.set("screen","plans"),n.jsx(Hw,{to:`/?${oe.toString()}${d.hash||""}`,replace:!0})}if(wa==="auth-bootstrap")return n.jsx("div",{className:zr.standaloneWrapper,"data-theme":St,children:n.jsx("div",{className:Ze.loginView,children:n.jsxs("div",{className:Ze.loginCard,children:[n.jsxs("div",{className:Ze.authBrandRow,children:[n.jsx("img",{src:Lr,alt:"Taskforce",className:Ze.loginLogo}),n.jsx("h1",{className:Ze.loginTitle,children:"Loading Taskforce"})]}),n.jsx("p",{className:Ze.loginSubtitle,children:"Checking your session..."})]})})});if(wa==="app-bootstrap")return n.jsx("div",{className:zr.standaloneWrapper,"data-theme":St,children:n.jsx("div",{className:Ze.loginView,children:n.jsxs("div",{className:Ze.loginCard,children:[n.jsxs("div",{className:Ze.authBrandRow,children:[n.jsx("img",{src:Lr,alt:"Taskforce",className:Ze.loginLogo}),n.jsx("h1",{className:Ze.loginTitle,children:"Loading Taskforce"})]}),n.jsx("p",{className:Ze.loginSubtitle,children:ho}),kr.stalled&&n.jsxs(n.Fragment,{children:[n.jsx("p",{className:Ze.loginError,children:kr.error||"Startup checks timed out."}),n.jsx("button",{className:x.submitBtn,disabled:ur,onClick:Vn,children:ur?"Retrying...":"Retry checks"}),Rr&&n.jsx("button",{className:x.cancelBtn,disabled:ur,onClick:wn,children:"Go to sign-in"})]})]})})});if(wa==="login")return n.jsx("div",{className:zr.standaloneWrapper,"data-theme":St,children:n.jsx("div",{className:Ze.loginView,style:{backgroundImage:`linear-gradient(rgba(15, 15, 26, 0.88), rgba(15, 15, 26, 0.9)), url(${lk})`},children:n.jsxs("div",{className:Ze.loginCard,children:[!Rr&&!xa&&n.jsx("button",{className:Ze.loginCloseBtn,"aria-label":"Close sign in","data-testid":"auth-close-button",onClick:()=>R(Ar,{replace:!0}),children:"×"}),n.jsxs("div",{className:Ze.authBrandRow,children:[n.jsx("img",{src:Lr,alt:"Taskforce",className:Ze.loginLogo}),n.jsxs("h1",{className:Ze.loginTitle,children:["TASKFORCE ",n.jsx("span",{className:Ze.loginTitleAccent,children:"HQ"})]})]}),n.jsxs("p",{className:Ze.loginSubtitle,children:[D==="login"&&"Sign in with your account credentials.",D==="register"&&"Create your Taskforce account.",D==="verify"&&"Enter your verification token.",D==="forgot"&&"Request a password reset link.",D==="reset"&&"Set a new password using your reset token.",D==="invite"&&(q==="existing_user_ready"?`You've been invited to join ${Y||"this workspace"}.`:q==="existing_user_signed_out"?"Sign in to join this workspace.":"Create your account to join this workspace.")]}),(D==="login"||D==="register"||D==="verify"||D==="forgot"||D==="invite"&&q==="existing_user_signed_out")&&n.jsxs("label",{className:Ze.loginField,children:[n.jsx("span",{className:Ze.loginFieldLabel,children:"Email"}),n.jsx("input",{className:`${x.input} ${Ze.loginInput}`,type:"email",value:P,placeholder:"Email",autoComplete:"email","data-testid":"auth-email-input",onChange:oe=>b(oe.target.value)})]}),D==="register"&&n.jsxs("label",{className:Ze.loginField,children:[n.jsx("span",{className:Ze.loginFieldLabel,children:"Display name"}),n.jsx("input",{className:`${x.input} ${Ze.loginInput}`,type:"text",value:$,placeholder:"Display name",autoComplete:"nickname","data-testid":"auth-display-name-input",onChange:oe=>I(oe.target.value)})]}),(D==="login"||D==="register"||D==="reset"||D==="invite"&&($e||q==="existing_user_signed_out"))&&n.jsxs("label",{className:Ze.loginField,children:[n.jsx("span",{className:Ze.loginFieldLabel,children:D==="reset"?"New password":D==="invite"&&$e?"Create password":"Password"}),n.jsx("input",{className:`${x.input} ${Ze.loginInput}`,type:"password",value:E,placeholder:D==="reset"?"New password":D==="invite"&&$e?"Create password":"Password",autoComplete:D==="register"||D==="reset"||D==="invite"&&$e?"new-password":"current-password","data-testid":"auth-password-input",onChange:oe=>K(oe.target.value)})]}),(D==="register"||D==="invite"&&$e)&&n.jsx(n.Fragment,{children:n.jsxs("label",{className:Ze.loginField,children:[n.jsx("span",{className:Ze.loginFieldLabel,children:"Confirm password"}),n.jsx("input",{className:`${x.input} ${Ze.loginInput}`,type:"password",value:U,placeholder:"Confirm password",autoComplete:"new-password","data-testid":"auth-confirm-password-input",onChange:oe=>L(oe.target.value)})]})}),(D==="register"||D==="invite"&&$e)&&n.jsx("p",{className:Ze.loginSubtitle,children:Hn.join(" ")}),D==="verify"&&n.jsxs("label",{className:Ze.loginField,children:[n.jsx("span",{className:Ze.loginFieldLabel,children:"Verification token"}),n.jsx("input",{className:`${x.input} ${Ze.loginInput}`,type:"text",value:H,placeholder:"Verification token",autoComplete:"one-time-code","data-testid":"auth-verification-token-input",onChange:oe=>be(oe.target.value)})]}),D==="reset"&&n.jsxs("label",{className:Ze.loginField,children:[n.jsx("span",{className:Ze.loginFieldLabel,children:"Reset token"}),n.jsx("input",{className:`${x.input} ${Ze.loginInput}`,type:"text",value:se,placeholder:"Reset token",autoComplete:"one-time-code","data-testid":"auth-reset-token-input",onChange:oe=>V(oe.target.value)})]}),D==="invite"&&n.jsxs(n.Fragment,{children:[n.jsxs("label",{className:Ze.loginField,children:[n.jsx("span",{className:Ze.loginFieldLabel,children:"Invite token"}),n.jsx("input",{className:`${x.input} ${Ze.loginInput}`,type:"text",value:W,placeholder:"Invite token","data-testid":"auth-invite-token-input",onChange:oe=>z(oe.target.value)})]}),fe&&n.jsxs("p",{className:Ze.loginSubtitle,children:["Invite for: ",n.jsx("strong",{children:fe}),Y?` · Workspace: ${Y}`:""]})]}),ce&&n.jsx("p",{className:Ze.loginSubtitle,children:ce}),xe&&n.jsx("p",{className:Ze.loginError,children:xe}),D==="login"&&X==="EMAIL_NOT_VERIFIED"&&P.trim()&&n.jsx("button",{className:Ze.authModeLink,disabled:Te||go,onClick:async()=>{he(!0),pe(null);const oe=await Un(P);oe.success?(We(Date.now()+3e4),un("verify"),oe.verificationToken&&be(oe.verificationToken),pe(Pa(oe)),N(null),Ae(null)):N(ua(oe)),he(!1)},children:go?`Resend in ${bs}s`:"Resend Verification Email"}),n.jsx("div",{className:Ze.authPrimaryActions,role:"group","aria-label":"Primary authentication action",children:n.jsx("button",{className:`${x.submitBtn} ${Ze.loginPrimaryBtn}`,disabled:Te||D==="forgot"&&pn,"data-testid":"auth-submit-button",onClick:async()=>{if(he(!0),pe(null),N(null),Ae(null),D==="register"&&!$.trim()){N("Display name is required."),he(!1);return}if(D==="register"){const yt=Vk(E,{email:P,displayName:$});if(!yt.ok){N(yt.message||"Password does not meet the password policy."),Ae(yt.code||null),he(!1);return}if(E!==U){N("Passwords do not match."),Ae("PASSWORD_CONFIRMATION_MISMATCH"),he(!1);return}}let oe={success:!1};if(D==="login"?oe=await cr(P,E):D==="register"?oe=await dt(P,E,{displayName:$,planId:y||void 0,planVersionId:k||void 0,interval:v||void 0}):D==="verify"?oe=await Tn(H):D==="forgot"?oe=await jn(P):D==="reset"?oe=await an(se,E):D==="invite"&&(q==="existing_user_signed_out"?oe=await cr(P,E):oe=$e?await da(W,E):await J(W)),oe.success)if(D==="register"){const yt=rs(oe),Yt=ts(oe);oe.verificationRequired?(me(!!oe.workspaceSetupRequired),Re(Yt?String(oe.commercialState||"").trim()||(oe.planSelectionRequired?"pending_plan_selection":"checkout_pending"):null),ye(yt),oe.verificationToken&&be(oe.verificationToken),We(Date.now()+3e4),un("verify"),pe(oe.emailSent===!1?`Account created, but verification email failed to send. ${oe.emailError||"Try Resend Verification again."}`:"Account created. Check your email for verification instructions.")):(Le(Yt),ve({path:yt,workspaceSetupRequired:!!oe.workspaceSetupRequired,commercialOnboardingGate:Yt}))}else if(D==="verify"){await Vt();const yt=Ve==="pending_plan_selection"||Ve==="checkout_pending";Le(yt),ve({path:je||Xr,workspaceSetupRequired:Z,commercialOnboardingGate:yt})}else if(D==="forgot"){const yt=oe.deliveryAttempted===!0&&oe.emailSent===!1;oe.resetToken&&V(oe.resetToken),pe(Gs(oe)),yt||(ae(Date.now()+3e4),un("reset"))}else if(D==="reset")un("login"),pe("Password updated. Sign in with your new password.");else if(D==="invite"){if(q==="existing_user_signed_out"){const yt=String(fe||"").trim().toLowerCase(),Yt=P.trim().toLowerCase();if(yt&&Yt===yt){ie("invite"),le("existing_user_ready"),K(""),L(""),pe("Signed in. Review the invite details to continue."),N(null),Ae(null),he(!1);return}yt&&b(fe||""),le("existing_user_signed_out"),K(""),L(""),pe(yt?`Signed in, but this invite is for ${fe}. Sign in with that account to continue.`:"Signed in, but this invite requires the invited account. Sign in with that account to continue."),N("Sign in with the invited account to join this workspace."),Ae("INVITE_ACCOUNT_MISMATCH"),he(!1);return}if(oe.workspaceSetupRequired){R(Wn(),{replace:!0}),he(!1);return}An(Xr,{replace:!0})}else if(D==="login"){if(W.trim()){ie("invite"),K(""),L(""),pe("Signed in. Review the invite details to continue."),he(!1);return}if(oe.workspaceSetupRequired){R(Wn(),{replace:!0}),he(!1);return}b(""),I(""),K(""),L(""),An(Xr,{replace:!0})}else b(""),I(""),K(""),L(""),An(Xr,{replace:!0});else{if(D==="register"&&(oe.code==="SIGNUP_PLAN_NOT_ENABLED"||oe.code==="SIGNUP_PLAN_VERSION_NOT_FOUND"||oe.code==="SIGNUP_PLAN_VERSION_REQUIRED")){R(M,{replace:!0}),he(!1);return}if(N(ua(oe)),Ae(oe.code||null),D==="login"&&(oe.code==="WORKSPACE_NOT_FOUND"||oe.code==="WORKSPACE_ID_REQUIRED")){R("/setup?step=workspace",{replace:!0}),he(!1);return}if(D==="login"&&oe.code==="EMAIL_NOT_VERIFIED"&&P.trim()){const yt=await Un(P);yt.success&&(We(Date.now()+3e4),un("verify"),yt.verificationToken&&be(yt.verificationToken),pe(Pa({...yt,intro:"If that account exists and still needs verification, we sent an email."})),N(null),Ae(null))}D==="register"&&oe.code==="EMAIL_ALREADY_EXISTS_UNVERIFIED"&&P.trim()&&(We(Date.now()+3e4),un("verify"),oe.verificationToken&&be(oe.verificationToken),pe(oe.emailSent===!1?`This email already has an unverified account, but verification email delivery failed. ${oe.emailError||"Try Resend Verification again."}`:"This email already has an unverified account. Check your email for verification instructions."),N(null),Ae(null))}he(!1)},children:Te?"Working...":D==="login"?"Sign In":D==="register"?"Create Account":D==="verify"?"Verify Email":D==="forgot"?pn?`Retry in ${Ws}s`:"Send Reset Link":D==="reset"?"Reset Password":q==="existing_user_signed_out"?"Sign In to Continue":$e?"Create Account and Join":"Join Workspace"})}),(D==="login"||D==="register")&&on.length>0&&n.jsxs("div",{className:Ze.oauthProviders,children:[n.jsx("div",{className:Ze.oauthDivider,children:n.jsx("span",{children:"or continue with"})}),n.jsxs("div",{className:Ze.oauthButtons,children:[on.includes("google")&&n.jsx("button",{type:"button",className:Ze.oauthButton,disabled:Te,onClick:()=>Wr("google",Xr),"aria-label":"Continue with Google",children:"Google"}),on.includes("github")&&n.jsx("button",{type:"button",className:Ze.oauthButton,disabled:Te,onClick:()=>Wr("github",Xr),"aria-label":"Continue with GitHub",children:"GitHub"}),on.includes("apple")&&n.jsx("button",{type:"button",className:Ze.oauthButton,disabled:Te,onClick:()=>Wr("apple",Xr),"aria-label":"Continue with Apple",children:"Apple"})]})]}),D==="invite"&&q==="new_user"&&de.length>0&&n.jsxs("div",{className:Ze.oauthProviders,children:[n.jsx("div",{className:Ze.oauthDivider,children:n.jsx("span",{children:"or join with"})}),n.jsxs("div",{className:Ze.oauthButtons,children:[de.includes("google")&&n.jsx("button",{type:"button",className:Ze.oauthButton,disabled:Te,onClick:()=>Wr("google","/",W),"aria-label":"Join with Google",children:"Google"}),de.includes("github")&&n.jsx("button",{type:"button",className:Ze.oauthButton,disabled:Te,onClick:()=>Wr("github","/",W),"aria-label":"Join with GitHub",children:"GitHub"}),de.includes("apple")&&n.jsx("button",{type:"button",className:Ze.oauthButton,disabled:Te,onClick:()=>Wr("apple","/",W),"aria-label":"Join with Apple",children:"Apple"})]})]}),D==="register"&&n.jsxs("p",{className:Ze.registerConsent,children:["By creating an account, you agree to the"," ",n.jsx("a",{className:Ze.registerConsentLink,href:"https://taskforcehq.ai/legal/terms/",target:"_blank",rel:"noopener noreferrer",children:"Terms of Service"})," ","and acknowledge the"," ",n.jsx("a",{className:Ze.registerConsentLink,href:"https://taskforcehq.ai/legal/privacy/",target:"_blank",rel:"noopener noreferrer",children:"Privacy Policy"}),"."]}),n.jsxs("div",{className:Ze.authSecondaryActions,role:"group","aria-label":"Authentication navigation",children:[Qa&&(D==="login"||D==="register")&&n.jsxs("p",{className:Ze.authModeSwitch,children:[D==="login"?"Need an account?":"Already have an account?"," ",n.jsx("button",{className:Ze.authModeSwitchLink,disabled:Te,"data-testid":"auth-switch-mode-button",onClick:()=>{N(null),Ae(null),pe(null),un(D==="login"?"register":"login")},children:D==="login"?"Register":"Sign In"})]}),n.jsxs("div",{className:Ze.authModeLinks,children:[(D==="login"||D==="register")&&n.jsxs(n.Fragment,{children:[n.jsx("button",{className:Ze.authModeLink,disabled:Te||pn,"data-testid":"auth-forgot-password-button",onClick:()=>{N(null),Ae(null),pe(null),un("forgot")},children:pn?`Forgot Password (${Ws}s)`:"Forgot Password"}),n.jsx("button",{className:Ze.authModeLink,disabled:Te||go,"data-testid":"auth-resend-verification-button",onClick:()=>{N(null),Ae(null),pe(null),un("verify")},children:go?`Resend Verification (${bs}s)`:"Resend Verification"}),n.jsx("button",{className:Ze.authModeLink,disabled:Te,"data-testid":"auth-accept-invite-button",onClick:()=>{N(null),Ae(null),pe(null),un("invite")},children:"Accept Invite"})]}),D!=="login"&&D!=="register"&&n.jsxs(n.Fragment,{children:[D==="verify"&&n.jsx("button",{className:Ze.authModeLink,disabled:Te||go||!P.trim(),"data-testid":"auth-resend-verification-button",onClick:async()=>{he(!0),pe(null),N(null),Ae(null);const oe=await Un(P);oe.success?(We(Date.now()+3e4),oe.verificationToken&&be(oe.verificationToken),pe(Pa(oe))):N(ua(oe)),he(!1)},children:go?`Resend Verification (${bs}s)`:"Resend Verification"}),n.jsx("button",{className:Ze.authModeLink,disabled:Te,"data-testid":"auth-return-sign-in-button",onClick:()=>{N(null),Ae(null),pe(null),un("login")},children:D==="verify"?"Back to Sign In":"Sign In"}),Qa&&D!=="verify"&&n.jsx("button",{className:Ze.authModeLink,disabled:Te,"data-testid":"auth-return-register-button",onClick:()=>{N(null),Ae(null),pe(null),un("register")},children:"Register"}),D==="reset"&&n.jsx("button",{className:Ze.authModeLink,disabled:Te||pn,"data-testid":"auth-return-forgot-password-button",onClick:()=>{N(null),Ae(null),pe(null),un("forgot")},children:pn?`Forgot Password (${Ws}s)`:"Forgot Password"})]})]})]})]})})});if(wa==="login-redirect")return n.jsx("div",{className:zr.standaloneWrapper,"data-theme":St,children:n.jsx("div",{className:Ze.loginView,children:n.jsxs("div",{className:Ze.loginCard,children:[n.jsxs("div",{className:Ze.authBrandRow,children:[n.jsx("img",{src:Lr,alt:"Taskforce",className:Ze.loginLogo}),n.jsx("h1",{className:Ze.loginTitle,children:"Loading Taskforce"})]}),n.jsx("p",{className:Ze.loginSubtitle,children:"Redirecting to sign in..."})]})})});if(wa==="coming-soon")return n.jsx("div",{className:zr.standaloneWrapper,"data-theme":St,children:n.jsx("div",{className:Ze.loginView,style:{backgroundImage:`linear-gradient(rgba(15, 15, 26, 0.88), rgba(15, 15, 26, 0.9)), url(${lk})`},children:n.jsxs("div",{className:Ze.loginCard,children:[n.jsxs("div",{className:Ze.authBrandRow,children:[n.jsx("img",{src:Lr,alt:"Taskforce",className:Ze.loginLogo}),n.jsx("h1",{className:Ze.loginTitle,children:"Beta Access"})]}),n.jsx("p",{className:Ze.loginSubtitle,children:"You are signed in, but your account does not have beta access yet."}),n.jsx("p",{className:Ze.loginSubtitle,children:"You will see the full app as soon as beta access is enabled."}),n.jsx("button",{className:x.cancelBtn,onClick:async()=>{await u.logout(),R("/login",{replace:!0})},children:"Sign Out"})]})})});if(wa==="guided-setup"){const oe=!yn&&(nn||ln==="error"),yt=!yn&&!oe&&(vt||ln==="global"),Yt=_t(oe?"setup.headingCheckFailed":yt?"setup.headingGlobalRequired":"setup.headingWorkspaceRequired"),vr=oe?_t("setup.subtitleUnreadable"):yt?_t("setup.subtitleGlobalRequired"):null,Ur="Workspace",sa=Rr||mt!=="cloud",Dn=sa&&wt==="details",Cn=sa&&wt==="library",gi=!Rr&&Kt&&Dn&&!mr,ba=Mr?.runtimeMode==="cloud"?YS:UT,Ba=Ft?dk(Ft.categories):"",yo=Ft?dk(Ft.types):"",Ss=Ft?dk(Ft.priorities):"",ko=Me?_t("setup.saving"):ea?mr?Za?"Retry Import":"Importing Workspace...":"Connect Workspace":Dn?"Continue":Cn?"Create Workspace":"Connect Workspace";return n.jsx("div",{className:zr.standaloneWrapper,"data-theme":St,children:n.jsx("div",{className:Ze.loginView,style:{backgroundImage:`linear-gradient(rgba(15, 15, 26, 0.88), rgba(15, 15, 26, 0.9)), url(${lk})`},children:n.jsxs("div",{className:Ze.loginCard,children:[n.jsxs("div",{className:Ze.setupHeaderRow,children:[n.jsxs("div",{className:Ze.authBrandRow,children:[n.jsx("img",{src:Lr,alt:"Taskforce",className:Ze.loginLogo}),n.jsxs("h1",{className:Ze.loginTitle,children:["TASKFORCE ",n.jsx("span",{className:Ze.loginTitleAccent,children:"HQ"})]})]}),Mr&&n.jsx("span",{className:Ze.runtimeIconBadge,title:Mr.runtimeMode==="cloud"?"Cloud runtime":"Local runtime","aria-label":Mr.runtimeMode==="cloud"?"Cloud runtime":"Local runtime",children:Q.createElement(ba,{size:16,"aria-hidden":!0})})]}),n.jsx("p",{className:Ze.loginSubtitle,children:n.jsx("strong",{children:Yt})}),vr?n.jsx("p",{className:Ze.loginSubtitle,children:vr}):null,Be&&n.jsx("p",{className:Ze.loginSubtitle,children:Be}),ge&&n.jsx("p",{className:Ze.loginError,children:ge}),yt&&n.jsxs("div",{className:Ze.optionGrid,children:[n.jsxs("label",{className:`${Ze.authModeLink} ${Ze.optionRow}`,children:[n.jsx("input",{type:"radio",name:"setup-mode",value:"core",checked:Fe==="core",onChange:()=>it("core"),disabled:Me}),n.jsx("span",{children:_t("setup.coreModeOption",{workspaceLabel:Ur})})]}),n.jsxs("label",{className:`${Ze.authModeLink} ${Ze.optionRow}`,children:[n.jsx("input",{type:"radio",name:"setup-mode",value:"operations",checked:Fe==="operations",onChange:()=>it("operations"),disabled:Me}),n.jsx("span",{children:_t("setup.operationsModeOption")})]})]}),!oe&&!yt&&n.jsxs("div",{className:Ze.optionGrid,children:[gi&&n.jsxs("div",{className:Ze.optionGroup,children:[n.jsxs("label",{className:`${Ze.authModeLink} ${Ze.optionRow}`,children:[n.jsx("input",{type:"radio",name:"workspace-setup-source",value:"local",checked:mt==="local",onChange:()=>Ue("local"),disabled:Me}),n.jsxs("span",{children:["Create new local ",Ur.toLowerCase()]})]}),n.jsxs("label",{className:`${Ze.authModeLink} ${Ze.optionRow}`,children:[n.jsx("input",{type:"radio",name:"workspace-setup-source",value:"cloud",checked:mt==="cloud",onChange:()=>Ue("cloud"),disabled:Me}),n.jsxs("span",{children:["Sync existing cloud ",Ur.toLowerCase()]})]})]}),ea?n.jsxs("div",{className:Ze.optionGroup,children:[!mr&&!Kt&&n.jsx("p",{className:Ze.loginError,children:"Cloud workspace sync is unavailable right now. Switch back to local setup or refresh runtime configuration."}),!mr&&Kt&&!Tt&&n.jsxs(n.Fragment,{children:[n.jsx("p",{className:Ze.inlineHint,children:"Sign in to choose one of your cloud projects."}),n.jsxs("div",{className:Ze.actionRowEnd,children:[n.jsx("button",{className:x.cancelBtn,disabled:Me,onClick:()=>{R(`/login?mode=login&next=${encodeURIComponent(zn)}`,{replace:!0})},children:"Sign In"}),Qa&&n.jsx("button",{className:x.submitBtn,disabled:Me,onClick:()=>{R(`/login?mode=register&next=${encodeURIComponent(zn)}`,{replace:!0})},children:"Register"})]})]}),!mr&&Kt&&Tt&&n.jsxs(n.Fragment,{children:[n.jsxs("select",{className:x.input,value:lr,onChange:Bt=>rr(Bt.target.value),disabled:Me||wr||rt.length===0,children:[rt.length===0&&n.jsx("option",{value:"",children:wr?"Loading cloud projects...":"No cloud projects found"}),rt.map(Bt=>n.jsxs("option",{value:Bt.id,children:[Bt.name," (",Bt.id,")"]},Bt.id))]}),n.jsx("div",{className:Ze.actionRowEnd,children:n.jsx("button",{className:x.cancelBtn,disabled:Me||wr,onClick:()=>{Xa()},children:"Refresh Cloud Projects"})}),zt&&n.jsx("p",{className:Ze.loginError,children:zt})]}),mr&&n.jsxs(n.Fragment,{children:[n.jsxs("p",{className:Ze.inlineHint,children:['Importing "',mr.name,'" from cloud into local.']}),n.jsx("div",{className:Ze.optionGroup,children:Eo.map(Bt=>n.jsx("p",{className:Ze.inlineHint,children:Bt},Bt))}),n.jsx("p",{className:Ze.inlineHint,children:Je?"Finishing setup and opening your workspace.":Nt||"Pulling tasks, taxonomies, and settings into local."}),!Je&&or&&n.jsx("p",{className:Ze.inlineHint,children:or})]})]}):n.jsxs(n.Fragment,{children:[Dn&&n.jsxs(n.Fragment,{children:[n.jsx("p",{className:Ze.loginSubtitle,children:"Workspace name"}),n.jsx("input",{className:x.input,type:"text",value:F,placeholder:"Workspace name",onChange:Bt=>Ne(Bt.target.value),disabled:Me}),n.jsx("p",{className:Ze.loginSubtitle,children:"Workspace description"}),n.jsx("textarea",{className:x.textarea,value:Ce,placeholder:"Workspace description (optional)",onChange:Bt=>ut(Bt.target.value),disabled:Me,rows:4})]}),Cn&&n.jsxs("div",{className:Ze.optionGroup,children:[n.jsx("p",{className:Ze.loginSubtitle,children:"What are you working on?"}),n.jsxs("select",{className:x.input,value:Qt,onChange:Bt=>ir(Bt.target.value),disabled:Me||pr||Dt.length===0,children:[Dt.length===0&&n.jsx("option",{value:"",children:pr?"Loading setup options...":"No setup options available"}),Dt.map(Bt=>n.jsx("option",{value:Bt.id,children:Bt.label},Bt.id))]}),Ft?n.jsx(n.Fragment,{children:Ft.description?n.jsx("p",{className:Ze.inlineHint,children:Ft.description}):null}):null,n.jsxs("div",{className:Ze.optionGroup,children:[n.jsx("p",{className:Ze.loginSubtitle,children:"Apply Setup Sections"}),n.jsxs("label",{className:`${Ze.authModeLink} ${Ze.optionRow}`,children:[n.jsx("input",{type:"checkbox",checked:dr.categories,onChange:()=>sr(Bt=>({...Bt,categories:!Bt.categories})),disabled:Me||!Ft?.categories.length}),n.jsx("span",{children:"Categories"})]}),Ba?n.jsx("p",{className:Ze.inlineHint,children:Ba}):null,n.jsxs("label",{className:`${Ze.authModeLink} ${Ze.optionRow}`,children:[n.jsx("input",{type:"checkbox",checked:dr.types,onChange:()=>sr(Bt=>({...Bt,types:!Bt.types})),disabled:Me||!Ft?.types.length}),n.jsx("span",{children:"Task Types"})]}),yo?n.jsx("p",{className:Ze.inlineHint,children:yo}):null,n.jsxs("label",{className:`${Ze.authModeLink} ${Ze.optionRow}`,children:[n.jsx("input",{type:"checkbox",checked:dr.priorities,onChange:()=>sr(Bt=>({...Bt,priorities:!Bt.priorities})),disabled:Me||!Ft?.priorities.length}),n.jsx("span",{children:"Priorities"})]}),Ss?n.jsx("p",{className:Ze.inlineHint,children:Ss}):null]}),pr?n.jsx("p",{className:Ze.inlineHint,children:"Loading setup options…"}):null,Tr?n.jsx("p",{className:Ze.loginError,children:Tr}):null]}),!Rr&&Kt&&Tt&&Dn&&n.jsxs("div",{className:Ze.optionGroup,children:[n.jsxs("label",{className:`${Ze.authModeLink} ${Ze.optionRow}`,children:[n.jsx("input",{type:"checkbox",checked:Mt,onChange:Bt=>Ee(Bt.target.checked),disabled:Me}),n.jsx("span",{children:"Sync to cloud after setup"})]}),n.jsx("p",{className:Ze.inlineHint,children:"When enabled, this project will connect to cloud sync as soon as setup finishes."})]})]})]}),n.jsxs("div",{className:Ze.authModeLinks,children:[Cn?n.jsx("button",{className:x.cancelBtn,onClick:()=>{_e(null),Ge(null),kt("details")},children:"Back"}):yn?n.jsx("button",{className:x.cancelBtn,onClick:()=>{_e(null),Ge(null),R("/",{replace:!0})},children:"Cancel"}):ht==="cloud"?n.jsx("button",{className:x.cancelBtn,onClick:async()=>{await u.logout(),R("/login",{replace:!0})},children:_t("setup.signOut")}):null,yt?n.jsx("button",{className:x.submitBtn,disabled:Me||La&&!!mr&&!Za,onClick:async()=>{qe(!0),Ge(null),_e(null);try{const Bt=await fetch("/api/taskforce/global-settings",{method:"POST",headers:{"Content-Type":"application/json"},credentials:"include",body:JSON.stringify({setup:{mode:Fe}})}),Gn=await Bt.json().catch(()=>({}));!Bt.ok||Gn?.success===!1?_e(Gn?.error||_t("setup.saveFailedWithStatus",{status:Bt.status})):(Ge(_t("setup.globalSetupSaved")),await Fr())}catch{_e(_t("setup.saveFailed"))}finally{qe(!1)}},children:_t(Me?"setup.saving":"setup.saveGlobalSetup")}):oe?n.jsx("button",{className:x.submitBtn,disabled:Me,onClick:Fr,children:_t("setup.retrySetupCheck")}):n.jsx("button",{className:x.submitBtn,disabled:Me||La&&!mr&&!Tt,onClick:async()=>{if(La&&mr){if(!Za)return;qe(!0),Ge(`Retrying import for ${mr.name}...`),_e(null);try{await ys()}catch{Ge(null),_e(`Failed to retry import for "${mr.name}".`)}finally{qe(!1)}return}if(ea){if(!Kt){_e("Cloud workspace sync is unavailable right now."),qe(!1);return}if(!Tt){_e("Sign in is required before syncing a cloud project."),qe(!1);return}const Bt=rt.find(sn=>sn.id===lr);if(!Bt){_e("Select a cloud project to sync."),qe(!1);return}const Gn=await Ye({workspaceId:Bt.id,name:Bt.name||Bt.id,description:Bt.description||void 0});if(!Gn.success){_e(Gn.error||_t("setup.saveWorkspaceFailed")),qe(!1);return}const $n=String(Gn.workspaceId||Bt.id||"").trim();if(!$n){_e("Failed to resolve workspace id for sync setup."),qe(!1);return}try{await at($n,{version:2,enabled:!0,phase:"attach-cloud",setupIntent:"attach-cloud-import",pullCursor:null,lastPullAt:null,lastPushAt:null,lastSyncedAt:null,lastErrorMessage:null})}catch(sn){_e(sn instanceof Error?sn.message:"Failed to configure workspace sync."),qe(!1);return}bn({enabled:!0,phase:"attach-cloud",setupIntent:"attach-cloud-import",pullCursor:null}),await Fr(),lt({workspaceId:$n,name:Bt.name||Bt.id}),nt(!1),Ge(`Importing ${Bt.name||Bt.id} from cloud...`),qe(!1);return}if(Dn){if(!F.trim()){_e("Workspace name is required before continuing.");return}_e(null),Ge(null),kt("library");return}qe(!0),Ge(null),_e(null);{const Bt=yn||$t?.workspaceSetupState==="missing",Gn=yn||yr&&Bt,$n=Gn?await Dr(F,Ce||void 0):null,sn=Gn?null:await Ye({workspaceId:Bt?void 0:$t?.workspaceId,name:F,description:Ce}),Sa=$n||sn;if(Sa?.success){const ns=String($n?.workspace?.id||sn?.workspaceId||$t?.workspaceId||"").trim();if(!ns){_e("Failed to resolve workspace id for setup."),qe(!1);return}if(!!Ft&&(dr.categories||dr.types||dr.priorities)&&Ft){const Wa=await Nn.onApplySystemTaxonomyPack({pack:Ft,sections:dr,remapExistingValuesToDefault:!0,workspaceIdOverride:ns});if(!Wa?.success){_e(Wa?.error||"Failed to apply setup library."),qe(!1);return}}const Ks=!!(!Rr&&Mt&&Kt&&Tt),jo=await fetch("/api/taskforce/ui-state",{method:"POST",headers:{"Content-Type":"application/json"},credentials:"include",body:JSON.stringify({workspaceId:ns,stateKey:"workspace-sync",patch:{version:2,enabled:Ks,phase:Ks?"provision-local":"idle",setupIntent:null,pullCursor:null,lastPullAt:null,lastPushAt:null,lastSyncedAt:null}})}),pa=await jo.json().catch(()=>({}));if(!jo.ok||pa?.success===!1){_e(pa?.error||`Failed to configure workspace sync (${jo.status})`),qe(!1);return}bn({enabled:Ks,phase:Ks?"provision-local":"idle",setupIntent:null,pullCursor:null}),Ge(Ks?`${Ur} setup saved. Cloud sync enabled.`:_t("setup.workspaceSetupSaved",{workspaceLabel:Ur})),yn&&(await Fr(),await Sn(!0),An(Xr,{replace:!0}))}else{if(Sa?.code==="WORKSPACE_LIMIT_REACHED"){qe(!1),R(_,{replace:!0});return}_e(Sa?.error||_t("setup.saveWorkspaceFailed"))}}qe(!1)},children:ko})]})]})})})}return n.jsx(cX,{...u,initialActivityEntryId:h,onHeaderMouseDown:s,isDragging:i,onClose:l})}function dX(e){return ZT()?n.jsx(OS,{...e}):n.jsx(JT,{children:n.jsx(OS,{...e})})}const cI={},BS="STAGING_MARKER_2026_02_24";typeof window<"u"&&(window.__TASKFORCE_BUILD_MARKER=BS,console.info(`[Taskforce] Build marker: ${BS}`));function uX(){if(typeof window<"u"){const t=window.location.hostname.toLowerCase();if(t==="localhost"||t==="127.0.0.1"||t==="::1")return}return hv(cI).apiBaseUrl||void 0}function pX(e){const t=hv(cI),r=t.cloudAuthBaseUrl;if(r)if(typeof window<"u"){const a=window.location.hostname.toLowerCase(),s=a==="localhost"||a==="127.0.0.1"||a==="::1",i="".trim().toLowerCase()==="true";if(!s&&!i)try{const l=new URL(r,window.location.origin);if(l.origin!==window.location.origin)console.warn(`[Taskforce] Ignoring cross-origin cloud auth base in hosted runtime: ${l.origin}`);else return r}catch{}else return r}else return r;if(t.baseUrl)return t.baseUrl;if(e)return e}function fX(){const e=uX(),t=pX(e);return n.jsx(QT,{children:n.jsx(dX,{mode:"standalone",config:{apiEndpoint:"/api/taskforce/task",apiBaseUrl:e,cloudAuthBaseUrl:t}})})}dT.createRoot(document.getElementById("root")).render(n.jsx(Q.StrictMode,{children:n.jsx(fX,{})}));export{sC as $,RX as A,Ik as B,oC as C,bu as D,_X as E,iC as F,lC as G,sP as H,Ru as I,dC as J,iP as K,Tv as L,Ro as M,cP as N,Ck as O,xX as P,IX as Q,Fv as R,TX as S,qo as T,LV as U,gN as V,LG as W,Pz as X,h_ as Y,F7 as Z,jN as _,ug as a,GC as a$,Nq as a0,$7 as a1,DX as a2,LX as a3,OX as a4,BX as a5,WX as a6,vA as a7,Tf as a8,kA as a9,rI as aA,BJ as aB,rQ as aC,qv as aD,nd as aE,tI as aF,U_ as aG,Yk as aH,cJ as aI,lJ as aJ,dJ as aK,cG as aL,mv as aM,Uk as aN,gS as aO,yS as aP,vq as aQ,Oq as aR,XC as aS,Xh as aT,NX as aU,EX as aV,Zh as aW,ZC as aX,gf as aY,YC as aZ,Ef as a_,ju as aa,UK as ab,JA as ac,ZA as ad,CX as ae,Rz as af,uR as ag,bX as ah,MX as ai,Tz as aj,SX as ak,AX as al,nI as am,gg as an,Bf as ao,lQ as ap,qk as aq,Yv as ar,TS as as,sg as at,vu as au,Io as av,fs as aw,zJ as ax,YJ as ay,hs as az,po as b,VC as b0,WU as b1,W7 as b2,nP as b3,W0 as c,i0 as d,hr as e,ux as f,jX as g,Su as h,KU as i,HQ as j,VQ as k,TC as l,Gl as m,g4 as n,kN as o,PX as p,cf as q,Jn as r,qU as s,x as t,I9 as u,Sg as v,dx as w,Ak as x,qN as y,_k as z};
|