@taskforcehq/taskforce 0.3.326 → 0.3.328

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (1382) hide show
  1. package/LICENSE.md +68 -0
  2. package/README.md +19 -0
  3. package/dist/Taskforce.module.css +2168 -585
  4. package/dist/TaskforceCore.d.ts +1 -0
  5. package/dist/TaskforceCore.js +65 -22
  6. package/dist/annotatedAttachments/AnnotatedAttachmentSessionStore.d.ts +1 -0
  7. package/dist/annotatedAttachments/AnnotatedAttachmentSessionStore.js +3 -2
  8. package/dist/annotatedAttachments/commandService.d.ts +68 -0
  9. package/dist/annotatedAttachments/commandService.js +348 -0
  10. package/dist/annotatedAttachments/service.d.ts +2 -0
  11. package/dist/annotatedAttachments/service.js +13 -12
  12. package/dist/cli.js +158 -9
  13. package/dist/cliOpenPort.d.ts +1 -0
  14. package/dist/cliOpenPort.js +4 -0
  15. package/dist/compat/taskforceAgentDefinitionCompat.d.ts +12 -0
  16. package/dist/compat/taskforceAgentDefinitionCompat.js +25 -0
  17. package/dist/compat/workspaceSyncCompat.js +6 -2
  18. package/dist/compat/workspaceSyncV3CombinedCoverageCompat.d.ts +6 -0
  19. package/dist/compat/workspaceSyncV3CombinedCoverageCompat.js +22 -0
  20. package/dist/compat/workspaceSyncV3OperationCompat.d.ts +7 -0
  21. package/dist/compat/workspaceSyncV3OperationCompat.js +30 -0
  22. package/dist/components/activity/EntityActivityTimeline.d.ts +10 -2
  23. package/dist/components/activity/EntityActivityTimeline.js +83 -35
  24. package/dist/components/context/AttachmentPreviewHost.d.ts +6 -0
  25. package/dist/components/context/AttachmentPreviewHost.js +222 -0
  26. package/dist/components/context/ContextAttachmentManager.d.ts +7 -0
  27. package/dist/components/context/ContextAttachmentManager.js +514 -208
  28. package/dist/components/features/AiProfilesModule.d.ts +24 -0
  29. package/dist/components/features/AiProfilesModule.js +744 -0
  30. package/dist/components/features/AnnotatedAttachmentWorkspace.d.ts +4 -1
  31. package/dist/components/features/AnnotatedAttachmentWorkspace.js +351 -79
  32. package/dist/components/features/DocumentGenerateModal.js +23 -5
  33. package/dist/components/features/DocumentIndex.d.ts +19 -1
  34. package/dist/components/features/DocumentIndex.js +104 -15
  35. package/dist/components/features/DocumentViewer.d.ts +9 -1
  36. package/dist/components/features/DocumentViewer.js +721 -100
  37. package/dist/components/features/DocumentWorkspace.d.ts +37 -2
  38. package/dist/components/features/DocumentWorkspace.js +21 -6
  39. package/dist/components/features/TaskSettings.d.ts +6 -27
  40. package/dist/components/features/TaskSettings.js +232 -143
  41. package/dist/components/features/TaskforceAgentsModule.d.ts +36 -0
  42. package/dist/components/features/TaskforceAgentsModule.js +1782 -0
  43. package/dist/components/features/agentBehavior/AgentBehaviorManagerShared.d.ts +94 -0
  44. package/dist/components/features/agentBehavior/AgentBehaviorManagerShared.js +70 -0
  45. package/dist/components/features/agentCapabilities/AgentCapabilitiesPrototype.d.ts +65 -0
  46. package/dist/components/features/agentCapabilities/AgentCapabilitiesPrototype.js +115 -0
  47. package/dist/components/features/agentRoles/RoleManagerPanel.d.ts +4 -0
  48. package/dist/components/features/agentRoles/RoleManagerPanel.js +382 -0
  49. package/dist/components/features/agentSkills/SkillManagerPanel.d.ts +5 -0
  50. package/dist/components/features/agentSkills/SkillManagerPanel.js +355 -0
  51. package/dist/components/features/documentWorkspaceModel.d.ts +16 -4
  52. package/dist/components/features/documentWorkspaceModel.js +30 -5
  53. package/dist/components/features/planning/PlanningArchiveConfirmation.d.ts +9 -0
  54. package/dist/components/features/planning/PlanningArchiveConfirmation.js +19 -0
  55. package/dist/components/features/planning/PlanningCardIdentity.d.ts +12 -0
  56. package/dist/components/features/planning/PlanningCardIdentity.js +44 -0
  57. package/dist/components/features/planning/PlanningEntityDetails.d.ts +36 -0
  58. package/dist/components/features/planning/PlanningEntityDetails.js +131 -0
  59. package/dist/components/features/planning/PlanningEntitySummary.d.ts +46 -0
  60. package/dist/components/features/planning/PlanningEntitySummary.js +98 -0
  61. package/dist/components/features/planning/PlanningLinkPicker.d.ts +11 -0
  62. package/dist/components/features/planning/PlanningLinkPicker.js +28 -0
  63. package/dist/components/features/planning/PlanningModule.d.ts +6 -0
  64. package/dist/components/features/planning/PlanningModule.js +588 -0
  65. package/dist/components/features/planning/PlanningOwnerDropdown.d.ts +27 -0
  66. package/dist/components/features/planning/PlanningOwnerDropdown.js +80 -0
  67. package/dist/components/features/planning/PlanningTaskArrangeControl.d.ts +5 -0
  68. package/dist/components/features/planning/PlanningTaskArrangeControl.js +11 -0
  69. package/dist/components/features/planning/PlanningTaskCard.d.ts +20 -0
  70. package/dist/components/features/planning/PlanningTaskCard.js +26 -0
  71. package/dist/components/features/planning/PlanningTaskOrderList.d.ts +10 -0
  72. package/dist/components/features/planning/PlanningTaskOrderList.js +52 -0
  73. package/dist/components/features/planning/PlanningUnlinkConfirmation.d.ts +15 -0
  74. package/dist/components/features/planning/PlanningUnlinkConfirmation.js +7 -0
  75. package/dist/components/features/planning/PlanningVisualIdentity.d.ts +14 -0
  76. package/dist/components/features/planning/PlanningVisualIdentity.js +106 -0
  77. package/dist/components/features/planning/planningCreateIntent.d.ts +10 -0
  78. package/dist/components/features/planning/planningCreateIntent.js +16 -0
  79. package/dist/components/features/planning/planningNavigator.d.ts +33 -0
  80. package/dist/components/features/planning/planningNavigator.js +96 -0
  81. package/dist/components/features/planning/planningTaskArrangement.d.ts +18 -0
  82. package/dist/components/features/planning/planningTaskArrangement.js +106 -0
  83. package/dist/components/features/planning/planningWorkspaceModel.d.ts +132 -0
  84. package/dist/components/features/planning/planningWorkspaceModel.js +5 -0
  85. package/dist/components/features/settings/CategoryManager.js +2 -2
  86. package/dist/components/features/settings/TaxonomyEditor.js +1 -1
  87. package/dist/components/features/settings/TaxonomyManager.js +1 -1
  88. package/dist/components/features/settings/TypeManager.js +1 -1
  89. package/dist/components/features/taskforceAgentAssignments/AgentBehaviorAssignments.d.ts +10 -0
  90. package/dist/components/features/taskforceAgentAssignments/AgentBehaviorAssignments.js +175 -0
  91. package/dist/components/features/taskforceAgentAssignments/agentBehaviorCatalogApi.d.ts +27 -0
  92. package/dist/components/features/taskforceAgentAssignments/agentBehaviorCatalogApi.js +24 -0
  93. package/dist/components/features/taskforceAgentEditorModel.d.ts +109 -0
  94. package/dist/components/features/taskforceAgentEditorModel.js +145 -0
  95. package/dist/components/features/useDocumentWorkspaceController.d.ts +20 -1
  96. package/dist/components/features/useDocumentWorkspaceController.js +106 -21
  97. package/dist/components/features/workflowManager/WorkflowManagerModule.d.ts +11 -0
  98. package/dist/components/features/workflowManager/WorkflowManagerModule.js +313 -0
  99. package/dist/components/features/workflowManager/WorkflowPublishDialog.d.ts +11 -0
  100. package/dist/components/features/workflowManager/WorkflowPublishDialog.js +8 -0
  101. package/dist/components/features/workflowManager/types.d.ts +74 -0
  102. package/dist/components/features/workflowManager/types.js +1 -0
  103. package/dist/components/features/workflowManager/useWorkflowManager.d.ts +30 -0
  104. package/dist/components/features/workflowManager/useWorkflowManager.js +213 -0
  105. package/dist/components/features/workflowManager/workflowManagerApi.d.ts +52 -0
  106. package/dist/components/features/workflowManager/workflowManagerApi.js +142 -0
  107. package/dist/components/task/TaskActionHeader.d.ts +7 -3
  108. package/dist/components/task/TaskActionHeader.js +46 -53
  109. package/dist/components/task/TaskCard.d.ts +10 -2
  110. package/dist/components/task/TaskCard.js +138 -56
  111. package/dist/components/task/TaskContextUpload.d.ts +4 -0
  112. package/dist/components/task/TaskContextUpload.js +3 -2
  113. package/dist/components/task/TaskForm.d.ts +16 -17
  114. package/dist/components/task/TaskForm.js +569 -199
  115. package/dist/components/task/TaskImageReviews.d.ts +8 -0
  116. package/dist/components/task/TaskImageReviews.js +47 -0
  117. package/dist/components/task/TaskKanban.d.ts +9 -10
  118. package/dist/components/task/TaskKanban.js +70 -18
  119. package/dist/components/task/TaskList.d.ts +9 -8
  120. package/dist/components/task/TaskList.js +46 -32
  121. package/dist/components/task/TaskReferenceBadge.d.ts +2 -1
  122. package/dist/components/task/TaskReferenceBadge.js +3 -2
  123. package/dist/components/task/TaskStatusActions.d.ts +3 -1
  124. package/dist/components/task/TaskStatusActions.js +27 -7
  125. package/dist/components/task/TaskWorkflowAssignmentField.d.ts +18 -0
  126. package/dist/components/task/TaskWorkflowAssignmentField.js +362 -0
  127. package/dist/components/task/TaskWorkstreamPicker.d.ts +8 -0
  128. package/dist/components/task/TaskWorkstreamPicker.js +25 -0
  129. package/dist/components/task/TrashRestoreControls.d.ts +18 -0
  130. package/dist/components/task/TrashRestoreControls.js +71 -0
  131. package/dist/components/ui/AiIdentityRosterCard.d.ts +20 -0
  132. package/dist/components/ui/AiIdentityRosterCard.js +5 -0
  133. package/dist/components/ui/AssetTraySortControl.d.ts +10 -0
  134. package/dist/components/ui/AssetTraySortControl.js +38 -0
  135. package/dist/components/ui/AssigneeIdentity.d.ts +12 -0
  136. package/dist/components/ui/AssigneeIdentity.js +41 -0
  137. package/dist/components/ui/DiscardChangesDialog.d.ts +10 -0
  138. package/dist/components/ui/DiscardChangesDialog.js +7 -0
  139. package/dist/components/ui/DisclosureSectionHeader.d.ts +4 -1
  140. package/dist/components/ui/DisclosureSectionHeader.js +2 -2
  141. package/dist/components/ui/DocumentTypeIcon.d.ts +7 -0
  142. package/dist/components/ui/DocumentTypeIcon.js +8 -0
  143. package/dist/components/ui/EditableAvatarButton.d.ts +6 -1
  144. package/dist/components/ui/EditableAvatarButton.js +6 -5
  145. package/dist/components/ui/HierarchyActionBadge.d.ts +2 -1
  146. package/dist/components/ui/HierarchyActionBadge.js +2 -2
  147. package/dist/components/ui/Markdown.d.ts +13 -3
  148. package/dist/components/ui/Markdown.fixture.d.ts +1 -0
  149. package/dist/components/ui/Markdown.fixture.js +23 -0
  150. package/dist/components/ui/Markdown.js +158 -68
  151. package/dist/components/ui/Modal.d.ts +3 -1
  152. package/dist/components/ui/Modal.js +85 -19
  153. package/dist/components/ui/MultiSelectFilter.d.ts +9 -2
  154. package/dist/components/ui/MultiSelectFilter.js +26 -5
  155. package/dist/components/ui/ReferenceBadgeButton.js +2 -3
  156. package/dist/components/ui/TaxonomyDropdown.d.ts +18 -1
  157. package/dist/components/ui/TaxonomyDropdown.js +177 -59
  158. package/dist/components/ui/TopNoticeLayer.d.ts +2 -1
  159. package/dist/components/ui/TopNoticeLayer.js +5 -2
  160. package/dist/components/ui/useFallbackImageUrl.d.ts +4 -0
  161. package/dist/components/ui/useFallbackImageUrl.js +20 -0
  162. package/dist/components/views/AppShellHeader.js +2 -2
  163. package/dist/components/views/StandaloneLayout.d.ts +1 -0
  164. package/dist/components/views/StandaloneLayout.js +1717 -600
  165. package/dist/components/views/WidgetView.d.ts +1 -0
  166. package/dist/components/views/WidgetView.js +99 -31
  167. package/dist/components/views/chrome/WorkspaceChromeSections.d.ts +4 -2
  168. package/dist/components/views/chrome/WorkspaceChromeSections.js +3 -6
  169. package/dist/components/views/chrome/workspaceChrome.d.ts +5 -8
  170. package/dist/components/views/chrome/workspaceChrome.js +62 -27
  171. package/dist/components/views/panels/FilterToolbar.d.ts +4 -3
  172. package/dist/components/views/panels/FilterToolbar.js +8 -5
  173. package/dist/components/views/panels/FilterToolbarControls.d.ts +11 -2
  174. package/dist/components/views/panels/FilterToolbarControls.js +35 -20
  175. package/dist/components/views/panels/PlanningDrawer.d.ts +66 -49
  176. package/dist/components/views/panels/PlanningDrawer.js +983 -314
  177. package/dist/components/views/planningScope.js +7 -1
  178. package/dist/components/views/standalone/modals/AccountSettingsModal.d.ts +62 -0
  179. package/dist/components/views/standalone/modals/AccountSettingsModal.js +197 -0
  180. package/dist/components/views/standalone/modals/AvatarImageManagerModal.d.ts +7 -2
  181. package/dist/components/views/standalone/modals/AvatarImageManagerModal.js +56 -9
  182. package/dist/components/views/standalone/modals/HelpModal.d.ts +1 -2
  183. package/dist/components/views/standalone/modals/HelpModal.js +3 -4
  184. package/dist/components/views/standalone/modals/SyncStatusModal.d.ts +8 -9
  185. package/dist/components/views/standalone/modals/SyncStatusModal.js +85 -25
  186. package/dist/components/views/standalone/modals/TeamManagementModal.js +1 -1
  187. package/dist/config/applicationBaseUrl.d.ts +2 -0
  188. package/dist/config/applicationBaseUrl.js +23 -0
  189. package/dist/config/envSchema.d.ts +1 -1
  190. package/dist/config/envSchema.js +167 -5
  191. package/dist/config/localServiceCloudTarget.d.ts +10 -0
  192. package/dist/config/localServiceCloudTarget.js +76 -0
  193. package/dist/core/AdminAuditRetentionService.d.ts +43 -0
  194. package/dist/core/AdminAuditRetentionService.js +126 -0
  195. package/dist/core/AiProfileService.d.ts +35 -0
  196. package/dist/core/AiProfileService.js +511 -251
  197. package/dist/core/AttachmentLinkService.d.ts +10 -2
  198. package/dist/core/AttachmentLinkService.js +50 -15
  199. package/dist/core/AuthIdentityService.d.ts +6 -0
  200. package/dist/core/AuthIdentityService.js +38 -0
  201. package/dist/core/AuthTokenService.d.ts +1 -0
  202. package/dist/core/AuthTokenService.js +13 -0
  203. package/dist/core/DeletedTaskLifecycleService.d.ts +8 -2
  204. package/dist/core/DeletedTaskLifecycleService.js +145 -38
  205. package/dist/core/GlobalSettingsService.d.ts +3 -1
  206. package/dist/core/GlobalSettingsService.js +30 -4
  207. package/dist/core/InitiativeDurableMutationService.d.ts +89 -0
  208. package/dist/core/InitiativeDurableMutationService.js +187 -0
  209. package/dist/core/McpTokenService.d.ts +5 -0
  210. package/dist/core/McpTokenService.js +91 -13
  211. package/dist/core/PlanningCommandPreparationService.d.ts +60 -0
  212. package/dist/core/PlanningCommandPreparationService.js +149 -0
  213. package/dist/core/ScheduleCommandService.d.ts +76 -0
  214. package/dist/core/ScheduleCommandService.js +165 -0
  215. package/dist/core/SyncReconciliationService.d.ts +29 -6
  216. package/dist/core/SyncReconciliationService.js +256 -84
  217. package/dist/core/TaskActivityService.d.ts +22 -2
  218. package/dist/core/TaskActivityService.js +177 -29
  219. package/dist/core/TaskAttachmentLinksDurableMutationService.d.ts +36 -0
  220. package/dist/core/TaskAttachmentLinksDurableMutationService.js +240 -0
  221. package/dist/core/TaskChecklistCommandService.d.ts +50 -0
  222. package/dist/core/TaskChecklistCommandService.js +111 -0
  223. package/dist/core/TaskDurableCreateMutationService.d.ts +38 -0
  224. package/dist/core/TaskDurableCreateMutationService.js +85 -0
  225. package/dist/core/TaskDurableDeleteMutationService.d.ts +47 -0
  226. package/dist/core/TaskDurableDeleteMutationService.js +54 -0
  227. package/dist/core/TaskDurableLifecycleMutationService.d.ts +38 -0
  228. package/dist/core/TaskDurableLifecycleMutationService.js +42 -0
  229. package/dist/core/TaskDurableRelationshipMutationService.d.ts +58 -0
  230. package/dist/core/TaskDurableRelationshipMutationService.js +66 -0
  231. package/dist/core/TaskDurableRestoreMutationService.d.ts +31 -0
  232. package/dist/core/TaskDurableRestoreMutationService.js +33 -0
  233. package/dist/core/TaskDurableStatusMutationService.d.ts +74 -0
  234. package/dist/core/TaskDurableStatusMutationService.js +247 -0
  235. package/dist/core/TaskDurableSyncMutationService.d.ts +34 -0
  236. package/dist/core/TaskDurableSyncMutationService.js +70 -0
  237. package/dist/core/TaskDurableWorkflowMutationService.d.ts +48 -0
  238. package/dist/core/TaskDurableWorkflowMutationService.js +59 -0
  239. package/dist/core/TaskLifecycleCommandService.d.ts +101 -0
  240. package/dist/core/TaskLifecycleCommandService.js +161 -0
  241. package/dist/core/TaskRootCommandPreparationService.d.ts +35 -0
  242. package/dist/core/TaskRootCommandPreparationService.js +103 -0
  243. package/dist/core/Taskforce.d.ts +542 -60
  244. package/dist/core/Taskforce.js +4220 -905
  245. package/dist/core/WorkflowAssignmentService.d.ts +40 -0
  246. package/dist/core/WorkflowAssignmentService.js +158 -0
  247. package/dist/core/WorkflowExecutionService.d.ts +69 -0
  248. package/dist/core/WorkflowExecutionService.js +342 -0
  249. package/dist/core/WorkflowTaskActivationService.d.ts +32 -0
  250. package/dist/core/WorkflowTaskActivationService.js +63 -0
  251. package/dist/core/WorkflowTemplateService.d.ts +64 -0
  252. package/dist/core/WorkflowTemplateService.js +223 -0
  253. package/dist/core/WorkspaceLifecycleService.d.ts +1 -0
  254. package/dist/core/WorkspaceLifecycleService.js +18 -0
  255. package/dist/core/WorkstreamDurableMutationService.d.ts +90 -0
  256. package/dist/core/WorkstreamDurableMutationService.js +184 -0
  257. package/dist/core/planningReferencePolicy.d.ts +14 -0
  258. package/dist/core/planningReferencePolicy.js +53 -0
  259. package/dist/core/taskReferencePolicy.js +24 -3
  260. package/dist/core/types.d.ts +12 -11
  261. package/dist/documentReviews/DocumentReviewCommentStore.d.ts +33 -2
  262. package/dist/documentReviews/DocumentReviewCommentStore.js +125 -8
  263. package/dist/documentReviews/commandService.d.ts +51 -0
  264. package/dist/documentReviews/commandService.js +63 -0
  265. package/dist/documentReviews/service.d.ts +24 -1
  266. package/dist/documentReviews/service.js +354 -49
  267. package/dist/documentReviews/types.d.ts +18 -1
  268. package/dist/hooks/sync/bootstrap.d.ts +3 -7
  269. package/dist/hooks/sync/bootstrap.js +6 -14
  270. package/dist/hooks/sync/browserSyncAuthority.d.ts +21 -0
  271. package/dist/hooks/sync/browserSyncAuthority.js +70 -0
  272. package/dist/hooks/sync/browserSyncRemoteServices.d.ts +29 -0
  273. package/dist/hooks/sync/browserSyncRemoteServices.js +58 -0
  274. package/dist/hooks/sync/controlPlane.d.ts +1 -37
  275. package/dist/hooks/sync/controlPlane.js +1 -78
  276. package/dist/hooks/sync/lifecyclePolicy.d.ts +1 -45
  277. package/dist/hooks/sync/lifecyclePolicy.js +1 -93
  278. package/dist/hooks/sync/orchestratorShared.d.ts +9 -3
  279. package/dist/hooks/sync/orchestratorShared.js +70 -96
  280. package/dist/hooks/sync/pullLifecycle.d.ts +1 -31
  281. package/dist/hooks/sync/pullLifecycle.js +1 -24
  282. package/dist/hooks/sync/realtime.d.ts +4 -1
  283. package/dist/hooks/sync/realtime.js +103 -3
  284. package/dist/hooks/sync/recovery.d.ts +1 -84
  285. package/dist/hooks/sync/recovery.js +1 -245
  286. package/dist/hooks/sync/transfers.d.ts +8 -129
  287. package/dist/hooks/sync/transfers.js +19 -581
  288. package/dist/hooks/sync/useDataVersionRefresh.d.ts +6 -1
  289. package/dist/hooks/sync/useDataVersionRefresh.js +127 -12
  290. package/dist/hooks/sync/useDurableLocalOutboxDrain.d.ts +14 -0
  291. package/dist/hooks/sync/useDurableLocalOutboxDrain.js +208 -0
  292. package/dist/hooks/sync/useDurableTaskCreateMutation.d.ts +15 -0
  293. package/dist/hooks/sync/useDurableTaskCreateMutation.js +152 -0
  294. package/dist/hooks/sync/useDurableTaskDeleteMutation.d.ts +11 -0
  295. package/dist/hooks/sync/useDurableTaskDeleteMutation.js +21 -0
  296. package/dist/hooks/sync/useDurableTaskLifecycleMutation.d.ts +12 -0
  297. package/dist/hooks/sync/useDurableTaskLifecycleMutation.js +22 -0
  298. package/dist/hooks/sync/useDurableTaskMetadataMutation.d.ts +14 -0
  299. package/dist/hooks/sync/useDurableTaskMetadataMutation.js +24 -0
  300. package/dist/hooks/sync/useDurableTaskRestoreMutation.d.ts +12 -0
  301. package/dist/hooks/sync/useDurableTaskRestoreMutation.js +24 -0
  302. package/dist/hooks/sync/useDurableTaskStatusMutation.d.ts +18 -0
  303. package/dist/hooks/sync/useDurableTaskStatusMutation.js +23 -0
  304. package/dist/hooks/sync/useLocalSyncCoordinatorSnapshot.d.ts +23 -0
  305. package/dist/hooks/sync/useLocalSyncCoordinatorSnapshot.js +414 -0
  306. package/dist/hooks/sync/useSyncStatusActions.d.ts +2 -1
  307. package/dist/hooks/sync/useSyncStatusActions.js +8 -3
  308. package/dist/hooks/tasks/taskHttpMutation.d.ts +25 -0
  309. package/dist/hooks/tasks/taskHttpMutation.js +134 -0
  310. package/dist/hooks/tasks/useCurrentTaskRelations.d.ts +6 -1
  311. package/dist/hooks/tasks/useCurrentTaskRelations.js +32 -6
  312. package/dist/hooks/tasks/useTaskEditorNavigation.d.ts +4 -3
  313. package/dist/hooks/tasks/useTaskEditorNavigation.js +9 -13
  314. package/dist/hooks/tasks/useTaskFormActions.d.ts +20 -2
  315. package/dist/hooks/tasks/useTaskFormActions.js +339 -59
  316. package/dist/hooks/tasks/useTaskReferenceContract.d.ts +5 -0
  317. package/dist/hooks/tasks/useTaskReferenceContract.js +17 -0
  318. package/dist/hooks/tasks/useTaskRelationships.d.ts +1 -3
  319. package/dist/hooks/tasks/useTaskRelationships.js +5 -25
  320. package/dist/hooks/tasks/useTrashSelection.d.ts +12 -0
  321. package/dist/hooks/tasks/useTrashSelection.js +49 -0
  322. package/dist/hooks/ui/useInitiativeTemplates.d.ts +24 -0
  323. package/dist/hooks/ui/useInitiativeTemplates.js +22 -0
  324. package/dist/hooks/ui/useSettingsModel.d.ts +5 -29
  325. package/dist/hooks/ui/useSettingsModel.js +31 -15
  326. package/dist/hooks/ui/useSettingsPersistence.d.ts +0 -1
  327. package/dist/hooks/ui/useSettingsPersistence.js +4 -8
  328. package/dist/hooks/ui/useSettingsTaxonomyManagement.js +31 -0
  329. package/dist/hooks/useFilterSort.d.ts +2 -2
  330. package/dist/hooks/useFilterSort.js +19 -15
  331. package/dist/hooks/useRealtimeSync.d.ts +10 -0
  332. package/dist/hooks/useRealtimeSync.js +57 -4
  333. package/dist/hooks/useSyncOrchestrator.d.ts +32 -1
  334. package/dist/hooks/useSyncOrchestrator.js +963 -287
  335. package/dist/hooks/useTaskData.d.ts +11 -2
  336. package/dist/hooks/useTaskData.js +59 -26
  337. package/dist/hooks/useTaskMutations.d.ts +42 -5
  338. package/dist/hooks/useTaskMutations.js +750 -125
  339. package/dist/hooks/useTaskforce.d.ts +79 -74
  340. package/dist/hooks/useTaskforce.js +1205 -450
  341. package/dist/hooks/useUiNotice.d.ts +5 -1
  342. package/dist/hooks/useUiNotice.js +13 -2
  343. package/dist/hooks/useWorkspaceSyncController.d.ts +9 -0
  344. package/dist/hooks/useWorkspaceSyncController.js +159 -17
  345. package/dist/hooks/workspace/usePersistedAppUiState.d.ts +74 -0
  346. package/dist/hooks/workspace/usePersistedAppUiState.js +325 -0
  347. package/dist/hooks/workspace/usePersistedLayoutUiState.d.ts +76 -0
  348. package/dist/hooks/workspace/usePersistedLayoutUiState.js +479 -0
  349. package/dist/hooks/workspace/useTaskforceWorkspaceBootstrap.d.ts +2 -7
  350. package/dist/hooks/workspace/useTaskforceWorkspaceBootstrap.js +42 -31
  351. package/dist/hooks/workspace/workspaceLocalState.d.ts +17 -6
  352. package/dist/hooks/workspace/workspaceLocalState.js +175 -5
  353. package/dist/hooks/workstreams/workstreamHttpMutation.d.ts +23 -0
  354. package/dist/hooks/workstreams/workstreamHttpMutation.js +134 -0
  355. package/dist/localization/locales/en-US.d.ts +3 -3
  356. package/dist/localization/locales/en-US.js +3 -3
  357. package/dist/localization/locales/es-419.js +3 -3
  358. package/dist/localization/locales/pt-BR.js +3 -3
  359. package/dist/mcp/adminWorkspaceRegistrar.js +2 -30
  360. package/dist/mcp/aiProfileBootstrap.d.ts +3 -0
  361. package/dist/mcp/aiProfileBootstrap.js +4 -0
  362. package/dist/mcp/canonicalAssetHelpers.d.ts +29 -4
  363. package/dist/mcp/canonicalAssetHelpers.js +138 -35
  364. package/dist/mcp/clientIntegrations.d.ts +4 -2
  365. package/dist/mcp/clientIntegrations.js +58 -57
  366. package/dist/mcp/clientRegistry.d.ts +30 -0
  367. package/dist/mcp/clientRegistry.js +134 -0
  368. package/dist/mcp/collaborationRegistrar.js +31 -15
  369. package/dist/mcp/documentAssetRegistrar.js +231 -56
  370. package/dist/mcp/documentContentCommand.d.ts +94 -0
  371. package/dist/mcp/documentContentCommand.js +226 -0
  372. package/dist/mcp/documentHelpers.d.ts +13 -65
  373. package/dist/mcp/documentHelpers.js +49 -62
  374. package/dist/mcp/durableTaskMutationRouter.d.ts +65 -0
  375. package/dist/mcp/durableTaskMutationRouter.js +217 -0
  376. package/dist/mcp/durableTaskRelationshipMutationRouter.d.ts +38 -0
  377. package/dist/mcp/durableTaskRelationshipMutationRouter.js +168 -0
  378. package/dist/mcp/durableTaskRootMutationRouter.d.ts +64 -0
  379. package/dist/mcp/durableTaskRootMutationRouter.js +226 -0
  380. package/dist/mcp/gitWorktreeRoots.d.ts +2 -0
  381. package/dist/mcp/gitWorktreeRoots.js +19 -0
  382. package/dist/mcp/legacyServer.d.ts +1 -0
  383. package/dist/mcp/legacyServer.js +42 -0
  384. package/dist/mcp/localCliHealth.d.ts +56 -0
  385. package/dist/mcp/localCliHealth.js +170 -0
  386. package/dist/mcp/localServiceProxy.d.ts +23 -0
  387. package/dist/mcp/localServiceProxy.js +258 -0
  388. package/dist/mcp/mcpInputValidator.d.ts +17 -0
  389. package/dist/mcp/mcpInputValidator.js +58 -0
  390. package/dist/mcp/planningAttachmentCommandAdapter.d.ts +127 -0
  391. package/dist/mcp/planningAttachmentCommandAdapter.js +188 -0
  392. package/dist/mcp/programScaffoldCommandAdapter.d.ts +6 -0
  393. package/dist/mcp/programScaffoldCommandAdapter.js +39 -0
  394. package/dist/mcp/proxyServer.d.ts +1 -0
  395. package/dist/mcp/proxyServer.js +2 -0
  396. package/dist/mcp/runtime.d.ts +98 -1
  397. package/dist/mcp/runtime.js +4682 -1927
  398. package/dist/mcp/server.js +29 -2
  399. package/dist/mcp/sharedLocalServiceGateD.d.ts +115 -0
  400. package/dist/mcp/sharedLocalServiceGateD.js +344 -0
  401. package/dist/mcp/stdioLifecycle.d.ts +22 -0
  402. package/dist/mcp/stdioLifecycle.js +54 -0
  403. package/dist/mcp/taskAttachmentCommandAdapter.d.ts +192 -0
  404. package/dist/mcp/taskAttachmentCommandAdapter.js +470 -0
  405. package/dist/mcp/taskAttachmentHelpers.d.ts +8 -6
  406. package/dist/mcp/taskAttachmentHelpers.js +74 -2
  407. package/dist/mcp/taskAttachmentTypes.d.ts +26 -5
  408. package/dist/mcp/taskPlanCommand.d.ts +64 -0
  409. package/dist/mcp/taskPlanCommand.js +98 -0
  410. package/dist/mcp/taskPlanningRegistrar.js +240 -44
  411. package/dist/mcp/toolCallCompatibility.d.ts +6 -0
  412. package/dist/mcp/toolCallCompatibility.js +16 -0
  413. package/dist/mcp/toolCatalog.d.ts +3 -1
  414. package/dist/mcp/toolProfiles.d.ts +12 -1
  415. package/dist/mcp/toolProfiles.js +43 -0
  416. package/dist/mcp/toolRegistry.d.ts +17 -2
  417. package/dist/mcp/toolRegistry.js +26 -11
  418. package/dist/mcp/workflowExecutionRegistrar.d.ts +2 -0
  419. package/dist/mcp/workflowExecutionRegistrar.js +51 -0
  420. package/dist/migrations/taskSchemaMigrations.d.ts +35 -0
  421. package/dist/migrations/taskSchemaMigrations.js +1892 -64
  422. package/dist/migrations/taskUpdatedAtSyncDriftMigration.d.ts +20 -0
  423. package/dist/migrations/taskUpdatedAtSyncDriftMigration.js +153 -0
  424. package/dist/migrations/taskforceAgentDefinitionMigration.d.ts +26 -0
  425. package/dist/migrations/taskforceAgentDefinitionMigration.js +116 -0
  426. package/dist/plugins/vite.js +48 -17
  427. package/dist/public/Taskforce_Van.webp +0 -0
  428. package/dist/runtime/appGateDefinitions.d.ts +16 -10
  429. package/dist/runtime/appGateDefinitions.js +16 -10
  430. package/dist/runtime/appGates.d.ts +5 -4
  431. package/dist/runtime/appGates.js +4 -3
  432. package/dist/server/aiProfileAvatarAssets.d.ts +11 -8
  433. package/dist/server/aiProfileAvatarAssets.js +159 -70
  434. package/dist/server/appAccess.d.ts +12 -0
  435. package/dist/server/appAccess.js +21 -0
  436. package/dist/server/auth.js +15 -1
  437. package/dist/server/authorizedWorkspaceAccess.d.ts +12 -0
  438. package/dist/server/authorizedWorkspaceAccess.js +40 -0
  439. package/dist/server/cloudCollectionRead.d.ts +25 -0
  440. package/dist/server/cloudCollectionRead.js +120 -0
  441. package/dist/server/cloudCollectionReadPool.d.ts +52 -0
  442. package/dist/server/cloudCollectionReadPool.js +140 -0
  443. package/dist/server/cloudCollectionReadWorker.d.ts +1 -0
  444. package/dist/server/cloudCollectionReadWorker.js +36 -0
  445. package/dist/server/cors.d.ts +2 -1
  446. package/dist/server/cors.js +45 -8
  447. package/dist/server/email.d.ts +3 -1
  448. package/dist/server/email.js +46 -8
  449. package/dist/server/index.d.ts +27 -12
  450. package/dist/server/index.js +395 -86
  451. package/dist/server/localDataOwnerPermit.d.ts +18 -0
  452. package/dist/server/localDataOwnerPermit.js +58 -0
  453. package/dist/server/localDatabaseIdentity.d.ts +14 -0
  454. package/dist/server/localDatabaseIdentity.js +69 -0
  455. package/dist/server/localRealtimeFileInvalidation.d.ts +1 -0
  456. package/dist/server/localRealtimeFileInvalidation.js +7 -0
  457. package/dist/server/localServiceLease.d.ts +65 -0
  458. package/dist/server/localServiceLease.js +485 -0
  459. package/dist/server/localServiceOwnershipBootstrap.d.ts +19 -0
  460. package/dist/server/localServiceOwnershipBootstrap.js +84 -0
  461. package/dist/server/localServiceSessions.d.ts +87 -0
  462. package/dist/server/localServiceSessions.js +309 -0
  463. package/dist/server/localServiceWindowsAcl.d.ts +8 -0
  464. package/dist/server/localServiceWindowsAcl.js +60 -0
  465. package/dist/server/localSyncProcessLockBootstrap.d.ts +3 -0
  466. package/dist/server/localSyncProcessLockBootstrap.js +16 -0
  467. package/dist/server/localWorkspaceSyncServerComposition.d.ts +59 -0
  468. package/dist/server/localWorkspaceSyncServerComposition.js +91 -0
  469. package/dist/server/localWorkspaceSyncServerRuntime.d.ts +119 -0
  470. package/dist/server/localWorkspaceSyncServerRuntime.js +1163 -0
  471. package/dist/server/rateLimit.d.ts +1 -0
  472. package/dist/server/rateLimit.js +16 -0
  473. package/dist/server/routes/admin.d.ts +2 -4
  474. package/dist/server/routes/admin.js +199 -337
  475. package/dist/server/routes/agentRoles.d.ts +13 -0
  476. package/dist/server/routes/agentRoles.js +273 -0
  477. package/dist/server/routes/agentSkills.d.ts +16 -0
  478. package/dist/server/routes/agentSkills.js +291 -0
  479. package/dist/server/routes/agents.d.ts +49 -0
  480. package/dist/server/routes/agents.js +1455 -0
  481. package/dist/server/routes/annotatedAttachments.js +46 -9
  482. package/dist/server/routes/assetAccess.d.ts +36 -0
  483. package/dist/server/routes/assetAccess.js +93 -0
  484. package/dist/server/routes/auth.d.ts +4 -3
  485. package/dist/server/routes/auth.js +236 -21
  486. package/dist/server/routes/authSupport.d.ts +3 -1
  487. package/dist/server/routes/authSupport.js +22 -8
  488. package/dist/server/routes/documentReviews.d.ts +2 -0
  489. package/dist/server/routes/documentReviews.js +155 -15
  490. package/dist/server/routes/documents.d.ts +6 -2
  491. package/dist/server/routes/documents.js +492 -151
  492. package/dist/server/routes/durableTaskHttpRouters.d.ts +167 -0
  493. package/dist/server/routes/durableTaskHttpRouters.js +89 -0
  494. package/dist/server/routes/localMcpHealth.d.ts +11 -0
  495. package/dist/server/routes/localMcpHealth.js +29 -0
  496. package/dist/server/routes/localService.d.ts +13 -0
  497. package/dist/server/routes/localService.js +446 -0
  498. package/dist/server/routes/localUpdate.d.ts +11 -0
  499. package/dist/server/routes/localUpdate.js +154 -0
  500. package/dist/server/routes/primitives.d.ts +29 -0
  501. package/dist/server/routes/primitives.js +18 -0
  502. package/dist/server/routes/resources.d.ts +1 -10
  503. package/dist/server/routes/resources.js +1 -153
  504. package/dist/server/routes/shared.d.ts +55 -2
  505. package/dist/server/routes/shared.js +506 -16
  506. package/dist/server/routes/sync.d.ts +2 -0
  507. package/dist/server/routes/sync.js +206 -272
  508. package/dist/server/routes/syncAuxRoutes.d.ts +3 -1
  509. package/dist/server/routes/syncAuxRoutes.js +9 -4
  510. package/dist/server/routes/syncCoordinatorLocalRoutes.d.ts +6 -0
  511. package/dist/server/routes/syncCoordinatorLocalRoutes.js +867 -0
  512. package/dist/server/routes/syncPullApplyRoutes.d.ts +29 -1
  513. package/dist/server/routes/syncPullApplyRoutes.js +520 -17
  514. package/dist/server/routes/syncPushRoutes.d.ts +33 -4
  515. package/dist/server/routes/syncPushRoutes.js +251 -62
  516. package/dist/server/routes/syncRouteTypes.d.ts +1 -1
  517. package/dist/server/routes/syncSnapshotRoutes.d.ts +15 -7
  518. package/dist/server/routes/syncSnapshotRoutes.js +95 -17
  519. package/dist/server/routes/syncV3DiagnosticsRoutes.d.ts +14 -0
  520. package/dist/server/routes/syncV3DiagnosticsRoutes.js +72 -0
  521. package/dist/server/routes/syncV3FeedRoutes.d.ts +20 -0
  522. package/dist/server/routes/syncV3FeedRoutes.js +464 -0
  523. package/dist/server/routes/syncV3LocalCaptureRoutes.d.ts +37 -0
  524. package/dist/server/routes/syncV3LocalCaptureRoutes.js +915 -0
  525. package/dist/server/routes/syncV3LocalDispatchRoutes.d.ts +17 -0
  526. package/dist/server/routes/syncV3LocalDispatchRoutes.js +280 -0
  527. package/dist/server/routes/syncV3LocalFeedApplyRoutes.d.ts +17 -0
  528. package/dist/server/routes/syncV3LocalFeedApplyRoutes.js +493 -0
  529. package/dist/server/routes/syncV3LocalOwnershipRoutes.d.ts +10 -0
  530. package/dist/server/routes/syncV3LocalOwnershipRoutes.js +51 -0
  531. package/dist/server/routes/syncV3LocalRecoveryRoutes.d.ts +12 -0
  532. package/dist/server/routes/syncV3LocalRecoveryRoutes.js +78 -0
  533. package/dist/server/routes/syncV3OperationRoutes.d.ts +35 -0
  534. package/dist/server/routes/syncV3OperationRoutes.js +1151 -0
  535. package/dist/server/routes/tasks.d.ts +0 -2
  536. package/dist/server/routes/tasks.js +1083 -236
  537. package/dist/server/routes/workflows.d.ts +26 -0
  538. package/dist/server/routes/workflows.js +500 -0
  539. package/dist/server/routes.d.ts +1 -6
  540. package/dist/server/routes.js +179 -342
  541. package/dist/server/smtpTransport.d.ts +11 -3
  542. package/dist/server/smtpTransport.js +9 -2
  543. package/dist/server/start.js +42 -10
  544. package/dist/service/localServiceCli.d.ts +33 -0
  545. package/dist/service/localServiceCli.js +376 -0
  546. package/dist/service/localServiceClientLifecycle.d.ts +25 -0
  547. package/dist/service/localServiceClientLifecycle.js +189 -0
  548. package/dist/service/localServiceOpen.d.ts +17 -0
  549. package/dist/service/localServiceOpen.js +27 -0
  550. package/dist/services/agentRoleResolver.d.ts +4 -0
  551. package/dist/services/agentRoleResolver.js +7 -0
  552. package/dist/services/aiProfileAvatarGenerationService.d.ts +41 -0
  553. package/dist/services/aiProfileAvatarGenerationService.js +158 -0
  554. package/dist/services/avatarImageProvider.d.ts +33 -0
  555. package/dist/services/avatarImageProvider.js +140 -0
  556. package/dist/services/bedrockAnthropicMessagesModelGateway.d.ts +24 -0
  557. package/dist/services/bedrockAnthropicMessagesModelGateway.js +95 -0
  558. package/dist/services/bedrockMantleModelGateway.d.ts +43 -0
  559. package/dist/services/bedrockMantleModelGateway.js +81 -0
  560. package/dist/services/bedrockModelGateway.d.ts +26 -0
  561. package/dist/services/bedrockModelGateway.js +94 -0
  562. package/dist/services/modelGateway.d.ts +82 -0
  563. package/dist/services/modelGateway.js +61 -0
  564. package/dist/services/taskforceAgentAvatarImageProvider.d.ts +8 -0
  565. package/dist/services/taskforceAgentAvatarImageProvider.js +24 -0
  566. package/dist/services/taskforceAgentMcpBridge.d.ts +77 -0
  567. package/dist/services/taskforceAgentMcpBridge.js +527 -0
  568. package/dist/shared/agentRoleDefinition.d.ts +34 -0
  569. package/dist/shared/agentRoleDefinition.js +207 -0
  570. package/dist/shared/aiProfileAvatarEligibility.d.ts +10 -0
  571. package/dist/shared/aiProfileAvatarEligibility.js +27 -0
  572. package/dist/shared/aiProfileColors.d.ts +7 -0
  573. package/dist/shared/aiProfileColors.js +33 -0
  574. package/dist/shared/colorPalette.d.ts +3 -0
  575. package/dist/shared/colorPalette.js +20 -0
  576. package/dist/shared/commentProvenance.d.ts +4 -0
  577. package/dist/shared/commentProvenance.js +6 -0
  578. package/dist/shared/deletedTaskRetention.d.ts +2 -0
  579. package/dist/shared/deletedTaskRetention.js +7 -0
  580. package/dist/shared/passwordPolicy.d.ts +2 -1
  581. package/dist/shared/passwordPolicy.js +9 -0
  582. package/dist/shared/planningIdentity.d.ts +20 -0
  583. package/dist/shared/planningIdentity.js +79 -0
  584. package/dist/shared/taskDeepLinks.d.ts +28 -0
  585. package/dist/shared/taskDeepLinks.js +48 -0
  586. package/dist/shared/taskRestoreDestination.d.ts +2 -0
  587. package/dist/shared/taskRestoreDestination.js +5 -0
  588. package/dist/shared/taskforceAgentDefinition.d.ts +88 -0
  589. package/dist/shared/taskforceAgentDefinition.js +434 -0
  590. package/dist/shared/taskforceAgentExecutionSnapshot.d.ts +50 -0
  591. package/dist/shared/taskforceAgentExecutionSnapshot.js +68 -0
  592. package/dist/shared/taskforceAgentModels.d.ts +56 -0
  593. package/dist/shared/taskforceAgentModels.js +314 -0
  594. package/dist/shared/taskforceAgentRunContext.d.ts +23 -0
  595. package/dist/shared/taskforceAgentRunContext.js +21 -0
  596. package/dist/shared/taskforceAgentRuntimeResolution.d.ts +31 -0
  597. package/dist/shared/taskforceAgentRuntimeResolution.js +72 -0
  598. package/dist/shared/taskforceAgentSkill.d.ts +33 -0
  599. package/dist/shared/taskforceAgentSkill.js +149 -0
  600. package/dist/storage/agentRoleStore.d.ts +91 -0
  601. package/dist/storage/agentRoleStore.js +385 -0
  602. package/dist/storage/databaseAdapter.d.ts +1 -0
  603. package/dist/storage/databaseAdapter.js +7 -1
  604. package/dist/storage/documentIntegrity.d.ts +12 -3
  605. package/dist/storage/documentIntegrity.js +105 -27
  606. package/dist/storage/objectStorageClient.d.ts +10 -4
  607. package/dist/storage/objectStorageClient.js +73 -43
  608. package/dist/storage/postgresAdapter.d.ts +2 -1
  609. package/dist/storage/postgresAdapter.js +42 -6
  610. package/dist/storage/postgresRequestDiagnostics.d.ts +8 -0
  611. package/dist/storage/postgresRequestDiagnostics.js +24 -0
  612. package/dist/storage/postgresWorker.js +65 -1
  613. package/dist/storage/sqliteAdapter.d.ts +1 -1
  614. package/dist/storage/sqliteAdapter.js +7 -1
  615. package/dist/storage/sqliteWalHealth.d.ts +71 -0
  616. package/dist/storage/sqliteWalHealth.js +176 -0
  617. package/dist/storage/taskDataPath.d.ts +1 -0
  618. package/dist/storage/taskDataPath.js +20 -0
  619. package/dist/storage/taskforceAgentConversationStore.d.ts +66 -0
  620. package/dist/storage/taskforceAgentConversationStore.js +264 -0
  621. package/dist/storage/taskforceAgentSkillStore.d.ts +93 -0
  622. package/dist/storage/taskforceAgentSkillStore.js +355 -0
  623. package/dist/storage/taskforceAgentStore.d.ts +105 -0
  624. package/dist/storage/taskforceAgentStore.js +549 -0
  625. package/dist/storage/workflowStore.d.ts +223 -0
  626. package/dist/storage/workflowStore.js +1032 -0
  627. package/dist/storage/workspaceAssetStore.d.ts +102 -0
  628. package/dist/storage/workspaceAssetStore.js +488 -25
  629. package/dist/sync/aiProfileAvatarSyncPaths.d.ts +14 -0
  630. package/dist/sync/aiProfileAvatarSyncPaths.js +56 -0
  631. package/dist/sync/cloudSyncApi.d.ts +329 -0
  632. package/dist/sync/cloudSyncApi.js +574 -1
  633. package/dist/sync/collaborationSyncPayload.d.ts +5 -1
  634. package/dist/sync/collaborationSyncPayload.js +213 -1
  635. package/dist/sync/collaborationSyncState.d.ts +23 -3
  636. package/dist/sync/collaborationSyncState.js +92 -3
  637. package/dist/sync/contentSyncPayload.d.ts +9 -0
  638. package/dist/sync/contentSyncPayload.js +29 -0
  639. package/dist/sync/contentSyncState.d.ts +79 -4
  640. package/dist/sync/contentSyncState.js +1113 -313
  641. package/dist/sync/coordinator/localSyncBrowserApplyPermitContext.d.ts +39 -0
  642. package/dist/sync/coordinator/localSyncBrowserApplyPermitContext.js +234 -0
  643. package/dist/sync/coordinator/localSyncBrowserAuthorityCapability.d.ts +7 -0
  644. package/dist/sync/coordinator/localSyncBrowserAuthorityCapability.js +10 -0
  645. package/dist/sync/coordinator/localSyncCommittedApplyPolicy.d.ts +7 -0
  646. package/dist/sync/coordinator/localSyncCommittedApplyPolicy.js +41 -0
  647. package/dist/sync/coordinator/localSyncCoordinatorBrowserClient.d.ts +178 -0
  648. package/dist/sync/coordinator/localSyncCoordinatorBrowserClient.js +131 -0
  649. package/dist/sync/coordinator/localSyncCoordinatorCommandLifecycle.d.ts +25 -0
  650. package/dist/sync/coordinator/localSyncCoordinatorCommandLifecycle.js +200 -0
  651. package/dist/sync/coordinator/localSyncCoordinatorHost.d.ts +84 -0
  652. package/dist/sync/coordinator/localSyncCoordinatorHost.js +435 -0
  653. package/dist/sync/coordinator/localSyncCoordinatorRouteServices.d.ts +33 -0
  654. package/dist/sync/coordinator/localSyncCoordinatorRouteServices.js +1 -0
  655. package/dist/sync/coordinator/localSyncCoordinatorStore.d.ts +122 -0
  656. package/dist/sync/coordinator/localSyncCoordinatorStore.js +1039 -0
  657. package/dist/sync/coordinator/localSyncCoordinatorTypes.d.ts +82 -0
  658. package/dist/sync/coordinator/localSyncCoordinatorTypes.js +9 -0
  659. package/dist/sync/coordinator/localSyncDispatchTracker.d.ts +15 -0
  660. package/dist/sync/coordinator/localSyncDispatchTracker.js +68 -0
  661. package/dist/sync/coordinator/localSyncExecutionPermitStore.d.ts +216 -0
  662. package/dist/sync/coordinator/localSyncExecutionPermitStore.js +1436 -0
  663. package/dist/sync/coordinator/localSyncExecutionPermitTypes.d.ts +52 -0
  664. package/dist/sync/coordinator/localSyncExecutionPermitTypes.js +8 -0
  665. package/dist/sync/coordinator/localSyncOwnershipDrainBarrier.d.ts +33 -0
  666. package/dist/sync/coordinator/localSyncOwnershipDrainBarrier.js +83 -0
  667. package/dist/sync/coordinator/localSyncPermitTransactionHooks.d.ts +9 -0
  668. package/dist/sync/coordinator/localSyncPermitTransactionHooks.js +27 -0
  669. package/dist/sync/coordinator/localSyncProcessLock.d.ts +12 -0
  670. package/dist/sync/coordinator/localSyncProcessLock.js +212 -0
  671. package/dist/sync/coordinator/localSyncV3DispatchRecoveryReconciler.d.ts +17 -0
  672. package/dist/sync/coordinator/localSyncV3DispatchRecoveryReconciler.js +82 -0
  673. package/dist/sync/coordinator/localWorkspaceSyncRunner.d.ts +134 -0
  674. package/dist/sync/coordinator/localWorkspaceSyncRunner.js +981 -0
  675. package/dist/sync/coordinator/localWorkspaceSyncRunnerState.d.ts +189 -0
  676. package/dist/sync/coordinator/localWorkspaceSyncRunnerState.js +961 -0
  677. package/dist/sync/coordinator/workspaceSyncCloudCredentialValidator.d.ts +19 -0
  678. package/dist/sync/coordinator/workspaceSyncCloudCredentialValidator.js +83 -0
  679. package/dist/sync/coordinator/workspaceSyncCredentialBroker.d.ts +117 -0
  680. package/dist/sync/coordinator/workspaceSyncCredentialBroker.js +323 -0
  681. package/dist/sync/coordinator/workspaceSyncLocalAccessBootstrap.d.ts +11 -0
  682. package/dist/sync/coordinator/workspaceSyncLocalAccessBootstrap.js +51 -0
  683. package/dist/sync/coordinator/workspaceSyncTransportGateway.d.ts +139 -0
  684. package/dist/sync/coordinator/workspaceSyncTransportGateway.js +740 -0
  685. package/dist/sync/engine/localWorkspaceContentManifestService.d.ts +21 -0
  686. package/dist/sync/engine/localWorkspaceContentManifestService.js +44 -0
  687. package/dist/sync/engine/workspaceSyncAtomicLocalPublisher.d.ts +36 -0
  688. package/dist/sync/engine/workspaceSyncAtomicLocalPublisher.js +203 -0
  689. package/dist/sync/engine/workspaceSyncContentLifecycleAdapter.d.ts +21 -0
  690. package/dist/sync/engine/workspaceSyncContentLifecycleAdapter.js +13 -0
  691. package/dist/sync/engine/workspaceSyncContentPullObligationStore.d.ts +65 -0
  692. package/dist/sync/engine/workspaceSyncContentPullObligationStore.js +160 -0
  693. package/dist/sync/engine/workspaceSyncContentVersionStore.d.ts +216 -0
  694. package/dist/sync/engine/workspaceSyncContentVersionStore.js +1068 -0
  695. package/dist/sync/engine/workspaceSyncEngineBrowserGatewayRemoteServices.d.ts +28 -0
  696. package/dist/sync/engine/workspaceSyncEngineBrowserGatewayRemoteServices.js +543 -0
  697. package/dist/sync/engine/workspaceSyncEngineContracts.d.ts +78 -0
  698. package/dist/sync/engine/workspaceSyncEngineContracts.js +1 -0
  699. package/dist/sync/engine/workspaceSyncEngineControlPlane.d.ts +37 -0
  700. package/dist/sync/engine/workspaceSyncEngineControlPlane.js +79 -0
  701. package/dist/sync/engine/workspaceSyncEngineIdentity.d.ts +1 -0
  702. package/dist/sync/engine/workspaceSyncEngineIdentity.js +4 -0
  703. package/dist/sync/engine/workspaceSyncEngineLifecyclePolicy.d.ts +68 -0
  704. package/dist/sync/engine/workspaceSyncEngineLifecyclePolicy.js +180 -0
  705. package/dist/sync/engine/workspaceSyncEngineLocalApply.d.ts +72 -0
  706. package/dist/sync/engine/workspaceSyncEngineLocalApply.js +132 -0
  707. package/dist/sync/engine/workspaceSyncEngineLocalServices.d.ts +70 -0
  708. package/dist/sync/engine/workspaceSyncEngineLocalServices.js +25 -0
  709. package/dist/sync/engine/workspaceSyncEngineParity.d.ts +8 -0
  710. package/dist/sync/engine/workspaceSyncEngineParity.js +7 -0
  711. package/dist/sync/engine/workspaceSyncEnginePullPolicy.d.ts +32 -0
  712. package/dist/sync/engine/workspaceSyncEnginePullPolicy.js +27 -0
  713. package/dist/sync/engine/workspaceSyncEnginePushCompletion.d.ts +20 -0
  714. package/dist/sync/engine/workspaceSyncEnginePushCompletion.js +87 -0
  715. package/dist/sync/engine/workspaceSyncEngineRecovery.d.ts +56 -0
  716. package/dist/sync/engine/workspaceSyncEngineRecovery.js +288 -0
  717. package/dist/sync/engine/workspaceSyncEngineRemoteServices.d.ts +109 -0
  718. package/dist/sync/engine/workspaceSyncEngineRemoteServices.js +21 -0
  719. package/dist/sync/engine/workspaceSyncEngineRuntime.d.ts +61 -0
  720. package/dist/sync/engine/workspaceSyncEngineRuntime.js +59 -0
  721. package/dist/sync/engine/workspaceSyncEngineServerApplyBoundary.d.ts +28 -0
  722. package/dist/sync/engine/workspaceSyncEngineServerApplyBoundary.js +86 -0
  723. package/dist/sync/engine/workspaceSyncEngineServerLocalServices.d.ts +73 -0
  724. package/dist/sync/engine/workspaceSyncEngineServerLocalServices.js +452 -0
  725. package/dist/sync/engine/workspaceSyncEngineServerRemoteServices.d.ts +23 -0
  726. package/dist/sync/engine/workspaceSyncEngineServerRemoteServices.js +466 -0
  727. package/dist/sync/engine/workspaceSyncEngineServerRunnerOperations.d.ts +125 -0
  728. package/dist/sync/engine/workspaceSyncEngineServerRunnerOperations.js +1147 -0
  729. package/dist/sync/engine/workspaceSyncEngineServerSnapshotReader.d.ts +63 -0
  730. package/dist/sync/engine/workspaceSyncEngineServerSnapshotReader.js +276 -0
  731. package/dist/sync/engine/workspaceSyncEngineTransferCompletion.d.ts +20 -0
  732. package/dist/sync/engine/workspaceSyncEngineTransferCompletion.js +37 -0
  733. package/dist/sync/engine/workspaceSyncEngineTransferTypes.d.ts +7 -0
  734. package/dist/sync/engine/workspaceSyncEngineTransferTypes.js +1 -0
  735. package/dist/sync/engine/workspaceSyncEngineTransfers.d.ts +240 -0
  736. package/dist/sync/engine/workspaceSyncEngineTransfers.js +1184 -0
  737. package/dist/sync/engine/workspaceSyncEngineV3LocalFeedApply.d.ts +39 -0
  738. package/dist/sync/engine/workspaceSyncEngineV3LocalFeedApply.js +39 -0
  739. package/dist/sync/engine/workspaceSyncImmutableContentGcRunner.d.ts +25 -0
  740. package/dist/sync/engine/workspaceSyncImmutableContentGcRunner.js +83 -0
  741. package/dist/sync/engine/workspaceSyncImmutableContentProvider.d.ts +71 -0
  742. package/dist/sync/engine/workspaceSyncImmutableContentProvider.js +209 -0
  743. package/dist/sync/engine/workspaceSyncImmutableContentStager.d.ts +32 -0
  744. package/dist/sync/engine/workspaceSyncImmutableContentStager.js +202 -0
  745. package/dist/sync/engine/workspaceSyncPublishedContentResolver.d.ts +43 -0
  746. package/dist/sync/engine/workspaceSyncPublishedContentResolver.js +142 -0
  747. package/dist/sync/engine/workspaceSyncServerContentRuntime.d.ts +26 -0
  748. package/dist/sync/engine/workspaceSyncServerContentRuntime.js +41 -0
  749. package/dist/sync/engine/workspaceSyncServerDataServices.d.ts +44 -0
  750. package/dist/sync/engine/workspaceSyncServerDataServices.js +143 -0
  751. package/dist/sync/engine/workspaceSyncTransferEvidence.d.ts +39 -0
  752. package/dist/sync/engine/workspaceSyncTransferEvidence.js +45 -0
  753. package/dist/sync/engine/workspaceSyncV2ChangeDispatcher.d.ts +44 -0
  754. package/dist/sync/engine/workspaceSyncV2ChangeDispatcher.js +992 -0
  755. package/dist/sync/engine/workspaceSyncV2PreparedContent.d.ts +82 -0
  756. package/dist/sync/engine/workspaceSyncV2PreparedContent.js +219 -0
  757. package/dist/sync/planningCanonicalFields.d.ts +41 -0
  758. package/dist/sync/planningCanonicalFields.js +211 -0
  759. package/dist/sync/planningSyncPayload.d.ts +5 -1
  760. package/dist/sync/planningSyncPayload.js +88 -4
  761. package/dist/sync/syncApplyHandlers.d.ts +100 -8
  762. package/dist/sync/syncApplyHandlers.js +845 -78
  763. package/dist/sync/syncResourceAdapters.d.ts +10 -0
  764. package/dist/sync/syncResourceAdapters.js +21 -1
  765. package/dist/sync/syncService.d.ts +57 -1
  766. package/dist/sync/syncService.js +1094 -138
  767. package/dist/sync/taskNestedContent.d.ts +2 -0
  768. package/dist/sync/taskNestedContent.js +8 -0
  769. package/dist/sync/taskSyncChangeKey.js +0 -1
  770. package/dist/sync/taskSyncPayload.d.ts +1 -1
  771. package/dist/sync/taskSyncPayload.js +20 -3
  772. package/dist/sync/v3/canonicalWorkspaceSyncJson.d.ts +2 -0
  773. package/dist/sync/v3/canonicalWorkspaceSyncJson.js +26 -0
  774. package/dist/sync/v3/combinedFeedCapability.d.ts +21 -0
  775. package/dist/sync/v3/combinedFeedCapability.js +80 -0
  776. package/dist/sync/v3/combinedFeedPrerequisites.d.ts +18 -0
  777. package/dist/sync/v3/combinedFeedPrerequisites.js +184 -0
  778. package/dist/sync/v3/durableInitiativeMutationRouter.d.ts +61 -0
  779. package/dist/sync/v3/durableInitiativeMutationRouter.js +287 -0
  780. package/dist/sync/v3/durableOperationReplay.d.ts +36 -0
  781. package/dist/sync/v3/durableOperationReplay.js +103 -0
  782. package/dist/sync/v3/durableTaskAttachmentLinksMutationRouter.d.ts +50 -0
  783. package/dist/sync/v3/durableTaskAttachmentLinksMutationRouter.js +216 -0
  784. package/dist/sync/v3/durableTaskChecklistMutationRouter.d.ts +47 -0
  785. package/dist/sync/v3/durableTaskChecklistMutationRouter.js +182 -0
  786. package/dist/sync/v3/durableTaskCommentMutationRouter.d.ts +47 -0
  787. package/dist/sync/v3/durableTaskCommentMutationRouter.js +191 -0
  788. package/dist/sync/v3/durableTaskHttpBulkMutationRouter.d.ts +60 -0
  789. package/dist/sync/v3/durableTaskHttpBulkMutationRouter.js +333 -0
  790. package/dist/sync/v3/durableTaskHttpRootMutationRouter.d.ts +40 -0
  791. package/dist/sync/v3/durableTaskHttpRootMutationRouter.js +518 -0
  792. package/dist/sync/v3/durableTaxonomyMutationRouter.d.ts +63 -0
  793. package/dist/sync/v3/durableTaxonomyMutationRouter.js +289 -0
  794. package/dist/sync/v3/durableWorkflowRuntimeMutationRouter.d.ts +77 -0
  795. package/dist/sync/v3/durableWorkflowRuntimeMutationRouter.js +361 -0
  796. package/dist/sync/v3/durableWorkstreamMutationRouter.d.ts +61 -0
  797. package/dist/sync/v3/durableWorkstreamMutationRouter.js +287 -0
  798. package/dist/sync/v3/durableWorkstreamTaskOrderMutationRouter.d.ts +42 -0
  799. package/dist/sync/v3/durableWorkstreamTaskOrderMutationRouter.js +122 -0
  800. package/dist/sync/v3/entityEventLegacyAdoptionContract.d.ts +6 -0
  801. package/dist/sync/v3/entityEventLegacyAdoptionContract.js +6 -0
  802. package/dist/sync/v3/entityEventLegacyAdoptionService.d.ts +62 -0
  803. package/dist/sync/v3/entityEventLegacyAdoptionService.js +180 -0
  804. package/dist/sync/v3/initiativeActivityAuthoritativeRevision.d.ts +11 -0
  805. package/dist/sync/v3/initiativeActivityAuthoritativeRevision.js +23 -0
  806. package/dist/sync/v3/initiativeActivityIdentity.d.ts +8 -0
  807. package/dist/sync/v3/initiativeActivityIdentity.js +14 -0
  808. package/dist/sync/v3/initiativeCoexistence.d.ts +26 -0
  809. package/dist/sync/v3/initiativeCoexistence.js +148 -0
  810. package/dist/sync/v3/initiativeFeedActivationCapability.d.ts +6 -0
  811. package/dist/sync/v3/initiativeFeedActivationCapability.js +16 -0
  812. package/dist/sync/v3/initiativeMutationPayload.d.ts +26 -0
  813. package/dist/sync/v3/initiativeMutationPayload.js +144 -0
  814. package/dist/sync/v3/initiativeMutationService.d.ts +62 -0
  815. package/dist/sync/v3/initiativeMutationService.js +206 -0
  816. package/dist/sync/v3/localEntityEventLegacyAdoption.d.ts +31 -0
  817. package/dist/sync/v3/localEntityEventLegacyAdoption.js +607 -0
  818. package/dist/sync/v3/localInitiativeOutboxHandler.d.ts +8 -0
  819. package/dist/sync/v3/localInitiativeOutboxHandler.js +88 -0
  820. package/dist/sync/v3/localInitiativeOutboxService.d.ts +50 -0
  821. package/dist/sync/v3/localInitiativeOutboxService.js +497 -0
  822. package/dist/sync/v3/localOperationIdentityStore.d.ts +81 -0
  823. package/dist/sync/v3/localOperationIdentityStore.js +388 -0
  824. package/dist/sync/v3/localOutboxDispatchCapability.d.ts +7 -0
  825. package/dist/sync/v3/localOutboxDispatchCapability.js +13 -0
  826. package/dist/sync/v3/localOutboxDispatchRuntime.d.ts +16 -0
  827. package/dist/sync/v3/localOutboxDispatchRuntime.js +269 -0
  828. package/dist/sync/v3/localOutboxDispatcher.d.ts +53 -0
  829. package/dist/sync/v3/localOutboxDispatcher.js +366 -0
  830. package/dist/sync/v3/localOutboxDrainClient.d.ts +50 -0
  831. package/dist/sync/v3/localOutboxDrainClient.js +250 -0
  832. package/dist/sync/v3/localOutboxOperationHandler.d.ts +31 -0
  833. package/dist/sync/v3/localOutboxOperationHandler.js +10 -0
  834. package/dist/sync/v3/localOutboxRecoveryClient.d.ts +14 -0
  835. package/dist/sync/v3/localOutboxRecoveryClient.js +45 -0
  836. package/dist/sync/v3/localOutboxRecoveryPreparationService.d.ts +12 -0
  837. package/dist/sync/v3/localOutboxRecoveryPreparationService.js +151 -0
  838. package/dist/sync/v3/localSyncIdentityStore.d.ts +9 -0
  839. package/dist/sync/v3/localSyncIdentityStore.js +43 -0
  840. package/dist/sync/v3/localTaskAttachmentLinksOutboxHandler.d.ts +10 -0
  841. package/dist/sync/v3/localTaskAttachmentLinksOutboxHandler.js +80 -0
  842. package/dist/sync/v3/localTaskAttachmentLinksOutboxService.d.ts +46 -0
  843. package/dist/sync/v3/localTaskAttachmentLinksOutboxService.js +303 -0
  844. package/dist/sync/v3/localTaskChecklistOutboxHandler.d.ts +10 -0
  845. package/dist/sync/v3/localTaskChecklistOutboxHandler.js +54 -0
  846. package/dist/sync/v3/localTaskChecklistOutboxService.d.ts +47 -0
  847. package/dist/sync/v3/localTaskChecklistOutboxService.js +221 -0
  848. package/dist/sync/v3/localTaskCommentOutboxHandler.d.ts +10 -0
  849. package/dist/sync/v3/localTaskCommentOutboxHandler.js +94 -0
  850. package/dist/sync/v3/localTaskCommentOutboxService.d.ts +75 -0
  851. package/dist/sync/v3/localTaskCommentOutboxService.js +391 -0
  852. package/dist/sync/v3/localTaskCreateClient.d.ts +27 -0
  853. package/dist/sync/v3/localTaskCreateClient.js +209 -0
  854. package/dist/sync/v3/localTaskCreateOutboxHandler.d.ts +8 -0
  855. package/dist/sync/v3/localTaskCreateOutboxHandler.js +147 -0
  856. package/dist/sync/v3/localTaskCreateOutboxService.d.ts +77 -0
  857. package/dist/sync/v3/localTaskCreateOutboxService.js +397 -0
  858. package/dist/sync/v3/localTaskDeleteClient.d.ts +10 -0
  859. package/dist/sync/v3/localTaskDeleteClient.js +23 -0
  860. package/dist/sync/v3/localTaskDeleteOutboxHandler.d.ts +8 -0
  861. package/dist/sync/v3/localTaskDeleteOutboxHandler.js +54 -0
  862. package/dist/sync/v3/localTaskDeleteOutboxService.d.ts +38 -0
  863. package/dist/sync/v3/localTaskDeleteOutboxService.js +235 -0
  864. package/dist/sync/v3/localTaskLegacyRootAdoption.d.ts +28 -0
  865. package/dist/sync/v3/localTaskLegacyRootAdoption.js +219 -0
  866. package/dist/sync/v3/localTaskLifecycleClient.d.ts +49 -0
  867. package/dist/sync/v3/localTaskLifecycleClient.js +57 -0
  868. package/dist/sync/v3/localTaskLifecycleOutboxHandler.d.ts +8 -0
  869. package/dist/sync/v3/localTaskLifecycleOutboxHandler.js +94 -0
  870. package/dist/sync/v3/localTaskLifecycleOutboxService.d.ts +60 -0
  871. package/dist/sync/v3/localTaskLifecycleOutboxService.js +304 -0
  872. package/dist/sync/v3/localTaskMetadataClient.d.ts +13 -0
  873. package/dist/sync/v3/localTaskMetadataClient.js +30 -0
  874. package/dist/sync/v3/localTaskMetadataOutboxHandler.d.ts +8 -0
  875. package/dist/sync/v3/localTaskMetadataOutboxHandler.js +70 -0
  876. package/dist/sync/v3/localTaskMetadataOutboxService.d.ts +48 -0
  877. package/dist/sync/v3/localTaskMetadataOutboxService.js +229 -0
  878. package/dist/sync/v3/localTaskOperationClient.d.ts +72 -0
  879. package/dist/sync/v3/localTaskOperationClient.js +195 -0
  880. package/dist/sync/v3/localTaskRelationshipOutboxHandler.d.ts +8 -0
  881. package/dist/sync/v3/localTaskRelationshipOutboxHandler.js +114 -0
  882. package/dist/sync/v3/localTaskRelationshipOutboxService.d.ts +45 -0
  883. package/dist/sync/v3/localTaskRelationshipOutboxService.js +192 -0
  884. package/dist/sync/v3/localTaskRestoreClient.d.ts +13 -0
  885. package/dist/sync/v3/localTaskRestoreClient.js +32 -0
  886. package/dist/sync/v3/localTaskRestoreOutboxHandler.d.ts +8 -0
  887. package/dist/sync/v3/localTaskRestoreOutboxHandler.js +41 -0
  888. package/dist/sync/v3/localTaskRestoreOutboxService.d.ts +56 -0
  889. package/dist/sync/v3/localTaskRestoreOutboxService.js +323 -0
  890. package/dist/sync/v3/localTaskStatusClient.d.ts +17 -0
  891. package/dist/sync/v3/localTaskStatusClient.js +35 -0
  892. package/dist/sync/v3/localTaskStatusOutboxHandler.d.ts +8 -0
  893. package/dist/sync/v3/localTaskStatusOutboxHandler.js +75 -0
  894. package/dist/sync/v3/localTaskStatusOutboxService.d.ts +53 -0
  895. package/dist/sync/v3/localTaskStatusOutboxService.js +422 -0
  896. package/dist/sync/v3/localTaxonomyCompositeOutboxService.d.ts +34 -0
  897. package/dist/sync/v3/localTaxonomyCompositeOutboxService.js +290 -0
  898. package/dist/sync/v3/localTaxonomyOutboxHandler.d.ts +9 -0
  899. package/dist/sync/v3/localTaxonomyOutboxHandler.js +106 -0
  900. package/dist/sync/v3/localTaxonomyOutboxService.d.ts +30 -0
  901. package/dist/sync/v3/localTaxonomyOutboxService.js +181 -0
  902. package/dist/sync/v3/localWorkflowRuntimeOutboxHandler.d.ts +8 -0
  903. package/dist/sync/v3/localWorkflowRuntimeOutboxHandler.js +113 -0
  904. package/dist/sync/v3/localWorkflowRuntimeOutboxService.d.ts +37 -0
  905. package/dist/sync/v3/localWorkflowRuntimeOutboxService.js +330 -0
  906. package/dist/sync/v3/localWorkspaceSyncServerOutboxDispatcher.d.ts +63 -0
  907. package/dist/sync/v3/localWorkspaceSyncServerOutboxDispatcher.js +264 -0
  908. package/dist/sync/v3/localWorkstreamOutboxHandler.d.ts +8 -0
  909. package/dist/sync/v3/localWorkstreamOutboxHandler.js +102 -0
  910. package/dist/sync/v3/localWorkstreamOutboxService.d.ts +52 -0
  911. package/dist/sync/v3/localWorkstreamOutboxService.js +581 -0
  912. package/dist/sync/v3/localWorkstreamTaskOrderOutboxHandler.d.ts +10 -0
  913. package/dist/sync/v3/localWorkstreamTaskOrderOutboxHandler.js +57 -0
  914. package/dist/sync/v3/localWorkstreamTaskOrderOutboxService.d.ts +30 -0
  915. package/dist/sync/v3/localWorkstreamTaskOrderOutboxService.js +128 -0
  916. package/dist/sync/v3/planningActivation.d.ts +13 -0
  917. package/dist/sync/v3/planningActivation.js +33 -0
  918. package/dist/sync/v3/planningAttachmentActivityValidation.d.ts +9 -0
  919. package/dist/sync/v3/planningAttachmentActivityValidation.js +87 -0
  920. package/dist/sync/v3/programScaffoldService.d.ts +143 -0
  921. package/dist/sync/v3/programScaffoldService.js +478 -0
  922. package/dist/sync/v3/syncDurabilityStore.d.ts +781 -0
  923. package/dist/sync/v3/syncDurabilityStore.js +4773 -0
  924. package/dist/sync/v3/taskActivityAuthoritativeRevision.d.ts +16 -0
  925. package/dist/sync/v3/taskActivityAuthoritativeRevision.js +67 -0
  926. package/dist/sync/v3/taskActivityJournal.d.ts +20 -0
  927. package/dist/sync/v3/taskActivityJournal.js +195 -0
  928. package/dist/sync/v3/taskAttachmentLinksActivityIdentity.d.ts +6 -0
  929. package/dist/sync/v3/taskAttachmentLinksActivityIdentity.js +14 -0
  930. package/dist/sync/v3/taskAttachmentLinksMutationService.d.ts +112 -0
  931. package/dist/sync/v3/taskAttachmentLinksMutationService.js +218 -0
  932. package/dist/sync/v3/taskChecklistActivityIdentity.d.ts +6 -0
  933. package/dist/sync/v3/taskChecklistActivityIdentity.js +14 -0
  934. package/dist/sync/v3/taskChecklistMutationService.d.ts +92 -0
  935. package/dist/sync/v3/taskChecklistMutationService.js +156 -0
  936. package/dist/sync/v3/taskCommentActivityIdentity.d.ts +7 -0
  937. package/dist/sync/v3/taskCommentActivityIdentity.js +15 -0
  938. package/dist/sync/v3/taskCommentMutationService.d.ts +150 -0
  939. package/dist/sync/v3/taskCommentMutationService.js +392 -0
  940. package/dist/sync/v3/taskCommentReconcileProvenance.d.ts +58 -0
  941. package/dist/sync/v3/taskCommentReconcileProvenance.js +170 -0
  942. package/dist/sync/v3/taskCreateActivation.d.ts +19 -0
  943. package/dist/sync/v3/taskCreateActivation.js +84 -0
  944. package/dist/sync/v3/taskCreateActivityIdentity.d.ts +7 -0
  945. package/dist/sync/v3/taskCreateActivityIdentity.js +18 -0
  946. package/dist/sync/v3/taskCreateMutationService.d.ts +103 -0
  947. package/dist/sync/v3/taskCreateMutationService.js +283 -0
  948. package/dist/sync/v3/taskDeleteActivation.d.ts +7 -0
  949. package/dist/sync/v3/taskDeleteActivation.js +14 -0
  950. package/dist/sync/v3/taskDeleteMutationService.d.ts +35 -0
  951. package/dist/sync/v3/taskDeleteMutationService.js +133 -0
  952. package/dist/sync/v3/taskLegacyRootAdoptionService.d.ts +78 -0
  953. package/dist/sync/v3/taskLegacyRootAdoptionService.js +175 -0
  954. package/dist/sync/v3/taskLifecycleActivityIdentity.d.ts +9 -0
  955. package/dist/sync/v3/taskLifecycleActivityIdentity.js +18 -0
  956. package/dist/sync/v3/taskLifecycleMutationPayload.d.ts +5 -0
  957. package/dist/sync/v3/taskLifecycleMutationPayload.js +28 -0
  958. package/dist/sync/v3/taskLifecycleMutationService.d.ts +66 -0
  959. package/dist/sync/v3/taskLifecycleMutationService.js +92 -0
  960. package/dist/sync/v3/taskMetadataActivation.d.ts +12 -0
  961. package/dist/sync/v3/taskMetadataActivation.js +38 -0
  962. package/dist/sync/v3/taskMetadataActivityIdentity.d.ts +7 -0
  963. package/dist/sync/v3/taskMetadataActivityIdentity.js +18 -0
  964. package/dist/sync/v3/taskMetadataCoexistence.d.ts +37 -0
  965. package/dist/sync/v3/taskMetadataCoexistence.js +138 -0
  966. package/dist/sync/v3/taskMetadataMutationService.d.ts +71 -0
  967. package/dist/sync/v3/taskMetadataMutationService.js +199 -0
  968. package/dist/sync/v3/taskRelationshipLegacyAdoptionService.d.ts +48 -0
  969. package/dist/sync/v3/taskRelationshipLegacyAdoptionService.js +164 -0
  970. package/dist/sync/v3/taskRelationshipMutationService.d.ts +50 -0
  971. package/dist/sync/v3/taskRelationshipMutationService.js +148 -0
  972. package/dist/sync/v3/taskRestoreMutationService.d.ts +90 -0
  973. package/dist/sync/v3/taskRestoreMutationService.js +179 -0
  974. package/dist/sync/v3/taskStatusActivation.d.ts +7 -0
  975. package/dist/sync/v3/taskStatusActivation.js +15 -0
  976. package/dist/sync/v3/taskStatusMutationService.d.ts +76 -0
  977. package/dist/sync/v3/taskStatusMutationService.js +308 -0
  978. package/dist/sync/v3/taskWorkflowMutationPayload.d.ts +4 -0
  979. package/dist/sync/v3/taskWorkflowMutationPayload.js +22 -0
  980. package/dist/sync/v3/taskWorkflowMutationService.d.ts +64 -0
  981. package/dist/sync/v3/taskWorkflowMutationService.js +102 -0
  982. package/dist/sync/v3/taxonomyCoexistence.d.ts +10 -0
  983. package/dist/sync/v3/taxonomyCoexistence.js +19 -0
  984. package/dist/sync/v3/taxonomyCompositeMutationService.d.ts +110 -0
  985. package/dist/sync/v3/taxonomyCompositeMutationService.js +304 -0
  986. package/dist/sync/v3/taxonomyMutationService.d.ts +57 -0
  987. package/dist/sync/v3/taxonomyMutationService.js +106 -0
  988. package/dist/sync/v3/taxonomyStateMutation.d.ts +22 -0
  989. package/dist/sync/v3/taxonomyStateMutation.js +49 -0
  990. package/dist/sync/v3/taxonomySyncPayload.d.ts +9 -0
  991. package/dist/sync/v3/taxonomySyncPayload.js +199 -0
  992. package/dist/sync/v3/workflowAssignmentSync.d.ts +22 -0
  993. package/dist/sync/v3/workflowAssignmentSync.js +213 -0
  994. package/dist/sync/v3/workflowRuntimeMutationService.d.ts +89 -0
  995. package/dist/sync/v3/workflowRuntimeMutationService.js +359 -0
  996. package/dist/sync/v3/workflowRuntimeOperationIdentity.d.ts +13 -0
  997. package/dist/sync/v3/workflowRuntimeOperationIdentity.js +35 -0
  998. package/dist/sync/v3/workflowRuntimeSync.d.ts +141 -0
  999. package/dist/sync/v3/workflowRuntimeSync.js +485 -0
  1000. package/dist/sync/v3/workspaceSyncJournalReader.d.ts +43 -0
  1001. package/dist/sync/v3/workspaceSyncJournalReader.js +45 -0
  1002. package/dist/sync/v3/workspaceSyncLocalOwnershipSnapshot.d.ts +28 -0
  1003. package/dist/sync/v3/workspaceSyncLocalOwnershipSnapshot.js +81 -0
  1004. package/dist/sync/v3/workspaceSyncPayloadFingerprint.d.ts +1 -0
  1005. package/dist/sync/v3/workspaceSyncPayloadFingerprint.js +5 -0
  1006. package/dist/sync/v3/workspaceSyncV2ProjectionExclusions.d.ts +16 -0
  1007. package/dist/sync/v3/workspaceSyncV2ProjectionExclusions.js +153 -0
  1008. package/dist/sync/v3/workspaceSyncV3AttachmentApplyObligationStore.d.ts +83 -0
  1009. package/dist/sync/v3/workspaceSyncV3AttachmentApplyObligationStore.js +161 -0
  1010. package/dist/sync/v3/workspaceSyncV3AttachmentAssetHydration.d.ts +16 -0
  1011. package/dist/sync/v3/workspaceSyncV3AttachmentAssetHydration.js +90 -0
  1012. package/dist/sync/v3/workspaceSyncV3CloudOperationHandler.d.ts +65 -0
  1013. package/dist/sync/v3/workspaceSyncV3CloudOperationHandler.js +357 -0
  1014. package/dist/sync/v3/workspaceSyncV3CombinedCoverage.d.ts +51 -0
  1015. package/dist/sync/v3/workspaceSyncV3CombinedCoverage.js +171 -0
  1016. package/dist/sync/v3/workspaceSyncV3CombinedFeedOrchestrator.d.ts +43 -0
  1017. package/dist/sync/v3/workspaceSyncV3CombinedFeedOrchestrator.js +541 -0
  1018. package/dist/sync/v3/workspaceSyncV3CombinedLocalApply.d.ts +50 -0
  1019. package/dist/sync/v3/workspaceSyncV3CombinedLocalApply.js +1161 -0
  1020. package/dist/sync/v3/workspaceSyncV3CombinedProjectionState.d.ts +96 -0
  1021. package/dist/sync/v3/workspaceSyncV3CombinedProjectionState.js +672 -0
  1022. package/dist/sync/v3/workspaceSyncV3CombinedRepairBaseline.d.ts +46 -0
  1023. package/dist/sync/v3/workspaceSyncV3CombinedRepairBaseline.js +621 -0
  1024. package/dist/sync/v3/workspaceSyncV3CombinedRepairMaterialization.d.ts +66 -0
  1025. package/dist/sync/v3/workspaceSyncV3CombinedRepairMaterialization.js +527 -0
  1026. package/dist/sync/v3/workspaceSyncV3CombinedRepairSnapshot.d.ts +78 -0
  1027. package/dist/sync/v3/workspaceSyncV3CombinedRepairSnapshot.js +566 -0
  1028. package/dist/sync/v3/workspaceSyncV3CombinedWireContract.d.ts +45 -0
  1029. package/dist/sync/v3/workspaceSyncV3CombinedWireContract.js +125 -0
  1030. package/dist/sync/v3/workspaceSyncV3CoverageRegistry.d.ts +13 -0
  1031. package/dist/sync/v3/workspaceSyncV3CoverageRegistry.js +34 -0
  1032. package/dist/sync/v3/workspaceSyncV3CursorEncoding.d.ts +1 -0
  1033. package/dist/sync/v3/workspaceSyncV3CursorEncoding.js +6 -0
  1034. package/dist/sync/v3/workspaceSyncV3DomainAdmission.d.ts +43 -0
  1035. package/dist/sync/v3/workspaceSyncV3DomainAdmission.js +118 -0
  1036. package/dist/sync/v3/workspaceSyncV3Feed.d.ts +95 -0
  1037. package/dist/sync/v3/workspaceSyncV3Feed.js +243 -0
  1038. package/dist/sync/v3/workspaceSyncV3FeedApply.d.ts +13 -0
  1039. package/dist/sync/v3/workspaceSyncV3FeedApply.js +67 -0
  1040. package/dist/sync/v3/workspaceSyncV3FeedClientContract.d.ts +3 -0
  1041. package/dist/sync/v3/workspaceSyncV3FeedClientContract.js +46 -0
  1042. package/dist/sync/v3/workspaceSyncV3FeedCursorKeys.d.ts +10 -0
  1043. package/dist/sync/v3/workspaceSyncV3FeedCursorKeys.js +58 -0
  1044. package/dist/sync/v3/workspaceSyncV3FeedOrchestrator.d.ts +31 -0
  1045. package/dist/sync/v3/workspaceSyncV3FeedOrchestrator.js +228 -0
  1046. package/dist/sync/v3/workspaceSyncV3FeedProfile.d.ts +32 -0
  1047. package/dist/sync/v3/workspaceSyncV3FeedProfile.js +21 -0
  1048. package/dist/sync/v3/workspaceSyncV3InitiativeLocalApply.d.ts +36 -0
  1049. package/dist/sync/v3/workspaceSyncV3InitiativeLocalApply.js +163 -0
  1050. package/dist/sync/v3/workspaceSyncV3InitiativeRepair.d.ts +33 -0
  1051. package/dist/sync/v3/workspaceSyncV3InitiativeRepair.js +118 -0
  1052. package/dist/sync/v3/workspaceSyncV3LegacyBoundaryAttestation.d.ts +10 -0
  1053. package/dist/sync/v3/workspaceSyncV3LegacyBoundaryAttestation.js +45 -0
  1054. package/dist/sync/v3/workspaceSyncV3LocalOutboxStatus.d.ts +27 -0
  1055. package/dist/sync/v3/workspaceSyncV3LocalOutboxStatus.js +83 -0
  1056. package/dist/sync/v3/workspaceSyncV3NestedCoverage.d.ts +10 -0
  1057. package/dist/sync/v3/workspaceSyncV3NestedCoverage.js +40 -0
  1058. package/dist/sync/v3/workspaceSyncV3NestedTaskApply.d.ts +83 -0
  1059. package/dist/sync/v3/workspaceSyncV3NestedTaskApply.js +325 -0
  1060. package/dist/sync/v3/workspaceSyncV3NestedTaskCodecs.d.ts +59 -0
  1061. package/dist/sync/v3/workspaceSyncV3NestedTaskCodecs.js +302 -0
  1062. package/dist/sync/v3/workspaceSyncV3NestedTaskProjection.d.ts +47 -0
  1063. package/dist/sync/v3/workspaceSyncV3NestedTaskProjection.js +329 -0
  1064. package/dist/sync/v3/workspaceSyncV3NestedTaskRepairSnapshot.d.ts +19 -0
  1065. package/dist/sync/v3/workspaceSyncV3NestedTaskRepairSnapshot.js +41 -0
  1066. package/dist/sync/v3/workspaceSyncV3NestedWireContract.d.ts +6 -0
  1067. package/dist/sync/v3/workspaceSyncV3NestedWireContract.js +16 -0
  1068. package/dist/sync/v3/workspaceSyncV3OperationProjection.d.ts +8 -0
  1069. package/dist/sync/v3/workspaceSyncV3OperationProjection.js +52 -0
  1070. package/dist/sync/v3/workspaceSyncV3OperationProtocol.d.ts +230 -0
  1071. package/dist/sync/v3/workspaceSyncV3OperationProtocol.js +1 -0
  1072. package/dist/sync/v3/workspaceSyncV3OperatorDiagnostics.d.ts +165 -0
  1073. package/dist/sync/v3/workspaceSyncV3OperatorDiagnostics.js +414 -0
  1074. package/dist/sync/v3/workspaceSyncV3OriginActor.d.ts +36 -0
  1075. package/dist/sync/v3/workspaceSyncV3OriginActor.js +61 -0
  1076. package/dist/sync/v3/workspaceSyncV3OriginAssertion.d.ts +46 -0
  1077. package/dist/sync/v3/workspaceSyncV3OriginAssertion.js +121 -0
  1078. package/dist/sync/v3/workspaceSyncV3OriginAssertionHeader.d.ts +1 -0
  1079. package/dist/sync/v3/workspaceSyncV3OriginAssertionHeader.js +1 -0
  1080. package/dist/sync/v3/workspaceSyncV3PlanningOrderCoverage.d.ts +10 -0
  1081. package/dist/sync/v3/workspaceSyncV3PlanningOrderCoverage.js +34 -0
  1082. package/dist/sync/v3/workspaceSyncV3PlanningOrderWireContract.d.ts +6 -0
  1083. package/dist/sync/v3/workspaceSyncV3PlanningOrderWireContract.js +10 -0
  1084. package/dist/sync/v3/workspaceSyncV3ProjectionState.d.ts +105 -0
  1085. package/dist/sync/v3/workspaceSyncV3ProjectionState.js +467 -0
  1086. package/dist/sync/v3/workspaceSyncV3RepairSqlBatching.d.ts +2 -0
  1087. package/dist/sync/v3/workspaceSyncV3RepairSqlBatching.js +10 -0
  1088. package/dist/sync/v3/workspaceSyncV3TaskCommentAudit.d.ts +56 -0
  1089. package/dist/sync/v3/workspaceSyncV3TaskCommentAudit.js +250 -0
  1090. package/dist/sync/v3/workspaceSyncV3TaskRelationshipProjection.d.ts +30 -0
  1091. package/dist/sync/v3/workspaceSyncV3TaskRelationshipProjection.js +142 -0
  1092. package/dist/sync/v3/workspaceSyncV3TaskRootProjection.d.ts +40 -0
  1093. package/dist/sync/v3/workspaceSyncV3TaskRootProjection.js +246 -0
  1094. package/dist/sync/v3/workspaceSyncV3TaxonomyFeedProjection.d.ts +39 -0
  1095. package/dist/sync/v3/workspaceSyncV3TaxonomyFeedProjection.js +185 -0
  1096. package/dist/sync/v3/workspaceSyncV3WorkflowCoverage.d.ts +10 -0
  1097. package/dist/sync/v3/workspaceSyncV3WorkflowCoverage.js +36 -0
  1098. package/dist/sync/v3/workspaceSyncV3WorkflowRuntimeApply.d.ts +17 -0
  1099. package/dist/sync/v3/workspaceSyncV3WorkflowRuntimeApply.js +143 -0
  1100. package/dist/sync/v3/workspaceSyncV3WorkflowRuntimeProjection.d.ts +9 -0
  1101. package/dist/sync/v3/workspaceSyncV3WorkflowRuntimeProjection.js +195 -0
  1102. package/dist/sync/v3/workspaceSyncV3WorkflowWireContract.d.ts +11 -0
  1103. package/dist/sync/v3/workspaceSyncV3WorkflowWireContract.js +12 -0
  1104. package/dist/sync/v3/workspaceSyncV3WorkstreamProjection.d.ts +4 -0
  1105. package/dist/sync/v3/workspaceSyncV3WorkstreamProjection.js +98 -0
  1106. package/dist/sync/v3/workspaceSyncV3WorkstreamTaskOrderProjection.d.ts +9 -0
  1107. package/dist/sync/v3/workspaceSyncV3WorkstreamTaskOrderProjection.js +72 -0
  1108. package/dist/sync/v3/workstreamActivityAuthoritativeRevision.d.ts +11 -0
  1109. package/dist/sync/v3/workstreamActivityAuthoritativeRevision.js +23 -0
  1110. package/dist/sync/v3/workstreamActivityIdentity.d.ts +8 -0
  1111. package/dist/sync/v3/workstreamActivityIdentity.js +14 -0
  1112. package/dist/sync/v3/workstreamCoexistence.d.ts +19 -0
  1113. package/dist/sync/v3/workstreamCoexistence.js +64 -0
  1114. package/dist/sync/v3/workstreamMutationPayload.d.ts +27 -0
  1115. package/dist/sync/v3/workstreamMutationPayload.js +147 -0
  1116. package/dist/sync/v3/workstreamMutationService.d.ts +72 -0
  1117. package/dist/sync/v3/workstreamMutationService.js +256 -0
  1118. package/dist/sync/v3/workstreamTaskOrderMutationService.d.ts +55 -0
  1119. package/dist/sync/v3/workstreamTaskOrderMutationService.js +110 -0
  1120. package/dist/sync/v3/workstreamTaskOrderSync.d.ts +14 -0
  1121. package/dist/sync/v3/workstreamTaskOrderSync.js +25 -0
  1122. package/dist/sync/workspaceContentManifest.d.ts +86 -0
  1123. package/dist/sync/workspaceContentManifest.js +123 -0
  1124. package/dist/sync/workspacePullFeed.d.ts +191 -2
  1125. package/dist/sync/workspacePullFeed.js +523 -135
  1126. package/dist/sync/workspacePushPreparedPlan.d.ts +21 -0
  1127. package/dist/sync/workspacePushPreparedPlan.js +1 -0
  1128. package/dist/sync/workspaceRepair.d.ts +17 -25
  1129. package/dist/sync/workspaceRepair.js +348 -25
  1130. package/dist/sync/workspaceSyncContentDecryption.d.ts +6 -0
  1131. package/dist/sync/workspaceSyncContentDecryption.js +11 -0
  1132. package/dist/sync/workspaceSyncModel.d.ts +227 -5
  1133. package/dist/sync/workspaceSyncModel.js +398 -37
  1134. package/dist/sync/workspaceSyncSnapshotProjection.d.ts +11 -0
  1135. package/dist/sync/workspaceSyncSnapshotProjection.js +101 -0
  1136. package/dist/sync/workspaceSyncState.d.ts +13 -0
  1137. package/dist/sync/workspaceSyncState.js +36 -0
  1138. package/dist/sync/workspaceSyncV2SnapshotBuilder.d.ts +106 -0
  1139. package/dist/sync/workspaceSyncV2SnapshotBuilder.js +193 -0
  1140. package/dist/types.d.ts +31 -15
  1141. package/dist/types.js +1 -3
  1142. package/dist/ui/ai-profile-clients/amazon-nova.svg +1 -0
  1143. package/dist/ui/ai-profile-clients/antigravity.png +0 -0
  1144. package/dist/ui/ai-profile-clients/chatgpt.svg +10 -0
  1145. package/dist/ui/ai-profile-clients/claude-chat.svg +1 -0
  1146. package/dist/ui/ai-profile-clients/claude-code.svg +15 -0
  1147. package/dist/ui/ai-profile-clients/cline-app-icon-light.png +0 -0
  1148. package/dist/ui/ai-profile-clients/cline.svg +16 -0
  1149. package/dist/ui/ai-profile-clients/codex.svg +1 -0
  1150. package/dist/ui/ai-profile-clients/copilot.png +0 -0
  1151. package/dist/ui/ai-profile-clients/cursor.svg +1 -0
  1152. package/dist/ui/ai-profile-clients/deepseek.svg +1 -0
  1153. package/dist/ui/ai-profile-clients/gemini-cli-icon.png +0 -0
  1154. package/dist/ui/ai-profile-clients/gemini.svg +10 -0
  1155. package/dist/ui/ai-profile-clients/grok.svg +31 -0
  1156. package/dist/ui/ai-profile-clients/kiro.svg +11 -0
  1157. package/dist/ui/ai-profile-clients/llama.svg +1 -0
  1158. package/dist/ui/ai-profile-clients/mistral.svg +1 -0
  1159. package/dist/ui/ai-profile-clients/ms_copilot.jpeg +0 -0
  1160. package/dist/ui/ai-profile-clients/openclaw.png +0 -0
  1161. package/dist/ui/ai-profile-clients/perplexity.svg +1 -0
  1162. package/dist/ui/ai-profile-clients/vscode.svg +41 -0
  1163. package/dist/ui/ai-profile-clients/windsurf.svg +11 -0
  1164. package/dist/ui/assets/AiIdentityRosterCard-MZs7lVED.js +1 -0
  1165. package/dist/ui/assets/AiProfilesModule-C3i0LOxe.js +1 -0
  1166. package/dist/ui/assets/AnnotatedAttachmentWorkspace-CBRZ8rca.css +1 -0
  1167. package/dist/ui/assets/AnnotatedAttachmentWorkspace-DVZk5Tln.js +3 -0
  1168. package/dist/ui/assets/AssetTraySortControl-B9k5caQW.css +1 -0
  1169. package/dist/ui/assets/AssetTraySortControl-Kf1pelSy.js +1 -0
  1170. package/dist/ui/assets/ContextAttachmentManager-B8boOs6Q.js +3 -0
  1171. package/dist/ui/assets/DocumentWorkspace-BIBGBfd7.css +1 -0
  1172. package/dist/ui/assets/DocumentWorkspace-DXH4XUsB.js +261 -0
  1173. package/dist/ui/assets/EntityActivityTimeline-BfJbZRdl.css +1 -0
  1174. package/dist/ui/assets/EntityActivityTimeline-BtSTq0ON.js +1 -0
  1175. package/dist/ui/assets/PlanningModule-BPVyEa-f.js +1 -0
  1176. package/dist/ui/assets/PlanningModule-CoIR9hbV.css +1 -0
  1177. package/dist/ui/assets/PlansPage-C2nkK2Bp.css +1 -0
  1178. package/dist/ui/assets/PlansPage-ChqgxALc.js +1 -0
  1179. package/dist/ui/assets/TaskContextUpload-CB3ol0sN.js +1 -0
  1180. package/dist/ui/assets/TaskContextUpload-qmBeUw3u.css +1 -0
  1181. package/dist/ui/assets/TaskSettings-g4ECKNOz.js +12 -0
  1182. package/dist/ui/assets/TaskforceAgentsModule-BazdUwxZ.js +21 -0
  1183. package/dist/ui/assets/TaskforceAgentsModule-D6IC0S7Q.css +1 -0
  1184. package/dist/ui/assets/WorkflowManagerModule-DF10XENz.css +1 -0
  1185. package/dist/ui/assets/WorkflowManagerModule-DWFspC-o.js +1 -0
  1186. package/dist/ui/assets/antigravity-DRKQga2U.png +0 -0
  1187. package/dist/ui/assets/cursor-BM_3k4Y4.svg +1 -0
  1188. package/dist/ui/assets/gemini-cli-icon-dBAVjCcn.png +0 -0
  1189. package/dist/ui/assets/grok-BuodbWaG.svg +31 -0
  1190. package/dist/ui/assets/index-BUplSsv_.js +7 -0
  1191. package/dist/ui/assets/index-gz2EXuoK.css +1 -0
  1192. package/dist/ui/assets/{vendor-dnd-DRzYolkg.js → vendor-dnd-CJ-AjP-Y.js} +1 -1
  1193. package/dist/ui/assets/{vendor-icons-CLnehDTw.js → vendor-icons-BkFLXavV.js} +1 -1
  1194. package/dist/ui/assets/{vendor-markdown-BUxTU7dS.js → vendor-markdown-_lhNCyq-.js} +9 -9
  1195. package/dist/ui/assets/vendor-router-AqJMU8Lz.js +3 -0
  1196. package/dist/ui/assets/vscode-C_7wk1WI.svg +41 -0
  1197. package/dist/ui/branding/logos/logo_dark_bg.png +0 -0
  1198. package/dist/ui/branding/logos/logo_favicon_dark.png +0 -0
  1199. package/dist/ui/branding/logos/logo_favicon_dark.svg +56 -0
  1200. package/dist/ui/branding/logos/logo_favicon_light.png +0 -0
  1201. package/dist/ui/branding/logos/logo_light_bg.png +0 -0
  1202. package/dist/ui/images/Taskforce_Van.webp +0 -0
  1203. package/dist/ui/index.html +6 -6
  1204. package/dist/update/uiUpdateService.d.ts +43 -0
  1205. package/dist/update/uiUpdateService.js +149 -0
  1206. package/dist/update/updateCli.d.ts +15 -0
  1207. package/dist/update/updateCli.js +76 -0
  1208. package/dist/update/updateExecutor.d.ts +40 -0
  1209. package/dist/update/updateExecutor.js +474 -0
  1210. package/dist/update/updateStatus.d.ts +83 -0
  1211. package/dist/update/updateStatus.js +703 -0
  1212. package/dist/utils/aiProfileAvatarPaths.d.ts +14 -0
  1213. package/dist/utils/aiProfileAvatarPaths.js +52 -0
  1214. package/dist/utils/aiProfileDefaultLogo.d.ts +7 -0
  1215. package/dist/utils/aiProfileDefaultLogo.js +84 -0
  1216. package/dist/utils/aiProfileEvents.d.ts +9 -1
  1217. package/dist/utils/annotatedAttachments.d.ts +8 -0
  1218. package/dist/utils/annotatedAttachments.js +17 -1
  1219. package/dist/utils/assetTraySorting.d.ts +25 -0
  1220. package/dist/utils/assetTraySorting.js +83 -0
  1221. package/dist/utils/assignees.d.ts +5 -0
  1222. package/dist/utils/assignees.js +14 -9
  1223. package/dist/utils/authLogin.d.ts +10 -0
  1224. package/dist/utils/authLogin.js +8 -0
  1225. package/dist/utils/authSessionEvents.d.ts +2 -0
  1226. package/dist/utils/authSessionEvents.js +6 -0
  1227. package/dist/utils/avatarUpload.js +5 -5
  1228. package/dist/utils/canonicalReferenceAttachments.d.ts +12 -0
  1229. package/dist/utils/canonicalReferenceAttachments.js +42 -0
  1230. package/dist/utils/cloudAssetDisplay.d.ts +2 -0
  1231. package/dist/utils/cloudAssetDisplay.js +8 -0
  1232. package/dist/utils/constants.d.ts +4 -11
  1233. package/dist/utils/constants.js +6 -65
  1234. package/dist/utils/contextAttachmentPreview.d.ts +11 -0
  1235. package/dist/utils/contextAttachmentPreview.js +8 -0
  1236. package/dist/utils/contextAttachmentUpload.d.ts +10 -0
  1237. package/dist/utils/contextAttachmentUpload.js +151 -0
  1238. package/dist/utils/contextFiles.d.ts +1 -1
  1239. package/dist/utils/contextFiles.js +4 -4
  1240. package/dist/utils/documentNames.js +6 -4
  1241. package/dist/utils/entityReferences.d.ts +14 -0
  1242. package/dist/utils/entityReferences.js +21 -0
  1243. package/dist/utils/httpSetCookie.d.ts +3 -0
  1244. package/dist/utils/httpSetCookie.js +22 -0
  1245. package/dist/utils/imageNoteStoragePaths.d.ts +3 -0
  1246. package/dist/utils/imageNoteStoragePaths.js +19 -0
  1247. package/dist/utils/imageReferences.d.ts +6 -0
  1248. package/dist/utils/imageReferences.js +1 -0
  1249. package/dist/utils/planningArchiveOrchestrator.d.ts +23 -0
  1250. package/dist/utils/planningArchiveOrchestrator.js +37 -0
  1251. package/dist/utils/planningArchivePresentation.d.ts +20 -0
  1252. package/dist/utils/planningArchivePresentation.js +23 -0
  1253. package/dist/utils/planningArchiveReadiness.d.ts +26 -0
  1254. package/dist/utils/planningArchiveReadiness.js +30 -0
  1255. package/dist/utils/planningFavorites.d.ts +7 -0
  1256. package/dist/utils/planningFavorites.js +34 -0
  1257. package/dist/utils/syncEventPresentation.js +53 -0
  1258. package/dist/utils/syncStatusPresentation.d.ts +25 -0
  1259. package/dist/utils/syncStatusPresentation.js +86 -5
  1260. package/dist/utils/taskActivity.d.ts +9 -2
  1261. package/dist/utils/taskActivity.js +61 -0
  1262. package/dist/utils/taskDraftDefaults.d.ts +0 -8
  1263. package/dist/utils/taskDraftDefaults.js +0 -4
  1264. package/dist/utils/taskEvents.d.ts +11 -0
  1265. package/dist/utils/taskEvents.js +6 -0
  1266. package/dist/utils/taskHeaderQuickFilter.d.ts +14 -0
  1267. package/dist/utils/taskHeaderQuickFilter.js +32 -0
  1268. package/dist/utils/taskInvalidation.d.ts +23 -0
  1269. package/dist/utils/taskInvalidation.js +67 -0
  1270. package/dist/utils/taskNormalization.d.ts +2 -1
  1271. package/dist/utils/taskNormalization.js +44 -18
  1272. package/dist/utils/taskReferences.d.ts +16 -0
  1273. package/dist/utils/taskReferences.js +63 -0
  1274. package/dist/utils/taskforceAgentEvents.d.ts +8 -0
  1275. package/dist/utils/taskforceAgentEvents.js +6 -0
  1276. package/dist/utils/taskforceAgentSkillEvents.d.ts +7 -0
  1277. package/dist/utils/taskforceAgentSkillEvents.js +8 -0
  1278. package/dist/utils/uiNotice.d.ts +3 -0
  1279. package/dist/utils/uiNotice.js +1 -1
  1280. package/dist/utils/workspaceResourceEvents.d.ts +7 -0
  1281. package/dist/utils/workspaceResourceEvents.js +6 -0
  1282. package/dist/utils/workspaceSyncPresentation.d.ts +24 -0
  1283. package/dist/utils/workspaceSyncPresentation.js +243 -6
  1284. package/package.json +74 -21
  1285. package/dist/components/features/AgentsModule.d.ts +0 -18
  1286. package/dist/components/features/AgentsModule.js +0 -479
  1287. package/dist/components/features/InitiativesModule.d.ts +0 -22
  1288. package/dist/components/features/InitiativesModule.js +0 -33
  1289. package/dist/components/features/WorkflowsModule.d.ts +0 -27
  1290. package/dist/components/features/WorkflowsModule.js +0 -21
  1291. package/dist/components/features/settings/WorkflowEditor.d.ts +0 -15
  1292. package/dist/components/features/settings/WorkflowEditor.js +0 -245
  1293. package/dist/components/views/panels/DocumentFilterToolbar.d.ts +0 -10
  1294. package/dist/components/views/panels/DocumentFilterToolbar.js +0 -7
  1295. package/dist/components/views/standalone/modals/AccountHubModal.d.ts +0 -61
  1296. package/dist/components/views/standalone/modals/AccountHubModal.js +0 -108
  1297. package/dist/components/views/standalone/modals/EditProfileModal.d.ts +0 -19
  1298. package/dist/components/views/standalone/modals/EditProfileModal.js +0 -11
  1299. package/dist/hooks/ui/useResourceExport.d.ts +0 -21
  1300. package/dist/hooks/ui/useResourceExport.js +0 -87
  1301. package/dist/hooks/ui/useWorkflowTemplates.d.ts +0 -37
  1302. package/dist/hooks/ui/useWorkflowTemplates.js +0 -116
  1303. package/dist/mcp/clientProfileDefaults.d.ts +0 -12
  1304. package/dist/mcp/clientProfileDefaults.js +0 -41
  1305. package/dist/resources/templates/WORKFLOW_V2_POLICY.md +0 -55
  1306. package/dist/resources/templates/environments/aider.yaml +0 -14
  1307. package/dist/resources/templates/environments/antigravity.yaml +0 -10
  1308. package/dist/resources/templates/environments/claude.yaml +0 -10
  1309. package/dist/resources/templates/environments/cline.yaml +0 -10
  1310. package/dist/resources/templates/environments/codex.yaml +0 -13
  1311. package/dist/resources/templates/environments/copilot.yaml +0 -10
  1312. package/dist/resources/templates/environments/cursor.yaml +0 -9
  1313. package/dist/resources/templates/environments/gemini.yaml +0 -9
  1314. package/dist/resources/templates/environments/windsurf.yaml +0 -10
  1315. package/dist/resources/templates/workflow-sources/README.md +0 -9
  1316. package/dist/resources/templates/workflow-sources/workflowDocs.mjs +0 -530
  1317. package/dist/resources/templates/workflow-sources/workflowEditorOverrides.json +0 -1
  1318. package/dist/resources/templates/workflows/collaborate.yaml +0 -109
  1319. package/dist/resources/templates/workflows/do.yaml +0 -87
  1320. package/dist/resources/templates/workflows/evaluate.yaml +0 -116
  1321. package/dist/resources/templates/workflows/execute.yaml +0 -156
  1322. package/dist/resources/templates/workflows/plan.yaml +0 -118
  1323. package/dist/resources/templates/workflows/review.yaml +0 -114
  1324. package/dist/services/formatTransformers.d.ts +0 -29
  1325. package/dist/services/formatTransformers.js +0 -56
  1326. package/dist/services/templateEngine.d.ts +0 -46
  1327. package/dist/services/templateEngine.js +0 -148
  1328. package/dist/shared/workflowDefaults.d.ts +0 -9
  1329. package/dist/shared/workflowDefaults.js +0 -11
  1330. package/dist/ui/agent-logos/Gemini CLI.jpeg +0 -0
  1331. package/dist/ui/agent-logos/antigravity.jpeg +0 -0
  1332. package/dist/ui/agent-logos/chatgpt.png +0 -0
  1333. package/dist/ui/agent-logos/claude-code.jpeg +0 -0
  1334. package/dist/ui/agent-logos/codex.jpeg +0 -0
  1335. package/dist/ui/agent-logos/cursor.png +0 -0
  1336. package/dist/ui/agent-logos/openclaw.jpeg +0 -0
  1337. package/dist/ui/agent-logos/windsurf.png +0 -0
  1338. package/dist/ui/assets/AgentsModule-C4LcqhcZ.js +0 -1
  1339. package/dist/ui/assets/AnnotatedAttachmentWorkspace-B-Dq22d2.js +0 -3
  1340. package/dist/ui/assets/AnnotatedAttachmentWorkspace-BVKew-mH.css +0 -1
  1341. package/dist/ui/assets/ContextAttachmentManager-DsXPTvi-.js +0 -3
  1342. package/dist/ui/assets/DocumentWorkspace-CxA1wO3U.js +0 -252
  1343. package/dist/ui/assets/DocumentWorkspace-D4rJKXzd.css +0 -1
  1344. package/dist/ui/assets/EntityActivityTimeline-B8nSe8l3.js +0 -1
  1345. package/dist/ui/assets/EntityActivityTimeline-DyqvvhuF.css +0 -1
  1346. package/dist/ui/assets/InitiativesModule-VY95v38E.js +0 -1
  1347. package/dist/ui/assets/PlansPage-CQbKDv1a.js +0 -1
  1348. package/dist/ui/assets/PlansPage-DeAzWYTb.css +0 -1
  1349. package/dist/ui/assets/TaskContextUpload-DvDlNpHC.js +0 -1
  1350. package/dist/ui/assets/TaskSettings-CUWbYYtP.js +0 -12
  1351. package/dist/ui/assets/WorkflowsModule-CgM3Jako.js +0 -5
  1352. package/dist/ui/assets/documentReferences-Do9YjrS3.js +0 -1
  1353. package/dist/ui/assets/index--mh3pktj.js +0 -5
  1354. package/dist/ui/assets/index-BawaaEXS.css +0 -1
  1355. package/dist/ui/assets/vendor-router-BbWMxlnO.js +0 -3
  1356. package/dist/ui/branding/logos/logo_black_01.png +0 -0
  1357. package/dist/ui/branding/logos/logo_black_02.png +0 -0
  1358. package/dist/ui/branding/logos/logo_white_01.png +0 -0
  1359. package/dist/ui/branding/logos/logo_white_02.png +0 -0
  1360. package/scripts/generate-workflow-templates.mjs +0 -134
  1361. package/src/resources/templates/WORKFLOW_V2_POLICY.md +0 -55
  1362. package/src/resources/templates/environments/aider.yaml +0 -14
  1363. package/src/resources/templates/environments/antigravity.yaml +0 -10
  1364. package/src/resources/templates/environments/claude.yaml +0 -10
  1365. package/src/resources/templates/environments/cline.yaml +0 -10
  1366. package/src/resources/templates/environments/codex.yaml +0 -13
  1367. package/src/resources/templates/environments/copilot.yaml +0 -10
  1368. package/src/resources/templates/environments/cursor.yaml +0 -9
  1369. package/src/resources/templates/environments/gemini.yaml +0 -9
  1370. package/src/resources/templates/environments/windsurf.yaml +0 -10
  1371. package/src/resources/templates/workflow-sources/README.md +0 -9
  1372. package/src/resources/templates/workflow-sources/workflowDocs.mjs +0 -530
  1373. package/src/resources/templates/workflow-sources/workflowEditorOverrides.json +0 -1
  1374. package/src/resources/templates/workflows/collaborate.yaml +0 -109
  1375. package/src/resources/templates/workflows/do.yaml +0 -87
  1376. package/src/resources/templates/workflows/evaluate.yaml +0 -116
  1377. package/src/resources/templates/workflows/execute.yaml +0 -156
  1378. package/src/resources/templates/workflows/plan.yaml +0 -118
  1379. package/src/resources/templates/workflows/review.yaml +0 -114
  1380. /package/dist/ui/branding/logos/{logo_dark.svg → logo_dark_no_bg.svg} +0 -0
  1381. /package/dist/ui/branding/logos/{logo_favicon.svg → logo_favicon_light.svg} +0 -0
  1382. /package/dist/ui/branding/logos/{logo_light.svg → logo_light_no_bg.svg} +0 -0
@@ -0,0 +1,1436 @@
1
+ import { randomUUID } from 'crypto';
2
+ import { assertSynchronousTransactionResult, } from '../../storage/databaseAdapter.js';
3
+ import { validateWorkspaceSyncEngineTransferCompletionGroup, } from '../engine/workspaceSyncEngineTransferCompletion.js';
4
+ import { canonicalWorkspaceSyncJson } from '../v3/canonicalWorkspaceSyncJson.js';
5
+ import { LOCAL_SYNC_COORDINATOR_ID } from './localSyncCoordinatorTypes.js';
6
+ import { LocalSyncExecutionPermitError, } from './localSyncExecutionPermitTypes.js';
7
+ const TERMINAL_STATES = [
8
+ 'released',
9
+ 'abandoned-reconcile-required',
10
+ 'abandoned-clean',
11
+ ];
12
+ const APPLYING_OPERATION_CLASSES = new Set([
13
+ 'pull',
14
+ 'repair',
15
+ ]);
16
+ const NON_APPLYING_OPERATION_CLASSES = new Set([
17
+ 'handshake',
18
+ 'bootstrap',
19
+ 'push',
20
+ ]);
21
+ const MAX_DRAIN_INSPECTION_LIMIT = 500;
22
+ export const LOCAL_SYNC_PERMIT_RETENTION_MIN_AGE_MS = 7 * 24 * 60 * 60 * 1000;
23
+ export const LOCAL_SYNC_PERMIT_RETENTION_SOFT_LIMIT = 1_000;
24
+ export const LOCAL_SYNC_PERMIT_RETENTION_HARD_LIMIT = 10_000;
25
+ export const LOCAL_SYNC_OBLIGATION_RETENTION_HARD_LIMIT = 2_000;
26
+ export const LOCAL_SYNC_PERMIT_RETENTION_DELETE_BATCH = 250;
27
+ export const LOCAL_SYNC_PERMIT_RETENTION_SWEEP_LIMIT = 5_000;
28
+ const LOCAL_SYNC_PERMIT_RETENTION_CHECK_INTERVAL_MS = 60 * 60 * 1000;
29
+ function mapPermit(row) {
30
+ return {
31
+ permitId: String(row.permit_id || ''),
32
+ workspaceId: String(row.workspace_id || ''),
33
+ coordinatorGeneration: Number(row.coordinator_generation || 0),
34
+ serverInstanceId: String(row.server_instance_id || ''),
35
+ ownerMode: row.owner_mode || 'browser-gateway',
36
+ operationClass: row.operation_class || 'pull',
37
+ operationIdentity: row.operation_identity || null,
38
+ lastCommittedCursor: row.last_committed_cursor_json
39
+ ? JSON.parse(row.last_committed_cursor_json)
40
+ : null,
41
+ state: row.state || 'abandoned-reconcile-required',
42
+ upstreamDisposition: row.upstream_disposition || null,
43
+ issuedAt: String(row.issued_at || ''),
44
+ deadlineAt: String(row.deadline_at || ''),
45
+ lastTransitionAt: String(row.last_transition_at || ''),
46
+ completedAt: row.completed_at || null,
47
+ errorCode: row.error_code || null,
48
+ };
49
+ }
50
+ function mapObligation(row) {
51
+ return {
52
+ obligationId: String(row.obligation_id || ''),
53
+ permitId: String(row.permit_id || ''),
54
+ workspaceId: String(row.workspace_id || ''),
55
+ operationClass: row.operation_class || 'pull',
56
+ operationIdentity: row.operation_identity || null,
57
+ upstreamDisposition: row.upstream_disposition || 'unknown',
58
+ lastCommittedCursor: row.last_committed_cursor_json
59
+ ? JSON.parse(row.last_committed_cursor_json)
60
+ : null,
61
+ requiredAction: row.required_action || 'refetch-from-committed-cursor',
62
+ createdAt: String(row.created_at || ''),
63
+ resolvedAt: row.resolved_at || null,
64
+ resolvedBoundary: row.resolved_boundary_json
65
+ ? JSON.parse(row.resolved_boundary_json)
66
+ : null,
67
+ };
68
+ }
69
+ export class LocalSyncExecutionPermitStore {
70
+ db;
71
+ now;
72
+ createId;
73
+ invariantBlockedWorkspaces = new Set();
74
+ lastRetentionCheckAtMs = Number.NEGATIVE_INFINITY;
75
+ constructor(db, now = () => new Date().toISOString(), createId = randomUUID) {
76
+ this.db = db;
77
+ this.now = now;
78
+ this.createId = createId;
79
+ }
80
+ issue(input) {
81
+ return this.issueForOwner('browser-gateway', input);
82
+ }
83
+ issueServer(input) {
84
+ return this.issueForOwner('server', input);
85
+ }
86
+ issueForOwner(ownerMode, input) {
87
+ this.assertNoLocalCommitInvariant(input.workspaceId);
88
+ this.maybePruneTerminalHistory();
89
+ return this.db.transaction(() => {
90
+ if (input.operationIdentity
91
+ && input.operationClass !== 'push'
92
+ && input.operationClass !== 'v3-dispatch') {
93
+ throw new LocalSyncExecutionPermitError(`Execution permits for ${input.operationClass} cannot carry a replay identity.`, 'SYNC_COORDINATOR_PERMIT_IDENTITY_CONFLICT');
94
+ }
95
+ const permitId = input.permitId || this.createId();
96
+ const existing = this.read(permitId);
97
+ if (existing) {
98
+ if (existing.workspaceId !== input.workspaceId
99
+ || existing.coordinatorGeneration !== input.coordinatorGeneration
100
+ || existing.serverInstanceId !== input.serverInstanceId
101
+ || existing.ownerMode !== ownerMode
102
+ || existing.operationClass !== input.operationClass
103
+ || existing.operationIdentity !== (input.operationIdentity || null)
104
+ || JSON.stringify(existing.lastCommittedCursor)
105
+ !== JSON.stringify(input.lastCommittedCursor ?? null)
106
+ || existing.deadlineAt !== input.deadlineAt) {
107
+ throw new LocalSyncExecutionPermitError(`Execution permit ${permitId} was reused with different input.`, 'SYNC_COORDINATOR_PERMIT_IDENTITY_CONFLICT');
108
+ }
109
+ return existing;
110
+ }
111
+ const deadlineMs = Date.parse(input.deadlineAt);
112
+ if (!Number.isFinite(deadlineMs) || deadlineMs <= Date.parse(this.now())) {
113
+ throw new LocalSyncExecutionPermitError(`Execution permit ${permitId} has an invalid or expired deadline.`, 'SYNC_COORDINATOR_PERMIT_EXPIRED');
114
+ }
115
+ const state = this.db.prepare(`
116
+ SELECT active_workspace_id, coordinator_generation, ownership_mode, transition_state
117
+ FROM local_sync_coordinator_state
118
+ WHERE coordinator_id = ?
119
+ `).get(LOCAL_SYNC_COORDINATOR_ID);
120
+ if (!state
121
+ || Number(state.coordinator_generation || 0) !== input.coordinatorGeneration) {
122
+ throw new LocalSyncExecutionPermitError('The coordinator generation changed before the execution permit was issued.', 'SYNC_COORDINATOR_STALE_GENERATION');
123
+ }
124
+ if (String(state.active_workspace_id || '') !== input.workspaceId) {
125
+ throw new LocalSyncExecutionPermitError(`Workspace ${input.workspaceId} is not the active local sync workspace.`, 'SYNC_COORDINATOR_INACTIVE_WORKSPACE');
126
+ }
127
+ if (state.ownership_mode !== ownerMode || state.transition_state !== 'idle') {
128
+ throw new LocalSyncExecutionPermitError(`${ownerMode} execution permits are not available in the current coordinator mode.`, 'SYNC_COORDINATOR_PERMITS_DISABLED');
129
+ }
130
+ const at = this.now();
131
+ this.db.prepare(`
132
+ INSERT INTO local_sync_execution_permits (
133
+ permit_id, workspace_id, coordinator_generation, server_instance_id,
134
+ owner_mode, operation_class, operation_identity, state, upstream_disposition,
135
+ last_committed_cursor_json, issued_at, deadline_at, last_transition_at
136
+ ) VALUES (?, ?, ?, ?, ?, ?, ?, 'issued-idle', 'not-started', ?, ?, ?, ?)
137
+ `).run(permitId, input.workspaceId, input.coordinatorGeneration, input.serverInstanceId, ownerMode, input.operationClass, input.operationIdentity || null, input.lastCommittedCursor === undefined || input.lastCommittedCursor === null
138
+ ? null
139
+ : JSON.stringify(input.lastCommittedCursor), at, input.deadlineAt, at);
140
+ return this.read(permitId);
141
+ })();
142
+ }
143
+ read(permitId) {
144
+ const row = this.db.prepare(`
145
+ SELECT * FROM local_sync_execution_permits WHERE permit_id = ?
146
+ `).get(permitId);
147
+ return row ? mapPermit(row) : null;
148
+ }
149
+ summarize(workspaceId) {
150
+ const rows = this.db.prepare(`
151
+ SELECT state, COUNT(*) AS count
152
+ FROM local_sync_execution_permits
153
+ WHERE workspace_id = ?
154
+ AND state NOT IN ('released', 'abandoned-clean', 'abandoned-reconcile-required')
155
+ GROUP BY state
156
+ `).all(workspaceId);
157
+ const byState = {};
158
+ let active = 0;
159
+ for (const row of rows) {
160
+ if (!row.state)
161
+ continue;
162
+ const count = Number(row.count || 0);
163
+ byState[row.state] = count;
164
+ active += count;
165
+ }
166
+ const obligation = this.db.prepare(`
167
+ SELECT COUNT(*) AS count
168
+ FROM local_sync_recovery_obligations
169
+ WHERE workspace_id = ? AND resolved_at IS NULL
170
+ `).get(workspaceId);
171
+ const terminalHistory = this.db.prepare(`
172
+ SELECT COUNT(*) AS count, MIN(completed_at) AS oldest_at
173
+ FROM local_sync_execution_permits
174
+ WHERE workspace_id = ?
175
+ AND state IN ('released', 'abandoned-clean', 'abandoned-reconcile-required')
176
+ AND completed_at IS NOT NULL
177
+ `).get(workspaceId);
178
+ const resolvedHistory = this.db.prepare(`
179
+ SELECT COUNT(*) AS count, MIN(resolved_at) AS oldest_at
180
+ FROM local_sync_recovery_obligations
181
+ WHERE workspace_id = ? AND resolved_at IS NOT NULL
182
+ `).get(workspaceId);
183
+ return {
184
+ active,
185
+ byState,
186
+ recoveryObligations: Number(obligation?.count || 0),
187
+ localCommitInvariantViolation: this.invariantBlockedWorkspaces.has(workspaceId),
188
+ history: {
189
+ terminalPermits: Number(terminalHistory?.count || 0),
190
+ oldestTerminalPermitAt: terminalHistory?.oldest_at || null,
191
+ resolvedRecoveryObligations: Number(resolvedHistory?.count || 0),
192
+ oldestResolvedRecoveryObligationAt: resolvedHistory?.oldest_at || null,
193
+ },
194
+ };
195
+ }
196
+ inspectGenerationDrain(input) {
197
+ const limit = this.normalizeDrainLimit(input.limit);
198
+ return this.db.transaction(() => {
199
+ const rows = this.db.prepare(`
200
+ SELECT state, COUNT(*) AS count
201
+ FROM local_sync_execution_permits
202
+ WHERE workspace_id = ?
203
+ AND coordinator_generation = ?
204
+ AND state NOT IN ('released', 'abandoned-clean', 'abandoned-reconcile-required')
205
+ GROUP BY state
206
+ `).all(input.workspaceId, input.coordinatorGeneration);
207
+ const byState = {};
208
+ let active = 0;
209
+ for (const row of rows) {
210
+ if (!row.state)
211
+ continue;
212
+ const count = Number(row.count || 0);
213
+ byState[row.state] = count;
214
+ active += count;
215
+ }
216
+ const permits = this.db.prepare(`
217
+ SELECT *
218
+ FROM local_sync_execution_permits
219
+ WHERE workspace_id = ?
220
+ AND coordinator_generation = ?
221
+ AND state NOT IN ('released', 'abandoned-clean', 'abandoned-reconcile-required')
222
+ ORDER BY issued_at ASC, permit_id ASC
223
+ LIMIT ?
224
+ `).all(input.workspaceId, input.coordinatorGeneration, limit).map(mapPermit);
225
+ const cleanEligible = this.db.prepare(`
226
+ SELECT COUNT(*) AS count
227
+ FROM local_sync_execution_permits
228
+ WHERE workspace_id = ?
229
+ AND coordinator_generation = ?
230
+ AND state = 'issued-idle'
231
+ AND upstream_disposition = 'not-started'
232
+ `).get(input.workspaceId, input.coordinatorGeneration);
233
+ const obligations = this.db.prepare(`
234
+ SELECT COUNT(*) AS count
235
+ FROM local_sync_recovery_obligations AS obligation
236
+ INNER JOIN local_sync_execution_permits AS permit
237
+ ON permit.permit_id = obligation.permit_id
238
+ WHERE permit.workspace_id = ?
239
+ AND permit.coordinator_generation = ?
240
+ AND obligation.resolved_at IS NULL
241
+ `).get(input.workspaceId, input.coordinatorGeneration);
242
+ return {
243
+ workspaceId: input.workspaceId,
244
+ coordinatorGeneration: input.coordinatorGeneration,
245
+ active,
246
+ byState,
247
+ permits,
248
+ truncated: active > permits.length,
249
+ cleanAbandonEligible: Number(cleanEligible?.count || 0),
250
+ recoveryObligations: Number(obligations?.count || 0),
251
+ };
252
+ })();
253
+ }
254
+ abandonNeverStartedForDrain(input) {
255
+ const limit = this.normalizeDrainLimit(input.limit);
256
+ return this.db.transaction(() => {
257
+ const rows = this.db.prepare(`
258
+ SELECT permit_id
259
+ FROM local_sync_execution_permits
260
+ WHERE workspace_id = ?
261
+ AND coordinator_generation = ?
262
+ AND state = 'issued-idle'
263
+ AND upstream_disposition = 'not-started'
264
+ ORDER BY issued_at ASC, permit_id ASC
265
+ LIMIT ?
266
+ `).all(input.workspaceId, input.coordinatorGeneration, limit);
267
+ const abandonedPermitIds = [];
268
+ const at = this.now();
269
+ for (const row of rows) {
270
+ const permitId = String(row.permit_id || '');
271
+ if (!permitId)
272
+ continue;
273
+ const result = this.db.prepare(`
274
+ UPDATE local_sync_execution_permits
275
+ SET state = 'abandoned-clean',
276
+ upstream_disposition = 'not-started',
277
+ last_transition_at = ?,
278
+ completed_at = ?,
279
+ error_code = ?
280
+ WHERE permit_id = ?
281
+ AND workspace_id = ?
282
+ AND coordinator_generation = ?
283
+ AND state = 'issued-idle'
284
+ AND upstream_disposition = 'not-started'
285
+ `).run(at, at, input.errorCode || 'SYNC_COORDINATOR_PERMIT_DRAINED_NOT_STARTED', permitId, input.workspaceId, input.coordinatorGeneration);
286
+ if (Number(result?.changes || 0) === 1) {
287
+ abandonedPermitIds.push(permitId);
288
+ }
289
+ }
290
+ const remaining = this.db.prepare(`
291
+ SELECT COUNT(*) AS count
292
+ FROM local_sync_execution_permits
293
+ WHERE workspace_id = ?
294
+ AND coordinator_generation = ?
295
+ AND state = 'issued-idle'
296
+ AND upstream_disposition = 'not-started'
297
+ `).get(input.workspaceId, input.coordinatorGeneration);
298
+ return {
299
+ abandonedPermitIds,
300
+ remainingEligible: Number(remaining?.count || 0),
301
+ };
302
+ })();
303
+ }
304
+ transition(input) {
305
+ return this.db.transaction(() => {
306
+ const current = this.requirePermit(input.permitId);
307
+ this.assertFence(current, input);
308
+ if (current.state === input.nextState)
309
+ return current;
310
+ if (current.state !== input.expectedState) {
311
+ throw new LocalSyncExecutionPermitError(`Execution permit ${input.permitId} is ${current.state}, not ${input.expectedState}.`, 'SYNC_COORDINATOR_PERMIT_STATE_CONFLICT');
312
+ }
313
+ if (input.nextState === 'gateway-in-flight') {
314
+ this.assertCoordinatorEntryFence(current);
315
+ if (Date.parse(current.deadlineAt) <= Date.parse(this.now())) {
316
+ throw new LocalSyncExecutionPermitError(`Execution permit ${input.permitId} has expired.`, 'SYNC_COORDINATOR_PERMIT_EXPIRED');
317
+ }
318
+ }
319
+ if (input.nextState === 'local-commit-entered') {
320
+ this.assertLocalCommitEntryFence(current);
321
+ }
322
+ const requestedIdentity = input.operationIdentity ?? current.operationIdentity;
323
+ if (current.operationIdentity
324
+ && requestedIdentity
325
+ && current.operationIdentity !== requestedIdentity) {
326
+ throw new LocalSyncExecutionPermitError(`Execution permit ${input.permitId} operation identity changed.`, 'SYNC_COORDINATOR_PERMIT_IDENTITY_CONFLICT');
327
+ }
328
+ const at = this.now();
329
+ const terminal = TERMINAL_STATES.includes(input.nextState);
330
+ const upstreamDisposition = input.upstreamDisposition
331
+ ?? (input.nextState === 'gateway-in-flight' ? 'unknown' : null);
332
+ const result = this.db.prepare(`
333
+ UPDATE local_sync_execution_permits
334
+ SET state = ?,
335
+ operation_identity = COALESCE(operation_identity, ?),
336
+ upstream_disposition = COALESCE(?, upstream_disposition),
337
+ error_code = ?,
338
+ last_transition_at = ?,
339
+ completed_at = ?
340
+ WHERE permit_id = ?
341
+ AND workspace_id = ?
342
+ AND coordinator_generation = ?
343
+ AND server_instance_id = ?
344
+ AND state = ?
345
+ `).run(input.nextState, requestedIdentity || null, upstreamDisposition, input.errorCode || null, at, terminal ? at : null, input.permitId, input.workspaceId, input.coordinatorGeneration, input.serverInstanceId, input.expectedState);
346
+ if (Number(result?.changes || 0) !== 1) {
347
+ throw new LocalSyncExecutionPermitError(`Execution permit ${input.permitId} changed before the transition committed.`, 'SYNC_COORDINATOR_PERMIT_STATE_CONFLICT');
348
+ }
349
+ return this.read(input.permitId);
350
+ })();
351
+ }
352
+ release(input) {
353
+ const current = this.requirePermit(input.permitId);
354
+ this.assertFence(current, input);
355
+ if (current.state === 'released')
356
+ return current;
357
+ if (current.state === 'abandoned-clean' || current.state === 'abandoned-reconcile-required') {
358
+ throw new LocalSyncExecutionPermitError(`Execution permit ${input.permitId} is already abandoned.`, 'SYNC_COORDINATOR_PERMIT_STATE_CONFLICT');
359
+ }
360
+ if (current.state === 'gateway-in-flight') {
361
+ throw new LocalSyncExecutionPermitError(`Execution permit ${input.permitId} still has a gateway request in flight.`, 'SYNC_COORDINATOR_PERMIT_STATE_CONFLICT');
362
+ }
363
+ if (current.state === 'local-commit-entered') {
364
+ throw new LocalSyncExecutionPermitError(`Execution permit ${input.permitId} is owned by the server local commit.`, 'SYNC_COORDINATOR_PERMIT_STATE_CONFLICT');
365
+ }
366
+ if (current.state === 'gateway-complete-awaiting-apply'
367
+ && (!['handshake', 'bootstrap', 'push'].includes(current.operationClass)
368
+ || current.upstreamDisposition === 'unknown')) {
369
+ throw new LocalSyncExecutionPermitError(`Execution permit ${input.permitId} cannot be released from its current gateway disposition.`, 'SYNC_COORDINATOR_PERMIT_STATE_CONFLICT');
370
+ }
371
+ return this.transition({
372
+ ...input,
373
+ expectedState: current.state,
374
+ nextState: 'released',
375
+ });
376
+ }
377
+ enterLocalCommit(input) {
378
+ const current = this.requirePermit(input.permitId);
379
+ this.assertFence(current, input);
380
+ if (current.state === 'local-commit-entered')
381
+ return current;
382
+ const expectedState = current.operationClass === 'local-apply'
383
+ ? 'issued-idle'
384
+ : 'gateway-complete-awaiting-apply';
385
+ return this.transition({
386
+ ...input,
387
+ expectedState,
388
+ nextState: 'local-commit-entered',
389
+ });
390
+ }
391
+ enterLocalCommitGroup(input) {
392
+ return this.db.transaction(() => {
393
+ const permits = this.requireCompletionGroup(input, 'gateway-complete-awaiting-apply');
394
+ for (const permit of permits) {
395
+ this.assertLocalCommitEntryFence(permit);
396
+ }
397
+ this.persistCompletionGroupTransition(input, 'gateway-complete-awaiting-apply', 'local-commit-entered');
398
+ return input.permitIds.map((permitId) => this.read(permitId));
399
+ })();
400
+ }
401
+ completeLocalCommit(input) {
402
+ return this.transition({
403
+ ...input,
404
+ expectedState: 'local-commit-entered',
405
+ nextState: 'released',
406
+ });
407
+ }
408
+ completeLocalCommitGroup(input, beforeRelease) {
409
+ return this.db.transaction(() => {
410
+ this.requireCompletionGroup(input, 'local-commit-entered');
411
+ beforeRelease();
412
+ this.persistCompletionGroupTransition(input, 'local-commit-entered', 'released');
413
+ return input.permitIds.map((permitId) => this.read(permitId));
414
+ })();
415
+ }
416
+ acknowledgeNonApplyingCompletion(input) {
417
+ return this.db.transaction(() => {
418
+ const current = this.requirePermit(input.permitId);
419
+ this.assertFence(current, input);
420
+ if (current.ownerMode !== input.ownerMode) {
421
+ throw new LocalSyncExecutionPermitError(`Execution permit ${input.permitId} belongs to ${current.ownerMode}, not ${input.ownerMode}.`, 'SYNC_COORDINATOR_PERMIT_IDENTITY_CONFLICT');
422
+ }
423
+ if (!NON_APPLYING_OPERATION_CLASSES.has(current.operationClass)) {
424
+ throw new LocalSyncExecutionPermitError(`Execution permit ${input.permitId} requires an atomic local apply.`, 'SYNC_COORDINATOR_PERMIT_STATE_CONFLICT');
425
+ }
426
+ if (current.state !== 'gateway-complete-awaiting-apply'
427
+ || current.upstreamDisposition !== 'accepted') {
428
+ throw new LocalSyncExecutionPermitError(`Execution permit ${input.permitId} has no accepted non-applying completion to acknowledge.`, 'SYNC_COORDINATOR_PERMIT_STATE_CONFLICT');
429
+ }
430
+ return this.transition({
431
+ permitId: input.permitId,
432
+ workspaceId: input.workspaceId,
433
+ coordinatorGeneration: input.coordinatorGeneration,
434
+ serverInstanceId: input.serverInstanceId,
435
+ expectedState: 'gateway-complete-awaiting-apply',
436
+ nextState: 'released',
437
+ });
438
+ })();
439
+ }
440
+ renewAcceptedApplyCompletion(input) {
441
+ return this.db.transaction(() => {
442
+ const current = this.requirePermit(input.permitId);
443
+ this.assertFence(current, input);
444
+ if (current.ownerMode !== input.ownerMode) {
445
+ throw new LocalSyncExecutionPermitError(`Execution permit ${input.permitId} belongs to ${current.ownerMode}, not ${input.ownerMode}.`, 'SYNC_COORDINATOR_PERMIT_IDENTITY_CONFLICT');
446
+ }
447
+ if (current.state !== 'gateway-complete-awaiting-apply'
448
+ || current.upstreamDisposition !== 'accepted') {
449
+ throw new LocalSyncExecutionPermitError(`Execution permit ${input.permitId} has no accepted apply completion to renew.`, 'SYNC_COORDINATOR_PERMIT_STATE_CONFLICT');
450
+ }
451
+ const now = this.now();
452
+ const deadlineMs = Date.parse(input.deadlineAt);
453
+ if (!Number.isFinite(deadlineMs)
454
+ || deadlineMs <= Date.parse(now)
455
+ || deadlineMs <= Date.parse(current.deadlineAt)) {
456
+ throw new LocalSyncExecutionPermitError(`Execution permit ${input.permitId} renewal deadline is invalid.`, 'SYNC_COORDINATOR_PERMIT_EXPIRED');
457
+ }
458
+ const result = this.db.prepare(`
459
+ UPDATE local_sync_execution_permits
460
+ SET deadline_at = ?,
461
+ last_transition_at = ?
462
+ WHERE permit_id = ?
463
+ AND workspace_id = ?
464
+ AND coordinator_generation = ?
465
+ AND server_instance_id = ?
466
+ AND owner_mode = ?
467
+ AND state = 'gateway-complete-awaiting-apply'
468
+ AND upstream_disposition = 'accepted'
469
+ `).run(input.deadlineAt, now, input.permitId, input.workspaceId, input.coordinatorGeneration, input.serverInstanceId, input.ownerMode);
470
+ if (Number(result?.changes || 0) !== 1) {
471
+ throw new LocalSyncExecutionPermitError(`Execution permit ${input.permitId} changed before its renewal committed.`, 'SYNC_COORDINATOR_PERMIT_STATE_CONFLICT');
472
+ }
473
+ return this.read(input.permitId);
474
+ })();
475
+ }
476
+ completeAcceptedV3Dispatch(input, applyAuthoritativeAndAck) {
477
+ return this.db.transaction(() => {
478
+ const current = this.requirePermit(input.permitId);
479
+ this.assertFence(current, input);
480
+ if (current.ownerMode !== input.ownerMode) {
481
+ throw new LocalSyncExecutionPermitError(`Execution permit ${input.permitId} belongs to ${current.ownerMode}, not ${input.ownerMode}.`, 'SYNC_COORDINATOR_PERMIT_IDENTITY_CONFLICT');
482
+ }
483
+ if (!input.operationIdentity
484
+ || current.operationIdentity !== input.operationIdentity) {
485
+ throw new LocalSyncExecutionPermitError(`Execution permit ${input.permitId} belongs to a different operation identity.`, 'SYNC_COORDINATOR_PERMIT_IDENTITY_CONFLICT');
486
+ }
487
+ if (current.operationClass !== 'v3-dispatch') {
488
+ throw new LocalSyncExecutionPermitError(`Execution permit ${input.permitId} is not a v3 dispatch operation.`, 'SYNC_COORDINATOR_PERMIT_STATE_CONFLICT');
489
+ }
490
+ if (current.state !== 'gateway-complete-awaiting-apply'
491
+ || current.upstreamDisposition !== 'accepted') {
492
+ throw new LocalSyncExecutionPermitError(`Execution permit ${input.permitId} is not an accepted v3 dispatch awaiting authoritative apply.`, 'SYNC_COORDINATOR_PERMIT_STATE_CONFLICT');
493
+ }
494
+ this.assertLocalCommitEntryFence(current);
495
+ this.persistAcceptedV3DispatchTransition(input, 'gateway-complete-awaiting-apply', 'local-commit-entered');
496
+ const result = applyAuthoritativeAndAck();
497
+ assertSynchronousTransactionResult(result);
498
+ this.resolveMatchingV3DispatchRecoveryObligations({
499
+ workspaceId: input.workspaceId,
500
+ coordinatorGeneration: input.coordinatorGeneration,
501
+ ownerMode: input.ownerMode,
502
+ operationIdentity: input.operationIdentity,
503
+ resolvedBoundary: {
504
+ version: 1,
505
+ kind: 'accepted-v3-dispatch',
506
+ operationIdentity: input.operationIdentity,
507
+ },
508
+ });
509
+ this.persistAcceptedV3DispatchTransition(input, 'local-commit-entered', 'released');
510
+ return result;
511
+ })();
512
+ }
513
+ resolveV3DispatchRecoveryObligations(input) {
514
+ return this.db.transaction(() => {
515
+ this.assertRecoveryResolutionCoordinatorFence(input);
516
+ const obligationIds = this.normalizeIdentityGroup(input.resolutions.map((resolution) => resolution.obligationId), 'A v3 dispatch recovery resolution');
517
+ const resolutions = new Map(input.resolutions.map((resolution) => [
518
+ resolution.obligationId,
519
+ resolution,
520
+ ]));
521
+ for (const obligationId of obligationIds) {
522
+ const resolution = resolutions.get(obligationId);
523
+ const row = this.db.prepare(`
524
+ SELECT obligation.*,
525
+ permit.workspace_id AS permit_workspace_id,
526
+ permit.coordinator_generation AS permit_generation,
527
+ permit.operation_class AS permit_operation_class,
528
+ permit.operation_identity AS permit_operation_identity
529
+ FROM local_sync_recovery_obligations AS obligation
530
+ INNER JOIN local_sync_execution_permits AS permit
531
+ ON permit.permit_id = obligation.permit_id
532
+ WHERE obligation.obligation_id = ?
533
+ `).get(obligationId);
534
+ if (!row) {
535
+ throw new LocalSyncExecutionPermitError(`Recovery obligation ${obligationId} was not found.`, 'SYNC_COORDINATOR_PERMIT_NOT_FOUND');
536
+ }
537
+ const obligation = mapObligation(row);
538
+ if (obligation.workspaceId !== input.workspaceId
539
+ || String(row.permit_workspace_id || '') !== input.workspaceId
540
+ || Number(row.permit_generation || 0) > input.coordinatorGeneration) {
541
+ throw new LocalSyncExecutionPermitError(`Recovery obligation ${obligationId} belongs to a different workspace or future generation.`, Number(row.permit_generation || 0) > input.coordinatorGeneration
542
+ ? 'SYNC_COORDINATOR_STALE_GENERATION'
543
+ : 'SYNC_COORDINATOR_INACTIVE_WORKSPACE');
544
+ }
545
+ if (obligation.operationClass !== 'v3-dispatch'
546
+ || row.permit_operation_class !== 'v3-dispatch'
547
+ || obligation.requiredAction !== 'replay-operation-then-reconcile'
548
+ || !resolution.operationIdentity
549
+ || obligation.operationIdentity !== resolution.operationIdentity
550
+ || row.permit_operation_identity !== resolution.operationIdentity) {
551
+ throw new LocalSyncExecutionPermitError(`Recovery obligation ${obligationId} does not match the settled v3 dispatch operation.`, 'SYNC_COORDINATOR_PERMIT_IDENTITY_CONFLICT');
552
+ }
553
+ const resolvedBoundary = canonicalWorkspaceSyncJson(resolution.resolvedBoundary);
554
+ if (obligation.resolvedAt) {
555
+ if (canonicalWorkspaceSyncJson(obligation.resolvedBoundary)
556
+ !== resolvedBoundary) {
557
+ throw new LocalSyncExecutionPermitError(`Recovery obligation ${obligationId} was resolved by different evidence.`, 'SYNC_COORDINATOR_PERMIT_IDENTITY_CONFLICT');
558
+ }
559
+ continue;
560
+ }
561
+ const result = this.db.prepare(`
562
+ UPDATE local_sync_recovery_obligations
563
+ SET resolved_at = ?, resolved_boundary_json = ?
564
+ WHERE obligation_id = ? AND workspace_id = ?
565
+ AND resolved_at IS NULL
566
+ `).run(this.now(), resolvedBoundary, obligationId, input.workspaceId);
567
+ if (Number(result?.changes || 0) !== 1) {
568
+ throw new LocalSyncExecutionPermitError(`Recovery obligation ${obligationId} changed before v3 dispatch recovery committed.`, 'SYNC_COORDINATOR_PERMIT_STATE_CONFLICT');
569
+ }
570
+ }
571
+ return obligationIds.map((obligationId) => mapObligation(this.db.prepare(`
572
+ SELECT *
573
+ FROM local_sync_recovery_obligations
574
+ WHERE obligation_id = ?
575
+ `).get(obligationId)));
576
+ })();
577
+ }
578
+ completeAcceptedPushEchoGroup(input, applyAuthoritativeEchoes) {
579
+ return this.db.transaction(() => {
580
+ const permits = this.requireAcceptedPushEchoGroup(input);
581
+ const completionFence = this.snapshotAcceptedPushEchoCompletionFence(input);
582
+ for (const permit of permits) {
583
+ this.assertLocalCommitEntryFence(permit);
584
+ }
585
+ this.persistAcceptedPushEchoGroupTransition(completionFence, 'gateway-complete-awaiting-apply', 'local-commit-entered');
586
+ const result = applyAuthoritativeEchoes();
587
+ assertSynchronousTransactionResult(result);
588
+ this.resolveAcceptedPushRecoveryObligations(completionFence, permits);
589
+ this.persistAcceptedPushEchoGroupTransition(completionFence, 'local-commit-entered', 'released');
590
+ return result;
591
+ })();
592
+ }
593
+ completeAcceptedPushWithoutEcho(input) {
594
+ return this.db.transaction(() => {
595
+ const permits = this.requireAcceptedPushEchoGroup(input);
596
+ const completionFence = this.snapshotAcceptedPushEchoCompletionFence(input);
597
+ if (permits.length !== 1) {
598
+ throw new LocalSyncExecutionPermitError('A zero-echo push completion requires exactly one accepted permit.', 'SYNC_COORDINATOR_PERMIT_IDENTITY_CONFLICT');
599
+ }
600
+ this.assertLocalCommitEntryFence(permits[0]);
601
+ this.persistAcceptedPushEchoGroupTransition(completionFence, 'gateway-complete-awaiting-apply', 'local-commit-entered');
602
+ this.resolveAcceptedPushRecoveryObligations(completionFence, permits);
603
+ this.persistAcceptedPushEchoGroupTransition(completionFence, 'local-commit-entered', 'released');
604
+ return this.read(permits[0].permitId);
605
+ })();
606
+ }
607
+ abandonPermit(input) {
608
+ return this.db.transaction(() => {
609
+ const current = this.requirePermit(input.permitId);
610
+ this.assertFence(current, input);
611
+ if (current.state === 'released'
612
+ || current.state === 'abandoned-clean'
613
+ || current.state === 'abandoned-reconcile-required') {
614
+ return current;
615
+ }
616
+ if (current.state === 'gateway-in-flight') {
617
+ throw new LocalSyncExecutionPermitError(`Execution permit ${input.permitId} still has a gateway request in flight.`, 'SYNC_COORDINATOR_PERMIT_STATE_CONFLICT');
618
+ }
619
+ if (current.state === 'local-commit-entered') {
620
+ throw new LocalSyncExecutionPermitError(`Execution permit ${input.permitId} is owned by the server local commit.`, 'SYNC_COORDINATOR_PERMIT_STATE_CONFLICT');
621
+ }
622
+ const clean = current.state === 'issued-idle'
623
+ || (current.state === 'gateway-complete-awaiting-apply'
624
+ && current.upstreamDisposition === 'rejected');
625
+ const disposition = current.upstreamDisposition === 'accepted'
626
+ ? 'accepted'
627
+ : current.upstreamDisposition === 'rejected'
628
+ ? 'rejected'
629
+ : current.state === 'issued-idle'
630
+ ? 'not-started'
631
+ : 'unknown';
632
+ this.persistAbandon(current, clean ? 'abandoned-clean' : 'abandoned-reconcile-required', disposition, input.errorCode || 'SYNC_COORDINATOR_PERMIT_ABANDONED');
633
+ if (!clean)
634
+ this.createRecoveryObligation(current, disposition, input.errorCode || 'SYNC_COORDINATOR_PERMIT_ABANDONED');
635
+ return this.read(input.permitId);
636
+ })();
637
+ }
638
+ recoverExpiredPermits(input) {
639
+ return this.db.transaction(() => {
640
+ const excluded = new Set(input.excludePermitIds || []);
641
+ const rows = this.db.prepare(`
642
+ SELECT *
643
+ FROM local_sync_execution_permits
644
+ WHERE server_instance_id = ?
645
+ AND workspace_id = ?
646
+ AND deadline_at <= ?
647
+ AND state <> 'local-commit-entered'
648
+ AND state NOT IN ('released', 'abandoned-clean', 'abandoned-reconcile-required')
649
+ ORDER BY issued_at ASC
650
+ `).all(input.currentServerInstanceId, input.workspaceId, this.now());
651
+ let clean = 0;
652
+ let reconcileRequired = 0;
653
+ for (const row of rows) {
654
+ const permit = mapPermit(row);
655
+ if (excluded.has(permit.permitId))
656
+ continue;
657
+ if (permit.state === 'gateway-in-flight') {
658
+ this.persistAbandon(permit, 'abandoned-reconcile-required', 'unknown', 'SYNC_COORDINATOR_PERMIT_EXPIRED');
659
+ this.createRecoveryObligation(permit, 'unknown', 'SYNC_COORDINATOR_PERMIT_EXPIRED');
660
+ reconcileRequired += 1;
661
+ continue;
662
+ }
663
+ const result = this.abandonPermit({
664
+ permitId: permit.permitId,
665
+ workspaceId: permit.workspaceId,
666
+ coordinatorGeneration: permit.coordinatorGeneration,
667
+ serverInstanceId: permit.serverInstanceId,
668
+ errorCode: 'SYNC_COORDINATOR_PERMIT_EXPIRED',
669
+ });
670
+ if (result.state === 'abandoned-clean')
671
+ clean += 1;
672
+ if (result.state === 'abandoned-reconcile-required')
673
+ reconcileRequired += 1;
674
+ }
675
+ return { clean, reconcileRequired };
676
+ })();
677
+ }
678
+ recoverPriorServerPermits(input) {
679
+ const recovered = this.db.transaction(() => {
680
+ const params = [input.currentServerInstanceId];
681
+ let workspaceClause = '';
682
+ if (input.workspaceId) {
683
+ workspaceClause = 'AND workspace_id = ?';
684
+ params.push(input.workspaceId);
685
+ }
686
+ const rows = this.db.prepare(`
687
+ SELECT *
688
+ FROM local_sync_execution_permits
689
+ WHERE server_instance_id <> ?
690
+ ${workspaceClause}
691
+ AND state NOT IN ('released', 'abandoned-clean', 'abandoned-reconcile-required')
692
+ ORDER BY issued_at ASC
693
+ `).all(...params);
694
+ let clean = 0;
695
+ let reconcileRequired = 0;
696
+ let localCommitPending = 0;
697
+ for (const row of rows) {
698
+ const permit = mapPermit(row);
699
+ if (permit.state === 'local-commit-entered') {
700
+ this.invariantBlockedWorkspaces.add(permit.workspaceId);
701
+ localCommitPending += 1;
702
+ continue;
703
+ }
704
+ if (permit.state === 'issued-idle') {
705
+ this.persistAbandon(permit, 'abandoned-clean', 'not-started', 'SYNC_COORDINATOR_SERVER_RESTARTED');
706
+ clean += 1;
707
+ continue;
708
+ }
709
+ const disposition = permit.upstreamDisposition === 'rejected'
710
+ ? 'rejected'
711
+ : permit.upstreamDisposition === 'accepted'
712
+ ? 'accepted'
713
+ : 'unknown';
714
+ this.persistAbandon(permit, 'abandoned-reconcile-required', disposition, 'SYNC_COORDINATOR_SERVER_RESTARTED');
715
+ this.createRecoveryObligation(permit, disposition, 'SYNC_COORDINATOR_SERVER_RESTARTED');
716
+ reconcileRequired += 1;
717
+ }
718
+ return { clean, reconcileRequired, localCommitPending };
719
+ })();
720
+ this.pruneTerminalHistory();
721
+ return recovered;
722
+ }
723
+ pruneTerminalHistory(deleteLimit = LOCAL_SYNC_PERMIT_RETENTION_DELETE_BATCH) {
724
+ const nowMs = Date.parse(this.now());
725
+ if (!Number.isFinite(nowMs))
726
+ return { permits: 0, obligations: 0 };
727
+ const boundedDeleteLimit = Math.max(1, Math.min(LOCAL_SYNC_PERMIT_RETENTION_SWEEP_LIMIT, Math.floor(Number(deleteLimit) || 0)));
728
+ const cutoff = new Date(nowMs - LOCAL_SYNC_PERMIT_RETENTION_MIN_AGE_MS).toISOString();
729
+ return this.db.transaction(() => {
730
+ const resolvedObligations = this.db.prepare(`
731
+ SELECT *
732
+ FROM local_sync_recovery_obligations
733
+ WHERE resolved_at IS NOT NULL
734
+ ORDER BY resolved_at DESC, obligation_id DESC
735
+ `).all().map(mapObligation);
736
+ const obligationAgeDeleteCount = Math.max(0, resolvedObligations.length - LOCAL_SYNC_PERMIT_RETENTION_SOFT_LIMIT);
737
+ const obligationHardDeleteCount = Math.max(0, resolvedObligations.length - LOCAL_SYNC_OBLIGATION_RETENTION_HARD_LIMIT);
738
+ const obligationCandidates = resolvedObligations
739
+ .slice()
740
+ .reverse()
741
+ .filter((obligation, index) => (index < obligationHardDeleteCount
742
+ || (index < obligationAgeDeleteCount
743
+ && Boolean(obligation.resolvedAt && obligation.resolvedAt < cutoff))))
744
+ .slice(0, boundedDeleteLimit);
745
+ const removeObligation = this.db.prepare(`
746
+ DELETE FROM local_sync_recovery_obligations
747
+ WHERE obligation_id = ? AND resolved_at IS NOT NULL
748
+ `);
749
+ let obligations = 0;
750
+ for (const obligation of obligationCandidates) {
751
+ const result = removeObligation.run(obligation.obligationId);
752
+ obligations += Number(result?.changes || 0);
753
+ }
754
+ const terminalPermits = this.db.prepare(`
755
+ SELECT *
756
+ FROM local_sync_execution_permits
757
+ WHERE state IN ('released', 'abandoned-clean', 'abandoned-reconcile-required')
758
+ AND completed_at IS NOT NULL
759
+ ORDER BY completed_at DESC, permit_id DESC
760
+ `).all().map(mapPermit);
761
+ const protectedPermitIds = new Set();
762
+ const referencedPermitRows = this.db.prepare(`
763
+ SELECT permit_id
764
+ FROM local_sync_recovery_obligations
765
+ `).all();
766
+ for (const row of referencedPermitRows) {
767
+ if (row.permit_id)
768
+ protectedPermitIds.add(row.permit_id);
769
+ }
770
+ const permitAgeDeleteCount = Math.max(0, terminalPermits.length - LOCAL_SYNC_PERMIT_RETENTION_SOFT_LIMIT);
771
+ const permitHardDeleteCount = Math.max(0, terminalPermits.length - LOCAL_SYNC_PERMIT_RETENTION_HARD_LIMIT);
772
+ const permitCandidates = terminalPermits
773
+ .slice()
774
+ .reverse()
775
+ .filter((permit, index) => (!protectedPermitIds.has(permit.permitId)
776
+ && (index < permitHardDeleteCount
777
+ || (index < permitAgeDeleteCount
778
+ && Boolean(permit.completedAt && permit.completedAt < cutoff)))))
779
+ .slice(0, boundedDeleteLimit);
780
+ const removePermit = this.db.prepare(`
781
+ DELETE FROM local_sync_execution_permits
782
+ WHERE permit_id = ?
783
+ AND state IN ('released', 'abandoned-clean', 'abandoned-reconcile-required')
784
+ `);
785
+ let permits = 0;
786
+ for (const permit of permitCandidates) {
787
+ const result = removePermit.run(permit.permitId);
788
+ permits += Number(result?.changes || 0);
789
+ }
790
+ return { permits, obligations };
791
+ })();
792
+ }
793
+ listOpenRecoveryObligations(workspaceId) {
794
+ return this.db.prepare(`
795
+ SELECT *
796
+ FROM local_sync_recovery_obligations
797
+ WHERE workspace_id = ? AND resolved_at IS NULL
798
+ ORDER BY created_at ASC
799
+ `).all(workspaceId).map(mapObligation);
800
+ }
801
+ inspectAuthoritativeRepairRecoveryObligations(workspaceId) {
802
+ const result = this.db.prepare(`
803
+ SELECT
804
+ COUNT(*) AS count,
805
+ SUM(
806
+ CASE
807
+ WHEN operation_class = 'push'
808
+ AND required_action = 'replay-operation-then-reconcile'
809
+ THEN 1
810
+ ELSE 0
811
+ END
812
+ ) AS push_replay_count
813
+ FROM local_sync_recovery_obligations
814
+ WHERE workspace_id = ?
815
+ AND resolved_at IS NULL
816
+ AND (
817
+ (
818
+ operation_class IN ('pull', 'repair')
819
+ AND required_action = 'refetch-from-committed-cursor'
820
+ )
821
+ OR (
822
+ operation_class = 'push'
823
+ AND required_action = 'replay-operation-then-reconcile'
824
+ )
825
+ )
826
+ `).get(workspaceId);
827
+ return {
828
+ total: Number(result?.count || 0),
829
+ requiresV2PushReplay: Number(result?.push_replay_count || 0) > 0,
830
+ };
831
+ }
832
+ resolveAuthoritativeRepairRecoveryObligations(input) {
833
+ return this.db.transaction(() => {
834
+ const state = this.db.prepare(`
835
+ SELECT active_workspace_id, coordinator_generation, ownership_mode, transition_state
836
+ FROM local_sync_coordinator_state
837
+ WHERE coordinator_id = ?
838
+ `).get(LOCAL_SYNC_COORDINATOR_ID);
839
+ if (!state || Number(state.coordinator_generation || 0) !== input.coordinatorGeneration) {
840
+ throw new LocalSyncExecutionPermitError('The coordinator generation changed before authoritative repair completed.', 'SYNC_COORDINATOR_STALE_GENERATION');
841
+ }
842
+ if (String(state.active_workspace_id || '') !== input.workspaceId) {
843
+ throw new LocalSyncExecutionPermitError('Authoritative repair completed for an inactive workspace.', 'SYNC_COORDINATOR_INACTIVE_WORKSPACE');
844
+ }
845
+ if (state.ownership_mode !== input.ownerMode
846
+ || state.transition_state !== 'idle') {
847
+ throw new LocalSyncExecutionPermitError('Authoritative repair cannot settle recovery during an ownership transition.', 'SYNC_COORDINATOR_PERMITS_DISABLED');
848
+ }
849
+ const activePermit = this.db.prepare(`
850
+ SELECT permit_id
851
+ FROM local_sync_execution_permits
852
+ WHERE workspace_id = ?
853
+ AND state NOT IN ('released', 'abandoned-clean', 'abandoned-reconcile-required')
854
+ LIMIT 1
855
+ `).get(input.workspaceId);
856
+ if (activePermit?.permit_id) {
857
+ throw new LocalSyncExecutionPermitError('Authoritative repair cannot settle recovery while execution permits are active.', 'SYNC_COORDINATOR_PERMIT_STATE_CONFLICT');
858
+ }
859
+ const unresolvedDispatch = this.db.prepare(`
860
+ SELECT obligation_id
861
+ FROM local_sync_recovery_obligations
862
+ WHERE workspace_id = ?
863
+ AND resolved_at IS NULL
864
+ AND operation_class = 'v3-dispatch'
865
+ LIMIT 1
866
+ `).get(input.workspaceId);
867
+ if (unresolvedDispatch?.obligation_id) {
868
+ throw new LocalSyncExecutionPermitError('Authoritative repair cannot supersede unresolved durable dispatch recovery.', 'SYNC_COORDINATOR_PERMIT_STATE_CONFLICT');
869
+ }
870
+ const resolvedAt = this.now();
871
+ const resolvedBoundary = canonicalWorkspaceSyncJson({
872
+ version: 1,
873
+ kind: 'authoritative-repair',
874
+ repairId: input.repairId,
875
+ stateSignatureSha256: input.stateSignatureSha256,
876
+ coordinatorGeneration: input.coordinatorGeneration,
877
+ completedAt: resolvedAt,
878
+ });
879
+ const result = this.db.prepare(`
880
+ UPDATE local_sync_recovery_obligations
881
+ SET resolved_at = ?,
882
+ resolved_boundary_json = ?
883
+ WHERE workspace_id = ?
884
+ AND resolved_at IS NULL
885
+ AND permit_id IN (
886
+ SELECT permit_id
887
+ FROM local_sync_execution_permits
888
+ WHERE workspace_id = ?
889
+ AND coordinator_generation <= ?
890
+ AND (
891
+ (
892
+ operation_class IN ('pull', 'repair')
893
+ AND local_sync_recovery_obligations.required_action =
894
+ 'refetch-from-committed-cursor'
895
+ )
896
+ OR (
897
+ operation_class = 'push'
898
+ AND local_sync_recovery_obligations.required_action =
899
+ 'replay-operation-then-reconcile'
900
+ )
901
+ )
902
+ )
903
+ `).run(resolvedAt, resolvedBoundary, input.workspaceId, input.workspaceId, input.coordinatorGeneration);
904
+ const remaining = this.db.prepare(`
905
+ SELECT COUNT(*) AS count
906
+ FROM local_sync_recovery_obligations
907
+ WHERE workspace_id = ? AND resolved_at IS NULL
908
+ `).get(input.workspaceId);
909
+ return {
910
+ resolved: Number(result?.changes || 0),
911
+ remaining: Number(remaining?.count || 0),
912
+ };
913
+ })();
914
+ }
915
+ listResolvableRecoveryObligations(completionGroup) {
916
+ validateWorkspaceSyncEngineTransferCompletionGroup(completionGroup);
917
+ this.assertRecoveryResolutionCoordinatorFence(completionGroup);
918
+ const completionPermits = this.requireCompletionGroup(completionGroup, 'local-commit-entered');
919
+ const operationClasses = new Set(completionPermits.map((permit) => permit.operationClass));
920
+ if (operationClasses.size !== 1)
921
+ return [];
922
+ const [operationClass] = [...operationClasses];
923
+ const previousBoundary = canonicalWorkspaceSyncJson(completionGroup.previousBoundary);
924
+ return this.db.prepare(`
925
+ SELECT obligation.*
926
+ FROM local_sync_recovery_obligations AS obligation
927
+ INNER JOIN local_sync_execution_permits AS permit
928
+ ON permit.permit_id = obligation.permit_id
929
+ WHERE obligation.workspace_id = ?
930
+ AND obligation.resolved_at IS NULL
931
+ AND obligation.required_action = 'refetch-from-committed-cursor'
932
+ AND obligation.operation_class = ?
933
+ AND permit.workspace_id = ?
934
+ AND permit.coordinator_generation <= ?
935
+ AND permit.operation_class = ?
936
+ ORDER BY obligation.created_at ASC, obligation.obligation_id ASC
937
+ `).all(completionGroup.workspaceId, operationClass, completionGroup.workspaceId, completionGroup.coordinatorGeneration, operationClass).filter((row) => (canonicalWorkspaceSyncJson(mapObligation(row).lastCommittedCursor)
938
+ === previousBoundary)).map(mapObligation);
939
+ }
940
+ resolveRecoveryObligations(input, commitBoundary) {
941
+ return this.db.transaction(() => {
942
+ validateWorkspaceSyncEngineTransferCompletionGroup(input.completionGroup);
943
+ const obligationIds = this.normalizeIdentityGroup(input.obligationIds, 'A recovery obligation resolution');
944
+ const completionGroup = input.completionGroup;
945
+ this.assertRecoveryResolutionCoordinatorFence(completionGroup);
946
+ const completionPermits = this.requireCompletionGroup(completionGroup, 'local-commit-entered');
947
+ const obligations = obligationIds.map((obligationId) => {
948
+ const row = this.db.prepare(`
949
+ SELECT obligation.*,
950
+ permit.workspace_id AS permit_workspace_id,
951
+ permit.coordinator_generation AS permit_generation,
952
+ permit.operation_class AS permit_operation_class,
953
+ permit.last_committed_cursor_json AS permit_last_committed_cursor_json
954
+ FROM local_sync_recovery_obligations AS obligation
955
+ INNER JOIN local_sync_execution_permits AS permit
956
+ ON permit.permit_id = obligation.permit_id
957
+ WHERE obligation.obligation_id = ?
958
+ `).get(obligationId);
959
+ if (!row) {
960
+ throw new LocalSyncExecutionPermitError(`Recovery obligation ${obligationId} was not found.`, 'SYNC_COORDINATOR_PERMIT_NOT_FOUND');
961
+ }
962
+ if (String(row.workspace_id || '') !== completionGroup.workspaceId
963
+ || String(row.permit_workspace_id || '') !== completionGroup.workspaceId
964
+ || Number(row.permit_generation || 0)
965
+ > completionGroup.coordinatorGeneration) {
966
+ throw new LocalSyncExecutionPermitError(`Recovery obligation ${obligationId} belongs to a different workspace or future generation.`, String(row.workspace_id || '') === completionGroup.workspaceId
967
+ && String(row.permit_workspace_id || '')
968
+ === completionGroup.workspaceId
969
+ ? Number(row.permit_generation || 0)
970
+ > completionGroup.coordinatorGeneration
971
+ ? 'SYNC_COORDINATOR_STALE_GENERATION'
972
+ : 'SYNC_COORDINATOR_INACTIVE_WORKSPACE'
973
+ : 'SYNC_COORDINATOR_INACTIVE_WORKSPACE');
974
+ }
975
+ const obligation = mapObligation(row);
976
+ const originBoundary = row.permit_last_committed_cursor_json
977
+ ? JSON.parse(row.permit_last_committed_cursor_json)
978
+ : null;
979
+ if (obligation.requiredAction !== 'refetch-from-committed-cursor') {
980
+ throw new LocalSyncExecutionPermitError(`Recovery obligation ${obligationId} requires operation replay before reconciliation.`, 'SYNC_COORDINATOR_PERMIT_STATE_CONFLICT');
981
+ }
982
+ if (row.permit_operation_class !== obligation.operationClass
983
+ || completionPermits.some((permit) => (permit.operationClass !== obligation.operationClass))) {
984
+ throw new LocalSyncExecutionPermitError(`Recovery obligation ${obligationId} does not match the completion group's operation class.`, 'SYNC_COORDINATOR_PERMIT_IDENTITY_CONFLICT');
985
+ }
986
+ if (canonicalWorkspaceSyncJson(obligation.lastCommittedCursor)
987
+ !== canonicalWorkspaceSyncJson(completionGroup.previousBoundary)
988
+ || canonicalWorkspaceSyncJson(originBoundary)
989
+ !== canonicalWorkspaceSyncJson(completionGroup.previousBoundary)) {
990
+ throw new LocalSyncExecutionPermitError(`Recovery obligation ${obligationId} does not start at the resolved boundary.`, 'SYNC_COORDINATOR_PERMIT_STATE_CONFLICT');
991
+ }
992
+ return obligation;
993
+ });
994
+ const openObligations = obligations.filter((obligation) => !obligation.resolvedAt);
995
+ if (obligations.some((obligation) => (obligation.resolvedAt
996
+ && (canonicalWorkspaceSyncJson(obligation.resolvedBoundary)
997
+ !== canonicalWorkspaceSyncJson(completionGroup.expectedBoundary))))) {
998
+ throw new LocalSyncExecutionPermitError('The resolved recovery boundary does not match this replay.', 'SYNC_COORDINATOR_PERMIT_IDENTITY_CONFLICT');
999
+ }
1000
+ if (openObligations.length === 0)
1001
+ return obligations;
1002
+ const committedBoundary = commitBoundary({
1003
+ previousBoundary: JSON.parse(canonicalWorkspaceSyncJson(completionGroup.previousBoundary)),
1004
+ expectedBoundary: JSON.parse(canonicalWorkspaceSyncJson(completionGroup.expectedBoundary)),
1005
+ });
1006
+ if (canonicalWorkspaceSyncJson(committedBoundary)
1007
+ !== canonicalWorkspaceSyncJson(completionGroup.expectedBoundary)) {
1008
+ throw new LocalSyncExecutionPermitError('The committed recovery boundary does not match the expected boundary.', 'SYNC_COORDINATOR_PERMIT_STATE_CONFLICT');
1009
+ }
1010
+ const at = this.now();
1011
+ const resolve = this.db.prepare(`
1012
+ UPDATE local_sync_recovery_obligations
1013
+ SET resolved_at = ?,
1014
+ resolved_boundary_json = ?
1015
+ WHERE obligation_id = ?
1016
+ AND workspace_id = ?
1017
+ AND resolved_at IS NULL
1018
+ `);
1019
+ for (const obligation of openObligations) {
1020
+ const result = resolve.run(at, canonicalWorkspaceSyncJson(completionGroup.expectedBoundary), obligation.obligationId, completionGroup.workspaceId);
1021
+ if (Number(result?.changes || 0) !== 1) {
1022
+ throw new LocalSyncExecutionPermitError(`Recovery obligation ${obligation.obligationId} changed before resolution committed.`, 'SYNC_COORDINATOR_PERMIT_STATE_CONFLICT');
1023
+ }
1024
+ }
1025
+ return obligationIds.map((obligationId) => mapObligation(this.db.prepare(`
1026
+ SELECT *
1027
+ FROM local_sync_recovery_obligations
1028
+ WHERE obligation_id = ?
1029
+ `).get(obligationId)));
1030
+ })();
1031
+ }
1032
+ requirePermit(permitId) {
1033
+ const permit = this.read(permitId);
1034
+ if (!permit) {
1035
+ throw new LocalSyncExecutionPermitError(`Execution permit ${permitId} was not found.`, 'SYNC_COORDINATOR_PERMIT_NOT_FOUND');
1036
+ }
1037
+ return permit;
1038
+ }
1039
+ assertFence(permit, input) {
1040
+ if (permit.serverInstanceId !== input.serverInstanceId) {
1041
+ throw new LocalSyncExecutionPermitError(`Execution permit ${permit.permitId} belongs to a different server instance.`, 'SYNC_COORDINATOR_PERMIT_SERVER_MISMATCH');
1042
+ }
1043
+ if (permit.coordinatorGeneration !== input.coordinatorGeneration) {
1044
+ throw new LocalSyncExecutionPermitError(`Execution permit ${permit.permitId} belongs to a stale coordinator generation.`, 'SYNC_COORDINATOR_STALE_GENERATION');
1045
+ }
1046
+ if (permit.workspaceId !== input.workspaceId) {
1047
+ throw new LocalSyncExecutionPermitError(`Execution permit ${permit.permitId} belongs to a different workspace.`, 'SYNC_COORDINATOR_INACTIVE_WORKSPACE');
1048
+ }
1049
+ }
1050
+ assertCoordinatorEntryFence(permit) {
1051
+ const state = this.db.prepare(`
1052
+ SELECT active_workspace_id, coordinator_generation, ownership_mode, transition_state
1053
+ FROM local_sync_coordinator_state
1054
+ WHERE coordinator_id = ?
1055
+ `).get(LOCAL_SYNC_COORDINATOR_ID);
1056
+ if (!state || Number(state.coordinator_generation || 0) !== permit.coordinatorGeneration) {
1057
+ throw new LocalSyncExecutionPermitError(`Execution permit ${permit.permitId} belongs to a stale coordinator generation.`, 'SYNC_COORDINATOR_STALE_GENERATION');
1058
+ }
1059
+ if (String(state.active_workspace_id || '') !== permit.workspaceId) {
1060
+ throw new LocalSyncExecutionPermitError(`Execution permit ${permit.permitId} belongs to an inactive workspace.`, 'SYNC_COORDINATOR_INACTIVE_WORKSPACE');
1061
+ }
1062
+ if (state.ownership_mode !== permit.ownerMode || state.transition_state !== 'idle') {
1063
+ throw new LocalSyncExecutionPermitError(`${permit.ownerMode} execution permits cannot enter work during an ownership transition.`, 'SYNC_COORDINATOR_PERMITS_DISABLED');
1064
+ }
1065
+ }
1066
+ assertLocalCommitEntryFence(permit) {
1067
+ const state = this.db.prepare(`
1068
+ SELECT active_workspace_id, coordinator_generation, ownership_mode,
1069
+ transition_state, transfer_target_mode, transfer_phase
1070
+ FROM local_sync_coordinator_state
1071
+ WHERE coordinator_id = ?
1072
+ `).get(LOCAL_SYNC_COORDINATOR_ID);
1073
+ if (!state || String(state.active_workspace_id || '') !== permit.workspaceId) {
1074
+ throw new LocalSyncExecutionPermitError(`Execution permit ${permit.permitId} belongs to an inactive workspace.`, 'SYNC_COORDINATOR_INACTIVE_WORKSPACE');
1075
+ }
1076
+ const stateGeneration = Number(state.coordinator_generation || 0);
1077
+ const steadySourceOwner = (stateGeneration === permit.coordinatorGeneration
1078
+ && state.ownership_mode === permit.ownerMode
1079
+ && state.transition_state === 'idle');
1080
+ const targetMode = permit.ownerMode === 'browser-gateway'
1081
+ ? 'server'
1082
+ : 'browser-gateway';
1083
+ const transitionMode = permit.ownerMode === 'browser-gateway'
1084
+ ? 'transitioning-to-server'
1085
+ : 'transitioning-to-browser';
1086
+ const drainingSourceOwner = (stateGeneration === permit.coordinatorGeneration
1087
+ && state.ownership_mode === transitionMode
1088
+ && state.transition_state === 'transferring-ownership'
1089
+ && state.transfer_target_mode === targetMode
1090
+ && (state.transfer_phase === 'preparing' || state.transfer_phase === 'draining'));
1091
+ if (!steadySourceOwner && !drainingSourceOwner) {
1092
+ throw new LocalSyncExecutionPermitError(`The permit cannot enter local commit outside its ${permit.ownerMode} drain window.`, stateGeneration === permit.coordinatorGeneration
1093
+ ? 'SYNC_COORDINATOR_PERMITS_DISABLED'
1094
+ : 'SYNC_COORDINATOR_STALE_GENERATION');
1095
+ }
1096
+ if (Date.parse(permit.deadlineAt) <= Date.parse(this.now())) {
1097
+ throw new LocalSyncExecutionPermitError(`Execution permit ${permit.permitId} has expired.`, 'SYNC_COORDINATOR_PERMIT_EXPIRED');
1098
+ }
1099
+ }
1100
+ requireCompletionGroup(input, expectedState) {
1101
+ const normalizedIds = this.normalizeIdentityGroup(input.permitIds, 'A local commit completion group');
1102
+ const permits = normalizedIds.map((permitId) => this.requirePermit(permitId));
1103
+ for (const permit of permits) {
1104
+ this.assertFence(permit, input);
1105
+ if (permit.ownerMode !== input.ownerMode) {
1106
+ throw new LocalSyncExecutionPermitError(`Execution permit ${permit.permitId} belongs to ${permit.ownerMode}, not ${input.ownerMode}.`, 'SYNC_COORDINATOR_PERMIT_IDENTITY_CONFLICT');
1107
+ }
1108
+ if (!APPLYING_OPERATION_CLASSES.has(permit.operationClass)) {
1109
+ throw new LocalSyncExecutionPermitError(`Execution permit ${permit.permitId} is not an applying operation.`, 'SYNC_COORDINATOR_PERMIT_STATE_CONFLICT');
1110
+ }
1111
+ if (canonicalWorkspaceSyncJson(permit.lastCommittedCursor)
1112
+ !== canonicalWorkspaceSyncJson(input.previousBoundary)) {
1113
+ throw new LocalSyncExecutionPermitError(`Execution permit ${permit.permitId} does not start at the completion group's previous boundary.`, 'SYNC_COORDINATOR_PERMIT_STATE_CONFLICT');
1114
+ }
1115
+ if (permit.state !== expectedState
1116
+ || permit.upstreamDisposition !== 'accepted') {
1117
+ throw new LocalSyncExecutionPermitError(`Execution permit ${permit.permitId} is not an accepted ${expectedState} permit.`, 'SYNC_COORDINATOR_PERMIT_STATE_CONFLICT');
1118
+ }
1119
+ }
1120
+ return permits;
1121
+ }
1122
+ snapshotAcceptedPushEchoCompletionFence(input) {
1123
+ const pushBoundary = JSON.parse(canonicalWorkspaceSyncJson(input.pushBoundary));
1124
+ return Object.freeze({
1125
+ workspaceId: input.workspaceId,
1126
+ coordinatorGeneration: input.coordinatorGeneration,
1127
+ ownerMode: input.ownerMode,
1128
+ serverInstanceId: input.serverInstanceId,
1129
+ permitIds: Object.freeze([...input.permitIds]),
1130
+ pushBoundary: Object.freeze({
1131
+ ...pushBoundary,
1132
+ batchOperationIdentities: Object.freeze([
1133
+ ...pushBoundary.batchOperationIdentities,
1134
+ ]),
1135
+ }),
1136
+ });
1137
+ }
1138
+ requireAcceptedPushEchoGroup(input) {
1139
+ const normalizedIds = this.normalizeIdentityGroup(input.permitIds, 'An accepted push echo completion group');
1140
+ const pushBoundary = input.pushBoundary;
1141
+ const batchOperationIdentities = Array.isArray(pushBoundary?.batchOperationIdentities)
1142
+ ? pushBoundary.batchOperationIdentities
1143
+ : [];
1144
+ if (!pushBoundary
1145
+ || pushBoundary.version !== 1
1146
+ || pushBoundary.projection !== 'v2-push'
1147
+ || batchOperationIdentities.length === 0
1148
+ || batchOperationIdentities.some((operationIdentity, index) => (typeof operationIdentity !== 'string'
1149
+ || !operationIdentity
1150
+ || operationIdentity !== operationIdentity.trim()
1151
+ || batchOperationIdentities.indexOf(operationIdentity) !== index))
1152
+ || Object.keys(pushBoundary).length !== 3) {
1153
+ throw new LocalSyncExecutionPermitError('An accepted push echo completion group requires an exact V2 push boundary.', 'SYNC_COORDINATOR_PERMIT_IDENTITY_CONFLICT');
1154
+ }
1155
+ const canonicalPushBoundary = canonicalWorkspaceSyncJson(pushBoundary);
1156
+ const permits = normalizedIds.map((permitId) => this.requirePermit(permitId));
1157
+ const permitOperationIdentities = new Set();
1158
+ for (const permit of permits) {
1159
+ this.assertFence(permit, input);
1160
+ if (permit.ownerMode !== input.ownerMode) {
1161
+ throw new LocalSyncExecutionPermitError(`Execution permit ${permit.permitId} belongs to ${permit.ownerMode}, not ${input.ownerMode}.`, 'SYNC_COORDINATOR_PERMIT_IDENTITY_CONFLICT');
1162
+ }
1163
+ if (permit.operationClass !== 'push') {
1164
+ throw new LocalSyncExecutionPermitError(`Execution permit ${permit.permitId} is not a push operation.`, 'SYNC_COORDINATOR_PERMIT_STATE_CONFLICT');
1165
+ }
1166
+ if (!permit.operationIdentity?.trim()) {
1167
+ throw new LocalSyncExecutionPermitError(`Execution permit ${permit.permitId} has no stable push operation identity.`, 'SYNC_COORDINATOR_PERMIT_IDENTITY_CONFLICT');
1168
+ }
1169
+ if (permit.operationIdentity !== permit.operationIdentity.trim()
1170
+ || permitOperationIdentities.has(permit.operationIdentity)
1171
+ || !batchOperationIdentities.includes(permit.operationIdentity)) {
1172
+ throw new LocalSyncExecutionPermitError(`Execution permit ${permit.permitId} does not have a unique identity in the push attempt boundary.`, 'SYNC_COORDINATOR_PERMIT_IDENTITY_CONFLICT');
1173
+ }
1174
+ permitOperationIdentities.add(permit.operationIdentity);
1175
+ if (canonicalWorkspaceSyncJson(permit.lastCommittedCursor)
1176
+ !== canonicalPushBoundary) {
1177
+ throw new LocalSyncExecutionPermitError(`Execution permit ${permit.permitId} belongs to a different push attempt boundary.`, 'SYNC_COORDINATOR_PERMIT_IDENTITY_CONFLICT');
1178
+ }
1179
+ if (permit.state !== 'gateway-complete-awaiting-apply'
1180
+ || permit.upstreamDisposition !== 'accepted') {
1181
+ throw new LocalSyncExecutionPermitError(`Execution permit ${permit.permitId} is not an accepted push awaiting authoritative echo apply.`, 'SYNC_COORDINATOR_PERMIT_STATE_CONFLICT');
1182
+ }
1183
+ }
1184
+ return permits;
1185
+ }
1186
+ normalizeIdentityGroup(ids, label) {
1187
+ if (!Array.isArray(ids) || ids.length === 0) {
1188
+ throw new LocalSyncExecutionPermitError(`${label} requires at least one ID.`, 'SYNC_COORDINATOR_PERMIT_IDENTITY_CONFLICT');
1189
+ }
1190
+ const normalizedIds = ids.map((id) => id.trim());
1191
+ if (normalizedIds.some((id, index) => !id || id !== ids[index])
1192
+ || new Set(normalizedIds).size !== normalizedIds.length) {
1193
+ throw new LocalSyncExecutionPermitError(`${label} contains invalid or duplicate IDs.`, 'SYNC_COORDINATOR_PERMIT_IDENTITY_CONFLICT');
1194
+ }
1195
+ return normalizedIds;
1196
+ }
1197
+ assertRecoveryResolutionCoordinatorFence(input) {
1198
+ const state = this.db.prepare(`
1199
+ SELECT active_workspace_id, coordinator_generation,
1200
+ ownership_mode, transition_state
1201
+ FROM local_sync_coordinator_state
1202
+ WHERE coordinator_id = ?
1203
+ `).get(LOCAL_SYNC_COORDINATOR_ID);
1204
+ if (!state || Number(state.coordinator_generation || 0) !== input.coordinatorGeneration) {
1205
+ throw new LocalSyncExecutionPermitError('The coordinator generation changed before recovery obligations were resolved.', 'SYNC_COORDINATOR_STALE_GENERATION');
1206
+ }
1207
+ if (String(state.active_workspace_id || '') !== input.workspaceId) {
1208
+ throw new LocalSyncExecutionPermitError(`Workspace ${input.workspaceId} is not the active local sync workspace.`, 'SYNC_COORDINATOR_INACTIVE_WORKSPACE');
1209
+ }
1210
+ if (state.ownership_mode !== input.ownerMode || state.transition_state !== 'idle') {
1211
+ throw new LocalSyncExecutionPermitError('Recovery obligations can resolve only for the steady-state coordinator owner.', 'SYNC_COORDINATOR_PERMITS_DISABLED');
1212
+ }
1213
+ }
1214
+ persistCompletionGroupTransition(input, expectedState, nextState) {
1215
+ const at = this.now();
1216
+ const update = this.db.prepare(`
1217
+ UPDATE local_sync_execution_permits
1218
+ SET state = ?,
1219
+ error_code = NULL,
1220
+ last_transition_at = ?,
1221
+ completed_at = ?
1222
+ WHERE permit_id = ?
1223
+ AND workspace_id = ?
1224
+ AND coordinator_generation = ?
1225
+ AND server_instance_id = ?
1226
+ AND owner_mode = ?
1227
+ AND state = ?
1228
+ AND upstream_disposition = 'accepted'
1229
+ `);
1230
+ for (const permitId of input.permitIds) {
1231
+ const result = update.run(nextState, at, nextState === 'released' ? at : null, permitId, input.workspaceId, input.coordinatorGeneration, input.serverInstanceId, input.ownerMode, expectedState);
1232
+ if (Number(result?.changes || 0) !== 1) {
1233
+ throw new LocalSyncExecutionPermitError(`Execution permit ${permitId} changed before the completion group committed.`, 'SYNC_COORDINATOR_PERMIT_STATE_CONFLICT');
1234
+ }
1235
+ }
1236
+ }
1237
+ persistAcceptedV3DispatchTransition(input, expectedState, nextState) {
1238
+ const at = this.now();
1239
+ const result = this.db.prepare(`
1240
+ UPDATE local_sync_execution_permits
1241
+ SET state = ?,
1242
+ error_code = NULL,
1243
+ last_transition_at = ?,
1244
+ completed_at = ?
1245
+ WHERE permit_id = ?
1246
+ AND workspace_id = ?
1247
+ AND coordinator_generation = ?
1248
+ AND server_instance_id = ?
1249
+ AND owner_mode = ?
1250
+ AND operation_class = 'v3-dispatch'
1251
+ AND operation_identity = ?
1252
+ AND state = ?
1253
+ AND upstream_disposition = 'accepted'
1254
+ `).run(nextState, at, nextState === 'released' ? at : null, input.permitId, input.workspaceId, input.coordinatorGeneration, input.serverInstanceId, input.ownerMode, input.operationIdentity, expectedState);
1255
+ if (Number(result?.changes || 0) !== 1) {
1256
+ throw new LocalSyncExecutionPermitError(`Execution permit ${input.permitId} changed before the v3 dispatch completion committed.`, 'SYNC_COORDINATOR_PERMIT_STATE_CONFLICT');
1257
+ }
1258
+ }
1259
+ persistAcceptedPushEchoGroupTransition(input, expectedState, nextState) {
1260
+ const at = this.now();
1261
+ const update = this.db.prepare(`
1262
+ UPDATE local_sync_execution_permits
1263
+ SET state = ?,
1264
+ error_code = NULL,
1265
+ last_transition_at = ?,
1266
+ completed_at = ?
1267
+ WHERE permit_id = ?
1268
+ AND workspace_id = ?
1269
+ AND coordinator_generation = ?
1270
+ AND server_instance_id = ?
1271
+ AND owner_mode = ?
1272
+ AND operation_class = 'push'
1273
+ AND operation_identity IS NOT NULL
1274
+ AND operation_identity <> ''
1275
+ AND state = ?
1276
+ AND upstream_disposition = 'accepted'
1277
+ `);
1278
+ for (const permitId of input.permitIds) {
1279
+ const result = update.run(nextState, at, nextState === 'released' ? at : null, permitId, input.workspaceId, input.coordinatorGeneration, input.serverInstanceId, input.ownerMode, expectedState);
1280
+ if (Number(result?.changes || 0) !== 1) {
1281
+ throw new LocalSyncExecutionPermitError(`Execution permit ${permitId} changed before the push echo completion committed.`, 'SYNC_COORDINATOR_PERMIT_STATE_CONFLICT');
1282
+ }
1283
+ }
1284
+ }
1285
+ resolveAcceptedPushRecoveryObligations(input, permits) {
1286
+ const operationIdentities = new Set(permits.map((permit) => permit.operationIdentity).filter((identity) => Boolean(identity)));
1287
+ const canonicalBoundary = canonicalWorkspaceSyncJson(input.pushBoundary);
1288
+ const obligations = this.db.prepare(`
1289
+ SELECT obligation.*,
1290
+ permit.operation_identity AS permit_operation_identity,
1291
+ permit.last_committed_cursor_json AS permit_last_committed_cursor_json
1292
+ FROM local_sync_recovery_obligations AS obligation
1293
+ INNER JOIN local_sync_execution_permits AS permit
1294
+ ON permit.permit_id = obligation.permit_id
1295
+ WHERE obligation.workspace_id = ?
1296
+ AND obligation.resolved_at IS NULL
1297
+ AND obligation.operation_class = 'push'
1298
+ AND obligation.required_action = 'replay-operation-then-reconcile'
1299
+ AND permit.workspace_id = ?
1300
+ AND permit.coordinator_generation <= ?
1301
+ AND permit.operation_class = 'push'
1302
+ ORDER BY obligation.created_at ASC, obligation.obligation_id ASC
1303
+ `).all(input.workspaceId, input.workspaceId, input.coordinatorGeneration).filter((row) => {
1304
+ const obligation = mapObligation(row);
1305
+ const originOperationIdentity = String(row.permit_operation_identity || '');
1306
+ return (Boolean(obligation.operationIdentity)
1307
+ && obligation.operationIdentity === originOperationIdentity
1308
+ && operationIdentities.has(obligation.operationIdentity)
1309
+ && canonicalWorkspaceSyncJson(row.permit_last_committed_cursor_json
1310
+ ? JSON.parse(row.permit_last_committed_cursor_json)
1311
+ : null) === canonicalBoundary
1312
+ && canonicalWorkspaceSyncJson(obligation.lastCommittedCursor) === canonicalBoundary);
1313
+ });
1314
+ if (obligations.length === 0)
1315
+ return;
1316
+ const at = this.now();
1317
+ const update = this.db.prepare(`
1318
+ UPDATE local_sync_recovery_obligations
1319
+ SET resolved_at = ?,
1320
+ resolved_boundary_json = ?
1321
+ WHERE obligation_id = ?
1322
+ AND workspace_id = ?
1323
+ AND resolved_at IS NULL
1324
+ AND operation_class = 'push'
1325
+ AND operation_identity = ?
1326
+ AND required_action = 'replay-operation-then-reconcile'
1327
+ AND (
1328
+ last_committed_cursor_json = ?
1329
+ OR (
1330
+ last_committed_cursor_json IS NULL
1331
+ AND ? IS NULL
1332
+ )
1333
+ )
1334
+ `);
1335
+ for (const obligation of obligations) {
1336
+ const result = update.run(at, canonicalBoundary, obligation.obligation_id, input.workspaceId, obligation.operation_identity, obligation.last_committed_cursor_json || null, obligation.last_committed_cursor_json || null);
1337
+ if (Number(result?.changes || 0) !== 1) {
1338
+ throw new LocalSyncExecutionPermitError(`Recovery obligation ${obligation.obligation_id} changed before push replay committed.`, 'SYNC_COORDINATOR_PERMIT_STATE_CONFLICT');
1339
+ }
1340
+ }
1341
+ }
1342
+ resolveMatchingV3DispatchRecoveryObligations(input) {
1343
+ const rows = this.db.prepare(`
1344
+ SELECT obligation_id
1345
+ FROM local_sync_recovery_obligations
1346
+ WHERE workspace_id = ? AND resolved_at IS NULL
1347
+ AND operation_class = 'v3-dispatch'
1348
+ AND operation_identity = ?
1349
+ AND required_action = 'replay-operation-then-reconcile'
1350
+ ORDER BY created_at, obligation_id
1351
+ `).all(input.workspaceId, input.operationIdentity);
1352
+ if (rows.length === 0)
1353
+ return;
1354
+ this.resolveV3DispatchRecoveryObligations({
1355
+ workspaceId: input.workspaceId,
1356
+ coordinatorGeneration: input.coordinatorGeneration,
1357
+ ownerMode: input.ownerMode,
1358
+ resolutions: rows.map((row) => ({
1359
+ obligationId: String(row.obligation_id || ''),
1360
+ operationIdentity: input.operationIdentity,
1361
+ resolvedBoundary: input.resolvedBoundary,
1362
+ })),
1363
+ });
1364
+ }
1365
+ normalizeDrainLimit(limit) {
1366
+ const resolved = limit ?? 100;
1367
+ if (!Number.isSafeInteger(resolved)
1368
+ || resolved < 1
1369
+ || resolved > MAX_DRAIN_INSPECTION_LIMIT) {
1370
+ throw new RangeError(`Permit drain limit must be an integer between 1 and ${MAX_DRAIN_INSPECTION_LIMIT}.`);
1371
+ }
1372
+ return resolved;
1373
+ }
1374
+ assertNoLocalCommitInvariant(workspaceId) {
1375
+ if (!this.invariantBlockedWorkspaces.has(workspaceId))
1376
+ return;
1377
+ throw new LocalSyncExecutionPermitError('Cloud sync is blocked because a prior server left a local commit in an impossible intermediate state.', 'SYNC_COORDINATOR_LOCAL_COMMIT_INVARIANT');
1378
+ }
1379
+ maybePruneTerminalHistory() {
1380
+ const nowMs = Date.parse(this.now());
1381
+ if (!Number.isFinite(nowMs)
1382
+ || nowMs - this.lastRetentionCheckAtMs
1383
+ < LOCAL_SYNC_PERMIT_RETENTION_CHECK_INTERVAL_MS) {
1384
+ return;
1385
+ }
1386
+ this.lastRetentionCheckAtMs = nowMs;
1387
+ this.pruneTerminalHistory(LOCAL_SYNC_PERMIT_RETENTION_SWEEP_LIMIT);
1388
+ }
1389
+ persistAbandon(permit, state, disposition, errorCode) {
1390
+ const at = this.now();
1391
+ this.db.prepare(`
1392
+ UPDATE local_sync_execution_permits
1393
+ SET state = ?, upstream_disposition = ?, last_transition_at = ?,
1394
+ completed_at = ?, error_code = ?
1395
+ WHERE permit_id = ? AND state = ?
1396
+ `).run(state, disposition, at, at, errorCode, permit.permitId, permit.state);
1397
+ }
1398
+ createRecoveryObligation(permit, disposition, errorCode) {
1399
+ const mutationReplay = (permit.operationClass === 'push'
1400
+ || permit.operationClass === 'v3-dispatch') && Boolean(permit.operationIdentity);
1401
+ const requiredAction = mutationReplay
1402
+ ? 'replay-operation-then-reconcile'
1403
+ : 'refetch-from-committed-cursor';
1404
+ const coalescesRepeatedApplyFailure = errorCode === 'WORKSPACE_SYNC_V3_APPLY_NOT_COMMITTED'
1405
+ || errorCode === 'WORKSPACE_SYNC_V3_ATTACHMENT_HYDRATION_NOT_COMMITTED';
1406
+ if (coalescesRepeatedApplyFailure) {
1407
+ const committedBoundary = canonicalWorkspaceSyncJson(permit.lastCommittedCursor);
1408
+ const equivalentOpenObligation = this.db.prepare(`
1409
+ SELECT obligation.*
1410
+ FROM local_sync_recovery_obligations AS obligation
1411
+ INNER JOIN local_sync_execution_permits AS origin
1412
+ ON origin.permit_id = obligation.permit_id
1413
+ WHERE obligation.workspace_id = ?
1414
+ AND obligation.operation_class = ?
1415
+ AND obligation.upstream_disposition = ?
1416
+ AND obligation.required_action = ?
1417
+ AND obligation.resolved_at IS NULL
1418
+ AND origin.error_code = ?
1419
+ ORDER BY obligation.created_at ASC
1420
+ `).all(permit.workspaceId, permit.operationClass, disposition, requiredAction, errorCode).map(mapObligation).some((obligation) => ((obligation.operationIdentity || null) === (permit.operationIdentity || null)
1421
+ && canonicalWorkspaceSyncJson(obligation.lastCommittedCursor) === committedBoundary));
1422
+ if (equivalentOpenObligation)
1423
+ return;
1424
+ }
1425
+ this.db.prepare(`
1426
+ INSERT INTO local_sync_recovery_obligations (
1427
+ obligation_id, permit_id, workspace_id, operation_class,
1428
+ operation_identity, upstream_disposition, last_committed_cursor_json,
1429
+ required_action, created_at, resolved_at
1430
+ ) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, NULL)
1431
+ ON CONFLICT (permit_id) DO NOTHING
1432
+ `).run(this.createId(), permit.permitId, permit.workspaceId, permit.operationClass, permit.operationIdentity, disposition, permit.lastCommittedCursor === null
1433
+ ? null
1434
+ : JSON.stringify(permit.lastCommittedCursor), requiredAction, this.now());
1435
+ }
1436
+ }