@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
|
@@ -1,6 +1,10 @@
|
|
|
1
1
|
import { isAiProfileSurfaceType } from '../shared/aiProfileSurfaceType.js';
|
|
2
2
|
import { isAiProfileSeatScope } from '../shared/aiProfileSeatScope.js';
|
|
3
3
|
import { normalizeSyncSameOriginAssetUrl } from '../sync/syncFieldSemantics.js';
|
|
4
|
+
import { buildAiProfileAvatarStoragePrefixes } from '../utils/aiProfileAvatarPaths.js';
|
|
5
|
+
import { getMcpClientRegistryEntry, inferLegacyMcpClientIdFromProfile } from '../mcp/clientRegistry.js';
|
|
6
|
+
import { assignedAiProfileColor, normalizeAiProfileColor, parseAiProfileColorSource, } from '../shared/aiProfileColors.js';
|
|
7
|
+
import { getTaskforceManagedAgentId, isTaskforceManagedAiProfile } from '../shared/aiProfileAvatarEligibility.js';
|
|
4
8
|
function normalizeNullableIsoString(value) {
|
|
5
9
|
if (typeof value !== 'string')
|
|
6
10
|
return null;
|
|
@@ -44,6 +48,36 @@ function compareIsoStrings(left, right) {
|
|
|
44
48
|
return 1;
|
|
45
49
|
return normalizedLeft.localeCompare(normalizedRight);
|
|
46
50
|
}
|
|
51
|
+
const AI_PROFILE_COLOR_SOURCE_SYNC_RANK = {
|
|
52
|
+
legacy: 0,
|
|
53
|
+
assigned_default: 1,
|
|
54
|
+
agent_explicit: 2,
|
|
55
|
+
product_default: 3,
|
|
56
|
+
user_override: 4,
|
|
57
|
+
};
|
|
58
|
+
function compareAiProfileColorSyncCandidates(incoming, existing) {
|
|
59
|
+
const timestampComparison = compareIsoStrings(incoming.updatedAt, existing.updatedAt);
|
|
60
|
+
if (timestampComparison !== 0)
|
|
61
|
+
return timestampComparison;
|
|
62
|
+
const sourceComparison = AI_PROFILE_COLOR_SOURCE_SYNC_RANK[incoming.source]
|
|
63
|
+
- AI_PROFILE_COLOR_SOURCE_SYNC_RANK[existing.source];
|
|
64
|
+
if (sourceComparison !== 0)
|
|
65
|
+
return sourceComparison;
|
|
66
|
+
if (incoming.color === existing.color)
|
|
67
|
+
return 0;
|
|
68
|
+
return incoming.color < existing.color ? -1 : 1;
|
|
69
|
+
}
|
|
70
|
+
function resolveAiProfileProductDefaultColor(profile) {
|
|
71
|
+
if (isTaskforceManagedAiProfile(profile))
|
|
72
|
+
return null;
|
|
73
|
+
const connection = profile.providerMetadata?.connection;
|
|
74
|
+
const configuredClientId = connection && typeof connection === 'object' && !Array.isArray(connection)
|
|
75
|
+
? connection.clientId
|
|
76
|
+
: null;
|
|
77
|
+
const clientId = getMcpClientRegistryEntry(configuredClientId)?.id
|
|
78
|
+
|| inferLegacyMcpClientIdFromProfile(profile);
|
|
79
|
+
return normalizeAiProfileColor(getMcpClientRegistryEntry(clientId)?.signatureColor);
|
|
80
|
+
}
|
|
47
81
|
function deriveRosterStateUpdatedAt(value, fallbacks) {
|
|
48
82
|
const explicitValue = normalizeNullableIsoString(value);
|
|
49
83
|
const archivedAt = normalizeNullableIsoString(fallbacks.archivedAt);
|
|
@@ -213,65 +247,26 @@ function filterAiProfileRowsForTrustedSeatScope(deps, rows, trustedSeatScope) {
|
|
|
213
247
|
return rows;
|
|
214
248
|
return rows.filter((row) => aiProfileMatchesTrustedSeatScope(deps, row, trustedSeatScope));
|
|
215
249
|
}
|
|
216
|
-
function
|
|
217
|
-
return String(value || '').trim().toLowerCase();
|
|
218
|
-
}
|
|
219
|
-
function latestAiProfileActivityValue(row) {
|
|
220
|
-
return normalizeNullableIsoString(row.last_active_at)
|
|
221
|
-
?? normalizeNullableIsoString(row.updated_at)
|
|
222
|
-
?? normalizeNullableIsoString(row.created_at)
|
|
223
|
-
?? '';
|
|
224
|
-
}
|
|
225
|
-
function rankNullableIdentityMatch(existingValue, incomingValue) {
|
|
226
|
-
const existing = normalizeAiProfileIdentityValue(existingValue);
|
|
227
|
-
if (incomingValue) {
|
|
228
|
-
if (existing === incomingValue)
|
|
229
|
-
return 2;
|
|
230
|
-
if (!existing)
|
|
231
|
-
return 1;
|
|
232
|
-
return 0;
|
|
233
|
-
}
|
|
234
|
-
return existing ? 0 : 1;
|
|
235
|
-
}
|
|
236
|
-
function selectAiProfileIdentityMatch(deps, rows, input, trustedSeatScope) {
|
|
250
|
+
function selectAiProfileIdentityMatch(deps, rows, trustedSeatScope) {
|
|
237
251
|
const scopedRows = filterAiProfileRowsForTrustedSeatScope(deps, rows, trustedSeatScope);
|
|
238
|
-
|
|
239
|
-
|
|
240
|
-
|
|
241
|
-
|
|
242
|
-
|
|
243
|
-
|
|
244
|
-
|
|
245
|
-
|
|
246
|
-
const
|
|
247
|
-
? rankNullableIdentityMatch(row.surface_type, incomingSurfaceType)
|
|
248
|
-
: 0;
|
|
249
|
-
const modelRank = incomingModel && normalizeAiProfileIdentityValue(row.model) === incomingModel ? 1 : 0;
|
|
252
|
+
return {
|
|
253
|
+
row: scopedRows.length === 1 ? scopedRows[0] : undefined,
|
|
254
|
+
rows: scopedRows,
|
|
255
|
+
matchCount: scopedRows.length,
|
|
256
|
+
};
|
|
257
|
+
}
|
|
258
|
+
function buildAiProfileIdentityCandidates(deps, rows) {
|
|
259
|
+
return rows.map((row) => {
|
|
260
|
+
const profile = deps.aiProfileRowToRecord(row);
|
|
250
261
|
return {
|
|
251
|
-
|
|
252
|
-
|
|
253
|
-
|
|
254
|
-
|
|
255
|
-
|
|
262
|
+
id: profile.id,
|
|
263
|
+
name: profile.name,
|
|
264
|
+
username: profile.username,
|
|
265
|
+
surfaceType: profile.surfaceType ?? null,
|
|
266
|
+
seatScope: profile.seatScope ?? null,
|
|
267
|
+
archived: Boolean(profile.archivedAt),
|
|
256
268
|
};
|
|
257
|
-
})
|
|
258
|
-
.filter((entry) => Boolean(entry))
|
|
259
|
-
.sort((left, right) => {
|
|
260
|
-
if (right.providerRank !== left.providerRank)
|
|
261
|
-
return right.providerRank - left.providerRank;
|
|
262
|
-
if (right.surfaceRank !== left.surfaceRank)
|
|
263
|
-
return right.surfaceRank - left.surfaceRank;
|
|
264
|
-
if (right.modelRank !== left.modelRank)
|
|
265
|
-
return right.modelRank - left.modelRank;
|
|
266
|
-
const activityDelta = right.activity.localeCompare(left.activity);
|
|
267
|
-
if (activityDelta !== 0)
|
|
268
|
-
return activityDelta;
|
|
269
|
-
return String(left.row.id || '').localeCompare(String(right.row.id || ''));
|
|
270
269
|
});
|
|
271
|
-
return {
|
|
272
|
-
row: ranked[0]?.row,
|
|
273
|
-
matchCount: ranked.length,
|
|
274
|
-
};
|
|
275
270
|
}
|
|
276
271
|
function requiresCloudSeatReservation(existing, nextSeatScope) {
|
|
277
272
|
if (nextSeatScope !== 'cloud_metered')
|
|
@@ -287,7 +282,8 @@ function assertAiProfileSeatAvailable(deps, workspaceId) {
|
|
|
287
282
|
workspaceId,
|
|
288
283
|
limit: aiProfileUsage.limit,
|
|
289
284
|
used: aiProfileUsage.used,
|
|
290
|
-
remaining: aiProfileUsage.remaining
|
|
285
|
+
remaining: aiProfileUsage.remaining,
|
|
286
|
+
recovery: 'Use the existing profileToken when reconnecting, reactivate an archived profile with its token, remove an unused cloud AI profile, or upgrade the workspace plan.'
|
|
291
287
|
});
|
|
292
288
|
}
|
|
293
289
|
}
|
|
@@ -305,8 +301,13 @@ function inferAiProfileProviderModelDefaults(name) {
|
|
|
305
301
|
return { provider: 'OpenAI', model: 'Codex' };
|
|
306
302
|
if (normalized.includes('gemini'))
|
|
307
303
|
return { provider: 'Google', model: 'Gemini' };
|
|
304
|
+
if (normalized.includes('grok'))
|
|
305
|
+
return { provider: 'xAI', model: 'Grok CLI' };
|
|
308
306
|
return {};
|
|
309
307
|
}
|
|
308
|
+
function formatCliAiProfileDescriptionName(name) {
|
|
309
|
+
return String(name || '').trim().replace(/\s+cli$/i, '') || 'AI';
|
|
310
|
+
}
|
|
310
311
|
function inferAiProfileMetadataDefaults(name, surfaceType) {
|
|
311
312
|
const inferredProviderModel = inferAiProfileProviderModelDefaults(name);
|
|
312
313
|
switch (surfaceType) {
|
|
@@ -324,7 +325,7 @@ function inferAiProfileMetadataDefaults(name, surfaceType) {
|
|
|
324
325
|
};
|
|
325
326
|
case 'cli':
|
|
326
327
|
return {
|
|
327
|
-
description: `${name} CLI coding agent connected through MCP.`,
|
|
328
|
+
description: `${formatCliAiProfileDescriptionName(name)} CLI coding agent connected through MCP.`,
|
|
328
329
|
role: 'CLI Coding Agent',
|
|
329
330
|
...inferredProviderModel
|
|
330
331
|
};
|
|
@@ -353,11 +354,12 @@ function resolveOptionalProfileField(inputValue, existingValue, fallbackValue) {
|
|
|
353
354
|
return preservedValue;
|
|
354
355
|
return normalizeOptionalProfileField(fallbackValue);
|
|
355
356
|
}
|
|
356
|
-
function resolveAiProfileMetadataFields(deps, input, existing) {
|
|
357
|
-
const
|
|
357
|
+
function resolveAiProfileMetadataFields(deps, input, existing, trustedSurfaceType) {
|
|
358
|
+
const trustedSurfaceTypeProvided = trustedSurfaceType !== undefined;
|
|
359
|
+
const surfaceTypeInput = normalizeAiProfileSurfaceTypeInput(deps, trustedSurfaceTypeProvided ? trustedSurfaceType : input.surfaceType);
|
|
358
360
|
const manuallyOverridden = hasManualSurfaceTypeOverride(existing);
|
|
359
361
|
const effectiveSurfaceType = surfaceTypeInput === undefined
|
|
360
|
-
|| manuallyOverridden
|
|
362
|
+
|| (manuallyOverridden && !trustedSurfaceTypeProvided)
|
|
361
363
|
? existing?.surfaceType ?? null
|
|
362
364
|
: surfaceTypeInput;
|
|
363
365
|
const inferredDefaults = inferAiProfileMetadataDefaults(input.name, effectiveSurfaceType);
|
|
@@ -367,7 +369,7 @@ function resolveAiProfileMetadataFields(deps, input, existing) {
|
|
|
367
369
|
provider: resolveOptionalProfileField(input.provider, existing?.provider, inferredDefaults.provider) ?? null,
|
|
368
370
|
model: resolveOptionalProfileField(input.model, existing?.model, inferredDefaults.model) ?? null,
|
|
369
371
|
surfaceType: effectiveSurfaceType,
|
|
370
|
-
surfaceTypeProvided: surfaceTypeInput !== undefined && !manuallyOverridden,
|
|
372
|
+
surfaceTypeProvided: surfaceTypeInput !== undefined && (!manuallyOverridden || trustedSurfaceTypeProvided),
|
|
371
373
|
};
|
|
372
374
|
}
|
|
373
375
|
function applyAiProfileMetadataDefaults(record) {
|
|
@@ -453,7 +455,7 @@ function backfillMissingAiProfileAvatarFromAssetIndex(deps, row) {
|
|
|
453
455
|
return;
|
|
454
456
|
if (normalizeNullableIsoString(row.avatar_updated_at))
|
|
455
457
|
return;
|
|
456
|
-
const
|
|
458
|
+
const avatarPrefixes = buildAiProfileAvatarStoragePrefixes({ workspaceId, profileId: id });
|
|
457
459
|
try {
|
|
458
460
|
const latestCropped = deps.db.prepare(`
|
|
459
461
|
SELECT storage_key, updated_at, created_at
|
|
@@ -461,7 +463,7 @@ function backfillMissingAiProfileAvatarFromAssetIndex(deps, row) {
|
|
|
461
463
|
WHERE tenant_id = ?
|
|
462
464
|
AND workspace_id = ?
|
|
463
465
|
AND deleted_at IS NULL
|
|
464
|
-
AND storage_key LIKE ?
|
|
466
|
+
AND (storage_key LIKE ? OR storage_key LIKE ?)
|
|
465
467
|
AND (
|
|
466
468
|
LOWER(original_filename) LIKE 'cropped-%'
|
|
467
469
|
OR LOWER(logical_name) = 'ai profile avatar display'
|
|
@@ -477,7 +479,7 @@ function backfillMissingAiProfileAvatarFromAssetIndex(deps, row) {
|
|
|
477
479
|
)
|
|
478
480
|
ORDER BY COALESCE(updated_at, created_at) DESC, storage_key DESC
|
|
479
481
|
LIMIT 1
|
|
480
|
-
`).get(deps.tenantId, workspaceId, `${
|
|
482
|
+
`).get(deps.tenantId, workspaceId, `${avatarPrefixes[0]}%`, `${avatarPrefixes[1]}%`);
|
|
481
483
|
if (!latestCropped)
|
|
482
484
|
return;
|
|
483
485
|
const latestSource = deps.db.prepare(`
|
|
@@ -486,7 +488,7 @@ function backfillMissingAiProfileAvatarFromAssetIndex(deps, row) {
|
|
|
486
488
|
WHERE tenant_id = ?
|
|
487
489
|
AND workspace_id = ?
|
|
488
490
|
AND deleted_at IS NULL
|
|
489
|
-
AND storage_key LIKE ?
|
|
491
|
+
AND (storage_key LIKE ? OR storage_key LIKE ?)
|
|
490
492
|
AND (
|
|
491
493
|
LOWER(original_filename) LIKE 'source-%'
|
|
492
494
|
OR LOWER(logical_name) = 'ai profile avatar source'
|
|
@@ -498,7 +500,7 @@ function backfillMissingAiProfileAvatarFromAssetIndex(deps, row) {
|
|
|
498
500
|
)
|
|
499
501
|
ORDER BY COALESCE(updated_at, created_at) DESC, storage_key DESC
|
|
500
502
|
LIMIT 1
|
|
501
|
-
`).get(deps.tenantId, workspaceId, `${
|
|
503
|
+
`).get(deps.tenantId, workspaceId, `${avatarPrefixes[0]}%`, `${avatarPrefixes[1]}%`);
|
|
502
504
|
const avatarStorageKey = String(latestCropped.storage_key || '').trim();
|
|
503
505
|
if (!avatarStorageKey)
|
|
504
506
|
return;
|
|
@@ -542,7 +544,7 @@ function hydrateAiProfileRecord(deps, row, diagnostics) {
|
|
|
542
544
|
backfillMissingAiProfileAvatarFromDuplicate(deps, row);
|
|
543
545
|
backfillMissingAiProfileAvatarFromAssetIndex(deps, row);
|
|
544
546
|
const record = deps.aiProfileRowToRecord(row);
|
|
545
|
-
|
|
547
|
+
let hydrated = applyAiProfileMetadataDefaults(record);
|
|
546
548
|
const metadataChanged = record.description !== hydrated.description
|
|
547
549
|
|| record.role !== hydrated.role
|
|
548
550
|
|| record.provider !== hydrated.provider
|
|
@@ -560,6 +562,23 @@ function hydrateAiProfileRecord(deps, row, diagnostics) {
|
|
|
560
562
|
diagnostics.metadataBackfillCount = (diagnostics.metadataBackfillCount || 0) + 1;
|
|
561
563
|
}
|
|
562
564
|
}
|
|
565
|
+
const taskforceAgentId = getTaskforceManagedAgentId(hydrated);
|
|
566
|
+
const canonicalAgentColor = taskforceAgentId ? assignedAiProfileColor(taskforceAgentId) : null;
|
|
567
|
+
if (canonicalAgentColor && hydrated.colorSource !== 'user_override'
|
|
568
|
+
&& (normalizeAiProfileColor(hydrated.color) !== canonicalAgentColor || hydrated.colorSource !== 'assigned_default')) {
|
|
569
|
+
const colorUpdatedAt = hydrated.colorUpdatedAt ?? hydrated.updatedAt;
|
|
570
|
+
deps.db.prepare(`
|
|
571
|
+
UPDATE ai_profiles
|
|
572
|
+
SET color = ?, color_source = 'assigned_default', color_updated_at = ?
|
|
573
|
+
WHERE tenant_id = ? AND id = ?
|
|
574
|
+
`).run(canonicalAgentColor, colorUpdatedAt, deps.tenantId, hydrated.id);
|
|
575
|
+
hydrated = {
|
|
576
|
+
...hydrated,
|
|
577
|
+
color: canonicalAgentColor,
|
|
578
|
+
colorSource: 'assigned_default',
|
|
579
|
+
colorUpdatedAt,
|
|
580
|
+
};
|
|
581
|
+
}
|
|
563
582
|
return hydrated;
|
|
564
583
|
}
|
|
565
584
|
export function listAiProfilesService(deps, workspaceId, options) {
|
|
@@ -574,6 +593,8 @@ export function listAiProfilesService(deps, workspaceId, options) {
|
|
|
574
593
|
username,
|
|
575
594
|
icon,
|
|
576
595
|
color,
|
|
596
|
+
color_source,
|
|
597
|
+
color_updated_at,
|
|
577
598
|
avatar_url,
|
|
578
599
|
avatar_source_url,
|
|
579
600
|
avatar_revision,
|
|
@@ -743,7 +764,40 @@ export function upsertAiProfileForSyncService(deps, profile) {
|
|
|
743
764
|
const mergedName = metadataSourceProfile?.name ?? deps.normalizeAiProfileName(profile.name);
|
|
744
765
|
const mergedUsername = metadataSourceProfile?.username ?? deps.normalizeAiProfileUsername(profile.username, profile.name);
|
|
745
766
|
const mergedIcon = metadataSourceProfile?.icon ?? deps.normalizeAiProfileIcon(profile.icon);
|
|
746
|
-
const
|
|
767
|
+
const incomingColor = normalizeAiProfileColor(profile.color);
|
|
768
|
+
const incomingColorSource = parseAiProfileColorSource(profile.colorSource) ?? 'legacy';
|
|
769
|
+
const incomingColorUpdatedAtProvided = Object.prototype.hasOwnProperty.call(profile, 'colorUpdatedAt');
|
|
770
|
+
const incomingColorUpdatedAt = normalizeNullableIsoString(profile.colorUpdatedAt);
|
|
771
|
+
const existingColorSource = parseAiProfileColorSource(existingProfile?.colorSource) ?? 'legacy';
|
|
772
|
+
const existingColorUpdatedAt = normalizeNullableIsoString(existingProfile?.colorUpdatedAt) ?? existingUpdatedAt;
|
|
773
|
+
const existingRawColor = String(existingProfile?.color || '').trim();
|
|
774
|
+
const incomingColorWins = !existingRow
|
|
775
|
+
|| Boolean(incomingColorUpdatedAtProvided && incomingColorUpdatedAt && incomingColor && (compareAiProfileColorSyncCandidates({ color: incomingColor, source: incomingColorSource, updatedAt: incomingColorUpdatedAt }, {
|
|
776
|
+
color: existingRawColor || assignedAiProfileColor(`${mergedName}:${mergedUsername}`),
|
|
777
|
+
source: existingColorSource,
|
|
778
|
+
updatedAt: existingColorUpdatedAt,
|
|
779
|
+
}) > 0));
|
|
780
|
+
let mergedColor = incomingColorWins && incomingColor
|
|
781
|
+
? incomingColor
|
|
782
|
+
: existingRawColor || assignedAiProfileColor(`${mergedName}:${mergedUsername}`);
|
|
783
|
+
let mergedColorSource = !existingRow && !incomingColor
|
|
784
|
+
? 'assigned_default'
|
|
785
|
+
: incomingColorWins && incomingColor
|
|
786
|
+
? (!incomingColorUpdatedAt ? 'assigned_default' : incomingColorSource)
|
|
787
|
+
: existingColorSource;
|
|
788
|
+
const mergedColorUpdatedAt = incomingColorWins && incomingColor
|
|
789
|
+
? (incomingColorUpdatedAt ?? normalizedUpdatedAt)
|
|
790
|
+
: existingColorUpdatedAt;
|
|
791
|
+
const productDefaultColor = resolveAiProfileProductDefaultColor({
|
|
792
|
+
name: mergedName,
|
|
793
|
+
username: mergedUsername,
|
|
794
|
+
surfaceType: resolvedMetadata.surfaceType,
|
|
795
|
+
providerMetadata: metadataSourceProfile?.providerMetadata ?? existingProfile?.providerMetadata ?? null,
|
|
796
|
+
});
|
|
797
|
+
if (productDefaultColor && mergedColorSource !== 'user_override') {
|
|
798
|
+
mergedColor = productDefaultColor;
|
|
799
|
+
mergedColorSource = 'product_default';
|
|
800
|
+
}
|
|
747
801
|
const existingAvatarUrl = normalizeAiProfileAvatarUrl(existingProfile?.avatarUrl);
|
|
748
802
|
const existingAvatarSourceUrl = normalizeAiProfileAvatarUrl(existingProfile?.avatarSourceUrl);
|
|
749
803
|
const incomingAvatarUrl = incomingAvatarUrlProvided ? normalizeAiProfileAvatarUrl(profile.avatarUrl) : null;
|
|
@@ -802,14 +856,15 @@ export function upsertAiProfileForSyncService(deps, profile) {
|
|
|
802
856
|
const mergedLastActiveAt = compareIsoStrings(normalizedLastActiveAt, existingLastActiveAt) > 0
|
|
803
857
|
? normalizedLastActiveAt
|
|
804
858
|
: existingLastActiveAt;
|
|
805
|
-
deps.db.
|
|
859
|
+
return deps.db.transaction(() => {
|
|
860
|
+
deps.db.prepare(`
|
|
806
861
|
INSERT INTO ai_profiles (
|
|
807
|
-
id, tenant_id, workspace_id, profile_token, name, username, icon, color,
|
|
862
|
+
id, tenant_id, workspace_id, profile_token, name, username, icon, color, color_source, color_updated_at,
|
|
808
863
|
avatar_url, avatar_source_url, avatar_revision, avatar_updated_at,
|
|
809
864
|
description, role, provider, model, surface_type, seat_scope, provider_metadata_json,
|
|
810
865
|
archived_at, archived_by, archived_reason, merged_into_profile_id,
|
|
811
866
|
roster_state_updated_at, created_at, updated_at, last_active_at
|
|
812
|
-
) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)
|
|
867
|
+
) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)
|
|
813
868
|
ON CONFLICT(id) DO UPDATE SET
|
|
814
869
|
workspace_id = excluded.workspace_id,
|
|
815
870
|
profile_token = excluded.profile_token,
|
|
@@ -817,6 +872,8 @@ export function upsertAiProfileForSyncService(deps, profile) {
|
|
|
817
872
|
username = excluded.username,
|
|
818
873
|
icon = excluded.icon,
|
|
819
874
|
color = excluded.color,
|
|
875
|
+
color_source = excluded.color_source,
|
|
876
|
+
color_updated_at = excluded.color_updated_at,
|
|
820
877
|
avatar_url = excluded.avatar_url,
|
|
821
878
|
avatar_source_url = excluded.avatar_source_url,
|
|
822
879
|
avatar_revision = excluded.avatar_revision,
|
|
@@ -836,17 +893,64 @@ export function upsertAiProfileForSyncService(deps, profile) {
|
|
|
836
893
|
created_at = excluded.created_at,
|
|
837
894
|
updated_at = excluded.updated_at,
|
|
838
895
|
last_active_at = excluded.last_active_at
|
|
839
|
-
`).run(profileId, deps.tenantId, normalizedWorkspaceId, mergedProfileToken, mergedName, mergedUsername, mergedIcon, mergedColor, mergedAvatarUrl, mergedAvatarSourceUrl, mergedAvatarRevision, mergedAvatarUpdatedAt, resolvedMetadata.description, resolvedMetadata.role, resolvedMetadata.provider, resolvedMetadata.model, resolvedMetadata.surfaceType, resolvedSeatScope.seatScope, mergedProviderMetadata, mergedArchivedAt, mergedArchivedBy, mergedArchivedReason, mergedMergedIntoProfileId, mergedRosterStateUpdatedAt, mergedCreatedAt, mergedUpdatedAt, mergedLastActiveAt);
|
|
840
|
-
|
|
896
|
+
`).run(profileId, deps.tenantId, normalizedWorkspaceId, mergedProfileToken, mergedName, mergedUsername, mergedIcon, mergedColor, mergedColorSource, mergedColorUpdatedAt, mergedAvatarUrl, mergedAvatarSourceUrl, mergedAvatarRevision, mergedAvatarUpdatedAt, resolvedMetadata.description, resolvedMetadata.role, resolvedMetadata.provider, resolvedMetadata.model, resolvedMetadata.surfaceType, resolvedSeatScope.seatScope, mergedProviderMetadata, mergedArchivedAt, mergedArchivedBy, mergedArchivedReason, mergedMergedIntoProfileId, mergedRosterStateUpdatedAt, mergedCreatedAt, mergedUpdatedAt, mergedLastActiveAt);
|
|
897
|
+
if (incomingMetadataWins) {
|
|
898
|
+
reconcileSyncedAiProfileConnectionBindings(deps, normalizedWorkspaceId, profileId, mergedProviderMetadata);
|
|
899
|
+
}
|
|
900
|
+
const refreshed = deps.db.prepare(`
|
|
841
901
|
SELECT *
|
|
842
902
|
FROM ai_profiles
|
|
843
903
|
WHERE tenant_id = ? AND id = ?
|
|
844
904
|
LIMIT 1
|
|
845
905
|
`).get(deps.tenantId, profileId);
|
|
846
|
-
|
|
847
|
-
|
|
906
|
+
if (!refreshed) {
|
|
907
|
+
throw deps.createRuleError('Failed to upsert AI profile during sync', 500, 'AI_PROFILE_SYNC_UPSERT_FAILED');
|
|
908
|
+
}
|
|
909
|
+
return hydrateAiProfileRecord(deps, refreshed);
|
|
910
|
+
})();
|
|
911
|
+
}
|
|
912
|
+
function reconcileSyncedAiProfileConnectionBindings(deps, workspaceId, profileId, providerMetadataJson) {
|
|
913
|
+
let metadata = {};
|
|
914
|
+
if (providerMetadataJson) {
|
|
915
|
+
try {
|
|
916
|
+
const parsed = JSON.parse(providerMetadataJson);
|
|
917
|
+
if (parsed && typeof parsed === 'object' && !Array.isArray(parsed))
|
|
918
|
+
metadata = parsed;
|
|
919
|
+
}
|
|
920
|
+
catch {
|
|
921
|
+
// The profile row remains authoritative even when legacy metadata is malformed.
|
|
922
|
+
}
|
|
923
|
+
}
|
|
924
|
+
const connection = metadata.connection && typeof metadata.connection === 'object' && !Array.isArray(metadata.connection)
|
|
925
|
+
? metadata.connection
|
|
926
|
+
: {};
|
|
927
|
+
const bindingIds = Array.isArray(connection.bindingIds)
|
|
928
|
+
? Array.from(new Set(connection.bindingIds
|
|
929
|
+
.map((value) => String(value || '').trim())
|
|
930
|
+
.filter((value) => value.length > 0 && value.length <= 128 && /^[A-Za-z0-9._:-]+$/.test(value))))
|
|
931
|
+
.sort()
|
|
932
|
+
: [];
|
|
933
|
+
const clientId = String(connection.clientId || '').trim() || null;
|
|
934
|
+
if (bindingIds.length === 0) {
|
|
935
|
+
deps.db.prepare(`DELETE FROM ai_profile_connection_bindings WHERE tenant_id = ? AND workspace_id = ? AND profile_id = ?`)
|
|
936
|
+
.run(deps.tenantId, workspaceId, profileId);
|
|
937
|
+
return;
|
|
938
|
+
}
|
|
939
|
+
const placeholders = bindingIds.map(() => '?').join(', ');
|
|
940
|
+
deps.db.prepare(`DELETE FROM ai_profile_connection_bindings
|
|
941
|
+
WHERE tenant_id = ? AND workspace_id = ? AND profile_id = ? AND connection_id NOT IN (${placeholders})`)
|
|
942
|
+
.run(deps.tenantId, workspaceId, profileId, ...bindingIds);
|
|
943
|
+
const now = new Date().toISOString();
|
|
944
|
+
const upsert = deps.db.prepare(`INSERT INTO ai_profile_connection_bindings
|
|
945
|
+
(tenant_id, workspace_id, connection_id, profile_id, client_id, created_at, updated_at)
|
|
946
|
+
VALUES (?, ?, ?, ?, ?, ?, ?)
|
|
947
|
+
ON CONFLICT (tenant_id, workspace_id, connection_id) DO UPDATE SET
|
|
948
|
+
profile_id = excluded.profile_id,
|
|
949
|
+
client_id = excluded.client_id,
|
|
950
|
+
updated_at = excluded.updated_at`);
|
|
951
|
+
for (const bindingId of bindingIds) {
|
|
952
|
+
upsert.run(deps.tenantId, workspaceId, bindingId, profileId, clientId, now, now);
|
|
848
953
|
}
|
|
849
|
-
return hydrateAiProfileRecord(deps, refreshed);
|
|
850
954
|
}
|
|
851
955
|
export function mergeAiProfilesService(deps, input) {
|
|
852
956
|
const normalizedWorkspaceId = deps.normalizeWorkspaceId(input.workspaceId);
|
|
@@ -880,40 +984,97 @@ export function mergeAiProfilesService(deps, input) {
|
|
|
880
984
|
});
|
|
881
985
|
}
|
|
882
986
|
const mergedSeatScope = resolveAiProfileSeatScope(deps, mergeRecord.seatScope, keepRecord);
|
|
987
|
+
const keepMetadata = keepRecord.providerMetadata && typeof keepRecord.providerMetadata === 'object' ? keepRecord.providerMetadata : {};
|
|
988
|
+
const mergeMetadata = mergeRecord.providerMetadata && typeof mergeRecord.providerMetadata === 'object' ? mergeRecord.providerMetadata : {};
|
|
989
|
+
const keepConnection = keepMetadata.connection && typeof keepMetadata.connection === 'object' && !Array.isArray(keepMetadata.connection)
|
|
990
|
+
? keepMetadata.connection : {};
|
|
991
|
+
const mergeConnection = mergeMetadata.connection && typeof mergeMetadata.connection === 'object' && !Array.isArray(mergeMetadata.connection)
|
|
992
|
+
? mergeMetadata.connection : {};
|
|
883
993
|
const mergedAt = new Date().toISOString();
|
|
884
|
-
const
|
|
885
|
-
|
|
886
|
-
|
|
887
|
-
|
|
888
|
-
|
|
889
|
-
|
|
890
|
-
|
|
891
|
-
|
|
892
|
-
|
|
893
|
-
|
|
894
|
-
|
|
895
|
-
|
|
896
|
-
|
|
897
|
-
|
|
898
|
-
|
|
899
|
-
|
|
900
|
-
|
|
901
|
-
|
|
902
|
-
|
|
903
|
-
|
|
904
|
-
|
|
905
|
-
|
|
906
|
-
|
|
907
|
-
|
|
908
|
-
|
|
909
|
-
|
|
910
|
-
|
|
911
|
-
|
|
912
|
-
|
|
913
|
-
|
|
914
|
-
|
|
994
|
+
const lockTaskIds = deps.db.prepare(`
|
|
995
|
+
SELECT id FROM tasks
|
|
996
|
+
WHERE tenant_id = ? AND workspace_id = ?
|
|
997
|
+
ORDER BY id
|
|
998
|
+
`).all(deps.tenantId, normalizedWorkspaceId)
|
|
999
|
+
.map((row) => String(row.id || '').trim()).filter(Boolean);
|
|
1000
|
+
deps.runTaskMetadataOwnershipTransaction({
|
|
1001
|
+
workspaceId: normalizedWorkspaceId,
|
|
1002
|
+
taskIds: lockTaskIds,
|
|
1003
|
+
updatedAt: mergedAt,
|
|
1004
|
+
apply: (protectedTaskIds) => {
|
|
1005
|
+
const affectedTaskIds = deps.db.prepare(`
|
|
1006
|
+
SELECT id FROM tasks
|
|
1007
|
+
WHERE tenant_id = ? AND workspace_id = ? AND (assignee = ? OR created_by = ?)
|
|
1008
|
+
ORDER BY id
|
|
1009
|
+
`).all(deps.tenantId, normalizedWorkspaceId, mergeId, mergeId)
|
|
1010
|
+
.map((row) => String(row.id || '').trim()).filter(Boolean);
|
|
1011
|
+
const conflicts = affectedTaskIds.filter((taskId) => protectedTaskIds.has(taskId));
|
|
1012
|
+
if (conflicts.length > 0) {
|
|
1013
|
+
throw deps.createRuleError('This task metadata is managed by durable sync. Retry the edit from a durable-sync-aware task editor.', 409, 'TASK_METADATA_DURABLE_SYNC_REQUIRED', { taskIds: conflicts });
|
|
1014
|
+
}
|
|
1015
|
+
const doMerge = deps.db.transaction(() => {
|
|
1016
|
+
if (affectedTaskIds.length > 0) {
|
|
1017
|
+
const taskPlaceholders = affectedTaskIds.map(() => '?').join(',');
|
|
1018
|
+
deps.db.prepare(`
|
|
1019
|
+
UPDATE tasks SET assignee = ?, updated_at = ?
|
|
1020
|
+
WHERE tenant_id = ? AND workspace_id = ? AND assignee = ?
|
|
1021
|
+
AND id IN (${taskPlaceholders})
|
|
1022
|
+
`).run(keepId, mergedAt, deps.tenantId, normalizedWorkspaceId, mergeId, ...affectedTaskIds);
|
|
1023
|
+
deps.db.prepare(`
|
|
1024
|
+
UPDATE tasks SET created_by = ?, updated_at = ?
|
|
1025
|
+
WHERE tenant_id = ? AND workspace_id = ? AND created_by = ?
|
|
1026
|
+
AND id IN (${taskPlaceholders})
|
|
1027
|
+
`).run(keepId, mergedAt, deps.tenantId, normalizedWorkspaceId, mergeId, ...affectedTaskIds);
|
|
1028
|
+
}
|
|
1029
|
+
deps.db.prepare(`
|
|
1030
|
+
UPDATE ai_profile_connection_bindings SET profile_id = ?, updated_at = ?
|
|
1031
|
+
WHERE tenant_id = ? AND workspace_id = ? AND profile_id = ?
|
|
1032
|
+
`).run(keepId, mergedAt, deps.tenantId, normalizedWorkspaceId, mergeId);
|
|
1033
|
+
const canonicalBindingIds = deps.db.prepare(`SELECT connection_id FROM ai_profile_connection_bindings WHERE tenant_id = ? AND workspace_id = ? AND profile_id = ? ORDER BY connection_id`)
|
|
1034
|
+
.all(deps.tenantId, normalizedWorkspaceId, keepId)
|
|
1035
|
+
.map((row) => String(row.connection_id || '').trim()).filter(Boolean);
|
|
1036
|
+
const mergedBindingIds = Array.from(new Set([
|
|
1037
|
+
...(Array.isArray(keepConnection.bindingIds) ? keepConnection.bindingIds : []),
|
|
1038
|
+
...(Array.isArray(mergeConnection.bindingIds) ? mergeConnection.bindingIds : []),
|
|
1039
|
+
...canonicalBindingIds,
|
|
1040
|
+
].map((value) => String(value || '').trim()).filter(Boolean)));
|
|
1041
|
+
const nextKeepConnection = {
|
|
1042
|
+
...mergeConnection,
|
|
1043
|
+
...keepConnection,
|
|
1044
|
+
...(mergedBindingIds.length > 0 ? { bindingIds: mergedBindingIds } : {}),
|
|
1045
|
+
};
|
|
1046
|
+
const nextMergeConnection = { ...mergeConnection };
|
|
1047
|
+
delete nextMergeConnection.bindingIds;
|
|
1048
|
+
const nextKeepMetadata = { ...mergeMetadata, ...keepMetadata, connection: nextKeepConnection };
|
|
1049
|
+
const nextMergeMetadata = { ...mergeMetadata, connection: nextMergeConnection };
|
|
1050
|
+
deps.db.prepare(`
|
|
1051
|
+
UPDATE ai_profiles
|
|
1052
|
+
SET seat_scope = ?,
|
|
1053
|
+
avatar_url = COALESCE(avatar_url, ?),
|
|
1054
|
+
avatar_source_url = COALESCE(avatar_source_url, ?),
|
|
1055
|
+
provider_metadata_json = ?,
|
|
1056
|
+
updated_at = ?
|
|
1057
|
+
WHERE tenant_id = ? AND workspace_id = ? AND id = ?
|
|
1058
|
+
`).run(mergedSeatScope.seatScope, normalizeAiProfileAvatarUrl(mergeRecord.avatarUrl), normalizeAiProfileAvatarUrl(mergeRecord.avatarSourceUrl), JSON.stringify(nextKeepMetadata), mergedAt, deps.tenantId, normalizedWorkspaceId, keepId);
|
|
1059
|
+
deps.db.prepare(`
|
|
1060
|
+
UPDATE comments SET author = ?
|
|
1061
|
+
WHERE tenant_id = ? AND workspace_id = ? AND author = ?
|
|
1062
|
+
`).run(keepId, deps.tenantId, normalizedWorkspaceId, mergeId);
|
|
1063
|
+
deps.db.prepare(`
|
|
1064
|
+
UPDATE ai_profiles
|
|
1065
|
+
SET archived_at = ?,
|
|
1066
|
+
archived_by = ?,
|
|
1067
|
+
archived_reason = ?,
|
|
1068
|
+
merged_into_profile_id = ?,
|
|
1069
|
+
provider_metadata_json = ?,
|
|
1070
|
+
roster_state_updated_at = ?,
|
|
1071
|
+
updated_at = ?
|
|
1072
|
+
WHERE tenant_id = ? AND workspace_id = ? AND id = ?
|
|
1073
|
+
`).run(mergedAt, keepId, 'merged_duplicate', keepId, JSON.stringify(nextMergeMetadata), mergedAt, mergedAt, deps.tenantId, normalizedWorkspaceId, mergeId);
|
|
1074
|
+
});
|
|
1075
|
+
return doMerge();
|
|
1076
|
+
},
|
|
915
1077
|
});
|
|
916
|
-
doMerge();
|
|
917
1078
|
const refreshed = deps.db.prepare(`
|
|
918
1079
|
SELECT * FROM ai_profiles WHERE tenant_id = ? AND id = ? LIMIT 1
|
|
919
1080
|
`).get(deps.tenantId, keepId);
|
|
@@ -989,6 +1150,56 @@ export function updateAiProfileAvatarService(deps, input) {
|
|
|
989
1150
|
}
|
|
990
1151
|
return hydrateAiProfileRecord(deps, refreshed);
|
|
991
1152
|
}
|
|
1153
|
+
export function updateAiProfileColorGroupService(deps, input) {
|
|
1154
|
+
const workspaceId = deps.normalizeWorkspaceId(input.workspaceId);
|
|
1155
|
+
const profileIds = Array.from(new Set((input.profileIds || []).map((id) => String(id || '').trim()).filter(Boolean)));
|
|
1156
|
+
if (!profileIds.length)
|
|
1157
|
+
throw deps.createRuleError('profileIds is required', 400, 'AI_PROFILE_IDS_REQUIRED');
|
|
1158
|
+
const profiles = deps.db.prepare(`
|
|
1159
|
+
SELECT * FROM ai_profiles
|
|
1160
|
+
WHERE tenant_id = ? AND workspace_id = ? AND archived_at IS NULL
|
|
1161
|
+
`).all(deps.tenantId, workspaceId);
|
|
1162
|
+
const selected = profileIds.map((id) => profiles.find((row) => String(row.id) === id)).filter(Boolean);
|
|
1163
|
+
if (selected.length !== profileIds.length)
|
|
1164
|
+
throw deps.createRuleError('One or more AI profiles were not found.', 404, 'AI_PROFILE_NOT_FOUND');
|
|
1165
|
+
const records = selected.map((row) => deps.aiProfileRowToRecord(row));
|
|
1166
|
+
if (records.some(isTaskforceManagedAiProfile) && input.allowTaskforceManaged !== true) {
|
|
1167
|
+
throw deps.createRuleError('Taskforce-managed agent colors require a trusted workspace color editor.', 409, 'AI_PROFILE_COLOR_MANAGED');
|
|
1168
|
+
}
|
|
1169
|
+
const resetColors = input.reset === true ? new Map(records.map((profile) => {
|
|
1170
|
+
const productColor = resolveAiProfileProductDefaultColor(profile);
|
|
1171
|
+
const taskforceMetadata = profile.providerMetadata?.taskforce;
|
|
1172
|
+
const taskforceAgentId = taskforceMetadata && typeof taskforceMetadata === 'object' && !Array.isArray(taskforceMetadata)
|
|
1173
|
+
? String(taskforceMetadata.taskforceAgentId || '').trim()
|
|
1174
|
+
: '';
|
|
1175
|
+
return [profile.id, {
|
|
1176
|
+
color: taskforceAgentId
|
|
1177
|
+
? assignedAiProfileColor(taskforceAgentId)
|
|
1178
|
+
: productColor || assignedAiProfileColor(`${profile.name}:${profile.username}`),
|
|
1179
|
+
source: taskforceAgentId ? 'assigned_default' : (productColor ? 'product_default' : 'assigned_default'),
|
|
1180
|
+
}];
|
|
1181
|
+
})) : null;
|
|
1182
|
+
const requestedColor = input.reset === true ? null : normalizeAiProfileColor(input.color);
|
|
1183
|
+
if (input.reset !== true && !requestedColor) {
|
|
1184
|
+
throw deps.createRuleError('color must be a Taskforce palette token or hex color.', 400, 'AI_PROFILE_COLOR_INVALID');
|
|
1185
|
+
}
|
|
1186
|
+
const now = new Date().toISOString();
|
|
1187
|
+
const run = deps.db.transaction(() => {
|
|
1188
|
+
for (const id of profileIds) {
|
|
1189
|
+
const resetColor = resetColors?.get(id);
|
|
1190
|
+
deps.db.prepare(`
|
|
1191
|
+
UPDATE ai_profiles SET color = ?, color_source = ?, color_updated_at = ?
|
|
1192
|
+
WHERE tenant_id = ? AND workspace_id = ? AND id = ?
|
|
1193
|
+
`).run(resetColor?.color ?? requestedColor, resetColor?.source ?? 'user_override', now, deps.tenantId, workspaceId, id);
|
|
1194
|
+
}
|
|
1195
|
+
});
|
|
1196
|
+
run();
|
|
1197
|
+
return profileIds.map((id) => {
|
|
1198
|
+
const row = deps.db.prepare(`SELECT * FROM ai_profiles WHERE tenant_id = ? AND workspace_id = ? AND id = ?`)
|
|
1199
|
+
.get(deps.tenantId, workspaceId, id);
|
|
1200
|
+
return hydrateAiProfileRecord(deps, row);
|
|
1201
|
+
});
|
|
1202
|
+
}
|
|
992
1203
|
export function updateAiProfileSurfaceTypeService(deps, input) {
|
|
993
1204
|
const normalizedWorkspaceId = deps.normalizeWorkspaceId(input.workspaceId);
|
|
994
1205
|
const profileId = String(input.profileId || '').trim();
|
|
@@ -1029,6 +1240,137 @@ export function updateAiProfileSurfaceTypeService(deps, input) {
|
|
|
1029
1240
|
}
|
|
1030
1241
|
return hydrateAiProfileRecord(deps, refreshed);
|
|
1031
1242
|
}
|
|
1243
|
+
export function updateAiProfileProviderMetadataService(deps, input) {
|
|
1244
|
+
const normalizedWorkspaceId = deps.normalizeWorkspaceId(input.workspaceId);
|
|
1245
|
+
const profileId = String(input.profileId || '').trim();
|
|
1246
|
+
if (!profileId)
|
|
1247
|
+
throw deps.createRuleError('profileId is required', 400, 'AI_PROFILE_ID_REQUIRED');
|
|
1248
|
+
const existing = deps.db.prepare(`
|
|
1249
|
+
SELECT *
|
|
1250
|
+
FROM ai_profiles
|
|
1251
|
+
WHERE tenant_id = ? AND workspace_id = ? AND id = ? AND archived_at IS NULL
|
|
1252
|
+
LIMIT 1
|
|
1253
|
+
`).get(deps.tenantId, normalizedWorkspaceId, profileId);
|
|
1254
|
+
if (!existing) {
|
|
1255
|
+
throw deps.createRuleError(`Profile ${profileId} not found`, 404, 'AI_PROFILE_NOT_FOUND');
|
|
1256
|
+
}
|
|
1257
|
+
const providerMetadata = input.providerMetadata && typeof input.providerMetadata === 'object' && !Array.isArray(input.providerMetadata)
|
|
1258
|
+
? input.providerMetadata
|
|
1259
|
+
: null;
|
|
1260
|
+
const updatedAt = new Date().toISOString();
|
|
1261
|
+
deps.db.prepare(`
|
|
1262
|
+
UPDATE ai_profiles
|
|
1263
|
+
SET provider_metadata_json = ?,
|
|
1264
|
+
updated_at = ?
|
|
1265
|
+
WHERE tenant_id = ? AND workspace_id = ? AND id = ?
|
|
1266
|
+
`).run(providerMetadata ? JSON.stringify(providerMetadata) : null, updatedAt, deps.tenantId, normalizedWorkspaceId, profileId);
|
|
1267
|
+
const refreshed = deps.db.prepare(`
|
|
1268
|
+
SELECT *
|
|
1269
|
+
FROM ai_profiles
|
|
1270
|
+
WHERE tenant_id = ? AND workspace_id = ? AND id = ?
|
|
1271
|
+
LIMIT 1
|
|
1272
|
+
`).get(deps.tenantId, normalizedWorkspaceId, profileId);
|
|
1273
|
+
if (!refreshed) {
|
|
1274
|
+
throw deps.createRuleError('Failed to update AI profile provider metadata', 500, 'AI_PROFILE_METADATA_UPDATE_FAILED');
|
|
1275
|
+
}
|
|
1276
|
+
return hydrateAiProfileRecord(deps, refreshed);
|
|
1277
|
+
}
|
|
1278
|
+
function normalizeConnectionBindingId(deps, value) {
|
|
1279
|
+
const normalized = String(value || '').trim();
|
|
1280
|
+
if (!normalized || normalized.length > 128 || !/^[A-Za-z0-9._:-]+$/.test(normalized)) {
|
|
1281
|
+
throw deps.createRuleError('A valid MCP connection ID is required', 400, 'AI_PROFILE_CONNECTION_ID_INVALID');
|
|
1282
|
+
}
|
|
1283
|
+
return normalized;
|
|
1284
|
+
}
|
|
1285
|
+
function parseProviderMetadataRow(row) {
|
|
1286
|
+
if (typeof row.provider_metadata_json !== 'string' || !row.provider_metadata_json.trim())
|
|
1287
|
+
return {};
|
|
1288
|
+
try {
|
|
1289
|
+
const parsed = JSON.parse(row.provider_metadata_json);
|
|
1290
|
+
return parsed && typeof parsed === 'object' && !Array.isArray(parsed) ? parsed : {};
|
|
1291
|
+
}
|
|
1292
|
+
catch {
|
|
1293
|
+
return {};
|
|
1294
|
+
}
|
|
1295
|
+
}
|
|
1296
|
+
export function bindAiProfileConnectionService(deps, input) {
|
|
1297
|
+
const workspaceId = deps.normalizeWorkspaceId(input.workspaceId);
|
|
1298
|
+
const profileId = String(input.profileId || '').trim();
|
|
1299
|
+
const connectionId = normalizeConnectionBindingId(deps, input.connectionId);
|
|
1300
|
+
const clientId = String(input.clientId || '').trim() || null;
|
|
1301
|
+
return deps.db.transaction(() => {
|
|
1302
|
+
const target = deps.db.prepare(`SELECT * FROM ai_profiles WHERE tenant_id = ? AND workspace_id = ? AND id = ? AND archived_at IS NULL LIMIT 1`)
|
|
1303
|
+
.get(deps.tenantId, workspaceId, profileId);
|
|
1304
|
+
if (!target)
|
|
1305
|
+
throw deps.createRuleError(`Profile ${profileId} not found`, 404, 'AI_PROFILE_NOT_FOUND');
|
|
1306
|
+
const now = new Date().toISOString();
|
|
1307
|
+
deps.db.prepare(`INSERT INTO ai_profile_connection_bindings (tenant_id, workspace_id, connection_id, profile_id, client_id, created_at, updated_at)
|
|
1308
|
+
VALUES (?, ?, ?, ?, ?, ?, ?)
|
|
1309
|
+
ON CONFLICT (tenant_id, workspace_id, connection_id) DO UPDATE SET profile_id = excluded.profile_id, client_id = excluded.client_id, updated_at = excluded.updated_at`)
|
|
1310
|
+
.run(deps.tenantId, workspaceId, connectionId, profileId, clientId, now, now);
|
|
1311
|
+
const rows = deps.db.prepare(`SELECT * FROM ai_profiles WHERE tenant_id = ? AND workspace_id = ?`).all(deps.tenantId, workspaceId);
|
|
1312
|
+
for (const row of rows) {
|
|
1313
|
+
const metadata = parseProviderMetadataRow(row);
|
|
1314
|
+
const connection = metadata.connection && typeof metadata.connection === 'object' && !Array.isArray(metadata.connection)
|
|
1315
|
+
? metadata.connection
|
|
1316
|
+
: {};
|
|
1317
|
+
const bindingIds = Array.isArray(connection.bindingIds)
|
|
1318
|
+
? connection.bindingIds.map((value) => String(value || '').trim()).filter(Boolean)
|
|
1319
|
+
: [];
|
|
1320
|
+
const isTarget = String(row.id) === profileId;
|
|
1321
|
+
const nextBindingIds = isTarget
|
|
1322
|
+
? Array.from(new Set([...bindingIds, connectionId]))
|
|
1323
|
+
: bindingIds.filter((value) => value !== connectionId);
|
|
1324
|
+
const nextConnection = { ...connection };
|
|
1325
|
+
if (isTarget && clientId)
|
|
1326
|
+
nextConnection.clientId = clientId;
|
|
1327
|
+
if (nextBindingIds.length > 0)
|
|
1328
|
+
nextConnection.bindingIds = nextBindingIds;
|
|
1329
|
+
else
|
|
1330
|
+
delete nextConnection.bindingIds;
|
|
1331
|
+
const changed = JSON.stringify(connection) !== JSON.stringify(nextConnection);
|
|
1332
|
+
if (!changed)
|
|
1333
|
+
continue;
|
|
1334
|
+
deps.db.prepare(`UPDATE ai_profiles SET provider_metadata_json = ?, updated_at = ? WHERE tenant_id = ? AND workspace_id = ? AND id = ?`)
|
|
1335
|
+
.run(JSON.stringify({ ...metadata, connection: nextConnection }), now, deps.tenantId, workspaceId, row.id);
|
|
1336
|
+
}
|
|
1337
|
+
const refreshed = deps.db.prepare(`SELECT * FROM ai_profiles WHERE tenant_id = ? AND workspace_id = ? AND id = ? LIMIT 1`)
|
|
1338
|
+
.get(deps.tenantId, workspaceId, profileId);
|
|
1339
|
+
if (!refreshed)
|
|
1340
|
+
throw deps.createRuleError('Failed to bind MCP connection', 500, 'AI_PROFILE_CONNECTION_BIND_FAILED');
|
|
1341
|
+
return hydrateAiProfileRecord(deps, refreshed);
|
|
1342
|
+
})();
|
|
1343
|
+
}
|
|
1344
|
+
export function getAiProfileByConnectionService(deps, input) {
|
|
1345
|
+
const workspaceId = deps.normalizeWorkspaceId(input.workspaceId);
|
|
1346
|
+
const connectionId = normalizeConnectionBindingId(deps, input.connectionId);
|
|
1347
|
+
const binding = deps.db.prepare(`SELECT p.* FROM ai_profile_connection_bindings b JOIN ai_profiles p ON p.tenant_id = b.tenant_id AND p.workspace_id = b.workspace_id AND p.id = b.profile_id
|
|
1348
|
+
WHERE b.tenant_id = ? AND b.workspace_id = ? AND b.connection_id = ? LIMIT 1`)
|
|
1349
|
+
.get(deps.tenantId, workspaceId, connectionId);
|
|
1350
|
+
if (binding) {
|
|
1351
|
+
const record = hydrateAiProfileRecord(deps, binding);
|
|
1352
|
+
return input.seatScope !== undefined && (record.seatScope ?? null) !== input.seatScope ? null : record;
|
|
1353
|
+
}
|
|
1354
|
+
const legacyRows = deps.db.prepare(`SELECT * FROM ai_profiles WHERE tenant_id = ? AND workspace_id = ?`).all(deps.tenantId, workspaceId)
|
|
1355
|
+
.filter((row) => {
|
|
1356
|
+
const record = hydrateAiProfileRecord(deps, row);
|
|
1357
|
+
if (input.seatScope !== undefined && (record.seatScope ?? null) !== input.seatScope)
|
|
1358
|
+
return false;
|
|
1359
|
+
const connection = parseProviderMetadataRow(row).connection;
|
|
1360
|
+
return Array.isArray(connection?.bindingIds) && connection.bindingIds.includes(connectionId);
|
|
1361
|
+
});
|
|
1362
|
+
if (legacyRows.length > 1) {
|
|
1363
|
+
throw deps.createRuleError('This MCP connection is bound to multiple AI profiles. Merge the duplicates or reconnect with a profileToken.', 409, 'AI_PROFILE_BINDING_AMBIGUOUS', {
|
|
1364
|
+
workspaceId, profileIds: legacyRows.map((row) => String(row.id)),
|
|
1365
|
+
});
|
|
1366
|
+
}
|
|
1367
|
+
if (legacyRows.length === 0)
|
|
1368
|
+
return null;
|
|
1369
|
+
const record = hydrateAiProfileRecord(deps, legacyRows[0]);
|
|
1370
|
+
if (!record.archivedAt)
|
|
1371
|
+
bindAiProfileConnectionService(deps, { workspaceId, profileId: record.id, connectionId });
|
|
1372
|
+
return record;
|
|
1373
|
+
}
|
|
1032
1374
|
export function archiveAiProfileService(deps, input) {
|
|
1033
1375
|
const normalizedWorkspaceId = deps.normalizeWorkspaceId(input.workspaceId);
|
|
1034
1376
|
const profileId = String(input.profileId || '').trim();
|
|
@@ -1087,6 +1429,29 @@ export function resolveAiProfileService(deps, input, options) {
|
|
|
1087
1429
|
const profileToken = String(input.profileToken || '').trim();
|
|
1088
1430
|
const now = new Date().toISOString();
|
|
1089
1431
|
const trustedSeatScope = normalizeAiProfileSeatScopeInput(deps, options?.trustedSeatScope);
|
|
1432
|
+
const resolveExistingColor = (existing) => {
|
|
1433
|
+
if (isTaskforceManagedAiProfile(existing)) {
|
|
1434
|
+
return { color: existing.color, source: existing.colorSource ?? 'legacy', updatedAt: existing.colorUpdatedAt ?? existing.updatedAt };
|
|
1435
|
+
}
|
|
1436
|
+
if (existing.colorSource === 'user_override') {
|
|
1437
|
+
return { color: existing.color, source: existing.colorSource, updatedAt: existing.colorUpdatedAt ?? existing.updatedAt };
|
|
1438
|
+
}
|
|
1439
|
+
const productColor = normalizeAiProfileColor(options?.trustedSignatureColor);
|
|
1440
|
+
if (productColor) {
|
|
1441
|
+
const productColorAlreadyApplied = normalizeAiProfileColor(existing.color) === productColor
|
|
1442
|
+
&& existing.colorSource === 'product_default';
|
|
1443
|
+
return productColorAlreadyApplied
|
|
1444
|
+
? { color: existing.color, source: existing.colorSource, updatedAt: existing.colorUpdatedAt ?? existing.updatedAt }
|
|
1445
|
+
: { color: productColor, source: 'product_default', updatedAt: now };
|
|
1446
|
+
}
|
|
1447
|
+
if (input.color === undefined || input.color === null || String(input.color).trim() === '') {
|
|
1448
|
+
return { color: existing.color, source: existing.colorSource ?? 'legacy', updatedAt: existing.colorUpdatedAt ?? existing.updatedAt };
|
|
1449
|
+
}
|
|
1450
|
+
const color = normalizeAiProfileColor(input.color);
|
|
1451
|
+
if (!color)
|
|
1452
|
+
throw deps.createRuleError('color must be a Taskforce palette token or hex color.', 400, 'AI_PROFILE_COLOR_INVALID');
|
|
1453
|
+
return { color, source: 'agent_explicit', updatedAt: now };
|
|
1454
|
+
};
|
|
1090
1455
|
if (profileToken) {
|
|
1091
1456
|
const existingRows = deps.db.prepare(`
|
|
1092
1457
|
SELECT *
|
|
@@ -1116,9 +1481,7 @@ export function resolveAiProfileService(deps, input, options) {
|
|
|
1116
1481
|
const nextIcon = input.icon === undefined
|
|
1117
1482
|
? existingProfile.icon
|
|
1118
1483
|
: deps.normalizeAiProfileIcon(input.icon);
|
|
1119
|
-
const nextColor =
|
|
1120
|
-
? existingProfile.color
|
|
1121
|
-
: deps.normalizeAiProfileColor(input.color);
|
|
1484
|
+
const nextColor = resolveExistingColor(existingProfile);
|
|
1122
1485
|
const nextDescription = normalizeOptionalProfileField(input.description);
|
|
1123
1486
|
const nextRole = normalizeOptionalProfileField(input.role);
|
|
1124
1487
|
const nextProvider = normalizeOptionalProfileField(input.provider);
|
|
@@ -1130,7 +1493,7 @@ export function resolveAiProfileService(deps, input, options) {
|
|
|
1130
1493
|
provider: nextProvider,
|
|
1131
1494
|
model: nextModel,
|
|
1132
1495
|
surfaceType: input.surfaceType,
|
|
1133
|
-
}, existingProfile);
|
|
1496
|
+
}, existingProfile, options?.trustedSurfaceType);
|
|
1134
1497
|
const resolvedSeatScope = resolveTrustedAiProfileSeatScope(deps, trustedSeatScope, existingProfile);
|
|
1135
1498
|
if (requiresCloudSeatReservation(existingProfile, resolvedSeatScope.seatScope)) {
|
|
1136
1499
|
assertAiProfileSeatAvailable(deps, normalizedWorkspaceId);
|
|
@@ -1140,7 +1503,7 @@ export function resolveAiProfileService(deps, input, options) {
|
|
|
1140
1503
|
SET name = ?,
|
|
1141
1504
|
username = ?,
|
|
1142
1505
|
icon = ?,
|
|
1143
|
-
color = ?,
|
|
1506
|
+
color = ?, color_source = ?, color_updated_at = ?,
|
|
1144
1507
|
description = COALESCE(?, description),
|
|
1145
1508
|
role = COALESCE(?, role),
|
|
1146
1509
|
provider = COALESCE(?, provider),
|
|
@@ -1161,7 +1524,7 @@ export function resolveAiProfileService(deps, input, options) {
|
|
|
1161
1524
|
last_active_at = ?,
|
|
1162
1525
|
updated_at = ?
|
|
1163
1526
|
WHERE tenant_id = ? AND id = ?
|
|
1164
|
-
`).run(nextName, nextUsername, nextIcon, nextColor, resolvedMetadata.description, resolvedMetadata.role, resolvedMetadata.provider, resolvedMetadata.model, resolvedMetadata.surfaceTypeProvided ? 1 : 0, resolvedMetadata.surfaceType, resolvedSeatScope.seatScopeProvided ? 1 : 0, resolvedSeatScope.seatScope, now, now, now, deps.tenantId, String(archivedRow.id || '').trim());
|
|
1527
|
+
`).run(nextName, nextUsername, nextIcon, nextColor.color, nextColor.source, nextColor.updatedAt, resolvedMetadata.description, resolvedMetadata.role, resolvedMetadata.provider, resolvedMetadata.model, resolvedMetadata.surfaceTypeProvided ? 1 : 0, resolvedMetadata.surfaceType, resolvedSeatScope.seatScopeProvided ? 1 : 0, resolvedSeatScope.seatScope, now, now, now, deps.tenantId, String(archivedRow.id || '').trim());
|
|
1165
1528
|
const refreshed = deps.db.prepare(`
|
|
1166
1529
|
SELECT *
|
|
1167
1530
|
FROM ai_profiles
|
|
@@ -1187,9 +1550,7 @@ export function resolveAiProfileService(deps, input, options) {
|
|
|
1187
1550
|
const nextIcon = input.icon === undefined
|
|
1188
1551
|
? existingProfile.icon
|
|
1189
1552
|
: deps.normalizeAiProfileIcon(input.icon);
|
|
1190
|
-
const nextColor =
|
|
1191
|
-
? existingProfile.color
|
|
1192
|
-
: deps.normalizeAiProfileColor(input.color);
|
|
1553
|
+
const nextColor = resolveExistingColor(existingProfile);
|
|
1193
1554
|
const nextDescription = normalizeOptionalProfileField(input.description);
|
|
1194
1555
|
const nextRole = normalizeOptionalProfileField(input.role);
|
|
1195
1556
|
const nextProvider = normalizeOptionalProfileField(input.provider);
|
|
@@ -1201,7 +1562,7 @@ export function resolveAiProfileService(deps, input, options) {
|
|
|
1201
1562
|
provider: nextProvider,
|
|
1202
1563
|
model: nextModel,
|
|
1203
1564
|
surfaceType: input.surfaceType,
|
|
1204
|
-
}, existingProfile);
|
|
1565
|
+
}, existingProfile, options?.trustedSurfaceType);
|
|
1205
1566
|
const resolvedSeatScope = resolveTrustedAiProfileSeatScope(deps, trustedSeatScope, existingProfile);
|
|
1206
1567
|
if (requiresCloudSeatReservation(existingProfile, resolvedSeatScope.seatScope)) {
|
|
1207
1568
|
assertAiProfileSeatAvailable(deps, normalizedWorkspaceId);
|
|
@@ -1211,7 +1572,7 @@ export function resolveAiProfileService(deps, input, options) {
|
|
|
1211
1572
|
SET name = ?,
|
|
1212
1573
|
username = ?,
|
|
1213
1574
|
icon = ?,
|
|
1214
|
-
color = ?,
|
|
1575
|
+
color = ?, color_source = ?, color_updated_at = ?,
|
|
1215
1576
|
description = COALESCE(?, description),
|
|
1216
1577
|
role = COALESCE(?, role),
|
|
1217
1578
|
provider = COALESCE(?, provider),
|
|
@@ -1227,7 +1588,7 @@ export function resolveAiProfileService(deps, input, options) {
|
|
|
1227
1588
|
last_active_at = ?,
|
|
1228
1589
|
updated_at = ?
|
|
1229
1590
|
WHERE tenant_id = ? AND id = ?
|
|
1230
|
-
`).run(nextName, nextUsername, nextIcon, nextColor, resolvedMetadata.description, resolvedMetadata.role, resolvedMetadata.provider, resolvedMetadata.model, resolvedMetadata.surfaceTypeProvided ? 1 : 0, resolvedMetadata.surfaceType, resolvedSeatScope.seatScopeProvided ? 1 : 0, resolvedSeatScope.seatScope, now, now, deps.tenantId, String(existingRow.id || '').trim());
|
|
1591
|
+
`).run(nextName, nextUsername, nextIcon, nextColor.color, nextColor.source, nextColor.updatedAt, resolvedMetadata.description, resolvedMetadata.role, resolvedMetadata.provider, resolvedMetadata.model, resolvedMetadata.surfaceTypeProvided ? 1 : 0, resolvedMetadata.surfaceType, resolvedSeatScope.seatScopeProvided ? 1 : 0, resolvedSeatScope.seatScope, now, now, deps.tenantId, String(existingRow.id || '').trim());
|
|
1231
1592
|
const refreshed = deps.db.prepare(`
|
|
1232
1593
|
SELECT *
|
|
1233
1594
|
FROM ai_profiles
|
|
@@ -1243,21 +1604,6 @@ export function resolveAiProfileService(deps, input, options) {
|
|
|
1243
1604
|
};
|
|
1244
1605
|
}
|
|
1245
1606
|
}
|
|
1246
|
-
const identityDescription = normalizeOptionalProfileField(input.description);
|
|
1247
|
-
const identityRole = normalizeOptionalProfileField(input.role);
|
|
1248
|
-
const inferredIdentity = inferAiProfileProviderModelDefaults(name);
|
|
1249
|
-
const identityProvider = normalizeOptionalProfileField(input.provider)
|
|
1250
|
-
?? normalizeOptionalProfileField(inferredIdentity.provider);
|
|
1251
|
-
const identityModel = normalizeOptionalProfileField(input.model)
|
|
1252
|
-
?? normalizeOptionalProfileField(inferredIdentity.model);
|
|
1253
|
-
const identityMetadata = resolveAiProfileMetadataFields(deps, {
|
|
1254
|
-
name,
|
|
1255
|
-
description: identityDescription,
|
|
1256
|
-
role: identityRole,
|
|
1257
|
-
provider: identityProvider,
|
|
1258
|
-
model: identityModel,
|
|
1259
|
-
surfaceType: input.surfaceType,
|
|
1260
|
-
}, null);
|
|
1261
1607
|
const exactMatches = deps.db.prepare(`
|
|
1262
1608
|
SELECT *
|
|
1263
1609
|
FROM ai_profiles
|
|
@@ -1270,52 +1616,22 @@ export function resolveAiProfileService(deps, input, options) {
|
|
|
1270
1616
|
)
|
|
1271
1617
|
ORDER BY COALESCE(last_active_at, updated_at, created_at) DESC, id ASC
|
|
1272
1618
|
`).all(deps.tenantId, normalizedWorkspaceId, name, deps.normalizeAiProfileUsername(undefined, name));
|
|
1273
|
-
const exactMatch = selectAiProfileIdentityMatch(deps, exactMatches,
|
|
1619
|
+
const exactMatch = selectAiProfileIdentityMatch(deps, exactMatches, trustedSeatScope);
|
|
1620
|
+
if (exactMatch.matchCount > 1) {
|
|
1621
|
+
throw deps.createRuleError(`Multiple active AI profiles match "${name}". Bind with a profileToken or merge the duplicates before retrying.`, 409, 'AI_PROFILE_AMBIGUOUS', {
|
|
1622
|
+
workspaceId: normalizedWorkspaceId,
|
|
1623
|
+
candidates: buildAiProfileIdentityCandidates(deps, exactMatch.rows),
|
|
1624
|
+
recovery: 'Use a profileToken for the intended profile, or merge/archive duplicate profiles in AI Profile Manager.',
|
|
1625
|
+
});
|
|
1626
|
+
}
|
|
1274
1627
|
if (exactMatch.row) {
|
|
1275
1628
|
const canonicalId = String(exactMatch.row.id || '').trim();
|
|
1276
|
-
const nextName = name;
|
|
1277
|
-
const nextUsername = deps.normalizeAiProfileUsername(undefined, nextName);
|
|
1278
|
-
const nextIcon = deps.normalizeAiProfileIcon(input.icon);
|
|
1279
|
-
const nextColor = deps.normalizeAiProfileColor(input.color);
|
|
1280
|
-
const nextDescription = normalizeOptionalProfileField(input.description);
|
|
1281
|
-
const nextRole = normalizeOptionalProfileField(input.role);
|
|
1282
|
-
const nextProvider = normalizeOptionalProfileField(input.provider);
|
|
1283
|
-
const nextModel = normalizeOptionalProfileField(input.model);
|
|
1284
|
-
const existingProfile = deps.aiProfileRowToRecord(exactMatch.row);
|
|
1285
|
-
const resolvedMetadata = resolveAiProfileMetadataFields(deps, {
|
|
1286
|
-
name: nextName,
|
|
1287
|
-
description: nextDescription,
|
|
1288
|
-
role: nextRole,
|
|
1289
|
-
provider: nextProvider,
|
|
1290
|
-
model: nextModel,
|
|
1291
|
-
surfaceType: input.surfaceType,
|
|
1292
|
-
}, existingProfile);
|
|
1293
|
-
const resolvedSeatScope = resolveTrustedAiProfileSeatScope(deps, trustedSeatScope, existingProfile);
|
|
1294
|
-
if (requiresCloudSeatReservation(existingProfile, resolvedSeatScope.seatScope)) {
|
|
1295
|
-
assertAiProfileSeatAvailable(deps, normalizedWorkspaceId);
|
|
1296
|
-
}
|
|
1297
1629
|
deps.db.prepare(`
|
|
1298
1630
|
UPDATE ai_profiles
|
|
1299
|
-
SET
|
|
1300
|
-
|
|
1301
|
-
icon = ?,
|
|
1302
|
-
color = ?,
|
|
1303
|
-
description = COALESCE(?, description),
|
|
1304
|
-
role = COALESCE(?, role),
|
|
1305
|
-
provider = COALESCE(?, provider),
|
|
1306
|
-
model = COALESCE(?, model),
|
|
1307
|
-
last_active_at = ?,
|
|
1308
|
-
updated_at = ?,
|
|
1309
|
-
surface_type = CASE
|
|
1310
|
-
WHEN ? = 1 THEN ?
|
|
1311
|
-
ELSE surface_type
|
|
1312
|
-
END,
|
|
1313
|
-
seat_scope = CASE
|
|
1314
|
-
WHEN ? = 1 THEN ?
|
|
1315
|
-
ELSE seat_scope
|
|
1316
|
-
END
|
|
1631
|
+
SET last_active_at = ?,
|
|
1632
|
+
updated_at = ?
|
|
1317
1633
|
WHERE tenant_id = ? AND id = ?
|
|
1318
|
-
`).run(
|
|
1634
|
+
`).run(now, now, deps.tenantId, canonicalId);
|
|
1319
1635
|
const reused = deps.db.prepare(`
|
|
1320
1636
|
SELECT *
|
|
1321
1637
|
FROM ai_profiles
|
|
@@ -1327,13 +1643,7 @@ export function resolveAiProfileService(deps, input, options) {
|
|
|
1327
1643
|
}
|
|
1328
1644
|
return {
|
|
1329
1645
|
created: false,
|
|
1330
|
-
profile: hydrateAiProfileRecord(deps, reused)
|
|
1331
|
-
...(exactMatch.matchCount > 1 ? {
|
|
1332
|
-
duplicateWarning: {
|
|
1333
|
-
existingProfileId: canonicalId,
|
|
1334
|
-
message: `Multiple profiles matched "${name}". Reused ${canonicalId}; merge the remaining duplicates.`
|
|
1335
|
-
}
|
|
1336
|
-
} : {})
|
|
1646
|
+
profile: hydrateAiProfileRecord(deps, reused)
|
|
1337
1647
|
};
|
|
1338
1648
|
}
|
|
1339
1649
|
const archivedMatches = deps.db.prepare(`
|
|
@@ -1348,76 +1658,30 @@ export function resolveAiProfileService(deps, input, options) {
|
|
|
1348
1658
|
)
|
|
1349
1659
|
ORDER BY COALESCE(last_active_at, updated_at, created_at) DESC, id ASC
|
|
1350
1660
|
`).all(deps.tenantId, normalizedWorkspaceId, name, deps.normalizeAiProfileUsername(undefined, name));
|
|
1351
|
-
const archivedMatch = selectAiProfileIdentityMatch(deps, archivedMatches,
|
|
1352
|
-
if (archivedMatch.
|
|
1353
|
-
|
|
1354
|
-
|
|
1355
|
-
|
|
1356
|
-
|
|
1357
|
-
|
|
1358
|
-
const nextDescription = normalizeOptionalProfileField(input.description);
|
|
1359
|
-
const nextRole = normalizeOptionalProfileField(input.role);
|
|
1360
|
-
const nextProvider = normalizeOptionalProfileField(input.provider);
|
|
1361
|
-
const nextModel = normalizeOptionalProfileField(input.model);
|
|
1362
|
-
const existingProfile = deps.aiProfileRowToRecord(archivedMatch.row);
|
|
1363
|
-
const resolvedMetadata = resolveAiProfileMetadataFields(deps, {
|
|
1364
|
-
name: nextName,
|
|
1365
|
-
description: nextDescription,
|
|
1366
|
-
role: nextRole,
|
|
1367
|
-
provider: nextProvider,
|
|
1368
|
-
model: nextModel,
|
|
1369
|
-
surfaceType: input.surfaceType,
|
|
1370
|
-
}, existingProfile);
|
|
1371
|
-
const resolvedSeatScope = resolveTrustedAiProfileSeatScope(deps, trustedSeatScope, existingProfile);
|
|
1372
|
-
if (requiresCloudSeatReservation(existingProfile, resolvedSeatScope.seatScope)) {
|
|
1373
|
-
assertAiProfileSeatAvailable(deps, normalizedWorkspaceId);
|
|
1374
|
-
}
|
|
1375
|
-
deps.db.prepare(`
|
|
1376
|
-
UPDATE ai_profiles
|
|
1377
|
-
SET name = ?,
|
|
1378
|
-
username = ?,
|
|
1379
|
-
icon = ?,
|
|
1380
|
-
color = ?,
|
|
1381
|
-
description = COALESCE(?, description),
|
|
1382
|
-
role = COALESCE(?, role),
|
|
1383
|
-
provider = COALESCE(?, provider),
|
|
1384
|
-
model = COALESCE(?, model),
|
|
1385
|
-
last_active_at = ?,
|
|
1386
|
-
updated_at = ?,
|
|
1387
|
-
archived_at = NULL,
|
|
1388
|
-
archived_by = NULL,
|
|
1389
|
-
archived_reason = NULL,
|
|
1390
|
-
merged_into_profile_id = NULL,
|
|
1391
|
-
roster_state_updated_at = ?,
|
|
1392
|
-
surface_type = CASE
|
|
1393
|
-
WHEN ? = 1 THEN ?
|
|
1394
|
-
ELSE surface_type
|
|
1395
|
-
END,
|
|
1396
|
-
seat_scope = CASE
|
|
1397
|
-
WHEN ? = 1 THEN ?
|
|
1398
|
-
ELSE seat_scope
|
|
1399
|
-
END
|
|
1400
|
-
WHERE tenant_id = ? AND id = ?
|
|
1401
|
-
`).run(nextName, nextUsername, nextIcon, nextColor, resolvedMetadata.description, resolvedMetadata.role, resolvedMetadata.provider, resolvedMetadata.model, now, now, now, resolvedMetadata.surfaceTypeProvided ? 1 : 0, resolvedMetadata.surfaceType, resolvedSeatScope.seatScopeProvided ? 1 : 0, resolvedSeatScope.seatScope, deps.tenantId, canonicalId);
|
|
1402
|
-
const reactivated = deps.db.prepare(`
|
|
1403
|
-
SELECT *
|
|
1404
|
-
FROM ai_profiles
|
|
1405
|
-
WHERE tenant_id = ? AND id = ?
|
|
1406
|
-
LIMIT 1
|
|
1407
|
-
`).get(deps.tenantId, canonicalId);
|
|
1408
|
-
if (!reactivated) {
|
|
1409
|
-
throw deps.createRuleError('Failed to refresh AI profile', 500, 'AI_PROFILE_REFRESH_FAILED');
|
|
1410
|
-
}
|
|
1411
|
-
return {
|
|
1412
|
-
created: false,
|
|
1413
|
-
profile: hydrateAiProfileRecord(deps, reactivated)
|
|
1414
|
-
};
|
|
1661
|
+
const archivedMatch = selectAiProfileIdentityMatch(deps, archivedMatches, trustedSeatScope);
|
|
1662
|
+
if (archivedMatch.matchCount > 0) {
|
|
1663
|
+
throw deps.createRuleError(`An archived AI profile matches "${name}". Reactivate it with its profileToken or choose a distinct identity.`, 409, 'AI_PROFILE_RETIRED', {
|
|
1664
|
+
workspaceId: normalizedWorkspaceId,
|
|
1665
|
+
candidates: buildAiProfileIdentityCandidates(deps, archivedMatch.rows),
|
|
1666
|
+
recovery: 'Use the archived profileToken to reactivate the intended profile, or rename the new identity.',
|
|
1667
|
+
});
|
|
1415
1668
|
}
|
|
1416
1669
|
const id = deps.generateEntityId('ai-profile');
|
|
1417
1670
|
const issuedProfileToken = deps.issueProfileToken();
|
|
1418
1671
|
const username = deps.normalizeAiProfileUsername(undefined, name);
|
|
1419
1672
|
const icon = deps.normalizeAiProfileIcon(input.icon);
|
|
1420
|
-
const
|
|
1673
|
+
const explicitColorProvided = input.color !== undefined && input.color !== null && String(input.color).trim() !== '';
|
|
1674
|
+
const explicitColor = explicitColorProvided ? normalizeAiProfileColor(input.color) : null;
|
|
1675
|
+
if (explicitColorProvided && !explicitColor) {
|
|
1676
|
+
throw deps.createRuleError('color must be a Taskforce palette token or hex color.', 400, 'AI_PROFILE_COLOR_INVALID');
|
|
1677
|
+
}
|
|
1678
|
+
const productColor = normalizeAiProfileColor(options?.trustedSignatureColor);
|
|
1679
|
+
const color = productColor || explicitColor || assignedAiProfileColor(`${name}:${username}`);
|
|
1680
|
+
const colorSource = productColor
|
|
1681
|
+
? 'product_default'
|
|
1682
|
+
: explicitColor
|
|
1683
|
+
? 'agent_explicit'
|
|
1684
|
+
: 'assigned_default';
|
|
1421
1685
|
const description = normalizeOptionalProfileField(input.description);
|
|
1422
1686
|
const role = normalizeOptionalProfileField(input.role);
|
|
1423
1687
|
const provider = normalizeOptionalProfileField(input.provider);
|
|
@@ -1429,7 +1693,7 @@ export function resolveAiProfileService(deps, input, options) {
|
|
|
1429
1693
|
provider,
|
|
1430
1694
|
model,
|
|
1431
1695
|
surfaceType: input.surfaceType,
|
|
1432
|
-
}, null);
|
|
1696
|
+
}, null, options?.trustedSurfaceType);
|
|
1433
1697
|
const resolvedSeatScope = resolveTrustedAiProfileSeatScope(deps, trustedSeatScope, null);
|
|
1434
1698
|
if (resolvedSeatScope.seatScope === 'cloud_metered') {
|
|
1435
1699
|
assertAiProfileSeatAvailable(deps, normalizedWorkspaceId);
|
|
@@ -1439,12 +1703,12 @@ export function resolveAiProfileService(deps, input, options) {
|
|
|
1439
1703
|
: null;
|
|
1440
1704
|
deps.db.prepare(`
|
|
1441
1705
|
INSERT INTO ai_profiles (
|
|
1442
|
-
id, tenant_id, workspace_id, profile_token, name, username, icon, color,
|
|
1706
|
+
id, tenant_id, workspace_id, profile_token, name, username, icon, color, color_source, color_updated_at,
|
|
1443
1707
|
avatar_url, avatar_source_url, description, role, provider, model, surface_type, seat_scope, provider_metadata_json,
|
|
1444
1708
|
archived_at, archived_by, archived_reason, merged_into_profile_id,
|
|
1445
1709
|
roster_state_updated_at, created_at, updated_at, last_active_at
|
|
1446
|
-
) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)
|
|
1447
|
-
`).run(id, deps.tenantId, normalizedWorkspaceId, issuedProfileToken, name, username, icon, color, null, null, resolvedMetadata.description, resolvedMetadata.role, resolvedMetadata.provider, resolvedMetadata.model, resolvedMetadata.surfaceType, resolvedSeatScope.seatScope, providerMetadata ? JSON.stringify(providerMetadata) : null, null, null, null, null, now, now, now, now);
|
|
1710
|
+
) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)
|
|
1711
|
+
`).run(id, deps.tenantId, normalizedWorkspaceId, issuedProfileToken, name, username, icon, color, colorSource, now, null, null, resolvedMetadata.description, resolvedMetadata.role, resolvedMetadata.provider, resolvedMetadata.model, resolvedMetadata.surfaceType, resolvedSeatScope.seatScope, providerMetadata ? JSON.stringify(providerMetadata) : null, null, null, null, null, now, now, now, now);
|
|
1448
1712
|
const created = deps.db.prepare(`
|
|
1449
1713
|
SELECT *
|
|
1450
1714
|
FROM ai_profiles
|