@taskforcehq/taskforce 0.3.324 → 0.3.327

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