@taskforcehq/taskforce 0.3.328 → 0.3.330
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/Taskforce.module.css +523 -79
- package/dist/TaskforceCore.js +237 -230
- package/dist/annotatedAttachments/AnnotatedAttachmentSessionStore.js +1 -1
- package/dist/cli.js +34 -0
- package/dist/cliCloudTargetGuard.d.ts +5 -0
- package/dist/cliCloudTargetGuard.js +11 -0
- package/dist/components/features/AiProfilesModule.js +3 -5
- package/dist/components/features/AnnotatedAttachmentWorkspace.js +24 -8
- package/dist/components/features/TaskSettings.d.ts +12 -1
- package/dist/components/features/TaskSettings.js +217 -54
- package/dist/components/features/TaskforceAgentsModule.d.ts +1 -2
- package/dist/components/features/TaskforceAgentsModule.js +586 -116
- package/dist/components/features/agentCapabilities/AgentCapabilitiesPrototype.d.ts +1 -1
- package/dist/components/features/agentConnections/AgentConnectionControl.d.ts +15 -0
- package/dist/components/features/agentConnections/AgentConnectionControl.js +125 -0
- package/dist/components/features/agentConnections/ModelConnectionsPanel.d.ts +18 -0
- package/dist/components/features/agentConnections/ModelConnectionsPanel.js +393 -0
- package/dist/components/features/agentConnections/modelConnectionsApi.d.ts +65 -0
- package/dist/components/features/agentConnections/modelConnectionsApi.js +129 -0
- package/dist/components/features/planning/PlanningModule.js +2 -5
- package/dist/components/features/planning/PlanningTaskOrderList.d.ts +1 -1
- package/dist/components/features/planning/PlanningTaskOrderList.js +17 -6
- package/dist/components/features/planning/planningTaskArrangement.d.ts +1 -0
- package/dist/components/features/planning/planningTaskArrangement.js +5 -5
- package/dist/components/features/taskforceAgentAssignments/AgentBehaviorAssignments.js +15 -24
- package/dist/components/features/taskforceAgentEditorModel.d.ts +2 -1
- package/dist/components/features/taskforceAgentEditorModel.js +5 -1
- package/dist/components/features/workflowManager/workflowManagerApi.d.ts +1 -1
- package/dist/components/features/workflowManager/workflowManagerApi.js +3 -0
- package/dist/components/task/TaskCard.d.ts +5 -0
- package/dist/components/task/TaskCard.js +65 -10
- package/dist/components/task/TaskImageReviews.js +14 -5
- package/dist/components/task/TaskKanban.d.ts +6 -1
- package/dist/components/task/TaskKanban.js +152 -6
- package/dist/components/task/TaskList.d.ts +5 -0
- package/dist/components/task/TaskList.js +3 -3
- package/dist/components/task/TaskWorkflowAssignmentField.js +68 -10
- package/dist/components/ui/PasswordInput.d.ts +6 -0
- package/dist/components/ui/PasswordInput.js +11 -0
- package/dist/components/ui/TopNoticeLayer.js +1 -1
- package/dist/components/views/AppShellHeader.js +32 -11
- package/dist/components/views/PlanComparisonPage.js +12 -0
- package/dist/components/views/StandaloneLayout.js +32 -55
- package/dist/components/views/WidgetView.js +3 -3
- package/dist/components/views/panels/PlanningDrawer.js +5 -12
- package/dist/components/views/standalone/modals/AccountSettingsModal.js +26 -17
- package/dist/components/views/standalone/modals/SyncStatusModal.d.ts +4 -3
- package/dist/components/views/standalone/modals/SyncStatusModal.js +33 -38
- package/dist/config/envSchema.js +60 -1
- package/dist/config/localServiceRuntimeContract.d.ts +13 -0
- package/dist/config/localServiceRuntimeContract.js +135 -0
- package/dist/core/AiProfileService.js +46 -8
- package/dist/core/DeletedTaskLifecycleService.d.ts +1 -0
- package/dist/core/DeletedTaskLifecycleService.js +37 -6
- package/dist/core/McpTokenService.d.ts +23 -1
- package/dist/core/McpTokenService.js +93 -10
- package/dist/core/TaskAttachmentLinksDurableMutationService.d.ts +3 -2
- package/dist/core/TaskAttachmentLinksDurableMutationService.js +33 -9
- package/dist/core/TaskChecklistCommandService.d.ts +27 -0
- package/dist/core/TaskChecklistCommandService.js +83 -5
- package/dist/core/TaskLifecycleCommandService.d.ts +3 -1
- package/dist/core/TaskLifecycleCommandService.js +6 -2
- package/dist/core/Taskforce.d.ts +94 -2
- package/dist/core/Taskforce.js +760 -36
- package/dist/core/types.d.ts +14 -0
- package/dist/documentReviews/commandService.d.ts +2 -1
- package/dist/documentReviews/commandService.js +6 -3
- package/dist/hooks/sync/orchestratorShared.d.ts +1 -0
- package/dist/hooks/sync/orchestratorShared.js +2 -0
- package/dist/hooks/sync/useDurableLocalOutboxDrain.d.ts +1 -1
- package/dist/hooks/sync/useDurableTaskCreateMutation.js +1 -1
- package/dist/hooks/sync/useDurableTaskMetadataMutation.d.ts +1 -0
- package/dist/hooks/sync/useDurableTaskMetadataMutation.js +1 -0
- package/dist/hooks/sync/useDurableTaskStatusMutation.d.ts +1 -0
- package/dist/hooks/sync/useLocalSyncCoordinatorSnapshot.d.ts +3 -0
- package/dist/hooks/sync/useLocalSyncCoordinatorSnapshot.js +85 -9
- package/dist/hooks/sync/useSyncStatusControls.d.ts +4 -1
- package/dist/hooks/sync/useSyncStatusControls.js +47 -11
- package/dist/hooks/tasks/taskHttpMutation.js +1 -0
- package/dist/hooks/tasks/useCloudTaskSearch.d.ts +12 -0
- package/dist/hooks/tasks/useCloudTaskSearch.js +71 -0
- package/dist/hooks/tasks/useTaskDescriptionImageDraftRecovery.d.ts +16 -0
- package/dist/hooks/tasks/useTaskDescriptionImageDraftRecovery.js +197 -0
- package/dist/hooks/tasks/useTaskEditorNavigation.d.ts +16 -3
- package/dist/hooks/tasks/useTaskEditorNavigation.js +72 -13
- package/dist/hooks/tasks/useTaskFormActions.d.ts +6 -0
- package/dist/hooks/tasks/useTaskFormActions.js +65 -12
- package/dist/hooks/ui/useSettingsModel.d.ts +24 -2
- package/dist/hooks/ui/useSettingsModel.js +13 -2
- package/dist/hooks/ui/useSettingsPersistence.d.ts +12 -1
- package/dist/hooks/ui/useSettingsPersistence.js +74 -47
- package/dist/hooks/useFilterSort.d.ts +7 -3
- package/dist/hooks/useFilterSort.js +15 -5
- package/dist/hooks/useSyncOrchestrator.d.ts +3 -0
- package/dist/hooks/useSyncOrchestrator.js +111 -2
- package/dist/hooks/useTaskData.d.ts +40 -1
- package/dist/hooks/useTaskData.js +240 -9
- package/dist/hooks/useTaskMutations.d.ts +12 -2
- package/dist/hooks/useTaskMutations.js +266 -52
- package/dist/hooks/useTaskforce.d.ts +39 -9
- package/dist/hooks/useTaskforce.js +359 -40
- package/dist/hooks/useUiNotice.d.ts +4 -0
- package/dist/hooks/useUiNotice.js +4 -0
- package/dist/mcp/adminWorkspaceRegistrar.js +3 -3
- package/dist/mcp/clientRegistry.d.ts +2 -2
- package/dist/mcp/clientRegistry.js +1 -1
- package/dist/mcp/documentAssetRegistrar.js +53 -41
- package/dist/mcp/documentHelpers.d.ts +1 -0
- package/dist/mcp/documentHelpers.js +7 -3
- package/dist/mcp/durableTaskMutationRouter.d.ts +4 -1
- package/dist/mcp/durableTaskMutationRouter.js +10 -0
- package/dist/mcp/durableTaskRelationshipMutationRouter.js +4 -0
- package/dist/mcp/httpProtocolRouting.d.ts +10 -0
- package/dist/mcp/httpProtocolRouting.js +19 -0
- package/dist/mcp/localCliHealth.d.ts +2 -2
- package/dist/mcp/localCliHealth.js +2 -2
- package/dist/mcp/localServiceProxy.d.ts +1 -0
- package/dist/mcp/localServiceProxy.js +530 -68
- package/dist/mcp/planningAttachmentCommandAdapter.d.ts +3 -1
- package/dist/mcp/planningAttachmentCommandAdapter.js +20 -2
- package/dist/mcp/runtime.d.ts +54 -79
- package/dist/mcp/runtime.js +556 -139
- package/dist/mcp/taskPlanningRegistrar.js +64 -42
- package/dist/mcp/toolCallCompatibility.js +38 -1
- package/dist/mcp/toolCatalog.d.ts +1 -0
- package/dist/mcp/toolProfiles.d.ts +2 -0
- package/dist/mcp/toolProfiles.js +10 -0
- package/dist/mcp/toolRegistry.d.ts +1 -0
- package/dist/mcp/toolRegistry.js +1 -0
- package/dist/mcp/workflowExecutionRegistrar.js +4 -4
- package/dist/migrations/taskSchemaMigrations.d.ts +5 -0
- package/dist/migrations/taskSchemaMigrations.js +427 -0
- package/dist/runtime/appGateDefinitions.d.ts +30 -6
- package/dist/runtime/appGateDefinitions.js +6 -6
- package/dist/runtime/appGates.d.ts +13 -13
- package/dist/runtime/appGates.js +36 -13
- package/dist/runtime/nodeAppGates.d.ts +8 -0
- package/dist/runtime/nodeAppGates.js +27 -0
- package/dist/server/cloudCollectionRead.d.ts +1 -1
- package/dist/server/cloudCollectionRead.js +2 -2
- package/dist/server/index.d.ts +6 -0
- package/dist/server/index.js +123 -14
- package/dist/server/localDatabaseIdentity.js +4 -1
- package/dist/server/localServiceLease.d.ts +3 -0
- package/dist/server/localServiceLease.js +11 -2
- package/dist/server/localServiceSessions.d.ts +14 -17
- package/dist/server/localServiceSessions.js +308 -94
- package/dist/server/localWorkspaceSyncServerRuntime.js +12 -7
- package/dist/server/rateLimit.d.ts +1 -0
- package/dist/server/rateLimit.js +4 -0
- package/dist/server/realtimeSyncWs.js +36 -12
- package/dist/server/routes/admin.d.ts +4 -0
- package/dist/server/routes/admin.js +113 -3
- package/dist/server/routes/agentRoles.js +3 -2
- package/dist/server/routes/agentSkills.js +3 -2
- package/dist/server/routes/agents.d.ts +7 -0
- package/dist/server/routes/agents.js +394 -39
- package/dist/server/routes/annotatedAttachments.js +3 -2
- package/dist/server/routes/auth.js +3 -1
- package/dist/server/routes/billing.js +5 -1
- package/dist/server/routes/durableTaskHttpRouters.d.ts +11 -2
- package/dist/server/routes/executorPhaseAApprovals.d.ts +19 -0
- package/dist/server/routes/executorPhaseAApprovals.js +140 -0
- package/dist/server/routes/executorPhaseAIssuerRedemptions.d.ts +11 -0
- package/dist/server/routes/executorPhaseAIssuerRedemptions.js +24 -0
- package/dist/server/routes/githubReviewEvidence.d.ts +19 -0
- package/dist/server/routes/githubReviewEvidence.js +116 -0
- package/dist/server/routes/localService.d.ts +15 -4
- package/dist/server/routes/localService.js +138 -40
- package/dist/server/routes/modelConnections.d.ts +24 -0
- package/dist/server/routes/modelConnections.js +205 -0
- package/dist/server/routes/primitives.d.ts +2 -0
- package/dist/server/routes/shared.d.ts +19 -0
- package/dist/server/routes/shared.js +95 -19
- package/dist/server/routes/sync.js +1 -0
- package/dist/server/routes/syncAuxRoutes.js +9 -2
- package/dist/server/routes/syncPullApplyRoutes.js +23 -4
- package/dist/server/routes/syncPushRoutes.d.ts +1 -0
- package/dist/server/routes/syncPushRoutes.js +1 -0
- package/dist/server/routes/syncV3FeedRoutes.js +27 -16
- package/dist/server/routes/syncV3LocalCaptureRoutes.js +28 -2
- package/dist/server/routes/syncV3LocalFeedApplyRoutes.d.ts +1 -0
- package/dist/server/routes/syncV3LocalFeedApplyRoutes.js +26 -0
- package/dist/server/routes/syncV3OperationRoutes.js +45 -9
- package/dist/server/routes/tasks.js +124 -13
- package/dist/server/routes/workflows.js +9 -1
- package/dist/server/routes/workspaces.js +43 -1
- package/dist/server/routes.js +59 -0
- package/dist/server/workspaceDeletionAdmission.d.ts +23 -0
- package/dist/server/workspaceDeletionAdmission.js +50 -0
- package/dist/service/localServiceCli.js +16 -0
- package/dist/service/localServiceClientLifecycle.js +36 -10
- package/dist/services/codexAppServerModelGateway.d.ts +161 -0
- package/dist/services/codexAppServerModelGateway.js +663 -0
- package/dist/services/codexDeviceCodeLoginManager.d.ts +39 -0
- package/dist/services/codexDeviceCodeLoginManager.js +265 -0
- package/dist/services/codexModelProviderConnectionLifecycle.d.ts +8 -0
- package/dist/services/codexModelProviderConnectionLifecycle.js +73 -0
- package/dist/services/executorPhaseAApprovalRuntime.d.ts +14 -0
- package/dist/services/executorPhaseAApprovalRuntime.js +24 -0
- package/dist/services/executorPhaseAApprovalService.d.ts +40 -0
- package/dist/services/executorPhaseAApprovalService.js +609 -0
- package/dist/services/executorPhaseADriftEvaluator.d.ts +78 -0
- package/dist/services/executorPhaseADriftEvaluator.js +93 -0
- package/dist/services/executorPhaseAIssuerCore.d.ts +126 -0
- package/dist/services/executorPhaseAIssuerCore.js +295 -0
- package/dist/services/executorPhaseAIssuerRedemptionService.d.ts +34 -0
- package/dist/services/executorPhaseAIssuerRedemptionService.js +158 -0
- package/dist/services/githubReviewEvidenceRuntime.d.ts +14 -0
- package/dist/services/githubReviewEvidenceRuntime.js +30 -0
- package/dist/services/githubReviewEvidenceService.d.ts +93 -0
- package/dist/services/githubReviewEvidenceService.js +336 -0
- package/dist/services/modelGateway.d.ts +7 -0
- package/dist/services/modelProviderConnectionService.d.ts +71 -0
- package/dist/services/modelProviderConnectionService.js +279 -0
- package/dist/services/modelProviderCredentialHome.d.ts +32 -0
- package/dist/services/modelProviderCredentialHome.js +271 -0
- package/dist/services/ownerScopedModelConnectionGateway.d.ts +12 -0
- package/dist/services/ownerScopedModelConnectionGateway.js +30 -0
- package/dist/services/taskforceAgentConnectionBindingService.d.ts +66 -0
- package/dist/services/taskforceAgentConnectionBindingService.js +185 -0
- package/dist/services/taskforceAgentMcpBridge.d.ts +8 -2
- package/dist/services/taskforceAgentMcpBridge.js +30 -27
- package/dist/shared/adminEdgeProxy.d.ts +5 -0
- package/dist/shared/adminEdgeProxy.js +94 -0
- package/dist/shared/adminProxySessionCookies.d.ts +16 -0
- package/dist/shared/adminProxySessionCookies.js +86 -0
- package/dist/shared/aiProfileColors.d.ts +31 -1
- package/dist/shared/aiProfileColors.js +14 -6
- package/dist/shared/executorPhaseAApprovalGoldenVector.json +269 -0
- package/dist/shared/executorPhaseAApprovalReceipt.d.ts +112 -0
- package/dist/shared/executorPhaseAApprovalReceipt.js +58 -0
- package/dist/shared/executorPhaseAApprovalTrustPolicy.json +10 -0
- package/dist/shared/executorPhaseADriftContracts.d.ts +37 -0
- package/dist/shared/executorPhaseADriftContracts.js +63 -0
- package/dist/shared/executorPhaseAIssuerContracts.d.ts +75 -0
- package/dist/shared/executorPhaseAIssuerContracts.js +90 -0
- package/dist/shared/executorPhaseARunAuthorization.d.ts +120 -0
- package/dist/shared/executorPhaseARunAuthorization.js +232 -0
- package/dist/shared/executorPhaseASchemaValidation.d.ts +7 -0
- package/dist/shared/executorPhaseASchemaValidation.js +53 -0
- package/dist/shared/executorPhaseASchemas/approval-receipt.schema.json +106 -0
- package/dist/shared/executorPhaseASchemas/drift-attestation.schema.json +54 -0
- package/dist/shared/executorPhaseASchemas/drift-request.schema.json +47 -0
- package/dist/shared/executorPhaseASchemas/foundation-manifest.schema.json +29 -0
- package/dist/shared/executorPhaseASchemas/issuer-audit-record.schema.json +24 -0
- package/dist/shared/executorPhaseASchemas/issuer-proof.schema.json +43 -0
- package/dist/shared/executorPhaseASchemas/issuer-redemption-request.schema.json +18 -0
- package/dist/shared/executorPhaseASchemas/issuer-redemption-response.schema.json +39 -0
- package/dist/shared/executorPhaseASchemas/logical-envelope.schema.json +149 -0
- package/dist/shared/executorPhaseASchemas/preflight-report.schema.json +216 -0
- package/dist/shared/executorPhaseASchemas/run-capability.schema.json +111 -0
- package/dist/shared/executorPhaseASchemas/sender-proof.schema.json +37 -0
- package/dist/shared/executorPhaseASchemas/workload-grant.schema.json +68 -0
- package/dist/shared/executorPhaseASchemas/workload-jwt-claims.schema.json +67 -0
- package/dist/shared/executorPhaseATiming.d.ts +1 -0
- package/dist/shared/executorPhaseATiming.js +1 -0
- package/dist/shared/planningIdentity.js +1 -1
- package/dist/shared/productLogoKeys.d.ts +2 -0
- package/dist/shared/productLogoKeys.js +18 -0
- package/dist/shared/taskforceAgentDefinition.d.ts +0 -1
- package/dist/shared/taskforceAgentDefinition.js +6 -3
- package/dist/shared/taskforceAgentModels.d.ts +1 -0
- package/dist/shared/taskforceAgentModels.js +36 -3
- package/dist/shared/userFeatureGrants.d.ts +4 -0
- package/dist/shared/userFeatureGrants.js +7 -0
- package/dist/storage/executorPhaseAApprovalReceiptStore.d.ts +37 -0
- package/dist/storage/executorPhaseAApprovalReceiptStore.js +81 -0
- package/dist/storage/executorPhaseARunAuthorizationStore.d.ts +103 -0
- package/dist/storage/executorPhaseARunAuthorizationStore.js +492 -0
- package/dist/storage/githubReviewEvidenceInstallationStore.d.ts +26 -0
- package/dist/storage/githubReviewEvidenceInstallationStore.js +89 -0
- package/dist/storage/modelProviderConnectionStore.d.ts +99 -0
- package/dist/storage/modelProviderConnectionStore.js +446 -0
- package/dist/storage/postgresAdapter.d.ts +24 -3
- package/dist/storage/postgresAdapter.js +117 -14
- package/dist/storage/postgresWorker.js +22 -5
- package/dist/storage/postgresWorkerProtocol.d.ts +30 -0
- package/dist/storage/postgresWorkerProtocol.js +30 -0
- package/dist/storage/taskforceAgentConnectionBindingStore.d.ts +31 -0
- package/dist/storage/taskforceAgentConnectionBindingStore.js +84 -0
- package/dist/sync/cloudSyncApi.d.ts +4 -1
- package/dist/sync/cloudSyncApi.js +7 -2
- package/dist/sync/contentSyncState.d.ts +1 -1
- package/dist/sync/coordinator/localSyncExecutionPermitStore.d.ts +1 -0
- package/dist/sync/coordinator/localSyncExecutionPermitStore.js +67 -30
- package/dist/sync/coordinator/localWorkspaceSyncPendingV2PushProgress.d.ts +10 -0
- package/dist/sync/coordinator/localWorkspaceSyncPendingV2PushProgress.js +29 -0
- package/dist/sync/coordinator/localWorkspaceSyncRunner.js +6 -2
- package/dist/sync/coordinator/localWorkspaceSyncRunnerState.d.ts +15 -1
- package/dist/sync/coordinator/localWorkspaceSyncRunnerState.js +99 -2
- package/dist/sync/coordinator/workspaceSyncCredentialBroker.d.ts +1 -0
- package/dist/sync/coordinator/workspaceSyncCredentialBroker.js +33 -4
- package/dist/sync/engine/workspaceSyncContentLifecycleAdapter.d.ts +2 -1
- package/dist/sync/engine/workspaceSyncContentVersionStore.d.ts +38 -0
- package/dist/sync/engine/workspaceSyncContentVersionStore.js +50 -1
- package/dist/sync/engine/workspaceSyncEngineBrowserGatewayRemoteServices.js +20 -2
- package/dist/sync/engine/workspaceSyncEngineLifecyclePolicy.js +6 -6
- package/dist/sync/engine/workspaceSyncEngineLocalServices.d.ts +4 -0
- package/dist/sync/engine/workspaceSyncEngineLocalServices.js +11 -0
- package/dist/sync/engine/workspaceSyncEnginePushCompletion.d.ts +14 -0
- package/dist/sync/engine/workspaceSyncEnginePushCompletion.js +84 -0
- package/dist/sync/engine/workspaceSyncEngineRecovery.js +1 -0
- package/dist/sync/engine/workspaceSyncEngineRemoteServices.d.ts +11 -0
- package/dist/sync/engine/workspaceSyncEngineRemoteServices.js +2 -1
- package/dist/sync/engine/workspaceSyncEngineRuntime.d.ts +1 -0
- package/dist/sync/engine/workspaceSyncEngineRuntime.js +1 -0
- package/dist/sync/engine/workspaceSyncEngineServerRemoteServices.js +31 -4
- package/dist/sync/engine/workspaceSyncEngineServerRunnerOperations.d.ts +3 -1
- package/dist/sync/engine/workspaceSyncEngineServerRunnerOperations.js +134 -43
- package/dist/sync/engine/workspaceSyncEngineServerSnapshotReader.js +6 -0
- package/dist/sync/engine/workspaceSyncEngineTransfers.d.ts +1 -1
- package/dist/sync/engine/workspaceSyncEngineTransfers.js +11 -4
- package/dist/sync/engine/workspaceSyncV2ChangeDispatcher.d.ts +1 -0
- package/dist/sync/engine/workspaceSyncV2ChangeDispatcher.js +29 -0
- package/dist/sync/syncApplyHandlers.d.ts +2 -0
- package/dist/sync/syncApplyHandlers.js +10 -1
- package/dist/sync/syncService.d.ts +17 -0
- package/dist/sync/syncService.js +87 -19
- package/dist/sync/taskforceAgentSyncAuthorization.d.ts +16 -0
- package/dist/sync/taskforceAgentSyncAuthorization.js +20 -0
- package/dist/sync/v3/combinedFeedCapability.js +8 -0
- package/dist/sync/v3/durableInitiativeMutationRouter.js +18 -10
- package/dist/sync/v3/durableOperationReplay.d.ts +14 -0
- package/dist/sync/v3/durableOperationReplay.js +18 -0
- package/dist/sync/v3/durableTaskAttachmentLinksMutationRouter.d.ts +2 -0
- package/dist/sync/v3/durableTaskAttachmentLinksMutationRouter.js +14 -1
- package/dist/sync/v3/durableTaskChecklistMutationRouter.d.ts +4 -1
- package/dist/sync/v3/durableTaskChecklistMutationRouter.js +62 -15
- package/dist/sync/v3/durableTaskCommentMutationRouter.js +3 -0
- package/dist/sync/v3/durableTaskHttpBulkMutationRouter.d.ts +1 -0
- package/dist/sync/v3/durableTaskHttpBulkMutationRouter.js +30 -8
- package/dist/sync/v3/durableTaskHttpRootMutationRouter.d.ts +5 -3
- package/dist/sync/v3/durableTaskHttpRootMutationRouter.js +37 -2
- package/dist/sync/v3/durableTaxonomyMutationRouter.js +5 -0
- package/dist/sync/v3/durableWorkflowRuntimeMutationRouter.d.ts +11 -0
- package/dist/sync/v3/durableWorkflowRuntimeMutationRouter.js +39 -10
- package/dist/sync/v3/durableWorkstreamMutationRouter.js +18 -10
- package/dist/sync/v3/durableWorkstreamTaskOrderMutationRouter.js +16 -5
- package/dist/sync/v3/localOutboxDispatchRuntime.js +2 -2
- package/dist/sync/v3/localTaskAttachmentLinksOutboxService.d.ts +2 -0
- package/dist/sync/v3/localTaskAttachmentLinksOutboxService.js +47 -7
- package/dist/sync/v3/localTaskChecklistOutboxHandler.js +16 -2
- package/dist/sync/v3/localTaskChecklistOutboxService.d.ts +4 -0
- package/dist/sync/v3/localTaskChecklistOutboxService.js +14 -1
- package/dist/sync/v3/localTaskCreateOutboxService.js +15 -6
- package/dist/sync/v3/localTaskMetadataClient.d.ts +1 -0
- package/dist/sync/v3/localTaskMetadataClient.js +1 -0
- package/dist/sync/v3/localTaskMetadataOutboxHandler.js +5 -1
- package/dist/sync/v3/localTaskMetadataOutboxService.d.ts +2 -0
- package/dist/sync/v3/localTaskMetadataOutboxService.js +7 -0
- package/dist/sync/v3/localTaskRestoreOutboxService.js +14 -6
- package/dist/sync/v3/localTaskStatusClient.d.ts +1 -0
- package/dist/sync/v3/localTaskStatusClient.js +6 -1
- package/dist/sync/v3/localTaskStatusOutboxService.d.ts +10 -0
- package/dist/sync/v3/localTaskStatusOutboxService.js +272 -24
- package/dist/sync/v3/syncDurabilityStore.d.ts +41 -0
- package/dist/sync/v3/syncDurabilityStore.js +199 -13
- package/dist/sync/v3/taskAttachmentLinksMutationService.d.ts +6 -4
- package/dist/sync/v3/taskAttachmentLinksMutationService.js +19 -10
- package/dist/sync/v3/taskChecklistMutationService.d.ts +15 -2
- package/dist/sync/v3/taskChecklistMutationService.js +48 -1
- package/dist/sync/v3/taskCreateMutationService.d.ts +2 -2
- package/dist/sync/v3/taskCreateMutationService.js +7 -4
- package/dist/sync/v3/taskMetadataMutationService.d.ts +3 -0
- package/dist/sync/v3/taskMetadataMutationService.js +4 -0
- package/dist/sync/v3/taskRestoreMutationService.d.ts +2 -2
- package/dist/sync/v3/taskRestoreMutationService.js +7 -4
- package/dist/sync/v3/taskStatusMutationService.d.ts +31 -1
- package/dist/sync/v3/taskStatusMutationService.js +123 -3
- package/dist/sync/v3/workflowAssignmentSync.d.ts +6 -0
- package/dist/sync/v3/workflowAssignmentSync.js +30 -0
- package/dist/sync/v3/workspaceSyncJournalReader.js +1 -1
- package/dist/sync/v3/workspaceSyncOperationRetentionService.d.ts +16 -0
- package/dist/sync/v3/workspaceSyncOperationRetentionService.js +83 -0
- package/dist/sync/v3/workspaceSyncV2ProjectionExclusions.d.ts +1 -1
- package/dist/sync/v3/workspaceSyncV2ProjectionExclusions.js +13 -3
- package/dist/sync/v3/workspaceSyncV3AttachmentApplyObligationStore.d.ts +11 -0
- package/dist/sync/v3/workspaceSyncV3AttachmentApplyObligationStore.js +27 -10
- package/dist/sync/v3/workspaceSyncV3AttachmentAssetHydration.d.ts +2 -1
- package/dist/sync/v3/workspaceSyncV3AttachmentAssetHydration.js +52 -10
- package/dist/sync/v3/workspaceSyncV3CloudOperationHandler.d.ts +1 -0
- package/dist/sync/v3/workspaceSyncV3CloudOperationHandler.js +18 -3
- package/dist/sync/v3/workspaceSyncV3CombinedFeedOrchestrator.js +8 -3
- package/dist/sync/v3/workspaceSyncV3CombinedLocalApply.js +51 -10
- package/dist/sync/v3/workspaceSyncV3CombinedRepairBaseline.d.ts +14 -0
- package/dist/sync/v3/workspaceSyncV3CombinedRepairBaseline.js +49 -25
- package/dist/sync/v3/workspaceSyncV3CombinedRepairMaterialization.d.ts +13 -4
- package/dist/sync/v3/workspaceSyncV3CombinedRepairMaterialization.js +124 -57
- package/dist/sync/v3/workspaceSyncV3CombinedRepairSnapshot.d.ts +20 -0
- package/dist/sync/v3/workspaceSyncV3CombinedRepairSnapshot.js +106 -30
- package/dist/sync/v3/workspaceSyncV3CombinedWireContract.d.ts +4 -1
- package/dist/sync/v3/workspaceSyncV3CombinedWireContract.js +34 -0
- package/dist/sync/v3/workspaceSyncV3CoverageRegistry.js +12 -0
- package/dist/sync/v3/workspaceSyncV3FeedProfile.d.ts +1 -1
- package/dist/sync/v3/workspaceSyncV3LegacyBoundaryAttestation.d.ts +1 -0
- package/dist/sync/v3/workspaceSyncV3LegacyBoundaryAttestation.js +23 -10
- package/dist/sync/v3/workspaceSyncV3NestedTaskApply.d.ts +3 -0
- package/dist/sync/v3/workspaceSyncV3NestedTaskApply.js +64 -13
- package/dist/sync/v3/workspaceSyncV3NestedTaskCodecs.d.ts +9 -0
- package/dist/sync/v3/workspaceSyncV3NestedTaskCodecs.js +26 -0
- package/dist/sync/v3/workspaceSyncV3NestedTaskProjection.d.ts +15 -5
- package/dist/sync/v3/workspaceSyncV3NestedTaskProjection.js +50 -14
- package/dist/sync/v3/workspaceSyncV3NestedTaskRepairSnapshot.d.ts +2 -1
- package/dist/sync/v3/workspaceSyncV3NestedTaskRepairSnapshot.js +11 -3
- package/dist/sync/v3/workspaceSyncV3OperationProtocol.d.ts +5 -0
- package/dist/sync/v3/workspaceSyncV3OperatorDiagnostics.d.ts +7 -0
- package/dist/sync/v3/workspaceSyncV3OperatorDiagnostics.js +55 -9
- package/dist/sync/v3/workspaceSyncV3RepairSnapshotRetentionService.d.ts +17 -0
- package/dist/sync/v3/workspaceSyncV3RepairSnapshotRetentionService.js +64 -0
- package/dist/sync/v3/workspaceSyncV3TaskCommentAudit.js +9 -2
- package/dist/sync/v3/workspaceSyncV3TaskCoverCoverage.d.ts +7 -0
- package/dist/sync/v3/workspaceSyncV3TaskCoverCoverage.js +37 -0
- package/dist/sync/v3/workspaceSyncV3TaskCoverWireContract.d.ts +6 -0
- package/dist/sync/v3/workspaceSyncV3TaskCoverWireContract.js +9 -0
- package/dist/sync/v3/workspaceSyncV3WorkflowTaskCoverCoverage.d.ts +7 -0
- package/dist/sync/v3/workspaceSyncV3WorkflowTaskCoverCoverage.js +33 -0
- package/dist/sync/v3/workspaceSyncV3WorkflowTaskCoverWireContract.d.ts +7 -0
- package/dist/sync/v3/workspaceSyncV3WorkflowTaskCoverWireContract.js +8 -0
- package/dist/sync/workspacePullFeed.js +2 -1
- package/dist/sync/workspaceRepair.d.ts +8 -2
- package/dist/sync/workspaceRepair.js +222 -6
- package/dist/sync/workspaceSyncModel.d.ts +21 -0
- package/dist/sync/workspaceSyncModel.js +35 -7
- package/dist/sync/workspaceSyncState.d.ts +1 -0
- package/dist/sync/workspaceSyncV2SnapshotBuilder.d.ts +6 -0
- package/dist/sync/workspaceSyncV2SnapshotBuilder.js +5 -0
- package/dist/types.d.ts +47 -1
- package/dist/types.js +6 -0
- package/dist/ui/assets/AiIdentityRosterCard-OcSz1PkK.js +1 -0
- package/dist/ui/assets/AiProfilesModule-ByhYW5Xi.js +1 -0
- package/dist/ui/assets/AnnotatedAttachmentWorkspace-BTM6nIg_.js +3 -0
- package/dist/ui/assets/AnnotatedAttachmentWorkspace-TzYu7pkG.css +1 -0
- package/dist/ui/assets/{AssetTraySortControl-Kf1pelSy.js → AssetTraySortControl-DabEG8L4.js} +1 -1
- package/dist/ui/assets/{ContextAttachmentManager-B8boOs6Q.js → ContextAttachmentManager-Coa8yVGM.js} +2 -2
- package/dist/ui/assets/{DocumentWorkspace-DXH4XUsB.js → DocumentWorkspace-BB0qhdix.js} +1 -1
- package/dist/ui/assets/{EntityActivityTimeline-BtSTq0ON.js → EntityActivityTimeline-CZ8x4UJE.js} +1 -1
- package/dist/ui/assets/PlanningModule-pRPjR7v5.js +1 -0
- package/dist/ui/assets/PlansPage-D86pZSSl.js +1 -0
- package/dist/ui/assets/TaskContextUpload-BVIkU9yT.js +1 -0
- package/dist/ui/assets/TaskSettings-Cv1mNhv_.js +12 -0
- package/dist/ui/assets/TaskforceAgentsModule-b-8R25cJ.css +1 -0
- package/dist/ui/assets/TaskforceAgentsModule-gmH-PD2q.js +24 -0
- package/dist/ui/assets/{WorkflowManagerModule-DWFspC-o.js → WorkflowManagerModule-DbfnHJ-f.js} +1 -1
- package/dist/ui/assets/index-BZ-hdZSk.css +1 -0
- package/dist/ui/assets/index-CTsDBaef.js +7 -0
- package/dist/ui/assets/{vendor-icons-BkFLXavV.js → vendor-icons-Bsq-mcEn.js} +1 -1
- package/dist/ui/branding/logos/letterhead_dark.png +0 -0
- package/dist/ui/branding/logos/letterhead_light.png +0 -0
- package/dist/ui/branding/logos/signature_dark.png +0 -0
- package/dist/ui/branding/logos/signature_light.png +0 -0
- package/dist/ui/index.html +3 -3
- package/dist/utils/aiProfileDefaultLogo.js +16 -48
- package/dist/utils/httpSetCookie.d.ts +1 -0
- package/dist/utils/httpSetCookie.js +4 -1
- package/dist/utils/localRuntimeUrl.d.ts +1 -0
- package/dist/utils/localRuntimeUrl.js +14 -0
- package/dist/utils/productLogoRegistry.d.ts +2 -0
- package/dist/utils/productLogoRegistry.js +36 -0
- package/dist/utils/syncStatusPresentation.d.ts +4 -0
- package/dist/utils/syncStatusPresentation.js +17 -0
- package/dist/utils/taskActivity.d.ts +3 -2
- package/dist/utils/taskActivity.js +19 -2
- package/dist/utils/taskEditorReconciliation.d.ts +40 -0
- package/dist/utils/taskEditorReconciliation.js +217 -0
- package/dist/utils/taskEvents.d.ts +2 -0
- package/dist/utils/taskNormalization.d.ts +1 -0
- package/dist/utils/taskNormalization.js +39 -0
- package/dist/utils/taskSearch.js +2 -2
- package/dist/utils/uiNotice.d.ts +4 -0
- package/dist/utils/workspaceSyncPresentation.d.ts +1 -1
- package/dist/utils/workspaceSyncPresentation.js +23 -17
- package/package.json +36 -6
- package/dist/ui/assets/AiIdentityRosterCard-MZs7lVED.js +0 -1
- package/dist/ui/assets/AiProfilesModule-C3i0LOxe.js +0 -1
- package/dist/ui/assets/AnnotatedAttachmentWorkspace-CBRZ8rca.css +0 -1
- package/dist/ui/assets/AnnotatedAttachmentWorkspace-DVZk5Tln.js +0 -3
- package/dist/ui/assets/PlanningModule-BPVyEa-f.js +0 -1
- package/dist/ui/assets/PlansPage-ChqgxALc.js +0 -1
- package/dist/ui/assets/TaskContextUpload-CB3ol0sN.js +0 -1
- package/dist/ui/assets/TaskSettings-g4ECKNOz.js +0 -12
- package/dist/ui/assets/TaskforceAgentsModule-BazdUwxZ.js +0 -21
- package/dist/ui/assets/TaskforceAgentsModule-D6IC0S7Q.css +0 -1
- package/dist/ui/assets/index-BUplSsv_.js +0 -7
- package/dist/ui/assets/index-gz2EXuoK.css +0 -1
|
@@ -3,6 +3,8 @@ import { WORKSPACE_SYNC_V3_COMBINED_COVERAGE_PROFILE } from './workspaceSyncV3Co
|
|
|
3
3
|
import { WORKSPACE_SYNC_V3_NESTED_COVERAGE_PROFILE } from './workspaceSyncV3NestedCoverage.js';
|
|
4
4
|
import { WORKSPACE_SYNC_V3_WORKFLOW_COVERAGE_PROFILE } from './workspaceSyncV3WorkflowCoverage.js';
|
|
5
5
|
import { WORKSPACE_SYNC_V3_PLANNING_ORDER_COVERAGE_PROFILE } from './workspaceSyncV3PlanningOrderCoverage.js';
|
|
6
|
+
import { WORKSPACE_SYNC_V3_TASK_COVER_COVERAGE_PROFILE } from './workspaceSyncV3TaskCoverCoverage.js';
|
|
7
|
+
import { WORKSPACE_SYNC_V3_WORKFLOW_TASK_COVER_COVERAGE_PROFILE } from './workspaceSyncV3WorkflowTaskCoverCoverage.js';
|
|
6
8
|
import { type WorkspaceSyncV3FeedEntry } from './workspaceSyncV3Feed.js';
|
|
7
9
|
import { type WorkspaceSyncV3FeedCursorKeyring } from './workspaceSyncV3FeedCursorKeys.js';
|
|
8
10
|
export interface WorkspaceSyncV3CombinedRepairCursor {
|
|
@@ -21,7 +23,7 @@ export interface WorkspaceSyncV3CombinedRepairPage {
|
|
|
21
23
|
success: true;
|
|
22
24
|
protocolVersion: 3;
|
|
23
25
|
workspaceId: string;
|
|
24
|
-
coverage: typeof WORKSPACE_SYNC_V3_COMBINED_COVERAGE_PROFILE | typeof WORKSPACE_SYNC_V3_NESTED_COVERAGE_PROFILE | typeof WORKSPACE_SYNC_V3_WORKFLOW_COVERAGE_PROFILE | typeof WORKSPACE_SYNC_V3_PLANNING_ORDER_COVERAGE_PROFILE;
|
|
26
|
+
coverage: typeof WORKSPACE_SYNC_V3_COMBINED_COVERAGE_PROFILE | typeof WORKSPACE_SYNC_V3_NESTED_COVERAGE_PROFILE | typeof WORKSPACE_SYNC_V3_WORKFLOW_COVERAGE_PROFILE | typeof WORKSPACE_SYNC_V3_PLANNING_ORDER_COVERAGE_PROFILE | typeof WORKSPACE_SYNC_V3_TASK_COVER_COVERAGE_PROFILE | typeof WORKSPACE_SYNC_V3_WORKFLOW_TASK_COVER_COVERAGE_PROFILE;
|
|
25
27
|
snapshotId: string;
|
|
26
28
|
snapshotSequence: string;
|
|
27
29
|
expiresAt: string;
|
|
@@ -47,6 +49,9 @@ export declare function decodeWorkspaceSyncV3CombinedRepairCursor(raw: string |
|
|
|
47
49
|
export declare function decodeWorkspaceSyncV3NestedRepairCursor(raw: string | null | undefined, keyring: WorkspaceSyncV3FeedCursorKeyring): WorkspaceSyncV3CombinedRepairCursor | null;
|
|
48
50
|
export declare function decodeWorkspaceSyncV3WorkflowRepairCursor(raw: string | null | undefined, keyring: WorkspaceSyncV3FeedCursorKeyring): WorkspaceSyncV3CombinedRepairCursor | null;
|
|
49
51
|
export declare function decodeWorkspaceSyncV3PlanningOrderRepairCursor(raw: string | null | undefined, keyring: WorkspaceSyncV3FeedCursorKeyring): WorkspaceSyncV3CombinedRepairCursor | null;
|
|
52
|
+
export declare function decodeWorkspaceSyncV3TaskCoverRepairCursor(raw: string | null | undefined, keyring: WorkspaceSyncV3FeedCursorKeyring): WorkspaceSyncV3CombinedRepairCursor | null;
|
|
53
|
+
export declare function decodeWorkspaceSyncV3WorkflowTaskCoverRepairCursor(raw: string | null | undefined, keyring: WorkspaceSyncV3FeedCursorKeyring): WorkspaceSyncV3CombinedRepairCursor | null;
|
|
54
|
+
export declare const WORKSPACE_SYNC_REPAIR_SNAPSHOT_CLEANUP_BATCH_SIZE = 500;
|
|
50
55
|
export declare function buildWorkspaceSyncV3CombinedRepairPage(input: {
|
|
51
56
|
core: TaskforceCore;
|
|
52
57
|
workspaceId: string;
|
|
@@ -58,9 +63,13 @@ export declare function buildWorkspaceSyncV3CombinedRepairPage(input: {
|
|
|
58
63
|
now?: string;
|
|
59
64
|
nestedCoverage?: boolean;
|
|
60
65
|
workflowCoverage?: boolean;
|
|
66
|
+
workflowTaskCoverCoverage?: boolean;
|
|
61
67
|
planningOrderCoverage?: boolean;
|
|
68
|
+
taskCoverCoverage?: boolean;
|
|
62
69
|
coveredLegacyWritesFenced?: boolean;
|
|
63
70
|
}): WorkspaceSyncV3CombinedRepairPage;
|
|
64
|
-
export declare function buildWorkspaceSyncV3NestedRepairPage(input: Omit<Parameters<typeof buildWorkspaceSyncV3CombinedRepairPage>[0], 'nestedCoverage' | 'workflowCoverage' | 'planningOrderCoverage'>): WorkspaceSyncV3CombinedRepairPage;
|
|
65
|
-
export declare function buildWorkspaceSyncV3WorkflowRepairPage(input: Omit<Parameters<typeof buildWorkspaceSyncV3CombinedRepairPage>[0], 'nestedCoverage' | 'workflowCoverage' | 'planningOrderCoverage'>): WorkspaceSyncV3CombinedRepairPage;
|
|
66
|
-
export declare function buildWorkspaceSyncV3PlanningOrderRepairPage(input: Omit<Parameters<typeof buildWorkspaceSyncV3CombinedRepairPage>[0], 'nestedCoverage' | 'workflowCoverage' | 'planningOrderCoverage'>): WorkspaceSyncV3CombinedRepairPage;
|
|
71
|
+
export declare function buildWorkspaceSyncV3NestedRepairPage(input: Omit<Parameters<typeof buildWorkspaceSyncV3CombinedRepairPage>[0], 'nestedCoverage' | 'workflowCoverage' | 'workflowTaskCoverCoverage' | 'planningOrderCoverage' | 'taskCoverCoverage'>): WorkspaceSyncV3CombinedRepairPage;
|
|
72
|
+
export declare function buildWorkspaceSyncV3WorkflowRepairPage(input: Omit<Parameters<typeof buildWorkspaceSyncV3CombinedRepairPage>[0], 'nestedCoverage' | 'workflowCoverage' | 'workflowTaskCoverCoverage' | 'planningOrderCoverage' | 'taskCoverCoverage'>): WorkspaceSyncV3CombinedRepairPage;
|
|
73
|
+
export declare function buildWorkspaceSyncV3PlanningOrderRepairPage(input: Omit<Parameters<typeof buildWorkspaceSyncV3CombinedRepairPage>[0], 'nestedCoverage' | 'workflowCoverage' | 'workflowTaskCoverCoverage' | 'planningOrderCoverage' | 'taskCoverCoverage'>): WorkspaceSyncV3CombinedRepairPage;
|
|
74
|
+
export declare function buildWorkspaceSyncV3TaskCoverRepairPage(input: Omit<Parameters<typeof buildWorkspaceSyncV3CombinedRepairPage>[0], 'nestedCoverage' | 'workflowCoverage' | 'workflowTaskCoverCoverage' | 'planningOrderCoverage' | 'taskCoverCoverage'>): WorkspaceSyncV3CombinedRepairPage;
|
|
75
|
+
export declare function buildWorkspaceSyncV3WorkflowTaskCoverRepairPage(input: Omit<Parameters<typeof buildWorkspaceSyncV3CombinedRepairPage>[0], 'nestedCoverage' | 'workflowCoverage' | 'workflowTaskCoverCoverage' | 'planningOrderCoverage' | 'taskCoverCoverage'>): WorkspaceSyncV3CombinedRepairPage;
|
|
@@ -1,11 +1,13 @@
|
|
|
1
1
|
import { createHmac, randomUUID, timingSafeEqual } from 'crypto';
|
|
2
2
|
import { canonicalWorkspaceSyncJson } from './canonicalWorkspaceSyncJson.js';
|
|
3
3
|
import { decodeCanonicalWorkspaceSyncBase64Url } from './workspaceSyncV3CursorEncoding.js';
|
|
4
|
-
import { prepareWorkspaceSyncV3CombinedRepairSnapshot, prepareWorkspaceSyncV3NestedRepairSnapshot, prepareWorkspaceSyncV3PlanningOrderRepairSnapshot, prepareWorkspaceSyncV3WorkflowRepairSnapshot, } from './workspaceSyncV3CombinedRepairBaseline.js';
|
|
4
|
+
import { prepareWorkspaceSyncV3CombinedRepairSnapshot, prepareWorkspaceSyncV3NestedRepairSnapshot, prepareWorkspaceSyncV3PlanningOrderRepairSnapshot, prepareWorkspaceSyncV3TaskCoverRepairSnapshot, prepareWorkspaceSyncV3WorkflowRepairSnapshot, prepareWorkspaceSyncV3WorkflowTaskCoverRepairSnapshot, } from './workspaceSyncV3CombinedRepairBaseline.js';
|
|
5
5
|
import { validateWorkspaceSyncV3CombinedFeedEntry, WORKSPACE_SYNC_V3_COMBINED_COVERAGE_PROFILE, } from './workspaceSyncV3CombinedCoverage.js';
|
|
6
6
|
import { validateWorkspaceSyncV3NestedCoverageFeedEntry, WORKSPACE_SYNC_V3_NESTED_COVERAGE_PROFILE, } from './workspaceSyncV3NestedCoverage.js';
|
|
7
7
|
import { validateWorkspaceSyncV3WorkflowCoverageFeedEntry, WORKSPACE_SYNC_V3_WORKFLOW_COVERAGE_PROFILE, } from './workspaceSyncV3WorkflowCoverage.js';
|
|
8
8
|
import { validateWorkspaceSyncV3PlanningOrderCoverageFeedEntry, WORKSPACE_SYNC_V3_PLANNING_ORDER_COVERAGE_PROFILE, } from './workspaceSyncV3PlanningOrderCoverage.js';
|
|
9
|
+
import { validateWorkspaceSyncV3TaskCoverCoverageFeedEntry, WORKSPACE_SYNC_V3_TASK_COVER_COVERAGE_PROFILE, } from './workspaceSyncV3TaskCoverCoverage.js';
|
|
10
|
+
import { validateWorkspaceSyncV3WorkflowTaskCoverCoverageFeedEntry, WORKSPACE_SYNC_V3_WORKFLOW_TASK_COVER_COVERAGE_PROFILE, } from './workspaceSyncV3WorkflowTaskCoverCoverage.js';
|
|
9
11
|
import { createWorkspaceSyncV3FeedResumeCursor, WorkspaceSyncV3FeedOperationTooLargeError, } from './workspaceSyncV3Feed.js';
|
|
10
12
|
import { findWorkspaceSyncV3FeedCursorVerificationKey, } from './workspaceSyncV3FeedCursorKeys.js';
|
|
11
13
|
import { WORKSPACE_SYNC_COMBINED_PROJECTION, WORKSPACE_SYNC_CONTRACT_VERSION, } from './syncDurabilityStore.js';
|
|
@@ -95,14 +97,24 @@ export function decodeWorkspaceSyncV3WorkflowRepairCursor(raw, keyring) {
|
|
|
95
97
|
export function decodeWorkspaceSyncV3PlanningOrderRepairCursor(raw, keyring) {
|
|
96
98
|
return decodeRepairCursor(raw, keyring, WORKSPACE_SYNC_V3_PLANNING_ORDER_COVERAGE_PROFILE);
|
|
97
99
|
}
|
|
100
|
+
export function decodeWorkspaceSyncV3TaskCoverRepairCursor(raw, keyring) {
|
|
101
|
+
return decodeRepairCursor(raw, keyring, WORKSPACE_SYNC_V3_TASK_COVER_COVERAGE_PROFILE);
|
|
102
|
+
}
|
|
103
|
+
export function decodeWorkspaceSyncV3WorkflowTaskCoverRepairCursor(raw, keyring) {
|
|
104
|
+
return decodeRepairCursor(raw, keyring, WORKSPACE_SYNC_V3_WORKFLOW_TASK_COVER_COVERAGE_PROFILE);
|
|
105
|
+
}
|
|
98
106
|
function repairProfile(coverage) {
|
|
99
|
-
return coverage === 'workflow'
|
|
100
|
-
?
|
|
101
|
-
: coverage === '
|
|
102
|
-
?
|
|
103
|
-
: coverage === '
|
|
104
|
-
?
|
|
105
|
-
:
|
|
107
|
+
return coverage === 'workflow-task-cover'
|
|
108
|
+
? WORKSPACE_SYNC_V3_WORKFLOW_TASK_COVER_COVERAGE_PROFILE
|
|
109
|
+
: coverage === 'workflow'
|
|
110
|
+
? WORKSPACE_SYNC_V3_WORKFLOW_COVERAGE_PROFILE
|
|
111
|
+
: coverage === 'task-cover'
|
|
112
|
+
? WORKSPACE_SYNC_V3_TASK_COVER_COVERAGE_PROFILE
|
|
113
|
+
: coverage === 'planning-order'
|
|
114
|
+
? WORKSPACE_SYNC_V3_PLANNING_ORDER_COVERAGE_PROFILE
|
|
115
|
+
: coverage === 'nested'
|
|
116
|
+
? WORKSPACE_SYNC_V3_NESTED_COVERAGE_PROFILE
|
|
117
|
+
: WORKSPACE_SYNC_V3_COMBINED_COVERAGE_PROFILE;
|
|
106
118
|
}
|
|
107
119
|
function containsCurrentEntityEventInventory(input) {
|
|
108
120
|
if (input.coverage === 'combined')
|
|
@@ -140,27 +152,70 @@ function containsCurrentEntityEventInventory(input) {
|
|
|
140
152
|
AND entry.domain = 'entity-event'
|
|
141
153
|
AND entry.entity_id = event.id
|
|
142
154
|
)
|
|
155
|
+
AND NOT EXISTS (
|
|
156
|
+
SELECT 1
|
|
157
|
+
FROM workspace_sync_journal journal
|
|
158
|
+
WHERE journal.tenant_id = event.tenant_id
|
|
159
|
+
AND journal.workspace_id = event.workspace_id
|
|
160
|
+
AND journal.domain = 'entity-event'
|
|
161
|
+
AND journal.entity_id = event.id
|
|
162
|
+
-- Later sequenced events are delivered after the immutable
|
|
163
|
+
-- repair boundary; only unsequenced legacy adoption makes the
|
|
164
|
+
-- snapshot incomplete and requires rematerialization.
|
|
165
|
+
AND journal.sequence > ?
|
|
166
|
+
)
|
|
143
167
|
LIMIT 1
|
|
144
|
-
`).get(input.tenantId, input.workspaceId, input.snapshotId);
|
|
168
|
+
`).get(input.tenantId, input.workspaceId, input.snapshotId, input.snapshotSequence);
|
|
145
169
|
return !missing;
|
|
146
170
|
}
|
|
147
|
-
|
|
171
|
+
export const WORKSPACE_SYNC_REPAIR_SNAPSHOT_CLEANUP_BATCH_SIZE = 500;
|
|
172
|
+
function cleanupExpiredBestEffort(core, tenantId, workspaceId, now, excludingSnapshotId) {
|
|
148
173
|
const db = core.getDatabaseAdapter();
|
|
149
174
|
const exclusion = excludingSnapshotId ? ' AND snapshot_id <> ?' : '';
|
|
150
175
|
const args = excludingSnapshotId
|
|
151
176
|
? [tenantId, workspaceId, now, excludingSnapshotId]
|
|
152
177
|
: [tenantId, workspaceId, now];
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
|
|
178
|
+
try {
|
|
179
|
+
db.transaction(() => {
|
|
180
|
+
const expired = db.prepare(`
|
|
181
|
+
SELECT snapshot_id
|
|
182
|
+
FROM workspace_sync_repair_snapshots
|
|
183
|
+
WHERE tenant_id = ? AND workspace_id = ? AND expires_at <= ?${exclusion}
|
|
184
|
+
ORDER BY expires_at ASC, snapshot_id ASC
|
|
185
|
+
LIMIT 1
|
|
186
|
+
`).get(...args);
|
|
187
|
+
const snapshotId = String(expired?.snapshot_id || '').trim();
|
|
188
|
+
if (!snapshotId)
|
|
189
|
+
return;
|
|
190
|
+
db.prepare(`
|
|
191
|
+
DELETE FROM workspace_sync_repair_snapshot_entries
|
|
192
|
+
WHERE tenant_id = ? AND workspace_id = ? AND snapshot_id = ?
|
|
193
|
+
AND entry_index IN (
|
|
194
|
+
SELECT entry_index
|
|
195
|
+
FROM workspace_sync_repair_snapshot_entries
|
|
196
|
+
WHERE tenant_id = ? AND workspace_id = ? AND snapshot_id = ?
|
|
197
|
+
ORDER BY entry_index ASC
|
|
198
|
+
LIMIT ?
|
|
199
|
+
)
|
|
200
|
+
`).run(tenantId, workspaceId, snapshotId, tenantId, workspaceId, snapshotId, WORKSPACE_SYNC_REPAIR_SNAPSHOT_CLEANUP_BATCH_SIZE);
|
|
201
|
+
db.prepare(`
|
|
202
|
+
DELETE FROM workspace_sync_repair_snapshots
|
|
203
|
+
WHERE tenant_id = ? AND workspace_id = ? AND snapshot_id = ? AND expires_at <= ?
|
|
204
|
+
AND NOT EXISTS (
|
|
205
|
+
SELECT 1 FROM workspace_sync_repair_snapshot_entries
|
|
206
|
+
WHERE tenant_id = ? AND workspace_id = ? AND snapshot_id = ?
|
|
207
|
+
)
|
|
208
|
+
`).run(tenantId, workspaceId, snapshotId, now, tenantId, workspaceId, snapshotId);
|
|
209
|
+
})();
|
|
210
|
+
}
|
|
211
|
+
catch (error) {
|
|
212
|
+
// Expired snapshot removal is opportunistic maintenance. A cleanup
|
|
213
|
+
// timeout must not invalidate an otherwise valid repair response.
|
|
214
|
+
console.warn('[Taskforce Sync Repair Cleanup Deferred]', JSON.stringify({
|
|
215
|
+
workspaceId,
|
|
216
|
+
error: String(error?.message || error),
|
|
217
|
+
}));
|
|
218
|
+
}
|
|
164
219
|
}
|
|
165
220
|
function persistMaterialization(input) {
|
|
166
221
|
const db = input.core.getDatabaseAdapter();
|
|
@@ -225,6 +280,7 @@ function readMetadata(input) {
|
|
|
225
280
|
tenantId: input.tenantId,
|
|
226
281
|
workspaceId: input.workspaceId,
|
|
227
282
|
snapshotId: input.cursor.snapshotId,
|
|
283
|
+
snapshotSequence: input.cursor.snapshotSequence,
|
|
228
284
|
coverage: input.coverage,
|
|
229
285
|
})) {
|
|
230
286
|
throw new WorkspaceSyncV3CombinedRepairSnapshotUnavailableError();
|
|
@@ -275,6 +331,7 @@ function readReusableMetadata(input) {
|
|
|
275
331
|
tenantId: input.tenantId,
|
|
276
332
|
workspaceId: input.workspaceId,
|
|
277
333
|
snapshotId: String(row.snapshot_id),
|
|
334
|
+
snapshotSequence: sequence(row.snapshot_sequence, 'Combined repair snapshot sequence'),
|
|
278
335
|
coverage: input.coverage,
|
|
279
336
|
}))
|
|
280
337
|
return null;
|
|
@@ -304,13 +361,17 @@ function mapEntry(row, coverage) {
|
|
|
304
361
|
payloadFingerprint: String(row.payload_fingerprint || ''), payload,
|
|
305
362
|
occurredAt: timestamp(row.occurred_at, 'Combined repair occurrence time'),
|
|
306
363
|
};
|
|
307
|
-
(coverage === 'workflow'
|
|
308
|
-
?
|
|
309
|
-
: coverage === '
|
|
310
|
-
?
|
|
311
|
-
: coverage === '
|
|
312
|
-
?
|
|
313
|
-
:
|
|
364
|
+
(coverage === 'workflow-task-cover'
|
|
365
|
+
? validateWorkspaceSyncV3WorkflowTaskCoverCoverageFeedEntry
|
|
366
|
+
: coverage === 'workflow'
|
|
367
|
+
? validateWorkspaceSyncV3WorkflowCoverageFeedEntry
|
|
368
|
+
: coverage === 'task-cover'
|
|
369
|
+
? validateWorkspaceSyncV3TaskCoverCoverageFeedEntry
|
|
370
|
+
: coverage === 'planning-order'
|
|
371
|
+
? validateWorkspaceSyncV3PlanningOrderCoverageFeedEntry
|
|
372
|
+
: coverage === 'nested'
|
|
373
|
+
? validateWorkspaceSyncV3NestedCoverageFeedEntry
|
|
374
|
+
: validateWorkspaceSyncV3CombinedFeedEntry)(entry);
|
|
314
375
|
return entry;
|
|
315
376
|
}
|
|
316
377
|
function finalizePage(input) {
|
|
@@ -367,24 +428,19 @@ export function buildWorkspaceSyncV3CombinedRepairPage(input) {
|
|
|
367
428
|
const pageSize = Math.max(1, Math.min(MAX_PAGE_SIZE, Math.floor(input.pageSize || DEFAULT_PAGE_SIZE)));
|
|
368
429
|
const maxResponseBytes = Math.max(1024, Math.min(8 * 1024 * 1024, Math.floor(input.maxResponseBytes || DEFAULT_MAX_RESPONSE_BYTES)));
|
|
369
430
|
const db = input.core.getDatabaseAdapter();
|
|
370
|
-
const coverage = input.
|
|
371
|
-
? 'workflow'
|
|
372
|
-
: input.
|
|
373
|
-
? '
|
|
374
|
-
: input.
|
|
375
|
-
? '
|
|
376
|
-
:
|
|
431
|
+
const coverage = input.workflowTaskCoverCoverage
|
|
432
|
+
? 'workflow-task-cover'
|
|
433
|
+
: input.workflowCoverage
|
|
434
|
+
? 'workflow'
|
|
435
|
+
: input.taskCoverCoverage
|
|
436
|
+
? 'task-cover'
|
|
437
|
+
: input.planningOrderCoverage
|
|
438
|
+
? 'planning-order'
|
|
439
|
+
: input.nestedCoverage
|
|
440
|
+
? 'nested'
|
|
441
|
+
: 'combined';
|
|
377
442
|
if (input.cursor && Date.parse(input.cursor.expiresAt) <= Date.parse(now)) {
|
|
378
|
-
|
|
379
|
-
db.prepare(`DELETE FROM workspace_sync_repair_snapshot_entries
|
|
380
|
-
WHERE tenant_id = ? AND workspace_id = ? AND snapshot_id = ? AND EXISTS (
|
|
381
|
-
SELECT 1 FROM workspace_sync_repair_snapshots
|
|
382
|
-
WHERE tenant_id = ? AND workspace_id = ? AND snapshot_id = ? AND expires_at <= ?
|
|
383
|
-
)`).run(tenantId, workspaceId, input.cursor.snapshotId, tenantId, workspaceId, input.cursor.snapshotId, now);
|
|
384
|
-
db.prepare(`DELETE FROM workspace_sync_repair_snapshots
|
|
385
|
-
WHERE tenant_id = ? AND workspace_id = ? AND snapshot_id = ? AND expires_at <= ?`)
|
|
386
|
-
.run(tenantId, workspaceId, input.cursor.snapshotId, now);
|
|
387
|
-
})();
|
|
443
|
+
cleanupExpiredBestEffort(input.core, tenantId, workspaceId, now);
|
|
388
444
|
throw new WorkspaceSyncV3CombinedRepairSnapshotUnavailableError();
|
|
389
445
|
}
|
|
390
446
|
let insertedBaselineEntities = 0;
|
|
@@ -393,17 +449,17 @@ export function buildWorkspaceSyncV3CombinedRepairPage(input) {
|
|
|
393
449
|
let metadata;
|
|
394
450
|
let nextIndex;
|
|
395
451
|
if (input.cursor) {
|
|
452
|
+
cleanupExpiredBestEffort(input.core, tenantId, workspaceId, now, input.cursor.snapshotId);
|
|
396
453
|
metadata = db.transaction(() => {
|
|
397
|
-
|
|
454
|
+
return readMetadata({
|
|
398
455
|
core: input.core, tenantId, workspaceId, cursor: input.cursor, now,
|
|
399
456
|
coverage,
|
|
400
457
|
});
|
|
401
|
-
cleanupExpired(input.core, tenantId, workspaceId, now, current.snapshotId);
|
|
402
|
-
return current;
|
|
403
458
|
})();
|
|
404
459
|
nextIndex = input.cursor.nextIndex;
|
|
405
460
|
}
|
|
406
461
|
else {
|
|
462
|
+
cleanupExpiredBestEffort(input.core, tenantId, workspaceId, now);
|
|
407
463
|
const materialized = db.transaction(() => {
|
|
408
464
|
// Serialize cursorless materialization and reuse decisions with
|
|
409
465
|
// durable writers and competing repair requests.
|
|
@@ -413,7 +469,6 @@ export function buildWorkspaceSyncV3CombinedRepairPage(input) {
|
|
|
413
469
|
ON CONFLICT (tenant_id, workspace_id) DO UPDATE SET updated_at = excluded.updated_at
|
|
414
470
|
RETURNING CAST(last_sequence AS TEXT) AS last_sequence
|
|
415
471
|
`).get(tenantId, workspaceId, now);
|
|
416
|
-
cleanupExpired(input.core, tenantId, workspaceId, now);
|
|
417
472
|
const reusable = readReusableMetadata({
|
|
418
473
|
core: input.core, tenantId, workspaceId, now,
|
|
419
474
|
coverage,
|
|
@@ -422,17 +477,23 @@ export function buildWorkspaceSyncV3CombinedRepairPage(input) {
|
|
|
422
477
|
return { metadata: reusable, reused: true,
|
|
423
478
|
insertedBaselineEntities: 0, insertedBaselineJournalRows: 0 };
|
|
424
479
|
const repairStartedAt = Date.now();
|
|
425
|
-
const prepared = coverage === 'workflow'
|
|
426
|
-
?
|
|
480
|
+
const prepared = coverage === 'workflow-task-cover'
|
|
481
|
+
? prepareWorkspaceSyncV3WorkflowTaskCoverRepairSnapshot({ core: input.core, workspaceId, now,
|
|
427
482
|
coveredLegacyWritesFenced: input.coveredLegacyWritesFenced })
|
|
428
|
-
: coverage === '
|
|
429
|
-
?
|
|
483
|
+
: coverage === 'workflow'
|
|
484
|
+
? prepareWorkspaceSyncV3WorkflowRepairSnapshot({ core: input.core, workspaceId, now,
|
|
430
485
|
coveredLegacyWritesFenced: input.coveredLegacyWritesFenced })
|
|
431
|
-
: coverage === '
|
|
432
|
-
?
|
|
486
|
+
: coverage === 'planning-order'
|
|
487
|
+
? prepareWorkspaceSyncV3PlanningOrderRepairSnapshot({ core: input.core, workspaceId, now,
|
|
433
488
|
coveredLegacyWritesFenced: input.coveredLegacyWritesFenced })
|
|
434
|
-
:
|
|
435
|
-
|
|
489
|
+
: coverage === 'task-cover'
|
|
490
|
+
? prepareWorkspaceSyncV3TaskCoverRepairSnapshot({ core: input.core, workspaceId, now,
|
|
491
|
+
coveredLegacyWritesFenced: input.coveredLegacyWritesFenced })
|
|
492
|
+
: coverage === 'nested'
|
|
493
|
+
? prepareWorkspaceSyncV3NestedRepairSnapshot({ core: input.core, workspaceId, now,
|
|
494
|
+
coveredLegacyWritesFenced: input.coveredLegacyWritesFenced })
|
|
495
|
+
: prepareWorkspaceSyncV3CombinedRepairSnapshot({ core: input.core, workspaceId, now,
|
|
496
|
+
coveredLegacyWritesFenced: input.coveredLegacyWritesFenced });
|
|
436
497
|
// Production expiry is sampled at the end of persistence, after
|
|
437
498
|
// every immutable payload row has committed in the same lock.
|
|
438
499
|
const materializationStartedAt = input.now
|
|
@@ -525,3 +586,9 @@ export function buildWorkspaceSyncV3WorkflowRepairPage(input) {
|
|
|
525
586
|
export function buildWorkspaceSyncV3PlanningOrderRepairPage(input) {
|
|
526
587
|
return buildWorkspaceSyncV3CombinedRepairPage({ ...input, planningOrderCoverage: true });
|
|
527
588
|
}
|
|
589
|
+
export function buildWorkspaceSyncV3TaskCoverRepairPage(input) {
|
|
590
|
+
return buildWorkspaceSyncV3CombinedRepairPage({ ...input, taskCoverCoverage: true });
|
|
591
|
+
}
|
|
592
|
+
export function buildWorkspaceSyncV3WorkflowTaskCoverRepairPage(input) {
|
|
593
|
+
return buildWorkspaceSyncV3CombinedRepairPage({ ...input, workflowTaskCoverCoverage: true });
|
|
594
|
+
}
|
|
@@ -31,8 +31,12 @@ export declare class WorkspaceSyncV3CombinedRepairBaselineRequiredError extends
|
|
|
31
31
|
export declare function listWorkspaceSyncV3CombinedRepairCandidates(core: TaskforceCore, workspaceId: string): WorkspaceSyncV3CombinedRepairCandidate[];
|
|
32
32
|
/** Candidate v4 inventory. The coverage-v3 inventory above intentionally remains unchanged. */
|
|
33
33
|
export declare function listWorkspaceSyncV3NestedRepairCandidates(core: TaskforceCore, workspaceId: string): WorkspaceSyncV3CombinedRepairCandidate[];
|
|
34
|
+
/** Candidate v7 inventory. It is the v4 family with attachment-link schema v2. */
|
|
35
|
+
export declare function listWorkspaceSyncV3TaskCoverRepairCandidates(core: TaskforceCore, workspaceId: string): WorkspaceSyncV3CombinedRepairCandidate[];
|
|
34
36
|
/** Candidate v5 inventory. Coverage-v3/v4 inventories intentionally remain unchanged. */
|
|
35
37
|
export declare function listWorkspaceSyncV3WorkflowRepairCandidates(core: TaskforceCore, workspaceId: string): WorkspaceSyncV3CombinedRepairCandidate[];
|
|
38
|
+
/** Candidate v8 inventory. It composes v7 task-cover state with workflow runtime. */
|
|
39
|
+
export declare function listWorkspaceSyncV3WorkflowTaskCoverRepairCandidates(core: TaskforceCore, workspaceId: string): WorkspaceSyncV3CombinedRepairCandidate[];
|
|
36
40
|
/** Candidate v6 inventory. Workflow v5 remains an independent dark contract. */
|
|
37
41
|
export declare function listWorkspaceSyncV3PlanningOrderRepairCandidates(core: TaskforceCore, workspaceId: string): WorkspaceSyncV3CombinedRepairCandidate[];
|
|
38
42
|
export declare function buildWorkspaceSyncV3CombinedRepairSnapshot(input: {
|
|
@@ -49,7 +53,9 @@ export declare function buildWorkspaceSyncV3CombinedRepairSnapshotFromLockedCand
|
|
|
49
53
|
inventory: WorkspaceSyncV3CombinedRepairCandidate[];
|
|
50
54
|
nestedCoverage?: boolean;
|
|
51
55
|
workflowCoverage?: boolean;
|
|
56
|
+
workflowTaskCoverCoverage?: boolean;
|
|
52
57
|
planningOrderCoverage?: boolean;
|
|
58
|
+
taskCoverCoverage?: boolean;
|
|
53
59
|
}): {
|
|
54
60
|
snapshotSequence: string;
|
|
55
61
|
entries: WorkspaceSyncV3FeedEntry[];
|
|
@@ -75,4 +81,18 @@ export declare function buildWorkspaceSyncV3PlanningOrderRepairSnapshot(input: {
|
|
|
75
81
|
snapshotSequence: string;
|
|
76
82
|
entries: WorkspaceSyncV3FeedEntry[];
|
|
77
83
|
};
|
|
84
|
+
export declare function buildWorkspaceSyncV3TaskCoverRepairSnapshot(input: {
|
|
85
|
+
core: TaskforceCore;
|
|
86
|
+
workspaceId: string;
|
|
87
|
+
}): {
|
|
88
|
+
snapshotSequence: string;
|
|
89
|
+
entries: WorkspaceSyncV3FeedEntry[];
|
|
90
|
+
};
|
|
91
|
+
export declare function buildWorkspaceSyncV3WorkflowTaskCoverRepairSnapshot(input: {
|
|
92
|
+
core: TaskforceCore;
|
|
93
|
+
workspaceId: string;
|
|
94
|
+
}): {
|
|
95
|
+
snapshotSequence: string;
|
|
96
|
+
entries: WorkspaceSyncV3FeedEntry[];
|
|
97
|
+
};
|
|
78
98
|
export {};
|
|
@@ -8,12 +8,14 @@ import { serializeTaskRootForSync, projectWorkspaceSyncV3TaskRootJournalRow } fr
|
|
|
8
8
|
import { projectWorkspaceSyncV3TaxonomyJournalRow } from './workspaceSyncV3TaxonomyFeedProjection.js';
|
|
9
9
|
import { projectWorkspaceSyncV3WorkstreamJournalRow } from './workspaceSyncV3WorkstreamProjection.js';
|
|
10
10
|
import { buildWorkspaceSyncV3NestedTaskRepairCandidates, } from './workspaceSyncV3NestedTaskRepairSnapshot.js';
|
|
11
|
-
import { projectWorkspaceSyncV3NestedTaskJournalRow } from './workspaceSyncV3NestedTaskProjection.js';
|
|
11
|
+
import { projectWorkspaceSyncV3NestedTaskJournalRow, projectWorkspaceSyncV3NestedTaskV2JournalRow, } from './workspaceSyncV3NestedTaskProjection.js';
|
|
12
12
|
import { validateWorkspaceSyncV3NestedCoverageFeedEntry, WORKSPACE_SYNC_V3_NESTED_COVERAGE_PROFILE, } from './workspaceSyncV3NestedCoverage.js';
|
|
13
13
|
import { serializeWorkflowExecutionEventSyncPayload, serializeWorkflowExecutionRootSyncPayload, serializeWorkflowPublishedDefinitionSyncPayload, } from './workflowRuntimeSync.js';
|
|
14
14
|
import { projectWorkspaceSyncV3WorkflowRuntimeJournalRow, } from './workspaceSyncV3WorkflowRuntimeProjection.js';
|
|
15
15
|
import { validateWorkspaceSyncV3WorkflowCoverageFeedEntry, WORKSPACE_SYNC_V3_WORKFLOW_COVERAGE_PROFILE, } from './workspaceSyncV3WorkflowCoverage.js';
|
|
16
16
|
import { validateWorkspaceSyncV3PlanningOrderCoverageFeedEntry, WORKSPACE_SYNC_V3_PLANNING_ORDER_COVERAGE_PROFILE, } from './workspaceSyncV3PlanningOrderCoverage.js';
|
|
17
|
+
import { validateWorkspaceSyncV3TaskCoverCoverageFeedEntry, WORKSPACE_SYNC_V3_TASK_COVER_COVERAGE_PROFILE, } from './workspaceSyncV3TaskCoverCoverage.js';
|
|
18
|
+
import { validateWorkspaceSyncV3WorkflowTaskCoverCoverageFeedEntry, WORKSPACE_SYNC_V3_WORKFLOW_TASK_COVER_COVERAGE_PROFILE, } from './workspaceSyncV3WorkflowTaskCoverCoverage.js';
|
|
17
19
|
import { projectWorkspaceSyncV3WorkstreamTaskOrderJournalRow } from './workspaceSyncV3WorkstreamTaskOrderProjection.js';
|
|
18
20
|
import { serializeWorkstreamTaskOrderForSync } from './workstreamTaskOrderSync.js';
|
|
19
21
|
import { serializeTaxonomyStateForSync } from './taxonomySyncPayload.js';
|
|
@@ -28,6 +30,10 @@ const WORKFLOW_PROJECTION_RANK = new Map(WORKSPACE_SYNC_V3_WORKFLOW_COVERAGE_PRO
|
|
|
28
30
|
.map((projection, index) => [projection.projectionId, index]));
|
|
29
31
|
const PLANNING_ORDER_PROJECTION_RANK = new Map(WORKSPACE_SYNC_V3_PLANNING_ORDER_COVERAGE_PROFILE.projections
|
|
30
32
|
.map((projection, index) => [projection.projectionId, index]));
|
|
33
|
+
const TASK_COVER_PROJECTION_RANK = new Map(WORKSPACE_SYNC_V3_TASK_COVER_COVERAGE_PROFILE.projections
|
|
34
|
+
.map((projection, index) => [projection.projectionId, index]));
|
|
35
|
+
const WORKFLOW_TASK_COVER_PROJECTION_RANK = new Map(WORKSPACE_SYNC_V3_WORKFLOW_TASK_COVER_COVERAGE_PROFILE.projections
|
|
36
|
+
.map((projection, index) => [projection.projectionId, index]));
|
|
31
37
|
export class WorkspaceSyncV3CombinedRepairBaselineRequiredError extends Error {
|
|
32
38
|
missing;
|
|
33
39
|
code = 'WORKSPACE_SYNC_V3_COMBINED_REPAIR_BASELINE_REQUIRED';
|
|
@@ -40,13 +46,17 @@ function compareCodeUnits(left, right) {
|
|
|
40
46
|
return left < right ? -1 : left > right ? 1 : 0;
|
|
41
47
|
}
|
|
42
48
|
function projectionRank(entry, coverage) {
|
|
43
|
-
const ranks = coverage === 'workflow'
|
|
44
|
-
?
|
|
45
|
-
: coverage === '
|
|
46
|
-
?
|
|
47
|
-
: coverage === '
|
|
48
|
-
?
|
|
49
|
-
:
|
|
49
|
+
const ranks = coverage === 'workflow-task-cover'
|
|
50
|
+
? WORKFLOW_TASK_COVER_PROJECTION_RANK
|
|
51
|
+
: coverage === 'workflow'
|
|
52
|
+
? WORKFLOW_PROJECTION_RANK
|
|
53
|
+
: coverage === 'task-cover'
|
|
54
|
+
? TASK_COVER_PROJECTION_RANK
|
|
55
|
+
: coverage === 'planning-order'
|
|
56
|
+
? PLANNING_ORDER_PROJECTION_RANK
|
|
57
|
+
: coverage === 'nested'
|
|
58
|
+
? NESTED_PROJECTION_RANK
|
|
59
|
+
: COMBINED_PROJECTION_RANK;
|
|
50
60
|
const rank = ranks.get(entry.projection);
|
|
51
61
|
if (rank === undefined)
|
|
52
62
|
throw new Error(`Unsupported combined repair projection: ${entry.projection}.`);
|
|
@@ -151,8 +161,7 @@ function listLiveEvents(core, workspaceId, liveEntityIds) {
|
|
|
151
161
|
cursor = { watermark: last.createdAt, id: eventCursorId(last) };
|
|
152
162
|
}
|
|
153
163
|
}
|
|
154
|
-
|
|
155
|
-
export function listWorkspaceSyncV3NestedRepairCandidates(core, workspaceId) {
|
|
164
|
+
function listNestedRepairCandidates(core, workspaceId, attachmentProjection) {
|
|
156
165
|
const startedAt = Date.now();
|
|
157
166
|
const tasks = listTasks(core, workspaceId);
|
|
158
167
|
const tasksCompletedAt = Date.now();
|
|
@@ -185,6 +194,7 @@ export function listWorkspaceSyncV3NestedRepairCandidates(core, workspaceId) {
|
|
|
185
194
|
tasks,
|
|
186
195
|
events,
|
|
187
196
|
attachmentLinksByTaskId,
|
|
197
|
+
attachmentProjection,
|
|
188
198
|
}),
|
|
189
199
|
];
|
|
190
200
|
const completedAt = Date.now();
|
|
@@ -210,8 +220,15 @@ export function listWorkspaceSyncV3NestedRepairCandidates(core, workspaceId) {
|
|
|
210
220
|
}
|
|
211
221
|
return candidates;
|
|
212
222
|
}
|
|
213
|
-
/** Candidate
|
|
214
|
-
export function
|
|
223
|
+
/** Candidate v4 inventory. The coverage-v3 inventory above intentionally remains unchanged. */
|
|
224
|
+
export function listWorkspaceSyncV3NestedRepairCandidates(core, workspaceId) {
|
|
225
|
+
return listNestedRepairCandidates(core, workspaceId, 'task-attachment-links/full-v1');
|
|
226
|
+
}
|
|
227
|
+
/** Candidate v7 inventory. It is the v4 family with attachment-link schema v2. */
|
|
228
|
+
export function listWorkspaceSyncV3TaskCoverRepairCandidates(core, workspaceId) {
|
|
229
|
+
return listNestedRepairCandidates(core, workspaceId, 'task-attachment-links/full-v2');
|
|
230
|
+
}
|
|
231
|
+
function listWorkflowRuntimeRepairCandidates(core, workspaceId) {
|
|
215
232
|
const workflowStore = new WorkflowStore(core.getDatabaseAdapter(), core.getTenantId());
|
|
216
233
|
const executions = workflowStore.listExecutions(workspaceId).map((execution) => {
|
|
217
234
|
const projected = workflowStore.getProjectedExecution(workspaceId, execution.id);
|
|
@@ -252,12 +269,25 @@ export function listWorkspaceSyncV3WorkflowRepairCandidates(core, workspaceId) {
|
|
|
252
269
|
};
|
|
253
270
|
});
|
|
254
271
|
return [
|
|
255
|
-
...listWorkspaceSyncV3NestedRepairCandidates(core, workspaceId),
|
|
256
272
|
...definitions.values(),
|
|
257
273
|
...executionCandidates,
|
|
258
274
|
...events,
|
|
259
275
|
];
|
|
260
276
|
}
|
|
277
|
+
/** Candidate v5 inventory. Coverage-v3/v4 inventories intentionally remain unchanged. */
|
|
278
|
+
export function listWorkspaceSyncV3WorkflowRepairCandidates(core, workspaceId) {
|
|
279
|
+
return [
|
|
280
|
+
...listWorkspaceSyncV3NestedRepairCandidates(core, workspaceId),
|
|
281
|
+
...listWorkflowRuntimeRepairCandidates(core, workspaceId),
|
|
282
|
+
];
|
|
283
|
+
}
|
|
284
|
+
/** Candidate v8 inventory. It composes v7 task-cover state with workflow runtime. */
|
|
285
|
+
export function listWorkspaceSyncV3WorkflowTaskCoverRepairCandidates(core, workspaceId) {
|
|
286
|
+
return [
|
|
287
|
+
...listWorkspaceSyncV3TaskCoverRepairCandidates(core, workspaceId),
|
|
288
|
+
...listWorkflowRuntimeRepairCandidates(core, workspaceId),
|
|
289
|
+
];
|
|
290
|
+
}
|
|
261
291
|
/** Candidate v6 inventory. Workflow v5 remains an independent dark contract. */
|
|
262
292
|
export function listWorkspaceSyncV3PlanningOrderRepairCandidates(core, workspaceId) {
|
|
263
293
|
const nested = listWorkspaceSyncV3NestedRepairCandidates(core, workspaceId);
|
|
@@ -380,7 +410,7 @@ function taskEntry(candidate, row, priorFullRow) {
|
|
|
380
410
|
return { ...projected, mutationKind, payload: candidate.payload,
|
|
381
411
|
payloadFingerprint: fingerprintWorkspaceSyncPayload(candidate.payload) };
|
|
382
412
|
}
|
|
383
|
-
function entry(candidate, row, taskFullProvenance) {
|
|
413
|
+
function entry(candidate, row, taskFullProvenance, taskCoverCoverage = false) {
|
|
384
414
|
if (candidate.domain === 'workstream-task-order') {
|
|
385
415
|
const projected = projectWorkspaceSyncV3WorkstreamTaskOrderJournalRow(row);
|
|
386
416
|
if (!projected
|
|
@@ -401,7 +431,9 @@ function entry(candidate, row, taskFullProvenance) {
|
|
|
401
431
|
}
|
|
402
432
|
if (candidate.domain === 'task-comments' || candidate.domain === 'task-checklist'
|
|
403
433
|
|| candidate.domain === 'task-attachment-links' || candidate.domain === 'entity-event') {
|
|
404
|
-
const projected =
|
|
434
|
+
const projected = taskCoverCoverage && candidate.domain === 'task-attachment-links'
|
|
435
|
+
? projectWorkspaceSyncV3NestedTaskV2JournalRow(row)
|
|
436
|
+
: projectWorkspaceSyncV3NestedTaskJournalRow(row);
|
|
405
437
|
if (!projected) {
|
|
406
438
|
throw new Error(`${candidate.domain} repair revision does not match canonical state: ${candidate.entityId}.`);
|
|
407
439
|
}
|
|
@@ -475,22 +507,30 @@ export function buildWorkspaceSyncV3CombinedRepairSnapshotFromLockedCandidates(i
|
|
|
475
507
|
.map((candidate) => candidate.entityId);
|
|
476
508
|
const taskFullProvenance = readTaskFullProvenanceRows({ db, tenantId, workspaceId, taskIds: remappedTaskIds });
|
|
477
509
|
const provenanceCompletedAt = Date.now();
|
|
478
|
-
const entries = inventory.map((candidate) => entry(candidate, rows.get(`${candidate.domain}\0${candidate.entityId}`), taskFullProvenance));
|
|
510
|
+
const entries = inventory.map((candidate) => entry(candidate, rows.get(`${candidate.domain}\0${candidate.entityId}`), taskFullProvenance, input.taskCoverCoverage === true || input.workflowTaskCoverCoverage === true));
|
|
479
511
|
const entriesCompletedAt = Date.now();
|
|
480
|
-
const coverage = input.
|
|
481
|
-
? 'workflow'
|
|
482
|
-
: input.
|
|
483
|
-
? '
|
|
484
|
-
: input.
|
|
485
|
-
? '
|
|
486
|
-
:
|
|
487
|
-
|
|
488
|
-
|
|
489
|
-
|
|
490
|
-
|
|
491
|
-
|
|
492
|
-
|
|
493
|
-
|
|
512
|
+
const coverage = input.workflowTaskCoverCoverage
|
|
513
|
+
? 'workflow-task-cover'
|
|
514
|
+
: input.workflowCoverage
|
|
515
|
+
? 'workflow'
|
|
516
|
+
: input.taskCoverCoverage
|
|
517
|
+
? 'task-cover'
|
|
518
|
+
: input.planningOrderCoverage
|
|
519
|
+
? 'planning-order'
|
|
520
|
+
: input.nestedCoverage
|
|
521
|
+
? 'nested'
|
|
522
|
+
: 'combined';
|
|
523
|
+
entries.forEach(coverage === 'workflow-task-cover'
|
|
524
|
+
? validateWorkspaceSyncV3WorkflowTaskCoverCoverageFeedEntry
|
|
525
|
+
: coverage === 'workflow'
|
|
526
|
+
? validateWorkspaceSyncV3WorkflowCoverageFeedEntry
|
|
527
|
+
: coverage === 'task-cover'
|
|
528
|
+
? validateWorkspaceSyncV3TaskCoverCoverageFeedEntry
|
|
529
|
+
: coverage === 'planning-order'
|
|
530
|
+
? validateWorkspaceSyncV3PlanningOrderCoverageFeedEntry
|
|
531
|
+
: coverage === 'nested'
|
|
532
|
+
? validateWorkspaceSyncV3NestedCoverageFeedEntry
|
|
533
|
+
: validateWorkspaceSyncV3CombinedFeedEntry);
|
|
494
534
|
const validationCompletedAt = Date.now();
|
|
495
535
|
if (entries.some((candidate) => BigInt(candidate.sequence) > BigInt(snapshotSequence))) {
|
|
496
536
|
throw new Error('Combined repair entry exceeds the locked snapshot sequence.');
|
|
@@ -564,3 +604,39 @@ export function buildWorkspaceSyncV3PlanningOrderRepairSnapshot(input) {
|
|
|
564
604
|
});
|
|
565
605
|
})();
|
|
566
606
|
}
|
|
607
|
+
export function buildWorkspaceSyncV3TaskCoverRepairSnapshot(input) {
|
|
608
|
+
const workspaceId = String(input.workspaceId || '').trim();
|
|
609
|
+
if (!workspaceId)
|
|
610
|
+
throw new Error('Workspace id is required.');
|
|
611
|
+
const tenantId = input.core.getTenantId();
|
|
612
|
+
const db = input.core.getDatabaseAdapter();
|
|
613
|
+
return db.transaction(() => {
|
|
614
|
+
const snapshotSequence = lockAndReadHighWatermark(db, tenantId, workspaceId);
|
|
615
|
+
const inventory = listWorkspaceSyncV3TaskCoverRepairCandidates(input.core, workspaceId);
|
|
616
|
+
return buildWorkspaceSyncV3CombinedRepairSnapshotFromLockedCandidates({
|
|
617
|
+
core: input.core,
|
|
618
|
+
workspaceId,
|
|
619
|
+
snapshotSequence,
|
|
620
|
+
inventory,
|
|
621
|
+
taskCoverCoverage: true,
|
|
622
|
+
});
|
|
623
|
+
})();
|
|
624
|
+
}
|
|
625
|
+
export function buildWorkspaceSyncV3WorkflowTaskCoverRepairSnapshot(input) {
|
|
626
|
+
const workspaceId = String(input.workspaceId || '').trim();
|
|
627
|
+
if (!workspaceId)
|
|
628
|
+
throw new Error('Workspace id is required.');
|
|
629
|
+
const tenantId = input.core.getTenantId();
|
|
630
|
+
const db = input.core.getDatabaseAdapter();
|
|
631
|
+
return db.transaction(() => {
|
|
632
|
+
const snapshotSequence = lockAndReadHighWatermark(db, tenantId, workspaceId);
|
|
633
|
+
const inventory = listWorkspaceSyncV3WorkflowTaskCoverRepairCandidates(input.core, workspaceId);
|
|
634
|
+
return buildWorkspaceSyncV3CombinedRepairSnapshotFromLockedCandidates({
|
|
635
|
+
core: input.core,
|
|
636
|
+
workspaceId,
|
|
637
|
+
snapshotSequence,
|
|
638
|
+
inventory,
|
|
639
|
+
workflowTaskCoverCoverage: true,
|
|
640
|
+
});
|
|
641
|
+
})();
|
|
642
|
+
}
|
|
@@ -2,6 +2,8 @@ import type { WorkspaceSyncV2ProjectionExclusion } from './workspaceSyncV2Projec
|
|
|
2
2
|
import { WORKSPACE_SYNC_V3_NESTED_COVERAGE_SELECTOR } from './workspaceSyncV3NestedWireContract.js';
|
|
3
3
|
import { WORKSPACE_SYNC_V3_WORKFLOW_COVERAGE_SELECTOR } from './workspaceSyncV3WorkflowWireContract.js';
|
|
4
4
|
import { WORKSPACE_SYNC_V3_PLANNING_ORDER_COVERAGE_SELECTOR } from './workspaceSyncV3PlanningOrderWireContract.js';
|
|
5
|
+
import { WORKSPACE_SYNC_V3_TASK_COVER_COVERAGE_SELECTOR } from './workspaceSyncV3TaskCoverWireContract.js';
|
|
6
|
+
import { WORKSPACE_SYNC_V3_WORKFLOW_TASK_COVER_COVERAGE_SELECTOR } from './workspaceSyncV3WorkflowTaskCoverWireContract.js';
|
|
5
7
|
export declare const WORKSPACE_SYNC_V3_COMBINED_COVERAGE_SELECTOR: Readonly<{
|
|
6
8
|
coverageProfileId: "task-planning-metadata";
|
|
7
9
|
coverageVersion: 3;
|
|
@@ -9,13 +11,14 @@ export declare const WORKSPACE_SYNC_V3_COMBINED_COVERAGE_SELECTOR: Readonly<{
|
|
|
9
11
|
}>;
|
|
10
12
|
export declare const WORKSPACE_SYNC_V3_COMBINED_CAPABILITY_VERSION: 1;
|
|
11
13
|
export declare const WORKSPACE_SYNC_V3_COMBINED_EXCLUDED_V2_PROJECTIONS: readonly ["task/root-v1", "task-relationship/full-v1", "taxonomy/full-v1", "initiative/full-v1", "workstream/full-v1"];
|
|
12
|
-
export type WorkspaceSyncV3CombinedCoverageSelector = typeof WORKSPACE_SYNC_V3_COMBINED_COVERAGE_SELECTOR | typeof WORKSPACE_SYNC_V3_NESTED_COVERAGE_SELECTOR | typeof WORKSPACE_SYNC_V3_WORKFLOW_COVERAGE_SELECTOR | typeof WORKSPACE_SYNC_V3_PLANNING_ORDER_COVERAGE_SELECTOR;
|
|
14
|
+
export type WorkspaceSyncV3CombinedCoverageSelector = typeof WORKSPACE_SYNC_V3_COMBINED_COVERAGE_SELECTOR | typeof WORKSPACE_SYNC_V3_NESTED_COVERAGE_SELECTOR | typeof WORKSPACE_SYNC_V3_WORKFLOW_COVERAGE_SELECTOR | typeof WORKSPACE_SYNC_V3_PLANNING_ORDER_COVERAGE_SELECTOR | typeof WORKSPACE_SYNC_V3_TASK_COVER_COVERAGE_SELECTOR | typeof WORKSPACE_SYNC_V3_WORKFLOW_TASK_COVER_COVERAGE_SELECTOR;
|
|
13
15
|
export interface WorkspaceSyncV3CombinedWireContract {
|
|
14
16
|
coverage: WorkspaceSyncV3CombinedCoverageSelector;
|
|
15
17
|
excludedProjections: readonly WorkspaceSyncV2ProjectionExclusion[];
|
|
16
18
|
nestedWriterPrerequisitesRequired: boolean;
|
|
17
19
|
workflowWriterPrerequisitesRequired: boolean;
|
|
18
20
|
planningOrderWriterPrerequisitesRequired: boolean;
|
|
21
|
+
taskCoverProjectionRequired: boolean;
|
|
19
22
|
}
|
|
20
23
|
export declare function resolveWorkspaceSyncV3CombinedWireContract(input: {
|
|
21
24
|
coverageProfileId: unknown;
|