@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
|
@@ -1,8 +1,9 @@
|
|
|
1
|
-
import { serializeWorkspaceSyncV3EntityEventPayload, serializeWorkspaceSyncV3TaskChecklistPayload, serializeWorkspaceSyncV3TaskCommentsPayload, validateWorkspaceSyncV3TaskAttachmentLinksPayload, } from './workspaceSyncV3NestedTaskCodecs.js';
|
|
1
|
+
import { serializeWorkspaceSyncV3EntityEventPayload, serializeWorkspaceSyncV3TaskChecklistPayload, serializeWorkspaceSyncV3TaskCommentsPayload, validateWorkspaceSyncV3TaskAttachmentLinksPayload, serializeWorkspaceSyncV3TaskAttachmentLinksV2Payload, } from './workspaceSyncV3NestedTaskCodecs.js';
|
|
2
2
|
const rank = new Map([
|
|
3
3
|
['task-comments/full-v1', 0],
|
|
4
4
|
['task-checklist/full-v1', 1],
|
|
5
5
|
['task-attachment-links/full-v1', 2],
|
|
6
|
+
['task-attachment-links/full-v2', 2],
|
|
6
7
|
['entity-event/full-v1', 3],
|
|
7
8
|
]);
|
|
8
9
|
function compareCodeUnits(left, right) {
|
|
@@ -19,6 +20,7 @@ export function buildWorkspaceSyncV3NestedTaskRepairCandidates(input) {
|
|
|
19
20
|
if (!links) {
|
|
20
21
|
throw new Error(`Task attachment-link repair source is missing for ${task.id}.`);
|
|
21
22
|
}
|
|
23
|
+
const attachmentProjection = input.attachmentProjection || 'task-attachment-links/full-v1';
|
|
22
24
|
candidates.push({
|
|
23
25
|
projection: 'task-comments/full-v1', domain: 'task-comments', entityId: task.id, mutationKind: 'replace',
|
|
24
26
|
payload: serializeWorkspaceSyncV3TaskCommentsPayload({ taskId: task.id, comments: task.comments || [] }),
|
|
@@ -26,8 +28,14 @@ export function buildWorkspaceSyncV3NestedTaskRepairCandidates(input) {
|
|
|
26
28
|
projection: 'task-checklist/full-v1', domain: 'task-checklist', entityId: task.id, mutationKind: 'replace',
|
|
27
29
|
payload: serializeWorkspaceSyncV3TaskChecklistPayload({ taskId: task.id, items: task.checklistItems || [] }),
|
|
28
30
|
}, {
|
|
29
|
-
projection:
|
|
30
|
-
payload:
|
|
31
|
+
projection: attachmentProjection, domain: 'task-attachment-links', entityId: task.id, mutationKind: 'replace',
|
|
32
|
+
payload: attachmentProjection === 'task-attachment-links/full-v2'
|
|
33
|
+
? serializeWorkspaceSyncV3TaskAttachmentLinksV2Payload({
|
|
34
|
+
taskId: task.id,
|
|
35
|
+
links,
|
|
36
|
+
cardCoverAssetId: task.cardCoverAssetId ?? null,
|
|
37
|
+
})
|
|
38
|
+
: validateWorkspaceSyncV3TaskAttachmentLinksPayload({ taskId: task.id, links }),
|
|
31
39
|
});
|
|
32
40
|
}
|
|
33
41
|
for (const event of input.events) {
|
|
@@ -11,6 +11,7 @@ import type { WorkflowRuntimeMutationCommand } from './workflowRuntimeSync.js';
|
|
|
11
11
|
import type { WorkspaceSyncV3OriginActor } from './workspaceSyncV3OriginActor.js';
|
|
12
12
|
import type { WorkspaceSyncV3TaskCommentReconcileProvenance } from './taskCommentReconcileProvenance.js';
|
|
13
13
|
import type { WorkspaceSyncEntityEventSnapshot } from '../workspaceSyncModel.js';
|
|
14
|
+
import type { TaskChecklistItemUpdateIntent } from './taskChecklistMutationService.js';
|
|
14
15
|
export type { WorkspaceSyncV3OriginActor } from './workspaceSyncV3OriginActor.js';
|
|
15
16
|
type WorkspaceSyncV3OperationEnvelopeBase<TOperation> = {
|
|
16
17
|
contractVersion: 3;
|
|
@@ -30,6 +31,7 @@ type TaskOperationBase<TMutationKind extends string, TPayload> = {
|
|
|
30
31
|
export type WorkspaceSyncV3TaskMetadataEnvelope = WorkspaceSyncV3OperationEnvelopeBase<TaskOperationBase<'metadata-update', {
|
|
31
32
|
patch: Partial<TaskItem>;
|
|
32
33
|
saveSource?: 'manual' | 'autosave';
|
|
34
|
+
expectedDetailRevision?: string;
|
|
33
35
|
originActor?: WorkspaceSyncV3OriginActor;
|
|
34
36
|
}>>;
|
|
35
37
|
export type WorkspaceSyncV3TaskCreateEnvelope = WorkspaceSyncV3OperationEnvelopeBase<TaskOperationBase<'create', {
|
|
@@ -74,6 +76,7 @@ export type WorkspaceSyncV3TaskWorkflowEnvelope = WorkspaceSyncV3OperationEnvelo
|
|
|
74
76
|
export type WorkspaceSyncV3TaskStatusEnvelope = WorkspaceSyncV3OperationEnvelopeBase<TaskOperationBase<'set-status', DurableTaskStatusMutationPayload & {
|
|
75
77
|
workflowAssignment?: WorkflowAssignmentSyncRecord;
|
|
76
78
|
originActor?: WorkspaceSyncV3OriginActor;
|
|
79
|
+
expectedDetailRevision?: string;
|
|
77
80
|
}>>;
|
|
78
81
|
export type WorkspaceSyncV3WorkflowRuntimeEnvelope = WorkspaceSyncV3OperationEnvelopeBase<{
|
|
79
82
|
domain: 'workflow-execution';
|
|
@@ -113,6 +116,8 @@ export type WorkspaceSyncV3TaskChecklistEnvelope = WorkspaceSyncV3OperationEnvel
|
|
|
113
116
|
baseLifecycleRevision: '0';
|
|
114
117
|
payload: {
|
|
115
118
|
items: ChecklistItem[];
|
|
119
|
+
expectedDetailRevision?: string;
|
|
120
|
+
itemUpdateIntent?: TaskChecklistItemUpdateIntent;
|
|
116
121
|
originActor?: WorkspaceSyncV3OriginActor;
|
|
117
122
|
};
|
|
118
123
|
}>;
|
|
@@ -46,6 +46,10 @@ export interface WorkspaceSyncV3OperatorDiagnosticsSnapshot {
|
|
|
46
46
|
materializationsInWindow: number;
|
|
47
47
|
materializedEntriesInWindow: number;
|
|
48
48
|
unexpiredMaterializations: number;
|
|
49
|
+
storedMaterializations: number;
|
|
50
|
+
storedEntries: number;
|
|
51
|
+
expiredMaterializations: number;
|
|
52
|
+
expiredEntries: number;
|
|
49
53
|
};
|
|
50
54
|
outbox: {
|
|
51
55
|
captureConfigured: boolean;
|
|
@@ -74,6 +78,7 @@ export interface WorkspaceSyncV3OperatorDiagnosticsSnapshot {
|
|
|
74
78
|
};
|
|
75
79
|
server5xx: number;
|
|
76
80
|
nonTest409: number;
|
|
81
|
+
cursorExpiredResets: number;
|
|
77
82
|
requestP95Ms: number | null;
|
|
78
83
|
maxObservedResponseBytes: number | null;
|
|
79
84
|
};
|
|
@@ -131,11 +136,13 @@ export interface WorkspaceSyncV3OperatorDiagnosticsSnapshot {
|
|
|
131
136
|
};
|
|
132
137
|
attachmentApply: {
|
|
133
138
|
openObligations: number;
|
|
139
|
+
terminalObligations: number;
|
|
134
140
|
dueObligations: number;
|
|
135
141
|
oldestOpenCreatedAt: string | null;
|
|
136
142
|
nextAttemptAt: string | null;
|
|
137
143
|
attempted: number;
|
|
138
144
|
lastError: string | null;
|
|
145
|
+
terminalReason: string | null;
|
|
139
146
|
};
|
|
140
147
|
runner: {
|
|
141
148
|
available: boolean;
|
|
@@ -116,7 +116,13 @@ export function buildWorkspaceSyncV3OperatorDiagnostics(input) {
|
|
|
116
116
|
`).all(tenantId, workspaceId, since, eventLimit + 1);
|
|
117
117
|
const truncated = eventRows.length > eventLimit;
|
|
118
118
|
const events = eventRows.slice(0, eventLimit);
|
|
119
|
-
const transfer = {
|
|
119
|
+
const transfer = {
|
|
120
|
+
pull: { success: 0, error: 0 },
|
|
121
|
+
apply: { success: 0, error: 0 },
|
|
122
|
+
server5xx: 0,
|
|
123
|
+
nonTest409: 0,
|
|
124
|
+
cursorExpiredResets: 0,
|
|
125
|
+
};
|
|
120
126
|
const requestTimes = [];
|
|
121
127
|
const observedResponseBytes = [];
|
|
122
128
|
for (const row of events) {
|
|
@@ -131,7 +137,10 @@ export function buildWorkspaceSyncV3OperatorDiagnostics(input) {
|
|
|
131
137
|
const requestMs = Number(row.request_ms);
|
|
132
138
|
if (Number.isFinite(requestMs) && requestMs >= 0)
|
|
133
139
|
requestTimes.push(requestMs);
|
|
134
|
-
const
|
|
140
|
+
const details = parseDetails(row.details_json);
|
|
141
|
+
if (JSON.stringify(details).includes('CURSOR_EXPIRED'))
|
|
142
|
+
transfer.cursorExpiredResets += 1;
|
|
143
|
+
const bytes = responseBytes(details);
|
|
135
144
|
if (bytes !== null)
|
|
136
145
|
observedResponseBytes.push(bytes);
|
|
137
146
|
}
|
|
@@ -143,6 +152,27 @@ export function buildWorkspaceSyncV3OperatorDiagnostics(input) {
|
|
|
143
152
|
AND coverage_profile_id = ? AND coverage_version = ? AND coverage_digest = ?
|
|
144
153
|
AND created_at >= ?
|
|
145
154
|
`).get(nowIso, tenantId, workspaceId, projection.coverageProfileId, projection.coverageVersion, projection.coverageDigest, since);
|
|
155
|
+
const storedRepairMaterialization = input.db.prepare(`
|
|
156
|
+
SELECT
|
|
157
|
+
COUNT(*) AS count,
|
|
158
|
+
COALESCE(SUM(CASE WHEN expires_at < ? THEN 1 ELSE 0 END), 0) AS expired,
|
|
159
|
+
(SELECT COUNT(*)
|
|
160
|
+
FROM workspace_sync_repair_snapshot_entries entry
|
|
161
|
+
WHERE entry.tenant_id = ? AND entry.workspace_id = ?) AS entries,
|
|
162
|
+
(SELECT COUNT(*)
|
|
163
|
+
FROM workspace_sync_repair_snapshot_entries entry
|
|
164
|
+
WHERE entry.tenant_id = ? AND entry.workspace_id = ?
|
|
165
|
+
AND EXISTS (
|
|
166
|
+
SELECT 1
|
|
167
|
+
FROM workspace_sync_repair_snapshots snapshot
|
|
168
|
+
WHERE snapshot.tenant_id = entry.tenant_id
|
|
169
|
+
AND snapshot.workspace_id = entry.workspace_id
|
|
170
|
+
AND snapshot.snapshot_id = entry.snapshot_id
|
|
171
|
+
AND snapshot.expires_at < ?
|
|
172
|
+
)) AS expired_entries
|
|
173
|
+
FROM workspace_sync_repair_snapshots
|
|
174
|
+
WHERE tenant_id = ? AND workspace_id = ?
|
|
175
|
+
`).get(nowIso, tenantId, workspaceId, tenantId, workspaceId, nowIso, tenantId, workspaceId);
|
|
146
176
|
const stagedEntry = projection.repair ? input.db.prepare(`
|
|
147
177
|
SELECT COUNT(*) AS count
|
|
148
178
|
FROM workspace_sync_coverage_repair_entries
|
|
@@ -216,12 +246,14 @@ export function buildWorkspaceSyncV3OperatorDiagnostics(input) {
|
|
|
216
246
|
WHERE tenant_id = ? AND workspace_id = ? AND resolved_at IS NULL
|
|
217
247
|
`).get(tenantId, workspaceId);
|
|
218
248
|
attachmentApplyRow = input.db.prepare(`
|
|
219
|
-
SELECT
|
|
220
|
-
SUM(CASE WHEN
|
|
221
|
-
|
|
222
|
-
MIN(
|
|
223
|
-
|
|
224
|
-
|
|
249
|
+
SELECT SUM(CASE WHEN terminal_at IS NULL THEN 1 ELSE 0 END) AS count,
|
|
250
|
+
SUM(CASE WHEN terminal_at IS NOT NULL THEN 1 ELSE 0 END) AS terminal,
|
|
251
|
+
SUM(CASE WHEN terminal_at IS NULL AND next_attempt_at <= ? THEN 1 ELSE 0 END) AS due,
|
|
252
|
+
MIN(CASE WHEN terminal_at IS NULL THEN created_at END) AS oldest_created_at,
|
|
253
|
+
MIN(CASE WHEN terminal_at IS NULL THEN next_attempt_at END) AS next_attempt_at,
|
|
254
|
+
COALESCE(SUM(CASE WHEN terminal_at IS NULL THEN attempts ELSE 0 END), 0) AS attempts,
|
|
255
|
+
MAX(CASE WHEN terminal_at IS NULL THEN last_error END) AS last_error,
|
|
256
|
+
MAX(CASE WHEN terminal_at IS NOT NULL THEN terminal_reason END) AS terminal_reason
|
|
225
257
|
FROM workspace_sync_v3_attachment_apply_obligations
|
|
226
258
|
WHERE tenant_id = ? AND workspace_id = ? AND resolved_at IS NULL
|
|
227
259
|
`).get(nowIso, tenantId, workspaceId);
|
|
@@ -255,7 +287,9 @@ export function buildWorkspaceSyncV3OperatorDiagnostics(input) {
|
|
|
255
287
|
const oldestOpenRecoveryAt = String(recoveryRow?.oldest_created_at || '').trim() || null;
|
|
256
288
|
const coordinatorGeneration = coordinatorState ? integer(coordinatorState.coordinator_generation) : null;
|
|
257
289
|
const ownershipMode = coordinatorState ? String(coordinatorState.ownership_mode || '') || null : null;
|
|
258
|
-
const localConverged = baseLocalConverged
|
|
290
|
+
const localConverged = baseLocalConverged
|
|
291
|
+
&& integer(attachmentApplyRow?.count) === 0
|
|
292
|
+
&& integer(attachmentApplyRow?.terminal) === 0;
|
|
259
293
|
const coordinatorFailures = [];
|
|
260
294
|
if (input.runtimeMode === 'local') {
|
|
261
295
|
if (!coordinatorState)
|
|
@@ -279,6 +313,9 @@ export function buildWorkspaceSyncV3OperatorDiagnostics(input) {
|
|
|
279
313
|
if (integer(attachmentApplyRow?.count) > 0) {
|
|
280
314
|
coordinatorFailures.push('open attachment apply obligations remain');
|
|
281
315
|
}
|
|
316
|
+
if (integer(attachmentApplyRow?.terminal) > 0) {
|
|
317
|
+
coordinatorFailures.push('terminal unavailable attachment apply obligations require operator action');
|
|
318
|
+
}
|
|
282
319
|
if (ownershipMode === 'server' && !runnerState) {
|
|
283
320
|
coordinatorFailures.push('server ownership has no durable runner checkpoint');
|
|
284
321
|
}
|
|
@@ -305,6 +342,9 @@ export function buildWorkspaceSyncV3OperatorDiagnostics(input) {
|
|
|
305
342
|
failures.push('recent pull/apply window contains 409 responses');
|
|
306
343
|
if (integer(attachmentApplyRow?.count) > 0)
|
|
307
344
|
failures.push('attachment apply obligations remain open');
|
|
345
|
+
if (integer(attachmentApplyRow?.terminal) > 0) {
|
|
346
|
+
failures.push('terminal unavailable attachment apply obligations require operator action');
|
|
347
|
+
}
|
|
308
348
|
if (cursorAtCycleHighWatermark === null)
|
|
309
349
|
unknowns.push('no committed feed cycle coordinates are available');
|
|
310
350
|
if (!events.length)
|
|
@@ -336,6 +376,10 @@ export function buildWorkspaceSyncV3OperatorDiagnostics(input) {
|
|
|
336
376
|
materializationsInWindow: integer(repairMaterialization?.count),
|
|
337
377
|
materializedEntriesInWindow: integer(repairMaterialization?.entries),
|
|
338
378
|
unexpiredMaterializations: integer(repairMaterialization?.unexpired),
|
|
379
|
+
storedMaterializations: integer(storedRepairMaterialization?.count),
|
|
380
|
+
storedEntries: integer(storedRepairMaterialization?.entries),
|
|
381
|
+
expiredMaterializations: integer(storedRepairMaterialization?.expired),
|
|
382
|
+
expiredEntries: integer(storedRepairMaterialization?.expired_entries),
|
|
339
383
|
},
|
|
340
384
|
outbox: {
|
|
341
385
|
captureConfigured, dispatchConfigured, automaticSyncEnabled: automaticSync.enabled,
|
|
@@ -387,11 +431,13 @@ export function buildWorkspaceSyncV3OperatorDiagnostics(input) {
|
|
|
387
431
|
},
|
|
388
432
|
attachmentApply: {
|
|
389
433
|
openObligations: integer(attachmentApplyRow?.count),
|
|
434
|
+
terminalObligations: integer(attachmentApplyRow?.terminal),
|
|
390
435
|
dueObligations: integer(attachmentApplyRow?.due),
|
|
391
436
|
oldestOpenCreatedAt: String(attachmentApplyRow?.oldest_created_at || '').trim() || null,
|
|
392
437
|
nextAttemptAt: String(attachmentApplyRow?.next_attempt_at || '').trim() || null,
|
|
393
438
|
attempted: integer(attachmentApplyRow?.attempts),
|
|
394
439
|
lastError: String(attachmentApplyRow?.last_error || '').trim() || null,
|
|
440
|
+
terminalReason: String(attachmentApplyRow?.terminal_reason || '').trim() || null,
|
|
395
441
|
},
|
|
396
442
|
runner: {
|
|
397
443
|
available: Boolean(runnerState),
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
import type { DatabaseAdapter } from '../../storage/databaseAdapter.js';
|
|
2
|
+
export declare const DEFAULT_WORKSPACE_SYNC_REPAIR_SNAPSHOT_RETENTION_BATCH_SIZE = 500;
|
|
3
|
+
export interface WorkspaceSyncRepairSnapshotRetentionPolicy {
|
|
4
|
+
batchSize: number;
|
|
5
|
+
}
|
|
6
|
+
export interface WorkspaceSyncRepairSnapshotRetentionResult {
|
|
7
|
+
deletedEntries: number;
|
|
8
|
+
deletedSnapshots: number;
|
|
9
|
+
remainingExpiredSnapshots: number;
|
|
10
|
+
}
|
|
11
|
+
export declare function resolveWorkspaceSyncRepairSnapshotRetentionPolicy(env?: NodeJS.ProcessEnv): WorkspaceSyncRepairSnapshotRetentionPolicy;
|
|
12
|
+
export declare function pruneExpiredWorkspaceSyncRepairSnapshots(input: {
|
|
13
|
+
db: DatabaseAdapter;
|
|
14
|
+
tenantId: string;
|
|
15
|
+
now?: Date;
|
|
16
|
+
policy?: WorkspaceSyncRepairSnapshotRetentionPolicy;
|
|
17
|
+
}): WorkspaceSyncRepairSnapshotRetentionResult;
|
|
@@ -0,0 +1,64 @@
|
|
|
1
|
+
export const DEFAULT_WORKSPACE_SYNC_REPAIR_SNAPSHOT_RETENTION_BATCH_SIZE = 500;
|
|
2
|
+
function positiveInteger(value, fallback) {
|
|
3
|
+
const parsed = Number.parseInt(String(value ?? '').trim(), 10);
|
|
4
|
+
return Number.isSafeInteger(parsed) && parsed > 0 ? parsed : fallback;
|
|
5
|
+
}
|
|
6
|
+
export function resolveWorkspaceSyncRepairSnapshotRetentionPolicy(env = process.env) {
|
|
7
|
+
return {
|
|
8
|
+
batchSize: Math.min(10_000, positiveInteger(env.TASKFORCE_SYNC_REPAIR_SNAPSHOT_RETENTION_BATCH_SIZE, DEFAULT_WORKSPACE_SYNC_REPAIR_SNAPSHOT_RETENTION_BATCH_SIZE)),
|
|
9
|
+
};
|
|
10
|
+
}
|
|
11
|
+
export function pruneExpiredWorkspaceSyncRepairSnapshots(input) {
|
|
12
|
+
const now = (input.now || new Date()).toISOString();
|
|
13
|
+
const policy = input.policy || resolveWorkspaceSyncRepairSnapshotRetentionPolicy();
|
|
14
|
+
return input.db.transaction(() => {
|
|
15
|
+
const snapshot = input.db.prepare(`
|
|
16
|
+
SELECT workspace_id, snapshot_id
|
|
17
|
+
FROM workspace_sync_repair_snapshots
|
|
18
|
+
WHERE tenant_id = ? AND expires_at < ?
|
|
19
|
+
ORDER BY expires_at ASC, workspace_id ASC, snapshot_id ASC
|
|
20
|
+
LIMIT 1
|
|
21
|
+
`).get(input.tenantId, now);
|
|
22
|
+
const workspaceId = String(snapshot?.workspace_id || '').trim();
|
|
23
|
+
const snapshotId = String(snapshot?.snapshot_id || '').trim();
|
|
24
|
+
let deletedEntries = 0;
|
|
25
|
+
let deletedSnapshots = 0;
|
|
26
|
+
if (workspaceId && snapshotId) {
|
|
27
|
+
const entries = input.db.prepare(`
|
|
28
|
+
SELECT entry_index
|
|
29
|
+
FROM workspace_sync_repair_snapshot_entries
|
|
30
|
+
WHERE tenant_id = ? AND workspace_id = ? AND snapshot_id = ?
|
|
31
|
+
ORDER BY entry_index ASC
|
|
32
|
+
LIMIT ?
|
|
33
|
+
`).all(input.tenantId, workspaceId, snapshotId, policy.batchSize);
|
|
34
|
+
if (entries.length > 0) {
|
|
35
|
+
const result = input.db.prepare(`
|
|
36
|
+
DELETE FROM workspace_sync_repair_snapshot_entries
|
|
37
|
+
WHERE tenant_id = ? AND workspace_id = ? AND snapshot_id = ?
|
|
38
|
+
AND entry_index IN (${entries.map(() => '?').join(', ')})
|
|
39
|
+
`).run(input.tenantId, workspaceId, snapshotId, ...entries.map((entry) => entry.entry_index));
|
|
40
|
+
deletedEntries = Number(result.changes || 0);
|
|
41
|
+
}
|
|
42
|
+
const snapshotResult = input.db.prepare(`
|
|
43
|
+
DELETE FROM workspace_sync_repair_snapshots
|
|
44
|
+
WHERE tenant_id = ? AND workspace_id = ? AND snapshot_id = ? AND expires_at < ?
|
|
45
|
+
AND NOT EXISTS (
|
|
46
|
+
SELECT 1
|
|
47
|
+
FROM workspace_sync_repair_snapshot_entries
|
|
48
|
+
WHERE tenant_id = ? AND workspace_id = ? AND snapshot_id = ?
|
|
49
|
+
)
|
|
50
|
+
`).run(input.tenantId, workspaceId, snapshotId, now, input.tenantId, workspaceId, snapshotId);
|
|
51
|
+
deletedSnapshots = Number(snapshotResult.changes || 0);
|
|
52
|
+
}
|
|
53
|
+
const remaining = input.db.prepare(`
|
|
54
|
+
SELECT COUNT(*) AS count
|
|
55
|
+
FROM workspace_sync_repair_snapshots
|
|
56
|
+
WHERE tenant_id = ? AND expires_at < ?
|
|
57
|
+
`).get(input.tenantId, now);
|
|
58
|
+
return {
|
|
59
|
+
deletedEntries,
|
|
60
|
+
deletedSnapshots,
|
|
61
|
+
remainingExpiredSnapshots: Number(remaining?.count || 0),
|
|
62
|
+
};
|
|
63
|
+
})();
|
|
64
|
+
}
|
|
@@ -36,12 +36,19 @@ export function buildWorkspaceSyncV3TaskCommentAuditPage(input) {
|
|
|
36
36
|
const workspaceId = String(input.workspaceId || '').trim();
|
|
37
37
|
const previousCursor = normalizeCursor(input.cursor);
|
|
38
38
|
const limit = pageSize(input.limit);
|
|
39
|
+
// Task IDs are compared in JavaScript when a page is installed locally.
|
|
40
|
+
// Make the database boundary use the same bytewise ordering so Postgres
|
|
41
|
+
// locale collation cannot place mixed-case IDs in an order the local
|
|
42
|
+
// validator rejects (SQLite already defaults to binary ordering here).
|
|
43
|
+
const taskIdWithCollationSql = input.core.getDatabaseAdapter().provider === 'postgres'
|
|
44
|
+
? 'id COLLATE "C"'
|
|
45
|
+
: 'id COLLATE BINARY';
|
|
39
46
|
const rows = input.core.getDatabaseAdapter().prepare(`
|
|
40
47
|
SELECT id
|
|
41
48
|
FROM tasks
|
|
42
49
|
WHERE tenant_id = ? AND workspace_id = ?
|
|
43
|
-
AND (? = '' OR
|
|
44
|
-
ORDER BY
|
|
50
|
+
AND (? = '' OR ${taskIdWithCollationSql} > ?)
|
|
51
|
+
ORDER BY ${taskIdWithCollationSql}
|
|
45
52
|
LIMIT ?
|
|
46
53
|
`).all(input.core.getTenantId(), workspaceId, previousCursor || '', previousCursor || '', limit + 1);
|
|
47
54
|
const pageRows = rows.slice(0, limit);
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import type { WorkspaceSyncV3FeedCoveragePolicy, WorkspaceSyncV3FeedEntry, WorkspaceSyncV3FeedOperationProjector } from './workspaceSyncV3Feed.js';
|
|
2
|
+
import type { WorkspaceSyncV3CoverageProfile } from './workspaceSyncV3FeedProfile.js';
|
|
3
|
+
/** Dark v7 candidate: v4 ownership plus explicit task card-cover selection. */
|
|
4
|
+
export declare const WORKSPACE_SYNC_V3_TASK_COVER_COVERAGE_PROFILE: WorkspaceSyncV3CoverageProfile;
|
|
5
|
+
export declare const projectWorkspaceSyncV3TaskCoverCoverageOperation: WorkspaceSyncV3FeedOperationProjector;
|
|
6
|
+
export declare const WORKSPACE_SYNC_V3_TASK_COVER_COVERAGE_POLICY: WorkspaceSyncV3FeedCoveragePolicy;
|
|
7
|
+
export declare function validateWorkspaceSyncV3TaskCoverCoverageFeedEntry(entry: WorkspaceSyncV3FeedEntry): void;
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
import { createHash } from 'crypto';
|
|
2
|
+
import { canonicalWorkspaceSyncJson } from './canonicalWorkspaceSyncJson.js';
|
|
3
|
+
import { projectWorkspaceSyncV3CombinedOperation, validateWorkspaceSyncV3CombinedFeedEntry, } from './workspaceSyncV3CombinedCoverage.js';
|
|
4
|
+
import { WORKSPACE_SYNC_V3_NESTED_COVERAGE_PROFILE } from './workspaceSyncV3NestedCoverage.js';
|
|
5
|
+
import { projectWorkspaceSyncV3NestedTaskV2Operation, validateWorkspaceSyncV3NestedTaskFeedEntry, WORKSPACE_SYNC_V3_TASK_ATTACHMENT_LINKS_V2_PROJECTION, } from './workspaceSyncV3NestedTaskProjection.js';
|
|
6
|
+
const projections = Object.freeze(WORKSPACE_SYNC_V3_NESTED_COVERAGE_PROFILE.projections.map((projection) => (projection.projectionId === 'task-attachment-links/full-v1'
|
|
7
|
+
? WORKSPACE_SYNC_V3_TASK_ATTACHMENT_LINKS_V2_PROJECTION
|
|
8
|
+
: projection)));
|
|
9
|
+
const identity = Object.freeze({
|
|
10
|
+
coverageProfileId: 'task-planning-metadata',
|
|
11
|
+
coverageVersion: 7,
|
|
12
|
+
projections,
|
|
13
|
+
});
|
|
14
|
+
/** Dark v7 candidate: v4 ownership plus explicit task card-cover selection. */
|
|
15
|
+
export const WORKSPACE_SYNC_V3_TASK_COVER_COVERAGE_PROFILE = Object.freeze({
|
|
16
|
+
...identity,
|
|
17
|
+
coverageDigest: createHash('sha256').update(canonicalWorkspaceSyncJson(identity)).digest('hex'),
|
|
18
|
+
});
|
|
19
|
+
const NESTED_DOMAINS = new Set(['task-comments', 'task-checklist', 'task-attachment-links', 'entity-event']);
|
|
20
|
+
export const projectWorkspaceSyncV3TaskCoverCoverageOperation = (input) => {
|
|
21
|
+
if (input.rows.some((row) => NESTED_DOMAINS.has(row.domain))) {
|
|
22
|
+
const nested = projectWorkspaceSyncV3NestedTaskV2Operation(input);
|
|
23
|
+
if (!nested)
|
|
24
|
+
throw new Error('Task-cover coverage operation is incomplete.');
|
|
25
|
+
return nested;
|
|
26
|
+
}
|
|
27
|
+
return projectWorkspaceSyncV3CombinedOperation(input);
|
|
28
|
+
};
|
|
29
|
+
export const WORKSPACE_SYNC_V3_TASK_COVER_COVERAGE_POLICY = Object.freeze({
|
|
30
|
+
profile: WORKSPACE_SYNC_V3_TASK_COVER_COVERAGE_PROFILE,
|
|
31
|
+
projectOperation: projectWorkspaceSyncV3TaskCoverCoverageOperation,
|
|
32
|
+
});
|
|
33
|
+
export function validateWorkspaceSyncV3TaskCoverCoverageFeedEntry(entry) {
|
|
34
|
+
if (NESTED_DOMAINS.has(entry.domain))
|
|
35
|
+
return validateWorkspaceSyncV3NestedTaskFeedEntry(entry);
|
|
36
|
+
return validateWorkspaceSyncV3CombinedFeedEntry(entry);
|
|
37
|
+
}
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
export declare const WORKSPACE_SYNC_V3_TASK_COVER_COVERAGE_SELECTOR: Readonly<{
|
|
2
|
+
coverageProfileId: "task-planning-metadata";
|
|
3
|
+
coverageVersion: 7;
|
|
4
|
+
coverageDigest: "84b0dee7ac0811234288c1b296357b2ddbcfe82d438ccf90b6bc6e8b5afea0b6";
|
|
5
|
+
}>;
|
|
6
|
+
export declare const WORKSPACE_SYNC_V3_TASK_COVER_EXCLUDED_V2_PROJECTIONS: readonly ("initiative/full-v1" | "taxonomy/full-v1" | "task/root-v1" | "task-relationship/full-v1" | "workstream/full-v1" | "task-comments/full-v1" | "task-checklist/full-v1" | "task-attachment-links/full-v2" | "entity-event/full-v1")[];
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import { WORKSPACE_SYNC_V3_NESTED_EXCLUDED_V2_PROJECTIONS } from './workspaceSyncV3NestedWireContract.js';
|
|
2
|
+
export const WORKSPACE_SYNC_V3_TASK_COVER_COVERAGE_SELECTOR = Object.freeze({
|
|
3
|
+
coverageProfileId: 'task-planning-metadata',
|
|
4
|
+
coverageVersion: 7,
|
|
5
|
+
coverageDigest: '84b0dee7ac0811234288c1b296357b2ddbcfe82d438ccf90b6bc6e8b5afea0b6',
|
|
6
|
+
});
|
|
7
|
+
export const WORKSPACE_SYNC_V3_TASK_COVER_EXCLUDED_V2_PROJECTIONS = Object.freeze(WORKSPACE_SYNC_V3_NESTED_EXCLUDED_V2_PROJECTIONS.map((projection) => (projection === 'task-attachment-links/full-v1'
|
|
8
|
+
? 'task-attachment-links/full-v2'
|
|
9
|
+
: projection)));
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import type { WorkspaceSyncV3FeedCoveragePolicy, WorkspaceSyncV3FeedEntry, WorkspaceSyncV3FeedOperationProjector } from './workspaceSyncV3Feed.js';
|
|
2
|
+
import type { WorkspaceSyncV3CoverageProfile } from './workspaceSyncV3FeedProfile.js';
|
|
3
|
+
/** Dark v8 candidate: active v7 task-cover ownership plus workflow runtime. */
|
|
4
|
+
export declare const WORKSPACE_SYNC_V3_WORKFLOW_TASK_COVER_COVERAGE_PROFILE: WorkspaceSyncV3CoverageProfile;
|
|
5
|
+
export declare const projectWorkspaceSyncV3WorkflowTaskCoverCoverageOperation: WorkspaceSyncV3FeedOperationProjector;
|
|
6
|
+
export declare const WORKSPACE_SYNC_V3_WORKFLOW_TASK_COVER_COVERAGE_POLICY: WorkspaceSyncV3FeedCoveragePolicy;
|
|
7
|
+
export declare function validateWorkspaceSyncV3WorkflowTaskCoverCoverageFeedEntry(entry: WorkspaceSyncV3FeedEntry): void;
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
import { createHash } from 'crypto';
|
|
2
|
+
import { canonicalWorkspaceSyncJson } from './canonicalWorkspaceSyncJson.js';
|
|
3
|
+
import { projectWorkspaceSyncV3TaskCoverCoverageOperation, validateWorkspaceSyncV3TaskCoverCoverageFeedEntry, WORKSPACE_SYNC_V3_TASK_COVER_COVERAGE_PROFILE, } from './workspaceSyncV3TaskCoverCoverage.js';
|
|
4
|
+
import { WORKSPACE_SYNC_V3_WORKFLOW_RUNTIME_PROJECTIONS } from './workflowRuntimeSync.js';
|
|
5
|
+
import { projectWorkspaceSyncV3WorkflowRuntimeOperation, validateWorkspaceSyncV3WorkflowRuntimeFeedEntry, } from './workspaceSyncV3WorkflowRuntimeProjection.js';
|
|
6
|
+
const projections = Object.freeze([
|
|
7
|
+
...WORKSPACE_SYNC_V3_TASK_COVER_COVERAGE_PROFILE.projections,
|
|
8
|
+
...WORKSPACE_SYNC_V3_WORKFLOW_RUNTIME_PROJECTIONS,
|
|
9
|
+
]);
|
|
10
|
+
const identity = Object.freeze({
|
|
11
|
+
coverageProfileId: 'task-planning-metadata',
|
|
12
|
+
coverageVersion: 8,
|
|
13
|
+
projections,
|
|
14
|
+
});
|
|
15
|
+
/** Dark v8 candidate: active v7 task-cover ownership plus workflow runtime. */
|
|
16
|
+
export const WORKSPACE_SYNC_V3_WORKFLOW_TASK_COVER_COVERAGE_PROFILE = Object.freeze({
|
|
17
|
+
...identity,
|
|
18
|
+
coverageDigest: createHash('sha256').update(canonicalWorkspaceSyncJson(identity)).digest('hex'),
|
|
19
|
+
});
|
|
20
|
+
export const projectWorkspaceSyncV3WorkflowTaskCoverCoverageOperation = (input) => {
|
|
21
|
+
const workflow = projectWorkspaceSyncV3WorkflowRuntimeOperation(input);
|
|
22
|
+
return workflow || projectWorkspaceSyncV3TaskCoverCoverageOperation(input);
|
|
23
|
+
};
|
|
24
|
+
export const WORKSPACE_SYNC_V3_WORKFLOW_TASK_COVER_COVERAGE_POLICY = Object.freeze({
|
|
25
|
+
profile: WORKSPACE_SYNC_V3_WORKFLOW_TASK_COVER_COVERAGE_PROFILE,
|
|
26
|
+
projectOperation: projectWorkspaceSyncV3WorkflowTaskCoverCoverageOperation,
|
|
27
|
+
});
|
|
28
|
+
export function validateWorkspaceSyncV3WorkflowTaskCoverCoverageFeedEntry(entry) {
|
|
29
|
+
if (entry.projection.startsWith('workflow-')) {
|
|
30
|
+
return validateWorkspaceSyncV3WorkflowRuntimeFeedEntry(entry);
|
|
31
|
+
}
|
|
32
|
+
return validateWorkspaceSyncV3TaskCoverCoverageFeedEntry(entry);
|
|
33
|
+
}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
export declare const WORKSPACE_SYNC_V3_WORKFLOW_TASK_COVER_COVERAGE_SELECTOR: Readonly<{
|
|
2
|
+
coverageProfileId: "task-planning-metadata";
|
|
3
|
+
coverageVersion: 8;
|
|
4
|
+
coverageDigest: "344c3360d36d383241b212192fe6c2ac1a7694fe521d3b6636559043b7e58253";
|
|
5
|
+
}>;
|
|
6
|
+
/** V2 has neither workflow runtime nor explicit task card-cover projections. */
|
|
7
|
+
export declare const WORKSPACE_SYNC_V3_WORKFLOW_TASK_COVER_EXCLUDED_V2_PROJECTIONS: readonly ("initiative/full-v1" | "taxonomy/full-v1" | "task/root-v1" | "task-relationship/full-v1" | "workstream/full-v1" | "task-comments/full-v1" | "task-checklist/full-v1" | "task-attachment-links/full-v2" | "entity-event/full-v1")[];
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import { WORKSPACE_SYNC_V3_TASK_COVER_EXCLUDED_V2_PROJECTIONS } from './workspaceSyncV3TaskCoverWireContract.js';
|
|
2
|
+
export const WORKSPACE_SYNC_V3_WORKFLOW_TASK_COVER_COVERAGE_SELECTOR = Object.freeze({
|
|
3
|
+
coverageProfileId: 'task-planning-metadata',
|
|
4
|
+
coverageVersion: 8,
|
|
5
|
+
coverageDigest: '344c3360d36d383241b212192fe6c2ac1a7694fe521d3b6636559043b7e58253',
|
|
6
|
+
});
|
|
7
|
+
/** V2 has neither workflow runtime nor explicit task card-cover projections. */
|
|
8
|
+
export const WORKSPACE_SYNC_V3_WORKFLOW_TASK_COVER_EXCLUDED_V2_PROJECTIONS = WORKSPACE_SYNC_V3_TASK_COVER_EXCLUDED_V2_PROJECTIONS;
|
|
@@ -33,7 +33,8 @@ export async function buildWorkspacePullFeed(input) {
|
|
|
33
33
|
const excludedProjections = new Set(input.excludedProjections || []);
|
|
34
34
|
const commentsV3Owned = excludedProjections.has('task-comments/full-v1');
|
|
35
35
|
const checklistV3Owned = excludedProjections.has('task-checklist/full-v1');
|
|
36
|
-
const attachmentsV3Owned = excludedProjections.has('task-attachment-links/full-v1')
|
|
36
|
+
const attachmentsV3Owned = excludedProjections.has('task-attachment-links/full-v1')
|
|
37
|
+
|| excludedProjections.has('task-attachment-links/full-v2');
|
|
37
38
|
const suppressTaskCarriers = excludedProjections.has('task/root-v1')
|
|
38
39
|
&& commentsV3Owned && checklistV3Owned && attachmentsV3Owned;
|
|
39
40
|
const syncCursor = cursor ? { watermark: cursor.u, id: cursor.id } : null;
|
|
@@ -2,6 +2,7 @@ import type { TaskItem } from '../types.js';
|
|
|
2
2
|
import type { WorkspaceAssetLinkRole, WorkspaceAssetStore } from '../storage/workspaceAssetStore.js';
|
|
3
3
|
import { type AiProfileAvatarPathSource } from './aiProfileAvatarSyncPaths.js';
|
|
4
4
|
import { type WorkspaceSyncPublishedContentResolver } from './engine/workspaceSyncPublishedContentResolver.js';
|
|
5
|
+
import type { WorkspaceSyncContentPullObligationStore } from './engine/workspaceSyncContentPullObligationStore.js';
|
|
5
6
|
export interface WorkspaceRepairManifestTaskEntry {
|
|
6
7
|
id: string;
|
|
7
8
|
archived: boolean;
|
|
@@ -22,6 +23,7 @@ export interface WorkspaceRepairManifestDocumentEntry {
|
|
|
22
23
|
sha256: string;
|
|
23
24
|
sizeBytes: number;
|
|
24
25
|
existsLocally: boolean;
|
|
26
|
+
contentCheckReliable: boolean;
|
|
25
27
|
source: 'metadata' | 'filesystem';
|
|
26
28
|
publicationState: 'legacy' | 'versioned' | 'deleted' | 'invalid';
|
|
27
29
|
publicationError: string | null;
|
|
@@ -36,6 +38,7 @@ export interface WorkspaceRepairManifestAssetEntry {
|
|
|
36
38
|
sha256: string;
|
|
37
39
|
sizeBytes: number;
|
|
38
40
|
existsLocally: boolean;
|
|
41
|
+
contentCheckReliable: boolean;
|
|
39
42
|
source: 'metadata' | 'filesystem';
|
|
40
43
|
publicationState: 'legacy' | 'versioned' | 'deleted' | 'invalid';
|
|
41
44
|
publicationError: string | null;
|
|
@@ -50,7 +53,7 @@ export interface WorkspaceRepairManifest {
|
|
|
50
53
|
assets: WorkspaceRepairManifestAssetEntry[];
|
|
51
54
|
assetDeletes: WorkspaceRepairManifestDeleteEntry[];
|
|
52
55
|
}
|
|
53
|
-
export type WorkspaceRepairIssueCode = 'missing_document_metadata' | 'missing_document_file' | 'stale_document_tombstone' | 'published_document_tombstone_conflict' | 'published_document_live_head_conflict' | 'invalid_published_document_content' | 'missing_asset_metadata' | 'missing_asset_file' | 'stale_asset_tombstone' | 'published_asset_tombstone_conflict' | 'published_asset_live_head_conflict' | 'invalid_published_asset_content' | 'stale_asset_link' | 'missing_asset_link';
|
|
56
|
+
export type WorkspaceRepairIssueCode = 'missing_document_metadata' | 'missing_document_file' | 'stale_document_tombstone' | 'published_document_tombstone_conflict' | 'published_document_live_head_conflict' | 'invalid_published_document_content' | 'document_content_unverified' | 'missing_asset_metadata' | 'missing_asset_file' | 'stale_asset_tombstone' | 'published_asset_tombstone_conflict' | 'published_asset_live_head_conflict' | 'invalid_published_asset_content' | 'asset_content_unverified' | 'stale_asset_link' | 'missing_asset_link';
|
|
54
57
|
export interface WorkspaceRepairIssue {
|
|
55
58
|
code: WorkspaceRepairIssueCode;
|
|
56
59
|
entityKind: 'document' | 'asset' | 'link';
|
|
@@ -59,7 +62,7 @@ export interface WorkspaceRepairIssue {
|
|
|
59
62
|
taskId?: string | null;
|
|
60
63
|
role?: WorkspaceAssetLinkRole;
|
|
61
64
|
repairable: boolean;
|
|
62
|
-
recommendedAction: 'create-metadata' | 'mark-deleted' | 'revive-metadata' | 'delete-link' | 'create-link' | 'inspect-published-content';
|
|
65
|
+
recommendedAction: 'create-metadata' | 'mark-deleted' | 'revive-metadata' | 'delete-link' | 'create-link' | 'inspect-published-content' | 'retry-pull';
|
|
63
66
|
detail: string;
|
|
64
67
|
}
|
|
65
68
|
export interface WorkspaceRepairScanResult {
|
|
@@ -103,4 +106,7 @@ export declare function scanWorkspaceRepair(input: WorkspaceRepairInput): Worksp
|
|
|
103
106
|
export declare function applyWorkspaceRepair(input: WorkspaceRepairInput & {
|
|
104
107
|
upsertDocumentWatermark: (workspaceId: string, path: string, contentHash: string, updatedAt: string) => void;
|
|
105
108
|
repairMissingAssetLinks?: boolean;
|
|
109
|
+
repairMissingContentFiles?: boolean;
|
|
110
|
+
contentPullObligationStore?: WorkspaceSyncContentPullObligationStore;
|
|
111
|
+
now?: () => string;
|
|
106
112
|
}): WorkspaceRepairApplyResult;
|