@taskforcehq/taskforce 0.3.329 → 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.
Files changed (321) hide show
  1. package/dist/Taskforce.module.css +290 -45
  2. package/dist/components/features/AiProfilesModule.js +3 -5
  3. package/dist/components/features/TaskSettings.js +70 -14
  4. package/dist/components/features/TaskforceAgentsModule.d.ts +1 -2
  5. package/dist/components/features/TaskforceAgentsModule.js +586 -116
  6. package/dist/components/features/agentConnections/AgentConnectionControl.d.ts +15 -0
  7. package/dist/components/features/agentConnections/AgentConnectionControl.js +125 -0
  8. package/dist/components/features/agentConnections/ModelConnectionsPanel.d.ts +18 -0
  9. package/dist/components/features/agentConnections/ModelConnectionsPanel.js +393 -0
  10. package/dist/components/features/agentConnections/modelConnectionsApi.d.ts +65 -0
  11. package/dist/components/features/agentConnections/modelConnectionsApi.js +129 -0
  12. package/dist/components/features/taskforceAgentAssignments/AgentBehaviorAssignments.js +15 -24
  13. package/dist/components/features/taskforceAgentEditorModel.d.ts +2 -1
  14. package/dist/components/features/taskforceAgentEditorModel.js +3 -1
  15. package/dist/components/features/workflowManager/workflowManagerApi.d.ts +1 -1
  16. package/dist/components/features/workflowManager/workflowManagerApi.js +3 -0
  17. package/dist/components/task/TaskWorkflowAssignmentField.js +68 -10
  18. package/dist/components/views/StandaloneLayout.js +27 -26
  19. package/dist/components/views/standalone/modals/SyncStatusModal.d.ts +4 -3
  20. package/dist/components/views/standalone/modals/SyncStatusModal.js +33 -38
  21. package/dist/config/envSchema.js +48 -1
  22. package/dist/core/McpTokenService.d.ts +23 -1
  23. package/dist/core/McpTokenService.js +93 -10
  24. package/dist/core/TaskChecklistCommandService.d.ts +27 -0
  25. package/dist/core/TaskChecklistCommandService.js +83 -5
  26. package/dist/core/TaskLifecycleCommandService.d.ts +3 -1
  27. package/dist/core/TaskLifecycleCommandService.js +6 -2
  28. package/dist/core/Taskforce.d.ts +32 -0
  29. package/dist/core/Taskforce.js +125 -4
  30. package/dist/core/types.d.ts +8 -0
  31. package/dist/documentReviews/commandService.d.ts +2 -1
  32. package/dist/documentReviews/commandService.js +6 -3
  33. package/dist/hooks/sync/orchestratorShared.d.ts +1 -0
  34. package/dist/hooks/sync/orchestratorShared.js +2 -0
  35. package/dist/hooks/sync/useLocalSyncCoordinatorSnapshot.d.ts +3 -0
  36. package/dist/hooks/sync/useLocalSyncCoordinatorSnapshot.js +85 -9
  37. package/dist/hooks/sync/useSyncStatusControls.d.ts +4 -1
  38. package/dist/hooks/sync/useSyncStatusControls.js +47 -11
  39. package/dist/hooks/useSyncOrchestrator.d.ts +3 -0
  40. package/dist/hooks/useSyncOrchestrator.js +111 -2
  41. package/dist/hooks/useTaskData.d.ts +31 -1
  42. package/dist/hooks/useTaskData.js +29 -7
  43. package/dist/hooks/useTaskMutations.d.ts +3 -1
  44. package/dist/hooks/useTaskMutations.js +46 -12
  45. package/dist/hooks/useTaskforce.d.ts +2 -0
  46. package/dist/hooks/useTaskforce.js +11 -2
  47. package/dist/mcp/clientRegistry.d.ts +2 -2
  48. package/dist/mcp/clientRegistry.js +1 -1
  49. package/dist/mcp/documentAssetRegistrar.js +9 -6
  50. package/dist/mcp/durableTaskMutationRouter.d.ts +4 -1
  51. package/dist/mcp/durableTaskMutationRouter.js +10 -0
  52. package/dist/mcp/durableTaskRelationshipMutationRouter.js +4 -0
  53. package/dist/mcp/httpProtocolRouting.d.ts +10 -0
  54. package/dist/mcp/httpProtocolRouting.js +19 -0
  55. package/dist/mcp/localCliHealth.d.ts +2 -2
  56. package/dist/mcp/localCliHealth.js +2 -2
  57. package/dist/mcp/localServiceProxy.d.ts +1 -0
  58. package/dist/mcp/localServiceProxy.js +530 -68
  59. package/dist/mcp/planningAttachmentCommandAdapter.d.ts +3 -1
  60. package/dist/mcp/planningAttachmentCommandAdapter.js +20 -2
  61. package/dist/mcp/runtime.d.ts +54 -79
  62. package/dist/mcp/runtime.js +384 -97
  63. package/dist/mcp/taskPlanningRegistrar.js +23 -4
  64. package/dist/mcp/toolProfiles.d.ts +2 -0
  65. package/dist/mcp/toolProfiles.js +10 -0
  66. package/dist/mcp/toolRegistry.d.ts +1 -0
  67. package/dist/mcp/toolRegistry.js +1 -0
  68. package/dist/mcp/workflowExecutionRegistrar.js +4 -4
  69. package/dist/migrations/taskSchemaMigrations.d.ts +5 -0
  70. package/dist/migrations/taskSchemaMigrations.js +415 -0
  71. package/dist/runtime/appGates.d.ts +2 -1
  72. package/dist/runtime/appGates.js +7 -0
  73. package/dist/server/index.d.ts +3 -0
  74. package/dist/server/index.js +108 -11
  75. package/dist/server/localDatabaseIdentity.js +4 -1
  76. package/dist/server/localServiceLease.js +2 -1
  77. package/dist/server/localServiceSessions.d.ts +14 -17
  78. package/dist/server/localServiceSessions.js +308 -94
  79. package/dist/server/localWorkspaceSyncServerRuntime.js +12 -14
  80. package/dist/server/routes/admin.d.ts +4 -0
  81. package/dist/server/routes/admin.js +112 -3
  82. package/dist/server/routes/agents.d.ts +7 -0
  83. package/dist/server/routes/agents.js +277 -24
  84. package/dist/server/routes/billing.js +5 -1
  85. package/dist/server/routes/durableTaskHttpRouters.d.ts +2 -0
  86. package/dist/server/routes/executorPhaseAApprovals.d.ts +19 -0
  87. package/dist/server/routes/executorPhaseAApprovals.js +140 -0
  88. package/dist/server/routes/executorPhaseAIssuerRedemptions.d.ts +11 -0
  89. package/dist/server/routes/executorPhaseAIssuerRedemptions.js +24 -0
  90. package/dist/server/routes/githubReviewEvidence.d.ts +19 -0
  91. package/dist/server/routes/githubReviewEvidence.js +116 -0
  92. package/dist/server/routes/localService.d.ts +15 -4
  93. package/dist/server/routes/localService.js +136 -40
  94. package/dist/server/routes/modelConnections.d.ts +24 -0
  95. package/dist/server/routes/modelConnections.js +205 -0
  96. package/dist/server/routes/shared.d.ts +19 -0
  97. package/dist/server/routes/shared.js +95 -19
  98. package/dist/server/routes/sync.js +1 -0
  99. package/dist/server/routes/syncAuxRoutes.js +5 -1
  100. package/dist/server/routes/syncPushRoutes.d.ts +1 -0
  101. package/dist/server/routes/syncPushRoutes.js +1 -0
  102. package/dist/server/routes/syncV3FeedRoutes.js +10 -1
  103. package/dist/server/routes/syncV3OperationRoutes.js +35 -9
  104. package/dist/server/routes/tasks.js +21 -2
  105. package/dist/server/routes/workflows.js +9 -1
  106. package/dist/server/routes.js +59 -0
  107. package/dist/services/codexAppServerModelGateway.d.ts +54 -5
  108. package/dist/services/codexAppServerModelGateway.js +246 -21
  109. package/dist/services/codexDeviceCodeLoginManager.d.ts +39 -0
  110. package/dist/services/codexDeviceCodeLoginManager.js +265 -0
  111. package/dist/services/codexModelProviderConnectionLifecycle.d.ts +8 -0
  112. package/dist/services/codexModelProviderConnectionLifecycle.js +73 -0
  113. package/dist/services/executorPhaseAApprovalRuntime.d.ts +14 -0
  114. package/dist/services/executorPhaseAApprovalRuntime.js +24 -0
  115. package/dist/services/executorPhaseAApprovalService.d.ts +40 -0
  116. package/dist/services/executorPhaseAApprovalService.js +609 -0
  117. package/dist/services/executorPhaseADriftEvaluator.d.ts +78 -0
  118. package/dist/services/executorPhaseADriftEvaluator.js +93 -0
  119. package/dist/services/executorPhaseAIssuerCore.d.ts +126 -0
  120. package/dist/services/executorPhaseAIssuerCore.js +295 -0
  121. package/dist/services/executorPhaseAIssuerRedemptionService.d.ts +34 -0
  122. package/dist/services/executorPhaseAIssuerRedemptionService.js +158 -0
  123. package/dist/services/githubReviewEvidenceRuntime.d.ts +14 -0
  124. package/dist/services/githubReviewEvidenceRuntime.js +30 -0
  125. package/dist/services/githubReviewEvidenceService.d.ts +93 -0
  126. package/dist/services/githubReviewEvidenceService.js +336 -0
  127. package/dist/services/modelGateway.d.ts +7 -0
  128. package/dist/services/modelProviderConnectionService.d.ts +71 -0
  129. package/dist/services/modelProviderConnectionService.js +279 -0
  130. package/dist/services/modelProviderCredentialHome.d.ts +32 -0
  131. package/dist/services/modelProviderCredentialHome.js +271 -0
  132. package/dist/services/ownerScopedModelConnectionGateway.d.ts +12 -0
  133. package/dist/services/ownerScopedModelConnectionGateway.js +30 -0
  134. package/dist/services/taskforceAgentConnectionBindingService.d.ts +66 -0
  135. package/dist/services/taskforceAgentConnectionBindingService.js +185 -0
  136. package/dist/services/taskforceAgentMcpBridge.d.ts +1 -1
  137. package/dist/services/taskforceAgentMcpBridge.js +7 -24
  138. package/dist/shared/adminEdgeProxy.d.ts +5 -0
  139. package/dist/shared/adminEdgeProxy.js +94 -0
  140. package/dist/shared/adminProxySessionCookies.d.ts +16 -0
  141. package/dist/shared/adminProxySessionCookies.js +86 -0
  142. package/dist/shared/aiProfileColors.d.ts +31 -1
  143. package/dist/shared/aiProfileColors.js +14 -6
  144. package/dist/shared/executorPhaseAApprovalGoldenVector.json +269 -0
  145. package/dist/shared/executorPhaseAApprovalReceipt.d.ts +112 -0
  146. package/dist/shared/executorPhaseAApprovalReceipt.js +58 -0
  147. package/dist/shared/executorPhaseAApprovalTrustPolicy.json +10 -0
  148. package/dist/shared/executorPhaseADriftContracts.d.ts +37 -0
  149. package/dist/shared/executorPhaseADriftContracts.js +63 -0
  150. package/dist/shared/executorPhaseAIssuerContracts.d.ts +75 -0
  151. package/dist/shared/executorPhaseAIssuerContracts.js +90 -0
  152. package/dist/shared/executorPhaseARunAuthorization.d.ts +120 -0
  153. package/dist/shared/executorPhaseARunAuthorization.js +232 -0
  154. package/dist/shared/executorPhaseASchemaValidation.d.ts +7 -0
  155. package/dist/shared/executorPhaseASchemaValidation.js +53 -0
  156. package/dist/shared/executorPhaseASchemas/approval-receipt.schema.json +106 -0
  157. package/dist/shared/executorPhaseASchemas/drift-attestation.schema.json +54 -0
  158. package/dist/shared/executorPhaseASchemas/drift-request.schema.json +47 -0
  159. package/dist/shared/executorPhaseASchemas/foundation-manifest.schema.json +29 -0
  160. package/dist/shared/executorPhaseASchemas/issuer-audit-record.schema.json +24 -0
  161. package/dist/shared/executorPhaseASchemas/issuer-proof.schema.json +43 -0
  162. package/dist/shared/executorPhaseASchemas/issuer-redemption-request.schema.json +18 -0
  163. package/dist/shared/executorPhaseASchemas/issuer-redemption-response.schema.json +39 -0
  164. package/dist/shared/executorPhaseASchemas/logical-envelope.schema.json +149 -0
  165. package/dist/shared/executorPhaseASchemas/preflight-report.schema.json +216 -0
  166. package/dist/shared/executorPhaseASchemas/run-capability.schema.json +111 -0
  167. package/dist/shared/executorPhaseASchemas/sender-proof.schema.json +37 -0
  168. package/dist/shared/executorPhaseASchemas/workload-grant.schema.json +68 -0
  169. package/dist/shared/executorPhaseASchemas/workload-jwt-claims.schema.json +67 -0
  170. package/dist/shared/executorPhaseATiming.d.ts +1 -0
  171. package/dist/shared/executorPhaseATiming.js +1 -0
  172. package/dist/shared/planningIdentity.js +1 -1
  173. package/dist/shared/productLogoKeys.d.ts +2 -0
  174. package/dist/shared/productLogoKeys.js +18 -0
  175. package/dist/shared/taskforceAgentDefinition.d.ts +0 -1
  176. package/dist/shared/taskforceAgentDefinition.js +6 -9
  177. package/dist/shared/taskforceAgentModels.js +7 -3
  178. package/dist/shared/userFeatureGrants.d.ts +4 -0
  179. package/dist/shared/userFeatureGrants.js +7 -0
  180. package/dist/storage/executorPhaseAApprovalReceiptStore.d.ts +37 -0
  181. package/dist/storage/executorPhaseAApprovalReceiptStore.js +81 -0
  182. package/dist/storage/executorPhaseARunAuthorizationStore.d.ts +103 -0
  183. package/dist/storage/executorPhaseARunAuthorizationStore.js +492 -0
  184. package/dist/storage/githubReviewEvidenceInstallationStore.d.ts +26 -0
  185. package/dist/storage/githubReviewEvidenceInstallationStore.js +89 -0
  186. package/dist/storage/modelProviderConnectionStore.d.ts +99 -0
  187. package/dist/storage/modelProviderConnectionStore.js +446 -0
  188. package/dist/storage/postgresAdapter.d.ts +4 -0
  189. package/dist/storage/postgresAdapter.js +11 -0
  190. package/dist/storage/postgresWorker.js +9 -1
  191. package/dist/storage/postgresWorkerProtocol.d.ts +1 -0
  192. package/dist/storage/taskforceAgentConnectionBindingStore.d.ts +31 -0
  193. package/dist/storage/taskforceAgentConnectionBindingStore.js +84 -0
  194. package/dist/sync/coordinator/localSyncExecutionPermitStore.js +60 -29
  195. package/dist/sync/coordinator/localWorkspaceSyncPendingV2PushProgress.d.ts +10 -0
  196. package/dist/sync/coordinator/localWorkspaceSyncPendingV2PushProgress.js +29 -0
  197. package/dist/sync/coordinator/localWorkspaceSyncRunnerState.d.ts +15 -1
  198. package/dist/sync/coordinator/localWorkspaceSyncRunnerState.js +99 -2
  199. package/dist/sync/coordinator/workspaceSyncCredentialBroker.d.ts +1 -0
  200. package/dist/sync/coordinator/workspaceSyncCredentialBroker.js +33 -4
  201. package/dist/sync/engine/workspaceSyncContentLifecycleAdapter.d.ts +2 -1
  202. package/dist/sync/engine/workspaceSyncContentVersionStore.d.ts +38 -0
  203. package/dist/sync/engine/workspaceSyncContentVersionStore.js +50 -1
  204. package/dist/sync/engine/workspaceSyncEngineLifecyclePolicy.js +6 -6
  205. package/dist/sync/engine/workspaceSyncEnginePushCompletion.d.ts +14 -0
  206. package/dist/sync/engine/workspaceSyncEnginePushCompletion.js +84 -0
  207. package/dist/sync/engine/workspaceSyncEngineRecovery.js +1 -0
  208. package/dist/sync/engine/workspaceSyncEngineRuntime.d.ts +1 -0
  209. package/dist/sync/engine/workspaceSyncEngineRuntime.js +1 -0
  210. package/dist/sync/engine/workspaceSyncEngineServerRunnerOperations.js +112 -38
  211. package/dist/sync/engine/workspaceSyncEngineServerSnapshotReader.js +6 -0
  212. package/dist/sync/engine/workspaceSyncEngineTransfers.js +3 -1
  213. package/dist/sync/engine/workspaceSyncV2ChangeDispatcher.d.ts +1 -0
  214. package/dist/sync/engine/workspaceSyncV2ChangeDispatcher.js +29 -0
  215. package/dist/sync/syncApplyHandlers.d.ts +2 -0
  216. package/dist/sync/syncApplyHandlers.js +10 -1
  217. package/dist/sync/syncService.d.ts +15 -0
  218. package/dist/sync/syncService.js +83 -18
  219. package/dist/sync/taskforceAgentSyncAuthorization.d.ts +16 -0
  220. package/dist/sync/taskforceAgentSyncAuthorization.js +20 -0
  221. package/dist/sync/v3/combinedFeedCapability.js +4 -0
  222. package/dist/sync/v3/durableInitiativeMutationRouter.js +18 -10
  223. package/dist/sync/v3/durableOperationReplay.d.ts +14 -0
  224. package/dist/sync/v3/durableOperationReplay.js +18 -0
  225. package/dist/sync/v3/durableTaskAttachmentLinksMutationRouter.js +3 -0
  226. package/dist/sync/v3/durableTaskChecklistMutationRouter.d.ts +2 -1
  227. package/dist/sync/v3/durableTaskChecklistMutationRouter.js +58 -15
  228. package/dist/sync/v3/durableTaskCommentMutationRouter.js +3 -0
  229. package/dist/sync/v3/durableTaskHttpRootMutationRouter.d.ts +1 -1
  230. package/dist/sync/v3/durableTaskHttpRootMutationRouter.js +10 -0
  231. package/dist/sync/v3/durableTaxonomyMutationRouter.js +5 -0
  232. package/dist/sync/v3/durableWorkflowRuntimeMutationRouter.d.ts +11 -0
  233. package/dist/sync/v3/durableWorkflowRuntimeMutationRouter.js +39 -10
  234. package/dist/sync/v3/durableWorkstreamMutationRouter.js +18 -10
  235. package/dist/sync/v3/durableWorkstreamTaskOrderMutationRouter.js +16 -5
  236. package/dist/sync/v3/localOutboxDispatchRuntime.js +2 -2
  237. package/dist/sync/v3/localTaskChecklistOutboxHandler.js +16 -2
  238. package/dist/sync/v3/localTaskChecklistOutboxService.d.ts +4 -0
  239. package/dist/sync/v3/localTaskChecklistOutboxService.js +14 -1
  240. package/dist/sync/v3/localTaskStatusOutboxService.d.ts +8 -0
  241. package/dist/sync/v3/localTaskStatusOutboxService.js +219 -12
  242. package/dist/sync/v3/syncDurabilityStore.d.ts +34 -0
  243. package/dist/sync/v3/syncDurabilityStore.js +168 -2
  244. package/dist/sync/v3/taskChecklistMutationService.d.ts +11 -0
  245. package/dist/sync/v3/taskChecklistMutationService.js +44 -1
  246. package/dist/sync/v3/taskStatusMutationService.d.ts +29 -1
  247. package/dist/sync/v3/taskStatusMutationService.js +119 -3
  248. package/dist/sync/v3/workflowAssignmentSync.d.ts +5 -0
  249. package/dist/sync/v3/workflowAssignmentSync.js +27 -0
  250. package/dist/sync/v3/workspaceSyncJournalReader.js +1 -1
  251. package/dist/sync/v3/workspaceSyncOperationRetentionService.d.ts +16 -0
  252. package/dist/sync/v3/workspaceSyncOperationRetentionService.js +83 -0
  253. package/dist/sync/v3/workspaceSyncV3CloudOperationHandler.d.ts +1 -0
  254. package/dist/sync/v3/workspaceSyncV3CloudOperationHandler.js +9 -2
  255. package/dist/sync/v3/workspaceSyncV3CombinedRepairBaseline.d.ts +7 -0
  256. package/dist/sync/v3/workspaceSyncV3CombinedRepairBaseline.js +44 -32
  257. package/dist/sync/v3/workspaceSyncV3CombinedRepairMaterialization.d.ts +9 -5
  258. package/dist/sync/v3/workspaceSyncV3CombinedRepairMaterialization.js +54 -38
  259. package/dist/sync/v3/workspaceSyncV3CombinedRepairSnapshot.d.ts +10 -0
  260. package/dist/sync/v3/workspaceSyncV3CombinedRepairSnapshot.js +70 -31
  261. package/dist/sync/v3/workspaceSyncV3CombinedWireContract.d.ts +2 -1
  262. package/dist/sync/v3/workspaceSyncV3CombinedWireContract.js +16 -0
  263. package/dist/sync/v3/workspaceSyncV3CoverageRegistry.js +6 -0
  264. package/dist/sync/v3/workspaceSyncV3OperationProtocol.d.ts +3 -0
  265. package/dist/sync/v3/workspaceSyncV3OperatorDiagnostics.d.ts +5 -0
  266. package/dist/sync/v3/workspaceSyncV3OperatorDiagnostics.js +36 -2
  267. package/dist/sync/v3/workspaceSyncV3RepairSnapshotRetentionService.d.ts +17 -0
  268. package/dist/sync/v3/workspaceSyncV3RepairSnapshotRetentionService.js +64 -0
  269. package/dist/sync/v3/workspaceSyncV3WorkflowTaskCoverCoverage.d.ts +7 -0
  270. package/dist/sync/v3/workspaceSyncV3WorkflowTaskCoverCoverage.js +33 -0
  271. package/dist/sync/v3/workspaceSyncV3WorkflowTaskCoverWireContract.d.ts +7 -0
  272. package/dist/sync/v3/workspaceSyncV3WorkflowTaskCoverWireContract.js +8 -0
  273. package/dist/sync/workspaceRepair.d.ts +5 -2
  274. package/dist/sync/workspaceRepair.js +161 -6
  275. package/dist/sync/workspaceSyncModel.d.ts +21 -0
  276. package/dist/sync/workspaceSyncModel.js +35 -7
  277. package/dist/sync/workspaceSyncState.d.ts +1 -0
  278. package/dist/sync/workspaceSyncV2SnapshotBuilder.d.ts +6 -0
  279. package/dist/sync/workspaceSyncV2SnapshotBuilder.js +5 -0
  280. package/dist/ui/assets/AiIdentityRosterCard-OcSz1PkK.js +1 -0
  281. package/dist/ui/assets/AiProfilesModule-ByhYW5Xi.js +1 -0
  282. package/dist/ui/assets/{AnnotatedAttachmentWorkspace-B68Wg-RV.js → AnnotatedAttachmentWorkspace-BTM6nIg_.js} +1 -1
  283. package/dist/ui/assets/{AssetTraySortControl-C8Rztyal.js → AssetTraySortControl-DabEG8L4.js} +1 -1
  284. package/dist/ui/assets/{ContextAttachmentManager-Cj3c7X9y.js → ContextAttachmentManager-Coa8yVGM.js} +1 -1
  285. package/dist/ui/assets/{DocumentWorkspace-B5uvzems.js → DocumentWorkspace-BB0qhdix.js} +1 -1
  286. package/dist/ui/assets/{EntityActivityTimeline-BVFvCB5R.js → EntityActivityTimeline-CZ8x4UJE.js} +1 -1
  287. package/dist/ui/assets/{PlanningModule-B5DWQOGz.js → PlanningModule-pRPjR7v5.js} +1 -1
  288. package/dist/ui/assets/{PlansPage-AY4cGWco.js → PlansPage-D86pZSSl.js} +1 -1
  289. package/dist/ui/assets/{TaskContextUpload-DZxTVesW.js → TaskContextUpload-BVIkU9yT.js} +1 -1
  290. package/dist/ui/assets/TaskSettings-Cv1mNhv_.js +12 -0
  291. package/dist/ui/assets/TaskforceAgentsModule-b-8R25cJ.css +1 -0
  292. package/dist/ui/assets/TaskforceAgentsModule-gmH-PD2q.js +24 -0
  293. package/dist/ui/assets/{WorkflowManagerModule-DEr5di_r.js → WorkflowManagerModule-DbfnHJ-f.js} +1 -1
  294. package/dist/ui/assets/index-BZ-hdZSk.css +1 -0
  295. package/dist/ui/assets/index-CTsDBaef.js +7 -0
  296. package/dist/ui/assets/{vendor-icons-D9Lpw-j4.js → vendor-icons-Bsq-mcEn.js} +1 -1
  297. package/dist/ui/branding/logos/letterhead_dark.png +0 -0
  298. package/dist/ui/branding/logos/letterhead_light.png +0 -0
  299. package/dist/ui/branding/logos/signature_dark.png +0 -0
  300. package/dist/ui/branding/logos/signature_light.png +0 -0
  301. package/dist/ui/index.html +3 -3
  302. package/dist/utils/aiProfileDefaultLogo.js +16 -48
  303. package/dist/utils/httpSetCookie.d.ts +1 -0
  304. package/dist/utils/httpSetCookie.js +4 -1
  305. package/dist/utils/localRuntimeUrl.d.ts +1 -0
  306. package/dist/utils/localRuntimeUrl.js +14 -0
  307. package/dist/utils/productLogoRegistry.d.ts +2 -0
  308. package/dist/utils/productLogoRegistry.js +36 -0
  309. package/dist/utils/syncStatusPresentation.d.ts +4 -0
  310. package/dist/utils/syncStatusPresentation.js +17 -0
  311. package/dist/utils/taskEvents.d.ts +2 -0
  312. package/dist/utils/workspaceSyncPresentation.d.ts +1 -1
  313. package/dist/utils/workspaceSyncPresentation.js +23 -17
  314. package/package.json +22 -4
  315. package/dist/ui/assets/AiIdentityRosterCard-BZM4aQnM.js +0 -1
  316. package/dist/ui/assets/AiProfilesModule-BbAEWtHH.js +0 -1
  317. package/dist/ui/assets/TaskSettings-BeWAuyZj.js +0 -12
  318. package/dist/ui/assets/TaskforceAgentsModule-BifCYtjR.js +0 -21
  319. package/dist/ui/assets/TaskforceAgentsModule-D6IC0S7Q.css +0 -1
  320. package/dist/ui/assets/index-I5zhdtgt.js +0 -7
  321. package/dist/ui/assets/index-VRFsx3wz.css +0 -1
@@ -3,12 +3,13 @@ import { serializeInitiativeForSync, serializeWorkstreamForSync } from '../plann
3
3
  import { serializeTaskForSync } from '../taskSyncPayload.js';
4
4
  import { canonicalWorkspaceSyncJson } from './canonicalWorkspaceSyncJson.js';
5
5
  import { WORKSPACE_SYNC_COMBINED_PROJECTION, fingerprintWorkspaceSyncPayload, WORKSPACE_SYNC_CONTRACT_VERSION, WorkspaceSyncRevisionConflictError, } from './syncDurabilityStore.js';
6
- import { buildWorkspaceSyncV3CombinedRepairSnapshot, buildWorkspaceSyncV3CombinedRepairSnapshotFromLockedCandidates, buildWorkspaceSyncV3NestedRepairSnapshot, buildWorkspaceSyncV3PlanningOrderRepairSnapshot, buildWorkspaceSyncV3TaskCoverRepairSnapshot, buildWorkspaceSyncV3WorkflowRepairSnapshot, listWorkspaceSyncV3CombinedRepairCandidates, listWorkspaceSyncV3NestedRepairCandidates, listWorkspaceSyncV3PlanningOrderRepairCandidates, listWorkspaceSyncV3TaskCoverRepairCandidates, listWorkspaceSyncV3WorkflowRepairCandidates, } from './workspaceSyncV3CombinedRepairSnapshot.js';
6
+ import { buildWorkspaceSyncV3CombinedRepairSnapshot, buildWorkspaceSyncV3CombinedRepairSnapshotFromLockedCandidates, buildWorkspaceSyncV3NestedRepairSnapshot, buildWorkspaceSyncV3PlanningOrderRepairSnapshot, buildWorkspaceSyncV3TaskCoverRepairSnapshot, buildWorkspaceSyncV3WorkflowRepairSnapshot, buildWorkspaceSyncV3WorkflowTaskCoverRepairSnapshot, listWorkspaceSyncV3CombinedRepairCandidates, listWorkspaceSyncV3NestedRepairCandidates, listWorkspaceSyncV3PlanningOrderRepairCandidates, listWorkspaceSyncV3TaskCoverRepairCandidates, listWorkspaceSyncV3WorkflowRepairCandidates, listWorkspaceSyncV3WorkflowTaskCoverRepairCandidates, } from './workspaceSyncV3CombinedRepairSnapshot.js';
7
7
  import { WORKSPACE_SYNC_V3_COMBINED_COVERAGE_PROFILE } from './workspaceSyncV3CombinedCoverage.js';
8
8
  import { WORKSPACE_SYNC_V3_NESTED_COVERAGE_PROFILE } from './workspaceSyncV3NestedCoverage.js';
9
9
  import { WORKSPACE_SYNC_V3_WORKFLOW_COVERAGE_PROFILE } from './workspaceSyncV3WorkflowCoverage.js';
10
10
  import { WORKSPACE_SYNC_V3_PLANNING_ORDER_COVERAGE_PROFILE } from './workspaceSyncV3PlanningOrderCoverage.js';
11
11
  import { WORKSPACE_SYNC_V3_TASK_COVER_COVERAGE_PROFILE } from './workspaceSyncV3TaskCoverCoverage.js';
12
+ import { WORKSPACE_SYNC_V3_WORKFLOW_TASK_COVER_COVERAGE_PROFILE } from './workspaceSyncV3WorkflowTaskCoverCoverage.js';
12
13
  import { serializeWorkspaceSyncV3TaskAttachmentLinksPayload, serializeWorkspaceSyncV3TaskCommentsPayload, } from './workspaceSyncV3NestedTaskCodecs.js';
13
14
  import { projectWorkspaceSyncV3NestedTaskJournalRow } from './workspaceSyncV3NestedTaskProjection.js';
14
15
  import { serializeTaskRelationshipForSync } from './workspaceSyncV3TaskRelationshipProjection.js';
@@ -261,15 +262,17 @@ export function prepareWorkspaceSyncV3CombinedRepairSnapshot(input) {
261
262
  `).get(tenantId, workspaceId, now);
262
263
  sequence(lock?.last_sequence);
263
264
  const lockCompletedAt = Date.now();
264
- const candidates = input.workflowCoverage
265
- ? listWorkspaceSyncV3WorkflowRepairCandidates(input.core, workspaceId)
266
- : input.taskCoverCoverage
267
- ? listWorkspaceSyncV3TaskCoverRepairCandidates(input.core, workspaceId)
268
- : input.planningOrderCoverage
269
- ? listWorkspaceSyncV3PlanningOrderRepairCandidates(input.core, workspaceId)
270
- : input.nestedCoverage
271
- ? listWorkspaceSyncV3NestedRepairCandidates(input.core, workspaceId)
272
- : listWorkspaceSyncV3CombinedRepairCandidates(input.core, workspaceId);
265
+ const candidates = input.workflowTaskCoverCoverage
266
+ ? listWorkspaceSyncV3WorkflowTaskCoverRepairCandidates(input.core, workspaceId)
267
+ : input.workflowCoverage
268
+ ? listWorkspaceSyncV3WorkflowRepairCandidates(input.core, workspaceId)
269
+ : input.taskCoverCoverage
270
+ ? listWorkspaceSyncV3TaskCoverRepairCandidates(input.core, workspaceId)
271
+ : input.planningOrderCoverage
272
+ ? listWorkspaceSyncV3PlanningOrderRepairCandidates(input.core, workspaceId)
273
+ : input.nestedCoverage
274
+ ? listWorkspaceSyncV3NestedRepairCandidates(input.core, workspaceId)
275
+ : listWorkspaceSyncV3CombinedRepairCandidates(input.core, workspaceId);
273
276
  const inventoryCompletedAt = Date.now();
274
277
  const keys = candidates.map((candidate) => `${candidate.domain}\0${candidate.entityId}`);
275
278
  if (new Set(keys).size !== keys.length)
@@ -551,15 +554,17 @@ export function prepareWorkspaceSyncV3CombinedRepairSnapshot(input) {
551
554
  throw repairConflict('legacy-nested-repair-raced', repair.candidate);
552
555
  }
553
556
  const baselineWritesCompletedAt = Date.now();
554
- const profile = input.workflowCoverage
555
- ? WORKSPACE_SYNC_V3_WORKFLOW_COVERAGE_PROFILE
556
- : input.taskCoverCoverage
557
- ? WORKSPACE_SYNC_V3_TASK_COVER_COVERAGE_PROFILE
558
- : input.planningOrderCoverage
559
- ? WORKSPACE_SYNC_V3_PLANNING_ORDER_COVERAGE_PROFILE
560
- : input.nestedCoverage
561
- ? WORKSPACE_SYNC_V3_NESTED_COVERAGE_PROFILE
562
- : WORKSPACE_SYNC_V3_COMBINED_COVERAGE_PROFILE;
557
+ const profile = input.workflowTaskCoverCoverage
558
+ ? WORKSPACE_SYNC_V3_WORKFLOW_TASK_COVER_COVERAGE_PROFILE
559
+ : input.workflowCoverage
560
+ ? WORKSPACE_SYNC_V3_WORKFLOW_COVERAGE_PROFILE
561
+ : input.taskCoverCoverage
562
+ ? WORKSPACE_SYNC_V3_TASK_COVER_COVERAGE_PROFILE
563
+ : input.planningOrderCoverage
564
+ ? WORKSPACE_SYNC_V3_PLANNING_ORDER_COVERAGE_PROFILE
565
+ : input.nestedCoverage
566
+ ? WORKSPACE_SYNC_V3_NESTED_COVERAGE_PROFILE
567
+ : WORKSPACE_SYNC_V3_COMBINED_COVERAGE_PROFILE;
563
568
  const activeOwner = db.prepare(`
564
569
  SELECT 1 AS active
565
570
  FROM workspace_sync_projection_state
@@ -580,28 +585,32 @@ export function prepareWorkspaceSyncV3CombinedRepairSnapshot(input) {
580
585
  inventory: candidates,
581
586
  nestedCoverage: input.nestedCoverage === true,
582
587
  workflowCoverage: input.workflowCoverage === true,
588
+ workflowTaskCoverCoverage: input.workflowTaskCoverCoverage === true,
583
589
  planningOrderCoverage: input.planningOrderCoverage === true,
584
590
  taskCoverCoverage: input.taskCoverCoverage === true,
585
591
  })
586
- : input.workflowCoverage
587
- ? buildWorkspaceSyncV3WorkflowRepairSnapshot({ core: input.core, workspaceId })
588
- : input.taskCoverCoverage
589
- ? buildWorkspaceSyncV3TaskCoverRepairSnapshot({ core: input.core, workspaceId })
590
- : input.planningOrderCoverage
591
- ? buildWorkspaceSyncV3PlanningOrderRepairSnapshot({ core: input.core, workspaceId })
592
- : input.nestedCoverage
593
- ? buildWorkspaceSyncV3NestedRepairSnapshot({ core: input.core, workspaceId })
594
- : buildWorkspaceSyncV3CombinedRepairSnapshot({ core: input.core, workspaceId });
592
+ : input.workflowTaskCoverCoverage
593
+ ? buildWorkspaceSyncV3WorkflowTaskCoverRepairSnapshot({ core: input.core, workspaceId })
594
+ : input.workflowCoverage
595
+ ? buildWorkspaceSyncV3WorkflowRepairSnapshot({ core: input.core, workspaceId })
596
+ : input.taskCoverCoverage
597
+ ? buildWorkspaceSyncV3TaskCoverRepairSnapshot({ core: input.core, workspaceId })
598
+ : input.planningOrderCoverage
599
+ ? buildWorkspaceSyncV3PlanningOrderRepairSnapshot({ core: input.core, workspaceId })
600
+ : input.nestedCoverage
601
+ ? buildWorkspaceSyncV3NestedRepairSnapshot({ core: input.core, workspaceId })
602
+ : buildWorkspaceSyncV3CombinedRepairSnapshot({ core: input.core, workspaceId });
595
603
  const snapshotCompletedAt = Date.now();
596
604
  if (snapshot.snapshotSequence !== highWatermark) {
597
605
  throw new Error('Combined repair baseline snapshot sequence changed while locked.');
598
606
  }
599
607
  console.info('[Taskforce Sync Repair Baseline Timing]', JSON.stringify({
600
608
  workspaceId,
601
- coverage: input.workflowCoverage ? 'workflow'
602
- : input.taskCoverCoverage ? 'task-cover'
603
- : input.planningOrderCoverage ? 'planning-order'
604
- : input.nestedCoverage ? 'nested' : 'combined',
609
+ coverage: input.workflowTaskCoverCoverage ? 'workflow-task-cover'
610
+ : input.workflowCoverage ? 'workflow'
611
+ : input.taskCoverCoverage ? 'task-cover'
612
+ : input.planningOrderCoverage ? 'planning-order'
613
+ : input.nestedCoverage ? 'nested' : 'combined',
605
614
  candidates: candidates.length,
606
615
  lock: lockCompletedAt - startedAt,
607
616
  inventory: inventoryCompletedAt - lockCompletedAt,
@@ -627,6 +636,9 @@ export function prepareWorkspaceSyncV3PlanningOrderRepairSnapshot(input) {
627
636
  export function prepareWorkspaceSyncV3TaskCoverRepairSnapshot(input) {
628
637
  return prepareWorkspaceSyncV3CombinedRepairSnapshot({ ...input, taskCoverCoverage: true });
629
638
  }
639
+ export function prepareWorkspaceSyncV3WorkflowTaskCoverRepairSnapshot(input) {
640
+ return prepareWorkspaceSyncV3CombinedRepairSnapshot({ ...input, workflowTaskCoverCoverage: true });
641
+ }
630
642
  export function ensureWorkspaceSyncV3CombinedRepairBaselines(input) {
631
643
  const { snapshot: _snapshot, ...result } = prepareWorkspaceSyncV3CombinedRepairSnapshot(input);
632
644
  return result;
@@ -4,6 +4,7 @@ import { WORKSPACE_SYNC_V3_NESTED_COVERAGE_PROFILE } from './workspaceSyncV3Nest
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
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';
7
8
  import { type WorkspaceSyncV3FeedEntry } from './workspaceSyncV3Feed.js';
8
9
  import { type WorkspaceSyncV3FeedCursorKeyring } from './workspaceSyncV3FeedCursorKeys.js';
9
10
  export interface WorkspaceSyncV3CombinedRepairCursor {
@@ -22,7 +23,7 @@ export interface WorkspaceSyncV3CombinedRepairPage {
22
23
  success: true;
23
24
  protocolVersion: 3;
24
25
  workspaceId: string;
25
- 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;
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;
26
27
  snapshotId: string;
27
28
  snapshotSequence: string;
28
29
  expiresAt: string;
@@ -49,6 +50,7 @@ export declare function decodeWorkspaceSyncV3NestedRepairCursor(raw: string | nu
49
50
  export declare function decodeWorkspaceSyncV3WorkflowRepairCursor(raw: string | null | undefined, keyring: WorkspaceSyncV3FeedCursorKeyring): WorkspaceSyncV3CombinedRepairCursor | null;
50
51
  export declare function decodeWorkspaceSyncV3PlanningOrderRepairCursor(raw: string | null | undefined, keyring: WorkspaceSyncV3FeedCursorKeyring): WorkspaceSyncV3CombinedRepairCursor | null;
51
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;
52
54
  export declare const WORKSPACE_SYNC_REPAIR_SNAPSHOT_CLEANUP_BATCH_SIZE = 500;
53
55
  export declare function buildWorkspaceSyncV3CombinedRepairPage(input: {
54
56
  core: TaskforceCore;
@@ -61,11 +63,13 @@ export declare function buildWorkspaceSyncV3CombinedRepairPage(input: {
61
63
  now?: string;
62
64
  nestedCoverage?: boolean;
63
65
  workflowCoverage?: boolean;
66
+ workflowTaskCoverCoverage?: boolean;
64
67
  planningOrderCoverage?: boolean;
65
68
  taskCoverCoverage?: boolean;
66
69
  coveredLegacyWritesFenced?: boolean;
67
70
  }): WorkspaceSyncV3CombinedRepairPage;
68
- export declare function buildWorkspaceSyncV3NestedRepairPage(input: Omit<Parameters<typeof buildWorkspaceSyncV3CombinedRepairPage>[0], 'nestedCoverage' | 'workflowCoverage' | 'planningOrderCoverage' | 'taskCoverCoverage'>): WorkspaceSyncV3CombinedRepairPage;
69
- export declare function buildWorkspaceSyncV3WorkflowRepairPage(input: Omit<Parameters<typeof buildWorkspaceSyncV3CombinedRepairPage>[0], 'nestedCoverage' | 'workflowCoverage' | 'planningOrderCoverage' | 'taskCoverCoverage'>): WorkspaceSyncV3CombinedRepairPage;
70
- export declare function buildWorkspaceSyncV3PlanningOrderRepairPage(input: Omit<Parameters<typeof buildWorkspaceSyncV3CombinedRepairPage>[0], 'nestedCoverage' | 'workflowCoverage' | 'planningOrderCoverage' | 'taskCoverCoverage'>): WorkspaceSyncV3CombinedRepairPage;
71
- export declare function buildWorkspaceSyncV3TaskCoverRepairPage(input: Omit<Parameters<typeof buildWorkspaceSyncV3CombinedRepairPage>[0], 'nestedCoverage' | 'workflowCoverage' | 'planningOrderCoverage' | 'taskCoverCoverage'>): 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,12 +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, prepareWorkspaceSyncV3TaskCoverRepairSnapshot, 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
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';
10
11
  import { createWorkspaceSyncV3FeedResumeCursor, WorkspaceSyncV3FeedOperationTooLargeError, } from './workspaceSyncV3Feed.js';
11
12
  import { findWorkspaceSyncV3FeedCursorVerificationKey, } from './workspaceSyncV3FeedCursorKeys.js';
12
13
  import { WORKSPACE_SYNC_COMBINED_PROJECTION, WORKSPACE_SYNC_CONTRACT_VERSION, } from './syncDurabilityStore.js';
@@ -99,16 +100,21 @@ export function decodeWorkspaceSyncV3PlanningOrderRepairCursor(raw, keyring) {
99
100
  export function decodeWorkspaceSyncV3TaskCoverRepairCursor(raw, keyring) {
100
101
  return decodeRepairCursor(raw, keyring, WORKSPACE_SYNC_V3_TASK_COVER_COVERAGE_PROFILE);
101
102
  }
103
+ export function decodeWorkspaceSyncV3WorkflowTaskCoverRepairCursor(raw, keyring) {
104
+ return decodeRepairCursor(raw, keyring, WORKSPACE_SYNC_V3_WORKFLOW_TASK_COVER_COVERAGE_PROFILE);
105
+ }
102
106
  function repairProfile(coverage) {
103
- return coverage === 'workflow'
104
- ? WORKSPACE_SYNC_V3_WORKFLOW_COVERAGE_PROFILE
105
- : coverage === 'task-cover'
106
- ? WORKSPACE_SYNC_V3_TASK_COVER_COVERAGE_PROFILE
107
- : coverage === 'planning-order'
108
- ? WORKSPACE_SYNC_V3_PLANNING_ORDER_COVERAGE_PROFILE
109
- : coverage === 'nested'
110
- ? WORKSPACE_SYNC_V3_NESTED_COVERAGE_PROFILE
111
- : WORKSPACE_SYNC_V3_COMBINED_COVERAGE_PROFILE;
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;
112
118
  }
113
119
  function containsCurrentEntityEventInventory(input) {
114
120
  if (input.coverage === 'combined')
@@ -355,15 +361,17 @@ function mapEntry(row, coverage) {
355
361
  payloadFingerprint: String(row.payload_fingerprint || ''), payload,
356
362
  occurredAt: timestamp(row.occurred_at, 'Combined repair occurrence time'),
357
363
  };
358
- (coverage === 'workflow'
359
- ? validateWorkspaceSyncV3WorkflowCoverageFeedEntry
360
- : coverage === 'task-cover'
361
- ? validateWorkspaceSyncV3TaskCoverCoverageFeedEntry
362
- : coverage === 'planning-order'
363
- ? validateWorkspaceSyncV3PlanningOrderCoverageFeedEntry
364
- : coverage === 'nested'
365
- ? validateWorkspaceSyncV3NestedCoverageFeedEntry
366
- : validateWorkspaceSyncV3CombinedFeedEntry)(entry);
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);
367
375
  return entry;
368
376
  }
369
377
  function finalizePage(input) {
@@ -420,15 +428,17 @@ export function buildWorkspaceSyncV3CombinedRepairPage(input) {
420
428
  const pageSize = Math.max(1, Math.min(MAX_PAGE_SIZE, Math.floor(input.pageSize || DEFAULT_PAGE_SIZE)));
421
429
  const maxResponseBytes = Math.max(1024, Math.min(8 * 1024 * 1024, Math.floor(input.maxResponseBytes || DEFAULT_MAX_RESPONSE_BYTES)));
422
430
  const db = input.core.getDatabaseAdapter();
423
- const coverage = input.workflowCoverage
424
- ? 'workflow'
425
- : input.taskCoverCoverage
426
- ? 'task-cover'
427
- : input.planningOrderCoverage
428
- ? 'planning-order'
429
- : input.nestedCoverage
430
- ? 'nested'
431
- : 'combined';
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';
432
442
  if (input.cursor && Date.parse(input.cursor.expiresAt) <= Date.parse(now)) {
433
443
  cleanupExpiredBestEffort(input.core, tenantId, workspaceId, now);
434
444
  throw new WorkspaceSyncV3CombinedRepairSnapshotUnavailableError();
@@ -467,20 +477,23 @@ export function buildWorkspaceSyncV3CombinedRepairPage(input) {
467
477
  return { metadata: reusable, reused: true,
468
478
  insertedBaselineEntities: 0, insertedBaselineJournalRows: 0 };
469
479
  const repairStartedAt = Date.now();
470
- const prepared = coverage === 'workflow'
471
- ? prepareWorkspaceSyncV3WorkflowRepairSnapshot({ core: input.core, workspaceId, now,
480
+ const prepared = coverage === 'workflow-task-cover'
481
+ ? prepareWorkspaceSyncV3WorkflowTaskCoverRepairSnapshot({ core: input.core, workspaceId, now,
472
482
  coveredLegacyWritesFenced: input.coveredLegacyWritesFenced })
473
- : coverage === 'planning-order'
474
- ? prepareWorkspaceSyncV3PlanningOrderRepairSnapshot({ core: input.core, workspaceId, now,
483
+ : coverage === 'workflow'
484
+ ? prepareWorkspaceSyncV3WorkflowRepairSnapshot({ core: input.core, workspaceId, now,
475
485
  coveredLegacyWritesFenced: input.coveredLegacyWritesFenced })
476
- : coverage === 'task-cover'
477
- ? prepareWorkspaceSyncV3TaskCoverRepairSnapshot({ core: input.core, workspaceId, now,
486
+ : coverage === 'planning-order'
487
+ ? prepareWorkspaceSyncV3PlanningOrderRepairSnapshot({ core: input.core, workspaceId, now,
478
488
  coveredLegacyWritesFenced: input.coveredLegacyWritesFenced })
479
- : coverage === 'nested'
480
- ? prepareWorkspaceSyncV3NestedRepairSnapshot({ core: input.core, workspaceId, now,
489
+ : coverage === 'task-cover'
490
+ ? prepareWorkspaceSyncV3TaskCoverRepairSnapshot({ core: input.core, workspaceId, now,
481
491
  coveredLegacyWritesFenced: input.coveredLegacyWritesFenced })
482
- : prepareWorkspaceSyncV3CombinedRepairSnapshot({ core: input.core, workspaceId, now,
483
- 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 });
484
497
  // Production expiry is sampled at the end of persistence, after
485
498
  // every immutable payload row has committed in the same lock.
486
499
  const materializationStartedAt = input.now
@@ -576,3 +589,6 @@ export function buildWorkspaceSyncV3PlanningOrderRepairPage(input) {
576
589
  export function buildWorkspaceSyncV3TaskCoverRepairPage(input) {
577
590
  return buildWorkspaceSyncV3CombinedRepairPage({ ...input, taskCoverCoverage: true });
578
591
  }
592
+ export function buildWorkspaceSyncV3WorkflowTaskCoverRepairPage(input) {
593
+ return buildWorkspaceSyncV3CombinedRepairPage({ ...input, workflowTaskCoverCoverage: true });
594
+ }
@@ -35,6 +35,8 @@ export declare function listWorkspaceSyncV3NestedRepairCandidates(core: Taskforc
35
35
  export declare function listWorkspaceSyncV3TaskCoverRepairCandidates(core: TaskforceCore, workspaceId: string): WorkspaceSyncV3CombinedRepairCandidate[];
36
36
  /** Candidate v5 inventory. Coverage-v3/v4 inventories intentionally remain unchanged. */
37
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[];
38
40
  /** Candidate v6 inventory. Workflow v5 remains an independent dark contract. */
39
41
  export declare function listWorkspaceSyncV3PlanningOrderRepairCandidates(core: TaskforceCore, workspaceId: string): WorkspaceSyncV3CombinedRepairCandidate[];
40
42
  export declare function buildWorkspaceSyncV3CombinedRepairSnapshot(input: {
@@ -51,6 +53,7 @@ export declare function buildWorkspaceSyncV3CombinedRepairSnapshotFromLockedCand
51
53
  inventory: WorkspaceSyncV3CombinedRepairCandidate[];
52
54
  nestedCoverage?: boolean;
53
55
  workflowCoverage?: boolean;
56
+ workflowTaskCoverCoverage?: boolean;
54
57
  planningOrderCoverage?: boolean;
55
58
  taskCoverCoverage?: boolean;
56
59
  }): {
@@ -85,4 +88,11 @@ export declare function buildWorkspaceSyncV3TaskCoverRepairSnapshot(input: {
85
88
  snapshotSequence: string;
86
89
  entries: WorkspaceSyncV3FeedEntry[];
87
90
  };
91
+ export declare function buildWorkspaceSyncV3WorkflowTaskCoverRepairSnapshot(input: {
92
+ core: TaskforceCore;
93
+ workspaceId: string;
94
+ }): {
95
+ snapshotSequence: string;
96
+ entries: WorkspaceSyncV3FeedEntry[];
97
+ };
88
98
  export {};
@@ -15,6 +15,7 @@ import { projectWorkspaceSyncV3WorkflowRuntimeJournalRow, } from './workspaceSyn
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
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';
18
19
  import { projectWorkspaceSyncV3WorkstreamTaskOrderJournalRow } from './workspaceSyncV3WorkstreamTaskOrderProjection.js';
19
20
  import { serializeWorkstreamTaskOrderForSync } from './workstreamTaskOrderSync.js';
20
21
  import { serializeTaxonomyStateForSync } from './taxonomySyncPayload.js';
@@ -31,6 +32,8 @@ const PLANNING_ORDER_PROJECTION_RANK = new Map(WORKSPACE_SYNC_V3_PLANNING_ORDER_
31
32
  .map((projection, index) => [projection.projectionId, index]));
32
33
  const TASK_COVER_PROJECTION_RANK = new Map(WORKSPACE_SYNC_V3_TASK_COVER_COVERAGE_PROFILE.projections
33
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]));
34
37
  export class WorkspaceSyncV3CombinedRepairBaselineRequiredError extends Error {
35
38
  missing;
36
39
  code = 'WORKSPACE_SYNC_V3_COMBINED_REPAIR_BASELINE_REQUIRED';
@@ -43,15 +46,17 @@ function compareCodeUnits(left, right) {
43
46
  return left < right ? -1 : left > right ? 1 : 0;
44
47
  }
45
48
  function projectionRank(entry, coverage) {
46
- const ranks = coverage === 'workflow'
47
- ? WORKFLOW_PROJECTION_RANK
48
- : coverage === 'task-cover'
49
- ? TASK_COVER_PROJECTION_RANK
50
- : coverage === 'planning-order'
51
- ? PLANNING_ORDER_PROJECTION_RANK
52
- : coverage === 'nested'
53
- ? NESTED_PROJECTION_RANK
54
- : COMBINED_PROJECTION_RANK;
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;
55
60
  const rank = ranks.get(entry.projection);
56
61
  if (rank === undefined)
57
62
  throw new Error(`Unsupported combined repair projection: ${entry.projection}.`);
@@ -223,8 +228,7 @@ export function listWorkspaceSyncV3NestedRepairCandidates(core, workspaceId) {
223
228
  export function listWorkspaceSyncV3TaskCoverRepairCandidates(core, workspaceId) {
224
229
  return listNestedRepairCandidates(core, workspaceId, 'task-attachment-links/full-v2');
225
230
  }
226
- /** Candidate v5 inventory. Coverage-v3/v4 inventories intentionally remain unchanged. */
227
- export function listWorkspaceSyncV3WorkflowRepairCandidates(core, workspaceId) {
231
+ function listWorkflowRuntimeRepairCandidates(core, workspaceId) {
228
232
  const workflowStore = new WorkflowStore(core.getDatabaseAdapter(), core.getTenantId());
229
233
  const executions = workflowStore.listExecutions(workspaceId).map((execution) => {
230
234
  const projected = workflowStore.getProjectedExecution(workspaceId, execution.id);
@@ -265,12 +269,25 @@ export function listWorkspaceSyncV3WorkflowRepairCandidates(core, workspaceId) {
265
269
  };
266
270
  });
267
271
  return [
268
- ...listWorkspaceSyncV3NestedRepairCandidates(core, workspaceId),
269
272
  ...definitions.values(),
270
273
  ...executionCandidates,
271
274
  ...events,
272
275
  ];
273
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
+ }
274
291
  /** Candidate v6 inventory. Workflow v5 remains an independent dark contract. */
275
292
  export function listWorkspaceSyncV3PlanningOrderRepairCandidates(core, workspaceId) {
276
293
  const nested = listWorkspaceSyncV3NestedRepairCandidates(core, workspaceId);
@@ -490,26 +507,30 @@ export function buildWorkspaceSyncV3CombinedRepairSnapshotFromLockedCandidates(i
490
507
  .map((candidate) => candidate.entityId);
491
508
  const taskFullProvenance = readTaskFullProvenanceRows({ db, tenantId, workspaceId, taskIds: remappedTaskIds });
492
509
  const provenanceCompletedAt = Date.now();
493
- const entries = inventory.map((candidate) => entry(candidate, rows.get(`${candidate.domain}\0${candidate.entityId}`), taskFullProvenance, input.taskCoverCoverage === true));
510
+ const entries = inventory.map((candidate) => entry(candidate, rows.get(`${candidate.domain}\0${candidate.entityId}`), taskFullProvenance, input.taskCoverCoverage === true || input.workflowTaskCoverCoverage === true));
494
511
  const entriesCompletedAt = Date.now();
495
- const coverage = input.workflowCoverage
496
- ? 'workflow'
497
- : input.taskCoverCoverage
498
- ? 'task-cover'
499
- : input.planningOrderCoverage
500
- ? 'planning-order'
501
- : input.nestedCoverage
502
- ? 'nested'
503
- : 'combined';
504
- entries.forEach(coverage === 'workflow'
505
- ? validateWorkspaceSyncV3WorkflowCoverageFeedEntry
506
- : coverage === 'task-cover'
507
- ? validateWorkspaceSyncV3TaskCoverCoverageFeedEntry
508
- : coverage === 'planning-order'
509
- ? validateWorkspaceSyncV3PlanningOrderCoverageFeedEntry
510
- : coverage === 'nested'
511
- ? validateWorkspaceSyncV3NestedCoverageFeedEntry
512
- : validateWorkspaceSyncV3CombinedFeedEntry);
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);
513
534
  const validationCompletedAt = Date.now();
514
535
  if (entries.some((candidate) => BigInt(candidate.sequence) > BigInt(snapshotSequence))) {
515
536
  throw new Error('Combined repair entry exceeds the locked snapshot sequence.');
@@ -601,3 +622,21 @@ export function buildWorkspaceSyncV3TaskCoverRepairSnapshot(input) {
601
622
  });
602
623
  })();
603
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
+ }
@@ -3,6 +3,7 @@ import { WORKSPACE_SYNC_V3_NESTED_COVERAGE_SELECTOR } from './workspaceSyncV3Nes
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
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';
6
7
  export declare const WORKSPACE_SYNC_V3_COMBINED_COVERAGE_SELECTOR: Readonly<{
7
8
  coverageProfileId: "task-planning-metadata";
8
9
  coverageVersion: 3;
@@ -10,7 +11,7 @@ export declare const WORKSPACE_SYNC_V3_COMBINED_COVERAGE_SELECTOR: Readonly<{
10
11
  }>;
11
12
  export declare const WORKSPACE_SYNC_V3_COMBINED_CAPABILITY_VERSION: 1;
12
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"];
13
- 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;
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;
14
15
  export interface WorkspaceSyncV3CombinedWireContract {
15
16
  coverage: WorkspaceSyncV3CombinedCoverageSelector;
16
17
  excludedProjections: readonly WorkspaceSyncV2ProjectionExclusion[];
@@ -2,6 +2,7 @@ import { WORKSPACE_SYNC_V3_NESTED_COVERAGE_SELECTOR, WORKSPACE_SYNC_V3_NESTED_EX
2
2
  import { WORKSPACE_SYNC_V3_WORKFLOW_COVERAGE_SELECTOR, WORKSPACE_SYNC_V3_WORKFLOW_EXCLUDED_V2_PROJECTIONS, } from './workspaceSyncV3WorkflowWireContract.js';
3
3
  import { WORKSPACE_SYNC_V3_PLANNING_ORDER_COVERAGE_SELECTOR, WORKSPACE_SYNC_V3_PLANNING_ORDER_EXCLUDED_V2_PROJECTIONS, } from './workspaceSyncV3PlanningOrderWireContract.js';
4
4
  import { WORKSPACE_SYNC_V3_TASK_COVER_COVERAGE_SELECTOR, WORKSPACE_SYNC_V3_TASK_COVER_EXCLUDED_V2_PROJECTIONS, } from './workspaceSyncV3TaskCoverWireContract.js';
5
+ import { WORKSPACE_SYNC_V3_WORKFLOW_TASK_COVER_COVERAGE_SELECTOR, WORKSPACE_SYNC_V3_WORKFLOW_TASK_COVER_EXCLUDED_V2_PROJECTIONS, } from './workspaceSyncV3WorkflowTaskCoverWireContract.js';
5
6
  export const WORKSPACE_SYNC_V3_COMBINED_COVERAGE_SELECTOR = Object.freeze({
6
7
  coverageProfileId: 'task-planning-metadata',
7
8
  coverageVersion: 3,
@@ -79,9 +80,24 @@ export function resolveWorkspaceSyncV3CombinedWireContract(input) {
79
80
  taskCoverProjectionRequired: true,
80
81
  };
81
82
  }
83
+ if (profileId === WORKSPACE_SYNC_V3_WORKFLOW_TASK_COVER_COVERAGE_SELECTOR.coverageProfileId
84
+ && version === WORKSPACE_SYNC_V3_WORKFLOW_TASK_COVER_COVERAGE_SELECTOR.coverageVersion
85
+ && digest === WORKSPACE_SYNC_V3_WORKFLOW_TASK_COVER_COVERAGE_SELECTOR.coverageDigest) {
86
+ return {
87
+ coverage: WORKSPACE_SYNC_V3_WORKFLOW_TASK_COVER_COVERAGE_SELECTOR,
88
+ excludedProjections: WORKSPACE_SYNC_V3_WORKFLOW_TASK_COVER_EXCLUDED_V2_PROJECTIONS,
89
+ nestedWriterPrerequisitesRequired: true,
90
+ workflowWriterPrerequisitesRequired: true,
91
+ planningOrderWriterPrerequisitesRequired: false,
92
+ taskCoverProjectionRequired: true,
93
+ };
94
+ }
82
95
  return null;
83
96
  }
84
97
  export function resolveWorkspaceSyncV3CombinedCoverageForExclusions(exclusions) {
98
+ // V8 deliberately shares V7's v2 exclusions. Exclusions alone therefore
99
+ // identify the active V7 boundary; V8 activation must carry its exact
100
+ // persisted selector instead of using this legacy reverse lookup.
85
101
  for (const coverage of [
86
102
  WORKSPACE_SYNC_V3_COMBINED_COVERAGE_SELECTOR,
87
103
  WORKSPACE_SYNC_V3_NESTED_COVERAGE_SELECTOR,
@@ -3,6 +3,7 @@ import { WORKSPACE_SYNC_V3_NESTED_COVERAGE_POLICY, WORKSPACE_SYNC_V3_NESTED_COVE
3
3
  import { WORKSPACE_SYNC_V3_WORKFLOW_COVERAGE_POLICY, WORKSPACE_SYNC_V3_WORKFLOW_COVERAGE_PROFILE, validateWorkspaceSyncV3WorkflowCoverageFeedEntry, } from './workspaceSyncV3WorkflowCoverage.js';
4
4
  import { WORKSPACE_SYNC_V3_PLANNING_ORDER_COVERAGE_POLICY, WORKSPACE_SYNC_V3_PLANNING_ORDER_COVERAGE_PROFILE, validateWorkspaceSyncV3PlanningOrderCoverageFeedEntry, } from './workspaceSyncV3PlanningOrderCoverage.js';
5
5
  import { WORKSPACE_SYNC_V3_TASK_COVER_COVERAGE_POLICY, WORKSPACE_SYNC_V3_TASK_COVER_COVERAGE_PROFILE, validateWorkspaceSyncV3TaskCoverCoverageFeedEntry, } from './workspaceSyncV3TaskCoverCoverage.js';
6
+ import { WORKSPACE_SYNC_V3_WORKFLOW_TASK_COVER_COVERAGE_POLICY, WORKSPACE_SYNC_V3_WORKFLOW_TASK_COVER_COVERAGE_PROFILE, validateWorkspaceSyncV3WorkflowTaskCoverCoverageFeedEntry, } from './workspaceSyncV3WorkflowTaskCoverCoverage.js';
6
7
  export const WORKSPACE_SYNC_V3_REGISTERED_COVERAGES = Object.freeze([
7
8
  Object.freeze({
8
9
  profile: WORKSPACE_SYNC_V3_COMBINED_COVERAGE_PROFILE,
@@ -29,6 +30,11 @@ export const WORKSPACE_SYNC_V3_REGISTERED_COVERAGES = Object.freeze([
29
30
  policy: WORKSPACE_SYNC_V3_TASK_COVER_COVERAGE_POLICY,
30
31
  validateEntry: validateWorkspaceSyncV3TaskCoverCoverageFeedEntry,
31
32
  }),
33
+ Object.freeze({
34
+ profile: WORKSPACE_SYNC_V3_WORKFLOW_TASK_COVER_COVERAGE_PROFILE,
35
+ policy: WORKSPACE_SYNC_V3_WORKFLOW_TASK_COVER_COVERAGE_POLICY,
36
+ validateEntry: validateWorkspaceSyncV3WorkflowTaskCoverCoverageFeedEntry,
37
+ }),
32
38
  ]);
33
39
  export function resolveWorkspaceSyncV3RegisteredCoverage(input) {
34
40
  const profileId = String(input.coverageProfileId || '').trim();
@@ -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;
@@ -115,6 +116,8 @@ export type WorkspaceSyncV3TaskChecklistEnvelope = WorkspaceSyncV3OperationEnvel
115
116
  baseLifecycleRevision: '0';
116
117
  payload: {
117
118
  items: ChecklistItem[];
119
+ expectedDetailRevision?: string;
120
+ itemUpdateIntent?: TaskChecklistItemUpdateIntent;
118
121
  originActor?: WorkspaceSyncV3OriginActor;
119
122
  };
120
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
  };