@taskforcehq/taskforce 0.3.326 → 0.3.328

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 (1382) hide show
  1. package/LICENSE.md +68 -0
  2. package/README.md +19 -0
  3. package/dist/Taskforce.module.css +2168 -585
  4. package/dist/TaskforceCore.d.ts +1 -0
  5. package/dist/TaskforceCore.js +65 -22
  6. package/dist/annotatedAttachments/AnnotatedAttachmentSessionStore.d.ts +1 -0
  7. package/dist/annotatedAttachments/AnnotatedAttachmentSessionStore.js +3 -2
  8. package/dist/annotatedAttachments/commandService.d.ts +68 -0
  9. package/dist/annotatedAttachments/commandService.js +348 -0
  10. package/dist/annotatedAttachments/service.d.ts +2 -0
  11. package/dist/annotatedAttachments/service.js +13 -12
  12. package/dist/cli.js +158 -9
  13. package/dist/cliOpenPort.d.ts +1 -0
  14. package/dist/cliOpenPort.js +4 -0
  15. package/dist/compat/taskforceAgentDefinitionCompat.d.ts +12 -0
  16. package/dist/compat/taskforceAgentDefinitionCompat.js +25 -0
  17. package/dist/compat/workspaceSyncCompat.js +6 -2
  18. package/dist/compat/workspaceSyncV3CombinedCoverageCompat.d.ts +6 -0
  19. package/dist/compat/workspaceSyncV3CombinedCoverageCompat.js +22 -0
  20. package/dist/compat/workspaceSyncV3OperationCompat.d.ts +7 -0
  21. package/dist/compat/workspaceSyncV3OperationCompat.js +30 -0
  22. package/dist/components/activity/EntityActivityTimeline.d.ts +10 -2
  23. package/dist/components/activity/EntityActivityTimeline.js +83 -35
  24. package/dist/components/context/AttachmentPreviewHost.d.ts +6 -0
  25. package/dist/components/context/AttachmentPreviewHost.js +222 -0
  26. package/dist/components/context/ContextAttachmentManager.d.ts +7 -0
  27. package/dist/components/context/ContextAttachmentManager.js +514 -208
  28. package/dist/components/features/AiProfilesModule.d.ts +24 -0
  29. package/dist/components/features/AiProfilesModule.js +744 -0
  30. package/dist/components/features/AnnotatedAttachmentWorkspace.d.ts +4 -1
  31. package/dist/components/features/AnnotatedAttachmentWorkspace.js +351 -79
  32. package/dist/components/features/DocumentGenerateModal.js +23 -5
  33. package/dist/components/features/DocumentIndex.d.ts +19 -1
  34. package/dist/components/features/DocumentIndex.js +104 -15
  35. package/dist/components/features/DocumentViewer.d.ts +9 -1
  36. package/dist/components/features/DocumentViewer.js +721 -100
  37. package/dist/components/features/DocumentWorkspace.d.ts +37 -2
  38. package/dist/components/features/DocumentWorkspace.js +21 -6
  39. package/dist/components/features/TaskSettings.d.ts +6 -27
  40. package/dist/components/features/TaskSettings.js +232 -143
  41. package/dist/components/features/TaskforceAgentsModule.d.ts +36 -0
  42. package/dist/components/features/TaskforceAgentsModule.js +1782 -0
  43. package/dist/components/features/agentBehavior/AgentBehaviorManagerShared.d.ts +94 -0
  44. package/dist/components/features/agentBehavior/AgentBehaviorManagerShared.js +70 -0
  45. package/dist/components/features/agentCapabilities/AgentCapabilitiesPrototype.d.ts +65 -0
  46. package/dist/components/features/agentCapabilities/AgentCapabilitiesPrototype.js +115 -0
  47. package/dist/components/features/agentRoles/RoleManagerPanel.d.ts +4 -0
  48. package/dist/components/features/agentRoles/RoleManagerPanel.js +382 -0
  49. package/dist/components/features/agentSkills/SkillManagerPanel.d.ts +5 -0
  50. package/dist/components/features/agentSkills/SkillManagerPanel.js +355 -0
  51. package/dist/components/features/documentWorkspaceModel.d.ts +16 -4
  52. package/dist/components/features/documentWorkspaceModel.js +30 -5
  53. package/dist/components/features/planning/PlanningArchiveConfirmation.d.ts +9 -0
  54. package/dist/components/features/planning/PlanningArchiveConfirmation.js +19 -0
  55. package/dist/components/features/planning/PlanningCardIdentity.d.ts +12 -0
  56. package/dist/components/features/planning/PlanningCardIdentity.js +44 -0
  57. package/dist/components/features/planning/PlanningEntityDetails.d.ts +36 -0
  58. package/dist/components/features/planning/PlanningEntityDetails.js +131 -0
  59. package/dist/components/features/planning/PlanningEntitySummary.d.ts +46 -0
  60. package/dist/components/features/planning/PlanningEntitySummary.js +98 -0
  61. package/dist/components/features/planning/PlanningLinkPicker.d.ts +11 -0
  62. package/dist/components/features/planning/PlanningLinkPicker.js +28 -0
  63. package/dist/components/features/planning/PlanningModule.d.ts +6 -0
  64. package/dist/components/features/planning/PlanningModule.js +588 -0
  65. package/dist/components/features/planning/PlanningOwnerDropdown.d.ts +27 -0
  66. package/dist/components/features/planning/PlanningOwnerDropdown.js +80 -0
  67. package/dist/components/features/planning/PlanningTaskArrangeControl.d.ts +5 -0
  68. package/dist/components/features/planning/PlanningTaskArrangeControl.js +11 -0
  69. package/dist/components/features/planning/PlanningTaskCard.d.ts +20 -0
  70. package/dist/components/features/planning/PlanningTaskCard.js +26 -0
  71. package/dist/components/features/planning/PlanningTaskOrderList.d.ts +10 -0
  72. package/dist/components/features/planning/PlanningTaskOrderList.js +52 -0
  73. package/dist/components/features/planning/PlanningUnlinkConfirmation.d.ts +15 -0
  74. package/dist/components/features/planning/PlanningUnlinkConfirmation.js +7 -0
  75. package/dist/components/features/planning/PlanningVisualIdentity.d.ts +14 -0
  76. package/dist/components/features/planning/PlanningVisualIdentity.js +106 -0
  77. package/dist/components/features/planning/planningCreateIntent.d.ts +10 -0
  78. package/dist/components/features/planning/planningCreateIntent.js +16 -0
  79. package/dist/components/features/planning/planningNavigator.d.ts +33 -0
  80. package/dist/components/features/planning/planningNavigator.js +96 -0
  81. package/dist/components/features/planning/planningTaskArrangement.d.ts +18 -0
  82. package/dist/components/features/planning/planningTaskArrangement.js +106 -0
  83. package/dist/components/features/planning/planningWorkspaceModel.d.ts +132 -0
  84. package/dist/components/features/planning/planningWorkspaceModel.js +5 -0
  85. package/dist/components/features/settings/CategoryManager.js +2 -2
  86. package/dist/components/features/settings/TaxonomyEditor.js +1 -1
  87. package/dist/components/features/settings/TaxonomyManager.js +1 -1
  88. package/dist/components/features/settings/TypeManager.js +1 -1
  89. package/dist/components/features/taskforceAgentAssignments/AgentBehaviorAssignments.d.ts +10 -0
  90. package/dist/components/features/taskforceAgentAssignments/AgentBehaviorAssignments.js +175 -0
  91. package/dist/components/features/taskforceAgentAssignments/agentBehaviorCatalogApi.d.ts +27 -0
  92. package/dist/components/features/taskforceAgentAssignments/agentBehaviorCatalogApi.js +24 -0
  93. package/dist/components/features/taskforceAgentEditorModel.d.ts +109 -0
  94. package/dist/components/features/taskforceAgentEditorModel.js +145 -0
  95. package/dist/components/features/useDocumentWorkspaceController.d.ts +20 -1
  96. package/dist/components/features/useDocumentWorkspaceController.js +106 -21
  97. package/dist/components/features/workflowManager/WorkflowManagerModule.d.ts +11 -0
  98. package/dist/components/features/workflowManager/WorkflowManagerModule.js +313 -0
  99. package/dist/components/features/workflowManager/WorkflowPublishDialog.d.ts +11 -0
  100. package/dist/components/features/workflowManager/WorkflowPublishDialog.js +8 -0
  101. package/dist/components/features/workflowManager/types.d.ts +74 -0
  102. package/dist/components/features/workflowManager/types.js +1 -0
  103. package/dist/components/features/workflowManager/useWorkflowManager.d.ts +30 -0
  104. package/dist/components/features/workflowManager/useWorkflowManager.js +213 -0
  105. package/dist/components/features/workflowManager/workflowManagerApi.d.ts +52 -0
  106. package/dist/components/features/workflowManager/workflowManagerApi.js +142 -0
  107. package/dist/components/task/TaskActionHeader.d.ts +7 -3
  108. package/dist/components/task/TaskActionHeader.js +46 -53
  109. package/dist/components/task/TaskCard.d.ts +10 -2
  110. package/dist/components/task/TaskCard.js +138 -56
  111. package/dist/components/task/TaskContextUpload.d.ts +4 -0
  112. package/dist/components/task/TaskContextUpload.js +3 -2
  113. package/dist/components/task/TaskForm.d.ts +16 -17
  114. package/dist/components/task/TaskForm.js +569 -199
  115. package/dist/components/task/TaskImageReviews.d.ts +8 -0
  116. package/dist/components/task/TaskImageReviews.js +47 -0
  117. package/dist/components/task/TaskKanban.d.ts +9 -10
  118. package/dist/components/task/TaskKanban.js +70 -18
  119. package/dist/components/task/TaskList.d.ts +9 -8
  120. package/dist/components/task/TaskList.js +46 -32
  121. package/dist/components/task/TaskReferenceBadge.d.ts +2 -1
  122. package/dist/components/task/TaskReferenceBadge.js +3 -2
  123. package/dist/components/task/TaskStatusActions.d.ts +3 -1
  124. package/dist/components/task/TaskStatusActions.js +27 -7
  125. package/dist/components/task/TaskWorkflowAssignmentField.d.ts +18 -0
  126. package/dist/components/task/TaskWorkflowAssignmentField.js +362 -0
  127. package/dist/components/task/TaskWorkstreamPicker.d.ts +8 -0
  128. package/dist/components/task/TaskWorkstreamPicker.js +25 -0
  129. package/dist/components/task/TrashRestoreControls.d.ts +18 -0
  130. package/dist/components/task/TrashRestoreControls.js +71 -0
  131. package/dist/components/ui/AiIdentityRosterCard.d.ts +20 -0
  132. package/dist/components/ui/AiIdentityRosterCard.js +5 -0
  133. package/dist/components/ui/AssetTraySortControl.d.ts +10 -0
  134. package/dist/components/ui/AssetTraySortControl.js +38 -0
  135. package/dist/components/ui/AssigneeIdentity.d.ts +12 -0
  136. package/dist/components/ui/AssigneeIdentity.js +41 -0
  137. package/dist/components/ui/DiscardChangesDialog.d.ts +10 -0
  138. package/dist/components/ui/DiscardChangesDialog.js +7 -0
  139. package/dist/components/ui/DisclosureSectionHeader.d.ts +4 -1
  140. package/dist/components/ui/DisclosureSectionHeader.js +2 -2
  141. package/dist/components/ui/DocumentTypeIcon.d.ts +7 -0
  142. package/dist/components/ui/DocumentTypeIcon.js +8 -0
  143. package/dist/components/ui/EditableAvatarButton.d.ts +6 -1
  144. package/dist/components/ui/EditableAvatarButton.js +6 -5
  145. package/dist/components/ui/HierarchyActionBadge.d.ts +2 -1
  146. package/dist/components/ui/HierarchyActionBadge.js +2 -2
  147. package/dist/components/ui/Markdown.d.ts +13 -3
  148. package/dist/components/ui/Markdown.fixture.d.ts +1 -0
  149. package/dist/components/ui/Markdown.fixture.js +23 -0
  150. package/dist/components/ui/Markdown.js +158 -68
  151. package/dist/components/ui/Modal.d.ts +3 -1
  152. package/dist/components/ui/Modal.js +85 -19
  153. package/dist/components/ui/MultiSelectFilter.d.ts +9 -2
  154. package/dist/components/ui/MultiSelectFilter.js +26 -5
  155. package/dist/components/ui/ReferenceBadgeButton.js +2 -3
  156. package/dist/components/ui/TaxonomyDropdown.d.ts +18 -1
  157. package/dist/components/ui/TaxonomyDropdown.js +177 -59
  158. package/dist/components/ui/TopNoticeLayer.d.ts +2 -1
  159. package/dist/components/ui/TopNoticeLayer.js +5 -2
  160. package/dist/components/ui/useFallbackImageUrl.d.ts +4 -0
  161. package/dist/components/ui/useFallbackImageUrl.js +20 -0
  162. package/dist/components/views/AppShellHeader.js +2 -2
  163. package/dist/components/views/StandaloneLayout.d.ts +1 -0
  164. package/dist/components/views/StandaloneLayout.js +1717 -600
  165. package/dist/components/views/WidgetView.d.ts +1 -0
  166. package/dist/components/views/WidgetView.js +99 -31
  167. package/dist/components/views/chrome/WorkspaceChromeSections.d.ts +4 -2
  168. package/dist/components/views/chrome/WorkspaceChromeSections.js +3 -6
  169. package/dist/components/views/chrome/workspaceChrome.d.ts +5 -8
  170. package/dist/components/views/chrome/workspaceChrome.js +62 -27
  171. package/dist/components/views/panels/FilterToolbar.d.ts +4 -3
  172. package/dist/components/views/panels/FilterToolbar.js +8 -5
  173. package/dist/components/views/panels/FilterToolbarControls.d.ts +11 -2
  174. package/dist/components/views/panels/FilterToolbarControls.js +35 -20
  175. package/dist/components/views/panels/PlanningDrawer.d.ts +66 -49
  176. package/dist/components/views/panels/PlanningDrawer.js +983 -314
  177. package/dist/components/views/planningScope.js +7 -1
  178. package/dist/components/views/standalone/modals/AccountSettingsModal.d.ts +62 -0
  179. package/dist/components/views/standalone/modals/AccountSettingsModal.js +197 -0
  180. package/dist/components/views/standalone/modals/AvatarImageManagerModal.d.ts +7 -2
  181. package/dist/components/views/standalone/modals/AvatarImageManagerModal.js +56 -9
  182. package/dist/components/views/standalone/modals/HelpModal.d.ts +1 -2
  183. package/dist/components/views/standalone/modals/HelpModal.js +3 -4
  184. package/dist/components/views/standalone/modals/SyncStatusModal.d.ts +8 -9
  185. package/dist/components/views/standalone/modals/SyncStatusModal.js +85 -25
  186. package/dist/components/views/standalone/modals/TeamManagementModal.js +1 -1
  187. package/dist/config/applicationBaseUrl.d.ts +2 -0
  188. package/dist/config/applicationBaseUrl.js +23 -0
  189. package/dist/config/envSchema.d.ts +1 -1
  190. package/dist/config/envSchema.js +167 -5
  191. package/dist/config/localServiceCloudTarget.d.ts +10 -0
  192. package/dist/config/localServiceCloudTarget.js +76 -0
  193. package/dist/core/AdminAuditRetentionService.d.ts +43 -0
  194. package/dist/core/AdminAuditRetentionService.js +126 -0
  195. package/dist/core/AiProfileService.d.ts +35 -0
  196. package/dist/core/AiProfileService.js +511 -251
  197. package/dist/core/AttachmentLinkService.d.ts +10 -2
  198. package/dist/core/AttachmentLinkService.js +50 -15
  199. package/dist/core/AuthIdentityService.d.ts +6 -0
  200. package/dist/core/AuthIdentityService.js +38 -0
  201. package/dist/core/AuthTokenService.d.ts +1 -0
  202. package/dist/core/AuthTokenService.js +13 -0
  203. package/dist/core/DeletedTaskLifecycleService.d.ts +8 -2
  204. package/dist/core/DeletedTaskLifecycleService.js +145 -38
  205. package/dist/core/GlobalSettingsService.d.ts +3 -1
  206. package/dist/core/GlobalSettingsService.js +30 -4
  207. package/dist/core/InitiativeDurableMutationService.d.ts +89 -0
  208. package/dist/core/InitiativeDurableMutationService.js +187 -0
  209. package/dist/core/McpTokenService.d.ts +5 -0
  210. package/dist/core/McpTokenService.js +91 -13
  211. package/dist/core/PlanningCommandPreparationService.d.ts +60 -0
  212. package/dist/core/PlanningCommandPreparationService.js +149 -0
  213. package/dist/core/ScheduleCommandService.d.ts +76 -0
  214. package/dist/core/ScheduleCommandService.js +165 -0
  215. package/dist/core/SyncReconciliationService.d.ts +29 -6
  216. package/dist/core/SyncReconciliationService.js +256 -84
  217. package/dist/core/TaskActivityService.d.ts +22 -2
  218. package/dist/core/TaskActivityService.js +177 -29
  219. package/dist/core/TaskAttachmentLinksDurableMutationService.d.ts +36 -0
  220. package/dist/core/TaskAttachmentLinksDurableMutationService.js +240 -0
  221. package/dist/core/TaskChecklistCommandService.d.ts +50 -0
  222. package/dist/core/TaskChecklistCommandService.js +111 -0
  223. package/dist/core/TaskDurableCreateMutationService.d.ts +38 -0
  224. package/dist/core/TaskDurableCreateMutationService.js +85 -0
  225. package/dist/core/TaskDurableDeleteMutationService.d.ts +47 -0
  226. package/dist/core/TaskDurableDeleteMutationService.js +54 -0
  227. package/dist/core/TaskDurableLifecycleMutationService.d.ts +38 -0
  228. package/dist/core/TaskDurableLifecycleMutationService.js +42 -0
  229. package/dist/core/TaskDurableRelationshipMutationService.d.ts +58 -0
  230. package/dist/core/TaskDurableRelationshipMutationService.js +66 -0
  231. package/dist/core/TaskDurableRestoreMutationService.d.ts +31 -0
  232. package/dist/core/TaskDurableRestoreMutationService.js +33 -0
  233. package/dist/core/TaskDurableStatusMutationService.d.ts +74 -0
  234. package/dist/core/TaskDurableStatusMutationService.js +247 -0
  235. package/dist/core/TaskDurableSyncMutationService.d.ts +34 -0
  236. package/dist/core/TaskDurableSyncMutationService.js +70 -0
  237. package/dist/core/TaskDurableWorkflowMutationService.d.ts +48 -0
  238. package/dist/core/TaskDurableWorkflowMutationService.js +59 -0
  239. package/dist/core/TaskLifecycleCommandService.d.ts +101 -0
  240. package/dist/core/TaskLifecycleCommandService.js +161 -0
  241. package/dist/core/TaskRootCommandPreparationService.d.ts +35 -0
  242. package/dist/core/TaskRootCommandPreparationService.js +103 -0
  243. package/dist/core/Taskforce.d.ts +542 -60
  244. package/dist/core/Taskforce.js +4220 -905
  245. package/dist/core/WorkflowAssignmentService.d.ts +40 -0
  246. package/dist/core/WorkflowAssignmentService.js +158 -0
  247. package/dist/core/WorkflowExecutionService.d.ts +69 -0
  248. package/dist/core/WorkflowExecutionService.js +342 -0
  249. package/dist/core/WorkflowTaskActivationService.d.ts +32 -0
  250. package/dist/core/WorkflowTaskActivationService.js +63 -0
  251. package/dist/core/WorkflowTemplateService.d.ts +64 -0
  252. package/dist/core/WorkflowTemplateService.js +223 -0
  253. package/dist/core/WorkspaceLifecycleService.d.ts +1 -0
  254. package/dist/core/WorkspaceLifecycleService.js +18 -0
  255. package/dist/core/WorkstreamDurableMutationService.d.ts +90 -0
  256. package/dist/core/WorkstreamDurableMutationService.js +184 -0
  257. package/dist/core/planningReferencePolicy.d.ts +14 -0
  258. package/dist/core/planningReferencePolicy.js +53 -0
  259. package/dist/core/taskReferencePolicy.js +24 -3
  260. package/dist/core/types.d.ts +12 -11
  261. package/dist/documentReviews/DocumentReviewCommentStore.d.ts +33 -2
  262. package/dist/documentReviews/DocumentReviewCommentStore.js +125 -8
  263. package/dist/documentReviews/commandService.d.ts +51 -0
  264. package/dist/documentReviews/commandService.js +63 -0
  265. package/dist/documentReviews/service.d.ts +24 -1
  266. package/dist/documentReviews/service.js +354 -49
  267. package/dist/documentReviews/types.d.ts +18 -1
  268. package/dist/hooks/sync/bootstrap.d.ts +3 -7
  269. package/dist/hooks/sync/bootstrap.js +6 -14
  270. package/dist/hooks/sync/browserSyncAuthority.d.ts +21 -0
  271. package/dist/hooks/sync/browserSyncAuthority.js +70 -0
  272. package/dist/hooks/sync/browserSyncRemoteServices.d.ts +29 -0
  273. package/dist/hooks/sync/browserSyncRemoteServices.js +58 -0
  274. package/dist/hooks/sync/controlPlane.d.ts +1 -37
  275. package/dist/hooks/sync/controlPlane.js +1 -78
  276. package/dist/hooks/sync/lifecyclePolicy.d.ts +1 -45
  277. package/dist/hooks/sync/lifecyclePolicy.js +1 -93
  278. package/dist/hooks/sync/orchestratorShared.d.ts +9 -3
  279. package/dist/hooks/sync/orchestratorShared.js +70 -96
  280. package/dist/hooks/sync/pullLifecycle.d.ts +1 -31
  281. package/dist/hooks/sync/pullLifecycle.js +1 -24
  282. package/dist/hooks/sync/realtime.d.ts +4 -1
  283. package/dist/hooks/sync/realtime.js +103 -3
  284. package/dist/hooks/sync/recovery.d.ts +1 -84
  285. package/dist/hooks/sync/recovery.js +1 -245
  286. package/dist/hooks/sync/transfers.d.ts +8 -129
  287. package/dist/hooks/sync/transfers.js +19 -581
  288. package/dist/hooks/sync/useDataVersionRefresh.d.ts +6 -1
  289. package/dist/hooks/sync/useDataVersionRefresh.js +127 -12
  290. package/dist/hooks/sync/useDurableLocalOutboxDrain.d.ts +14 -0
  291. package/dist/hooks/sync/useDurableLocalOutboxDrain.js +208 -0
  292. package/dist/hooks/sync/useDurableTaskCreateMutation.d.ts +15 -0
  293. package/dist/hooks/sync/useDurableTaskCreateMutation.js +152 -0
  294. package/dist/hooks/sync/useDurableTaskDeleteMutation.d.ts +11 -0
  295. package/dist/hooks/sync/useDurableTaskDeleteMutation.js +21 -0
  296. package/dist/hooks/sync/useDurableTaskLifecycleMutation.d.ts +12 -0
  297. package/dist/hooks/sync/useDurableTaskLifecycleMutation.js +22 -0
  298. package/dist/hooks/sync/useDurableTaskMetadataMutation.d.ts +14 -0
  299. package/dist/hooks/sync/useDurableTaskMetadataMutation.js +24 -0
  300. package/dist/hooks/sync/useDurableTaskRestoreMutation.d.ts +12 -0
  301. package/dist/hooks/sync/useDurableTaskRestoreMutation.js +24 -0
  302. package/dist/hooks/sync/useDurableTaskStatusMutation.d.ts +18 -0
  303. package/dist/hooks/sync/useDurableTaskStatusMutation.js +23 -0
  304. package/dist/hooks/sync/useLocalSyncCoordinatorSnapshot.d.ts +23 -0
  305. package/dist/hooks/sync/useLocalSyncCoordinatorSnapshot.js +414 -0
  306. package/dist/hooks/sync/useSyncStatusActions.d.ts +2 -1
  307. package/dist/hooks/sync/useSyncStatusActions.js +8 -3
  308. package/dist/hooks/tasks/taskHttpMutation.d.ts +25 -0
  309. package/dist/hooks/tasks/taskHttpMutation.js +134 -0
  310. package/dist/hooks/tasks/useCurrentTaskRelations.d.ts +6 -1
  311. package/dist/hooks/tasks/useCurrentTaskRelations.js +32 -6
  312. package/dist/hooks/tasks/useTaskEditorNavigation.d.ts +4 -3
  313. package/dist/hooks/tasks/useTaskEditorNavigation.js +9 -13
  314. package/dist/hooks/tasks/useTaskFormActions.d.ts +20 -2
  315. package/dist/hooks/tasks/useTaskFormActions.js +339 -59
  316. package/dist/hooks/tasks/useTaskReferenceContract.d.ts +5 -0
  317. package/dist/hooks/tasks/useTaskReferenceContract.js +17 -0
  318. package/dist/hooks/tasks/useTaskRelationships.d.ts +1 -3
  319. package/dist/hooks/tasks/useTaskRelationships.js +5 -25
  320. package/dist/hooks/tasks/useTrashSelection.d.ts +12 -0
  321. package/dist/hooks/tasks/useTrashSelection.js +49 -0
  322. package/dist/hooks/ui/useInitiativeTemplates.d.ts +24 -0
  323. package/dist/hooks/ui/useInitiativeTemplates.js +22 -0
  324. package/dist/hooks/ui/useSettingsModel.d.ts +5 -29
  325. package/dist/hooks/ui/useSettingsModel.js +31 -15
  326. package/dist/hooks/ui/useSettingsPersistence.d.ts +0 -1
  327. package/dist/hooks/ui/useSettingsPersistence.js +4 -8
  328. package/dist/hooks/ui/useSettingsTaxonomyManagement.js +31 -0
  329. package/dist/hooks/useFilterSort.d.ts +2 -2
  330. package/dist/hooks/useFilterSort.js +19 -15
  331. package/dist/hooks/useRealtimeSync.d.ts +10 -0
  332. package/dist/hooks/useRealtimeSync.js +57 -4
  333. package/dist/hooks/useSyncOrchestrator.d.ts +32 -1
  334. package/dist/hooks/useSyncOrchestrator.js +963 -287
  335. package/dist/hooks/useTaskData.d.ts +11 -2
  336. package/dist/hooks/useTaskData.js +59 -26
  337. package/dist/hooks/useTaskMutations.d.ts +42 -5
  338. package/dist/hooks/useTaskMutations.js +750 -125
  339. package/dist/hooks/useTaskforce.d.ts +79 -74
  340. package/dist/hooks/useTaskforce.js +1205 -450
  341. package/dist/hooks/useUiNotice.d.ts +5 -1
  342. package/dist/hooks/useUiNotice.js +13 -2
  343. package/dist/hooks/useWorkspaceSyncController.d.ts +9 -0
  344. package/dist/hooks/useWorkspaceSyncController.js +159 -17
  345. package/dist/hooks/workspace/usePersistedAppUiState.d.ts +74 -0
  346. package/dist/hooks/workspace/usePersistedAppUiState.js +325 -0
  347. package/dist/hooks/workspace/usePersistedLayoutUiState.d.ts +76 -0
  348. package/dist/hooks/workspace/usePersistedLayoutUiState.js +479 -0
  349. package/dist/hooks/workspace/useTaskforceWorkspaceBootstrap.d.ts +2 -7
  350. package/dist/hooks/workspace/useTaskforceWorkspaceBootstrap.js +42 -31
  351. package/dist/hooks/workspace/workspaceLocalState.d.ts +17 -6
  352. package/dist/hooks/workspace/workspaceLocalState.js +175 -5
  353. package/dist/hooks/workstreams/workstreamHttpMutation.d.ts +23 -0
  354. package/dist/hooks/workstreams/workstreamHttpMutation.js +134 -0
  355. package/dist/localization/locales/en-US.d.ts +3 -3
  356. package/dist/localization/locales/en-US.js +3 -3
  357. package/dist/localization/locales/es-419.js +3 -3
  358. package/dist/localization/locales/pt-BR.js +3 -3
  359. package/dist/mcp/adminWorkspaceRegistrar.js +2 -30
  360. package/dist/mcp/aiProfileBootstrap.d.ts +3 -0
  361. package/dist/mcp/aiProfileBootstrap.js +4 -0
  362. package/dist/mcp/canonicalAssetHelpers.d.ts +29 -4
  363. package/dist/mcp/canonicalAssetHelpers.js +138 -35
  364. package/dist/mcp/clientIntegrations.d.ts +4 -2
  365. package/dist/mcp/clientIntegrations.js +58 -57
  366. package/dist/mcp/clientRegistry.d.ts +30 -0
  367. package/dist/mcp/clientRegistry.js +134 -0
  368. package/dist/mcp/collaborationRegistrar.js +31 -15
  369. package/dist/mcp/documentAssetRegistrar.js +231 -56
  370. package/dist/mcp/documentContentCommand.d.ts +94 -0
  371. package/dist/mcp/documentContentCommand.js +226 -0
  372. package/dist/mcp/documentHelpers.d.ts +13 -65
  373. package/dist/mcp/documentHelpers.js +49 -62
  374. package/dist/mcp/durableTaskMutationRouter.d.ts +65 -0
  375. package/dist/mcp/durableTaskMutationRouter.js +217 -0
  376. package/dist/mcp/durableTaskRelationshipMutationRouter.d.ts +38 -0
  377. package/dist/mcp/durableTaskRelationshipMutationRouter.js +168 -0
  378. package/dist/mcp/durableTaskRootMutationRouter.d.ts +64 -0
  379. package/dist/mcp/durableTaskRootMutationRouter.js +226 -0
  380. package/dist/mcp/gitWorktreeRoots.d.ts +2 -0
  381. package/dist/mcp/gitWorktreeRoots.js +19 -0
  382. package/dist/mcp/legacyServer.d.ts +1 -0
  383. package/dist/mcp/legacyServer.js +42 -0
  384. package/dist/mcp/localCliHealth.d.ts +56 -0
  385. package/dist/mcp/localCliHealth.js +170 -0
  386. package/dist/mcp/localServiceProxy.d.ts +23 -0
  387. package/dist/mcp/localServiceProxy.js +258 -0
  388. package/dist/mcp/mcpInputValidator.d.ts +17 -0
  389. package/dist/mcp/mcpInputValidator.js +58 -0
  390. package/dist/mcp/planningAttachmentCommandAdapter.d.ts +127 -0
  391. package/dist/mcp/planningAttachmentCommandAdapter.js +188 -0
  392. package/dist/mcp/programScaffoldCommandAdapter.d.ts +6 -0
  393. package/dist/mcp/programScaffoldCommandAdapter.js +39 -0
  394. package/dist/mcp/proxyServer.d.ts +1 -0
  395. package/dist/mcp/proxyServer.js +2 -0
  396. package/dist/mcp/runtime.d.ts +98 -1
  397. package/dist/mcp/runtime.js +4682 -1927
  398. package/dist/mcp/server.js +29 -2
  399. package/dist/mcp/sharedLocalServiceGateD.d.ts +115 -0
  400. package/dist/mcp/sharedLocalServiceGateD.js +344 -0
  401. package/dist/mcp/stdioLifecycle.d.ts +22 -0
  402. package/dist/mcp/stdioLifecycle.js +54 -0
  403. package/dist/mcp/taskAttachmentCommandAdapter.d.ts +192 -0
  404. package/dist/mcp/taskAttachmentCommandAdapter.js +470 -0
  405. package/dist/mcp/taskAttachmentHelpers.d.ts +8 -6
  406. package/dist/mcp/taskAttachmentHelpers.js +74 -2
  407. package/dist/mcp/taskAttachmentTypes.d.ts +26 -5
  408. package/dist/mcp/taskPlanCommand.d.ts +64 -0
  409. package/dist/mcp/taskPlanCommand.js +98 -0
  410. package/dist/mcp/taskPlanningRegistrar.js +240 -44
  411. package/dist/mcp/toolCallCompatibility.d.ts +6 -0
  412. package/dist/mcp/toolCallCompatibility.js +16 -0
  413. package/dist/mcp/toolCatalog.d.ts +3 -1
  414. package/dist/mcp/toolProfiles.d.ts +12 -1
  415. package/dist/mcp/toolProfiles.js +43 -0
  416. package/dist/mcp/toolRegistry.d.ts +17 -2
  417. package/dist/mcp/toolRegistry.js +26 -11
  418. package/dist/mcp/workflowExecutionRegistrar.d.ts +2 -0
  419. package/dist/mcp/workflowExecutionRegistrar.js +51 -0
  420. package/dist/migrations/taskSchemaMigrations.d.ts +35 -0
  421. package/dist/migrations/taskSchemaMigrations.js +1892 -64
  422. package/dist/migrations/taskUpdatedAtSyncDriftMigration.d.ts +20 -0
  423. package/dist/migrations/taskUpdatedAtSyncDriftMigration.js +153 -0
  424. package/dist/migrations/taskforceAgentDefinitionMigration.d.ts +26 -0
  425. package/dist/migrations/taskforceAgentDefinitionMigration.js +116 -0
  426. package/dist/plugins/vite.js +48 -17
  427. package/dist/public/Taskforce_Van.webp +0 -0
  428. package/dist/runtime/appGateDefinitions.d.ts +16 -10
  429. package/dist/runtime/appGateDefinitions.js +16 -10
  430. package/dist/runtime/appGates.d.ts +5 -4
  431. package/dist/runtime/appGates.js +4 -3
  432. package/dist/server/aiProfileAvatarAssets.d.ts +11 -8
  433. package/dist/server/aiProfileAvatarAssets.js +159 -70
  434. package/dist/server/appAccess.d.ts +12 -0
  435. package/dist/server/appAccess.js +21 -0
  436. package/dist/server/auth.js +15 -1
  437. package/dist/server/authorizedWorkspaceAccess.d.ts +12 -0
  438. package/dist/server/authorizedWorkspaceAccess.js +40 -0
  439. package/dist/server/cloudCollectionRead.d.ts +25 -0
  440. package/dist/server/cloudCollectionRead.js +120 -0
  441. package/dist/server/cloudCollectionReadPool.d.ts +52 -0
  442. package/dist/server/cloudCollectionReadPool.js +140 -0
  443. package/dist/server/cloudCollectionReadWorker.d.ts +1 -0
  444. package/dist/server/cloudCollectionReadWorker.js +36 -0
  445. package/dist/server/cors.d.ts +2 -1
  446. package/dist/server/cors.js +45 -8
  447. package/dist/server/email.d.ts +3 -1
  448. package/dist/server/email.js +46 -8
  449. package/dist/server/index.d.ts +27 -12
  450. package/dist/server/index.js +395 -86
  451. package/dist/server/localDataOwnerPermit.d.ts +18 -0
  452. package/dist/server/localDataOwnerPermit.js +58 -0
  453. package/dist/server/localDatabaseIdentity.d.ts +14 -0
  454. package/dist/server/localDatabaseIdentity.js +69 -0
  455. package/dist/server/localRealtimeFileInvalidation.d.ts +1 -0
  456. package/dist/server/localRealtimeFileInvalidation.js +7 -0
  457. package/dist/server/localServiceLease.d.ts +65 -0
  458. package/dist/server/localServiceLease.js +485 -0
  459. package/dist/server/localServiceOwnershipBootstrap.d.ts +19 -0
  460. package/dist/server/localServiceOwnershipBootstrap.js +84 -0
  461. package/dist/server/localServiceSessions.d.ts +87 -0
  462. package/dist/server/localServiceSessions.js +309 -0
  463. package/dist/server/localServiceWindowsAcl.d.ts +8 -0
  464. package/dist/server/localServiceWindowsAcl.js +60 -0
  465. package/dist/server/localSyncProcessLockBootstrap.d.ts +3 -0
  466. package/dist/server/localSyncProcessLockBootstrap.js +16 -0
  467. package/dist/server/localWorkspaceSyncServerComposition.d.ts +59 -0
  468. package/dist/server/localWorkspaceSyncServerComposition.js +91 -0
  469. package/dist/server/localWorkspaceSyncServerRuntime.d.ts +119 -0
  470. package/dist/server/localWorkspaceSyncServerRuntime.js +1163 -0
  471. package/dist/server/rateLimit.d.ts +1 -0
  472. package/dist/server/rateLimit.js +16 -0
  473. package/dist/server/routes/admin.d.ts +2 -4
  474. package/dist/server/routes/admin.js +199 -337
  475. package/dist/server/routes/agentRoles.d.ts +13 -0
  476. package/dist/server/routes/agentRoles.js +273 -0
  477. package/dist/server/routes/agentSkills.d.ts +16 -0
  478. package/dist/server/routes/agentSkills.js +291 -0
  479. package/dist/server/routes/agents.d.ts +49 -0
  480. package/dist/server/routes/agents.js +1455 -0
  481. package/dist/server/routes/annotatedAttachments.js +46 -9
  482. package/dist/server/routes/assetAccess.d.ts +36 -0
  483. package/dist/server/routes/assetAccess.js +93 -0
  484. package/dist/server/routes/auth.d.ts +4 -3
  485. package/dist/server/routes/auth.js +236 -21
  486. package/dist/server/routes/authSupport.d.ts +3 -1
  487. package/dist/server/routes/authSupport.js +22 -8
  488. package/dist/server/routes/documentReviews.d.ts +2 -0
  489. package/dist/server/routes/documentReviews.js +155 -15
  490. package/dist/server/routes/documents.d.ts +6 -2
  491. package/dist/server/routes/documents.js +492 -151
  492. package/dist/server/routes/durableTaskHttpRouters.d.ts +167 -0
  493. package/dist/server/routes/durableTaskHttpRouters.js +89 -0
  494. package/dist/server/routes/localMcpHealth.d.ts +11 -0
  495. package/dist/server/routes/localMcpHealth.js +29 -0
  496. package/dist/server/routes/localService.d.ts +13 -0
  497. package/dist/server/routes/localService.js +446 -0
  498. package/dist/server/routes/localUpdate.d.ts +11 -0
  499. package/dist/server/routes/localUpdate.js +154 -0
  500. package/dist/server/routes/primitives.d.ts +29 -0
  501. package/dist/server/routes/primitives.js +18 -0
  502. package/dist/server/routes/resources.d.ts +1 -10
  503. package/dist/server/routes/resources.js +1 -153
  504. package/dist/server/routes/shared.d.ts +55 -2
  505. package/dist/server/routes/shared.js +506 -16
  506. package/dist/server/routes/sync.d.ts +2 -0
  507. package/dist/server/routes/sync.js +206 -272
  508. package/dist/server/routes/syncAuxRoutes.d.ts +3 -1
  509. package/dist/server/routes/syncAuxRoutes.js +9 -4
  510. package/dist/server/routes/syncCoordinatorLocalRoutes.d.ts +6 -0
  511. package/dist/server/routes/syncCoordinatorLocalRoutes.js +867 -0
  512. package/dist/server/routes/syncPullApplyRoutes.d.ts +29 -1
  513. package/dist/server/routes/syncPullApplyRoutes.js +520 -17
  514. package/dist/server/routes/syncPushRoutes.d.ts +33 -4
  515. package/dist/server/routes/syncPushRoutes.js +251 -62
  516. package/dist/server/routes/syncRouteTypes.d.ts +1 -1
  517. package/dist/server/routes/syncSnapshotRoutes.d.ts +15 -7
  518. package/dist/server/routes/syncSnapshotRoutes.js +95 -17
  519. package/dist/server/routes/syncV3DiagnosticsRoutes.d.ts +14 -0
  520. package/dist/server/routes/syncV3DiagnosticsRoutes.js +72 -0
  521. package/dist/server/routes/syncV3FeedRoutes.d.ts +20 -0
  522. package/dist/server/routes/syncV3FeedRoutes.js +464 -0
  523. package/dist/server/routes/syncV3LocalCaptureRoutes.d.ts +37 -0
  524. package/dist/server/routes/syncV3LocalCaptureRoutes.js +915 -0
  525. package/dist/server/routes/syncV3LocalDispatchRoutes.d.ts +17 -0
  526. package/dist/server/routes/syncV3LocalDispatchRoutes.js +280 -0
  527. package/dist/server/routes/syncV3LocalFeedApplyRoutes.d.ts +17 -0
  528. package/dist/server/routes/syncV3LocalFeedApplyRoutes.js +493 -0
  529. package/dist/server/routes/syncV3LocalOwnershipRoutes.d.ts +10 -0
  530. package/dist/server/routes/syncV3LocalOwnershipRoutes.js +51 -0
  531. package/dist/server/routes/syncV3LocalRecoveryRoutes.d.ts +12 -0
  532. package/dist/server/routes/syncV3LocalRecoveryRoutes.js +78 -0
  533. package/dist/server/routes/syncV3OperationRoutes.d.ts +35 -0
  534. package/dist/server/routes/syncV3OperationRoutes.js +1151 -0
  535. package/dist/server/routes/tasks.d.ts +0 -2
  536. package/dist/server/routes/tasks.js +1083 -236
  537. package/dist/server/routes/workflows.d.ts +26 -0
  538. package/dist/server/routes/workflows.js +500 -0
  539. package/dist/server/routes.d.ts +1 -6
  540. package/dist/server/routes.js +179 -342
  541. package/dist/server/smtpTransport.d.ts +11 -3
  542. package/dist/server/smtpTransport.js +9 -2
  543. package/dist/server/start.js +42 -10
  544. package/dist/service/localServiceCli.d.ts +33 -0
  545. package/dist/service/localServiceCli.js +376 -0
  546. package/dist/service/localServiceClientLifecycle.d.ts +25 -0
  547. package/dist/service/localServiceClientLifecycle.js +189 -0
  548. package/dist/service/localServiceOpen.d.ts +17 -0
  549. package/dist/service/localServiceOpen.js +27 -0
  550. package/dist/services/agentRoleResolver.d.ts +4 -0
  551. package/dist/services/agentRoleResolver.js +7 -0
  552. package/dist/services/aiProfileAvatarGenerationService.d.ts +41 -0
  553. package/dist/services/aiProfileAvatarGenerationService.js +158 -0
  554. package/dist/services/avatarImageProvider.d.ts +33 -0
  555. package/dist/services/avatarImageProvider.js +140 -0
  556. package/dist/services/bedrockAnthropicMessagesModelGateway.d.ts +24 -0
  557. package/dist/services/bedrockAnthropicMessagesModelGateway.js +95 -0
  558. package/dist/services/bedrockMantleModelGateway.d.ts +43 -0
  559. package/dist/services/bedrockMantleModelGateway.js +81 -0
  560. package/dist/services/bedrockModelGateway.d.ts +26 -0
  561. package/dist/services/bedrockModelGateway.js +94 -0
  562. package/dist/services/modelGateway.d.ts +82 -0
  563. package/dist/services/modelGateway.js +61 -0
  564. package/dist/services/taskforceAgentAvatarImageProvider.d.ts +8 -0
  565. package/dist/services/taskforceAgentAvatarImageProvider.js +24 -0
  566. package/dist/services/taskforceAgentMcpBridge.d.ts +77 -0
  567. package/dist/services/taskforceAgentMcpBridge.js +527 -0
  568. package/dist/shared/agentRoleDefinition.d.ts +34 -0
  569. package/dist/shared/agentRoleDefinition.js +207 -0
  570. package/dist/shared/aiProfileAvatarEligibility.d.ts +10 -0
  571. package/dist/shared/aiProfileAvatarEligibility.js +27 -0
  572. package/dist/shared/aiProfileColors.d.ts +7 -0
  573. package/dist/shared/aiProfileColors.js +33 -0
  574. package/dist/shared/colorPalette.d.ts +3 -0
  575. package/dist/shared/colorPalette.js +20 -0
  576. package/dist/shared/commentProvenance.d.ts +4 -0
  577. package/dist/shared/commentProvenance.js +6 -0
  578. package/dist/shared/deletedTaskRetention.d.ts +2 -0
  579. package/dist/shared/deletedTaskRetention.js +7 -0
  580. package/dist/shared/passwordPolicy.d.ts +2 -1
  581. package/dist/shared/passwordPolicy.js +9 -0
  582. package/dist/shared/planningIdentity.d.ts +20 -0
  583. package/dist/shared/planningIdentity.js +79 -0
  584. package/dist/shared/taskDeepLinks.d.ts +28 -0
  585. package/dist/shared/taskDeepLinks.js +48 -0
  586. package/dist/shared/taskRestoreDestination.d.ts +2 -0
  587. package/dist/shared/taskRestoreDestination.js +5 -0
  588. package/dist/shared/taskforceAgentDefinition.d.ts +88 -0
  589. package/dist/shared/taskforceAgentDefinition.js +434 -0
  590. package/dist/shared/taskforceAgentExecutionSnapshot.d.ts +50 -0
  591. package/dist/shared/taskforceAgentExecutionSnapshot.js +68 -0
  592. package/dist/shared/taskforceAgentModels.d.ts +56 -0
  593. package/dist/shared/taskforceAgentModels.js +314 -0
  594. package/dist/shared/taskforceAgentRunContext.d.ts +23 -0
  595. package/dist/shared/taskforceAgentRunContext.js +21 -0
  596. package/dist/shared/taskforceAgentRuntimeResolution.d.ts +31 -0
  597. package/dist/shared/taskforceAgentRuntimeResolution.js +72 -0
  598. package/dist/shared/taskforceAgentSkill.d.ts +33 -0
  599. package/dist/shared/taskforceAgentSkill.js +149 -0
  600. package/dist/storage/agentRoleStore.d.ts +91 -0
  601. package/dist/storage/agentRoleStore.js +385 -0
  602. package/dist/storage/databaseAdapter.d.ts +1 -0
  603. package/dist/storage/databaseAdapter.js +7 -1
  604. package/dist/storage/documentIntegrity.d.ts +12 -3
  605. package/dist/storage/documentIntegrity.js +105 -27
  606. package/dist/storage/objectStorageClient.d.ts +10 -4
  607. package/dist/storage/objectStorageClient.js +73 -43
  608. package/dist/storage/postgresAdapter.d.ts +2 -1
  609. package/dist/storage/postgresAdapter.js +42 -6
  610. package/dist/storage/postgresRequestDiagnostics.d.ts +8 -0
  611. package/dist/storage/postgresRequestDiagnostics.js +24 -0
  612. package/dist/storage/postgresWorker.js +65 -1
  613. package/dist/storage/sqliteAdapter.d.ts +1 -1
  614. package/dist/storage/sqliteAdapter.js +7 -1
  615. package/dist/storage/sqliteWalHealth.d.ts +71 -0
  616. package/dist/storage/sqliteWalHealth.js +176 -0
  617. package/dist/storage/taskDataPath.d.ts +1 -0
  618. package/dist/storage/taskDataPath.js +20 -0
  619. package/dist/storage/taskforceAgentConversationStore.d.ts +66 -0
  620. package/dist/storage/taskforceAgentConversationStore.js +264 -0
  621. package/dist/storage/taskforceAgentSkillStore.d.ts +93 -0
  622. package/dist/storage/taskforceAgentSkillStore.js +355 -0
  623. package/dist/storage/taskforceAgentStore.d.ts +105 -0
  624. package/dist/storage/taskforceAgentStore.js +549 -0
  625. package/dist/storage/workflowStore.d.ts +223 -0
  626. package/dist/storage/workflowStore.js +1032 -0
  627. package/dist/storage/workspaceAssetStore.d.ts +102 -0
  628. package/dist/storage/workspaceAssetStore.js +488 -25
  629. package/dist/sync/aiProfileAvatarSyncPaths.d.ts +14 -0
  630. package/dist/sync/aiProfileAvatarSyncPaths.js +56 -0
  631. package/dist/sync/cloudSyncApi.d.ts +329 -0
  632. package/dist/sync/cloudSyncApi.js +574 -1
  633. package/dist/sync/collaborationSyncPayload.d.ts +5 -1
  634. package/dist/sync/collaborationSyncPayload.js +213 -1
  635. package/dist/sync/collaborationSyncState.d.ts +23 -3
  636. package/dist/sync/collaborationSyncState.js +92 -3
  637. package/dist/sync/contentSyncPayload.d.ts +9 -0
  638. package/dist/sync/contentSyncPayload.js +29 -0
  639. package/dist/sync/contentSyncState.d.ts +79 -4
  640. package/dist/sync/contentSyncState.js +1113 -313
  641. package/dist/sync/coordinator/localSyncBrowserApplyPermitContext.d.ts +39 -0
  642. package/dist/sync/coordinator/localSyncBrowserApplyPermitContext.js +234 -0
  643. package/dist/sync/coordinator/localSyncBrowserAuthorityCapability.d.ts +7 -0
  644. package/dist/sync/coordinator/localSyncBrowserAuthorityCapability.js +10 -0
  645. package/dist/sync/coordinator/localSyncCommittedApplyPolicy.d.ts +7 -0
  646. package/dist/sync/coordinator/localSyncCommittedApplyPolicy.js +41 -0
  647. package/dist/sync/coordinator/localSyncCoordinatorBrowserClient.d.ts +178 -0
  648. package/dist/sync/coordinator/localSyncCoordinatorBrowserClient.js +131 -0
  649. package/dist/sync/coordinator/localSyncCoordinatorCommandLifecycle.d.ts +25 -0
  650. package/dist/sync/coordinator/localSyncCoordinatorCommandLifecycle.js +200 -0
  651. package/dist/sync/coordinator/localSyncCoordinatorHost.d.ts +84 -0
  652. package/dist/sync/coordinator/localSyncCoordinatorHost.js +435 -0
  653. package/dist/sync/coordinator/localSyncCoordinatorRouteServices.d.ts +33 -0
  654. package/dist/sync/coordinator/localSyncCoordinatorRouteServices.js +1 -0
  655. package/dist/sync/coordinator/localSyncCoordinatorStore.d.ts +122 -0
  656. package/dist/sync/coordinator/localSyncCoordinatorStore.js +1039 -0
  657. package/dist/sync/coordinator/localSyncCoordinatorTypes.d.ts +82 -0
  658. package/dist/sync/coordinator/localSyncCoordinatorTypes.js +9 -0
  659. package/dist/sync/coordinator/localSyncDispatchTracker.d.ts +15 -0
  660. package/dist/sync/coordinator/localSyncDispatchTracker.js +68 -0
  661. package/dist/sync/coordinator/localSyncExecutionPermitStore.d.ts +216 -0
  662. package/dist/sync/coordinator/localSyncExecutionPermitStore.js +1436 -0
  663. package/dist/sync/coordinator/localSyncExecutionPermitTypes.d.ts +52 -0
  664. package/dist/sync/coordinator/localSyncExecutionPermitTypes.js +8 -0
  665. package/dist/sync/coordinator/localSyncOwnershipDrainBarrier.d.ts +33 -0
  666. package/dist/sync/coordinator/localSyncOwnershipDrainBarrier.js +83 -0
  667. package/dist/sync/coordinator/localSyncPermitTransactionHooks.d.ts +9 -0
  668. package/dist/sync/coordinator/localSyncPermitTransactionHooks.js +27 -0
  669. package/dist/sync/coordinator/localSyncProcessLock.d.ts +12 -0
  670. package/dist/sync/coordinator/localSyncProcessLock.js +212 -0
  671. package/dist/sync/coordinator/localSyncV3DispatchRecoveryReconciler.d.ts +17 -0
  672. package/dist/sync/coordinator/localSyncV3DispatchRecoveryReconciler.js +82 -0
  673. package/dist/sync/coordinator/localWorkspaceSyncRunner.d.ts +134 -0
  674. package/dist/sync/coordinator/localWorkspaceSyncRunner.js +981 -0
  675. package/dist/sync/coordinator/localWorkspaceSyncRunnerState.d.ts +189 -0
  676. package/dist/sync/coordinator/localWorkspaceSyncRunnerState.js +961 -0
  677. package/dist/sync/coordinator/workspaceSyncCloudCredentialValidator.d.ts +19 -0
  678. package/dist/sync/coordinator/workspaceSyncCloudCredentialValidator.js +83 -0
  679. package/dist/sync/coordinator/workspaceSyncCredentialBroker.d.ts +117 -0
  680. package/dist/sync/coordinator/workspaceSyncCredentialBroker.js +323 -0
  681. package/dist/sync/coordinator/workspaceSyncLocalAccessBootstrap.d.ts +11 -0
  682. package/dist/sync/coordinator/workspaceSyncLocalAccessBootstrap.js +51 -0
  683. package/dist/sync/coordinator/workspaceSyncTransportGateway.d.ts +139 -0
  684. package/dist/sync/coordinator/workspaceSyncTransportGateway.js +740 -0
  685. package/dist/sync/engine/localWorkspaceContentManifestService.d.ts +21 -0
  686. package/dist/sync/engine/localWorkspaceContentManifestService.js +44 -0
  687. package/dist/sync/engine/workspaceSyncAtomicLocalPublisher.d.ts +36 -0
  688. package/dist/sync/engine/workspaceSyncAtomicLocalPublisher.js +203 -0
  689. package/dist/sync/engine/workspaceSyncContentLifecycleAdapter.d.ts +21 -0
  690. package/dist/sync/engine/workspaceSyncContentLifecycleAdapter.js +13 -0
  691. package/dist/sync/engine/workspaceSyncContentPullObligationStore.d.ts +65 -0
  692. package/dist/sync/engine/workspaceSyncContentPullObligationStore.js +160 -0
  693. package/dist/sync/engine/workspaceSyncContentVersionStore.d.ts +216 -0
  694. package/dist/sync/engine/workspaceSyncContentVersionStore.js +1068 -0
  695. package/dist/sync/engine/workspaceSyncEngineBrowserGatewayRemoteServices.d.ts +28 -0
  696. package/dist/sync/engine/workspaceSyncEngineBrowserGatewayRemoteServices.js +543 -0
  697. package/dist/sync/engine/workspaceSyncEngineContracts.d.ts +78 -0
  698. package/dist/sync/engine/workspaceSyncEngineContracts.js +1 -0
  699. package/dist/sync/engine/workspaceSyncEngineControlPlane.d.ts +37 -0
  700. package/dist/sync/engine/workspaceSyncEngineControlPlane.js +79 -0
  701. package/dist/sync/engine/workspaceSyncEngineIdentity.d.ts +1 -0
  702. package/dist/sync/engine/workspaceSyncEngineIdentity.js +4 -0
  703. package/dist/sync/engine/workspaceSyncEngineLifecyclePolicy.d.ts +68 -0
  704. package/dist/sync/engine/workspaceSyncEngineLifecyclePolicy.js +180 -0
  705. package/dist/sync/engine/workspaceSyncEngineLocalApply.d.ts +72 -0
  706. package/dist/sync/engine/workspaceSyncEngineLocalApply.js +132 -0
  707. package/dist/sync/engine/workspaceSyncEngineLocalServices.d.ts +70 -0
  708. package/dist/sync/engine/workspaceSyncEngineLocalServices.js +25 -0
  709. package/dist/sync/engine/workspaceSyncEngineParity.d.ts +8 -0
  710. package/dist/sync/engine/workspaceSyncEngineParity.js +7 -0
  711. package/dist/sync/engine/workspaceSyncEnginePullPolicy.d.ts +32 -0
  712. package/dist/sync/engine/workspaceSyncEnginePullPolicy.js +27 -0
  713. package/dist/sync/engine/workspaceSyncEnginePushCompletion.d.ts +20 -0
  714. package/dist/sync/engine/workspaceSyncEnginePushCompletion.js +87 -0
  715. package/dist/sync/engine/workspaceSyncEngineRecovery.d.ts +56 -0
  716. package/dist/sync/engine/workspaceSyncEngineRecovery.js +288 -0
  717. package/dist/sync/engine/workspaceSyncEngineRemoteServices.d.ts +109 -0
  718. package/dist/sync/engine/workspaceSyncEngineRemoteServices.js +21 -0
  719. package/dist/sync/engine/workspaceSyncEngineRuntime.d.ts +61 -0
  720. package/dist/sync/engine/workspaceSyncEngineRuntime.js +59 -0
  721. package/dist/sync/engine/workspaceSyncEngineServerApplyBoundary.d.ts +28 -0
  722. package/dist/sync/engine/workspaceSyncEngineServerApplyBoundary.js +86 -0
  723. package/dist/sync/engine/workspaceSyncEngineServerLocalServices.d.ts +73 -0
  724. package/dist/sync/engine/workspaceSyncEngineServerLocalServices.js +452 -0
  725. package/dist/sync/engine/workspaceSyncEngineServerRemoteServices.d.ts +23 -0
  726. package/dist/sync/engine/workspaceSyncEngineServerRemoteServices.js +466 -0
  727. package/dist/sync/engine/workspaceSyncEngineServerRunnerOperations.d.ts +125 -0
  728. package/dist/sync/engine/workspaceSyncEngineServerRunnerOperations.js +1147 -0
  729. package/dist/sync/engine/workspaceSyncEngineServerSnapshotReader.d.ts +63 -0
  730. package/dist/sync/engine/workspaceSyncEngineServerSnapshotReader.js +276 -0
  731. package/dist/sync/engine/workspaceSyncEngineTransferCompletion.d.ts +20 -0
  732. package/dist/sync/engine/workspaceSyncEngineTransferCompletion.js +37 -0
  733. package/dist/sync/engine/workspaceSyncEngineTransferTypes.d.ts +7 -0
  734. package/dist/sync/engine/workspaceSyncEngineTransferTypes.js +1 -0
  735. package/dist/sync/engine/workspaceSyncEngineTransfers.d.ts +240 -0
  736. package/dist/sync/engine/workspaceSyncEngineTransfers.js +1184 -0
  737. package/dist/sync/engine/workspaceSyncEngineV3LocalFeedApply.d.ts +39 -0
  738. package/dist/sync/engine/workspaceSyncEngineV3LocalFeedApply.js +39 -0
  739. package/dist/sync/engine/workspaceSyncImmutableContentGcRunner.d.ts +25 -0
  740. package/dist/sync/engine/workspaceSyncImmutableContentGcRunner.js +83 -0
  741. package/dist/sync/engine/workspaceSyncImmutableContentProvider.d.ts +71 -0
  742. package/dist/sync/engine/workspaceSyncImmutableContentProvider.js +209 -0
  743. package/dist/sync/engine/workspaceSyncImmutableContentStager.d.ts +32 -0
  744. package/dist/sync/engine/workspaceSyncImmutableContentStager.js +202 -0
  745. package/dist/sync/engine/workspaceSyncPublishedContentResolver.d.ts +43 -0
  746. package/dist/sync/engine/workspaceSyncPublishedContentResolver.js +142 -0
  747. package/dist/sync/engine/workspaceSyncServerContentRuntime.d.ts +26 -0
  748. package/dist/sync/engine/workspaceSyncServerContentRuntime.js +41 -0
  749. package/dist/sync/engine/workspaceSyncServerDataServices.d.ts +44 -0
  750. package/dist/sync/engine/workspaceSyncServerDataServices.js +143 -0
  751. package/dist/sync/engine/workspaceSyncTransferEvidence.d.ts +39 -0
  752. package/dist/sync/engine/workspaceSyncTransferEvidence.js +45 -0
  753. package/dist/sync/engine/workspaceSyncV2ChangeDispatcher.d.ts +44 -0
  754. package/dist/sync/engine/workspaceSyncV2ChangeDispatcher.js +992 -0
  755. package/dist/sync/engine/workspaceSyncV2PreparedContent.d.ts +82 -0
  756. package/dist/sync/engine/workspaceSyncV2PreparedContent.js +219 -0
  757. package/dist/sync/planningCanonicalFields.d.ts +41 -0
  758. package/dist/sync/planningCanonicalFields.js +211 -0
  759. package/dist/sync/planningSyncPayload.d.ts +5 -1
  760. package/dist/sync/planningSyncPayload.js +88 -4
  761. package/dist/sync/syncApplyHandlers.d.ts +100 -8
  762. package/dist/sync/syncApplyHandlers.js +845 -78
  763. package/dist/sync/syncResourceAdapters.d.ts +10 -0
  764. package/dist/sync/syncResourceAdapters.js +21 -1
  765. package/dist/sync/syncService.d.ts +57 -1
  766. package/dist/sync/syncService.js +1094 -138
  767. package/dist/sync/taskNestedContent.d.ts +2 -0
  768. package/dist/sync/taskNestedContent.js +8 -0
  769. package/dist/sync/taskSyncChangeKey.js +0 -1
  770. package/dist/sync/taskSyncPayload.d.ts +1 -1
  771. package/dist/sync/taskSyncPayload.js +20 -3
  772. package/dist/sync/v3/canonicalWorkspaceSyncJson.d.ts +2 -0
  773. package/dist/sync/v3/canonicalWorkspaceSyncJson.js +26 -0
  774. package/dist/sync/v3/combinedFeedCapability.d.ts +21 -0
  775. package/dist/sync/v3/combinedFeedCapability.js +80 -0
  776. package/dist/sync/v3/combinedFeedPrerequisites.d.ts +18 -0
  777. package/dist/sync/v3/combinedFeedPrerequisites.js +184 -0
  778. package/dist/sync/v3/durableInitiativeMutationRouter.d.ts +61 -0
  779. package/dist/sync/v3/durableInitiativeMutationRouter.js +287 -0
  780. package/dist/sync/v3/durableOperationReplay.d.ts +36 -0
  781. package/dist/sync/v3/durableOperationReplay.js +103 -0
  782. package/dist/sync/v3/durableTaskAttachmentLinksMutationRouter.d.ts +50 -0
  783. package/dist/sync/v3/durableTaskAttachmentLinksMutationRouter.js +216 -0
  784. package/dist/sync/v3/durableTaskChecklistMutationRouter.d.ts +47 -0
  785. package/dist/sync/v3/durableTaskChecklistMutationRouter.js +182 -0
  786. package/dist/sync/v3/durableTaskCommentMutationRouter.d.ts +47 -0
  787. package/dist/sync/v3/durableTaskCommentMutationRouter.js +191 -0
  788. package/dist/sync/v3/durableTaskHttpBulkMutationRouter.d.ts +60 -0
  789. package/dist/sync/v3/durableTaskHttpBulkMutationRouter.js +333 -0
  790. package/dist/sync/v3/durableTaskHttpRootMutationRouter.d.ts +40 -0
  791. package/dist/sync/v3/durableTaskHttpRootMutationRouter.js +518 -0
  792. package/dist/sync/v3/durableTaxonomyMutationRouter.d.ts +63 -0
  793. package/dist/sync/v3/durableTaxonomyMutationRouter.js +289 -0
  794. package/dist/sync/v3/durableWorkflowRuntimeMutationRouter.d.ts +77 -0
  795. package/dist/sync/v3/durableWorkflowRuntimeMutationRouter.js +361 -0
  796. package/dist/sync/v3/durableWorkstreamMutationRouter.d.ts +61 -0
  797. package/dist/sync/v3/durableWorkstreamMutationRouter.js +287 -0
  798. package/dist/sync/v3/durableWorkstreamTaskOrderMutationRouter.d.ts +42 -0
  799. package/dist/sync/v3/durableWorkstreamTaskOrderMutationRouter.js +122 -0
  800. package/dist/sync/v3/entityEventLegacyAdoptionContract.d.ts +6 -0
  801. package/dist/sync/v3/entityEventLegacyAdoptionContract.js +6 -0
  802. package/dist/sync/v3/entityEventLegacyAdoptionService.d.ts +62 -0
  803. package/dist/sync/v3/entityEventLegacyAdoptionService.js +180 -0
  804. package/dist/sync/v3/initiativeActivityAuthoritativeRevision.d.ts +11 -0
  805. package/dist/sync/v3/initiativeActivityAuthoritativeRevision.js +23 -0
  806. package/dist/sync/v3/initiativeActivityIdentity.d.ts +8 -0
  807. package/dist/sync/v3/initiativeActivityIdentity.js +14 -0
  808. package/dist/sync/v3/initiativeCoexistence.d.ts +26 -0
  809. package/dist/sync/v3/initiativeCoexistence.js +148 -0
  810. package/dist/sync/v3/initiativeFeedActivationCapability.d.ts +6 -0
  811. package/dist/sync/v3/initiativeFeedActivationCapability.js +16 -0
  812. package/dist/sync/v3/initiativeMutationPayload.d.ts +26 -0
  813. package/dist/sync/v3/initiativeMutationPayload.js +144 -0
  814. package/dist/sync/v3/initiativeMutationService.d.ts +62 -0
  815. package/dist/sync/v3/initiativeMutationService.js +206 -0
  816. package/dist/sync/v3/localEntityEventLegacyAdoption.d.ts +31 -0
  817. package/dist/sync/v3/localEntityEventLegacyAdoption.js +607 -0
  818. package/dist/sync/v3/localInitiativeOutboxHandler.d.ts +8 -0
  819. package/dist/sync/v3/localInitiativeOutboxHandler.js +88 -0
  820. package/dist/sync/v3/localInitiativeOutboxService.d.ts +50 -0
  821. package/dist/sync/v3/localInitiativeOutboxService.js +497 -0
  822. package/dist/sync/v3/localOperationIdentityStore.d.ts +81 -0
  823. package/dist/sync/v3/localOperationIdentityStore.js +388 -0
  824. package/dist/sync/v3/localOutboxDispatchCapability.d.ts +7 -0
  825. package/dist/sync/v3/localOutboxDispatchCapability.js +13 -0
  826. package/dist/sync/v3/localOutboxDispatchRuntime.d.ts +16 -0
  827. package/dist/sync/v3/localOutboxDispatchRuntime.js +269 -0
  828. package/dist/sync/v3/localOutboxDispatcher.d.ts +53 -0
  829. package/dist/sync/v3/localOutboxDispatcher.js +366 -0
  830. package/dist/sync/v3/localOutboxDrainClient.d.ts +50 -0
  831. package/dist/sync/v3/localOutboxDrainClient.js +250 -0
  832. package/dist/sync/v3/localOutboxOperationHandler.d.ts +31 -0
  833. package/dist/sync/v3/localOutboxOperationHandler.js +10 -0
  834. package/dist/sync/v3/localOutboxRecoveryClient.d.ts +14 -0
  835. package/dist/sync/v3/localOutboxRecoveryClient.js +45 -0
  836. package/dist/sync/v3/localOutboxRecoveryPreparationService.d.ts +12 -0
  837. package/dist/sync/v3/localOutboxRecoveryPreparationService.js +151 -0
  838. package/dist/sync/v3/localSyncIdentityStore.d.ts +9 -0
  839. package/dist/sync/v3/localSyncIdentityStore.js +43 -0
  840. package/dist/sync/v3/localTaskAttachmentLinksOutboxHandler.d.ts +10 -0
  841. package/dist/sync/v3/localTaskAttachmentLinksOutboxHandler.js +80 -0
  842. package/dist/sync/v3/localTaskAttachmentLinksOutboxService.d.ts +46 -0
  843. package/dist/sync/v3/localTaskAttachmentLinksOutboxService.js +303 -0
  844. package/dist/sync/v3/localTaskChecklistOutboxHandler.d.ts +10 -0
  845. package/dist/sync/v3/localTaskChecklistOutboxHandler.js +54 -0
  846. package/dist/sync/v3/localTaskChecklistOutboxService.d.ts +47 -0
  847. package/dist/sync/v3/localTaskChecklistOutboxService.js +221 -0
  848. package/dist/sync/v3/localTaskCommentOutboxHandler.d.ts +10 -0
  849. package/dist/sync/v3/localTaskCommentOutboxHandler.js +94 -0
  850. package/dist/sync/v3/localTaskCommentOutboxService.d.ts +75 -0
  851. package/dist/sync/v3/localTaskCommentOutboxService.js +391 -0
  852. package/dist/sync/v3/localTaskCreateClient.d.ts +27 -0
  853. package/dist/sync/v3/localTaskCreateClient.js +209 -0
  854. package/dist/sync/v3/localTaskCreateOutboxHandler.d.ts +8 -0
  855. package/dist/sync/v3/localTaskCreateOutboxHandler.js +147 -0
  856. package/dist/sync/v3/localTaskCreateOutboxService.d.ts +77 -0
  857. package/dist/sync/v3/localTaskCreateOutboxService.js +397 -0
  858. package/dist/sync/v3/localTaskDeleteClient.d.ts +10 -0
  859. package/dist/sync/v3/localTaskDeleteClient.js +23 -0
  860. package/dist/sync/v3/localTaskDeleteOutboxHandler.d.ts +8 -0
  861. package/dist/sync/v3/localTaskDeleteOutboxHandler.js +54 -0
  862. package/dist/sync/v3/localTaskDeleteOutboxService.d.ts +38 -0
  863. package/dist/sync/v3/localTaskDeleteOutboxService.js +235 -0
  864. package/dist/sync/v3/localTaskLegacyRootAdoption.d.ts +28 -0
  865. package/dist/sync/v3/localTaskLegacyRootAdoption.js +219 -0
  866. package/dist/sync/v3/localTaskLifecycleClient.d.ts +49 -0
  867. package/dist/sync/v3/localTaskLifecycleClient.js +57 -0
  868. package/dist/sync/v3/localTaskLifecycleOutboxHandler.d.ts +8 -0
  869. package/dist/sync/v3/localTaskLifecycleOutboxHandler.js +94 -0
  870. package/dist/sync/v3/localTaskLifecycleOutboxService.d.ts +60 -0
  871. package/dist/sync/v3/localTaskLifecycleOutboxService.js +304 -0
  872. package/dist/sync/v3/localTaskMetadataClient.d.ts +13 -0
  873. package/dist/sync/v3/localTaskMetadataClient.js +30 -0
  874. package/dist/sync/v3/localTaskMetadataOutboxHandler.d.ts +8 -0
  875. package/dist/sync/v3/localTaskMetadataOutboxHandler.js +70 -0
  876. package/dist/sync/v3/localTaskMetadataOutboxService.d.ts +48 -0
  877. package/dist/sync/v3/localTaskMetadataOutboxService.js +229 -0
  878. package/dist/sync/v3/localTaskOperationClient.d.ts +72 -0
  879. package/dist/sync/v3/localTaskOperationClient.js +195 -0
  880. package/dist/sync/v3/localTaskRelationshipOutboxHandler.d.ts +8 -0
  881. package/dist/sync/v3/localTaskRelationshipOutboxHandler.js +114 -0
  882. package/dist/sync/v3/localTaskRelationshipOutboxService.d.ts +45 -0
  883. package/dist/sync/v3/localTaskRelationshipOutboxService.js +192 -0
  884. package/dist/sync/v3/localTaskRestoreClient.d.ts +13 -0
  885. package/dist/sync/v3/localTaskRestoreClient.js +32 -0
  886. package/dist/sync/v3/localTaskRestoreOutboxHandler.d.ts +8 -0
  887. package/dist/sync/v3/localTaskRestoreOutboxHandler.js +41 -0
  888. package/dist/sync/v3/localTaskRestoreOutboxService.d.ts +56 -0
  889. package/dist/sync/v3/localTaskRestoreOutboxService.js +323 -0
  890. package/dist/sync/v3/localTaskStatusClient.d.ts +17 -0
  891. package/dist/sync/v3/localTaskStatusClient.js +35 -0
  892. package/dist/sync/v3/localTaskStatusOutboxHandler.d.ts +8 -0
  893. package/dist/sync/v3/localTaskStatusOutboxHandler.js +75 -0
  894. package/dist/sync/v3/localTaskStatusOutboxService.d.ts +53 -0
  895. package/dist/sync/v3/localTaskStatusOutboxService.js +422 -0
  896. package/dist/sync/v3/localTaxonomyCompositeOutboxService.d.ts +34 -0
  897. package/dist/sync/v3/localTaxonomyCompositeOutboxService.js +290 -0
  898. package/dist/sync/v3/localTaxonomyOutboxHandler.d.ts +9 -0
  899. package/dist/sync/v3/localTaxonomyOutboxHandler.js +106 -0
  900. package/dist/sync/v3/localTaxonomyOutboxService.d.ts +30 -0
  901. package/dist/sync/v3/localTaxonomyOutboxService.js +181 -0
  902. package/dist/sync/v3/localWorkflowRuntimeOutboxHandler.d.ts +8 -0
  903. package/dist/sync/v3/localWorkflowRuntimeOutboxHandler.js +113 -0
  904. package/dist/sync/v3/localWorkflowRuntimeOutboxService.d.ts +37 -0
  905. package/dist/sync/v3/localWorkflowRuntimeOutboxService.js +330 -0
  906. package/dist/sync/v3/localWorkspaceSyncServerOutboxDispatcher.d.ts +63 -0
  907. package/dist/sync/v3/localWorkspaceSyncServerOutboxDispatcher.js +264 -0
  908. package/dist/sync/v3/localWorkstreamOutboxHandler.d.ts +8 -0
  909. package/dist/sync/v3/localWorkstreamOutboxHandler.js +102 -0
  910. package/dist/sync/v3/localWorkstreamOutboxService.d.ts +52 -0
  911. package/dist/sync/v3/localWorkstreamOutboxService.js +581 -0
  912. package/dist/sync/v3/localWorkstreamTaskOrderOutboxHandler.d.ts +10 -0
  913. package/dist/sync/v3/localWorkstreamTaskOrderOutboxHandler.js +57 -0
  914. package/dist/sync/v3/localWorkstreamTaskOrderOutboxService.d.ts +30 -0
  915. package/dist/sync/v3/localWorkstreamTaskOrderOutboxService.js +128 -0
  916. package/dist/sync/v3/planningActivation.d.ts +13 -0
  917. package/dist/sync/v3/planningActivation.js +33 -0
  918. package/dist/sync/v3/planningAttachmentActivityValidation.d.ts +9 -0
  919. package/dist/sync/v3/planningAttachmentActivityValidation.js +87 -0
  920. package/dist/sync/v3/programScaffoldService.d.ts +143 -0
  921. package/dist/sync/v3/programScaffoldService.js +478 -0
  922. package/dist/sync/v3/syncDurabilityStore.d.ts +781 -0
  923. package/dist/sync/v3/syncDurabilityStore.js +4773 -0
  924. package/dist/sync/v3/taskActivityAuthoritativeRevision.d.ts +16 -0
  925. package/dist/sync/v3/taskActivityAuthoritativeRevision.js +67 -0
  926. package/dist/sync/v3/taskActivityJournal.d.ts +20 -0
  927. package/dist/sync/v3/taskActivityJournal.js +195 -0
  928. package/dist/sync/v3/taskAttachmentLinksActivityIdentity.d.ts +6 -0
  929. package/dist/sync/v3/taskAttachmentLinksActivityIdentity.js +14 -0
  930. package/dist/sync/v3/taskAttachmentLinksMutationService.d.ts +112 -0
  931. package/dist/sync/v3/taskAttachmentLinksMutationService.js +218 -0
  932. package/dist/sync/v3/taskChecklistActivityIdentity.d.ts +6 -0
  933. package/dist/sync/v3/taskChecklistActivityIdentity.js +14 -0
  934. package/dist/sync/v3/taskChecklistMutationService.d.ts +92 -0
  935. package/dist/sync/v3/taskChecklistMutationService.js +156 -0
  936. package/dist/sync/v3/taskCommentActivityIdentity.d.ts +7 -0
  937. package/dist/sync/v3/taskCommentActivityIdentity.js +15 -0
  938. package/dist/sync/v3/taskCommentMutationService.d.ts +150 -0
  939. package/dist/sync/v3/taskCommentMutationService.js +392 -0
  940. package/dist/sync/v3/taskCommentReconcileProvenance.d.ts +58 -0
  941. package/dist/sync/v3/taskCommentReconcileProvenance.js +170 -0
  942. package/dist/sync/v3/taskCreateActivation.d.ts +19 -0
  943. package/dist/sync/v3/taskCreateActivation.js +84 -0
  944. package/dist/sync/v3/taskCreateActivityIdentity.d.ts +7 -0
  945. package/dist/sync/v3/taskCreateActivityIdentity.js +18 -0
  946. package/dist/sync/v3/taskCreateMutationService.d.ts +103 -0
  947. package/dist/sync/v3/taskCreateMutationService.js +283 -0
  948. package/dist/sync/v3/taskDeleteActivation.d.ts +7 -0
  949. package/dist/sync/v3/taskDeleteActivation.js +14 -0
  950. package/dist/sync/v3/taskDeleteMutationService.d.ts +35 -0
  951. package/dist/sync/v3/taskDeleteMutationService.js +133 -0
  952. package/dist/sync/v3/taskLegacyRootAdoptionService.d.ts +78 -0
  953. package/dist/sync/v3/taskLegacyRootAdoptionService.js +175 -0
  954. package/dist/sync/v3/taskLifecycleActivityIdentity.d.ts +9 -0
  955. package/dist/sync/v3/taskLifecycleActivityIdentity.js +18 -0
  956. package/dist/sync/v3/taskLifecycleMutationPayload.d.ts +5 -0
  957. package/dist/sync/v3/taskLifecycleMutationPayload.js +28 -0
  958. package/dist/sync/v3/taskLifecycleMutationService.d.ts +66 -0
  959. package/dist/sync/v3/taskLifecycleMutationService.js +92 -0
  960. package/dist/sync/v3/taskMetadataActivation.d.ts +12 -0
  961. package/dist/sync/v3/taskMetadataActivation.js +38 -0
  962. package/dist/sync/v3/taskMetadataActivityIdentity.d.ts +7 -0
  963. package/dist/sync/v3/taskMetadataActivityIdentity.js +18 -0
  964. package/dist/sync/v3/taskMetadataCoexistence.d.ts +37 -0
  965. package/dist/sync/v3/taskMetadataCoexistence.js +138 -0
  966. package/dist/sync/v3/taskMetadataMutationService.d.ts +71 -0
  967. package/dist/sync/v3/taskMetadataMutationService.js +199 -0
  968. package/dist/sync/v3/taskRelationshipLegacyAdoptionService.d.ts +48 -0
  969. package/dist/sync/v3/taskRelationshipLegacyAdoptionService.js +164 -0
  970. package/dist/sync/v3/taskRelationshipMutationService.d.ts +50 -0
  971. package/dist/sync/v3/taskRelationshipMutationService.js +148 -0
  972. package/dist/sync/v3/taskRestoreMutationService.d.ts +90 -0
  973. package/dist/sync/v3/taskRestoreMutationService.js +179 -0
  974. package/dist/sync/v3/taskStatusActivation.d.ts +7 -0
  975. package/dist/sync/v3/taskStatusActivation.js +15 -0
  976. package/dist/sync/v3/taskStatusMutationService.d.ts +76 -0
  977. package/dist/sync/v3/taskStatusMutationService.js +308 -0
  978. package/dist/sync/v3/taskWorkflowMutationPayload.d.ts +4 -0
  979. package/dist/sync/v3/taskWorkflowMutationPayload.js +22 -0
  980. package/dist/sync/v3/taskWorkflowMutationService.d.ts +64 -0
  981. package/dist/sync/v3/taskWorkflowMutationService.js +102 -0
  982. package/dist/sync/v3/taxonomyCoexistence.d.ts +10 -0
  983. package/dist/sync/v3/taxonomyCoexistence.js +19 -0
  984. package/dist/sync/v3/taxonomyCompositeMutationService.d.ts +110 -0
  985. package/dist/sync/v3/taxonomyCompositeMutationService.js +304 -0
  986. package/dist/sync/v3/taxonomyMutationService.d.ts +57 -0
  987. package/dist/sync/v3/taxonomyMutationService.js +106 -0
  988. package/dist/sync/v3/taxonomyStateMutation.d.ts +22 -0
  989. package/dist/sync/v3/taxonomyStateMutation.js +49 -0
  990. package/dist/sync/v3/taxonomySyncPayload.d.ts +9 -0
  991. package/dist/sync/v3/taxonomySyncPayload.js +199 -0
  992. package/dist/sync/v3/workflowAssignmentSync.d.ts +22 -0
  993. package/dist/sync/v3/workflowAssignmentSync.js +213 -0
  994. package/dist/sync/v3/workflowRuntimeMutationService.d.ts +89 -0
  995. package/dist/sync/v3/workflowRuntimeMutationService.js +359 -0
  996. package/dist/sync/v3/workflowRuntimeOperationIdentity.d.ts +13 -0
  997. package/dist/sync/v3/workflowRuntimeOperationIdentity.js +35 -0
  998. package/dist/sync/v3/workflowRuntimeSync.d.ts +141 -0
  999. package/dist/sync/v3/workflowRuntimeSync.js +485 -0
  1000. package/dist/sync/v3/workspaceSyncJournalReader.d.ts +43 -0
  1001. package/dist/sync/v3/workspaceSyncJournalReader.js +45 -0
  1002. package/dist/sync/v3/workspaceSyncLocalOwnershipSnapshot.d.ts +28 -0
  1003. package/dist/sync/v3/workspaceSyncLocalOwnershipSnapshot.js +81 -0
  1004. package/dist/sync/v3/workspaceSyncPayloadFingerprint.d.ts +1 -0
  1005. package/dist/sync/v3/workspaceSyncPayloadFingerprint.js +5 -0
  1006. package/dist/sync/v3/workspaceSyncV2ProjectionExclusions.d.ts +16 -0
  1007. package/dist/sync/v3/workspaceSyncV2ProjectionExclusions.js +153 -0
  1008. package/dist/sync/v3/workspaceSyncV3AttachmentApplyObligationStore.d.ts +83 -0
  1009. package/dist/sync/v3/workspaceSyncV3AttachmentApplyObligationStore.js +161 -0
  1010. package/dist/sync/v3/workspaceSyncV3AttachmentAssetHydration.d.ts +16 -0
  1011. package/dist/sync/v3/workspaceSyncV3AttachmentAssetHydration.js +90 -0
  1012. package/dist/sync/v3/workspaceSyncV3CloudOperationHandler.d.ts +65 -0
  1013. package/dist/sync/v3/workspaceSyncV3CloudOperationHandler.js +357 -0
  1014. package/dist/sync/v3/workspaceSyncV3CombinedCoverage.d.ts +51 -0
  1015. package/dist/sync/v3/workspaceSyncV3CombinedCoverage.js +171 -0
  1016. package/dist/sync/v3/workspaceSyncV3CombinedFeedOrchestrator.d.ts +43 -0
  1017. package/dist/sync/v3/workspaceSyncV3CombinedFeedOrchestrator.js +541 -0
  1018. package/dist/sync/v3/workspaceSyncV3CombinedLocalApply.d.ts +50 -0
  1019. package/dist/sync/v3/workspaceSyncV3CombinedLocalApply.js +1161 -0
  1020. package/dist/sync/v3/workspaceSyncV3CombinedProjectionState.d.ts +96 -0
  1021. package/dist/sync/v3/workspaceSyncV3CombinedProjectionState.js +672 -0
  1022. package/dist/sync/v3/workspaceSyncV3CombinedRepairBaseline.d.ts +46 -0
  1023. package/dist/sync/v3/workspaceSyncV3CombinedRepairBaseline.js +621 -0
  1024. package/dist/sync/v3/workspaceSyncV3CombinedRepairMaterialization.d.ts +66 -0
  1025. package/dist/sync/v3/workspaceSyncV3CombinedRepairMaterialization.js +527 -0
  1026. package/dist/sync/v3/workspaceSyncV3CombinedRepairSnapshot.d.ts +78 -0
  1027. package/dist/sync/v3/workspaceSyncV3CombinedRepairSnapshot.js +566 -0
  1028. package/dist/sync/v3/workspaceSyncV3CombinedWireContract.d.ts +45 -0
  1029. package/dist/sync/v3/workspaceSyncV3CombinedWireContract.js +125 -0
  1030. package/dist/sync/v3/workspaceSyncV3CoverageRegistry.d.ts +13 -0
  1031. package/dist/sync/v3/workspaceSyncV3CoverageRegistry.js +34 -0
  1032. package/dist/sync/v3/workspaceSyncV3CursorEncoding.d.ts +1 -0
  1033. package/dist/sync/v3/workspaceSyncV3CursorEncoding.js +6 -0
  1034. package/dist/sync/v3/workspaceSyncV3DomainAdmission.d.ts +43 -0
  1035. package/dist/sync/v3/workspaceSyncV3DomainAdmission.js +118 -0
  1036. package/dist/sync/v3/workspaceSyncV3Feed.d.ts +95 -0
  1037. package/dist/sync/v3/workspaceSyncV3Feed.js +243 -0
  1038. package/dist/sync/v3/workspaceSyncV3FeedApply.d.ts +13 -0
  1039. package/dist/sync/v3/workspaceSyncV3FeedApply.js +67 -0
  1040. package/dist/sync/v3/workspaceSyncV3FeedClientContract.d.ts +3 -0
  1041. package/dist/sync/v3/workspaceSyncV3FeedClientContract.js +46 -0
  1042. package/dist/sync/v3/workspaceSyncV3FeedCursorKeys.d.ts +10 -0
  1043. package/dist/sync/v3/workspaceSyncV3FeedCursorKeys.js +58 -0
  1044. package/dist/sync/v3/workspaceSyncV3FeedOrchestrator.d.ts +31 -0
  1045. package/dist/sync/v3/workspaceSyncV3FeedOrchestrator.js +228 -0
  1046. package/dist/sync/v3/workspaceSyncV3FeedProfile.d.ts +32 -0
  1047. package/dist/sync/v3/workspaceSyncV3FeedProfile.js +21 -0
  1048. package/dist/sync/v3/workspaceSyncV3InitiativeLocalApply.d.ts +36 -0
  1049. package/dist/sync/v3/workspaceSyncV3InitiativeLocalApply.js +163 -0
  1050. package/dist/sync/v3/workspaceSyncV3InitiativeRepair.d.ts +33 -0
  1051. package/dist/sync/v3/workspaceSyncV3InitiativeRepair.js +118 -0
  1052. package/dist/sync/v3/workspaceSyncV3LegacyBoundaryAttestation.d.ts +10 -0
  1053. package/dist/sync/v3/workspaceSyncV3LegacyBoundaryAttestation.js +45 -0
  1054. package/dist/sync/v3/workspaceSyncV3LocalOutboxStatus.d.ts +27 -0
  1055. package/dist/sync/v3/workspaceSyncV3LocalOutboxStatus.js +83 -0
  1056. package/dist/sync/v3/workspaceSyncV3NestedCoverage.d.ts +10 -0
  1057. package/dist/sync/v3/workspaceSyncV3NestedCoverage.js +40 -0
  1058. package/dist/sync/v3/workspaceSyncV3NestedTaskApply.d.ts +83 -0
  1059. package/dist/sync/v3/workspaceSyncV3NestedTaskApply.js +325 -0
  1060. package/dist/sync/v3/workspaceSyncV3NestedTaskCodecs.d.ts +59 -0
  1061. package/dist/sync/v3/workspaceSyncV3NestedTaskCodecs.js +302 -0
  1062. package/dist/sync/v3/workspaceSyncV3NestedTaskProjection.d.ts +47 -0
  1063. package/dist/sync/v3/workspaceSyncV3NestedTaskProjection.js +329 -0
  1064. package/dist/sync/v3/workspaceSyncV3NestedTaskRepairSnapshot.d.ts +19 -0
  1065. package/dist/sync/v3/workspaceSyncV3NestedTaskRepairSnapshot.js +41 -0
  1066. package/dist/sync/v3/workspaceSyncV3NestedWireContract.d.ts +6 -0
  1067. package/dist/sync/v3/workspaceSyncV3NestedWireContract.js +16 -0
  1068. package/dist/sync/v3/workspaceSyncV3OperationProjection.d.ts +8 -0
  1069. package/dist/sync/v3/workspaceSyncV3OperationProjection.js +52 -0
  1070. package/dist/sync/v3/workspaceSyncV3OperationProtocol.d.ts +230 -0
  1071. package/dist/sync/v3/workspaceSyncV3OperationProtocol.js +1 -0
  1072. package/dist/sync/v3/workspaceSyncV3OperatorDiagnostics.d.ts +165 -0
  1073. package/dist/sync/v3/workspaceSyncV3OperatorDiagnostics.js +414 -0
  1074. package/dist/sync/v3/workspaceSyncV3OriginActor.d.ts +36 -0
  1075. package/dist/sync/v3/workspaceSyncV3OriginActor.js +61 -0
  1076. package/dist/sync/v3/workspaceSyncV3OriginAssertion.d.ts +46 -0
  1077. package/dist/sync/v3/workspaceSyncV3OriginAssertion.js +121 -0
  1078. package/dist/sync/v3/workspaceSyncV3OriginAssertionHeader.d.ts +1 -0
  1079. package/dist/sync/v3/workspaceSyncV3OriginAssertionHeader.js +1 -0
  1080. package/dist/sync/v3/workspaceSyncV3PlanningOrderCoverage.d.ts +10 -0
  1081. package/dist/sync/v3/workspaceSyncV3PlanningOrderCoverage.js +34 -0
  1082. package/dist/sync/v3/workspaceSyncV3PlanningOrderWireContract.d.ts +6 -0
  1083. package/dist/sync/v3/workspaceSyncV3PlanningOrderWireContract.js +10 -0
  1084. package/dist/sync/v3/workspaceSyncV3ProjectionState.d.ts +105 -0
  1085. package/dist/sync/v3/workspaceSyncV3ProjectionState.js +467 -0
  1086. package/dist/sync/v3/workspaceSyncV3RepairSqlBatching.d.ts +2 -0
  1087. package/dist/sync/v3/workspaceSyncV3RepairSqlBatching.js +10 -0
  1088. package/dist/sync/v3/workspaceSyncV3TaskCommentAudit.d.ts +56 -0
  1089. package/dist/sync/v3/workspaceSyncV3TaskCommentAudit.js +250 -0
  1090. package/dist/sync/v3/workspaceSyncV3TaskRelationshipProjection.d.ts +30 -0
  1091. package/dist/sync/v3/workspaceSyncV3TaskRelationshipProjection.js +142 -0
  1092. package/dist/sync/v3/workspaceSyncV3TaskRootProjection.d.ts +40 -0
  1093. package/dist/sync/v3/workspaceSyncV3TaskRootProjection.js +246 -0
  1094. package/dist/sync/v3/workspaceSyncV3TaxonomyFeedProjection.d.ts +39 -0
  1095. package/dist/sync/v3/workspaceSyncV3TaxonomyFeedProjection.js +185 -0
  1096. package/dist/sync/v3/workspaceSyncV3WorkflowCoverage.d.ts +10 -0
  1097. package/dist/sync/v3/workspaceSyncV3WorkflowCoverage.js +36 -0
  1098. package/dist/sync/v3/workspaceSyncV3WorkflowRuntimeApply.d.ts +17 -0
  1099. package/dist/sync/v3/workspaceSyncV3WorkflowRuntimeApply.js +143 -0
  1100. package/dist/sync/v3/workspaceSyncV3WorkflowRuntimeProjection.d.ts +9 -0
  1101. package/dist/sync/v3/workspaceSyncV3WorkflowRuntimeProjection.js +195 -0
  1102. package/dist/sync/v3/workspaceSyncV3WorkflowWireContract.d.ts +11 -0
  1103. package/dist/sync/v3/workspaceSyncV3WorkflowWireContract.js +12 -0
  1104. package/dist/sync/v3/workspaceSyncV3WorkstreamProjection.d.ts +4 -0
  1105. package/dist/sync/v3/workspaceSyncV3WorkstreamProjection.js +98 -0
  1106. package/dist/sync/v3/workspaceSyncV3WorkstreamTaskOrderProjection.d.ts +9 -0
  1107. package/dist/sync/v3/workspaceSyncV3WorkstreamTaskOrderProjection.js +72 -0
  1108. package/dist/sync/v3/workstreamActivityAuthoritativeRevision.d.ts +11 -0
  1109. package/dist/sync/v3/workstreamActivityAuthoritativeRevision.js +23 -0
  1110. package/dist/sync/v3/workstreamActivityIdentity.d.ts +8 -0
  1111. package/dist/sync/v3/workstreamActivityIdentity.js +14 -0
  1112. package/dist/sync/v3/workstreamCoexistence.d.ts +19 -0
  1113. package/dist/sync/v3/workstreamCoexistence.js +64 -0
  1114. package/dist/sync/v3/workstreamMutationPayload.d.ts +27 -0
  1115. package/dist/sync/v3/workstreamMutationPayload.js +147 -0
  1116. package/dist/sync/v3/workstreamMutationService.d.ts +72 -0
  1117. package/dist/sync/v3/workstreamMutationService.js +256 -0
  1118. package/dist/sync/v3/workstreamTaskOrderMutationService.d.ts +55 -0
  1119. package/dist/sync/v3/workstreamTaskOrderMutationService.js +110 -0
  1120. package/dist/sync/v3/workstreamTaskOrderSync.d.ts +14 -0
  1121. package/dist/sync/v3/workstreamTaskOrderSync.js +25 -0
  1122. package/dist/sync/workspaceContentManifest.d.ts +86 -0
  1123. package/dist/sync/workspaceContentManifest.js +123 -0
  1124. package/dist/sync/workspacePullFeed.d.ts +191 -2
  1125. package/dist/sync/workspacePullFeed.js +523 -135
  1126. package/dist/sync/workspacePushPreparedPlan.d.ts +21 -0
  1127. package/dist/sync/workspacePushPreparedPlan.js +1 -0
  1128. package/dist/sync/workspaceRepair.d.ts +17 -25
  1129. package/dist/sync/workspaceRepair.js +348 -25
  1130. package/dist/sync/workspaceSyncContentDecryption.d.ts +6 -0
  1131. package/dist/sync/workspaceSyncContentDecryption.js +11 -0
  1132. package/dist/sync/workspaceSyncModel.d.ts +227 -5
  1133. package/dist/sync/workspaceSyncModel.js +398 -37
  1134. package/dist/sync/workspaceSyncSnapshotProjection.d.ts +11 -0
  1135. package/dist/sync/workspaceSyncSnapshotProjection.js +101 -0
  1136. package/dist/sync/workspaceSyncState.d.ts +13 -0
  1137. package/dist/sync/workspaceSyncState.js +36 -0
  1138. package/dist/sync/workspaceSyncV2SnapshotBuilder.d.ts +106 -0
  1139. package/dist/sync/workspaceSyncV2SnapshotBuilder.js +193 -0
  1140. package/dist/types.d.ts +31 -15
  1141. package/dist/types.js +1 -3
  1142. package/dist/ui/ai-profile-clients/amazon-nova.svg +1 -0
  1143. package/dist/ui/ai-profile-clients/antigravity.png +0 -0
  1144. package/dist/ui/ai-profile-clients/chatgpt.svg +10 -0
  1145. package/dist/ui/ai-profile-clients/claude-chat.svg +1 -0
  1146. package/dist/ui/ai-profile-clients/claude-code.svg +15 -0
  1147. package/dist/ui/ai-profile-clients/cline-app-icon-light.png +0 -0
  1148. package/dist/ui/ai-profile-clients/cline.svg +16 -0
  1149. package/dist/ui/ai-profile-clients/codex.svg +1 -0
  1150. package/dist/ui/ai-profile-clients/copilot.png +0 -0
  1151. package/dist/ui/ai-profile-clients/cursor.svg +1 -0
  1152. package/dist/ui/ai-profile-clients/deepseek.svg +1 -0
  1153. package/dist/ui/ai-profile-clients/gemini-cli-icon.png +0 -0
  1154. package/dist/ui/ai-profile-clients/gemini.svg +10 -0
  1155. package/dist/ui/ai-profile-clients/grok.svg +31 -0
  1156. package/dist/ui/ai-profile-clients/kiro.svg +11 -0
  1157. package/dist/ui/ai-profile-clients/llama.svg +1 -0
  1158. package/dist/ui/ai-profile-clients/mistral.svg +1 -0
  1159. package/dist/ui/ai-profile-clients/ms_copilot.jpeg +0 -0
  1160. package/dist/ui/ai-profile-clients/openclaw.png +0 -0
  1161. package/dist/ui/ai-profile-clients/perplexity.svg +1 -0
  1162. package/dist/ui/ai-profile-clients/vscode.svg +41 -0
  1163. package/dist/ui/ai-profile-clients/windsurf.svg +11 -0
  1164. package/dist/ui/assets/AiIdentityRosterCard-MZs7lVED.js +1 -0
  1165. package/dist/ui/assets/AiProfilesModule-C3i0LOxe.js +1 -0
  1166. package/dist/ui/assets/AnnotatedAttachmentWorkspace-CBRZ8rca.css +1 -0
  1167. package/dist/ui/assets/AnnotatedAttachmentWorkspace-DVZk5Tln.js +3 -0
  1168. package/dist/ui/assets/AssetTraySortControl-B9k5caQW.css +1 -0
  1169. package/dist/ui/assets/AssetTraySortControl-Kf1pelSy.js +1 -0
  1170. package/dist/ui/assets/ContextAttachmentManager-B8boOs6Q.js +3 -0
  1171. package/dist/ui/assets/DocumentWorkspace-BIBGBfd7.css +1 -0
  1172. package/dist/ui/assets/DocumentWorkspace-DXH4XUsB.js +261 -0
  1173. package/dist/ui/assets/EntityActivityTimeline-BfJbZRdl.css +1 -0
  1174. package/dist/ui/assets/EntityActivityTimeline-BtSTq0ON.js +1 -0
  1175. package/dist/ui/assets/PlanningModule-BPVyEa-f.js +1 -0
  1176. package/dist/ui/assets/PlanningModule-CoIR9hbV.css +1 -0
  1177. package/dist/ui/assets/PlansPage-C2nkK2Bp.css +1 -0
  1178. package/dist/ui/assets/PlansPage-ChqgxALc.js +1 -0
  1179. package/dist/ui/assets/TaskContextUpload-CB3ol0sN.js +1 -0
  1180. package/dist/ui/assets/TaskContextUpload-qmBeUw3u.css +1 -0
  1181. package/dist/ui/assets/TaskSettings-g4ECKNOz.js +12 -0
  1182. package/dist/ui/assets/TaskforceAgentsModule-BazdUwxZ.js +21 -0
  1183. package/dist/ui/assets/TaskforceAgentsModule-D6IC0S7Q.css +1 -0
  1184. package/dist/ui/assets/WorkflowManagerModule-DF10XENz.css +1 -0
  1185. package/dist/ui/assets/WorkflowManagerModule-DWFspC-o.js +1 -0
  1186. package/dist/ui/assets/antigravity-DRKQga2U.png +0 -0
  1187. package/dist/ui/assets/cursor-BM_3k4Y4.svg +1 -0
  1188. package/dist/ui/assets/gemini-cli-icon-dBAVjCcn.png +0 -0
  1189. package/dist/ui/assets/grok-BuodbWaG.svg +31 -0
  1190. package/dist/ui/assets/index-BUplSsv_.js +7 -0
  1191. package/dist/ui/assets/index-gz2EXuoK.css +1 -0
  1192. package/dist/ui/assets/{vendor-dnd-DRzYolkg.js → vendor-dnd-CJ-AjP-Y.js} +1 -1
  1193. package/dist/ui/assets/{vendor-icons-CLnehDTw.js → vendor-icons-BkFLXavV.js} +1 -1
  1194. package/dist/ui/assets/{vendor-markdown-BUxTU7dS.js → vendor-markdown-_lhNCyq-.js} +9 -9
  1195. package/dist/ui/assets/vendor-router-AqJMU8Lz.js +3 -0
  1196. package/dist/ui/assets/vscode-C_7wk1WI.svg +41 -0
  1197. package/dist/ui/branding/logos/logo_dark_bg.png +0 -0
  1198. package/dist/ui/branding/logos/logo_favicon_dark.png +0 -0
  1199. package/dist/ui/branding/logos/logo_favicon_dark.svg +56 -0
  1200. package/dist/ui/branding/logos/logo_favicon_light.png +0 -0
  1201. package/dist/ui/branding/logos/logo_light_bg.png +0 -0
  1202. package/dist/ui/images/Taskforce_Van.webp +0 -0
  1203. package/dist/ui/index.html +6 -6
  1204. package/dist/update/uiUpdateService.d.ts +43 -0
  1205. package/dist/update/uiUpdateService.js +149 -0
  1206. package/dist/update/updateCli.d.ts +15 -0
  1207. package/dist/update/updateCli.js +76 -0
  1208. package/dist/update/updateExecutor.d.ts +40 -0
  1209. package/dist/update/updateExecutor.js +474 -0
  1210. package/dist/update/updateStatus.d.ts +83 -0
  1211. package/dist/update/updateStatus.js +703 -0
  1212. package/dist/utils/aiProfileAvatarPaths.d.ts +14 -0
  1213. package/dist/utils/aiProfileAvatarPaths.js +52 -0
  1214. package/dist/utils/aiProfileDefaultLogo.d.ts +7 -0
  1215. package/dist/utils/aiProfileDefaultLogo.js +84 -0
  1216. package/dist/utils/aiProfileEvents.d.ts +9 -1
  1217. package/dist/utils/annotatedAttachments.d.ts +8 -0
  1218. package/dist/utils/annotatedAttachments.js +17 -1
  1219. package/dist/utils/assetTraySorting.d.ts +25 -0
  1220. package/dist/utils/assetTraySorting.js +83 -0
  1221. package/dist/utils/assignees.d.ts +5 -0
  1222. package/dist/utils/assignees.js +14 -9
  1223. package/dist/utils/authLogin.d.ts +10 -0
  1224. package/dist/utils/authLogin.js +8 -0
  1225. package/dist/utils/authSessionEvents.d.ts +2 -0
  1226. package/dist/utils/authSessionEvents.js +6 -0
  1227. package/dist/utils/avatarUpload.js +5 -5
  1228. package/dist/utils/canonicalReferenceAttachments.d.ts +12 -0
  1229. package/dist/utils/canonicalReferenceAttachments.js +42 -0
  1230. package/dist/utils/cloudAssetDisplay.d.ts +2 -0
  1231. package/dist/utils/cloudAssetDisplay.js +8 -0
  1232. package/dist/utils/constants.d.ts +4 -11
  1233. package/dist/utils/constants.js +6 -65
  1234. package/dist/utils/contextAttachmentPreview.d.ts +11 -0
  1235. package/dist/utils/contextAttachmentPreview.js +8 -0
  1236. package/dist/utils/contextAttachmentUpload.d.ts +10 -0
  1237. package/dist/utils/contextAttachmentUpload.js +151 -0
  1238. package/dist/utils/contextFiles.d.ts +1 -1
  1239. package/dist/utils/contextFiles.js +4 -4
  1240. package/dist/utils/documentNames.js +6 -4
  1241. package/dist/utils/entityReferences.d.ts +14 -0
  1242. package/dist/utils/entityReferences.js +21 -0
  1243. package/dist/utils/httpSetCookie.d.ts +3 -0
  1244. package/dist/utils/httpSetCookie.js +22 -0
  1245. package/dist/utils/imageNoteStoragePaths.d.ts +3 -0
  1246. package/dist/utils/imageNoteStoragePaths.js +19 -0
  1247. package/dist/utils/imageReferences.d.ts +6 -0
  1248. package/dist/utils/imageReferences.js +1 -0
  1249. package/dist/utils/planningArchiveOrchestrator.d.ts +23 -0
  1250. package/dist/utils/planningArchiveOrchestrator.js +37 -0
  1251. package/dist/utils/planningArchivePresentation.d.ts +20 -0
  1252. package/dist/utils/planningArchivePresentation.js +23 -0
  1253. package/dist/utils/planningArchiveReadiness.d.ts +26 -0
  1254. package/dist/utils/planningArchiveReadiness.js +30 -0
  1255. package/dist/utils/planningFavorites.d.ts +7 -0
  1256. package/dist/utils/planningFavorites.js +34 -0
  1257. package/dist/utils/syncEventPresentation.js +53 -0
  1258. package/dist/utils/syncStatusPresentation.d.ts +25 -0
  1259. package/dist/utils/syncStatusPresentation.js +86 -5
  1260. package/dist/utils/taskActivity.d.ts +9 -2
  1261. package/dist/utils/taskActivity.js +61 -0
  1262. package/dist/utils/taskDraftDefaults.d.ts +0 -8
  1263. package/dist/utils/taskDraftDefaults.js +0 -4
  1264. package/dist/utils/taskEvents.d.ts +11 -0
  1265. package/dist/utils/taskEvents.js +6 -0
  1266. package/dist/utils/taskHeaderQuickFilter.d.ts +14 -0
  1267. package/dist/utils/taskHeaderQuickFilter.js +32 -0
  1268. package/dist/utils/taskInvalidation.d.ts +23 -0
  1269. package/dist/utils/taskInvalidation.js +67 -0
  1270. package/dist/utils/taskNormalization.d.ts +2 -1
  1271. package/dist/utils/taskNormalization.js +44 -18
  1272. package/dist/utils/taskReferences.d.ts +16 -0
  1273. package/dist/utils/taskReferences.js +63 -0
  1274. package/dist/utils/taskforceAgentEvents.d.ts +8 -0
  1275. package/dist/utils/taskforceAgentEvents.js +6 -0
  1276. package/dist/utils/taskforceAgentSkillEvents.d.ts +7 -0
  1277. package/dist/utils/taskforceAgentSkillEvents.js +8 -0
  1278. package/dist/utils/uiNotice.d.ts +3 -0
  1279. package/dist/utils/uiNotice.js +1 -1
  1280. package/dist/utils/workspaceResourceEvents.d.ts +7 -0
  1281. package/dist/utils/workspaceResourceEvents.js +6 -0
  1282. package/dist/utils/workspaceSyncPresentation.d.ts +24 -0
  1283. package/dist/utils/workspaceSyncPresentation.js +243 -6
  1284. package/package.json +74 -21
  1285. package/dist/components/features/AgentsModule.d.ts +0 -18
  1286. package/dist/components/features/AgentsModule.js +0 -479
  1287. package/dist/components/features/InitiativesModule.d.ts +0 -22
  1288. package/dist/components/features/InitiativesModule.js +0 -33
  1289. package/dist/components/features/WorkflowsModule.d.ts +0 -27
  1290. package/dist/components/features/WorkflowsModule.js +0 -21
  1291. package/dist/components/features/settings/WorkflowEditor.d.ts +0 -15
  1292. package/dist/components/features/settings/WorkflowEditor.js +0 -245
  1293. package/dist/components/views/panels/DocumentFilterToolbar.d.ts +0 -10
  1294. package/dist/components/views/panels/DocumentFilterToolbar.js +0 -7
  1295. package/dist/components/views/standalone/modals/AccountHubModal.d.ts +0 -61
  1296. package/dist/components/views/standalone/modals/AccountHubModal.js +0 -108
  1297. package/dist/components/views/standalone/modals/EditProfileModal.d.ts +0 -19
  1298. package/dist/components/views/standalone/modals/EditProfileModal.js +0 -11
  1299. package/dist/hooks/ui/useResourceExport.d.ts +0 -21
  1300. package/dist/hooks/ui/useResourceExport.js +0 -87
  1301. package/dist/hooks/ui/useWorkflowTemplates.d.ts +0 -37
  1302. package/dist/hooks/ui/useWorkflowTemplates.js +0 -116
  1303. package/dist/mcp/clientProfileDefaults.d.ts +0 -12
  1304. package/dist/mcp/clientProfileDefaults.js +0 -41
  1305. package/dist/resources/templates/WORKFLOW_V2_POLICY.md +0 -55
  1306. package/dist/resources/templates/environments/aider.yaml +0 -14
  1307. package/dist/resources/templates/environments/antigravity.yaml +0 -10
  1308. package/dist/resources/templates/environments/claude.yaml +0 -10
  1309. package/dist/resources/templates/environments/cline.yaml +0 -10
  1310. package/dist/resources/templates/environments/codex.yaml +0 -13
  1311. package/dist/resources/templates/environments/copilot.yaml +0 -10
  1312. package/dist/resources/templates/environments/cursor.yaml +0 -9
  1313. package/dist/resources/templates/environments/gemini.yaml +0 -9
  1314. package/dist/resources/templates/environments/windsurf.yaml +0 -10
  1315. package/dist/resources/templates/workflow-sources/README.md +0 -9
  1316. package/dist/resources/templates/workflow-sources/workflowDocs.mjs +0 -530
  1317. package/dist/resources/templates/workflow-sources/workflowEditorOverrides.json +0 -1
  1318. package/dist/resources/templates/workflows/collaborate.yaml +0 -109
  1319. package/dist/resources/templates/workflows/do.yaml +0 -87
  1320. package/dist/resources/templates/workflows/evaluate.yaml +0 -116
  1321. package/dist/resources/templates/workflows/execute.yaml +0 -156
  1322. package/dist/resources/templates/workflows/plan.yaml +0 -118
  1323. package/dist/resources/templates/workflows/review.yaml +0 -114
  1324. package/dist/services/formatTransformers.d.ts +0 -29
  1325. package/dist/services/formatTransformers.js +0 -56
  1326. package/dist/services/templateEngine.d.ts +0 -46
  1327. package/dist/services/templateEngine.js +0 -148
  1328. package/dist/shared/workflowDefaults.d.ts +0 -9
  1329. package/dist/shared/workflowDefaults.js +0 -11
  1330. package/dist/ui/agent-logos/Gemini CLI.jpeg +0 -0
  1331. package/dist/ui/agent-logos/antigravity.jpeg +0 -0
  1332. package/dist/ui/agent-logos/chatgpt.png +0 -0
  1333. package/dist/ui/agent-logos/claude-code.jpeg +0 -0
  1334. package/dist/ui/agent-logos/codex.jpeg +0 -0
  1335. package/dist/ui/agent-logos/cursor.png +0 -0
  1336. package/dist/ui/agent-logos/openclaw.jpeg +0 -0
  1337. package/dist/ui/agent-logos/windsurf.png +0 -0
  1338. package/dist/ui/assets/AgentsModule-C4LcqhcZ.js +0 -1
  1339. package/dist/ui/assets/AnnotatedAttachmentWorkspace-B-Dq22d2.js +0 -3
  1340. package/dist/ui/assets/AnnotatedAttachmentWorkspace-BVKew-mH.css +0 -1
  1341. package/dist/ui/assets/ContextAttachmentManager-DsXPTvi-.js +0 -3
  1342. package/dist/ui/assets/DocumentWorkspace-CxA1wO3U.js +0 -252
  1343. package/dist/ui/assets/DocumentWorkspace-D4rJKXzd.css +0 -1
  1344. package/dist/ui/assets/EntityActivityTimeline-B8nSe8l3.js +0 -1
  1345. package/dist/ui/assets/EntityActivityTimeline-DyqvvhuF.css +0 -1
  1346. package/dist/ui/assets/InitiativesModule-VY95v38E.js +0 -1
  1347. package/dist/ui/assets/PlansPage-CQbKDv1a.js +0 -1
  1348. package/dist/ui/assets/PlansPage-DeAzWYTb.css +0 -1
  1349. package/dist/ui/assets/TaskContextUpload-DvDlNpHC.js +0 -1
  1350. package/dist/ui/assets/TaskSettings-CUWbYYtP.js +0 -12
  1351. package/dist/ui/assets/WorkflowsModule-CgM3Jako.js +0 -5
  1352. package/dist/ui/assets/documentReferences-Do9YjrS3.js +0 -1
  1353. package/dist/ui/assets/index--mh3pktj.js +0 -5
  1354. package/dist/ui/assets/index-BawaaEXS.css +0 -1
  1355. package/dist/ui/assets/vendor-router-BbWMxlnO.js +0 -3
  1356. package/dist/ui/branding/logos/logo_black_01.png +0 -0
  1357. package/dist/ui/branding/logos/logo_black_02.png +0 -0
  1358. package/dist/ui/branding/logos/logo_white_01.png +0 -0
  1359. package/dist/ui/branding/logos/logo_white_02.png +0 -0
  1360. package/scripts/generate-workflow-templates.mjs +0 -134
  1361. package/src/resources/templates/WORKFLOW_V2_POLICY.md +0 -55
  1362. package/src/resources/templates/environments/aider.yaml +0 -14
  1363. package/src/resources/templates/environments/antigravity.yaml +0 -10
  1364. package/src/resources/templates/environments/claude.yaml +0 -10
  1365. package/src/resources/templates/environments/cline.yaml +0 -10
  1366. package/src/resources/templates/environments/codex.yaml +0 -13
  1367. package/src/resources/templates/environments/copilot.yaml +0 -10
  1368. package/src/resources/templates/environments/cursor.yaml +0 -9
  1369. package/src/resources/templates/environments/gemini.yaml +0 -9
  1370. package/src/resources/templates/environments/windsurf.yaml +0 -10
  1371. package/src/resources/templates/workflow-sources/README.md +0 -9
  1372. package/src/resources/templates/workflow-sources/workflowDocs.mjs +0 -530
  1373. package/src/resources/templates/workflow-sources/workflowEditorOverrides.json +0 -1
  1374. package/src/resources/templates/workflows/collaborate.yaml +0 -109
  1375. package/src/resources/templates/workflows/do.yaml +0 -87
  1376. package/src/resources/templates/workflows/evaluate.yaml +0 -116
  1377. package/src/resources/templates/workflows/execute.yaml +0 -156
  1378. package/src/resources/templates/workflows/plan.yaml +0 -118
  1379. package/src/resources/templates/workflows/review.yaml +0 -114
  1380. /package/dist/ui/branding/logos/{logo_dark.svg → logo_dark_no_bg.svg} +0 -0
  1381. /package/dist/ui/branding/logos/{logo_favicon.svg → logo_favicon_light.svg} +0 -0
  1382. /package/dist/ui/branding/logos/{logo_light.svg → logo_light_no_bg.svg} +0 -0
@@ -1,8 +1,28 @@
1
- import { applyLocalWorkspaceChanges, handshakeWorkspace, pullWorkspaceChanges, provisionWorkspace, pullUserSettings, pushUserSettings, pushWorkspaceChanges } from './cloudSyncApi';
2
- import { encryptDocument, decryptDocument } from './encryptionService';
1
+ import { applyLocalWorkspaceChanges, getLocalWorkspaceContentPullObligations, recordLocalWorkspaceContentPullObligationFailures, getLocalWorkspaceContentManifest, pullUserSettings, pushUserSettings, prepareWorkspacePushChanges, } from './cloudSyncApi.js';
2
+ import { workspaceSyncContentPullObligationId, } from './engine/workspaceSyncContentPullObligationStore.js';
3
+ import { createBrowserWorkspaceSyncEngineRemoteServices, } from './engine/workspaceSyncEngineRemoteServices.js';
4
+ import { createWorkspaceSyncEngineV2PushBoundary, parseWorkspaceSyncEngineAppliedTaskUpserts, workspaceSyncEngineExpectedTaskEchoIds, } from './engine/workspaceSyncEnginePushCompletion.js';
5
+ import { encryptDocument } from './encryptionService.js';
6
+ import { decryptWorkspaceSyncContentChangeInPlace } from './workspaceSyncContentDecryption.js';
7
+ import { decideWorkspaceContentFetch, fingerprintWorkspaceContentBody, } from './workspaceContentManifest.js';
8
+ import { workspaceSyncV2ProjectionExclusionsEqual, } from './v3/workspaceSyncV2ProjectionExclusions.js';
9
+ import { WORKSPACE_PUSH_PREPARED_PLAN_VERSION, } from './workspacePushPreparedPlan.js';
10
+ import { canonicalWorkspaceSyncJson } from './v3/canonicalWorkspaceSyncJson.js';
3
11
  function asObjectRecord(value) {
4
12
  return value && typeof value === 'object' ? value : {};
5
13
  }
14
+ const CONTENT_PULL_RETRY_BASE_MS = 30_000;
15
+ const CONTENT_PULL_RETRY_MAX_MS = 60 * 60_000;
16
+ function isContentPullObligationDue(obligation, nowMs = Date.now()) {
17
+ const attempts = Math.max(0, Math.floor(Number(obligation.attempts) || 0));
18
+ if (attempts === 0)
19
+ return true;
20
+ const updatedAtMs = Date.parse(String(obligation.updatedAt || ''));
21
+ if (!Number.isFinite(updatedAtMs))
22
+ return true;
23
+ const delayMs = Math.min(CONTENT_PULL_RETRY_MAX_MS, CONTENT_PULL_RETRY_BASE_MS * (2 ** Math.min(attempts - 1, 7)));
24
+ return updatedAtMs + delayMs <= nowMs;
25
+ }
6
26
  export function isTransientWorkspaceSyncStatus(status) {
7
27
  const normalized = Number(status || 0);
8
28
  return normalized === 0 || normalized === 429 || normalized >= 500;
@@ -31,7 +51,9 @@ export async function ensureCloudWorkspaceReadyForSyncService(input) {
31
51
  if (!input.isAuthenticated)
32
52
  return { success: false, error: 'Authentication required.' };
33
53
  try {
34
- let handshakeResult = await handshakeWorkspace(input.resolveCloudAuthUrl, input.workspaceId);
54
+ const remoteServices = input.remoteServices
55
+ || createBrowserWorkspaceSyncEngineRemoteServices(input.resolveCloudAuthUrl);
56
+ let handshakeResult = await remoteServices.handshakeWorkspace(input.workspaceId);
35
57
  if (handshakeResult.ok)
36
58
  return { success: true, provisioned: false };
37
59
  const data = asObjectRecord(handshakeResult.data);
@@ -53,7 +75,7 @@ export async function ensureCloudWorkspaceReadyForSyncService(input) {
53
75
  };
54
76
  }
55
77
  if (isMissingCloudWorkspaceSelection(data, handshakeResult.status)) {
56
- const provisionResult = await provisionWorkspace(input.resolveCloudAuthUrl, {
78
+ const provisionResult = await remoteServices.provisionWorkspace({
57
79
  workspaceId: input.workspaceId,
58
80
  name: input.workspaceName || input.workspaceId
59
81
  });
@@ -67,7 +89,7 @@ export async function ensureCloudWorkspaceReadyForSyncService(input) {
67
89
  error: resolveWorkspaceAccessConflictMessage(provisionError, provisionResult.status)
68
90
  };
69
91
  }
70
- handshakeResult = await handshakeWorkspace(input.resolveCloudAuthUrl, input.workspaceId);
92
+ handshakeResult = await remoteServices.handshakeWorkspace(input.workspaceId);
71
93
  if (!handshakeResult.ok) {
72
94
  const retryData = asObjectRecord(handshakeResult.data);
73
95
  if (handshakeResult.status === 401) {
@@ -94,7 +116,7 @@ export async function ensureCloudWorkspaceReadyForSyncService(input) {
94
116
  error: String(data.error || 'Selected cloud workspace could not be attached to this local workspace.')
95
117
  };
96
118
  }
97
- const provisionResult = await provisionWorkspace(input.resolveCloudAuthUrl, {
119
+ const provisionResult = await remoteServices.provisionWorkspace({
98
120
  workspaceId: input.workspaceId,
99
121
  name: input.workspaceName || input.workspaceId
100
122
  });
@@ -106,7 +128,7 @@ export async function ensureCloudWorkspaceReadyForSyncService(input) {
106
128
  error: resolveWorkspaceAccessConflictMessage(provisionError, provisionResult.status)
107
129
  };
108
130
  }
109
- handshakeResult = await handshakeWorkspace(input.resolveCloudAuthUrl, input.workspaceId);
131
+ handshakeResult = await remoteServices.handshakeWorkspace(input.workspaceId);
110
132
  if (!handshakeResult.ok) {
111
133
  const retryData = asObjectRecord(handshakeResult.data);
112
134
  if (handshakeResult.status === 401) {
@@ -135,8 +157,37 @@ export async function ensureCloudWorkspaceReadyForSyncService(input) {
135
157
  return { success: false, statusCode: 0, transient: true, error: 'Failed to validate workspace sync access.' };
136
158
  }
137
159
  }
138
- async function computeIdempotencyKey(workspaceId, changes) {
139
- const text = JSON.stringify([workspaceId, changes]);
160
+ function buildEffectiveWorkspacePushDiagnostics(diagnostics, changes, ownership) {
161
+ if (!diagnostics)
162
+ return undefined;
163
+ const byOp = {};
164
+ for (const change of changes)
165
+ byOp[change.op] = (byOp[change.op] || 0) + 1;
166
+ const withChangeCount = (domain, changeCount) => domain ? { ...domain, changeCount } : domain;
167
+ return {
168
+ ...diagnostics,
169
+ totalChanges: changes.length,
170
+ byOp,
171
+ domains: {
172
+ ...diagnostics.domains,
173
+ tasks: withChangeCount(diagnostics.domains.tasks, (byOp.upsert || 0) + (byOp.delete || 0)),
174
+ taskRelationships: withChangeCount(diagnostics.domains.taskRelationships, (byOp['task-relationship-upsert'] || 0) + (byOp['task-relationship-delete'] || 0)),
175
+ initiatives: withChangeCount(diagnostics.domains.initiatives, byOp['initiative-upsert'] || 0),
176
+ workstreams: withChangeCount(diagnostics.domains.workstreams, byOp['workstream-upsert'] || 0),
177
+ taxonomy: withChangeCount(diagnostics.domains.taxonomy, byOp['taxonomy-upsert'] || 0),
178
+ },
179
+ ...(ownership?.combinedV3SuppressedChangeCount
180
+ ? { combinedV3SuppressedChangeCount: ownership.combinedV3SuppressedChangeCount }
181
+ : {}),
182
+ };
183
+ }
184
+ async function computeIdempotencyKey(workspaceId, changes, repairMode) {
185
+ const text = canonicalWorkspaceSyncJson({
186
+ contractVersion: 1,
187
+ workspaceId,
188
+ repairMode,
189
+ changes
190
+ });
140
191
  try {
141
192
  const buffer = await crypto.subtle.digest('SHA-256', new TextEncoder().encode(text));
142
193
  return Array.from(new Uint8Array(buffer)).map(b => b.toString(16).padStart(2, '0')).join('');
@@ -144,7 +195,7 @@ async function computeIdempotencyKey(workspaceId, changes) {
144
195
  catch {
145
196
  // Deterministic fallback for environments lacking crypto.subtle.
146
197
  // Uses FNV-1a over the serialized payload so retries with identical
147
- // workspace+changes reuse the same idempotency key.
198
+ // server-semantic request reuse the same idempotency key.
148
199
  let hash = 0x811c9dc5;
149
200
  for (let i = 0; i < text.length; i += 1) {
150
201
  hash ^= text.charCodeAt(i);
@@ -154,13 +205,323 @@ async function computeIdempotencyKey(workspaceId, changes) {
154
205
  return `${workspaceId}:fallback:${hex}`;
155
206
  }
156
207
  }
208
+ const MAX_WORKSPACE_PUSH_CHANGES_PER_REQUEST = 64;
209
+ const MAX_WORKSPACE_PUSH_BYTES_PER_REQUEST = 4 * 1024 * 1024;
210
+ const MAX_WORKSPACE_PUSH_SINGLE_CHANGE_BYTES = 45 * 1024 * 1024;
211
+ const WORKSPACE_PUSH_REQUEST_OVERHEAD_BYTES = 64 * 1024;
212
+ function workspacePushChangeStableIdentity(change) {
213
+ switch (change.op) {
214
+ case 'upsert': return `${change.op}:${change.task.id}`;
215
+ case 'delete': return `${change.op}:${change.taskId}`;
216
+ case 'task-relationship-upsert':
217
+ case 'task-relationship-delete': return `${change.op}:${change.relationship.id}`;
218
+ case 'initiative-upsert': return `${change.op}:${change.initiative.id}`;
219
+ case 'workstream-upsert': return `${change.op}:${change.workstream.id}`;
220
+ case 'planning-identity-upsert': return `${change.op}:${change.identity.entityType}:${change.identity.entityId}`;
221
+ case 'taxonomy-upsert': return change.op;
222
+ case 'ai-profile-upsert': return `${change.op}:${change.profile.id}`;
223
+ case 'document-upsert':
224
+ case 'document-delete': return `${change.op}:${change.path}`;
225
+ case 'document-manifest': return `${change.op}:${change.manifest.path}`;
226
+ case 'asset-upsert':
227
+ case 'asset-delete': return `${change.op}:${change.path}`;
228
+ case 'asset-manifest': return `${change.op}:${change.manifest.path}`;
229
+ case 'document-review-session-upsert': return `${change.op}:${change.session.id}`;
230
+ case 'document-review-session-delete': return `${change.op}:${change.sessionId}`;
231
+ case 'document-review-comment-upsert': return `${change.op}:${change.comment.id}`;
232
+ case 'document-review-comment-delete': return `${change.op}:${change.commentId}`;
233
+ case 'annotated-attachment-session-upsert': return `${change.op}:${change.session.id}`;
234
+ case 'annotated-attachment-session-delete': return `${change.op}:${change.sessionId}`;
235
+ case 'taskforce-agent-upsert': return `${change.op}:${change.agent.id}`;
236
+ case 'agent-role-upsert': return `${change.op}:${change.role.id}`;
237
+ case 'taskforce-agent-skill-upsert': return `${change.op}:${change.skill.id}`;
238
+ case 'agent-conversation-upsert': return `${change.op}:${change.conversation.id}`;
239
+ case 'entity-event-upsert': return `${change.op}:${change.event.id}`;
240
+ case 'task-event-upsert': return `${change.op}:${change.event.id}`;
241
+ }
242
+ }
243
+ function buildPreparedPlanEntries(sourceChanges, preparedChanges) {
244
+ const sourceIndexesByIdentity = new Map();
245
+ for (const [index, change] of sourceChanges.entries()) {
246
+ const identity = workspacePushChangeStableIdentity(change);
247
+ const indexes = sourceIndexesByIdentity.get(identity) || [];
248
+ indexes.push(index);
249
+ sourceIndexesByIdentity.set(identity, indexes);
250
+ }
251
+ const consumedByIdentity = new Map();
252
+ return preparedChanges.map((change) => {
253
+ const identity = workspacePushChangeStableIdentity(change);
254
+ const indexes = sourceIndexesByIdentity.get(identity) || [];
255
+ const offset = consumedByIdentity.get(identity) || 0;
256
+ const sourceChangeIndex = indexes[offset];
257
+ if (sourceChangeIndex === undefined) {
258
+ throw new Error(`Prepared V2 push change is not present in the frozen payload: ${identity}.`);
259
+ }
260
+ consumedByIdentity.set(identity, offset + 1);
261
+ const sourceChange = sourceChanges[sourceChangeIndex];
262
+ return JSON.stringify(sourceChange) === JSON.stringify(change)
263
+ ? { sourceChangeIndex }
264
+ : { sourceChangeIndex, preparedChange: change };
265
+ });
266
+ }
267
+ function reconstructPreparedPlanBatches(sourceChanges, plan) {
268
+ const seenIndexes = new Set();
269
+ return plan.batches.map((batch) => batch.map((entry) => {
270
+ const index = entry.sourceChangeIndex;
271
+ if (!Number.isSafeInteger(index) || index < 0 || index >= sourceChanges.length || seenIndexes.has(index)) {
272
+ throw new Error('Persisted V2 push prepared plan contains an invalid source change index.');
273
+ }
274
+ seenIndexes.add(index);
275
+ return entry.preparedChange || sourceChanges[index];
276
+ }));
277
+ }
278
+ function resolveWorkspacePushPhase(change) {
279
+ switch (change.op) {
280
+ case 'taxonomy-upsert':
281
+ case 'ai-profile-upsert':
282
+ case 'initiative-upsert':
283
+ case 'taskforce-agent-upsert':
284
+ case 'taskforce-agent-skill-upsert':
285
+ return 0;
286
+ case 'workstream-upsert':
287
+ return 1;
288
+ case 'planning-identity-upsert':
289
+ return 2;
290
+ case 'upsert':
291
+ return 2;
292
+ case 'document-upsert':
293
+ case 'document-manifest':
294
+ case 'asset-upsert':
295
+ case 'asset-manifest':
296
+ return 3;
297
+ case 'document-review-session-upsert':
298
+ case 'annotated-attachment-session-upsert':
299
+ case 'agent-conversation-upsert':
300
+ case 'task-relationship-upsert':
301
+ return 4;
302
+ case 'document-review-comment-upsert':
303
+ case 'task-event-upsert':
304
+ case 'entity-event-upsert':
305
+ return 5;
306
+ case 'document-review-comment-delete':
307
+ case 'annotated-attachment-session-delete':
308
+ case 'task-relationship-delete':
309
+ return 6;
310
+ case 'document-review-session-delete':
311
+ case 'document-delete':
312
+ case 'asset-delete':
313
+ return 7;
314
+ case 'delete':
315
+ return 8;
316
+ default:
317
+ return 4;
318
+ }
319
+ }
320
+ function isWorkspacePushContentChange(change) {
321
+ return change.op === 'document-upsert'
322
+ || change.op === 'document-manifest'
323
+ || change.op === 'asset-upsert'
324
+ || change.op === 'asset-manifest'
325
+ || change.op === 'document-delete'
326
+ || change.op === 'asset-delete';
327
+ }
328
+ function measureWorkspacePushBatchBytes(input, safeChanges) {
329
+ return WORKSPACE_PUSH_REQUEST_OVERHEAD_BYTES + new TextEncoder().encode(JSON.stringify({
330
+ workspaceId: input.workspaceId,
331
+ idempotencyKey: '0'.repeat(64),
332
+ changes: safeChanges,
333
+ repairMode: input.repairMode === true,
334
+ repair: input.repairMode === true
335
+ })).byteLength;
336
+ }
337
+ function chunkWorkspacePushChanges(input, plainChanges, safeChanges) {
338
+ const pairs = plainChanges
339
+ .map((plain, index) => ({
340
+ plain,
341
+ safe: safeChanges[index],
342
+ phase: resolveWorkspacePushPhase(plain),
343
+ preparedIndex: index,
344
+ }))
345
+ .sort((left, right) => left.phase - right.phase || left.preparedIndex - right.preparedIndex);
346
+ if (pairs.length === 0)
347
+ return { batches: [[]], oversizedChangeIndex: null };
348
+ const batches = [];
349
+ let batch = [];
350
+ for (const pair of pairs) {
351
+ const singleBytes = measureWorkspacePushBatchBytes(input, [pair.safe]);
352
+ if (singleBytes > MAX_WORKSPACE_PUSH_SINGLE_CHANGE_BYTES) {
353
+ return { batches: [], oversizedChangeIndex: pair.preparedIndex };
354
+ }
355
+ const phaseChanged = batch.length > 0 && batch[0].phase !== pair.phase;
356
+ const candidate = [...batch, pair];
357
+ const candidateTooLarge = batch.length > 0
358
+ && measureWorkspacePushBatchBytes(input, candidate.map((entry) => entry.safe)) > MAX_WORKSPACE_PUSH_BYTES_PER_REQUEST;
359
+ if (phaseChanged || batch.length >= MAX_WORKSPACE_PUSH_CHANGES_PER_REQUEST || candidateTooLarge) {
360
+ batches.push(batch);
361
+ batch = [];
362
+ }
363
+ batch.push(pair);
364
+ if (singleBytes > MAX_WORKSPACE_PUSH_BYTES_PER_REQUEST) {
365
+ batches.push(batch);
366
+ batch = [];
367
+ }
368
+ }
369
+ if (batch.length > 0)
370
+ batches.push(batch);
371
+ return { batches, oversizedChangeIndex: null };
372
+ }
157
373
  export async function runWorkspacePushSyncService(input) {
158
- const changeCount = input.payload.changes.length;
374
+ const remoteServices = input.remoteServices
375
+ || createBrowserWorkspaceSyncEngineRemoteServices(input.resolveCloudAuthUrl);
376
+ let preparedOwnership = {
377
+ activeV3TaskMetadataIds: [],
378
+ activeV3TaskLifecycleIds: [],
379
+ activeV3TaskReopenAssigneeIds: [],
380
+ activeV3InitiativeIds: [],
381
+ initiativeProjectionOwner: 'v2',
382
+ combinedProjectionOwner: 'v2',
383
+ combinedProjectionEpoch: '0',
384
+ combinedV3SuppressedChangeCount: 0,
385
+ };
386
+ let preparedChanges;
387
+ let retainedPreparedPlan = input.preparedPlan || null;
388
+ let retainedPlanBatches = null;
389
+ if (retainedPreparedPlan) {
390
+ if (retainedPreparedPlan.contractVersion !== WORKSPACE_PUSH_PREPARED_PLAN_VERSION) {
391
+ throw new Error('Persisted V2 push prepared plan version is unsupported.');
392
+ }
393
+ retainedPlanBatches = reconstructPreparedPlanBatches(input.payload.changes, retainedPreparedPlan);
394
+ preparedChanges = retainedPlanBatches.flat();
395
+ preparedOwnership = retainedPreparedPlan.ownership;
396
+ }
397
+ else {
398
+ preparedChanges = input.payload.changes;
399
+ }
400
+ if (!retainedPreparedPlan && preparedChanges.length > 0) {
401
+ const preparation = await prepareWorkspacePushChanges({
402
+ workspaceId: input.workspaceId,
403
+ changes: preparedChanges,
404
+ }, {
405
+ readOwnership: input.localServices?.readPushOwnership,
406
+ });
407
+ if (!preparation.ok) {
408
+ const data = asObjectRecord(preparation.data);
409
+ return {
410
+ success: false,
411
+ status: preparation.status,
412
+ error: typeof data.error === 'string'
413
+ ? data.error
414
+ : 'Local workspace sync ownership could not be verified.',
415
+ code: typeof data.code === 'string' ? data.code : undefined,
416
+ retryAfterMs: preparation.retryAfterMs,
417
+ transient: isTransientWorkspaceSyncStatus(preparation.status),
418
+ requestMs: 0,
419
+ changeCount: input.payload.changes.length,
420
+ deleteCount: input.payload.deleteTaskIds.size,
421
+ currentTaskIds: input.payload.currentTaskIds,
422
+ currentTaskWatermarks: input.payload.currentTaskWatermarks ?? new Map(),
423
+ currentTaskChangeKeys: input.payload.currentTaskChangeKeys ?? new Map(),
424
+ currentTaskRelationshipChangeKeys: input.payload.currentTaskRelationshipChangeKeys ?? new Map(),
425
+ currentTaxonomyChangeKey: input.payload.currentTaxonomyChangeKey ?? '',
426
+ deleteTaskIds: input.payload.deleteTaskIds,
427
+ currentInitiativeIds: input.payload.currentInitiativeIds,
428
+ currentInitiativeWatermarks: input.payload.currentInitiativeWatermarks,
429
+ currentWorkstreamIds: input.payload.currentWorkstreamIds,
430
+ currentWorkstreamWatermarks: input.payload.currentWorkstreamWatermarks,
431
+ currentAiProfileIds: input.payload.currentAiProfileIds,
432
+ currentAiProfileWatermarks: input.payload.currentAiProfileWatermarks,
433
+ currentAiProfileChangeKeys: input.payload.currentAiProfileChangeKeys ?? new Map(),
434
+ currentDocumentPaths: input.payload.currentDocumentPaths,
435
+ deleteDocumentPaths: input.payload.deleteDocumentPaths,
436
+ currentDocumentWatermarks: input.payload.currentDocumentWatermarks,
437
+ currentAssetPaths: input.payload.currentAssetPaths,
438
+ deleteAssetPaths: input.payload.deleteAssetPaths,
439
+ currentAssetWatermarks: input.payload.currentAssetWatermarks,
440
+ currentDocumentReviewSessionIds: input.payload.currentDocumentReviewSessionIds,
441
+ deleteDocumentReviewSessionIds: input.payload.deleteDocumentReviewSessionIds,
442
+ currentDocumentReviewSessionWatermarks: input.payload.currentDocumentReviewSessionWatermarks,
443
+ currentDocumentReviewCommentIds: input.payload.currentDocumentReviewCommentIds,
444
+ deleteDocumentReviewCommentIds: input.payload.deleteDocumentReviewCommentIds,
445
+ currentDocumentReviewCommentWatermarks: input.payload.currentDocumentReviewCommentWatermarks,
446
+ currentAnnotatedAttachmentSessionIds: input.payload.currentAnnotatedAttachmentSessionIds,
447
+ deleteAnnotatedAttachmentSessionIds: input.payload.deleteAnnotatedAttachmentSessionIds,
448
+ currentAnnotatedAttachmentSessionWatermarks: input.payload.currentAnnotatedAttachmentSessionWatermarks,
449
+ currentTaskforceAgentIds: input.payload.currentTaskforceAgentIds ?? new Set(),
450
+ currentTaskforceAgentWatermarks: input.payload.currentTaskforceAgentWatermarks ?? new Map(),
451
+ currentTaskforceAgentSkillIds: input.payload.currentTaskforceAgentSkillIds ?? new Set(),
452
+ currentTaskforceAgentSkillWatermarks: input.payload.currentTaskforceAgentSkillWatermarks ?? new Map(),
453
+ currentAgentConversationIds: input.payload.currentAgentConversationIds ?? new Set(),
454
+ currentAgentConversationWatermarks: input.payload.currentAgentConversationWatermarks ?? new Map(),
455
+ currentTaskEventWatermarks: input.payload.currentTaskEventWatermarks,
456
+ pushedWatermarks: new Map(),
457
+ pushedTaskChangeKeys: new Map(),
458
+ emittedEventIds: [],
459
+ appliedTaskUpserts: [],
460
+ };
461
+ }
462
+ preparedChanges = preparation.data.changes;
463
+ preparedOwnership = preparation.data.ownership;
464
+ }
465
+ const changeCount = preparedChanges.length;
466
+ const effectiveDeltaDiagnostics = buildEffectiveWorkspacePushDiagnostics(input.payload.deltaDiagnostics, preparedChanges, preparedOwnership);
159
467
  const deleteCount = input.payload.deleteTaskIds.size;
160
- const idempotencyKey = await computeIdempotencyKey(input.workspaceId, input.payload.changes);
161
468
  let requestMs = 0;
469
+ const canElideSteadyStateRequest = changeCount === 0
470
+ && input.repairMode !== true
471
+ && (preparedOwnership?.combinedProjectionOwner === 'v3'
472
+ || (Boolean(input.payload.deltaDiagnostics)
473
+ && input.payload.deltaDiagnostics?.baselineResetReason !== 'missing-baseline'));
474
+ if (canElideSteadyStateRequest) {
475
+ return {
476
+ success: true,
477
+ syncedAt: new Date().toISOString(),
478
+ requestMs: 0,
479
+ changeCount: 0,
480
+ effectiveDeltaDiagnostics,
481
+ deleteCount,
482
+ currentTaskIds: input.payload.currentTaskIds,
483
+ currentTaskWatermarks: input.payload.currentTaskWatermarks ?? new Map(),
484
+ currentTaskChangeKeys: input.payload.currentTaskChangeKeys ?? new Map(),
485
+ currentTaskRelationshipChangeKeys: input.payload.currentTaskRelationshipChangeKeys ?? new Map(),
486
+ currentTaxonomyChangeKey: input.payload.currentTaxonomyChangeKey ?? '',
487
+ deleteTaskIds: input.payload.deleteTaskIds,
488
+ currentInitiativeIds: input.payload.currentInitiativeIds,
489
+ currentInitiativeWatermarks: input.payload.currentInitiativeWatermarks,
490
+ currentWorkstreamIds: input.payload.currentWorkstreamIds,
491
+ currentWorkstreamWatermarks: input.payload.currentWorkstreamWatermarks,
492
+ currentAiProfileIds: input.payload.currentAiProfileIds,
493
+ currentAiProfileWatermarks: input.payload.currentAiProfileWatermarks,
494
+ currentAiProfileChangeKeys: input.payload.currentAiProfileChangeKeys ?? new Map(),
495
+ currentDocumentPaths: input.payload.currentDocumentPaths,
496
+ deleteDocumentPaths: input.payload.deleteDocumentPaths,
497
+ currentDocumentWatermarks: input.payload.currentDocumentWatermarks,
498
+ currentAssetPaths: input.payload.currentAssetPaths,
499
+ deleteAssetPaths: input.payload.deleteAssetPaths,
500
+ currentAssetWatermarks: input.payload.currentAssetWatermarks,
501
+ currentDocumentReviewSessionIds: input.payload.currentDocumentReviewSessionIds,
502
+ deleteDocumentReviewSessionIds: input.payload.deleteDocumentReviewSessionIds,
503
+ currentDocumentReviewSessionWatermarks: input.payload.currentDocumentReviewSessionWatermarks,
504
+ currentDocumentReviewCommentIds: input.payload.currentDocumentReviewCommentIds,
505
+ deleteDocumentReviewCommentIds: input.payload.deleteDocumentReviewCommentIds,
506
+ currentDocumentReviewCommentWatermarks: input.payload.currentDocumentReviewCommentWatermarks,
507
+ currentAnnotatedAttachmentSessionIds: input.payload.currentAnnotatedAttachmentSessionIds,
508
+ deleteAnnotatedAttachmentSessionIds: input.payload.deleteAnnotatedAttachmentSessionIds,
509
+ currentAnnotatedAttachmentSessionWatermarks: input.payload.currentAnnotatedAttachmentSessionWatermarks,
510
+ currentTaskforceAgentIds: input.payload.currentTaskforceAgentIds ?? new Set(),
511
+ currentTaskforceAgentWatermarks: input.payload.currentTaskforceAgentWatermarks ?? new Map(),
512
+ currentTaskforceAgentSkillIds: input.payload.currentTaskforceAgentSkillIds ?? new Set(),
513
+ currentTaskforceAgentSkillWatermarks: input.payload.currentTaskforceAgentSkillWatermarks ?? new Map(),
514
+ currentAgentConversationIds: input.payload.currentAgentConversationIds ?? new Set(),
515
+ currentAgentConversationWatermarks: input.payload.currentAgentConversationWatermarks ?? new Map(),
516
+ currentTaskEventWatermarks: input.payload.currentTaskEventWatermarks,
517
+ pushedWatermarks: new Map(),
518
+ pushedTaskChangeKeys: new Map(),
519
+ emittedEventIds: [],
520
+ appliedTaskUpserts: []
521
+ };
522
+ }
162
523
  // Attempt document encryption if key configured
163
- let safeChanges = input.payload.changes;
524
+ let safeChanges = preparedChanges;
164
525
  if (typeof process !== 'undefined' && process.env?.TASKFORCE_SYNC_KEY) {
165
526
  const syncKey = process.env.TASKFORCE_SYNC_KEY;
166
527
  const encryptedChanges = [];
@@ -183,39 +544,38 @@ export async function runWorkspacePushSyncService(input) {
183
544
  }
184
545
  safeChanges = encryptedChanges;
185
546
  }
186
- const sendPush = async () => {
187
- const requestStartedAtMs = Date.now();
188
- const result = await pushWorkspaceChanges(input.resolveCloudAuthUrl, {
189
- workspaceId: input.workspaceId,
190
- idempotencyKey,
191
- changes: safeChanges,
192
- repairMode: input.repairMode === true
193
- });
194
- requestMs += (Date.now() - requestStartedAtMs);
195
- return result;
196
- };
197
- let pushResult = await sendPush();
198
- if (!pushResult.ok && (pushResult.status === 403 || pushResult.status === 409)) {
199
- const ensured = await input.ensureCloudWorkspaceReadyForSync();
200
- if (ensured.success) {
201
- pushResult = await sendPush();
202
- }
547
+ let batchPlan = chunkWorkspacePushChanges(input, preparedChanges, safeChanges);
548
+ if (retainedPlanBatches) {
549
+ let safeIndex = 0;
550
+ batchPlan = {
551
+ oversizedChangeIndex: null,
552
+ batches: retainedPlanBatches.map((batch) => batch.map((plain) => {
553
+ const pair = {
554
+ plain,
555
+ safe: safeChanges[safeIndex],
556
+ phase: resolveWorkspacePushPhase(plain),
557
+ preparedIndex: safeIndex,
558
+ };
559
+ safeIndex += 1;
560
+ return pair;
561
+ })),
562
+ };
203
563
  }
204
- if (!pushResult.ok) {
205
- const data = asObjectRecord(pushResult.data);
564
+ if (batchPlan.oversizedChangeIndex !== null) {
565
+ const oversizedChange = preparedChanges[batchPlan.oversizedChangeIndex];
206
566
  return {
207
567
  success: false,
208
- status: pushResult.status,
209
- error: typeof data.error === 'string' ? data.error : undefined,
210
- code: typeof data.code === 'string' ? data.code : undefined,
211
- retryAfterMs: pushResult.retryAfterMs,
212
- transient: isTransientWorkspaceSyncStatus(pushResult.status),
568
+ status: 413,
569
+ error: `Workspace sync change ${batchPlan.oversizedChangeIndex + 1} (${oversizedChange.op}) exceeds the single-change transfer limit.`,
570
+ transient: false,
213
571
  requestMs,
214
572
  changeCount,
215
573
  deleteCount,
216
574
  currentTaskIds: input.payload.currentTaskIds,
217
575
  currentTaskWatermarks: input.payload.currentTaskWatermarks ?? new Map(),
218
576
  currentTaskChangeKeys: input.payload.currentTaskChangeKeys ?? new Map(),
577
+ currentTaskRelationshipChangeKeys: input.payload.currentTaskRelationshipChangeKeys ?? new Map(),
578
+ currentTaxonomyChangeKey: input.payload.currentTaxonomyChangeKey ?? '',
219
579
  deleteTaskIds: input.payload.deleteTaskIds,
220
580
  currentInitiativeIds: input.payload.currentInitiativeIds,
221
581
  currentInitiativeWatermarks: input.payload.currentInitiativeWatermarks,
@@ -239,6 +599,12 @@ export async function runWorkspacePushSyncService(input) {
239
599
  currentAnnotatedAttachmentSessionIds: input.payload.currentAnnotatedAttachmentSessionIds,
240
600
  deleteAnnotatedAttachmentSessionIds: input.payload.deleteAnnotatedAttachmentSessionIds,
241
601
  currentAnnotatedAttachmentSessionWatermarks: input.payload.currentAnnotatedAttachmentSessionWatermarks,
602
+ currentTaskforceAgentIds: input.payload.currentTaskforceAgentIds ?? new Set(),
603
+ currentTaskforceAgentWatermarks: input.payload.currentTaskforceAgentWatermarks ?? new Map(),
604
+ currentTaskforceAgentSkillIds: input.payload.currentTaskforceAgentSkillIds ?? new Set(),
605
+ currentTaskforceAgentSkillWatermarks: input.payload.currentTaskforceAgentSkillWatermarks ?? new Map(),
606
+ currentAgentConversationIds: input.payload.currentAgentConversationIds ?? new Set(),
607
+ currentAgentConversationWatermarks: input.payload.currentAgentConversationWatermarks ?? new Map(),
242
608
  currentTaskEventWatermarks: input.payload.currentTaskEventWatermarks,
243
609
  pushedWatermarks: new Map(),
244
610
  pushedTaskChangeKeys: new Map(),
@@ -246,38 +612,241 @@ export async function runWorkspacePushSyncService(input) {
246
612
  appliedTaskUpserts: []
247
613
  };
248
614
  }
249
- const pushData = asObjectRecord(pushResult.data);
250
- const emittedEventIds = Array.isArray(pushData.emittedEventIds)
251
- ? Array.from(new Set(pushData.emittedEventIds
252
- .map((entry) => String(entry || '').trim())
253
- .filter(Boolean)))
254
- : [];
255
- const appliedTaskUpserts = Array.isArray(pushData.appliedTaskUpserts)
256
- ? pushData.appliedTaskUpserts
257
- .map((entry) => {
258
- const source = entry && typeof entry === 'object' ? entry : {};
259
- const task = source.task && typeof source.task === 'object'
260
- ? source.task
261
- : null;
262
- const taskId = String(task?.id || '').trim();
263
- if (!task || !taskId)
264
- return null;
265
- return {
266
- archived: source.archived === true,
267
- task
615
+ const emittedEventIds = new Set();
616
+ const appliedTaskUpserts = [];
617
+ let batchOperationIdentities;
618
+ if (retainedPreparedPlan) {
619
+ // The checkpoint boundary validates the complete prepared-plan
620
+ // fingerprint before this service receives it. Preserve those exact
621
+ // operation identities: older plans were hashed before the payload
622
+ // codec canonicalized object-key order, so recomputing after a restart
623
+ // can change the hash without changing the semantic batch.
624
+ batchOperationIdentities = [...retainedPreparedPlan.batchOperationIdentities];
625
+ if (batchOperationIdentities.length !== batchPlan.batches.length
626
+ || new Set(batchOperationIdentities).size !== batchOperationIdentities.length
627
+ || batchOperationIdentities.some((identity) => !/^[a-f0-9]{64}$/.test(identity))) {
628
+ throw new Error('Persisted V2 push prepared plan fingerprint does not match its frozen batches.');
629
+ }
630
+ }
631
+ else {
632
+ batchOperationIdentities = await Promise.all(batchPlan.batches.map((batch) => computeIdempotencyKey(input.workspaceId, batch.map((entry) => entry.plain), input.repairMode === true)));
633
+ const preparedEntries = buildPreparedPlanEntries(input.payload.changes, preparedChanges);
634
+ retainedPreparedPlan = {
635
+ contractVersion: WORKSPACE_PUSH_PREPARED_PLAN_VERSION,
636
+ ownership: preparedOwnership,
637
+ batches: batchPlan.batches.map((batch) => batch.map((entry) => preparedEntries[entry.preparedIndex])),
638
+ batchOperationIdentities: [...batchOperationIdentities],
639
+ };
640
+ }
641
+ const pushBoundary = createWorkspaceSyncEngineV2PushBoundary(batchOperationIdentities);
642
+ const requestedAcknowledgements = input.acknowledgedNonApplyingBatchOperationIdentities || [];
643
+ if (new Set(requestedAcknowledgements).size !== requestedAcknowledgements.length) {
644
+ throw new Error('Persisted V2 push batch acknowledgement state does not match the frozen push plan.');
645
+ }
646
+ for (const identity of requestedAcknowledgements) {
647
+ const batchIndex = batchOperationIdentities.indexOf(identity);
648
+ if (batchIndex >= 0 && workspaceSyncEngineExpectedTaskEchoIds(batchPlan.batches[batchIndex].map((entry) => entry.plain)).length > 0) {
649
+ throw new Error('Persisted V2 push batch acknowledgement state does not match the frozen push plan.');
650
+ }
651
+ }
652
+ const validAcknowledgements = requestedAcknowledgements.filter((identity) => {
653
+ const batchIndex = batchOperationIdentities.indexOf(identity);
654
+ return batchIndex >= 0 && workspaceSyncEngineExpectedTaskEchoIds(batchPlan.batches[batchIndex].map((entry) => entry.plain)).length === 0;
655
+ });
656
+ const replayedLegacyAcknowledgementIdentities = input.preparedPlan
657
+ ? []
658
+ : requestedAcknowledgements.filter((identity) => !validAcknowledgements.includes(identity));
659
+ if (retainedPreparedPlan && !input.preparedPlan) {
660
+ await input.onPreparedPlan?.({
661
+ plan: retainedPreparedPlan,
662
+ acknowledgedOperationIdentities: validAcknowledgements,
663
+ replayedLegacyAcknowledgementIdentities,
664
+ });
665
+ }
666
+ const acknowledgedNonApplyingBatchOperationIdentities = new Set(validAcknowledgements);
667
+ if (input.preparedPlan
668
+ && acknowledgedNonApplyingBatchOperationIdentities.size !== requestedAcknowledgements.length) {
669
+ throw new Error('Persisted V2 push batch acknowledgement state does not match the frozen push plan.');
670
+ }
671
+ let completedBatchCount = 0;
672
+ let completedChangeCount = 0;
673
+ const pushTransferReceipts = [];
674
+ const abandonRetainedPushReceipts = async (errorCode) => {
675
+ if (pushTransferReceipts.length === 0)
676
+ return;
677
+ const receipts = pushTransferReceipts.splice(0);
678
+ await remoteServices.abandonTransferReceipts({
679
+ workspaceId: input.workspaceId,
680
+ receipts,
681
+ errorCode,
682
+ });
683
+ };
684
+ try {
685
+ for (const [batchIndex, batch] of batchPlan.batches.entries()) {
686
+ const plainBatchChanges = batch.map((entry) => entry.plain);
687
+ const safeBatchChanges = batch.map((entry) => entry.safe);
688
+ const expectedTaskEchoIds = workspaceSyncEngineExpectedTaskEchoIds(plainBatchChanges);
689
+ const idempotencyKey = batchOperationIdentities[batchIndex];
690
+ if (acknowledgedNonApplyingBatchOperationIdentities.has(idempotencyKey)) {
691
+ completedBatchCount += 1;
692
+ completedChangeCount += plainBatchChanges.length;
693
+ continue;
694
+ }
695
+ if (pushTransferReceipts.length > 0) {
696
+ await remoteServices.retainTransferReceipts?.({
697
+ workspaceId: input.workspaceId,
698
+ receipts: pushTransferReceipts,
699
+ });
700
+ }
701
+ const sendPush = async () => {
702
+ const requestStartedAtMs = Date.now();
703
+ const result = await remoteServices.pushWorkspaceChanges({
704
+ workspaceId: input.workspaceId,
705
+ idempotencyKey,
706
+ pushBoundary,
707
+ changes: safeBatchChanges,
708
+ ownership: preparedOwnership,
709
+ repairMode: input.repairMode === true,
710
+ });
711
+ requestMs += (Date.now() - requestStartedAtMs);
712
+ return result;
268
713
  };
269
- })
270
- .filter((entry) => Boolean(entry))
271
- : [];
714
+ let pushResult = await sendPush();
715
+ let pushErrorData = asObjectRecord(pushResult.data);
716
+ let pushInProgress = pushResult.status === 409 && pushErrorData.code === 'SYNC_PUSH_IN_PROGRESS';
717
+ if (!pushResult.ok && !pushInProgress && (pushResult.status === 403 || pushResult.status === 409)) {
718
+ const ensured = await input.ensureCloudWorkspaceReadyForSync();
719
+ if (ensured.success) {
720
+ pushResult = await sendPush();
721
+ pushErrorData = asObjectRecord(pushResult.data);
722
+ pushInProgress = pushResult.status === 409 && pushErrorData.code === 'SYNC_PUSH_IN_PROGRESS';
723
+ }
724
+ }
725
+ if (pushResult.transferReceipt) {
726
+ pushTransferReceipts.push(pushResult.transferReceipt);
727
+ }
728
+ if (!pushResult.ok) {
729
+ await abandonRetainedPushReceipts('WORKSPACE_SYNC_V2_PUSH_ATTEMPT_FAILED');
730
+ const data = asObjectRecord(pushResult.data);
731
+ const failedOperations = Array.from(new Set(plainBatchChanges.map((change) => change.op)));
732
+ const failedContentChanges = plainBatchChanges.filter(isWorkspacePushContentChange).length;
733
+ return {
734
+ success: false,
735
+ status: pushResult.status,
736
+ error: typeof data.error === 'string' ? data.error : undefined,
737
+ code: typeof data.code === 'string' ? data.code : undefined,
738
+ batchProgress: {
739
+ totalBatches: batchPlan.batches.length,
740
+ completedBatches: completedBatchCount,
741
+ completedChanges: completedChangeCount,
742
+ failedBatchIndex: batchIndex,
743
+ failedChangeCount: plainBatchChanges.length,
744
+ failedOperations,
745
+ failureDomain: failedContentChanges === plainBatchChanges.length
746
+ ? 'content'
747
+ : failedContentChanges === 0
748
+ ? 'metadata'
749
+ : 'mixed',
750
+ },
751
+ retryAfterMs: pushResult.retryAfterMs,
752
+ transient: pushInProgress || isTransientWorkspaceSyncStatus(pushResult.status),
753
+ requestMs,
754
+ changeCount,
755
+ deleteCount,
756
+ currentTaskIds: input.payload.currentTaskIds,
757
+ currentTaskWatermarks: input.payload.currentTaskWatermarks ?? new Map(),
758
+ currentTaskChangeKeys: input.payload.currentTaskChangeKeys ?? new Map(),
759
+ currentTaskRelationshipChangeKeys: input.payload.currentTaskRelationshipChangeKeys ?? new Map(),
760
+ currentTaxonomyChangeKey: input.payload.currentTaxonomyChangeKey ?? '',
761
+ deleteTaskIds: input.payload.deleteTaskIds,
762
+ currentInitiativeIds: input.payload.currentInitiativeIds,
763
+ currentInitiativeWatermarks: input.payload.currentInitiativeWatermarks,
764
+ currentWorkstreamIds: input.payload.currentWorkstreamIds,
765
+ currentWorkstreamWatermarks: input.payload.currentWorkstreamWatermarks,
766
+ currentAiProfileIds: input.payload.currentAiProfileIds,
767
+ currentAiProfileWatermarks: input.payload.currentAiProfileWatermarks,
768
+ currentAiProfileChangeKeys: input.payload.currentAiProfileChangeKeys ?? new Map(),
769
+ currentDocumentPaths: input.payload.currentDocumentPaths,
770
+ deleteDocumentPaths: input.payload.deleteDocumentPaths,
771
+ currentDocumentWatermarks: input.payload.currentDocumentWatermarks,
772
+ currentAssetPaths: input.payload.currentAssetPaths,
773
+ deleteAssetPaths: input.payload.deleteAssetPaths,
774
+ currentAssetWatermarks: input.payload.currentAssetWatermarks,
775
+ currentDocumentReviewSessionIds: input.payload.currentDocumentReviewSessionIds,
776
+ deleteDocumentReviewSessionIds: input.payload.deleteDocumentReviewSessionIds,
777
+ currentDocumentReviewSessionWatermarks: input.payload.currentDocumentReviewSessionWatermarks,
778
+ currentDocumentReviewCommentIds: input.payload.currentDocumentReviewCommentIds,
779
+ deleteDocumentReviewCommentIds: input.payload.deleteDocumentReviewCommentIds,
780
+ currentDocumentReviewCommentWatermarks: input.payload.currentDocumentReviewCommentWatermarks,
781
+ currentAnnotatedAttachmentSessionIds: input.payload.currentAnnotatedAttachmentSessionIds,
782
+ deleteAnnotatedAttachmentSessionIds: input.payload.deleteAnnotatedAttachmentSessionIds,
783
+ currentAnnotatedAttachmentSessionWatermarks: input.payload.currentAnnotatedAttachmentSessionWatermarks,
784
+ currentTaskforceAgentIds: input.payload.currentTaskforceAgentIds ?? new Set(),
785
+ currentTaskforceAgentWatermarks: input.payload.currentTaskforceAgentWatermarks ?? new Map(),
786
+ currentTaskforceAgentSkillIds: input.payload.currentTaskforceAgentSkillIds ?? new Set(),
787
+ currentTaskforceAgentSkillWatermarks: input.payload.currentTaskforceAgentSkillWatermarks ?? new Map(),
788
+ currentAgentConversationIds: input.payload.currentAgentConversationIds ?? new Set(),
789
+ currentAgentConversationWatermarks: input.payload.currentAgentConversationWatermarks ?? new Map(),
790
+ currentTaskEventWatermarks: input.payload.currentTaskEventWatermarks,
791
+ pushedWatermarks: new Map(),
792
+ pushedTaskChangeKeys: new Map(),
793
+ emittedEventIds: [],
794
+ appliedTaskUpserts: []
795
+ };
796
+ }
797
+ const pushData = asObjectRecord(pushResult.data);
798
+ if (Array.isArray(pushData.emittedEventIds)) {
799
+ for (const eventId of pushData.emittedEventIds
800
+ .map((entry) => String(entry || '').trim())
801
+ .filter(Boolean)) {
802
+ emittedEventIds.add(eventId);
803
+ }
804
+ }
805
+ const normalizedTaskUpserts = parseWorkspaceSyncEngineAppliedTaskUpserts(pushData, expectedTaskEchoIds);
806
+ appliedTaskUpserts.push(...normalizedTaskUpserts);
807
+ if (pushResult.transferReceipt && normalizedTaskUpserts.length === 0) {
808
+ await remoteServices.acknowledgeNonApplyingTransferReceipts({
809
+ workspaceId: input.workspaceId,
810
+ receipts: [pushResult.transferReceipt],
811
+ });
812
+ const receiptIndex = pushTransferReceipts.indexOf(pushResult.transferReceipt);
813
+ if (receiptIndex >= 0)
814
+ pushTransferReceipts.splice(receiptIndex, 1);
815
+ acknowledgedNonApplyingBatchOperationIdentities.add(idempotencyKey);
816
+ await input.onNonApplyingBatchAcknowledged?.({
817
+ operationIdentity: idempotencyKey,
818
+ acknowledgedOperationIdentities: batchOperationIdentities.filter((identity) => acknowledgedNonApplyingBatchOperationIdentities.has(identity)),
819
+ });
820
+ }
821
+ completedBatchCount += 1;
822
+ completedChangeCount += plainBatchChanges.length;
823
+ }
824
+ }
825
+ catch (error) {
826
+ await abandonRetainedPushReceipts('WORKSPACE_SYNC_V2_PUSH_ATTEMPT_FAILED');
827
+ throw error;
828
+ }
272
829
  return {
273
830
  success: true,
274
831
  syncedAt: new Date().toISOString(),
275
832
  requestMs,
276
833
  changeCount,
834
+ batchProgress: {
835
+ totalBatches: batchPlan.batches.length,
836
+ completedBatches: completedBatchCount,
837
+ completedChanges: completedChangeCount,
838
+ failedBatchIndex: null,
839
+ failedChangeCount: 0,
840
+ failedOperations: [],
841
+ failureDomain: null,
842
+ },
843
+ effectiveDeltaDiagnostics,
277
844
  deleteCount,
278
845
  currentTaskIds: input.payload.currentTaskIds,
279
846
  currentTaskWatermarks: input.payload.currentTaskWatermarks ?? new Map(),
280
847
  currentTaskChangeKeys: input.payload.currentTaskChangeKeys ?? new Map(),
848
+ currentTaskRelationshipChangeKeys: input.payload.currentTaskRelationshipChangeKeys ?? new Map(),
849
+ currentTaxonomyChangeKey: input.payload.currentTaxonomyChangeKey ?? '',
281
850
  deleteTaskIds: input.payload.deleteTaskIds,
282
851
  currentInitiativeIds: input.payload.currentInitiativeIds,
283
852
  currentInitiativeWatermarks: input.payload.currentInitiativeWatermarks,
@@ -301,14 +870,54 @@ export async function runWorkspacePushSyncService(input) {
301
870
  currentAnnotatedAttachmentSessionIds: input.payload.currentAnnotatedAttachmentSessionIds,
302
871
  deleteAnnotatedAttachmentSessionIds: input.payload.deleteAnnotatedAttachmentSessionIds,
303
872
  currentAnnotatedAttachmentSessionWatermarks: input.payload.currentAnnotatedAttachmentSessionWatermarks,
873
+ currentTaskforceAgentIds: input.payload.currentTaskforceAgentIds ?? new Set(),
874
+ currentTaskforceAgentWatermarks: input.payload.currentTaskforceAgentWatermarks ?? new Map(),
875
+ currentTaskforceAgentSkillIds: input.payload.currentTaskforceAgentSkillIds ?? new Set(),
876
+ currentTaskforceAgentSkillWatermarks: input.payload.currentTaskforceAgentSkillWatermarks ?? new Map(),
877
+ currentAgentConversationIds: input.payload.currentAgentConversationIds ?? new Set(),
878
+ currentAgentConversationWatermarks: input.payload.currentAgentConversationWatermarks ?? new Map(),
304
879
  currentTaskEventWatermarks: input.payload.currentTaskEventWatermarks,
305
880
  pushedWatermarks: input.payload.pushedWatermarks,
306
881
  pushedTaskChangeKeys: input.payload.pushedTaskChangeKeys ?? new Map(),
307
- emittedEventIds,
308
- appliedTaskUpserts
882
+ emittedEventIds: Array.from(emittedEventIds),
883
+ appliedTaskUpserts,
884
+ pushBoundary,
885
+ pushTransferReceipts,
309
886
  };
310
887
  }
311
888
  export async function runWorkspacePullSyncService(input) {
889
+ const remoteServices = input.remoteServices
890
+ || createBrowserWorkspaceSyncEngineRemoteServices(input.resolveCloudAuthUrl);
891
+ let activeTransferReceipts = [];
892
+ const captureTransferReceipt = (response) => {
893
+ if (response.transferReceipt)
894
+ activeTransferReceipts.push(response.transferReceipt);
895
+ };
896
+ const abandonActiveTransferReceipts = async (errorCode) => {
897
+ if (activeTransferReceipts.length === 0)
898
+ return;
899
+ const receipts = activeTransferReceipts;
900
+ await remoteServices.abandonTransferReceipts({
901
+ workspaceId: input.workspaceId,
902
+ receipts,
903
+ errorCode,
904
+ });
905
+ activeTransferReceipts = [];
906
+ };
907
+ const readContentManifest = input.localServices?.readContentManifest
908
+ || getLocalWorkspaceContentManifest;
909
+ const applyV2Batch = input.localServices?.applyV2Batch
910
+ || applyLocalWorkspaceChanges;
911
+ const listContentPullObligations = input.localServices?.listContentPullObligations
912
+ || getLocalWorkspaceContentPullObligations;
913
+ const recordContentPullObligationFailures = input.localServices?.recordContentPullObligationFailures
914
+ || recordLocalWorkspaceContentPullObligationFailures;
915
+ const persistContentPullFailure = async (obligationIds, error) => {
916
+ const result = await recordContentPullObligationFailures(input.workspaceId, obligationIds, error);
917
+ if (!result.ok) {
918
+ throw new Error(String(result.data?.error || 'Failed to persist content-pull retry state.'));
919
+ }
920
+ };
312
921
  let cursor = input.cursor;
313
922
  let hasMore = true;
314
923
  let pages = 0;
@@ -320,32 +929,224 @@ export async function runWorkspacePullSyncService(input) {
320
929
  let pulledArchivedUpserts = false;
321
930
  let pulledTaskEventUpserts = false;
322
931
  let pulledPlanningUpserts = false;
932
+ let pulledTaskforceAgentUpserts = false;
933
+ let pulledAgentRoleUpserts = false;
934
+ let pulledTaskforceAgentSkillUpserts = false;
935
+ let pulledAgentConversationUpserts = false;
323
936
  const documentDecryptFailures = new Set();
324
937
  const emittedEventIds = new Set();
325
938
  const pulledAnnotatedAttachmentSessionIds = new Set();
326
939
  let lastServerDiagnostics = null;
940
+ const contentReconciliationDiagnostics = {
941
+ manifestEntries: 0,
942
+ bodiesRequested: 0,
943
+ bodiesTransferred: 0,
944
+ contentBytesTransferred: 0,
945
+ contentBytesAvoided: 0,
946
+ obligationsAttempted: 0,
947
+ obligationsResolved: 0,
948
+ obligationsRemaining: 0,
949
+ };
327
950
  const maxPages = Number.isFinite(Number(input.maxPages)) ? Math.max(1, Math.floor(Number(input.maxPages))) : 20;
951
+ let localContentManifest = new Map();
952
+ const openContentPullObligationIds = new Set();
328
953
  try {
954
+ {
955
+ const obligationsResponse = await listContentPullObligations(input.workspaceId, 100);
956
+ if (!obligationsResponse.ok) {
957
+ throw new Error(String(obligationsResponse.data?.error
958
+ || `Local content-pull obligation read failed (${obligationsResponse.status}).`));
959
+ }
960
+ const openObligations = Array.isArray(obligationsResponse.data?.obligations)
961
+ ? obligationsResponse.data.obligations
962
+ : [];
963
+ openObligations.forEach((obligation) => {
964
+ openContentPullObligationIds.add(workspaceSyncContentPullObligationId(obligation));
965
+ });
966
+ const obligations = openObligations.filter((obligation) => (isContentPullObligationDue(obligation)));
967
+ contentReconciliationDiagnostics.obligationsAttempted = obligations.length;
968
+ if (obligations.length > 0) {
969
+ const contentResponse = await remoteServices.pullWorkspaceContent({
970
+ workspaceId: input.workspaceId,
971
+ requests: obligations.map(({ kind, path }) => ({ kind, path })),
972
+ previousCursor: cursor,
973
+ });
974
+ captureTransferReceipt(contentResponse);
975
+ if (contentResponse.ok) {
976
+ const contentData = contentResponse.data || {};
977
+ const hydratedChanges = Array.isArray(contentData.changes) ? contentData.changes : [];
978
+ const metadataEntries = Array.isArray(contentData.contentMetadata)
979
+ ? contentData.contentMetadata
980
+ : [];
981
+ const authoritativeMetadata = new Map(metadataEntries.map((entry) => [`${entry.kind}:${entry.path}`, entry]));
982
+ const obligationById = new Map(obligations.map((obligation) => [
983
+ workspaceSyncContentPullObligationId(obligation),
984
+ obligation,
985
+ ]));
986
+ if (authoritativeMetadata.size !== metadataEntries.length
987
+ || metadataEntries.some((entry) => (!obligationById.has(`${entry.kind}:${entry.path}`)))) {
988
+ await persistContentPullFailure(obligations.map(workspaceSyncContentPullObligationId), 'Content response contained duplicate or unexpected authoritative metadata.');
989
+ throw new Error('Workspace content obligation response contained invalid authoritative metadata.');
990
+ }
991
+ const resolvedIds = [];
992
+ const resolutionClaims = [];
993
+ for (const change of hydratedChanges) {
994
+ if (change.op !== 'document-upsert' && change.op !== 'asset-upsert') {
995
+ await persistContentPullFailure(obligations.map(workspaceSyncContentPullObligationId), `Content response contained invalid operation ${change.op}.`);
996
+ throw new Error(`Workspace content obligation returned invalid operation: ${change.op}.`);
997
+ }
998
+ const kind = change.op === 'document-upsert' ? 'document' : 'asset';
999
+ const obligationId = `${kind}:${change.path}`;
1000
+ if (!obligationById.has(obligationId)) {
1001
+ await persistContentPullFailure(obligations.map(workspaceSyncContentPullObligationId), `Content response contained unexpected body ${obligationId}.`);
1002
+ throw new Error(`Workspace content obligation returned an unexpected body: ${obligationId}.`);
1003
+ }
1004
+ const metadata = authoritativeMetadata.get(obligationId);
1005
+ if (!metadata) {
1006
+ await persistContentPullFailure([obligationId], 'Content response omitted authoritative metadata.');
1007
+ throw new Error(`Workspace content obligation omitted authoritative metadata: ${obligationId}.`);
1008
+ }
1009
+ if (resolvedIds.includes(obligationId)) {
1010
+ await persistContentPullFailure([obligationId], 'Content response contained a duplicate body.');
1011
+ throw new Error(`Workspace content obligation returned a duplicate body: ${obligationId}.`);
1012
+ }
1013
+ if (typeof process !== 'undefined'
1014
+ && process.env?.TASKFORCE_SYNC_KEY) {
1015
+ try {
1016
+ await decryptWorkspaceSyncContentChangeInPlace(change, process.env.TASKFORCE_SYNC_KEY);
1017
+ }
1018
+ catch (error) {
1019
+ await persistContentPullFailure([obligationId], String(error?.message || 'Content decryption failed.'));
1020
+ throw error;
1021
+ }
1022
+ }
1023
+ const actual = await fingerprintWorkspaceContentBody(kind, change.op === 'document-upsert' ? change.content : change.contentBase64);
1024
+ if (actual.sha256 !== String(metadata.sha256 || '').toLowerCase()
1025
+ || actual.sizeBytes !== Number(metadata.sizeBytes)
1026
+ || String(metadata.updatedAt || '') < String(obligationById.get(obligationId)?.sourceWatermark || '')
1027
+ || String(change.updatedAt || '') < String(obligationById.get(obligationId)?.sourceWatermark || '')) {
1028
+ await persistContentPullFailure([obligationId], 'Authoritative content response was stale or failed verification.');
1029
+ throw new Error(`Workspace content obligation verification failed: ${obligationId}.`);
1030
+ }
1031
+ resolvedIds.push(obligationId);
1032
+ const obligation = obligationById.get(obligationId);
1033
+ resolutionClaims.push({
1034
+ kind,
1035
+ path: change.path,
1036
+ resolution: 'exact-version',
1037
+ sourceWatermark: obligation.sourceWatermark,
1038
+ metadataFingerprint: obligation.metadataFingerprint,
1039
+ });
1040
+ }
1041
+ if (hydratedChanges.length > 0) {
1042
+ const completionGroup = activeTransferReceipts.length > 0
1043
+ ? remoteServices.buildV2ApplyCompletionGroup({
1044
+ workspaceId: input.workspaceId,
1045
+ previousCursor: cursor,
1046
+ nextCursor: cursor,
1047
+ receipts: activeTransferReceipts,
1048
+ })
1049
+ : undefined;
1050
+ if (activeTransferReceipts.length > 0 && !completionGroup) {
1051
+ throw new Error('Content-obligation receipts did not produce an apply completion group.');
1052
+ }
1053
+ let applyResult;
1054
+ try {
1055
+ applyResult = await applyV2Batch(input.workspaceId, hydratedChanges, {
1056
+ repairMode: input.repairMode === true,
1057
+ excludedProjections: input.excludedProjections,
1058
+ contentPullResolutionClaims: resolutionClaims,
1059
+ ...(completionGroup ? { completionGroup } : {}),
1060
+ });
1061
+ }
1062
+ catch (error) {
1063
+ await persistContentPullFailure(resolvedIds, String(error?.message || 'Content obligation apply failed.'));
1064
+ throw error;
1065
+ }
1066
+ if (!applyResult.ok || asObjectRecord(applyResult.data).success === false) {
1067
+ await persistContentPullFailure(resolvedIds, String(asObjectRecord(applyResult.data).error
1068
+ || 'Workspace content obligation apply failed.'));
1069
+ throw new Error(String(asObjectRecord(applyResult.data).error || 'Workspace content obligation apply failed.'));
1070
+ }
1071
+ activeTransferReceipts = [];
1072
+ contentReconciliationDiagnostics.obligationsResolved = resolvedIds.length;
1073
+ const unresolvedIds = obligations
1074
+ .map(workspaceSyncContentPullObligationId)
1075
+ .filter((obligationId) => !resolvedIds.includes(obligationId));
1076
+ if (unresolvedIds.length > 0) {
1077
+ await persistContentPullFailure(unresolvedIds, 'Authoritative content body remains unavailable.');
1078
+ }
1079
+ }
1080
+ else {
1081
+ if (activeTransferReceipts.length > 0) {
1082
+ const completionGroup = remoteServices.buildV2ApplyCompletionGroup({
1083
+ workspaceId: input.workspaceId,
1084
+ previousCursor: cursor,
1085
+ nextCursor: cursor,
1086
+ receipts: activeTransferReceipts,
1087
+ });
1088
+ if (!completionGroup) {
1089
+ throw new Error('Unavailable content receipts did not produce an apply completion group.');
1090
+ }
1091
+ const applyResult = await applyV2Batch(input.workspaceId, [], {
1092
+ repairMode: input.repairMode === true,
1093
+ excludedProjections: input.excludedProjections,
1094
+ completionGroup,
1095
+ });
1096
+ if (!applyResult.ok || asObjectRecord(applyResult.data).success === false) {
1097
+ throw new Error(String(asObjectRecord(applyResult.data).error
1098
+ || 'Unavailable content receipt settlement failed.'));
1099
+ }
1100
+ activeTransferReceipts = [];
1101
+ }
1102
+ await persistContentPullFailure(obligations.map(workspaceSyncContentPullObligationId), 'Authoritative content body remains unavailable.');
1103
+ }
1104
+ }
1105
+ else {
1106
+ await abandonActiveTransferReceipts('WORKSPACE_SYNC_CONTENT_OBLIGATION_RETRY');
1107
+ await persistContentPullFailure(obligations.map(workspaceSyncContentPullObligationId), String(asObjectRecord(contentResponse.data).error
1108
+ || `Content pull failed (${contentResponse.status}).`));
1109
+ }
1110
+ }
1111
+ contentReconciliationDiagnostics.obligationsRemaining = Math.max(0, openObligations.length - contentReconciliationDiagnostics.obligationsResolved);
1112
+ }
1113
+ if (input.contentMode === 'manifest') {
1114
+ const localManifestResponse = await readContentManifest(input.workspaceId);
1115
+ if (!localManifestResponse.ok) {
1116
+ throw new Error(`Local workspace content manifest failed (${localManifestResponse.status || 0}).`);
1117
+ }
1118
+ const localEntries = Array.isArray(localManifestResponse.data?.entries)
1119
+ ? localManifestResponse.data.entries
1120
+ : [];
1121
+ localContentManifest = new Map(localEntries.map((entry) => [`${entry.kind}:${entry.path}`, entry]));
1122
+ }
329
1123
  while (hasMore && pages < maxPages) {
330
1124
  const requestPull = async () => {
331
1125
  const pullRequestStartedAtMs = Date.now();
332
- const result = await pullWorkspaceChanges(input.resolveCloudAuthUrl, {
1126
+ const result = await remoteServices.pullWorkspaceChanges({
333
1127
  workspaceId: input.workspaceId,
334
1128
  cursor,
335
1129
  limit: input.bootstrap ? 500 : 200,
336
- repairMode: input.repairMode === true
1130
+ repairMode: input.repairMode === true,
1131
+ contentMode: input.contentMode,
1132
+ excludeInitiatives: input.excludeInitiatives,
1133
+ excludedProjections: input.excludedProjections,
337
1134
  });
338
1135
  pullRequestMs += (Date.now() - pullRequestStartedAtMs);
339
1136
  return result;
340
1137
  };
341
1138
  let pullRes = await requestPull();
1139
+ captureTransferReceipt(pullRes);
342
1140
  if (!pullRes.ok && pullRes.status === 403 && input.ensureCloudWorkspaceReadyForSync) {
343
1141
  const ensured = await input.ensureCloudWorkspaceReadyForSync();
344
1142
  if (ensured.success) {
1143
+ await abandonActiveTransferReceipts('WORKSPACE_SYNC_V2_PULL_RETRY');
345
1144
  pullRes = await requestPull();
1145
+ captureTransferReceipt(pullRes);
346
1146
  }
347
1147
  }
348
1148
  if (!pullRes.ok) {
1149
+ await abandonActiveTransferReceipts('WORKSPACE_SYNC_V2_PULL_REJECTED');
349
1150
  const pullErrorData = asObjectRecord(pullRes.data);
350
1151
  return {
351
1152
  success: false,
@@ -365,12 +1166,111 @@ export async function runWorkspacePullSyncService(input) {
365
1166
  pulledArchivedUpserts,
366
1167
  pulledTaskEventUpserts,
367
1168
  pulledPlanningUpserts,
1169
+ pulledTaskforceAgentUpserts,
1170
+ pulledTaskforceAgentSkillUpserts,
1171
+ pulledAgentConversationUpserts,
368
1172
  documentDecryptFailures: Array.from(documentDecryptFailures),
369
1173
  serverDiagnostics: null
370
1174
  };
371
1175
  }
372
1176
  const pullData = pullRes.data || {};
373
- const changes = Array.isArray(pullData?.changes) ? pullData.changes : [];
1177
+ if (!workspaceSyncV2ProjectionExclusionsEqual(pullData.excludedProjections, input.excludedProjections)) {
1178
+ await abandonActiveTransferReceipts('SYNC_V2_PROJECTION_EXCLUSIONS_MISMATCH');
1179
+ return {
1180
+ success: false,
1181
+ kind: 'pull_http',
1182
+ status: 502,
1183
+ errorCode: 'SYNC_V2_PROJECTION_EXCLUSIONS_MISMATCH',
1184
+ error: 'Cloud pull did not attest the requested v2 projection exclusions.',
1185
+ transient: false,
1186
+ cursor, pages, appliedChanges, pullRequestMs, applyMs, pulledDeleteTaskIds,
1187
+ pulledActiveUpserts, pulledArchivedUpserts, pulledTaskEventUpserts,
1188
+ pulledPlanningUpserts, pulledTaskforceAgentUpserts, pulledTaskforceAgentSkillUpserts, pulledAgentConversationUpserts,
1189
+ documentDecryptFailures: Array.from(documentDecryptFailures), serverDiagnostics: null,
1190
+ };
1191
+ }
1192
+ let changes = Array.isArray(pullData?.changes) ? pullData.changes : [];
1193
+ const expectedContent = new Map();
1194
+ const contentPullObligations = [];
1195
+ if (input.contentMode === 'manifest') {
1196
+ const requestedContent = [];
1197
+ const nonManifestChanges = [];
1198
+ for (const change of changes) {
1199
+ if (change.op !== 'document-manifest' && change.op !== 'asset-manifest') {
1200
+ nonManifestChanges.push(change);
1201
+ continue;
1202
+ }
1203
+ const manifest = change.manifest;
1204
+ contentReconciliationDiagnostics.manifestEntries += 1;
1205
+ if (!manifest.existsLocally) {
1206
+ contentPullObligations.push({
1207
+ manifest,
1208
+ sourceWatermark: manifest.updatedAt,
1209
+ });
1210
+ openContentPullObligationIds.add(`${manifest.kind}:${manifest.path}`);
1211
+ continue;
1212
+ }
1213
+ const key = `${manifest.kind}:${manifest.path}`;
1214
+ const decision = decideWorkspaceContentFetch(manifest, localContentManifest.get(key));
1215
+ if (!decision.shouldFetch) {
1216
+ contentReconciliationDiagnostics.contentBytesAvoided += Math.max(0, manifest.sizeBytes);
1217
+ }
1218
+ else if (decision.reasons.every((reason) => reason === 'metadata-mismatch')) {
1219
+ nonManifestChanges.push(change);
1220
+ contentReconciliationDiagnostics.contentBytesAvoided += Math.max(0, manifest.sizeBytes);
1221
+ }
1222
+ else {
1223
+ requestedContent.push({ kind: manifest.kind, path: manifest.path });
1224
+ expectedContent.set(key, manifest);
1225
+ contentReconciliationDiagnostics.bodiesRequested += 1;
1226
+ }
1227
+ }
1228
+ const pendingRequests = [...requestedContent];
1229
+ while (pendingRequests.length > 0) {
1230
+ let remaining = pendingRequests.splice(0, 100);
1231
+ while (remaining.length > 0) {
1232
+ const contentResponse = await remoteServices.pullWorkspaceContent({
1233
+ workspaceId: input.workspaceId,
1234
+ requests: remaining,
1235
+ previousCursor: cursor,
1236
+ });
1237
+ if (!contentResponse.ok) {
1238
+ captureTransferReceipt(contentResponse);
1239
+ throw new Error(`Workspace content pull failed (${contentResponse.status || 0}).`);
1240
+ }
1241
+ captureTransferReceipt(contentResponse);
1242
+ const contentData = contentResponse.data || {};
1243
+ const hydratedChanges = Array.isArray(contentData.changes) ? contentData.changes : [];
1244
+ const missing = Array.isArray(contentData.missing) ? contentData.missing : [];
1245
+ if (missing.length > 0) {
1246
+ const missingIdentity = 'path' in missing[0] ? missing[0].path : missing[0].assetId;
1247
+ throw new Error(`Workspace content changed or disappeared during reconciliation: ${missing[0].kind}:${missingIdentity}`);
1248
+ }
1249
+ nonManifestChanges.push(...hydratedChanges);
1250
+ const nextRemaining = Array.isArray(contentData.remaining) ? contentData.remaining : [];
1251
+ if (hydratedChanges.length === 0 && nextRemaining.length >= remaining.length) {
1252
+ throw new Error('Workspace content pull made no progress.');
1253
+ }
1254
+ remaining = nextRemaining;
1255
+ }
1256
+ }
1257
+ changes = nonManifestChanges;
1258
+ }
1259
+ else {
1260
+ const applicableChanges = [];
1261
+ for (const change of changes) {
1262
+ if (change.op !== 'document-manifest' && change.op !== 'asset-manifest') {
1263
+ applicableChanges.push(change);
1264
+ continue;
1265
+ }
1266
+ contentPullObligations.push({
1267
+ manifest: change.manifest,
1268
+ sourceWatermark: change.manifest.updatedAt,
1269
+ });
1270
+ openContentPullObligationIds.add(`${change.manifest.kind}:${change.manifest.path}`);
1271
+ }
1272
+ changes = applicableChanges;
1273
+ }
374
1274
  const serverDiagnostics = pullData?.diagnostics && typeof pullData.diagnostics === 'object'
375
1275
  ? pullData.diagnostics
376
1276
  : null;
@@ -402,10 +1302,26 @@ export async function runWorkspacePullSyncService(input) {
402
1302
  pulledPlanningUpserts = true;
403
1303
  continue;
404
1304
  }
1305
+ if (change.op === 'taskforce-agent-upsert') {
1306
+ pulledTaskforceAgentUpserts = true;
1307
+ continue;
1308
+ }
1309
+ if (change.op === 'agent-role-upsert') {
1310
+ pulledAgentRoleUpserts = true;
1311
+ continue;
1312
+ }
1313
+ if (change.op === 'taskforce-agent-skill-upsert') {
1314
+ pulledTaskforceAgentSkillUpserts = true;
1315
+ continue;
1316
+ }
1317
+ if (change.op === 'agent-conversation-upsert') {
1318
+ pulledAgentConversationUpserts = true;
1319
+ continue;
1320
+ }
405
1321
  if (change.op === 'document-upsert') {
406
1322
  if (typeof change.content === 'string' && typeof process !== 'undefined' && process.env?.TASKFORCE_SYNC_KEY) {
407
1323
  try {
408
- change.content = await decryptDocument(change.content, process.env.TASKFORCE_SYNC_KEY);
1324
+ await decryptWorkspaceSyncContentChangeInPlace(change, process.env.TASKFORCE_SYNC_KEY);
409
1325
  }
410
1326
  catch {
411
1327
  // Leave encrypted content as fallback if decryption fails (e.g., bad key) so we don't drop the document entirely.
@@ -419,7 +1335,7 @@ export async function runWorkspacePullSyncService(input) {
419
1335
  if (change.op === 'asset-upsert') {
420
1336
  if (typeof change.contentBase64 === 'string' && typeof process !== 'undefined' && process.env?.TASKFORCE_SYNC_KEY) {
421
1337
  try {
422
- change.contentBase64 = await decryptDocument(change.contentBase64, process.env.TASKFORCE_SYNC_KEY);
1338
+ await decryptWorkspaceSyncContentChangeInPlace(change, process.env.TASKFORCE_SYNC_KEY);
423
1339
  }
424
1340
  catch {
425
1341
  // Leave as-is on decrypt failure so the asset entry is not silently dropped.
@@ -436,17 +1352,86 @@ export async function runWorkspacePullSyncService(input) {
436
1352
  if (deleteTaskId)
437
1353
  pulledDeleteTaskIds.add(deleteTaskId);
438
1354
  }
1355
+ if (input.contentMode === 'manifest' && expectedContent.size > 0) {
1356
+ const verifiedContent = new Set();
1357
+ for (const change of changes) {
1358
+ if (change.op !== 'document-upsert' && change.op !== 'asset-upsert')
1359
+ continue;
1360
+ const kind = change.op === 'document-upsert' ? 'document' : 'asset';
1361
+ const expected = expectedContent.get(`${kind}:${change.path}`);
1362
+ if (!expected)
1363
+ continue;
1364
+ const actual = await fingerprintWorkspaceContentBody(kind, change.op === 'document-upsert' ? change.content : change.contentBase64);
1365
+ if ((expected.sha256 && actual.sha256 !== expected.sha256.toLowerCase())
1366
+ || actual.sizeBytes !== expected.sizeBytes) {
1367
+ throw new Error(`Workspace content verification failed for ${kind}:${change.path}.`);
1368
+ }
1369
+ verifiedContent.add(`${kind}:${change.path}`);
1370
+ contentReconciliationDiagnostics.bodiesTransferred += 1;
1371
+ contentReconciliationDiagnostics.contentBytesTransferred += actual.sizeBytes;
1372
+ }
1373
+ if (verifiedContent.size !== expectedContent.size) {
1374
+ throw new Error('Workspace content pull did not return every requested body.');
1375
+ }
1376
+ }
439
1377
  if (input.onPagePulled)
440
1378
  input.onPagePulled();
441
- if (changes.length > 0 || hasWorkspaceMembersSnapshot) {
1379
+ const nextCursor = pullData && 'nextCursor' in pullData
1380
+ && (pullData.nextCursor === null || typeof pullData.nextCursor === 'string')
1381
+ ? pullData.nextCursor
1382
+ : cursor;
1383
+ const contentPullResolutionClaims = changes.flatMap((change) => {
1384
+ if (change.op !== 'document-delete' && change.op !== 'asset-delete')
1385
+ return [];
1386
+ if (!change.deletedAt)
1387
+ return [];
1388
+ const kind = change.op === 'document-delete' ? 'document' : 'asset';
1389
+ return [{
1390
+ kind,
1391
+ path: change.path,
1392
+ resolution: 'at-or-before-watermark',
1393
+ sourceWatermark: change.deletedAt,
1394
+ }];
1395
+ });
1396
+ const isCompleteBootstrapPage = input.bootstrap && !Boolean(pullData?.hasMore);
1397
+ const completionGroup = activeTransferReceipts.length > 0
1398
+ ? remoteServices.buildV2ApplyCompletionGroup({
1399
+ workspaceId: input.workspaceId,
1400
+ previousCursor: cursor,
1401
+ nextCursor,
1402
+ receipts: activeTransferReceipts,
1403
+ })
1404
+ : undefined;
1405
+ if (activeTransferReceipts.length > 0 && !completionGroup) {
1406
+ throw new Error('V2 sync transfer receipts did not produce an apply completion group.');
1407
+ }
1408
+ if (changes.length > 0
1409
+ || contentPullObligations.length > 0
1410
+ || hasWorkspaceMembersSnapshot
1411
+ || completionGroup
1412
+ || isCompleteBootstrapPage) {
442
1413
  const applyStartedAtMs = Date.now();
443
- const applyResult = await applyLocalWorkspaceChanges(input.workspaceId, changes, {
1414
+ const applyResult = await applyV2Batch(input.workspaceId, changes, {
444
1415
  ...(hasWorkspaceMembersSnapshot ? { workspaceMembers } : {}),
445
- repairMode: input.repairMode === true
1416
+ repairMode: input.repairMode === true,
1417
+ excludedProjections: input.excludedProjections,
1418
+ ...(isCompleteBootstrapPage
1419
+ ? {
1420
+ bootstrapSnapshot: {
1421
+ currentAnnotatedAttachmentSessionIds: Array.from(pulledAnnotatedAttachmentSessionIds),
1422
+ },
1423
+ }
1424
+ : {}),
1425
+ ...(completionGroup ? { completionGroup } : {}),
1426
+ ...(contentPullObligations.length > 0 ? { contentPullObligations } : {}),
1427
+ ...(contentPullResolutionClaims.length > 0
1428
+ ? { contentPullResolutionClaims }
1429
+ : {}),
446
1430
  });
447
1431
  const applyFailures = applyResult.failures;
448
1432
  if (!applyResult.ok) {
449
1433
  applyMs += (Date.now() - applyStartedAtMs);
1434
+ await abandonActiveTransferReceipts('WORKSPACE_SYNC_V2_APPLY_NOT_COMMITTED');
450
1435
  const applyPayloadData = asObjectRecord(applyResult.data);
451
1436
  const hasAuthFailure = applyFailures.some((entry) => entry.endsWith(':401'));
452
1437
  if (hasAuthFailure) {
@@ -465,6 +1450,10 @@ export async function runWorkspacePullSyncService(input) {
465
1450
  pulledActiveUpserts,
466
1451
  pulledArchivedUpserts,
467
1452
  pulledTaskEventUpserts,
1453
+ pulledPlanningUpserts,
1454
+ pulledTaskforceAgentUpserts,
1455
+ pulledTaskforceAgentSkillUpserts,
1456
+ pulledAgentConversationUpserts,
468
1457
  documentDecryptFailures: Array.from(documentDecryptFailures),
469
1458
  serverDiagnostics
470
1459
  };
@@ -494,6 +1483,9 @@ export async function runWorkspacePullSyncService(input) {
494
1483
  pulledArchivedUpserts,
495
1484
  pulledTaskEventUpserts,
496
1485
  pulledPlanningUpserts,
1486
+ pulledTaskforceAgentUpserts,
1487
+ pulledTaskforceAgentSkillUpserts,
1488
+ pulledAgentConversationUpserts,
497
1489
  documentDecryptFailures: Array.from(documentDecryptFailures),
498
1490
  emittedEventIds: Array.from(emittedEventIds),
499
1491
  serverDiagnostics: lastServerDiagnostics
@@ -502,6 +1494,7 @@ export async function runWorkspacePullSyncService(input) {
502
1494
  const applyPayloadData = asObjectRecord(applyResult.data);
503
1495
  if (applyPayloadData.success === false) {
504
1496
  applyMs += (Date.now() - applyStartedAtMs);
1497
+ await abandonActiveTransferReceipts('WORKSPACE_SYNC_V2_APPLY_NOT_COMMITTED');
505
1498
  return {
506
1499
  success: false,
507
1500
  kind: 'apply_payload',
@@ -517,6 +1510,9 @@ export async function runWorkspacePullSyncService(input) {
517
1510
  pulledArchivedUpserts,
518
1511
  pulledTaskEventUpserts,
519
1512
  pulledPlanningUpserts,
1513
+ pulledTaskforceAgentUpserts,
1514
+ pulledTaskforceAgentSkillUpserts,
1515
+ pulledAgentConversationUpserts,
520
1516
  documentDecryptFailures: Array.from(documentDecryptFailures),
521
1517
  emittedEventIds: Array.from(emittedEventIds),
522
1518
  serverDiagnostics: lastServerDiagnostics
@@ -529,9 +1525,16 @@ export async function runWorkspacePullSyncService(input) {
529
1525
  emittedEventIds.add(String(eventId));
530
1526
  }
531
1527
  }
1528
+ if (changes.some((change) => change.op === 'ai-profile-upsert')) {
1529
+ input.onAiProfilesApplied?.();
1530
+ }
532
1531
  if (input.onChangesApplied)
533
1532
  input.onChangesApplied(changes.length);
1533
+ contentPullResolutionClaims.forEach((claim) => {
1534
+ openContentPullObligationIds.delete(workspaceSyncContentPullObligationId(claim));
1535
+ });
534
1536
  }
1537
+ activeTransferReceipts = [];
535
1538
  if (pullData && 'nextCursor' in pullData) {
536
1539
  if (pullData.nextCursor === null || typeof pullData.nextCursor === 'string') {
537
1540
  cursor = pullData.nextCursor;
@@ -540,74 +1543,9 @@ export async function runWorkspacePullSyncService(input) {
540
1543
  hasMore = Boolean(pullData?.hasMore);
541
1544
  pages += 1;
542
1545
  }
543
- if (input.bootstrap) {
544
- const bootstrapApplyStartedAtMs = Date.now();
545
- const bootstrapApplyResult = await applyLocalWorkspaceChanges(input.workspaceId, [], {
546
- bootstrapSnapshot: {
547
- currentAnnotatedAttachmentSessionIds: Array.from(pulledAnnotatedAttachmentSessionIds),
548
- }
549
- });
550
- const bootstrapApplyFailures = bootstrapApplyResult.failures;
551
- if (!bootstrapApplyResult.ok) {
552
- applyMs += (Date.now() - bootstrapApplyStartedAtMs);
553
- const applyPayloadData = asObjectRecord(bootstrapApplyResult.data);
554
- const hasAuthFailure = bootstrapApplyFailures.some((entry) => entry.endsWith(':401'));
555
- if (hasAuthFailure) {
556
- return {
557
- success: false,
558
- kind: 'apply_auth',
559
- status: 401,
560
- transient: false,
561
- failures: bootstrapApplyFailures,
562
- cursor,
563
- pages,
564
- appliedChanges,
565
- pullRequestMs,
566
- applyMs,
567
- pulledDeleteTaskIds,
568
- pulledActiveUpserts,
569
- pulledArchivedUpserts,
570
- pulledTaskEventUpserts,
571
- pulledPlanningUpserts,
572
- documentDecryptFailures: Array.from(documentDecryptFailures),
573
- emittedEventIds: Array.from(emittedEventIds),
574
- serverDiagnostics: lastServerDiagnostics
575
- };
576
- }
577
- const hasTransientApplyFailure = bootstrapApplyFailures.some((entry) => {
578
- if (entry.endsWith(':network'))
579
- return true;
580
- const statusText = entry.split(':').pop() || '';
581
- const status = Number.parseInt(statusText, 10);
582
- return Number.isFinite(status) && (status === 429 || status >= 500);
583
- });
584
- return {
585
- success: false,
586
- kind: 'apply_all_candidates',
587
- status: bootstrapApplyResult.status || undefined,
588
- transient: hasTransientApplyFailure,
589
- error: String(applyPayloadData.error || '').trim() || undefined,
590
- failures: bootstrapApplyFailures,
591
- hasTransientApplyFailure,
592
- cursor,
593
- pages,
594
- appliedChanges,
595
- pullRequestMs,
596
- applyMs,
597
- pulledDeleteTaskIds,
598
- pulledActiveUpserts,
599
- pulledArchivedUpserts,
600
- pulledTaskEventUpserts,
601
- pulledPlanningUpserts,
602
- documentDecryptFailures: Array.from(documentDecryptFailures),
603
- emittedEventIds: Array.from(emittedEventIds),
604
- serverDiagnostics: lastServerDiagnostics
605
- };
606
- }
607
- applyMs += (Date.now() - bootstrapApplyStartedAtMs);
608
- }
609
1546
  return {
610
1547
  success: true,
1548
+ hasMore,
611
1549
  syncedAt: new Date().toISOString(),
612
1550
  cursor: cursor || null,
613
1551
  pages,
@@ -619,18 +1557,31 @@ export async function runWorkspacePullSyncService(input) {
619
1557
  pulledArchivedUpserts,
620
1558
  pulledTaskEventUpserts,
621
1559
  pulledPlanningUpserts,
1560
+ pulledTaskforceAgentUpserts,
1561
+ pulledAgentRoleUpserts,
1562
+ pulledTaskforceAgentSkillUpserts,
1563
+ pulledAgentConversationUpserts,
622
1564
  documentDecryptFailures: Array.from(documentDecryptFailures),
623
1565
  emittedEventIds: Array.from(emittedEventIds),
624
- serverDiagnostics: lastServerDiagnostics
1566
+ serverDiagnostics: input.contentMode === 'manifest'
1567
+ ? { ...(lastServerDiagnostics || {}), contentReconciliation: contentReconciliationDiagnostics }
1568
+ : lastServerDiagnostics
625
1569
  };
626
1570
  }
627
1571
  catch (error) {
1572
+ let failure = error;
1573
+ try {
1574
+ await abandonActiveTransferReceipts('WORKSPACE_SYNC_V2_APPLY_NOT_COMMITTED');
1575
+ }
1576
+ catch (settlementError) {
1577
+ failure = settlementError;
1578
+ }
628
1579
  return {
629
1580
  success: false,
630
1581
  kind: 'exception',
631
1582
  status: 0,
632
1583
  transient: true,
633
- error: String(error?.message || error || 'Workspace sync pull failed unexpectedly.'),
1584
+ error: String(failure?.message || failure || 'Workspace sync pull failed unexpectedly.'),
634
1585
  cursor: cursor || null,
635
1586
  pages,
636
1587
  appliedChanges,
@@ -641,9 +1592,14 @@ export async function runWorkspacePullSyncService(input) {
641
1592
  pulledArchivedUpserts,
642
1593
  pulledTaskEventUpserts,
643
1594
  pulledPlanningUpserts,
1595
+ pulledTaskforceAgentUpserts,
1596
+ pulledTaskforceAgentSkillUpserts,
1597
+ pulledAgentConversationUpserts,
644
1598
  documentDecryptFailures: Array.from(documentDecryptFailures),
645
1599
  emittedEventIds: Array.from(emittedEventIds),
646
- serverDiagnostics: null
1600
+ serverDiagnostics: input.contentMode === 'manifest'
1601
+ ? { ...(lastServerDiagnostics || {}), contentReconciliation: contentReconciliationDiagnostics }
1602
+ : lastServerDiagnostics
647
1603
  };
648
1604
  }
649
1605
  }