@taskforcehq/taskforce 0.3.324 → 0.3.327

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (1361) hide show
  1. package/LICENSE.md +68 -0
  2. package/README.md +19 -0
  3. package/dist/Taskforce.module.css +2191 -540
  4. package/dist/TaskforceCore.d.ts +1 -0
  5. package/dist/TaskforceCore.js +65 -22
  6. package/dist/annotatedAttachments/AnnotatedAttachmentSessionStore.d.ts +1 -0
  7. package/dist/annotatedAttachments/AnnotatedAttachmentSessionStore.js +3 -2
  8. package/dist/annotatedAttachments/commandService.d.ts +68 -0
  9. package/dist/annotatedAttachments/commandService.js +348 -0
  10. package/dist/annotatedAttachments/service.d.ts +2 -0
  11. package/dist/annotatedAttachments/service.js +13 -12
  12. package/dist/cli.js +158 -9
  13. package/dist/cliOpenPort.d.ts +1 -0
  14. package/dist/cliOpenPort.js +4 -0
  15. package/dist/compat/taskforceAgentDefinitionCompat.d.ts +12 -0
  16. package/dist/compat/taskforceAgentDefinitionCompat.js +25 -0
  17. package/dist/compat/workspaceSyncCompat.js +6 -2
  18. package/dist/compat/workspaceSyncV3CombinedCoverageCompat.d.ts +6 -0
  19. package/dist/compat/workspaceSyncV3CombinedCoverageCompat.js +22 -0
  20. package/dist/compat/workspaceSyncV3OperationCompat.d.ts +7 -0
  21. package/dist/compat/workspaceSyncV3OperationCompat.js +30 -0
  22. package/dist/components/activity/EntityActivityTimeline.d.ts +10 -2
  23. package/dist/components/activity/EntityActivityTimeline.js +73 -35
  24. package/dist/components/context/AttachmentPreviewHost.d.ts +6 -0
  25. package/dist/components/context/AttachmentPreviewHost.js +222 -0
  26. package/dist/components/context/ContextAttachmentManager.d.ts +4 -0
  27. package/dist/components/context/ContextAttachmentManager.js +418 -208
  28. package/dist/components/features/AiProfilesModule.d.ts +24 -0
  29. package/dist/components/features/AiProfilesModule.js +744 -0
  30. package/dist/components/features/AnnotatedAttachmentWorkspace.d.ts +4 -1
  31. package/dist/components/features/AnnotatedAttachmentWorkspace.js +351 -79
  32. package/dist/components/features/DocumentGenerateModal.js +23 -5
  33. package/dist/components/features/DocumentIndex.d.ts +19 -1
  34. package/dist/components/features/DocumentIndex.js +104 -15
  35. package/dist/components/features/DocumentViewer.d.ts +9 -1
  36. package/dist/components/features/DocumentViewer.js +721 -100
  37. package/dist/components/features/DocumentWorkspace.d.ts +37 -2
  38. package/dist/components/features/DocumentWorkspace.js +21 -6
  39. package/dist/components/features/TaskSettings.d.ts +6 -27
  40. package/dist/components/features/TaskSettings.js +257 -151
  41. package/dist/components/features/TaskforceAgentsModule.d.ts +36 -0
  42. package/dist/components/features/TaskforceAgentsModule.js +1782 -0
  43. package/dist/components/features/agentBehavior/AgentBehaviorManagerShared.d.ts +94 -0
  44. package/dist/components/features/agentBehavior/AgentBehaviorManagerShared.js +70 -0
  45. package/dist/components/features/agentCapabilities/AgentCapabilitiesPrototype.d.ts +65 -0
  46. package/dist/components/features/agentCapabilities/AgentCapabilitiesPrototype.js +115 -0
  47. package/dist/components/features/agentRoles/RoleManagerPanel.d.ts +4 -0
  48. package/dist/components/features/agentRoles/RoleManagerPanel.js +382 -0
  49. package/dist/components/features/agentSkills/SkillManagerPanel.d.ts +5 -0
  50. package/dist/components/features/agentSkills/SkillManagerPanel.js +355 -0
  51. package/dist/components/features/documentWorkspaceModel.d.ts +16 -4
  52. package/dist/components/features/documentWorkspaceModel.js +30 -5
  53. package/dist/components/features/planning/PlanningArchiveConfirmation.d.ts +9 -0
  54. package/dist/components/features/planning/PlanningArchiveConfirmation.js +19 -0
  55. package/dist/components/features/planning/PlanningCardIdentity.d.ts +12 -0
  56. package/dist/components/features/planning/PlanningCardIdentity.js +44 -0
  57. package/dist/components/features/planning/PlanningEntityDetails.d.ts +36 -0
  58. package/dist/components/features/planning/PlanningEntityDetails.js +131 -0
  59. package/dist/components/features/planning/PlanningEntitySummary.d.ts +44 -0
  60. package/dist/components/features/planning/PlanningEntitySummary.js +97 -0
  61. package/dist/components/features/planning/PlanningLinkPicker.d.ts +9 -0
  62. package/dist/components/features/planning/PlanningLinkPicker.js +26 -0
  63. package/dist/components/features/planning/PlanningModule.d.ts +6 -0
  64. package/dist/components/features/planning/PlanningModule.js +571 -0
  65. package/dist/components/features/planning/PlanningOwnerDropdown.d.ts +27 -0
  66. package/dist/components/features/planning/PlanningOwnerDropdown.js +80 -0
  67. package/dist/components/features/planning/PlanningTaskArrangeControl.d.ts +5 -0
  68. package/dist/components/features/planning/PlanningTaskArrangeControl.js +11 -0
  69. package/dist/components/features/planning/PlanningTaskCard.d.ts +20 -0
  70. package/dist/components/features/planning/PlanningTaskCard.js +26 -0
  71. package/dist/components/features/planning/PlanningTaskOrderList.d.ts +10 -0
  72. package/dist/components/features/planning/PlanningTaskOrderList.js +52 -0
  73. package/dist/components/features/planning/PlanningUnlinkConfirmation.d.ts +15 -0
  74. package/dist/components/features/planning/PlanningUnlinkConfirmation.js +7 -0
  75. package/dist/components/features/planning/planningCreateIntent.d.ts +10 -0
  76. package/dist/components/features/planning/planningCreateIntent.js +16 -0
  77. package/dist/components/features/planning/planningNavigator.d.ts +33 -0
  78. package/dist/components/features/planning/planningNavigator.js +96 -0
  79. package/dist/components/features/planning/planningTaskArrangement.d.ts +18 -0
  80. package/dist/components/features/planning/planningTaskArrangement.js +106 -0
  81. package/dist/components/features/planning/planningWorkspaceModel.d.ts +121 -0
  82. package/dist/components/features/planning/planningWorkspaceModel.js +5 -0
  83. package/dist/components/features/settings/CategoryManager.js +2 -2
  84. package/dist/components/features/settings/TaxonomyEditor.js +1 -1
  85. package/dist/components/features/settings/TaxonomyManager.js +1 -1
  86. package/dist/components/features/settings/TypeManager.js +1 -1
  87. package/dist/components/features/taskforceAgentAssignments/AgentBehaviorAssignments.d.ts +10 -0
  88. package/dist/components/features/taskforceAgentAssignments/AgentBehaviorAssignments.js +175 -0
  89. package/dist/components/features/taskforceAgentAssignments/agentBehaviorCatalogApi.d.ts +27 -0
  90. package/dist/components/features/taskforceAgentAssignments/agentBehaviorCatalogApi.js +24 -0
  91. package/dist/components/features/taskforceAgentEditorModel.d.ts +109 -0
  92. package/dist/components/features/taskforceAgentEditorModel.js +145 -0
  93. package/dist/components/features/useDocumentWorkspaceController.d.ts +20 -1
  94. package/dist/components/features/useDocumentWorkspaceController.js +106 -21
  95. package/dist/components/features/workflowManager/WorkflowManagerModule.d.ts +11 -0
  96. package/dist/components/features/workflowManager/WorkflowManagerModule.js +313 -0
  97. package/dist/components/features/workflowManager/WorkflowPublishDialog.d.ts +11 -0
  98. package/dist/components/features/workflowManager/WorkflowPublishDialog.js +8 -0
  99. package/dist/components/features/workflowManager/types.d.ts +74 -0
  100. package/dist/components/features/workflowManager/types.js +1 -0
  101. package/dist/components/features/workflowManager/useWorkflowManager.d.ts +30 -0
  102. package/dist/components/features/workflowManager/useWorkflowManager.js +213 -0
  103. package/dist/components/features/workflowManager/workflowManagerApi.d.ts +52 -0
  104. package/dist/components/features/workflowManager/workflowManagerApi.js +142 -0
  105. package/dist/components/task/TaskActionHeader.d.ts +6 -3
  106. package/dist/components/task/TaskActionHeader.js +46 -53
  107. package/dist/components/task/TaskCard.d.ts +10 -2
  108. package/dist/components/task/TaskCard.js +103 -54
  109. package/dist/components/task/TaskContextUpload.d.ts +1 -0
  110. package/dist/components/task/TaskContextUpload.js +3 -2
  111. package/dist/components/task/TaskForm.d.ts +12 -17
  112. package/dist/components/task/TaskForm.js +544 -199
  113. package/dist/components/task/TaskImageReviews.d.ts +8 -0
  114. package/dist/components/task/TaskImageReviews.js +47 -0
  115. package/dist/components/task/TaskKanban.d.ts +11 -12
  116. package/dist/components/task/TaskKanban.js +70 -18
  117. package/dist/components/task/TaskList.d.ts +9 -8
  118. package/dist/components/task/TaskList.js +46 -32
  119. package/dist/components/task/TaskReferenceBadge.d.ts +2 -1
  120. package/dist/components/task/TaskReferenceBadge.js +3 -2
  121. package/dist/components/task/TaskStatusActions.d.ts +3 -1
  122. package/dist/components/task/TaskStatusActions.js +17 -6
  123. package/dist/components/task/TaskWorkflowAssignmentField.d.ts +18 -0
  124. package/dist/components/task/TaskWorkflowAssignmentField.js +362 -0
  125. package/dist/components/task/TaskWorkstreamPicker.d.ts +8 -0
  126. package/dist/components/task/TaskWorkstreamPicker.js +24 -0
  127. package/dist/components/task/TrashRestoreControls.d.ts +18 -0
  128. package/dist/components/task/TrashRestoreControls.js +71 -0
  129. package/dist/components/ui/AiIdentityRosterCard.d.ts +20 -0
  130. package/dist/components/ui/AiIdentityRosterCard.js +5 -0
  131. package/dist/components/ui/AssetTraySortControl.d.ts +10 -0
  132. package/dist/components/ui/AssetTraySortControl.js +38 -0
  133. package/dist/components/ui/AssigneeIdentity.d.ts +12 -0
  134. package/dist/components/ui/AssigneeIdentity.js +41 -0
  135. package/dist/components/ui/DiscardChangesDialog.d.ts +10 -0
  136. package/dist/components/ui/DiscardChangesDialog.js +7 -0
  137. package/dist/components/ui/DisclosureSectionHeader.d.ts +4 -1
  138. package/dist/components/ui/DisclosureSectionHeader.js +2 -2
  139. package/dist/components/ui/EditableAvatarButton.d.ts +6 -1
  140. package/dist/components/ui/EditableAvatarButton.js +6 -5
  141. package/dist/components/ui/HierarchyActionBadge.d.ts +2 -1
  142. package/dist/components/ui/HierarchyActionBadge.js +2 -2
  143. package/dist/components/ui/Markdown.d.ts +13 -3
  144. package/dist/components/ui/Markdown.fixture.d.ts +1 -0
  145. package/dist/components/ui/Markdown.fixture.js +23 -0
  146. package/dist/components/ui/Markdown.js +158 -68
  147. package/dist/components/ui/Modal.d.ts +3 -1
  148. package/dist/components/ui/Modal.js +85 -19
  149. package/dist/components/ui/MultiSelectFilter.d.ts +9 -2
  150. package/dist/components/ui/MultiSelectFilter.js +26 -5
  151. package/dist/components/ui/ReferenceBadgeButton.js +2 -3
  152. package/dist/components/ui/TaxonomyDropdown.d.ts +10 -1
  153. package/dist/components/ui/TaxonomyDropdown.js +149 -58
  154. package/dist/components/ui/TopNoticeLayer.d.ts +2 -1
  155. package/dist/components/ui/TopNoticeLayer.js +5 -2
  156. package/dist/components/ui/useFallbackImageUrl.d.ts +4 -0
  157. package/dist/components/ui/useFallbackImageUrl.js +20 -0
  158. package/dist/components/views/AppShellHeader.js +2 -2
  159. package/dist/components/views/StandaloneLayout.d.ts +1 -0
  160. package/dist/components/views/StandaloneLayout.js +1684 -620
  161. package/dist/components/views/WidgetView.d.ts +1 -0
  162. package/dist/components/views/WidgetView.js +95 -30
  163. package/dist/components/views/chrome/WorkspaceChromeSections.d.ts +4 -2
  164. package/dist/components/views/chrome/WorkspaceChromeSections.js +3 -6
  165. package/dist/components/views/chrome/workspaceChrome.d.ts +5 -8
  166. package/dist/components/views/chrome/workspaceChrome.js +62 -27
  167. package/dist/components/views/panels/FilterToolbar.d.ts +4 -3
  168. package/dist/components/views/panels/FilterToolbar.js +8 -5
  169. package/dist/components/views/panels/FilterToolbarControls.d.ts +11 -2
  170. package/dist/components/views/panels/FilterToolbarControls.js +35 -20
  171. package/dist/components/views/panels/PlanningDrawer.d.ts +62 -51
  172. package/dist/components/views/panels/PlanningDrawer.js +993 -314
  173. package/dist/components/views/planningScope.d.ts +4 -0
  174. package/dist/components/views/planningScope.js +12 -1
  175. package/dist/components/views/standalone/modals/AccountSettingsModal.d.ts +62 -0
  176. package/dist/components/views/standalone/modals/AccountSettingsModal.js +197 -0
  177. package/dist/components/views/standalone/modals/AvatarImageManagerModal.d.ts +7 -2
  178. package/dist/components/views/standalone/modals/AvatarImageManagerModal.js +56 -9
  179. package/dist/components/views/standalone/modals/HelpModal.d.ts +1 -2
  180. package/dist/components/views/standalone/modals/HelpModal.js +3 -4
  181. package/dist/components/views/standalone/modals/SyncStatusModal.d.ts +8 -9
  182. package/dist/components/views/standalone/modals/SyncStatusModal.js +85 -25
  183. package/dist/components/views/standalone/modals/TeamManagementModal.js +1 -1
  184. package/dist/config/applicationBaseUrl.d.ts +2 -0
  185. package/dist/config/applicationBaseUrl.js +23 -0
  186. package/dist/config/envSchema.d.ts +1 -1
  187. package/dist/config/envSchema.js +166 -5
  188. package/dist/core/AdminAuditRetentionService.d.ts +43 -0
  189. package/dist/core/AdminAuditRetentionService.js +126 -0
  190. package/dist/core/AiProfileService.d.ts +34 -0
  191. package/dist/core/AiProfileService.js +516 -252
  192. package/dist/core/AttachmentLinkService.d.ts +10 -2
  193. package/dist/core/AttachmentLinkService.js +44 -12
  194. package/dist/core/AuthIdentityService.d.ts +6 -0
  195. package/dist/core/AuthIdentityService.js +38 -0
  196. package/dist/core/AuthTokenService.d.ts +1 -0
  197. package/dist/core/AuthTokenService.js +13 -0
  198. package/dist/core/DeletedTaskLifecycleService.d.ts +4 -2
  199. package/dist/core/DeletedTaskLifecycleService.js +124 -38
  200. package/dist/core/GlobalSettingsService.d.ts +3 -1
  201. package/dist/core/GlobalSettingsService.js +30 -4
  202. package/dist/core/InitiativeDurableMutationService.d.ts +89 -0
  203. package/dist/core/InitiativeDurableMutationService.js +187 -0
  204. package/dist/core/McpTokenService.d.ts +1 -0
  205. package/dist/core/McpTokenService.js +39 -13
  206. package/dist/core/PlanningCommandPreparationService.d.ts +60 -0
  207. package/dist/core/PlanningCommandPreparationService.js +149 -0
  208. package/dist/core/ScheduleCommandService.d.ts +76 -0
  209. package/dist/core/ScheduleCommandService.js +165 -0
  210. package/dist/core/SyncReconciliationService.d.ts +29 -6
  211. package/dist/core/SyncReconciliationService.js +256 -84
  212. package/dist/core/TaskActivityService.d.ts +22 -2
  213. package/dist/core/TaskActivityService.js +177 -29
  214. package/dist/core/TaskAttachmentLinksDurableMutationService.d.ts +31 -0
  215. package/dist/core/TaskAttachmentLinksDurableMutationService.js +231 -0
  216. package/dist/core/TaskChecklistCommandService.d.ts +50 -0
  217. package/dist/core/TaskChecklistCommandService.js +111 -0
  218. package/dist/core/TaskDurableCreateMutationService.d.ts +38 -0
  219. package/dist/core/TaskDurableCreateMutationService.js +85 -0
  220. package/dist/core/TaskDurableDeleteMutationService.d.ts +47 -0
  221. package/dist/core/TaskDurableDeleteMutationService.js +54 -0
  222. package/dist/core/TaskDurableLifecycleMutationService.d.ts +38 -0
  223. package/dist/core/TaskDurableLifecycleMutationService.js +42 -0
  224. package/dist/core/TaskDurableRelationshipMutationService.d.ts +58 -0
  225. package/dist/core/TaskDurableRelationshipMutationService.js +66 -0
  226. package/dist/core/TaskDurableRestoreMutationService.d.ts +31 -0
  227. package/dist/core/TaskDurableRestoreMutationService.js +33 -0
  228. package/dist/core/TaskDurableStatusMutationService.d.ts +74 -0
  229. package/dist/core/TaskDurableStatusMutationService.js +247 -0
  230. package/dist/core/TaskDurableSyncMutationService.d.ts +34 -0
  231. package/dist/core/TaskDurableSyncMutationService.js +70 -0
  232. package/dist/core/TaskDurableWorkflowMutationService.d.ts +48 -0
  233. package/dist/core/TaskDurableWorkflowMutationService.js +59 -0
  234. package/dist/core/TaskLifecycleCommandService.d.ts +101 -0
  235. package/dist/core/TaskLifecycleCommandService.js +161 -0
  236. package/dist/core/TaskRootCommandPreparationService.d.ts +35 -0
  237. package/dist/core/TaskRootCommandPreparationService.js +103 -0
  238. package/dist/core/Taskforce.d.ts +479 -59
  239. package/dist/core/Taskforce.js +3671 -841
  240. package/dist/core/WorkflowAssignmentService.d.ts +40 -0
  241. package/dist/core/WorkflowAssignmentService.js +158 -0
  242. package/dist/core/WorkflowExecutionService.d.ts +69 -0
  243. package/dist/core/WorkflowExecutionService.js +342 -0
  244. package/dist/core/WorkflowTaskActivationService.d.ts +32 -0
  245. package/dist/core/WorkflowTaskActivationService.js +63 -0
  246. package/dist/core/WorkflowTemplateService.d.ts +64 -0
  247. package/dist/core/WorkflowTemplateService.js +223 -0
  248. package/dist/core/WorkspaceLifecycleService.d.ts +1 -0
  249. package/dist/core/WorkspaceLifecycleService.js +18 -0
  250. package/dist/core/WorkstreamDurableMutationService.d.ts +90 -0
  251. package/dist/core/WorkstreamDurableMutationService.js +184 -0
  252. package/dist/core/planningReferencePolicy.d.ts +14 -0
  253. package/dist/core/planningReferencePolicy.js +53 -0
  254. package/dist/core/taskReferencePolicy.js +24 -3
  255. package/dist/core/types.d.ts +10 -10
  256. package/dist/documentReviews/DocumentReviewCommentStore.d.ts +22 -2
  257. package/dist/documentReviews/DocumentReviewCommentStore.js +92 -8
  258. package/dist/documentReviews/commandService.d.ts +51 -0
  259. package/dist/documentReviews/commandService.js +63 -0
  260. package/dist/documentReviews/service.d.ts +20 -1
  261. package/dist/documentReviews/service.js +234 -24
  262. package/dist/documentReviews/types.d.ts +18 -1
  263. package/dist/hooks/sync/bootstrap.d.ts +3 -7
  264. package/dist/hooks/sync/bootstrap.js +6 -14
  265. package/dist/hooks/sync/browserSyncAuthority.d.ts +21 -0
  266. package/dist/hooks/sync/browserSyncAuthority.js +70 -0
  267. package/dist/hooks/sync/browserSyncRemoteServices.d.ts +29 -0
  268. package/dist/hooks/sync/browserSyncRemoteServices.js +58 -0
  269. package/dist/hooks/sync/controlPlane.d.ts +1 -37
  270. package/dist/hooks/sync/controlPlane.js +1 -78
  271. package/dist/hooks/sync/lifecyclePolicy.d.ts +1 -45
  272. package/dist/hooks/sync/lifecyclePolicy.js +1 -93
  273. package/dist/hooks/sync/orchestratorShared.d.ts +9 -3
  274. package/dist/hooks/sync/orchestratorShared.js +70 -96
  275. package/dist/hooks/sync/pullLifecycle.d.ts +1 -31
  276. package/dist/hooks/sync/pullLifecycle.js +1 -24
  277. package/dist/hooks/sync/realtime.d.ts +4 -1
  278. package/dist/hooks/sync/realtime.js +103 -3
  279. package/dist/hooks/sync/recovery.d.ts +1 -84
  280. package/dist/hooks/sync/recovery.js +1 -245
  281. package/dist/hooks/sync/transfers.d.ts +8 -129
  282. package/dist/hooks/sync/transfers.js +19 -581
  283. package/dist/hooks/sync/useDataVersionRefresh.d.ts +6 -1
  284. package/dist/hooks/sync/useDataVersionRefresh.js +127 -12
  285. package/dist/hooks/sync/useDurableLocalOutboxDrain.d.ts +14 -0
  286. package/dist/hooks/sync/useDurableLocalOutboxDrain.js +208 -0
  287. package/dist/hooks/sync/useDurableTaskCreateMutation.d.ts +15 -0
  288. package/dist/hooks/sync/useDurableTaskCreateMutation.js +152 -0
  289. package/dist/hooks/sync/useDurableTaskDeleteMutation.d.ts +11 -0
  290. package/dist/hooks/sync/useDurableTaskDeleteMutation.js +21 -0
  291. package/dist/hooks/sync/useDurableTaskLifecycleMutation.d.ts +12 -0
  292. package/dist/hooks/sync/useDurableTaskLifecycleMutation.js +22 -0
  293. package/dist/hooks/sync/useDurableTaskMetadataMutation.d.ts +14 -0
  294. package/dist/hooks/sync/useDurableTaskMetadataMutation.js +24 -0
  295. package/dist/hooks/sync/useDurableTaskRestoreMutation.d.ts +12 -0
  296. package/dist/hooks/sync/useDurableTaskRestoreMutation.js +24 -0
  297. package/dist/hooks/sync/useDurableTaskStatusMutation.d.ts +18 -0
  298. package/dist/hooks/sync/useDurableTaskStatusMutation.js +23 -0
  299. package/dist/hooks/sync/useLocalSyncCoordinatorSnapshot.d.ts +23 -0
  300. package/dist/hooks/sync/useLocalSyncCoordinatorSnapshot.js +414 -0
  301. package/dist/hooks/sync/useSyncStatusActions.d.ts +2 -1
  302. package/dist/hooks/sync/useSyncStatusActions.js +8 -3
  303. package/dist/hooks/tasks/taskHttpMutation.d.ts +25 -0
  304. package/dist/hooks/tasks/taskHttpMutation.js +134 -0
  305. package/dist/hooks/tasks/useCurrentTaskRelations.d.ts +6 -1
  306. package/dist/hooks/tasks/useCurrentTaskRelations.js +32 -6
  307. package/dist/hooks/tasks/useTaskEditorNavigation.d.ts +4 -3
  308. package/dist/hooks/tasks/useTaskEditorNavigation.js +9 -13
  309. package/dist/hooks/tasks/useTaskFormActions.d.ts +17 -2
  310. package/dist/hooks/tasks/useTaskFormActions.js +309 -55
  311. package/dist/hooks/tasks/useTaskReferenceContract.d.ts +5 -0
  312. package/dist/hooks/tasks/useTaskReferenceContract.js +17 -0
  313. package/dist/hooks/tasks/useTaskRelationships.d.ts +1 -3
  314. package/dist/hooks/tasks/useTaskRelationships.js +5 -25
  315. package/dist/hooks/tasks/useTrashSelection.d.ts +12 -0
  316. package/dist/hooks/tasks/useTrashSelection.js +49 -0
  317. package/dist/hooks/ui/useInitiativeTemplates.d.ts +24 -0
  318. package/dist/hooks/ui/useInitiativeTemplates.js +22 -0
  319. package/dist/hooks/ui/useSettingsModel.d.ts +5 -29
  320. package/dist/hooks/ui/useSettingsModel.js +31 -15
  321. package/dist/hooks/ui/useSettingsPersistence.d.ts +0 -1
  322. package/dist/hooks/ui/useSettingsPersistence.js +4 -8
  323. package/dist/hooks/ui/useSettingsTaxonomyManagement.js +31 -0
  324. package/dist/hooks/useFilterSort.d.ts +2 -2
  325. package/dist/hooks/useFilterSort.js +19 -15
  326. package/dist/hooks/useRealtimeSync.d.ts +10 -0
  327. package/dist/hooks/useRealtimeSync.js +57 -4
  328. package/dist/hooks/useSyncOrchestrator.d.ts +32 -1
  329. package/dist/hooks/useSyncOrchestrator.js +963 -287
  330. package/dist/hooks/useTaskData.d.ts +11 -2
  331. package/dist/hooks/useTaskData.js +59 -26
  332. package/dist/hooks/useTaskMutations.d.ts +42 -5
  333. package/dist/hooks/useTaskMutations.js +750 -125
  334. package/dist/hooks/useTaskforce.d.ts +114 -118
  335. package/dist/hooks/useTaskforce.js +1106 -396
  336. package/dist/hooks/useUiNotice.d.ts +5 -1
  337. package/dist/hooks/useUiNotice.js +13 -2
  338. package/dist/hooks/useWorkspaceSyncController.d.ts +9 -0
  339. package/dist/hooks/useWorkspaceSyncController.js +159 -17
  340. package/dist/hooks/workspace/usePersistedAppUiState.d.ts +74 -0
  341. package/dist/hooks/workspace/usePersistedAppUiState.js +325 -0
  342. package/dist/hooks/workspace/usePersistedLayoutUiState.d.ts +76 -0
  343. package/dist/hooks/workspace/usePersistedLayoutUiState.js +479 -0
  344. package/dist/hooks/workspace/useTaskforceWorkspaceBootstrap.d.ts +2 -7
  345. package/dist/hooks/workspace/useTaskforceWorkspaceBootstrap.js +42 -31
  346. package/dist/hooks/workspace/workspaceLocalState.d.ts +42 -6
  347. package/dist/hooks/workspace/workspaceLocalState.js +213 -5
  348. package/dist/hooks/workstreams/workstreamHttpMutation.d.ts +23 -0
  349. package/dist/hooks/workstreams/workstreamHttpMutation.js +134 -0
  350. package/dist/localization/locales/en-US.d.ts +3 -3
  351. package/dist/localization/locales/en-US.js +3 -3
  352. package/dist/localization/locales/es-419.js +3 -3
  353. package/dist/localization/locales/pt-BR.js +3 -3
  354. package/dist/mcp/adminWorkspaceRegistrar.js +2 -40
  355. package/dist/mcp/aiProfileBootstrap.d.ts +3 -0
  356. package/dist/mcp/aiProfileBootstrap.js +4 -0
  357. package/dist/mcp/canonicalAssetHelpers.d.ts +16 -4
  358. package/dist/mcp/canonicalAssetHelpers.js +104 -35
  359. package/dist/mcp/clientIntegrations.d.ts +4 -2
  360. package/dist/mcp/clientIntegrations.js +104 -53
  361. package/dist/mcp/clientRegistry.d.ts +30 -0
  362. package/dist/mcp/clientRegistry.js +134 -0
  363. package/dist/mcp/collaborationRegistrar.js +21 -7
  364. package/dist/mcp/documentAssetRegistrar.js +227 -107
  365. package/dist/mcp/documentContentCommand.d.ts +94 -0
  366. package/dist/mcp/documentContentCommand.js +226 -0
  367. package/dist/mcp/documentHelpers.d.ts +14 -59
  368. package/dist/mcp/documentHelpers.js +52 -61
  369. package/dist/mcp/durableTaskMutationRouter.d.ts +65 -0
  370. package/dist/mcp/durableTaskMutationRouter.js +217 -0
  371. package/dist/mcp/durableTaskRelationshipMutationRouter.d.ts +38 -0
  372. package/dist/mcp/durableTaskRelationshipMutationRouter.js +168 -0
  373. package/dist/mcp/durableTaskRootMutationRouter.d.ts +64 -0
  374. package/dist/mcp/durableTaskRootMutationRouter.js +226 -0
  375. package/dist/mcp/gitWorktreeRoots.d.ts +2 -0
  376. package/dist/mcp/gitWorktreeRoots.js +19 -0
  377. package/dist/mcp/legacyServer.d.ts +1 -0
  378. package/dist/mcp/legacyServer.js +42 -0
  379. package/dist/mcp/localCliHealth.d.ts +56 -0
  380. package/dist/mcp/localCliHealth.js +170 -0
  381. package/dist/mcp/localServiceProxy.d.ts +23 -0
  382. package/dist/mcp/localServiceProxy.js +255 -0
  383. package/dist/mcp/mcpInputValidator.d.ts +17 -0
  384. package/dist/mcp/mcpInputValidator.js +58 -0
  385. package/dist/mcp/planningAttachmentCommandAdapter.d.ts +127 -0
  386. package/dist/mcp/planningAttachmentCommandAdapter.js +188 -0
  387. package/dist/mcp/programScaffoldCommandAdapter.d.ts +6 -0
  388. package/dist/mcp/programScaffoldCommandAdapter.js +39 -0
  389. package/dist/mcp/proxyServer.d.ts +1 -0
  390. package/dist/mcp/proxyServer.js +2 -0
  391. package/dist/mcp/runtime.d.ts +86 -1
  392. package/dist/mcp/runtime.js +4562 -2270
  393. package/dist/mcp/server.js +29 -2
  394. package/dist/mcp/sharedLocalServiceGateD.d.ts +115 -0
  395. package/dist/mcp/sharedLocalServiceGateD.js +344 -0
  396. package/dist/mcp/stdioLifecycle.d.ts +22 -0
  397. package/dist/mcp/stdioLifecycle.js +54 -0
  398. package/dist/mcp/taskAttachmentCommandAdapter.d.ts +190 -0
  399. package/dist/mcp/taskAttachmentCommandAdapter.js +464 -0
  400. package/dist/mcp/taskAttachmentHelpers.d.ts +8 -6
  401. package/dist/mcp/taskAttachmentHelpers.js +74 -2
  402. package/dist/mcp/taskAttachmentTypes.d.ts +26 -5
  403. package/dist/mcp/taskPlanCommand.d.ts +64 -0
  404. package/dist/mcp/taskPlanCommand.js +98 -0
  405. package/dist/mcp/taskPlanningRegistrar.js +253 -101
  406. package/dist/mcp/toolCallCompatibility.d.ts +6 -0
  407. package/dist/mcp/toolCallCompatibility.js +16 -0
  408. package/dist/mcp/toolCatalog.d.ts +3 -1
  409. package/dist/mcp/toolProfiles.d.ts +18 -0
  410. package/dist/mcp/toolProfiles.js +79 -0
  411. package/dist/mcp/toolRegistry.d.ts +102 -609
  412. package/dist/mcp/toolRegistry.js +108 -88
  413. package/dist/mcp/workflowExecutionRegistrar.d.ts +2 -0
  414. package/dist/mcp/workflowExecutionRegistrar.js +51 -0
  415. package/dist/migrations/taskSchemaMigrations.d.ts +35 -0
  416. package/dist/migrations/taskSchemaMigrations.js +1797 -4
  417. package/dist/migrations/taskUpdatedAtSyncDriftMigration.d.ts +20 -0
  418. package/dist/migrations/taskUpdatedAtSyncDriftMigration.js +153 -0
  419. package/dist/migrations/taskforceAgentDefinitionMigration.d.ts +26 -0
  420. package/dist/migrations/taskforceAgentDefinitionMigration.js +116 -0
  421. package/dist/plugins/vite.js +48 -17
  422. package/dist/public/Taskforce_Van.webp +0 -0
  423. package/dist/runtime/appGateDefinitions.d.ts +16 -10
  424. package/dist/runtime/appGateDefinitions.js +16 -10
  425. package/dist/runtime/appGates.d.ts +5 -4
  426. package/dist/runtime/appGates.js +4 -3
  427. package/dist/server/aiProfileAvatarAssets.d.ts +11 -8
  428. package/dist/server/aiProfileAvatarAssets.js +159 -70
  429. package/dist/server/auth.js +15 -1
  430. package/dist/server/cors.d.ts +2 -1
  431. package/dist/server/cors.js +45 -8
  432. package/dist/server/email.d.ts +3 -1
  433. package/dist/server/email.js +46 -8
  434. package/dist/server/index.d.ts +24 -1
  435. package/dist/server/index.js +342 -46
  436. package/dist/server/localDataOwnerPermit.d.ts +18 -0
  437. package/dist/server/localDataOwnerPermit.js +58 -0
  438. package/dist/server/localDatabaseIdentity.d.ts +14 -0
  439. package/dist/server/localDatabaseIdentity.js +69 -0
  440. package/dist/server/localRealtimeFileInvalidation.d.ts +1 -0
  441. package/dist/server/localRealtimeFileInvalidation.js +7 -0
  442. package/dist/server/localServiceLease.d.ts +62 -0
  443. package/dist/server/localServiceLease.js +477 -0
  444. package/dist/server/localServiceOwnershipBootstrap.d.ts +19 -0
  445. package/dist/server/localServiceOwnershipBootstrap.js +84 -0
  446. package/dist/server/localServiceSessions.d.ts +87 -0
  447. package/dist/server/localServiceSessions.js +309 -0
  448. package/dist/server/localServiceWindowsAcl.d.ts +8 -0
  449. package/dist/server/localServiceWindowsAcl.js +60 -0
  450. package/dist/server/localSyncProcessLockBootstrap.d.ts +3 -0
  451. package/dist/server/localSyncProcessLockBootstrap.js +16 -0
  452. package/dist/server/localWorkspaceSyncServerComposition.d.ts +59 -0
  453. package/dist/server/localWorkspaceSyncServerComposition.js +91 -0
  454. package/dist/server/localWorkspaceSyncServerRuntime.d.ts +119 -0
  455. package/dist/server/localWorkspaceSyncServerRuntime.js +1163 -0
  456. package/dist/server/rateLimit.d.ts +1 -0
  457. package/dist/server/rateLimit.js +16 -0
  458. package/dist/server/routes/admin.d.ts +2 -4
  459. package/dist/server/routes/admin.js +199 -337
  460. package/dist/server/routes/agentRoles.d.ts +13 -0
  461. package/dist/server/routes/agentRoles.js +273 -0
  462. package/dist/server/routes/agentSkills.d.ts +16 -0
  463. package/dist/server/routes/agentSkills.js +291 -0
  464. package/dist/server/routes/agents.d.ts +49 -0
  465. package/dist/server/routes/agents.js +1455 -0
  466. package/dist/server/routes/annotatedAttachments.js +46 -9
  467. package/dist/server/routes/assetAccess.d.ts +36 -0
  468. package/dist/server/routes/assetAccess.js +93 -0
  469. package/dist/server/routes/auth.d.ts +4 -3
  470. package/dist/server/routes/auth.js +236 -21
  471. package/dist/server/routes/authSupport.d.ts +3 -1
  472. package/dist/server/routes/authSupport.js +22 -8
  473. package/dist/server/routes/documentReviews.d.ts +2 -0
  474. package/dist/server/routes/documentReviews.js +155 -15
  475. package/dist/server/routes/documents.d.ts +1 -0
  476. package/dist/server/routes/documents.js +335 -141
  477. package/dist/server/routes/durableTaskHttpRouters.d.ts +165 -0
  478. package/dist/server/routes/durableTaskHttpRouters.js +89 -0
  479. package/dist/server/routes/localMcpHealth.d.ts +11 -0
  480. package/dist/server/routes/localMcpHealth.js +29 -0
  481. package/dist/server/routes/localService.d.ts +13 -0
  482. package/dist/server/routes/localService.js +444 -0
  483. package/dist/server/routes/localUpdate.d.ts +11 -0
  484. package/dist/server/routes/localUpdate.js +154 -0
  485. package/dist/server/routes/primitives.d.ts +27 -0
  486. package/dist/server/routes/primitives.js +18 -0
  487. package/dist/server/routes/resources.d.ts +1 -10
  488. package/dist/server/routes/resources.js +1 -153
  489. package/dist/server/routes/shared.d.ts +31 -2
  490. package/dist/server/routes/shared.js +394 -0
  491. package/dist/server/routes/sync.d.ts +2 -0
  492. package/dist/server/routes/sync.js +184 -272
  493. package/dist/server/routes/syncAuxRoutes.d.ts +3 -1
  494. package/dist/server/routes/syncAuxRoutes.js +9 -4
  495. package/dist/server/routes/syncCoordinatorLocalRoutes.d.ts +6 -0
  496. package/dist/server/routes/syncCoordinatorLocalRoutes.js +867 -0
  497. package/dist/server/routes/syncPullApplyRoutes.d.ts +29 -1
  498. package/dist/server/routes/syncPullApplyRoutes.js +520 -17
  499. package/dist/server/routes/syncPushRoutes.d.ts +33 -4
  500. package/dist/server/routes/syncPushRoutes.js +251 -62
  501. package/dist/server/routes/syncRouteTypes.d.ts +1 -1
  502. package/dist/server/routes/syncSnapshotRoutes.d.ts +15 -7
  503. package/dist/server/routes/syncSnapshotRoutes.js +95 -17
  504. package/dist/server/routes/syncV3DiagnosticsRoutes.d.ts +14 -0
  505. package/dist/server/routes/syncV3DiagnosticsRoutes.js +72 -0
  506. package/dist/server/routes/syncV3FeedRoutes.d.ts +20 -0
  507. package/dist/server/routes/syncV3FeedRoutes.js +462 -0
  508. package/dist/server/routes/syncV3LocalCaptureRoutes.d.ts +37 -0
  509. package/dist/server/routes/syncV3LocalCaptureRoutes.js +897 -0
  510. package/dist/server/routes/syncV3LocalDispatchRoutes.d.ts +17 -0
  511. package/dist/server/routes/syncV3LocalDispatchRoutes.js +280 -0
  512. package/dist/server/routes/syncV3LocalFeedApplyRoutes.d.ts +17 -0
  513. package/dist/server/routes/syncV3LocalFeedApplyRoutes.js +493 -0
  514. package/dist/server/routes/syncV3LocalOwnershipRoutes.d.ts +10 -0
  515. package/dist/server/routes/syncV3LocalOwnershipRoutes.js +51 -0
  516. package/dist/server/routes/syncV3LocalRecoveryRoutes.d.ts +12 -0
  517. package/dist/server/routes/syncV3LocalRecoveryRoutes.js +78 -0
  518. package/dist/server/routes/syncV3OperationRoutes.d.ts +35 -0
  519. package/dist/server/routes/syncV3OperationRoutes.js +1136 -0
  520. package/dist/server/routes/tasks.d.ts +0 -2
  521. package/dist/server/routes/tasks.js +932 -195
  522. package/dist/server/routes/workflows.d.ts +26 -0
  523. package/dist/server/routes/workflows.js +500 -0
  524. package/dist/server/routes.d.ts +1 -6
  525. package/dist/server/routes.js +148 -339
  526. package/dist/server/smtpTransport.d.ts +11 -3
  527. package/dist/server/smtpTransport.js +9 -2
  528. package/dist/server/start.js +42 -10
  529. package/dist/service/localServiceCli.d.ts +33 -0
  530. package/dist/service/localServiceCli.js +365 -0
  531. package/dist/service/localServiceClientLifecycle.d.ts +25 -0
  532. package/dist/service/localServiceClientLifecycle.js +128 -0
  533. package/dist/service/localServiceOpen.d.ts +17 -0
  534. package/dist/service/localServiceOpen.js +27 -0
  535. package/dist/services/agentRoleResolver.d.ts +4 -0
  536. package/dist/services/agentRoleResolver.js +7 -0
  537. package/dist/services/aiProfileAvatarGenerationService.d.ts +41 -0
  538. package/dist/services/aiProfileAvatarGenerationService.js +158 -0
  539. package/dist/services/avatarImageProvider.d.ts +33 -0
  540. package/dist/services/avatarImageProvider.js +140 -0
  541. package/dist/services/bedrockAnthropicMessagesModelGateway.d.ts +24 -0
  542. package/dist/services/bedrockAnthropicMessagesModelGateway.js +95 -0
  543. package/dist/services/bedrockMantleModelGateway.d.ts +43 -0
  544. package/dist/services/bedrockMantleModelGateway.js +81 -0
  545. package/dist/services/bedrockModelGateway.d.ts +26 -0
  546. package/dist/services/bedrockModelGateway.js +94 -0
  547. package/dist/services/modelGateway.d.ts +82 -0
  548. package/dist/services/modelGateway.js +61 -0
  549. package/dist/services/taskforceAgentAvatarImageProvider.d.ts +8 -0
  550. package/dist/services/taskforceAgentAvatarImageProvider.js +24 -0
  551. package/dist/services/taskforceAgentMcpBridge.d.ts +77 -0
  552. package/dist/services/taskforceAgentMcpBridge.js +527 -0
  553. package/dist/shared/agentRoleDefinition.d.ts +34 -0
  554. package/dist/shared/agentRoleDefinition.js +207 -0
  555. package/dist/shared/aiProfileAvatarEligibility.d.ts +10 -0
  556. package/dist/shared/aiProfileAvatarEligibility.js +27 -0
  557. package/dist/shared/aiProfileColors.d.ts +7 -0
  558. package/dist/shared/aiProfileColors.js +33 -0
  559. package/dist/shared/colorPalette.d.ts +3 -0
  560. package/dist/shared/colorPalette.js +20 -0
  561. package/dist/shared/commentProvenance.d.ts +4 -0
  562. package/dist/shared/commentProvenance.js +6 -0
  563. package/dist/shared/deletedTaskRetention.d.ts +2 -0
  564. package/dist/shared/deletedTaskRetention.js +7 -0
  565. package/dist/shared/passwordPolicy.d.ts +2 -1
  566. package/dist/shared/passwordPolicy.js +9 -0
  567. package/dist/shared/taskDeepLinks.d.ts +28 -0
  568. package/dist/shared/taskDeepLinks.js +48 -0
  569. package/dist/shared/taskRestoreDestination.d.ts +2 -0
  570. package/dist/shared/taskRestoreDestination.js +5 -0
  571. package/dist/shared/taskforceAgentDefinition.d.ts +88 -0
  572. package/dist/shared/taskforceAgentDefinition.js +434 -0
  573. package/dist/shared/taskforceAgentExecutionSnapshot.d.ts +50 -0
  574. package/dist/shared/taskforceAgentExecutionSnapshot.js +68 -0
  575. package/dist/shared/taskforceAgentModels.d.ts +56 -0
  576. package/dist/shared/taskforceAgentModels.js +314 -0
  577. package/dist/shared/taskforceAgentRunContext.d.ts +23 -0
  578. package/dist/shared/taskforceAgentRunContext.js +21 -0
  579. package/dist/shared/taskforceAgentRuntimeResolution.d.ts +31 -0
  580. package/dist/shared/taskforceAgentRuntimeResolution.js +72 -0
  581. package/dist/shared/taskforceAgentSkill.d.ts +33 -0
  582. package/dist/shared/taskforceAgentSkill.js +149 -0
  583. package/dist/shared/taxonomyLibrary.js +1 -1
  584. package/dist/storage/agentRoleStore.d.ts +91 -0
  585. package/dist/storage/agentRoleStore.js +385 -0
  586. package/dist/storage/databaseAdapter.d.ts +1 -0
  587. package/dist/storage/databaseAdapter.js +7 -1
  588. package/dist/storage/documentIntegrity.d.ts +12 -3
  589. package/dist/storage/documentIntegrity.js +105 -27
  590. package/dist/storage/objectStorageClient.d.ts +10 -4
  591. package/dist/storage/objectStorageClient.js +73 -43
  592. package/dist/storage/postgresAdapter.d.ts +2 -1
  593. package/dist/storage/postgresAdapter.js +38 -6
  594. package/dist/storage/postgresWorker.js +65 -1
  595. package/dist/storage/sqliteAdapter.d.ts +1 -1
  596. package/dist/storage/sqliteAdapter.js +7 -1
  597. package/dist/storage/sqliteWalHealth.d.ts +71 -0
  598. package/dist/storage/sqliteWalHealth.js +176 -0
  599. package/dist/storage/taskDataPath.d.ts +1 -0
  600. package/dist/storage/taskDataPath.js +20 -0
  601. package/dist/storage/taskforceAgentConversationStore.d.ts +66 -0
  602. package/dist/storage/taskforceAgentConversationStore.js +264 -0
  603. package/dist/storage/taskforceAgentSkillStore.d.ts +93 -0
  604. package/dist/storage/taskforceAgentSkillStore.js +355 -0
  605. package/dist/storage/taskforceAgentStore.d.ts +105 -0
  606. package/dist/storage/taskforceAgentStore.js +549 -0
  607. package/dist/storage/workflowStore.d.ts +223 -0
  608. package/dist/storage/workflowStore.js +1032 -0
  609. package/dist/storage/workspaceAssetStore.d.ts +70 -0
  610. package/dist/storage/workspaceAssetStore.js +418 -25
  611. package/dist/sync/aiProfileAvatarSyncPaths.d.ts +14 -0
  612. package/dist/sync/aiProfileAvatarSyncPaths.js +56 -0
  613. package/dist/sync/cloudSyncApi.d.ts +329 -0
  614. package/dist/sync/cloudSyncApi.js +596 -4
  615. package/dist/sync/collaborationSyncPayload.d.ts +5 -1
  616. package/dist/sync/collaborationSyncPayload.js +213 -1
  617. package/dist/sync/collaborationSyncState.d.ts +23 -3
  618. package/dist/sync/collaborationSyncState.js +92 -3
  619. package/dist/sync/contentSyncPayload.d.ts +9 -0
  620. package/dist/sync/contentSyncPayload.js +29 -0
  621. package/dist/sync/contentSyncState.d.ts +79 -4
  622. package/dist/sync/contentSyncState.js +1113 -313
  623. package/dist/sync/coordinator/localSyncBrowserApplyPermitContext.d.ts +39 -0
  624. package/dist/sync/coordinator/localSyncBrowserApplyPermitContext.js +234 -0
  625. package/dist/sync/coordinator/localSyncBrowserAuthorityCapability.d.ts +7 -0
  626. package/dist/sync/coordinator/localSyncBrowserAuthorityCapability.js +10 -0
  627. package/dist/sync/coordinator/localSyncCommittedApplyPolicy.d.ts +7 -0
  628. package/dist/sync/coordinator/localSyncCommittedApplyPolicy.js +41 -0
  629. package/dist/sync/coordinator/localSyncCoordinatorBrowserClient.d.ts +178 -0
  630. package/dist/sync/coordinator/localSyncCoordinatorBrowserClient.js +131 -0
  631. package/dist/sync/coordinator/localSyncCoordinatorCommandLifecycle.d.ts +25 -0
  632. package/dist/sync/coordinator/localSyncCoordinatorCommandLifecycle.js +200 -0
  633. package/dist/sync/coordinator/localSyncCoordinatorHost.d.ts +84 -0
  634. package/dist/sync/coordinator/localSyncCoordinatorHost.js +435 -0
  635. package/dist/sync/coordinator/localSyncCoordinatorRouteServices.d.ts +33 -0
  636. package/dist/sync/coordinator/localSyncCoordinatorRouteServices.js +1 -0
  637. package/dist/sync/coordinator/localSyncCoordinatorStore.d.ts +122 -0
  638. package/dist/sync/coordinator/localSyncCoordinatorStore.js +1039 -0
  639. package/dist/sync/coordinator/localSyncCoordinatorTypes.d.ts +82 -0
  640. package/dist/sync/coordinator/localSyncCoordinatorTypes.js +9 -0
  641. package/dist/sync/coordinator/localSyncDispatchTracker.d.ts +15 -0
  642. package/dist/sync/coordinator/localSyncDispatchTracker.js +68 -0
  643. package/dist/sync/coordinator/localSyncExecutionPermitStore.d.ts +200 -0
  644. package/dist/sync/coordinator/localSyncExecutionPermitStore.js +1388 -0
  645. package/dist/sync/coordinator/localSyncExecutionPermitTypes.d.ts +52 -0
  646. package/dist/sync/coordinator/localSyncExecutionPermitTypes.js +8 -0
  647. package/dist/sync/coordinator/localSyncOwnershipDrainBarrier.d.ts +33 -0
  648. package/dist/sync/coordinator/localSyncOwnershipDrainBarrier.js +83 -0
  649. package/dist/sync/coordinator/localSyncPermitTransactionHooks.d.ts +9 -0
  650. package/dist/sync/coordinator/localSyncPermitTransactionHooks.js +27 -0
  651. package/dist/sync/coordinator/localSyncProcessLock.d.ts +12 -0
  652. package/dist/sync/coordinator/localSyncProcessLock.js +212 -0
  653. package/dist/sync/coordinator/localSyncV3DispatchRecoveryReconciler.d.ts +17 -0
  654. package/dist/sync/coordinator/localSyncV3DispatchRecoveryReconciler.js +82 -0
  655. package/dist/sync/coordinator/localWorkspaceSyncRunner.d.ts +134 -0
  656. package/dist/sync/coordinator/localWorkspaceSyncRunner.js +981 -0
  657. package/dist/sync/coordinator/localWorkspaceSyncRunnerState.d.ts +189 -0
  658. package/dist/sync/coordinator/localWorkspaceSyncRunnerState.js +961 -0
  659. package/dist/sync/coordinator/workspaceSyncCloudCredentialValidator.d.ts +19 -0
  660. package/dist/sync/coordinator/workspaceSyncCloudCredentialValidator.js +83 -0
  661. package/dist/sync/coordinator/workspaceSyncCredentialBroker.d.ts +117 -0
  662. package/dist/sync/coordinator/workspaceSyncCredentialBroker.js +323 -0
  663. package/dist/sync/coordinator/workspaceSyncLocalAccessBootstrap.d.ts +11 -0
  664. package/dist/sync/coordinator/workspaceSyncLocalAccessBootstrap.js +51 -0
  665. package/dist/sync/coordinator/workspaceSyncTransportGateway.d.ts +139 -0
  666. package/dist/sync/coordinator/workspaceSyncTransportGateway.js +738 -0
  667. package/dist/sync/engine/localWorkspaceContentManifestService.d.ts +21 -0
  668. package/dist/sync/engine/localWorkspaceContentManifestService.js +44 -0
  669. package/dist/sync/engine/workspaceSyncAtomicLocalPublisher.d.ts +36 -0
  670. package/dist/sync/engine/workspaceSyncAtomicLocalPublisher.js +203 -0
  671. package/dist/sync/engine/workspaceSyncContentLifecycleAdapter.d.ts +21 -0
  672. package/dist/sync/engine/workspaceSyncContentLifecycleAdapter.js +13 -0
  673. package/dist/sync/engine/workspaceSyncContentPullObligationStore.d.ts +65 -0
  674. package/dist/sync/engine/workspaceSyncContentPullObligationStore.js +160 -0
  675. package/dist/sync/engine/workspaceSyncContentVersionStore.d.ts +216 -0
  676. package/dist/sync/engine/workspaceSyncContentVersionStore.js +1068 -0
  677. package/dist/sync/engine/workspaceSyncEngineBrowserGatewayRemoteServices.d.ts +28 -0
  678. package/dist/sync/engine/workspaceSyncEngineBrowserGatewayRemoteServices.js +543 -0
  679. package/dist/sync/engine/workspaceSyncEngineContracts.d.ts +78 -0
  680. package/dist/sync/engine/workspaceSyncEngineContracts.js +1 -0
  681. package/dist/sync/engine/workspaceSyncEngineControlPlane.d.ts +37 -0
  682. package/dist/sync/engine/workspaceSyncEngineControlPlane.js +79 -0
  683. package/dist/sync/engine/workspaceSyncEngineIdentity.d.ts +1 -0
  684. package/dist/sync/engine/workspaceSyncEngineIdentity.js +4 -0
  685. package/dist/sync/engine/workspaceSyncEngineLifecyclePolicy.d.ts +68 -0
  686. package/dist/sync/engine/workspaceSyncEngineLifecyclePolicy.js +180 -0
  687. package/dist/sync/engine/workspaceSyncEngineLocalApply.d.ts +72 -0
  688. package/dist/sync/engine/workspaceSyncEngineLocalApply.js +132 -0
  689. package/dist/sync/engine/workspaceSyncEngineLocalServices.d.ts +70 -0
  690. package/dist/sync/engine/workspaceSyncEngineLocalServices.js +25 -0
  691. package/dist/sync/engine/workspaceSyncEngineParity.d.ts +8 -0
  692. package/dist/sync/engine/workspaceSyncEngineParity.js +7 -0
  693. package/dist/sync/engine/workspaceSyncEnginePullPolicy.d.ts +32 -0
  694. package/dist/sync/engine/workspaceSyncEnginePullPolicy.js +27 -0
  695. package/dist/sync/engine/workspaceSyncEnginePushCompletion.d.ts +20 -0
  696. package/dist/sync/engine/workspaceSyncEnginePushCompletion.js +87 -0
  697. package/dist/sync/engine/workspaceSyncEngineRecovery.d.ts +56 -0
  698. package/dist/sync/engine/workspaceSyncEngineRecovery.js +288 -0
  699. package/dist/sync/engine/workspaceSyncEngineRemoteServices.d.ts +104 -0
  700. package/dist/sync/engine/workspaceSyncEngineRemoteServices.js +21 -0
  701. package/dist/sync/engine/workspaceSyncEngineRuntime.d.ts +61 -0
  702. package/dist/sync/engine/workspaceSyncEngineRuntime.js +59 -0
  703. package/dist/sync/engine/workspaceSyncEngineServerApplyBoundary.d.ts +28 -0
  704. package/dist/sync/engine/workspaceSyncEngineServerApplyBoundary.js +86 -0
  705. package/dist/sync/engine/workspaceSyncEngineServerLocalServices.d.ts +73 -0
  706. package/dist/sync/engine/workspaceSyncEngineServerLocalServices.js +452 -0
  707. package/dist/sync/engine/workspaceSyncEngineServerRemoteServices.d.ts +23 -0
  708. package/dist/sync/engine/workspaceSyncEngineServerRemoteServices.js +451 -0
  709. package/dist/sync/engine/workspaceSyncEngineServerRunnerOperations.d.ts +125 -0
  710. package/dist/sync/engine/workspaceSyncEngineServerRunnerOperations.js +1124 -0
  711. package/dist/sync/engine/workspaceSyncEngineServerSnapshotReader.d.ts +63 -0
  712. package/dist/sync/engine/workspaceSyncEngineServerSnapshotReader.js +276 -0
  713. package/dist/sync/engine/workspaceSyncEngineTransferCompletion.d.ts +20 -0
  714. package/dist/sync/engine/workspaceSyncEngineTransferCompletion.js +37 -0
  715. package/dist/sync/engine/workspaceSyncEngineTransferTypes.d.ts +7 -0
  716. package/dist/sync/engine/workspaceSyncEngineTransferTypes.js +1 -0
  717. package/dist/sync/engine/workspaceSyncEngineTransfers.d.ts +240 -0
  718. package/dist/sync/engine/workspaceSyncEngineTransfers.js +1184 -0
  719. package/dist/sync/engine/workspaceSyncEngineV3LocalFeedApply.d.ts +39 -0
  720. package/dist/sync/engine/workspaceSyncEngineV3LocalFeedApply.js +39 -0
  721. package/dist/sync/engine/workspaceSyncImmutableContentGcRunner.d.ts +25 -0
  722. package/dist/sync/engine/workspaceSyncImmutableContentGcRunner.js +83 -0
  723. package/dist/sync/engine/workspaceSyncImmutableContentProvider.d.ts +71 -0
  724. package/dist/sync/engine/workspaceSyncImmutableContentProvider.js +209 -0
  725. package/dist/sync/engine/workspaceSyncImmutableContentStager.d.ts +32 -0
  726. package/dist/sync/engine/workspaceSyncImmutableContentStager.js +202 -0
  727. package/dist/sync/engine/workspaceSyncPublishedContentResolver.d.ts +43 -0
  728. package/dist/sync/engine/workspaceSyncPublishedContentResolver.js +142 -0
  729. package/dist/sync/engine/workspaceSyncServerContentRuntime.d.ts +26 -0
  730. package/dist/sync/engine/workspaceSyncServerContentRuntime.js +41 -0
  731. package/dist/sync/engine/workspaceSyncServerDataServices.d.ts +44 -0
  732. package/dist/sync/engine/workspaceSyncServerDataServices.js +143 -0
  733. package/dist/sync/engine/workspaceSyncTransferEvidence.d.ts +39 -0
  734. package/dist/sync/engine/workspaceSyncTransferEvidence.js +45 -0
  735. package/dist/sync/engine/workspaceSyncV2ChangeDispatcher.d.ts +44 -0
  736. package/dist/sync/engine/workspaceSyncV2ChangeDispatcher.js +990 -0
  737. package/dist/sync/engine/workspaceSyncV2PreparedContent.d.ts +82 -0
  738. package/dist/sync/engine/workspaceSyncV2PreparedContent.js +219 -0
  739. package/dist/sync/planningCanonicalFields.d.ts +41 -0
  740. package/dist/sync/planningCanonicalFields.js +211 -0
  741. package/dist/sync/planningSyncPayload.d.ts +5 -1
  742. package/dist/sync/planningSyncPayload.js +88 -4
  743. package/dist/sync/syncApplyHandlers.d.ts +98 -8
  744. package/dist/sync/syncApplyHandlers.js +816 -78
  745. package/dist/sync/syncResourceAdapters.d.ts +10 -0
  746. package/dist/sync/syncResourceAdapters.js +21 -1
  747. package/dist/sync/syncService.d.ts +57 -1
  748. package/dist/sync/syncService.js +1085 -138
  749. package/dist/sync/taskNestedContent.d.ts +2 -0
  750. package/dist/sync/taskNestedContent.js +8 -0
  751. package/dist/sync/taskSyncChangeKey.js +0 -1
  752. package/dist/sync/taskSyncPayload.d.ts +0 -1
  753. package/dist/sync/taskSyncPayload.js +14 -3
  754. package/dist/sync/v3/canonicalWorkspaceSyncJson.d.ts +2 -0
  755. package/dist/sync/v3/canonicalWorkspaceSyncJson.js +26 -0
  756. package/dist/sync/v3/combinedFeedCapability.d.ts +21 -0
  757. package/dist/sync/v3/combinedFeedCapability.js +80 -0
  758. package/dist/sync/v3/combinedFeedPrerequisites.d.ts +18 -0
  759. package/dist/sync/v3/combinedFeedPrerequisites.js +184 -0
  760. package/dist/sync/v3/durableInitiativeMutationRouter.d.ts +61 -0
  761. package/dist/sync/v3/durableInitiativeMutationRouter.js +287 -0
  762. package/dist/sync/v3/durableOperationReplay.d.ts +36 -0
  763. package/dist/sync/v3/durableOperationReplay.js +103 -0
  764. package/dist/sync/v3/durableTaskAttachmentLinksMutationRouter.d.ts +49 -0
  765. package/dist/sync/v3/durableTaskAttachmentLinksMutationRouter.js +198 -0
  766. package/dist/sync/v3/durableTaskChecklistMutationRouter.d.ts +47 -0
  767. package/dist/sync/v3/durableTaskChecklistMutationRouter.js +182 -0
  768. package/dist/sync/v3/durableTaskCommentMutationRouter.d.ts +47 -0
  769. package/dist/sync/v3/durableTaskCommentMutationRouter.js +191 -0
  770. package/dist/sync/v3/durableTaskHttpBulkMutationRouter.d.ts +60 -0
  771. package/dist/sync/v3/durableTaskHttpBulkMutationRouter.js +320 -0
  772. package/dist/sync/v3/durableTaskHttpRootMutationRouter.d.ts +40 -0
  773. package/dist/sync/v3/durableTaskHttpRootMutationRouter.js +518 -0
  774. package/dist/sync/v3/durableTaxonomyMutationRouter.d.ts +63 -0
  775. package/dist/sync/v3/durableTaxonomyMutationRouter.js +289 -0
  776. package/dist/sync/v3/durableWorkflowRuntimeMutationRouter.d.ts +77 -0
  777. package/dist/sync/v3/durableWorkflowRuntimeMutationRouter.js +361 -0
  778. package/dist/sync/v3/durableWorkstreamMutationRouter.d.ts +61 -0
  779. package/dist/sync/v3/durableWorkstreamMutationRouter.js +287 -0
  780. package/dist/sync/v3/durableWorkstreamTaskOrderMutationRouter.d.ts +42 -0
  781. package/dist/sync/v3/durableWorkstreamTaskOrderMutationRouter.js +122 -0
  782. package/dist/sync/v3/entityEventLegacyAdoptionContract.d.ts +6 -0
  783. package/dist/sync/v3/entityEventLegacyAdoptionContract.js +6 -0
  784. package/dist/sync/v3/entityEventLegacyAdoptionService.d.ts +62 -0
  785. package/dist/sync/v3/entityEventLegacyAdoptionService.js +180 -0
  786. package/dist/sync/v3/initiativeActivityAuthoritativeRevision.d.ts +11 -0
  787. package/dist/sync/v3/initiativeActivityAuthoritativeRevision.js +23 -0
  788. package/dist/sync/v3/initiativeActivityIdentity.d.ts +8 -0
  789. package/dist/sync/v3/initiativeActivityIdentity.js +14 -0
  790. package/dist/sync/v3/initiativeCoexistence.d.ts +26 -0
  791. package/dist/sync/v3/initiativeCoexistence.js +148 -0
  792. package/dist/sync/v3/initiativeFeedActivationCapability.d.ts +6 -0
  793. package/dist/sync/v3/initiativeFeedActivationCapability.js +16 -0
  794. package/dist/sync/v3/initiativeMutationPayload.d.ts +26 -0
  795. package/dist/sync/v3/initiativeMutationPayload.js +144 -0
  796. package/dist/sync/v3/initiativeMutationService.d.ts +62 -0
  797. package/dist/sync/v3/initiativeMutationService.js +206 -0
  798. package/dist/sync/v3/localEntityEventLegacyAdoption.d.ts +31 -0
  799. package/dist/sync/v3/localEntityEventLegacyAdoption.js +607 -0
  800. package/dist/sync/v3/localInitiativeOutboxHandler.d.ts +8 -0
  801. package/dist/sync/v3/localInitiativeOutboxHandler.js +88 -0
  802. package/dist/sync/v3/localInitiativeOutboxService.d.ts +50 -0
  803. package/dist/sync/v3/localInitiativeOutboxService.js +495 -0
  804. package/dist/sync/v3/localOperationIdentityStore.d.ts +81 -0
  805. package/dist/sync/v3/localOperationIdentityStore.js +388 -0
  806. package/dist/sync/v3/localOutboxDispatchCapability.d.ts +7 -0
  807. package/dist/sync/v3/localOutboxDispatchCapability.js +13 -0
  808. package/dist/sync/v3/localOutboxDispatchRuntime.d.ts +16 -0
  809. package/dist/sync/v3/localOutboxDispatchRuntime.js +269 -0
  810. package/dist/sync/v3/localOutboxDispatcher.d.ts +53 -0
  811. package/dist/sync/v3/localOutboxDispatcher.js +362 -0
  812. package/dist/sync/v3/localOutboxDrainClient.d.ts +50 -0
  813. package/dist/sync/v3/localOutboxDrainClient.js +250 -0
  814. package/dist/sync/v3/localOutboxOperationHandler.d.ts +31 -0
  815. package/dist/sync/v3/localOutboxOperationHandler.js +10 -0
  816. package/dist/sync/v3/localOutboxRecoveryClient.d.ts +14 -0
  817. package/dist/sync/v3/localOutboxRecoveryClient.js +45 -0
  818. package/dist/sync/v3/localOutboxRecoveryPreparationService.d.ts +12 -0
  819. package/dist/sync/v3/localOutboxRecoveryPreparationService.js +151 -0
  820. package/dist/sync/v3/localSyncIdentityStore.d.ts +9 -0
  821. package/dist/sync/v3/localSyncIdentityStore.js +43 -0
  822. package/dist/sync/v3/localTaskAttachmentLinksOutboxHandler.d.ts +10 -0
  823. package/dist/sync/v3/localTaskAttachmentLinksOutboxHandler.js +70 -0
  824. package/dist/sync/v3/localTaskAttachmentLinksOutboxService.d.ts +45 -0
  825. package/dist/sync/v3/localTaskAttachmentLinksOutboxService.js +291 -0
  826. package/dist/sync/v3/localTaskChecklistOutboxHandler.d.ts +10 -0
  827. package/dist/sync/v3/localTaskChecklistOutboxHandler.js +54 -0
  828. package/dist/sync/v3/localTaskChecklistOutboxService.d.ts +47 -0
  829. package/dist/sync/v3/localTaskChecklistOutboxService.js +221 -0
  830. package/dist/sync/v3/localTaskCommentOutboxHandler.d.ts +10 -0
  831. package/dist/sync/v3/localTaskCommentOutboxHandler.js +94 -0
  832. package/dist/sync/v3/localTaskCommentOutboxService.d.ts +75 -0
  833. package/dist/sync/v3/localTaskCommentOutboxService.js +391 -0
  834. package/dist/sync/v3/localTaskCreateClient.d.ts +27 -0
  835. package/dist/sync/v3/localTaskCreateClient.js +209 -0
  836. package/dist/sync/v3/localTaskCreateOutboxHandler.d.ts +8 -0
  837. package/dist/sync/v3/localTaskCreateOutboxHandler.js +147 -0
  838. package/dist/sync/v3/localTaskCreateOutboxService.d.ts +77 -0
  839. package/dist/sync/v3/localTaskCreateOutboxService.js +397 -0
  840. package/dist/sync/v3/localTaskDeleteClient.d.ts +10 -0
  841. package/dist/sync/v3/localTaskDeleteClient.js +23 -0
  842. package/dist/sync/v3/localTaskDeleteOutboxHandler.d.ts +8 -0
  843. package/dist/sync/v3/localTaskDeleteOutboxHandler.js +54 -0
  844. package/dist/sync/v3/localTaskDeleteOutboxService.d.ts +38 -0
  845. package/dist/sync/v3/localTaskDeleteOutboxService.js +235 -0
  846. package/dist/sync/v3/localTaskLegacyRootAdoption.d.ts +28 -0
  847. package/dist/sync/v3/localTaskLegacyRootAdoption.js +219 -0
  848. package/dist/sync/v3/localTaskLifecycleClient.d.ts +49 -0
  849. package/dist/sync/v3/localTaskLifecycleClient.js +57 -0
  850. package/dist/sync/v3/localTaskLifecycleOutboxHandler.d.ts +8 -0
  851. package/dist/sync/v3/localTaskLifecycleOutboxHandler.js +94 -0
  852. package/dist/sync/v3/localTaskLifecycleOutboxService.d.ts +60 -0
  853. package/dist/sync/v3/localTaskLifecycleOutboxService.js +304 -0
  854. package/dist/sync/v3/localTaskMetadataClient.d.ts +13 -0
  855. package/dist/sync/v3/localTaskMetadataClient.js +30 -0
  856. package/dist/sync/v3/localTaskMetadataOutboxHandler.d.ts +8 -0
  857. package/dist/sync/v3/localTaskMetadataOutboxHandler.js +70 -0
  858. package/dist/sync/v3/localTaskMetadataOutboxService.d.ts +48 -0
  859. package/dist/sync/v3/localTaskMetadataOutboxService.js +229 -0
  860. package/dist/sync/v3/localTaskOperationClient.d.ts +72 -0
  861. package/dist/sync/v3/localTaskOperationClient.js +195 -0
  862. package/dist/sync/v3/localTaskRelationshipOutboxHandler.d.ts +8 -0
  863. package/dist/sync/v3/localTaskRelationshipOutboxHandler.js +114 -0
  864. package/dist/sync/v3/localTaskRelationshipOutboxService.d.ts +45 -0
  865. package/dist/sync/v3/localTaskRelationshipOutboxService.js +192 -0
  866. package/dist/sync/v3/localTaskRestoreClient.d.ts +13 -0
  867. package/dist/sync/v3/localTaskRestoreClient.js +32 -0
  868. package/dist/sync/v3/localTaskRestoreOutboxHandler.d.ts +8 -0
  869. package/dist/sync/v3/localTaskRestoreOutboxHandler.js +41 -0
  870. package/dist/sync/v3/localTaskRestoreOutboxService.d.ts +56 -0
  871. package/dist/sync/v3/localTaskRestoreOutboxService.js +323 -0
  872. package/dist/sync/v3/localTaskStatusClient.d.ts +17 -0
  873. package/dist/sync/v3/localTaskStatusClient.js +35 -0
  874. package/dist/sync/v3/localTaskStatusOutboxHandler.d.ts +8 -0
  875. package/dist/sync/v3/localTaskStatusOutboxHandler.js +75 -0
  876. package/dist/sync/v3/localTaskStatusOutboxService.d.ts +53 -0
  877. package/dist/sync/v3/localTaskStatusOutboxService.js +422 -0
  878. package/dist/sync/v3/localTaxonomyCompositeOutboxService.d.ts +34 -0
  879. package/dist/sync/v3/localTaxonomyCompositeOutboxService.js +290 -0
  880. package/dist/sync/v3/localTaxonomyOutboxHandler.d.ts +9 -0
  881. package/dist/sync/v3/localTaxonomyOutboxHandler.js +106 -0
  882. package/dist/sync/v3/localTaxonomyOutboxService.d.ts +30 -0
  883. package/dist/sync/v3/localTaxonomyOutboxService.js +181 -0
  884. package/dist/sync/v3/localWorkflowRuntimeOutboxHandler.d.ts +8 -0
  885. package/dist/sync/v3/localWorkflowRuntimeOutboxHandler.js +113 -0
  886. package/dist/sync/v3/localWorkflowRuntimeOutboxService.d.ts +37 -0
  887. package/dist/sync/v3/localWorkflowRuntimeOutboxService.js +330 -0
  888. package/dist/sync/v3/localWorkspaceSyncServerOutboxDispatcher.d.ts +63 -0
  889. package/dist/sync/v3/localWorkspaceSyncServerOutboxDispatcher.js +264 -0
  890. package/dist/sync/v3/localWorkstreamOutboxHandler.d.ts +8 -0
  891. package/dist/sync/v3/localWorkstreamOutboxHandler.js +102 -0
  892. package/dist/sync/v3/localWorkstreamOutboxService.d.ts +52 -0
  893. package/dist/sync/v3/localWorkstreamOutboxService.js +579 -0
  894. package/dist/sync/v3/localWorkstreamTaskOrderOutboxHandler.d.ts +10 -0
  895. package/dist/sync/v3/localWorkstreamTaskOrderOutboxHandler.js +57 -0
  896. package/dist/sync/v3/localWorkstreamTaskOrderOutboxService.d.ts +30 -0
  897. package/dist/sync/v3/localWorkstreamTaskOrderOutboxService.js +128 -0
  898. package/dist/sync/v3/planningActivation.d.ts +13 -0
  899. package/dist/sync/v3/planningActivation.js +33 -0
  900. package/dist/sync/v3/planningAttachmentActivityValidation.d.ts +9 -0
  901. package/dist/sync/v3/planningAttachmentActivityValidation.js +87 -0
  902. package/dist/sync/v3/programScaffoldService.d.ts +143 -0
  903. package/dist/sync/v3/programScaffoldService.js +478 -0
  904. package/dist/sync/v3/syncDurabilityStore.d.ts +773 -0
  905. package/dist/sync/v3/syncDurabilityStore.js +4635 -0
  906. package/dist/sync/v3/taskActivityAuthoritativeRevision.d.ts +16 -0
  907. package/dist/sync/v3/taskActivityAuthoritativeRevision.js +67 -0
  908. package/dist/sync/v3/taskActivityJournal.d.ts +20 -0
  909. package/dist/sync/v3/taskActivityJournal.js +195 -0
  910. package/dist/sync/v3/taskAttachmentLinksActivityIdentity.d.ts +6 -0
  911. package/dist/sync/v3/taskAttachmentLinksActivityIdentity.js +14 -0
  912. package/dist/sync/v3/taskAttachmentLinksMutationService.d.ts +111 -0
  913. package/dist/sync/v3/taskAttachmentLinksMutationService.js +202 -0
  914. package/dist/sync/v3/taskChecklistActivityIdentity.d.ts +6 -0
  915. package/dist/sync/v3/taskChecklistActivityIdentity.js +14 -0
  916. package/dist/sync/v3/taskChecklistMutationService.d.ts +92 -0
  917. package/dist/sync/v3/taskChecklistMutationService.js +156 -0
  918. package/dist/sync/v3/taskCommentActivityIdentity.d.ts +7 -0
  919. package/dist/sync/v3/taskCommentActivityIdentity.js +15 -0
  920. package/dist/sync/v3/taskCommentMutationService.d.ts +150 -0
  921. package/dist/sync/v3/taskCommentMutationService.js +392 -0
  922. package/dist/sync/v3/taskCommentReconcileProvenance.d.ts +58 -0
  923. package/dist/sync/v3/taskCommentReconcileProvenance.js +170 -0
  924. package/dist/sync/v3/taskCreateActivation.d.ts +19 -0
  925. package/dist/sync/v3/taskCreateActivation.js +84 -0
  926. package/dist/sync/v3/taskCreateActivityIdentity.d.ts +7 -0
  927. package/dist/sync/v3/taskCreateActivityIdentity.js +18 -0
  928. package/dist/sync/v3/taskCreateMutationService.d.ts +103 -0
  929. package/dist/sync/v3/taskCreateMutationService.js +283 -0
  930. package/dist/sync/v3/taskDeleteActivation.d.ts +7 -0
  931. package/dist/sync/v3/taskDeleteActivation.js +14 -0
  932. package/dist/sync/v3/taskDeleteMutationService.d.ts +35 -0
  933. package/dist/sync/v3/taskDeleteMutationService.js +133 -0
  934. package/dist/sync/v3/taskLegacyRootAdoptionService.d.ts +78 -0
  935. package/dist/sync/v3/taskLegacyRootAdoptionService.js +175 -0
  936. package/dist/sync/v3/taskLifecycleActivityIdentity.d.ts +9 -0
  937. package/dist/sync/v3/taskLifecycleActivityIdentity.js +18 -0
  938. package/dist/sync/v3/taskLifecycleMutationPayload.d.ts +5 -0
  939. package/dist/sync/v3/taskLifecycleMutationPayload.js +28 -0
  940. package/dist/sync/v3/taskLifecycleMutationService.d.ts +66 -0
  941. package/dist/sync/v3/taskLifecycleMutationService.js +92 -0
  942. package/dist/sync/v3/taskMetadataActivation.d.ts +12 -0
  943. package/dist/sync/v3/taskMetadataActivation.js +38 -0
  944. package/dist/sync/v3/taskMetadataActivityIdentity.d.ts +7 -0
  945. package/dist/sync/v3/taskMetadataActivityIdentity.js +18 -0
  946. package/dist/sync/v3/taskMetadataCoexistence.d.ts +37 -0
  947. package/dist/sync/v3/taskMetadataCoexistence.js +134 -0
  948. package/dist/sync/v3/taskMetadataMutationService.d.ts +71 -0
  949. package/dist/sync/v3/taskMetadataMutationService.js +199 -0
  950. package/dist/sync/v3/taskRelationshipLegacyAdoptionService.d.ts +48 -0
  951. package/dist/sync/v3/taskRelationshipLegacyAdoptionService.js +164 -0
  952. package/dist/sync/v3/taskRelationshipMutationService.d.ts +50 -0
  953. package/dist/sync/v3/taskRelationshipMutationService.js +148 -0
  954. package/dist/sync/v3/taskRestoreMutationService.d.ts +90 -0
  955. package/dist/sync/v3/taskRestoreMutationService.js +179 -0
  956. package/dist/sync/v3/taskStatusActivation.d.ts +7 -0
  957. package/dist/sync/v3/taskStatusActivation.js +15 -0
  958. package/dist/sync/v3/taskStatusMutationService.d.ts +76 -0
  959. package/dist/sync/v3/taskStatusMutationService.js +308 -0
  960. package/dist/sync/v3/taskWorkflowMutationPayload.d.ts +4 -0
  961. package/dist/sync/v3/taskWorkflowMutationPayload.js +22 -0
  962. package/dist/sync/v3/taskWorkflowMutationService.d.ts +64 -0
  963. package/dist/sync/v3/taskWorkflowMutationService.js +102 -0
  964. package/dist/sync/v3/taxonomyCoexistence.d.ts +10 -0
  965. package/dist/sync/v3/taxonomyCoexistence.js +19 -0
  966. package/dist/sync/v3/taxonomyCompositeMutationService.d.ts +110 -0
  967. package/dist/sync/v3/taxonomyCompositeMutationService.js +304 -0
  968. package/dist/sync/v3/taxonomyMutationService.d.ts +57 -0
  969. package/dist/sync/v3/taxonomyMutationService.js +106 -0
  970. package/dist/sync/v3/taxonomyStateMutation.d.ts +22 -0
  971. package/dist/sync/v3/taxonomyStateMutation.js +49 -0
  972. package/dist/sync/v3/taxonomySyncPayload.d.ts +9 -0
  973. package/dist/sync/v3/taxonomySyncPayload.js +199 -0
  974. package/dist/sync/v3/workflowAssignmentSync.d.ts +22 -0
  975. package/dist/sync/v3/workflowAssignmentSync.js +213 -0
  976. package/dist/sync/v3/workflowRuntimeMutationService.d.ts +89 -0
  977. package/dist/sync/v3/workflowRuntimeMutationService.js +359 -0
  978. package/dist/sync/v3/workflowRuntimeOperationIdentity.d.ts +13 -0
  979. package/dist/sync/v3/workflowRuntimeOperationIdentity.js +35 -0
  980. package/dist/sync/v3/workflowRuntimeSync.d.ts +141 -0
  981. package/dist/sync/v3/workflowRuntimeSync.js +485 -0
  982. package/dist/sync/v3/workspaceSyncJournalReader.d.ts +43 -0
  983. package/dist/sync/v3/workspaceSyncJournalReader.js +45 -0
  984. package/dist/sync/v3/workspaceSyncLocalOwnershipSnapshot.d.ts +28 -0
  985. package/dist/sync/v3/workspaceSyncLocalOwnershipSnapshot.js +81 -0
  986. package/dist/sync/v3/workspaceSyncPayloadFingerprint.d.ts +1 -0
  987. package/dist/sync/v3/workspaceSyncPayloadFingerprint.js +5 -0
  988. package/dist/sync/v3/workspaceSyncV2ProjectionExclusions.d.ts +16 -0
  989. package/dist/sync/v3/workspaceSyncV2ProjectionExclusions.js +161 -0
  990. package/dist/sync/v3/workspaceSyncV3AttachmentApplyObligationStore.d.ts +83 -0
  991. package/dist/sync/v3/workspaceSyncV3AttachmentApplyObligationStore.js +161 -0
  992. package/dist/sync/v3/workspaceSyncV3AttachmentAssetHydration.d.ts +16 -0
  993. package/dist/sync/v3/workspaceSyncV3AttachmentAssetHydration.js +90 -0
  994. package/dist/sync/v3/workspaceSyncV3CloudOperationHandler.d.ts +65 -0
  995. package/dist/sync/v3/workspaceSyncV3CloudOperationHandler.js +356 -0
  996. package/dist/sync/v3/workspaceSyncV3CombinedCoverage.d.ts +51 -0
  997. package/dist/sync/v3/workspaceSyncV3CombinedCoverage.js +171 -0
  998. package/dist/sync/v3/workspaceSyncV3CombinedFeedOrchestrator.d.ts +43 -0
  999. package/dist/sync/v3/workspaceSyncV3CombinedFeedOrchestrator.js +535 -0
  1000. package/dist/sync/v3/workspaceSyncV3CombinedLocalApply.d.ts +50 -0
  1001. package/dist/sync/v3/workspaceSyncV3CombinedLocalApply.js +1149 -0
  1002. package/dist/sync/v3/workspaceSyncV3CombinedProjectionState.d.ts +96 -0
  1003. package/dist/sync/v3/workspaceSyncV3CombinedProjectionState.js +672 -0
  1004. package/dist/sync/v3/workspaceSyncV3CombinedRepairBaseline.d.ts +42 -0
  1005. package/dist/sync/v3/workspaceSyncV3CombinedRepairBaseline.js +598 -0
  1006. package/dist/sync/v3/workspaceSyncV3CombinedRepairMaterialization.d.ts +65 -0
  1007. package/dist/sync/v3/workspaceSyncV3CombinedRepairMaterialization.js +505 -0
  1008. package/dist/sync/v3/workspaceSyncV3CombinedRepairSnapshot.d.ts +78 -0
  1009. package/dist/sync/v3/workspaceSyncV3CombinedRepairSnapshot.js +511 -0
  1010. package/dist/sync/v3/workspaceSyncV3CombinedWireContract.d.ts +45 -0
  1011. package/dist/sync/v3/workspaceSyncV3CombinedWireContract.js +125 -0
  1012. package/dist/sync/v3/workspaceSyncV3CoverageRegistry.d.ts +13 -0
  1013. package/dist/sync/v3/workspaceSyncV3CoverageRegistry.js +34 -0
  1014. package/dist/sync/v3/workspaceSyncV3CursorEncoding.d.ts +1 -0
  1015. package/dist/sync/v3/workspaceSyncV3CursorEncoding.js +6 -0
  1016. package/dist/sync/v3/workspaceSyncV3DomainAdmission.d.ts +43 -0
  1017. package/dist/sync/v3/workspaceSyncV3DomainAdmission.js +118 -0
  1018. package/dist/sync/v3/workspaceSyncV3Feed.d.ts +95 -0
  1019. package/dist/sync/v3/workspaceSyncV3Feed.js +243 -0
  1020. package/dist/sync/v3/workspaceSyncV3FeedApply.d.ts +13 -0
  1021. package/dist/sync/v3/workspaceSyncV3FeedApply.js +67 -0
  1022. package/dist/sync/v3/workspaceSyncV3FeedClientContract.d.ts +3 -0
  1023. package/dist/sync/v3/workspaceSyncV3FeedClientContract.js +46 -0
  1024. package/dist/sync/v3/workspaceSyncV3FeedCursorKeys.d.ts +10 -0
  1025. package/dist/sync/v3/workspaceSyncV3FeedCursorKeys.js +58 -0
  1026. package/dist/sync/v3/workspaceSyncV3FeedOrchestrator.d.ts +31 -0
  1027. package/dist/sync/v3/workspaceSyncV3FeedOrchestrator.js +228 -0
  1028. package/dist/sync/v3/workspaceSyncV3FeedProfile.d.ts +32 -0
  1029. package/dist/sync/v3/workspaceSyncV3FeedProfile.js +21 -0
  1030. package/dist/sync/v3/workspaceSyncV3InitiativeLocalApply.d.ts +36 -0
  1031. package/dist/sync/v3/workspaceSyncV3InitiativeLocalApply.js +163 -0
  1032. package/dist/sync/v3/workspaceSyncV3InitiativeRepair.d.ts +33 -0
  1033. package/dist/sync/v3/workspaceSyncV3InitiativeRepair.js +118 -0
  1034. package/dist/sync/v3/workspaceSyncV3LegacyBoundaryAttestation.d.ts +10 -0
  1035. package/dist/sync/v3/workspaceSyncV3LegacyBoundaryAttestation.js +45 -0
  1036. package/dist/sync/v3/workspaceSyncV3LocalOutboxStatus.d.ts +27 -0
  1037. package/dist/sync/v3/workspaceSyncV3LocalOutboxStatus.js +83 -0
  1038. package/dist/sync/v3/workspaceSyncV3NestedCoverage.d.ts +10 -0
  1039. package/dist/sync/v3/workspaceSyncV3NestedCoverage.js +40 -0
  1040. package/dist/sync/v3/workspaceSyncV3NestedTaskApply.d.ts +83 -0
  1041. package/dist/sync/v3/workspaceSyncV3NestedTaskApply.js +325 -0
  1042. package/dist/sync/v3/workspaceSyncV3NestedTaskCodecs.d.ts +59 -0
  1043. package/dist/sync/v3/workspaceSyncV3NestedTaskCodecs.js +302 -0
  1044. package/dist/sync/v3/workspaceSyncV3NestedTaskProjection.d.ts +47 -0
  1045. package/dist/sync/v3/workspaceSyncV3NestedTaskProjection.js +329 -0
  1046. package/dist/sync/v3/workspaceSyncV3NestedTaskRepairSnapshot.d.ts +19 -0
  1047. package/dist/sync/v3/workspaceSyncV3NestedTaskRepairSnapshot.js +41 -0
  1048. package/dist/sync/v3/workspaceSyncV3NestedWireContract.d.ts +6 -0
  1049. package/dist/sync/v3/workspaceSyncV3NestedWireContract.js +16 -0
  1050. package/dist/sync/v3/workspaceSyncV3OperationProjection.d.ts +8 -0
  1051. package/dist/sync/v3/workspaceSyncV3OperationProjection.js +52 -0
  1052. package/dist/sync/v3/workspaceSyncV3OperationProtocol.d.ts +229 -0
  1053. package/dist/sync/v3/workspaceSyncV3OperationProtocol.js +1 -0
  1054. package/dist/sync/v3/workspaceSyncV3OperatorDiagnostics.d.ts +165 -0
  1055. package/dist/sync/v3/workspaceSyncV3OperatorDiagnostics.js +414 -0
  1056. package/dist/sync/v3/workspaceSyncV3OriginActor.d.ts +36 -0
  1057. package/dist/sync/v3/workspaceSyncV3OriginActor.js +61 -0
  1058. package/dist/sync/v3/workspaceSyncV3OriginAssertion.d.ts +46 -0
  1059. package/dist/sync/v3/workspaceSyncV3OriginAssertion.js +121 -0
  1060. package/dist/sync/v3/workspaceSyncV3OriginAssertionHeader.d.ts +1 -0
  1061. package/dist/sync/v3/workspaceSyncV3OriginAssertionHeader.js +1 -0
  1062. package/dist/sync/v3/workspaceSyncV3PlanningOrderCoverage.d.ts +10 -0
  1063. package/dist/sync/v3/workspaceSyncV3PlanningOrderCoverage.js +34 -0
  1064. package/dist/sync/v3/workspaceSyncV3PlanningOrderWireContract.d.ts +6 -0
  1065. package/dist/sync/v3/workspaceSyncV3PlanningOrderWireContract.js +10 -0
  1066. package/dist/sync/v3/workspaceSyncV3ProjectionState.d.ts +105 -0
  1067. package/dist/sync/v3/workspaceSyncV3ProjectionState.js +467 -0
  1068. package/dist/sync/v3/workspaceSyncV3TaskCommentAudit.d.ts +56 -0
  1069. package/dist/sync/v3/workspaceSyncV3TaskCommentAudit.js +250 -0
  1070. package/dist/sync/v3/workspaceSyncV3TaskRelationshipProjection.d.ts +30 -0
  1071. package/dist/sync/v3/workspaceSyncV3TaskRelationshipProjection.js +142 -0
  1072. package/dist/sync/v3/workspaceSyncV3TaskRootProjection.d.ts +40 -0
  1073. package/dist/sync/v3/workspaceSyncV3TaskRootProjection.js +246 -0
  1074. package/dist/sync/v3/workspaceSyncV3TaxonomyFeedProjection.d.ts +39 -0
  1075. package/dist/sync/v3/workspaceSyncV3TaxonomyFeedProjection.js +185 -0
  1076. package/dist/sync/v3/workspaceSyncV3WorkflowCoverage.d.ts +10 -0
  1077. package/dist/sync/v3/workspaceSyncV3WorkflowCoverage.js +36 -0
  1078. package/dist/sync/v3/workspaceSyncV3WorkflowRuntimeApply.d.ts +17 -0
  1079. package/dist/sync/v3/workspaceSyncV3WorkflowRuntimeApply.js +143 -0
  1080. package/dist/sync/v3/workspaceSyncV3WorkflowRuntimeProjection.d.ts +9 -0
  1081. package/dist/sync/v3/workspaceSyncV3WorkflowRuntimeProjection.js +195 -0
  1082. package/dist/sync/v3/workspaceSyncV3WorkflowWireContract.d.ts +11 -0
  1083. package/dist/sync/v3/workspaceSyncV3WorkflowWireContract.js +12 -0
  1084. package/dist/sync/v3/workspaceSyncV3WorkstreamProjection.d.ts +4 -0
  1085. package/dist/sync/v3/workspaceSyncV3WorkstreamProjection.js +98 -0
  1086. package/dist/sync/v3/workspaceSyncV3WorkstreamTaskOrderProjection.d.ts +9 -0
  1087. package/dist/sync/v3/workspaceSyncV3WorkstreamTaskOrderProjection.js +72 -0
  1088. package/dist/sync/v3/workstreamActivityAuthoritativeRevision.d.ts +11 -0
  1089. package/dist/sync/v3/workstreamActivityAuthoritativeRevision.js +23 -0
  1090. package/dist/sync/v3/workstreamActivityIdentity.d.ts +8 -0
  1091. package/dist/sync/v3/workstreamActivityIdentity.js +14 -0
  1092. package/dist/sync/v3/workstreamCoexistence.d.ts +19 -0
  1093. package/dist/sync/v3/workstreamCoexistence.js +64 -0
  1094. package/dist/sync/v3/workstreamMutationPayload.d.ts +27 -0
  1095. package/dist/sync/v3/workstreamMutationPayload.js +147 -0
  1096. package/dist/sync/v3/workstreamMutationService.d.ts +72 -0
  1097. package/dist/sync/v3/workstreamMutationService.js +256 -0
  1098. package/dist/sync/v3/workstreamTaskOrderMutationService.d.ts +55 -0
  1099. package/dist/sync/v3/workstreamTaskOrderMutationService.js +110 -0
  1100. package/dist/sync/v3/workstreamTaskOrderSync.d.ts +14 -0
  1101. package/dist/sync/v3/workstreamTaskOrderSync.js +25 -0
  1102. package/dist/sync/workspaceContentManifest.d.ts +86 -0
  1103. package/dist/sync/workspaceContentManifest.js +123 -0
  1104. package/dist/sync/workspacePullFeed.d.ts +186 -2
  1105. package/dist/sync/workspacePullFeed.js +513 -136
  1106. package/dist/sync/workspacePushPreparedPlan.d.ts +21 -0
  1107. package/dist/sync/workspacePushPreparedPlan.js +1 -0
  1108. package/dist/sync/workspaceRepair.d.ts +17 -25
  1109. package/dist/sync/workspaceRepair.js +348 -25
  1110. package/dist/sync/workspaceSyncContentDecryption.d.ts +6 -0
  1111. package/dist/sync/workspaceSyncContentDecryption.js +11 -0
  1112. package/dist/sync/workspaceSyncModel.d.ts +216 -5
  1113. package/dist/sync/workspaceSyncModel.js +371 -35
  1114. package/dist/sync/workspaceSyncSnapshotProjection.d.ts +11 -0
  1115. package/dist/sync/workspaceSyncSnapshotProjection.js +101 -0
  1116. package/dist/sync/workspaceSyncState.d.ts +13 -0
  1117. package/dist/sync/workspaceSyncState.js +36 -0
  1118. package/dist/sync/workspaceSyncV2SnapshotBuilder.d.ts +106 -0
  1119. package/dist/sync/workspaceSyncV2SnapshotBuilder.js +193 -0
  1120. package/dist/types.d.ts +23 -15
  1121. package/dist/types.js +2 -4
  1122. package/dist/ui/ai-profile-clients/amazon-nova.svg +1 -0
  1123. package/dist/ui/ai-profile-clients/antigravity.png +0 -0
  1124. package/dist/ui/ai-profile-clients/chatgpt.svg +10 -0
  1125. package/dist/ui/ai-profile-clients/claude-chat.svg +1 -0
  1126. package/dist/ui/ai-profile-clients/claude-code.svg +15 -0
  1127. package/dist/ui/ai-profile-clients/cline-app-icon-light.png +0 -0
  1128. package/dist/ui/ai-profile-clients/cline.svg +16 -0
  1129. package/dist/ui/ai-profile-clients/codex.svg +1 -0
  1130. package/dist/ui/ai-profile-clients/copilot.png +0 -0
  1131. package/dist/ui/ai-profile-clients/cursor.svg +1 -0
  1132. package/dist/ui/ai-profile-clients/deepseek.svg +1 -0
  1133. package/dist/ui/ai-profile-clients/gemini-cli-icon.png +0 -0
  1134. package/dist/ui/ai-profile-clients/gemini.svg +10 -0
  1135. package/dist/ui/ai-profile-clients/grok.svg +31 -0
  1136. package/dist/ui/ai-profile-clients/kiro.svg +11 -0
  1137. package/dist/ui/ai-profile-clients/llama.svg +1 -0
  1138. package/dist/ui/ai-profile-clients/mistral.svg +1 -0
  1139. package/dist/ui/ai-profile-clients/ms_copilot.jpeg +0 -0
  1140. package/dist/ui/ai-profile-clients/openclaw.png +0 -0
  1141. package/dist/ui/ai-profile-clients/perplexity.svg +1 -0
  1142. package/dist/ui/ai-profile-clients/vscode.svg +41 -0
  1143. package/dist/ui/ai-profile-clients/windsurf.svg +11 -0
  1144. package/dist/ui/assets/AiIdentityRosterCard-DB1BLO_j.js +1 -0
  1145. package/dist/ui/assets/AiProfilesModule-DPxQeF9N.js +1 -0
  1146. package/dist/ui/assets/AnnotatedAttachmentWorkspace-CBRZ8rca.css +1 -0
  1147. package/dist/ui/assets/AnnotatedAttachmentWorkspace-DHNYaNg6.js +3 -0
  1148. package/dist/ui/assets/AssetTraySortControl-B9k5caQW.css +1 -0
  1149. package/dist/ui/assets/AssetTraySortControl-DphbyHVc.js +1 -0
  1150. package/dist/ui/assets/ContextAttachmentManager-CMxSzHqc.js +3 -0
  1151. package/dist/ui/assets/DocumentWorkspace-BC7sy5TG.js +261 -0
  1152. package/dist/ui/assets/DocumentWorkspace-BIBGBfd7.css +1 -0
  1153. package/dist/ui/assets/EntityActivityTimeline-BfJbZRdl.css +1 -0
  1154. package/dist/ui/assets/EntityActivityTimeline-pJ2ZjZ-k.js +1 -0
  1155. package/dist/ui/assets/PlanningModule-CeTqXMMz.css +1 -0
  1156. package/dist/ui/assets/PlanningModule-t5GbvVR9.js +1 -0
  1157. package/dist/ui/assets/PlansPage-BVH_NfgT.js +1 -0
  1158. package/dist/ui/assets/PlansPage-C2nkK2Bp.css +1 -0
  1159. package/dist/ui/assets/TaskContextUpload-Ds4LnDzV.css +1 -0
  1160. package/dist/ui/assets/TaskContextUpload-bl4fOOUz.js +1 -0
  1161. package/dist/ui/assets/TaskSettings-xVsxSa0g.js +12 -0
  1162. package/dist/ui/assets/TaskforceAgentsModule-CkAxW19K.js +21 -0
  1163. package/dist/ui/assets/TaskforceAgentsModule-D6IC0S7Q.css +1 -0
  1164. package/dist/ui/assets/WorkflowManagerModule-BKqIGVnF.js +1 -0
  1165. package/dist/ui/assets/WorkflowManagerModule-DF10XENz.css +1 -0
  1166. package/dist/ui/assets/antigravity-DRKQga2U.png +0 -0
  1167. package/dist/ui/assets/cursor-BM_3k4Y4.svg +1 -0
  1168. package/dist/ui/assets/gemini-cli-icon-dBAVjCcn.png +0 -0
  1169. package/dist/ui/assets/grok-BuodbWaG.svg +31 -0
  1170. package/dist/ui/assets/index-BzJlVnNS.css +1 -0
  1171. package/dist/ui/assets/index-Cx7vZJHL.js +7 -0
  1172. package/dist/ui/assets/{vendor-dnd-DRzYolkg.js → vendor-dnd-CJ-AjP-Y.js} +1 -1
  1173. package/dist/ui/assets/{vendor-icons-CLnehDTw.js → vendor-icons-B8ZNsH1g.js} +1 -1
  1174. package/dist/ui/assets/{vendor-markdown-BUxTU7dS.js → vendor-markdown-_lhNCyq-.js} +9 -9
  1175. package/dist/ui/assets/vendor-router-AqJMU8Lz.js +3 -0
  1176. package/dist/ui/assets/vscode-C_7wk1WI.svg +41 -0
  1177. package/dist/ui/branding/logos/logo_dark_bg.png +0 -0
  1178. package/dist/ui/branding/logos/logo_favicon_dark.png +0 -0
  1179. package/dist/ui/branding/logos/logo_favicon_dark.svg +56 -0
  1180. package/dist/ui/branding/logos/logo_favicon_light.png +0 -0
  1181. package/dist/ui/branding/logos/logo_light_bg.png +0 -0
  1182. package/dist/ui/images/Taskforce_Van.webp +0 -0
  1183. package/dist/ui/index.html +6 -6
  1184. package/dist/update/uiUpdateService.d.ts +43 -0
  1185. package/dist/update/uiUpdateService.js +149 -0
  1186. package/dist/update/updateCli.d.ts +15 -0
  1187. package/dist/update/updateCli.js +76 -0
  1188. package/dist/update/updateExecutor.d.ts +40 -0
  1189. package/dist/update/updateExecutor.js +474 -0
  1190. package/dist/update/updateStatus.d.ts +83 -0
  1191. package/dist/update/updateStatus.js +703 -0
  1192. package/dist/utils/aiProfileAvatarPaths.d.ts +14 -0
  1193. package/dist/utils/aiProfileAvatarPaths.js +52 -0
  1194. package/dist/utils/aiProfileDefaultLogo.d.ts +7 -0
  1195. package/dist/utils/aiProfileDefaultLogo.js +84 -0
  1196. package/dist/utils/aiProfileEvents.d.ts +9 -1
  1197. package/dist/utils/annotatedAttachments.d.ts +8 -0
  1198. package/dist/utils/annotatedAttachments.js +17 -1
  1199. package/dist/utils/assetTraySorting.d.ts +25 -0
  1200. package/dist/utils/assetTraySorting.js +83 -0
  1201. package/dist/utils/assignees.d.ts +5 -0
  1202. package/dist/utils/assignees.js +14 -9
  1203. package/dist/utils/authLogin.d.ts +10 -0
  1204. package/dist/utils/authLogin.js +8 -0
  1205. package/dist/utils/authSessionEvents.d.ts +2 -0
  1206. package/dist/utils/authSessionEvents.js +6 -0
  1207. package/dist/utils/avatarUpload.js +5 -5
  1208. package/dist/utils/canonicalReferenceAttachments.d.ts +12 -0
  1209. package/dist/utils/canonicalReferenceAttachments.js +42 -0
  1210. package/dist/utils/cloudAssetDisplay.d.ts +2 -0
  1211. package/dist/utils/cloudAssetDisplay.js +8 -0
  1212. package/dist/utils/constants.d.ts +4 -11
  1213. package/dist/utils/constants.js +5 -64
  1214. package/dist/utils/contextAttachmentPreview.d.ts +11 -0
  1215. package/dist/utils/contextAttachmentPreview.js +8 -0
  1216. package/dist/utils/contextAttachmentUpload.d.ts +8 -0
  1217. package/dist/utils/contextAttachmentUpload.js +144 -0
  1218. package/dist/utils/documentNames.js +6 -4
  1219. package/dist/utils/entityReferences.d.ts +14 -0
  1220. package/dist/utils/entityReferences.js +21 -0
  1221. package/dist/utils/httpSetCookie.d.ts +3 -0
  1222. package/dist/utils/httpSetCookie.js +22 -0
  1223. package/dist/utils/imageNoteStoragePaths.d.ts +3 -0
  1224. package/dist/utils/imageNoteStoragePaths.js +19 -0
  1225. package/dist/utils/imageReferences.d.ts +6 -0
  1226. package/dist/utils/imageReferences.js +1 -0
  1227. package/dist/utils/planningArchiveOrchestrator.d.ts +23 -0
  1228. package/dist/utils/planningArchiveOrchestrator.js +37 -0
  1229. package/dist/utils/planningArchivePresentation.d.ts +20 -0
  1230. package/dist/utils/planningArchivePresentation.js +23 -0
  1231. package/dist/utils/planningArchiveReadiness.d.ts +26 -0
  1232. package/dist/utils/planningArchiveReadiness.js +30 -0
  1233. package/dist/utils/planningFavorites.d.ts +7 -0
  1234. package/dist/utils/planningFavorites.js +34 -0
  1235. package/dist/utils/syncEventPresentation.js +53 -0
  1236. package/dist/utils/syncStatusPresentation.d.ts +25 -0
  1237. package/dist/utils/syncStatusPresentation.js +86 -5
  1238. package/dist/utils/taskActivity.d.ts +9 -2
  1239. package/dist/utils/taskActivity.js +61 -0
  1240. package/dist/utils/taskDraftDefaults.d.ts +0 -8
  1241. package/dist/utils/taskDraftDefaults.js +0 -4
  1242. package/dist/utils/taskEvents.d.ts +11 -0
  1243. package/dist/utils/taskEvents.js +6 -0
  1244. package/dist/utils/taskHeaderQuickFilter.d.ts +14 -0
  1245. package/dist/utils/taskHeaderQuickFilter.js +32 -0
  1246. package/dist/utils/taskInvalidation.d.ts +23 -0
  1247. package/dist/utils/taskInvalidation.js +67 -0
  1248. package/dist/utils/taskNormalization.d.ts +2 -1
  1249. package/dist/utils/taskNormalization.js +44 -18
  1250. package/dist/utils/taskReferences.d.ts +16 -0
  1251. package/dist/utils/taskReferences.js +63 -0
  1252. package/dist/utils/taskforceAgentEvents.d.ts +8 -0
  1253. package/dist/utils/taskforceAgentEvents.js +6 -0
  1254. package/dist/utils/taskforceAgentSkillEvents.d.ts +7 -0
  1255. package/dist/utils/taskforceAgentSkillEvents.js +8 -0
  1256. package/dist/utils/theme.js +1 -1
  1257. package/dist/utils/uiNotice.d.ts +3 -0
  1258. package/dist/utils/uiNotice.js +1 -1
  1259. package/dist/utils/workspaceResourceEvents.d.ts +7 -0
  1260. package/dist/utils/workspaceResourceEvents.js +6 -0
  1261. package/dist/utils/workspaceSyncPresentation.d.ts +24 -0
  1262. package/dist/utils/workspaceSyncPresentation.js +243 -6
  1263. package/package.json +69 -21
  1264. package/dist/components/features/AgentsModule.d.ts +0 -18
  1265. package/dist/components/features/AgentsModule.js +0 -479
  1266. package/dist/components/features/InitiativesModule.d.ts +0 -22
  1267. package/dist/components/features/InitiativesModule.js +0 -33
  1268. package/dist/components/features/WorkflowsModule.d.ts +0 -27
  1269. package/dist/components/features/WorkflowsModule.js +0 -21
  1270. package/dist/components/features/settings/WorkflowEditor.d.ts +0 -15
  1271. package/dist/components/features/settings/WorkflowEditor.js +0 -245
  1272. package/dist/components/views/panels/DocumentFilterToolbar.d.ts +0 -10
  1273. package/dist/components/views/panels/DocumentFilterToolbar.js +0 -7
  1274. package/dist/components/views/standalone/modals/AccountHubModal.d.ts +0 -61
  1275. package/dist/components/views/standalone/modals/AccountHubModal.js +0 -108
  1276. package/dist/components/views/standalone/modals/EditProfileModal.d.ts +0 -19
  1277. package/dist/components/views/standalone/modals/EditProfileModal.js +0 -11
  1278. package/dist/hooks/ui/useResourceExport.d.ts +0 -21
  1279. package/dist/hooks/ui/useResourceExport.js +0 -87
  1280. package/dist/hooks/ui/useWorkflowTemplates.d.ts +0 -37
  1281. package/dist/hooks/ui/useWorkflowTemplates.js +0 -116
  1282. package/dist/mcp/clientProfileDefaults.d.ts +0 -12
  1283. package/dist/mcp/clientProfileDefaults.js +0 -37
  1284. package/dist/resources/templates/WORKFLOW_V2_POLICY.md +0 -55
  1285. package/dist/resources/templates/environments/aider.yaml +0 -14
  1286. package/dist/resources/templates/environments/antigravity.yaml +0 -10
  1287. package/dist/resources/templates/environments/claude.yaml +0 -10
  1288. package/dist/resources/templates/environments/cline.yaml +0 -10
  1289. package/dist/resources/templates/environments/codex.yaml +0 -13
  1290. package/dist/resources/templates/environments/copilot.yaml +0 -10
  1291. package/dist/resources/templates/environments/cursor.yaml +0 -9
  1292. package/dist/resources/templates/environments/gemini.yaml +0 -9
  1293. package/dist/resources/templates/environments/windsurf.yaml +0 -10
  1294. package/dist/resources/templates/workflow-sources/README.md +0 -9
  1295. package/dist/resources/templates/workflow-sources/workflowDocs.mjs +0 -530
  1296. package/dist/resources/templates/workflow-sources/workflowEditorOverrides.json +0 -1
  1297. package/dist/resources/templates/workflows/collaborate.yaml +0 -110
  1298. package/dist/resources/templates/workflows/do.yaml +0 -88
  1299. package/dist/resources/templates/workflows/evaluate.yaml +0 -117
  1300. package/dist/resources/templates/workflows/execute.yaml +0 -159
  1301. package/dist/resources/templates/workflows/plan.yaml +0 -119
  1302. package/dist/resources/templates/workflows/review.yaml +0 -115
  1303. package/dist/services/formatTransformers.d.ts +0 -29
  1304. package/dist/services/formatTransformers.js +0 -56
  1305. package/dist/services/templateEngine.d.ts +0 -46
  1306. package/dist/services/templateEngine.js +0 -148
  1307. package/dist/shared/workflowDefaults.d.ts +0 -9
  1308. package/dist/shared/workflowDefaults.js +0 -11
  1309. package/dist/ui/agent-logos/Gemini CLI.jpeg +0 -0
  1310. package/dist/ui/agent-logos/antigravity.jpeg +0 -0
  1311. package/dist/ui/agent-logos/chatgpt.png +0 -0
  1312. package/dist/ui/agent-logos/claude-code.jpeg +0 -0
  1313. package/dist/ui/agent-logos/codex.jpeg +0 -0
  1314. package/dist/ui/agent-logos/cursor.png +0 -0
  1315. package/dist/ui/agent-logos/openclaw.jpeg +0 -0
  1316. package/dist/ui/agent-logos/windsurf.png +0 -0
  1317. package/dist/ui/assets/AgentsModule-DvkbUHi0.js +0 -1
  1318. package/dist/ui/assets/AnnotatedAttachmentWorkspace-BVKew-mH.css +0 -1
  1319. package/dist/ui/assets/AnnotatedAttachmentWorkspace-jhOhxqHT.js +0 -3
  1320. package/dist/ui/assets/ContextAttachmentManager-BAmEyLHL.js +0 -3
  1321. package/dist/ui/assets/DocumentWorkspace-D4rJKXzd.css +0 -1
  1322. package/dist/ui/assets/DocumentWorkspace-X-CpD5OO.js +0 -252
  1323. package/dist/ui/assets/EntityActivityTimeline-DD33onAC.js +0 -1
  1324. package/dist/ui/assets/EntityActivityTimeline-DyqvvhuF.css +0 -1
  1325. package/dist/ui/assets/InitiativesModule-5nDXtIjf.js +0 -1
  1326. package/dist/ui/assets/PlansPage-B8nDR1hQ.js +0 -1
  1327. package/dist/ui/assets/PlansPage-DeAzWYTb.css +0 -1
  1328. package/dist/ui/assets/TaskContextUpload-DrGrXJHm.js +0 -1
  1329. package/dist/ui/assets/TaskSettings-BXVvZZwH.js +0 -9
  1330. package/dist/ui/assets/WorkflowsModule-DWCGhEWT.js +0 -5
  1331. package/dist/ui/assets/documentReferences-Crup321p.js +0 -1
  1332. package/dist/ui/assets/index-B9k24Aym.js +0 -5
  1333. package/dist/ui/assets/index-DNeR5dYW.css +0 -1
  1334. package/dist/ui/assets/vendor-router-BbWMxlnO.js +0 -3
  1335. package/dist/ui/branding/logos/logo_black_01.png +0 -0
  1336. package/dist/ui/branding/logos/logo_black_02.png +0 -0
  1337. package/dist/ui/branding/logos/logo_white_01.png +0 -0
  1338. package/dist/ui/branding/logos/logo_white_02.png +0 -0
  1339. package/scripts/generate-workflow-templates.mjs +0 -134
  1340. package/src/resources/templates/WORKFLOW_V2_POLICY.md +0 -55
  1341. package/src/resources/templates/environments/aider.yaml +0 -14
  1342. package/src/resources/templates/environments/antigravity.yaml +0 -10
  1343. package/src/resources/templates/environments/claude.yaml +0 -10
  1344. package/src/resources/templates/environments/cline.yaml +0 -10
  1345. package/src/resources/templates/environments/codex.yaml +0 -13
  1346. package/src/resources/templates/environments/copilot.yaml +0 -10
  1347. package/src/resources/templates/environments/cursor.yaml +0 -9
  1348. package/src/resources/templates/environments/gemini.yaml +0 -9
  1349. package/src/resources/templates/environments/windsurf.yaml +0 -10
  1350. package/src/resources/templates/workflow-sources/README.md +0 -9
  1351. package/src/resources/templates/workflow-sources/workflowDocs.mjs +0 -530
  1352. package/src/resources/templates/workflow-sources/workflowEditorOverrides.json +0 -1
  1353. package/src/resources/templates/workflows/collaborate.yaml +0 -110
  1354. package/src/resources/templates/workflows/do.yaml +0 -88
  1355. package/src/resources/templates/workflows/evaluate.yaml +0 -117
  1356. package/src/resources/templates/workflows/execute.yaml +0 -159
  1357. package/src/resources/templates/workflows/plan.yaml +0 -119
  1358. package/src/resources/templates/workflows/review.yaml +0 -115
  1359. /package/dist/ui/branding/logos/{logo_dark.svg → logo_dark_no_bg.svg} +0 -0
  1360. /package/dist/ui/branding/logos/{logo_favicon.svg → logo_favicon_light.svg} +0 -0
  1361. /package/dist/ui/branding/logos/{logo_light.svg → logo_light_no_bg.svg} +0 -0
@@ -44,24 +44,90 @@
44
44
  * POST /api/taskforce/types
45
45
  * GET /api/taskforce/priorities
46
46
  * POST /api/taskforce/priorities
47
- * GET /api/taskforce/approaches
48
- * POST /api/taskforce/approaches
49
47
  * GET /api/taskforce/taxonomies
50
48
  * POST /api/taskforce/taxonomies
51
49
  */
50
+ import { createHash, randomUUID } from 'crypto';
52
51
  import { TaskforceRuleError } from '../../core/Taskforce.js';
52
+ import { parseTaskRestoreDestination } from '../../shared/taskRestoreDestination.js';
53
+ import { buildUserGlobalSettingsUpdate } from '../../core/GlobalSettingsService.js';
53
54
  import { toPublicObjectStorageConfig } from '../../storage/objectStorage.js';
54
55
  import { getRuntimeCapabilities } from '../../runtime/capabilities.js';
55
56
  import { resolveBuildInfo } from '../buildInfo.js';
56
57
  import { resolveRealtimeSyncFlag } from '../../sync/realtimeFeature.js';
57
58
  import { parseJsonBody } from './primitives.js';
58
59
  import { resolveRequestAccess } from '../auth.js';
59
- import { getRouteTimingNow, logSlowBootstrapRoute, requestBootstrapTraceId, requestHeader, requestRuntimeMode, resolveErrorStatusCode, serializeJsonWithTiming, setServerTimingHeader } from './shared.js';
60
+ import { getRouteTimingNow, logSlowBootstrapRoute, requestBootstrapTraceId, requestHeader, requestRuntimeMode, requestUserId, resolveErrorStatusCode, serializeJsonWithTiming, setServerTimingHeader } from './shared.js';
60
61
  import { listBuiltInCustomTaxonomyLibraryPacks } from '../../shared/customTaxonomyLibrary.js';
61
- import { listBuiltInTaxonomyLibraryPacks } from '../../shared/taxonomyLibrary.js';
62
+ import { getBuiltInTaxonomyLibraryPack, listBuiltInTaxonomyLibraryPacks } from '../../shared/taxonomyLibrary.js';
62
63
  import { shouldUseProvisionalTaskReferences } from '../../utils/taskReferences.js';
64
+ import { createDurableTaxonomyMutationRouter } from '../../sync/v3/durableTaxonomyMutationRouter.js';
65
+ import { buildCanonicalTaxonomyStateMutation, } from '../../sync/v3/taxonomyStateMutation.js';
66
+ import { serializeTaxonomyStateForSync } from '../../sync/v3/taxonomySyncPayload.js';
67
+ import { createDurableInitiativeMutationRouter } from '../../sync/v3/durableInitiativeMutationRouter.js';
68
+ import { createDurableWorkstreamMutationRouter } from '../../sync/v3/durableWorkstreamMutationRouter.js';
69
+ import { createDurableWorkstreamTaskOrderMutationRouter } from '../../sync/v3/durableWorkstreamTaskOrderMutationRouter.js';
70
+ import { serializeCanonicalPlanningAttachmentLinks } from '../../sync/planningCanonicalFields.js';
71
+ import { createTaskHttpDurableRouters } from './durableTaskHttpRouters.js';
63
72
  // === SECTION: Module dependency interface ===
64
73
  const UI_STATE_MAX_JSON_BODY_BYTES = 50 * 1024 * 1024;
74
+ function normalizeDurableChecklistItems(input) {
75
+ const existingById = new Map((input.task.checklistItems || []).map((item) => [item.id, item]));
76
+ return input.items.map((raw, index) => {
77
+ const item = raw && typeof raw === 'object' ? raw : {};
78
+ const id = String(item.id || `checklist-${createHash('sha256').update(`${input.operationId}:${input.taskId}:${index}`).digest('hex').slice(0, 32)}`);
79
+ const existing = existingById.get(id);
80
+ const title = String(item.title || '').trim();
81
+ const isCompleted = item.isCompleted === true;
82
+ const order = Number.isFinite(Number(item.order)) ? Number(item.order) : index;
83
+ const unchanged = existing && existing.title === title
84
+ && existing.isCompleted === isCompleted && existing.order === order;
85
+ const createdAt = String(existing?.createdAt || item.createdAt || input.now);
86
+ return {
87
+ id,
88
+ taskId: input.taskId,
89
+ title,
90
+ isCompleted,
91
+ order,
92
+ createdAt,
93
+ updatedAt: String(unchanged ? existing.updatedAt : existing ? input.now : item.updatedAt || createdAt),
94
+ };
95
+ });
96
+ }
97
+ function normalizeDurableTaskAttachmentLinks(input) {
98
+ return input.attachments.map((raw, order) => {
99
+ if (!raw || typeof raw !== 'object' || Array.isArray(raw)) {
100
+ throw new TaskforceRuleError('Each durable task attachment must include canonical asset metadata.', 400, 'TASK_ATTACHMENT_LINKS_INVALID');
101
+ }
102
+ const source = raw;
103
+ const assetId = String(source.assetId || '').trim();
104
+ if (!assetId) {
105
+ throw new TaskforceRuleError('Each durable task attachment must include assetId.', 400, 'TASK_ATTACHMENT_LINKS_INVALID');
106
+ }
107
+ const asset = input.core.getWorkspaceAssetStore().get(assetId, input.workspaceId);
108
+ const requestedRole = String(source.linkRole || '').trim();
109
+ const role = requestedRole === 'reference'
110
+ || requestedRole === 'image' || requestedRole === 'attachment'
111
+ ? requestedRole
112
+ : asset?.storageProvider === 'external'
113
+ ? 'reference'
114
+ : asset?.kind === 'image' ? 'image' : 'attachment';
115
+ return {
116
+ assetId,
117
+ role,
118
+ order,
119
+ ...(typeof source.caption === 'string' ? { caption: source.caption } : {}),
120
+ ...(typeof source.displayName === 'string' ? { displayName: source.displayName } : {}),
121
+ ...(typeof source.originalFilename === 'string' ? { originalFilename: source.originalFilename } : {}),
122
+ ...(source.referenceNumber === null || Number.isSafeInteger(source.referenceNumber)
123
+ ? { referenceNumber: source.referenceNumber }
124
+ : {}),
125
+ ...(source.referenceLabel === null || typeof source.referenceLabel === 'string'
126
+ ? { referenceLabel: source.referenceLabel }
127
+ : {}),
128
+ };
129
+ });
130
+ }
65
131
  function createUiStateRequestId() {
66
132
  return `ui-${Date.now().toString(36)}-${Math.random().toString(36).slice(2, 8)}`;
67
133
  }
@@ -69,9 +135,102 @@ function attachUiStateDebugHeaders(res, requestId) {
69
135
  res.setHeader('x-taskforce-ui-state-route', 'tasks');
70
136
  res.setHeader('x-taskforce-ui-state-request-id', requestId);
71
137
  }
138
+ function collectTopLevelKeys(value) {
139
+ if (!value || typeof value !== 'object' || Array.isArray(value))
140
+ return [];
141
+ return Object.keys(value).sort();
142
+ }
72
143
  // === SECTION: Registration ===
73
144
  export function registerTaskRoutes(deps) {
74
145
  const { addRoute, core, context, requestWorkspaceId, ensureAppAccess, resolveEffectiveObjectStorageConfig, buildBatchSummary, CLOUD_SAFE_CONFIG_PATHS, } = deps;
146
+ const mutateTaxonomyThroughDurableBoundary = (req, workspaceId, mutation, options) => {
147
+ const runtimeMode = context.authConfig?.runtimeMode === 'cloud' ? 'cloud' : requestRuntimeMode(req);
148
+ const router = createDurableTaxonomyMutationRouter({
149
+ core,
150
+ runtimeMode,
151
+ surface: 'http',
152
+ tenantId: core.getTenantId(),
153
+ workspaceId,
154
+ });
155
+ if (!router.enabled)
156
+ return null;
157
+ return router.mutateState(() => buildCanonicalTaxonomyStateMutation({
158
+ current: core.getTaxonomyState(workspaceId),
159
+ mutation,
160
+ }), options);
161
+ };
162
+ const writeTaxonomyMutationError = (res, error) => {
163
+ const statusCode = resolveErrorStatusCode(error, 400);
164
+ res.writeHead(statusCode, { 'Content-Type': 'application/json' });
165
+ res.end(JSON.stringify({
166
+ success: false,
167
+ error: error instanceof Error ? error.message : 'Taxonomy update failed.',
168
+ ...(error?.code ? { code: String(error.code) } : {}),
169
+ }));
170
+ };
171
+ const createInitiativeRouter = (req, workspaceId) => {
172
+ const runtimeMode = context.authConfig?.runtimeMode === 'cloud' ? 'cloud' : requestRuntimeMode(req);
173
+ const operationId = requestHeader(req, 'x-taskforce-operation-id', '').trim();
174
+ return createDurableInitiativeMutationRouter({
175
+ core,
176
+ runtimeMode,
177
+ surface: 'http',
178
+ tenantId: core.getTenantId(),
179
+ workspaceId,
180
+ actorRef: runtimeMode === 'cloud' ? (String(requestUserId(req) || '').trim() || 'user') : 'user',
181
+ cloudClientId: 'http-cloud',
182
+ ...(operationId ? { createOperationId: () => operationId } : {}),
183
+ });
184
+ };
185
+ const initiativeResult = (result) => (result.state === 'pending' ? result.provisionalInitiative : result.authoritativeInitiative);
186
+ const createWorkstreamRouter = (req, workspaceId) => {
187
+ const runtimeMode = context.authConfig?.runtimeMode === 'cloud' ? 'cloud' : requestRuntimeMode(req);
188
+ const operationId = requestHeader(req, 'x-taskforce-operation-id', '').trim();
189
+ return createDurableWorkstreamMutationRouter({
190
+ core,
191
+ runtimeMode,
192
+ surface: 'http',
193
+ tenantId: core.getTenantId(),
194
+ workspaceId,
195
+ actorRef: runtimeMode === 'cloud' ? (String(requestUserId(req) || '').trim() || 'user') : 'user',
196
+ cloudClientId: 'http-cloud',
197
+ ...(operationId ? { createOperationId: () => operationId } : {}),
198
+ });
199
+ };
200
+ const workstreamResult = (result) => (result.state === 'pending' ? result.provisionalWorkstream : result.authoritativeWorkstream);
201
+ const createTaskHttpRootRouter = (req, workspaceId, operationIdOverride, deferPostCommitNotification) => {
202
+ const routers = createTaskHttpDurableRouters({ core, context, req, workspaceId });
203
+ return operationIdOverride === undefined && !deferPostCommitNotification
204
+ ? routers.root
205
+ : routers.createRootRouter(operationIdOverride, deferPostCommitNotification);
206
+ };
207
+ const createTaskHttpBulkRouter = (req, workspaceId) => (createTaskHttpDurableRouters({ core, context, req, workspaceId }).bulk);
208
+ const writeInitiativeMutationError = (res, error, fallback) => {
209
+ const statusCode = resolveErrorStatusCode(error, 400);
210
+ res.writeHead(statusCode, { 'Content-Type': 'application/json' });
211
+ res.end(JSON.stringify({
212
+ error: error instanceof Error ? error.message : fallback,
213
+ ...(error?.code ? { code: String(error.code) } : {}),
214
+ }));
215
+ };
216
+ const writeWorkstreamMutationError = (res, error, fallback) => {
217
+ const statusCode = resolveErrorStatusCode(error, 400);
218
+ const retryAt = typeof error?.retryAt === 'string'
219
+ ? String(error.retryAt)
220
+ : null;
221
+ const retryAfterSeconds = retryAt && Number.isFinite(Date.parse(retryAt))
222
+ ? Math.max(0, Math.ceil((Date.parse(retryAt) - Date.now()) / 1_000))
223
+ : null;
224
+ res.writeHead(statusCode, {
225
+ 'Content-Type': 'application/json',
226
+ ...(retryAfterSeconds !== null ? { 'Retry-After': String(retryAfterSeconds) } : {}),
227
+ });
228
+ res.end(JSON.stringify({
229
+ error: error instanceof Error ? error.message : fallback,
230
+ ...(error?.code ? { code: String(error.code) } : {}),
231
+ ...(retryAt ? { retryAt } : {}),
232
+ }));
233
+ };
75
234
  // === SECTION: Config and settings ===
76
235
  // GET /api/taskforce/config - Get current configuration
77
236
  addRoute('GET', '/api/taskforce/config', async (req, res) => {
@@ -136,10 +295,17 @@ export function registerTaskRoutes(deps) {
136
295
  if (!ensureAppAccess(req, res))
137
296
  return;
138
297
  const body = await parseJsonBody(req);
298
+ const applied = buildUserGlobalSettingsUpdate(body);
299
+ const requestedKeys = collectTopLevelKeys(body);
300
+ const appliedKeys = collectTopLevelKeys(applied);
301
+ const droppedKeys = requestedKeys.filter((key) => !appliedKeys.includes(key));
302
+ if (droppedKeys.length > 0) {
303
+ console.warn('[Taskforce Settings] Dropped unsupported global settings keys', { droppedKeys });
304
+ }
139
305
  try {
140
- core.updateGlobalSettings(body);
306
+ core.updateGlobalSettings(applied);
141
307
  res.writeHead(200, { 'Content-Type': 'application/json' });
142
- res.end(JSON.stringify({ success: true }));
308
+ res.end(JSON.stringify({ success: true, applied, droppedKeys }));
143
309
  }
144
310
  catch {
145
311
  res.writeHead(500, { 'Content-Type': 'application/json' });
@@ -157,6 +323,7 @@ export function registerTaskRoutes(deps) {
157
323
  const runtimeHeader = String((req.headers['x-taskforce-runtime-mode'] || '')).toLowerCase();
158
324
  const isLocalRuntime = runtimeHeader === 'local';
159
325
  const allowCreate = body?.allowCreate === true;
326
+ const createIfMissing = isLocalRuntime && body?.createIfMissing === true;
160
327
  const explicitWorkspaceId = typeof body?.workspaceId === 'string'
161
328
  ? body.workspaceId.trim()
162
329
  : '';
@@ -164,14 +331,16 @@ export function registerTaskRoutes(deps) {
164
331
  const incomingWorkspaceId = String(explicitWorkspaceId
165
332
  || ((isLocalRuntime && allowCreate && !explicitWorkspaceId) ? '' : headerWorkspaceId)).trim() || 'default';
166
333
  try {
167
- const workspaceExists = Boolean(core.getWorkspaceProfile(incomingWorkspaceId));
334
+ const existingWorkspace = core.getWorkspaceProfile(incomingWorkspaceId);
335
+ const workspaceExists = Boolean(existingWorkspace);
168
336
  const authConfig = context.authConfig;
169
337
  const requestAccess = authConfig?.enabled
170
338
  ? resolveRequestAccess(req, authConfig)
171
339
  : null;
172
340
  const shouldCreateWorkspace = Boolean(name
173
341
  && (incomingWorkspaceId === 'default' || !workspaceExists)
174
- && (isLocalRuntime || allowCreate));
342
+ && (isLocalRuntime || allowCreate)
343
+ && (!createIfMissing || !workspaceExists));
175
344
  const workspace = shouldCreateWorkspace
176
345
  ? (!isLocalRuntime
177
346
  && requestAccess?.authenticated
@@ -190,7 +359,9 @@ export function registerTaskRoutes(deps) {
190
359
  description,
191
360
  slug
192
361
  }))
193
- : core.updateWorkspaceProfile(incomingWorkspaceId, { name, description, slug });
362
+ : (createIfMissing && existingWorkspace
363
+ ? existingWorkspace
364
+ : core.updateWorkspaceProfile(incomingWorkspaceId, { name, description, slug }));
194
365
  res.writeHead(200, { 'Content-Type': 'application/json' });
195
366
  res.end(JSON.stringify({ success: true, workspace }));
196
367
  }
@@ -254,9 +425,9 @@ export function registerTaskRoutes(deps) {
254
425
  : body?.state && typeof body.state === 'object'
255
426
  ? body.state
256
427
  : {};
257
- core.updateUiState(workspaceId, userId, { stateKey, patch });
428
+ const state = core.updateUiState(workspaceId, userId, { stateKey, patch });
258
429
  res.writeHead(200, { 'Content-Type': 'application/json' });
259
- res.end(JSON.stringify({ success: true }));
430
+ res.end(JSON.stringify({ success: true, state }));
260
431
  }
261
432
  catch (error) {
262
433
  const statusCode = resolveErrorStatusCode(error, 400);
@@ -298,6 +469,13 @@ export function registerTaskRoutes(deps) {
298
469
  res.writeHead(200, { 'Content-Type': 'application/json' });
299
470
  res.end(JSON.stringify(data));
300
471
  });
472
+ addRoute('GET', '/api/taskforce/task-relationships', async (req, res) => {
473
+ if (!ensureAppAccess(req, res))
474
+ return;
475
+ const workspaceId = requestWorkspaceId(req);
476
+ res.writeHead(200, { 'Content-Type': 'application/json' });
477
+ res.end(JSON.stringify({ relationships: core.listTaskRelationshipsForSync(workspaceId) }));
478
+ });
301
479
  const handleListDeletedTasks = async (req, res) => {
302
480
  if (!ensureAppAccess(req, res))
303
481
  return;
@@ -408,7 +586,8 @@ export function registerTaskRoutes(deps) {
408
586
  }
409
587
  try {
410
588
  const workspaceId = requestWorkspaceId(req);
411
- const task = core.createTask(taskInput, {
589
+ const durableRouter = createTaskHttpRootRouter(req, workspaceId);
590
+ const task = durableRouter.enabled ? durableRouter.create(taskInput) : core.createTask(taskInput, {
412
591
  workspaceId,
413
592
  actorRef: 'user',
414
593
  provisionalLocalReference: shouldUseProvisionalTaskReferences(requestRuntimeMode(req))
@@ -441,10 +620,68 @@ export function registerTaskRoutes(deps) {
441
620
  const updates = body && typeof body === 'object'
442
621
  ? Object.fromEntries(Object.entries(body).filter(([key]) => key !== 'saveSource'))
443
622
  : body;
444
- const updated = core.updateTask(params.id, updates, workspaceId, {
445
- actorRef: 'user',
446
- saveSource
447
- });
623
+ const durableRouters = createTaskHttpDurableRouters({ core, context, req, workspaceId });
624
+ const durableRouter = durableRouters.root;
625
+ const hasChecklist = Object.prototype.hasOwnProperty.call(updates || {}, 'checklistItems');
626
+ if (hasChecklist && !Array.isArray(updates.checklistItems)) {
627
+ throw new TaskforceRuleError('checklistItems must be an array.', 400, 'TASK_CHECKLIST_INVALID');
628
+ }
629
+ const hasAttachments = Object.prototype.hasOwnProperty.call(updates || {}, 'attachments');
630
+ if (hasAttachments && !Array.isArray(updates.attachments)) {
631
+ throw new TaskforceRuleError('attachments must be an array.', 400, 'TASK_ATTACHMENT_LINKS_INVALID');
632
+ }
633
+ const checklistDurable = hasChecklist && durableRouters.checklist.enabled;
634
+ const attachmentLinksDurable = hasAttachments && durableRouters.attachmentLinks.enabled;
635
+ const rawChecklistItems = hasChecklist ? updates.checklistItems : [];
636
+ const rawAttachments = hasAttachments ? updates.attachments : [];
637
+ const remainingUpdates = checklistDurable || attachmentLinksDurable
638
+ ? Object.fromEntries(Object.entries(updates).filter(([key]) => (!(checklistDurable && key === 'checklistItems')
639
+ && !(attachmentLinksDurable && key === 'attachments'))))
640
+ : updates;
641
+ let updated;
642
+ const durableTargetCount = Number(checklistDurable)
643
+ + Number(attachmentLinksDurable)
644
+ + Number(Object.keys(remainingUpdates).length > 0);
645
+ if (durableTargetCount > 1) {
646
+ const aggregate = durableRouters.bulk.updateFields([
647
+ { id: params.id, ...updates },
648
+ ], { saveSource, atomicItemFailures: true });
649
+ const failure = aggregate.errors[0];
650
+ if (failure) {
651
+ throw new TaskforceRuleError(failure.message, failure.statusCode, failure.code || 'TASK_UPDATE_FAILED', failure.details);
652
+ }
653
+ updated = core.getTask(params.id, workspaceId) || aggregate.results[0];
654
+ }
655
+ else {
656
+ updated = Object.keys(remainingUpdates || {}).length > 0
657
+ ? (durableRouter.enabled
658
+ ? durableRouter.update(params.id, remainingUpdates, saveSource)
659
+ : core.updateTask(params.id, remainingUpdates, workspaceId, {
660
+ actorRef: 'user',
661
+ saveSource,
662
+ }))
663
+ : core.getTask(params.id, workspaceId);
664
+ if (updated && checklistDurable) {
665
+ const checklistRouter = durableRouters.createChecklistRouter(durableRouters.deriveChildOperationId('task-patch-checklist', 0, params.id));
666
+ const checklistItems = normalizeDurableChecklistItems({
667
+ items: rawChecklistItems,
668
+ task: core.getTask(params.id, workspaceId) || updated,
669
+ taskId: params.id,
670
+ operationId: requestHeader(req, 'x-taskforce-operation-id', '').trim(),
671
+ now: new Date().toISOString(),
672
+ });
673
+ updated = checklistRouter.replace({ taskId: params.id, items: checklistItems }).task;
674
+ }
675
+ if (updated && attachmentLinksDurable) {
676
+ const attachmentLinksRouter = durableRouters.createAttachmentLinksRouter(durableRouters.deriveChildOperationId('task-patch-attachments', 0, params.id));
677
+ const links = normalizeDurableTaskAttachmentLinks({
678
+ attachments: rawAttachments,
679
+ core,
680
+ workspaceId,
681
+ });
682
+ updated = attachmentLinksRouter.replace({ taskId: params.id, links }).task;
683
+ }
684
+ }
448
685
  if (!updated) {
449
686
  res.writeHead(404, { 'Content-Type': 'application/json' });
450
687
  res.end(JSON.stringify({ error: 'Task not found' }));
@@ -456,8 +693,10 @@ export function registerTaskRoutes(deps) {
456
693
  catch (error) {
457
694
  const statusCode = resolveErrorStatusCode(error, 400);
458
695
  const message = error instanceof Error ? error.message : 'Failed to update task';
696
+ const errorCode = error instanceof TaskforceRuleError ? error.code : error?.code;
697
+ const errorDetails = error instanceof TaskforceRuleError ? error.details : error?.details;
459
698
  res.writeHead(statusCode, { 'Content-Type': 'application/json' });
460
- res.end(JSON.stringify({ error: message }));
699
+ res.end(JSON.stringify({ error: message, code: errorCode, details: errorDetails }));
461
700
  }
462
701
  });
463
702
  // GET /api/taskforce/task/:id/checklist - Read structured checklist items for one task
@@ -480,8 +719,11 @@ export function registerTaskRoutes(deps) {
480
719
  if (!ensureAppAccess(req, res))
481
720
  return;
482
721
  const body = await parseJsonBody(req);
483
- const items = Array.isArray(body?.items) ? body.items : [];
484
722
  try {
723
+ if (!Array.isArray(body?.items)) {
724
+ throw new TaskforceRuleError('Checklist items must be an array.', 400, 'TASK_CHECKLIST_INVALID');
725
+ }
726
+ const items = body.items;
485
727
  const workspaceId = requestWorkspaceId(req);
486
728
  const task = core.getTask(params.id, workspaceId);
487
729
  if (!task) {
@@ -489,15 +731,26 @@ export function registerTaskRoutes(deps) {
489
731
  res.end(JSON.stringify({ error: 'Task not found' }));
490
732
  return;
491
733
  }
492
- const updated = core.replaceChecklistItems(params.id, items, workspaceId);
734
+ const durableRouter = createTaskHttpDurableRouters({ core, context, req, workspaceId }).checklist;
735
+ const durableItems = durableRouter.enabled ? normalizeDurableChecklistItems({
736
+ items,
737
+ task,
738
+ taskId: params.id,
739
+ operationId: requestHeader(req, 'x-taskforce-operation-id', '').trim(),
740
+ now: new Date().toISOString(),
741
+ }) : items;
742
+ const updated = durableRouter.enabled
743
+ ? durableRouter.replace({ taskId: params.id, items: durableItems }).task.checklistItems || []
744
+ : core.replaceChecklistItems(params.id, items, workspaceId);
493
745
  res.writeHead(200, { 'Content-Type': 'application/json' });
494
746
  res.end(JSON.stringify(updated));
495
747
  }
496
748
  catch (error) {
497
749
  const statusCode = resolveErrorStatusCode(error, 400);
498
750
  const message = error instanceof Error ? error.message : 'Failed to update checklist';
751
+ const errorCode = error instanceof TaskforceRuleError ? error.code : error?.code;
499
752
  res.writeHead(statusCode, { 'Content-Type': 'application/json' });
500
- res.end(JSON.stringify({ error: message }));
753
+ res.end(JSON.stringify({ error: message, code: errorCode }));
501
754
  }
502
755
  });
503
756
  // GET /api/taskforce/initiatives - List initiatives
@@ -558,15 +811,38 @@ export function registerTaskRoutes(deps) {
558
811
  const body = await parseJsonBody(req);
559
812
  try {
560
813
  const workspaceId = requestWorkspaceId(req);
561
- const initiative = core.createInitiative(body || {}, workspaceId, { actorRef: 'user' });
814
+ const router = createInitiativeRouter(req, workspaceId);
815
+ const allowed = new Set(['id', 'title', 'description', 'ownerId', 'order', 'attachments', 'createdAt']);
816
+ const unsupported = Object.keys(body || {}).filter((key) => !allowed.has(key));
817
+ if (router.enabled && unsupported.length > 0) {
818
+ const error = new Error(`Unsupported initiative fields: ${unsupported.sort().join(', ')}`);
819
+ error.code = 'INITIATIVE_MUTATION_INVALID';
820
+ error.statusCode = 400;
821
+ throw error;
822
+ }
823
+ if (router.enabled && (!String(body?.id || '').trim() || !String(body?.createdAt || '').trim())) {
824
+ const error = new Error('Activated initiative create requires stable id and createdAt fields.');
825
+ error.code = 'INITIATIVE_MUTATION_IDENTITY_REQUIRED';
826
+ error.statusCode = 400;
827
+ throw error;
828
+ }
829
+ const initiative = router.enabled
830
+ ? initiativeResult(router.create(String(body?.id || '').trim() || `initiative-${randomUUID()}`, {
831
+ title: body?.title,
832
+ description: body?.description ?? null,
833
+ ownerId: body?.ownerId ?? null,
834
+ order: body?.order ?? null,
835
+ attachments: serializeCanonicalPlanningAttachmentLinks(body?.attachments ?? []),
836
+ createdAt: String(body?.createdAt || '').trim() || new Date().toISOString(),
837
+ }))
838
+ : core.createInitiative(body || {}, workspaceId, { actorRef: 'user' });
839
+ if (!initiative)
840
+ throw new Error('Durable initiative capture did not return a provisional initiative.');
562
841
  res.writeHead(201, { 'Content-Type': 'application/json' });
563
842
  res.end(JSON.stringify(initiative));
564
843
  }
565
844
  catch (error) {
566
- const statusCode = resolveErrorStatusCode(error, 400);
567
- const message = error instanceof Error ? error.message : 'Failed to create initiative';
568
- res.writeHead(statusCode, { 'Content-Type': 'application/json' });
569
- res.end(JSON.stringify({ error: message }));
845
+ writeInitiativeMutationError(res, error, 'Failed to create initiative');
570
846
  }
571
847
  });
572
848
  // GET /api/taskforce/initiative/:id - Read one initiative
@@ -590,15 +866,31 @@ export function registerTaskRoutes(deps) {
590
866
  const body = await parseJsonBody(req);
591
867
  try {
592
868
  const workspaceId = requestWorkspaceId(req);
593
- const updated = core.updateInitiative(params.id, body || {}, workspaceId, { actorRef: 'user' });
869
+ const router = createInitiativeRouter(req, workspaceId);
870
+ const allowed = new Set(['title', 'description', 'ownerId', 'order', 'attachments']);
871
+ const unsupported = Object.keys(body || {}).filter((key) => !allowed.has(key));
872
+ if (router.enabled && unsupported.length > 0) {
873
+ const error = new Error(`Unsupported initiative fields: ${unsupported.sort().join(', ')}`);
874
+ error.code = 'INITIATIVE_MUTATION_INVALID';
875
+ error.statusCode = 400;
876
+ throw error;
877
+ }
878
+ const durablePatch = {
879
+ ...(body || {}),
880
+ ...(body && Object.prototype.hasOwnProperty.call(body, 'attachments')
881
+ ? { attachments: serializeCanonicalPlanningAttachmentLinks(body.attachments) }
882
+ : {}),
883
+ };
884
+ const updated = router.enabled
885
+ ? initiativeResult(router.updateMetadata(params.id, durablePatch))
886
+ : core.updateInitiative(params.id, body || {}, workspaceId, { actorRef: 'user' });
887
+ if (!updated)
888
+ throw new Error('Durable initiative capture did not return a provisional initiative.');
594
889
  res.writeHead(200, { 'Content-Type': 'application/json' });
595
890
  res.end(JSON.stringify(updated));
596
891
  }
597
892
  catch (error) {
598
- const statusCode = resolveErrorStatusCode(error, 400);
599
- const message = error instanceof Error ? error.message : 'Failed to update initiative';
600
- res.writeHead(statusCode, { 'Content-Type': 'application/json' });
601
- res.end(JSON.stringify({ error: message }));
893
+ writeInitiativeMutationError(res, error, 'Failed to update initiative');
602
894
  }
603
895
  });
604
896
  addRoute('POST', '/api/taskforce/initiative/:id/archive', async (req, res, params) => {
@@ -606,15 +898,17 @@ export function registerTaskRoutes(deps) {
606
898
  return;
607
899
  try {
608
900
  const workspaceId = requestWorkspaceId(req);
609
- const archived = core.archiveInitiative(params.id, workspaceId, { actorRef: 'user' });
901
+ const router = createInitiativeRouter(req, workspaceId);
902
+ const archived = router.enabled
903
+ ? initiativeResult(router.archive(params.id))
904
+ : core.archiveInitiative(params.id, workspaceId, { actorRef: 'user' });
905
+ if (!archived)
906
+ throw new Error('Durable initiative capture did not return a provisional initiative.');
610
907
  res.writeHead(200, { 'Content-Type': 'application/json' });
611
908
  res.end(JSON.stringify(archived));
612
909
  }
613
910
  catch (error) {
614
- const statusCode = resolveErrorStatusCode(error, 400);
615
- const message = error instanceof Error ? error.message : 'Failed to archive initiative';
616
- res.writeHead(statusCode, { 'Content-Type': 'application/json' });
617
- res.end(JSON.stringify({ error: message }));
911
+ writeInitiativeMutationError(res, error, 'Failed to archive initiative');
618
912
  }
619
913
  });
620
914
  addRoute('POST', '/api/taskforce/initiative/:id/unarchive', async (req, res, params) => {
@@ -622,15 +916,17 @@ export function registerTaskRoutes(deps) {
622
916
  return;
623
917
  try {
624
918
  const workspaceId = requestWorkspaceId(req);
625
- const restored = core.unarchiveInitiative(params.id, workspaceId, { actorRef: 'user' });
919
+ const router = createInitiativeRouter(req, workspaceId);
920
+ const restored = router.enabled
921
+ ? initiativeResult(router.unarchive(params.id))
922
+ : core.unarchiveInitiative(params.id, workspaceId, { actorRef: 'user' });
923
+ if (!restored)
924
+ throw new Error('Durable initiative capture did not return a provisional initiative.');
626
925
  res.writeHead(200, { 'Content-Type': 'application/json' });
627
926
  res.end(JSON.stringify(restored));
628
927
  }
629
928
  catch (error) {
630
- const statusCode = resolveErrorStatusCode(error, 400);
631
- const message = error instanceof Error ? error.message : 'Failed to unarchive initiative';
632
- res.writeHead(statusCode, { 'Content-Type': 'application/json' });
633
- res.end(JSON.stringify({ error: message }));
929
+ writeInitiativeMutationError(res, error, 'Failed to unarchive initiative');
634
930
  }
635
931
  });
636
932
  // GET /api/taskforce/workstreams - List workstreams
@@ -649,15 +945,39 @@ export function registerTaskRoutes(deps) {
649
945
  const body = await parseJsonBody(req);
650
946
  try {
651
947
  const workspaceId = requestWorkspaceId(req);
652
- const workstream = core.createWorkstream(body || {}, workspaceId, { actorRef: 'user' });
948
+ const router = createWorkstreamRouter(req, workspaceId);
949
+ const allowed = new Set(['id', 'initiativeId', 'title', 'description', 'ownerId', 'order', 'attachments', 'createdAt']);
950
+ const unsupported = Object.keys(body || {}).filter((key) => !allowed.has(key));
951
+ if (router.enabled && unsupported.length > 0) {
952
+ const error = new Error(`Unsupported workstream fields: ${unsupported.sort().join(', ')}`);
953
+ error.code = 'WORKSTREAM_MUTATION_INVALID';
954
+ error.statusCode = 400;
955
+ throw error;
956
+ }
957
+ if (router.enabled && (!String(body?.id || '').trim() || !String(body?.createdAt || '').trim())) {
958
+ const error = new Error('Activated workstream create requires stable id and createdAt fields.');
959
+ error.code = 'WORKSTREAM_MUTATION_IDENTITY_REQUIRED';
960
+ error.statusCode = 400;
961
+ throw error;
962
+ }
963
+ const workstream = router.enabled
964
+ ? workstreamResult(router.create(String(body?.id || '').trim(), {
965
+ initiativeId: body?.initiativeId ?? null,
966
+ title: body?.title,
967
+ description: body?.description ?? null,
968
+ ownerId: body?.ownerId ?? null,
969
+ order: body?.order ?? null,
970
+ attachments: serializeCanonicalPlanningAttachmentLinks(body?.attachments ?? []),
971
+ createdAt: String(body?.createdAt || '').trim(),
972
+ }))
973
+ : core.createWorkstream(body || {}, workspaceId, { actorRef: 'user' });
974
+ if (!workstream)
975
+ throw new Error('Durable workstream capture did not return a provisional workstream.');
653
976
  res.writeHead(201, { 'Content-Type': 'application/json' });
654
977
  res.end(JSON.stringify(workstream));
655
978
  }
656
979
  catch (error) {
657
- const statusCode = resolveErrorStatusCode(error, 400);
658
- const message = error instanceof Error ? error.message : 'Failed to create workstream';
659
- res.writeHead(statusCode, { 'Content-Type': 'application/json' });
660
- res.end(JSON.stringify({ error: message }));
980
+ writeWorkstreamMutationError(res, error, 'Failed to create workstream');
661
981
  }
662
982
  });
663
983
  // GET /api/taskforce/workstream/:id - Read one workstream
@@ -681,15 +1001,31 @@ export function registerTaskRoutes(deps) {
681
1001
  const body = await parseJsonBody(req);
682
1002
  try {
683
1003
  const workspaceId = requestWorkspaceId(req);
684
- const updated = core.updateWorkstream(params.id, body || {}, workspaceId, { actorRef: 'user' });
1004
+ const router = createWorkstreamRouter(req, workspaceId);
1005
+ const allowed = new Set(['initiativeId', 'title', 'description', 'ownerId', 'order', 'attachments']);
1006
+ const unsupported = Object.keys(body || {}).filter((key) => !allowed.has(key));
1007
+ if (router.enabled && unsupported.length > 0) {
1008
+ const error = new Error(`Unsupported workstream fields: ${unsupported.sort().join(', ')}`);
1009
+ error.code = 'WORKSTREAM_MUTATION_INVALID';
1010
+ error.statusCode = 400;
1011
+ throw error;
1012
+ }
1013
+ const durablePatch = {
1014
+ ...(body || {}),
1015
+ ...(body && Object.prototype.hasOwnProperty.call(body, 'attachments')
1016
+ ? { attachments: serializeCanonicalPlanningAttachmentLinks(body.attachments) }
1017
+ : {}),
1018
+ };
1019
+ const updated = router.enabled
1020
+ ? workstreamResult(router.updateMetadata(params.id, durablePatch))
1021
+ : core.updateWorkstream(params.id, body || {}, workspaceId, { actorRef: 'user' });
1022
+ if (!updated)
1023
+ throw new Error('Durable workstream capture did not return a provisional workstream.');
685
1024
  res.writeHead(200, { 'Content-Type': 'application/json' });
686
1025
  res.end(JSON.stringify(updated));
687
1026
  }
688
1027
  catch (error) {
689
- const statusCode = resolveErrorStatusCode(error, 400);
690
- const message = error instanceof Error ? error.message : 'Failed to update workstream';
691
- res.writeHead(statusCode, { 'Content-Type': 'application/json' });
692
- res.end(JSON.stringify({ error: message }));
1028
+ writeWorkstreamMutationError(res, error, 'Failed to update workstream');
693
1029
  }
694
1030
  });
695
1031
  addRoute('POST', '/api/taskforce/workstream/:id/archive', async (req, res, params) => {
@@ -697,15 +1033,17 @@ export function registerTaskRoutes(deps) {
697
1033
  return;
698
1034
  try {
699
1035
  const workspaceId = requestWorkspaceId(req);
700
- const archived = core.archiveWorkstream(params.id, workspaceId, { actorRef: 'user' });
1036
+ const router = createWorkstreamRouter(req, workspaceId);
1037
+ const archived = router.enabled
1038
+ ? workstreamResult(router.archive(params.id))
1039
+ : core.archiveWorkstream(params.id, workspaceId, { actorRef: 'user' });
1040
+ if (!archived)
1041
+ throw new Error('Durable workstream capture did not return a provisional workstream.');
701
1042
  res.writeHead(200, { 'Content-Type': 'application/json' });
702
1043
  res.end(JSON.stringify(archived));
703
1044
  }
704
1045
  catch (error) {
705
- const statusCode = resolveErrorStatusCode(error, 400);
706
- const message = error instanceof Error ? error.message : 'Failed to archive workstream';
707
- res.writeHead(statusCode, { 'Content-Type': 'application/json' });
708
- res.end(JSON.stringify({ error: message }));
1046
+ writeWorkstreamMutationError(res, error, 'Failed to archive workstream');
709
1047
  }
710
1048
  });
711
1049
  addRoute('POST', '/api/taskforce/workstream/:id/unarchive', async (req, res, params) => {
@@ -713,15 +1051,56 @@ export function registerTaskRoutes(deps) {
713
1051
  return;
714
1052
  try {
715
1053
  const workspaceId = requestWorkspaceId(req);
716
- const restored = core.unarchiveWorkstream(params.id, workspaceId, { actorRef: 'user' });
1054
+ const router = createWorkstreamRouter(req, workspaceId);
1055
+ const restored = router.enabled
1056
+ ? workstreamResult(router.unarchive(params.id))
1057
+ : core.unarchiveWorkstream(params.id, workspaceId, { actorRef: 'user' });
1058
+ if (!restored)
1059
+ throw new Error('Durable workstream capture did not return a provisional workstream.');
717
1060
  res.writeHead(200, { 'Content-Type': 'application/json' });
718
1061
  res.end(JSON.stringify(restored));
719
1062
  }
720
1063
  catch (error) {
721
- const statusCode = resolveErrorStatusCode(error, 400);
722
- const message = error instanceof Error ? error.message : 'Failed to unarchive workstream';
723
- res.writeHead(statusCode, { 'Content-Type': 'application/json' });
724
- res.end(JSON.stringify({ error: message }));
1064
+ writeWorkstreamMutationError(res, error, 'Failed to unarchive workstream');
1065
+ }
1066
+ });
1067
+ addRoute('POST', '/api/taskforce/workstream/:id/task-order', async (req, res, params) => {
1068
+ if (!ensureAppAccess(req, res))
1069
+ return;
1070
+ const body = await parseJsonBody(req);
1071
+ try {
1072
+ const workspaceId = requestWorkspaceId(req);
1073
+ if (!Array.isArray(body?.taskIds)) {
1074
+ const error = new Error('taskIds must be an array.');
1075
+ error.code = 'WORKSTREAM_TASK_ORDER_INVALID';
1076
+ error.statusCode = 400;
1077
+ throw error;
1078
+ }
1079
+ const runtimeMode = context.authConfig?.runtimeMode === 'cloud' ? 'cloud' : requestRuntimeMode(req);
1080
+ const operationId = requestHeader(req, 'x-taskforce-operation-id', '').trim();
1081
+ const router = createDurableWorkstreamTaskOrderMutationRouter({
1082
+ core,
1083
+ runtimeMode,
1084
+ tenantId: core.getTenantId(),
1085
+ workspaceId,
1086
+ cloudClientId: 'http-cloud',
1087
+ ...(operationId ? { operationId } : {}),
1088
+ });
1089
+ const taskIds = body.taskIds.map((value) => String(value || '').trim());
1090
+ let orderedTaskIds;
1091
+ if (router.enabled) {
1092
+ orderedTaskIds = router.replace(params.id, taskIds).taskIds;
1093
+ }
1094
+ else {
1095
+ orderedTaskIds = core.replaceWorkstreamTaskOrder(params.id, taskIds, workspaceId)
1096
+ .map((task) => task.id);
1097
+ core.notifyDurableTaskBatchCommitted(workspaceId, orderedTaskIds);
1098
+ }
1099
+ res.writeHead(200, { 'Content-Type': 'application/json' });
1100
+ res.end(JSON.stringify({ success: true, workstreamId: params.id, taskIds: orderedTaskIds }));
1101
+ }
1102
+ catch (error) {
1103
+ writeWorkstreamMutationError(res, error, 'Failed to reorder workstream tasks');
725
1104
  }
726
1105
  });
727
1106
  // PATCH /api/taskforce/task/:id/schedule - Update schedule fields for one task
@@ -731,10 +1110,19 @@ export function registerTaskRoutes(deps) {
731
1110
  const body = await parseJsonBody(req);
732
1111
  try {
733
1112
  const workspaceId = requestWorkspaceId(req);
734
- const result = core.updateTaskSchedule(params.id, {
735
- scheduledDate: body?.scheduledDate ?? null,
736
- orderInDay: body?.orderInDay
737
- }, workspaceId);
1113
+ const durableRouter = createTaskHttpRootRouter(req, workspaceId);
1114
+ const result = durableRouter.enabled
1115
+ ? (() => {
1116
+ const task = durableRouter.update(params.id, {
1117
+ scheduledDate: body?.scheduledDate ?? null,
1118
+ orderInDay: body?.orderInDay,
1119
+ }, 'manual', 'task-schedule-changed');
1120
+ return { task, warnings: core.getTaskSchedulingWarnings(task) };
1121
+ })()
1122
+ : core.updateTaskSchedule(params.id, {
1123
+ scheduledDate: body?.scheduledDate ?? null,
1124
+ orderInDay: body?.orderInDay
1125
+ }, workspaceId);
738
1126
  if (!result) {
739
1127
  res.writeHead(404, { 'Content-Type': 'application/json' });
740
1128
  res.end(JSON.stringify({ error: 'Task not found' }));
@@ -760,7 +1148,21 @@ export function registerTaskRoutes(deps) {
760
1148
  try {
761
1149
  const moves = Array.isArray(body?.moves) ? body.moves : [];
762
1150
  const workspaceId = requestWorkspaceId(req);
763
- const result = core.reorderScheduledTasks(moves, workspaceId);
1151
+ const durableRouters = createTaskHttpDurableRouters({ core, context, req, workspaceId });
1152
+ const rootRouter = durableRouters.root;
1153
+ const result = rootRouter.enabled
1154
+ ? rootRouter.runBatch('schedule/reorder', { moves }, () => (moves.reduce((aggregate, move, index) => {
1155
+ const taskId = String(move?.id || '').trim();
1156
+ const router = durableRouters.createRootRouter(durableRouters.deriveChildOperationId('schedule/reorder', index, taskId));
1157
+ const task = router.update(taskId, {
1158
+ scheduledDate: move?.scheduledDate ?? null,
1159
+ orderInDay: move?.orderInDay,
1160
+ }, 'manual', 'task-schedule-changed');
1161
+ aggregate.tasks.push(task);
1162
+ aggregate.warnings.push(...core.getTaskSchedulingWarnings(task));
1163
+ return aggregate;
1164
+ }, { tasks: [], warnings: [] })))
1165
+ : core.reorderScheduledTasks(moves, workspaceId);
764
1166
  res.writeHead(200, { 'Content-Type': 'application/json' });
765
1167
  res.end(JSON.stringify(result));
766
1168
  }
@@ -788,7 +1190,10 @@ export function registerTaskRoutes(deps) {
788
1190
  return;
789
1191
  try {
790
1192
  const workspaceId = requestWorkspaceId(req);
791
- const archived = core.archiveTask(params.id, false, undefined, workspaceId, { actorRef: 'user' });
1193
+ const durableRouter = createTaskHttpRootRouter(req, workspaceId);
1194
+ const archived = durableRouter.enabled
1195
+ ? durableRouter.archive(params.id, false, null)
1196
+ : core.archiveTask(params.id, false, undefined, workspaceId, { actorRef: 'user' });
792
1197
  if (!archived) {
793
1198
  res.writeHead(404, { 'Content-Type': 'application/json' });
794
1199
  res.end(JSON.stringify({ error: 'Task not found' }));
@@ -800,8 +1205,9 @@ export function registerTaskRoutes(deps) {
800
1205
  catch (error) {
801
1206
  const statusCode = resolveErrorStatusCode(error, 400);
802
1207
  const message = error instanceof Error ? error.message : 'Failed to archive task';
1208
+ const errorCode = error?.code;
803
1209
  res.writeHead(statusCode, { 'Content-Type': 'application/json' });
804
- res.end(JSON.stringify({ error: message }));
1210
+ res.end(JSON.stringify({ error: message, code: errorCode }));
805
1211
  }
806
1212
  });
807
1213
  // POST /api/taskforce/task/:id/cancel - Archive as cancelled
@@ -812,7 +1218,10 @@ export function registerTaskRoutes(deps) {
812
1218
  const reason = body.reason || 'Cancelled';
813
1219
  try {
814
1220
  const workspaceId = requestWorkspaceId(req);
815
- const archived = core.archiveTask(params.id, true, reason, workspaceId, { actorRef: 'user' });
1221
+ const durableRouter = createTaskHttpRootRouter(req, workspaceId);
1222
+ const archived = durableRouter.enabled
1223
+ ? durableRouter.archive(params.id, true, reason)
1224
+ : core.archiveTask(params.id, true, reason, workspaceId, { actorRef: 'user' });
816
1225
  if (!archived) {
817
1226
  res.writeHead(404, { 'Content-Type': 'application/json' });
818
1227
  res.end(JSON.stringify({ error: 'Task not found' }));
@@ -824,8 +1233,9 @@ export function registerTaskRoutes(deps) {
824
1233
  catch (error) {
825
1234
  const statusCode = resolveErrorStatusCode(error, 400);
826
1235
  const message = error instanceof Error ? error.message : 'Failed to cancel task';
1236
+ const errorCode = error?.code;
827
1237
  res.writeHead(statusCode, { 'Content-Type': 'application/json' });
828
- res.end(JSON.stringify({ error: message }));
1238
+ res.end(JSON.stringify({ error: message, code: errorCode }));
829
1239
  }
830
1240
  });
831
1241
  // DELETE /api/taskforce/task/:id - Delete a task
@@ -834,7 +1244,10 @@ export function registerTaskRoutes(deps) {
834
1244
  return;
835
1245
  try {
836
1246
  const workspaceId = requestWorkspaceId(req);
837
- const deleted = core.softDeleteTask(params.id, workspaceId, { actorRef: 'user', source: 'ui' });
1247
+ const durableRouter = createTaskHttpRootRouter(req, workspaceId);
1248
+ const deleted = durableRouter.enabled
1249
+ ? durableRouter.delete(params.id)
1250
+ : core.softDeleteTask(params.id, workspaceId, { actorRef: 'user', source: 'ui' });
838
1251
  if (!deleted) {
839
1252
  res.writeHead(404, { 'Content-Type': 'application/json' });
840
1253
  res.end(JSON.stringify({ error: 'Task not found' }));
@@ -846,8 +1259,9 @@ export function registerTaskRoutes(deps) {
846
1259
  catch (error) {
847
1260
  const statusCode = resolveErrorStatusCode(error, 400);
848
1261
  const message = error instanceof Error ? error.message : 'Failed to delete task';
1262
+ const errorCode = error?.code;
849
1263
  res.writeHead(statusCode, { 'Content-Type': 'application/json' });
850
- res.end(JSON.stringify({ error: message }));
1264
+ res.end(JSON.stringify({ error: message, code: errorCode }));
851
1265
  }
852
1266
  });
853
1267
  const handleRestoreDeletedTaskRoute = async (req, res, params) => {
@@ -855,7 +1269,10 @@ export function registerTaskRoutes(deps) {
855
1269
  return;
856
1270
  try {
857
1271
  const workspaceId = requestWorkspaceId(req);
858
- const restored = core.restoreDeletedTask(params.id, workspaceId, { actorRef: 'user' });
1272
+ const durableRouter = createTaskHttpRootRouter(req, workspaceId);
1273
+ const restored = durableRouter.enabled
1274
+ ? durableRouter.restore(params.id)
1275
+ : core.restoreDeletedTask(params.id, workspaceId, { actorRef: 'user' });
859
1276
  if (!restored) {
860
1277
  res.writeHead(404, { 'Content-Type': 'application/json' });
861
1278
  res.end(JSON.stringify({ error: 'Deleted task not found' }));
@@ -875,6 +1292,136 @@ export function registerTaskRoutes(deps) {
875
1292
  // POST /api/taskforce/deleted/:id/restore - Restore a deleted task
876
1293
  addRoute('POST', '/api/taskforce/deleted/:id/restore', handleRestoreDeletedTaskRoute);
877
1294
  addRoute('POST', '/api/taskforce/trash/:id/restore', handleRestoreDeletedTaskRoute);
1295
+ const handleRestoreDeletedTaskBatch = async (req, res) => {
1296
+ if (!ensureAppAccess(req, res))
1297
+ return;
1298
+ const body = await parseJsonBody(req);
1299
+ if (!Array.isArray(body.ids) || body.ids.length === 0) {
1300
+ res.writeHead(400, { 'Content-Type': 'application/json' });
1301
+ res.end(JSON.stringify({
1302
+ error: 'ids must be a non-empty array of deleted record ids.',
1303
+ code: 'DELETED_TASK_RESTORE_BATCH_INVALID',
1304
+ }));
1305
+ return;
1306
+ }
1307
+ if (body.ids.length > 100) {
1308
+ res.writeHead(400, { 'Content-Type': 'application/json' });
1309
+ res.end(JSON.stringify({
1310
+ error: 'A maximum of 100 deleted tasks can be restored per request.',
1311
+ code: 'DELETED_TASK_RESTORE_BATCH_LIMIT',
1312
+ }));
1313
+ return;
1314
+ }
1315
+ if (body.ids.some((value) => typeof value !== 'string' || !value.trim())) {
1316
+ res.writeHead(400, { 'Content-Type': 'application/json' });
1317
+ res.end(JSON.stringify({
1318
+ error: 'ids must contain unique, non-empty deleted record ids.',
1319
+ code: 'DELETED_TASK_RESTORE_BATCH_INVALID',
1320
+ }));
1321
+ return;
1322
+ }
1323
+ const ids = body.ids.map((value) => value.trim());
1324
+ if (new Set(ids).size !== ids.length) {
1325
+ res.writeHead(400, { 'Content-Type': 'application/json' });
1326
+ res.end(JSON.stringify({
1327
+ error: 'ids must contain unique, non-empty deleted record ids.',
1328
+ code: 'DELETED_TASK_RESTORE_BATCH_INVALID',
1329
+ }));
1330
+ return;
1331
+ }
1332
+ const restoreDestination = parseTaskRestoreDestination(body.restoreDestination);
1333
+ if (!restoreDestination) {
1334
+ res.writeHead(400, { 'Content-Type': 'application/json' });
1335
+ res.end(JSON.stringify({
1336
+ error: 'restoreDestination must be previous or archive.',
1337
+ code: 'DELETED_TASK_RESTORE_DESTINATION_INVALID',
1338
+ }));
1339
+ return;
1340
+ }
1341
+ const workspaceId = requestWorkspaceId(req);
1342
+ const durableRouters = createTaskHttpDurableRouters({ core, context, req, workspaceId });
1343
+ let result;
1344
+ try {
1345
+ result = durableRouters.root.enabled
1346
+ ? createTaskHttpBulkRouter(req, workspaceId).restoreDeleted(ids, restoreDestination)
1347
+ : (() => {
1348
+ const restored = [];
1349
+ const errors = [];
1350
+ for (let index = 0; index < ids.length; index += 1) {
1351
+ const deletedRecordId = ids[index];
1352
+ try {
1353
+ const deleted = core.getDeletedTask(deletedRecordId, workspaceId);
1354
+ if (!deleted || deleted.id !== deletedRecordId) {
1355
+ errors.push({
1356
+ index,
1357
+ id: deletedRecordId,
1358
+ message: 'Deleted task not found.',
1359
+ statusCode: 404,
1360
+ code: 'DELETED_TASK_NOT_FOUND',
1361
+ });
1362
+ continue;
1363
+ }
1364
+ const task = core.restoreDeletedTask(deletedRecordId, workspaceId, {
1365
+ actorRef: 'user',
1366
+ restoreDestination,
1367
+ });
1368
+ if (!task) {
1369
+ errors.push({
1370
+ index,
1371
+ id: deletedRecordId,
1372
+ message: 'Deleted task not found.',
1373
+ statusCode: 404,
1374
+ code: 'DELETED_TASK_NOT_FOUND',
1375
+ });
1376
+ continue;
1377
+ }
1378
+ restored.push({
1379
+ deletedRecordId,
1380
+ taskId: task.id,
1381
+ task,
1382
+ restoredTo: task.isArchived === true ? 'archived' : 'active',
1383
+ });
1384
+ }
1385
+ catch (error) {
1386
+ errors.push({
1387
+ index,
1388
+ id: deletedRecordId,
1389
+ message: error instanceof Error ? error.message : 'Failed to restore deleted task.',
1390
+ statusCode: resolveErrorStatusCode(error, 400),
1391
+ code: error instanceof TaskforceRuleError ? error.code : error?.code,
1392
+ });
1393
+ }
1394
+ }
1395
+ return { restored, errors };
1396
+ })();
1397
+ }
1398
+ catch (error) {
1399
+ const statusCode = resolveErrorStatusCode(error, 400);
1400
+ res.writeHead(statusCode, { 'Content-Type': 'application/json' });
1401
+ res.end(JSON.stringify({
1402
+ error: error instanceof Error ? error.message : 'Failed to restore deleted tasks.',
1403
+ code: error?.code,
1404
+ }));
1405
+ return;
1406
+ }
1407
+ const archivedCount = result.restored.filter((item) => item.restoredTo === 'archived').length;
1408
+ const activeCount = result.restored.length - archivedCount;
1409
+ res.writeHead(200, { 'Content-Type': 'application/json' });
1410
+ res.end(JSON.stringify({
1411
+ success: result.errors.length === 0,
1412
+ summary: {
1413
+ requested: ids.length,
1414
+ succeeded: result.restored.length,
1415
+ failed: result.errors.length,
1416
+ restoredToArchived: archivedCount,
1417
+ restoredToActive: activeCount,
1418
+ },
1419
+ results: result.restored,
1420
+ errors: result.errors,
1421
+ }));
1422
+ };
1423
+ addRoute('POST', '/api/taskforce/deleted/restore-batch', handleRestoreDeletedTaskBatch);
1424
+ addRoute('POST', '/api/taskforce/trash/restore-batch', handleRestoreDeletedTaskBatch);
878
1425
  const handlePermanentlyDeleteDeletedTaskRoute = async (req, res, params) => {
879
1426
  if (!ensureAppAccess(req, res))
880
1427
  return;
@@ -922,36 +1469,86 @@ export function registerTaskRoutes(deps) {
922
1469
  addRoute('POST', '/api/taskforce/task/:id/comment', async (req, res, params) => {
923
1470
  if (!ensureAppAccess(req, res))
924
1471
  return;
925
- const body = await parseJsonBody(req);
926
- const { text, author = 'user' } = body;
927
- if (!text) {
928
- res.writeHead(400, { 'Content-Type': 'application/json' });
929
- res.end(JSON.stringify({ error: 'Comment text is required' }));
930
- return;
1472
+ try {
1473
+ const body = await parseJsonBody(req);
1474
+ const { text, commentId, timestamp } = body;
1475
+ if (!text) {
1476
+ res.writeHead(400, { 'Content-Type': 'application/json' });
1477
+ res.end(JSON.stringify({ error: 'Comment text is required', code: 'TASK_COMMENT_INVALID' }));
1478
+ return;
1479
+ }
1480
+ const workspaceId = requestWorkspaceId(req);
1481
+ const durableRouters = createTaskHttpDurableRouters({ core, context, req, workspaceId });
1482
+ const { comments: durableRouter, actorRef } = durableRouters;
1483
+ let updated;
1484
+ if (durableRouter.enabled) {
1485
+ const result = durableRouter.append({
1486
+ taskId: params.id,
1487
+ comment: {
1488
+ id: String(commentId || `comment-${randomUUID()}`),
1489
+ author: actorRef,
1490
+ submittedAuthor: actorRef,
1491
+ text: String(text),
1492
+ timestamp: String(timestamp || new Date().toISOString()),
1493
+ },
1494
+ });
1495
+ updated = result.task;
1496
+ }
1497
+ else {
1498
+ updated = core.addComment(params.id, String(text), actorRef, workspaceId, { actorRef });
1499
+ }
1500
+ if (!updated) {
1501
+ res.writeHead(404, { 'Content-Type': 'application/json' });
1502
+ res.end(JSON.stringify({ error: 'Task not found', code: 'TASK_NOT_FOUND' }));
1503
+ return;
1504
+ }
1505
+ res.writeHead(200, { 'Content-Type': 'application/json' });
1506
+ res.end(JSON.stringify(updated));
931
1507
  }
932
- const workspaceId = requestWorkspaceId(req);
933
- const updated = core.addComment(params.id, text, author, workspaceId, { actorRef: author || 'user' });
934
- if (!updated) {
935
- res.writeHead(404, { 'Content-Type': 'application/json' });
936
- res.end(JSON.stringify({ error: 'Task not found' }));
937
- return;
1508
+ catch (error) {
1509
+ const statusCode = resolveErrorStatusCode(error, 400);
1510
+ const retryAt = typeof error?.retryAt === 'string'
1511
+ ? String(error.retryAt)
1512
+ : null;
1513
+ const retryAfterSeconds = retryAt && Number.isFinite(Date.parse(retryAt))
1514
+ ? Math.max(0, Math.ceil((Date.parse(retryAt) - Date.now()) / 1_000))
1515
+ : null;
1516
+ res.writeHead(statusCode, {
1517
+ 'Content-Type': 'application/json',
1518
+ ...(retryAfterSeconds !== null ? { 'Retry-After': String(retryAfterSeconds) } : {}),
1519
+ });
1520
+ res.end(JSON.stringify({
1521
+ error: error instanceof Error ? error.message : 'Failed to add comment.',
1522
+ ...(error?.code ? { code: String(error.code) } : {}),
1523
+ ...(retryAt ? { retryAt } : {}),
1524
+ }));
938
1525
  }
939
- res.writeHead(200, { 'Content-Type': 'application/json' });
940
- res.end(JSON.stringify(updated));
941
1526
  });
942
1527
  // POST /api/taskforce/task/:id/unarchive - Restore an archived task
943
1528
  addRoute('POST', '/api/taskforce/task/:id/unarchive', async (req, res, params) => {
944
1529
  if (!ensureAppAccess(req, res))
945
1530
  return;
946
- const workspaceId = requestWorkspaceId(req);
947
- const restored = core.unarchiveTask(params.id, workspaceId, { actorRef: 'user' });
948
- if (!restored) {
949
- res.writeHead(404, { 'Content-Type': 'application/json' });
950
- res.end(JSON.stringify({ error: 'Archived task not found' }));
951
- return;
1531
+ try {
1532
+ const workspaceId = requestWorkspaceId(req);
1533
+ const durableRouter = createTaskHttpRootRouter(req, workspaceId);
1534
+ const restored = durableRouter.enabled
1535
+ ? durableRouter.unarchive(params.id)
1536
+ : core.unarchiveTask(params.id, workspaceId, { actorRef: 'user' });
1537
+ if (!restored) {
1538
+ res.writeHead(404, { 'Content-Type': 'application/json' });
1539
+ res.end(JSON.stringify({ error: 'Archived task not found' }));
1540
+ return;
1541
+ }
1542
+ res.writeHead(200, { 'Content-Type': 'application/json' });
1543
+ res.end(JSON.stringify(restored));
1544
+ }
1545
+ catch (error) {
1546
+ const statusCode = resolveErrorStatusCode(error, 400);
1547
+ const message = error instanceof Error ? error.message : 'Failed to unarchive task';
1548
+ const errorCode = error?.code;
1549
+ res.writeHead(statusCode, { 'Content-Type': 'application/json' });
1550
+ res.end(JSON.stringify({ error: message, code: errorCode }));
952
1551
  }
953
- res.writeHead(200, { 'Content-Type': 'application/json' });
954
- res.end(JSON.stringify(restored));
955
1552
  });
956
1553
  // === SECTION: Bulk operations ===
957
1554
  // POST /api/taskforce/bulk-create - Create multiple tasks with optional atomic + validate-only behavior
@@ -966,12 +1563,27 @@ export function registerTaskRoutes(deps) {
966
1563
  return;
967
1564
  }
968
1565
  const workspaceId = requestWorkspaceId(req);
969
- const result = core.bulkCreateTasks(tasks, {
970
- atomic: atomic !== false,
971
- validateOnly: validate_only === true,
972
- workspaceId,
973
- provisionalLocalReference: shouldUseProvisionalTaskReferences(requestRuntimeMode(req))
974
- });
1566
+ const durableRouters = createTaskHttpDurableRouters({ core, context, req, workspaceId });
1567
+ let result;
1568
+ try {
1569
+ result = !durableRouters.root.enabled || validate_only === true
1570
+ ? core.bulkCreateTasks(tasks, {
1571
+ atomic: atomic !== false,
1572
+ validateOnly: validate_only === true,
1573
+ workspaceId,
1574
+ provisionalLocalReference: shouldUseProvisionalTaskReferences(requestRuntimeMode(req))
1575
+ })
1576
+ : createTaskHttpBulkRouter(req, workspaceId).create(tasks, atomic !== false);
1577
+ }
1578
+ catch (error) {
1579
+ const statusCode = resolveErrorStatusCode(error, 400);
1580
+ res.writeHead(statusCode, { 'Content-Type': 'application/json' });
1581
+ res.end(JSON.stringify({
1582
+ error: error instanceof Error ? error.message : 'Failed to create tasks',
1583
+ code: error?.code,
1584
+ }));
1585
+ return;
1586
+ }
975
1587
  const hasErrors = result.errors.length > 0;
976
1588
  const succeeded = validate_only ? (hasErrors ? 0 : result.total) : result.created.length;
977
1589
  const summary = buildBatchSummary({
@@ -1004,29 +1616,45 @@ export function registerTaskRoutes(deps) {
1004
1616
  return;
1005
1617
  }
1006
1618
  const isCancellation = status === 'cancelled';
1007
- const archived = [];
1008
- const errors = [];
1009
- for (let i = 0; i < ids.length; i++) {
1010
- const taskId = ids[i];
1011
- try {
1012
- const workspaceId = requestWorkspaceId(req);
1013
- const item = core.archiveTask(taskId, isCancellation, undefined, workspaceId);
1014
- if (!item) {
1015
- errors.push({ index: i, id: taskId, message: 'Task not found', statusCode: 404, code: 'TASK_NOT_FOUND' });
1016
- continue;
1017
- }
1018
- archived.push(item);
1019
- }
1020
- catch (error) {
1021
- errors.push({
1022
- index: i,
1023
- id: taskId,
1024
- message: error instanceof Error ? error.message : 'Failed to archive task',
1025
- statusCode: resolveErrorStatusCode(error, 400),
1026
- code: error instanceof TaskforceRuleError ? error.code : error?.code
1027
- });
1028
- }
1619
+ const workspaceId = requestWorkspaceId(req);
1620
+ const durableRouters = createTaskHttpDurableRouters({ core, context, req, workspaceId });
1621
+ let batchResult;
1622
+ try {
1623
+ batchResult = durableRouters.root.enabled
1624
+ ? createTaskHttpBulkRouter(req, workspaceId).archive(ids, status)
1625
+ : (() => {
1626
+ const archived = [];
1627
+ const errors = [];
1628
+ for (let i = 0; i < ids.length; i += 1) {
1629
+ const taskId = ids[i];
1630
+ try {
1631
+ const item = core.archiveTask(taskId, isCancellation, undefined, workspaceId);
1632
+ if (!item) {
1633
+ errors.push({ index: i, id: taskId, message: 'Task not found', statusCode: 404, code: 'TASK_NOT_FOUND' });
1634
+ continue;
1635
+ }
1636
+ archived.push(item);
1637
+ }
1638
+ catch (error) {
1639
+ errors.push({
1640
+ index: i,
1641
+ id: taskId,
1642
+ message: error instanceof Error ? error.message : 'Failed to archive task',
1643
+ statusCode: resolveErrorStatusCode(error, 400),
1644
+ code: error instanceof TaskforceRuleError ? error.code : error?.code
1645
+ });
1646
+ }
1647
+ }
1648
+ return { archived, errors };
1649
+ })();
1650
+ }
1651
+ catch (error) {
1652
+ const statusCode = resolveErrorStatusCode(error, 400);
1653
+ res.writeHead(statusCode, { 'Content-Type': 'application/json' });
1654
+ res.end(JSON.stringify({ error: error instanceof Error ? error.message : 'Failed to archive tasks', code: error?.code }));
1655
+ return;
1029
1656
  }
1657
+ const { archived, errors } = batchResult;
1030
1658
  const summary = buildBatchSummary({
1031
1659
  operation: 'bulk-archive',
1032
1660
  total: ids.length,
@@ -1054,41 +1682,51 @@ export function registerTaskRoutes(deps) {
1054
1682
  return;
1055
1683
  }
1056
1684
  const workspaceId = requestWorkspaceId(req);
1057
- const preview = core.bulkUpdateFieldsPreview(updates, workspaceId);
1058
- const results = [];
1059
- const errors = [];
1060
- for (const skipped of preview.skipped) {
1061
- if (skipped.statusCode >= 400) {
1062
- errors.push({
1063
- index: skipped.index,
1064
- id: skipped.id,
1065
- message: skipped.message,
1066
- statusCode: skipped.statusCode,
1067
- code: skipped.code
1068
- });
1069
- }
1685
+ const durableRouters = createTaskHttpDurableRouters({ core, context, req, workspaceId });
1686
+ let batchResult;
1687
+ try {
1688
+ batchResult = durableRouters.root.enabled || durableRouters.checklist.enabled || durableRouters.attachmentLinks.enabled
1689
+ ? durableRouters.bulk.updateFields(updates)
1690
+ : (() => {
1691
+ const preview = core.bulkUpdateFieldsPreview(updates, workspaceId);
1692
+ const results = [];
1693
+ const errors = [];
1694
+ for (const skipped of preview.skipped) {
1695
+ if (skipped.statusCode >= 400)
1696
+ errors.push({
1697
+ index: skipped.index, ...(skipped.id ? { id: skipped.id } : {}),
1698
+ message: skipped.message, statusCode: skipped.statusCode,
1699
+ ...(skipped.code ? { code: skipped.code } : {}),
1700
+ });
1701
+ }
1702
+ for (const item of preview.toApply) {
1703
+ try {
1704
+ const updated = core.updateTask(item.id, item.fields, workspaceId);
1705
+ if (updated)
1706
+ results.push(updated);
1707
+ else
1708
+ errors.push({ index: item.index, id: item.id, message: 'Task not found', statusCode: 404, code: 'TASK_NOT_FOUND' });
1709
+ }
1710
+ catch (error) {
1711
+ errors.push({
1712
+ index: item.index,
1713
+ id: item.id,
1714
+ message: error instanceof Error ? error.message : 'Failed to update task',
1715
+ statusCode: resolveErrorStatusCode(error, 400),
1716
+ code: error instanceof TaskforceRuleError ? error.code : error?.code
1717
+ });
1718
+ }
1719
+ }
1720
+ return { preview, results, errors };
1721
+ })();
1070
1722
  }
1071
- for (const item of preview.toApply) {
1072
- const { id, fields } = item;
1073
- try {
1074
- const updated = core.updateTask(id, fields, workspaceId);
1075
- if (updated) {
1076
- results.push(updated);
1077
- }
1078
- else {
1079
- errors.push({ index: item.index, id, message: 'Task not found', statusCode: 404, code: 'TASK_NOT_FOUND' });
1080
- }
1081
- }
1082
- catch (error) {
1083
- errors.push({
1084
- index: item.index,
1085
- id,
1086
- message: error instanceof Error ? error.message : 'Failed to update task',
1087
- statusCode: resolveErrorStatusCode(error, 400),
1088
- code: error instanceof TaskforceRuleError ? error.code : error?.code
1089
- });
1090
- }
1723
+ catch (error) {
1724
+ const statusCode = resolveErrorStatusCode(error, 400);
1725
+ res.writeHead(statusCode, { 'Content-Type': 'application/json' });
1726
+ res.end(JSON.stringify({ error: error instanceof Error ? error.message : 'Failed to update tasks', code: error?.code }));
1727
+ return;
1091
1728
  }
1729
+ const { preview, results, errors } = batchResult;
1092
1730
  const summary = buildBatchSummary({
1093
1731
  operation: 'bulk-update-fields',
1094
1732
  total: updates.length,
@@ -1165,7 +1803,22 @@ export function registerTaskRoutes(deps) {
1165
1803
  }
1166
1804
  try {
1167
1805
  const workspaceId = requestWorkspaceId(req);
1168
- const result = core.createInitiativeFromTemplate(body, workspaceId);
1806
+ const rootRouter = createTaskHttpRootRouter(req, workspaceId);
1807
+ const result = rootRouter.enabled
1808
+ ? (() => {
1809
+ const prepared = core.buildInitiativeTemplateTaskInputs(body, workspaceId);
1810
+ const batch = createTaskHttpBulkRouter(req, workspaceId).create(prepared.tasks, true, 'initiative-template-create');
1811
+ if (batch.errors.length > 0 || batch.created.length !== prepared.tasks.length) {
1812
+ const first = batch.errors[0];
1813
+ throw new TaskforceRuleError(first?.message || 'Failed to create initiative from template.', first?.statusCode || 400, first?.code || 'INITIATIVE_TEMPLATE_CREATE_FAILED', first?.details);
1814
+ }
1815
+ return {
1816
+ templateId: prepared.templateId,
1817
+ initiative: batch.created[0],
1818
+ milestones: batch.created.slice(1),
1819
+ };
1820
+ })()
1821
+ : core.createInitiativeFromTemplate(body, workspaceId);
1169
1822
  res.writeHead(201, { 'Content-Type': 'application/json' });
1170
1823
  res.end(JSON.stringify({
1171
1824
  success: true,
@@ -1201,6 +1854,77 @@ export function registerTaskRoutes(deps) {
1201
1854
  res.writeHead(200, { 'Content-Type': 'application/json' });
1202
1855
  res.end(JSON.stringify({ packs }));
1203
1856
  });
1857
+ addRoute('POST', '/api/taskforce/taxonomy-library/apply', async (req, res) => {
1858
+ if (!ensureAppAccess(req, res))
1859
+ return;
1860
+ try {
1861
+ const workspaceId = requestWorkspaceId(req);
1862
+ const body = await parseJsonBody(req);
1863
+ const pack = getBuiltInTaxonomyLibraryPack(String(body?.packId || ''));
1864
+ if (!pack)
1865
+ throw new TaskforceRuleError('Taxonomy library pack not found.', 404, 'TAXONOMY_LIBRARY_PACK_NOT_FOUND');
1866
+ const sections = body?.sections;
1867
+ if (!sections || typeof sections !== 'object' || Array.isArray(sections)) {
1868
+ throw new TaskforceRuleError('Taxonomy library sections are required.', 400, 'TAXONOMY_LIBRARY_REQUEST_INVALID');
1869
+ }
1870
+ const sectionKeys = Object.keys(sections);
1871
+ if (sectionKeys.some((key) => !['categories', 'types', 'priorities'].includes(key))
1872
+ || sectionKeys.some((key) => typeof sections[key] !== 'boolean')
1873
+ || (body?.remapExistingValuesToDefault !== undefined && typeof body.remapExistingValuesToDefault !== 'boolean')) {
1874
+ throw new TaskforceRuleError('Taxonomy library request contains invalid fields.', 400, 'TAXONOMY_LIBRARY_REQUEST_INVALID');
1875
+ }
1876
+ const selected = {
1877
+ categories: sections.categories === true,
1878
+ types: sections.types === true,
1879
+ priorities: sections.priorities === true,
1880
+ };
1881
+ if (!selected.categories && !selected.types && !selected.priorities) {
1882
+ throw new TaskforceRuleError('Select at least one taxonomy library section.', 400, 'TAXONOMY_LIBRARY_REQUEST_INVALID');
1883
+ }
1884
+ const remap = body?.remapExistingValuesToDefault === true;
1885
+ const runtimeMode = context.authConfig?.runtimeMode === 'cloud' ? 'cloud' : requestRuntimeMode(req);
1886
+ const router = createDurableTaxonomyMutationRouter({
1887
+ core,
1888
+ runtimeMode,
1889
+ surface: 'http',
1890
+ tenantId: core.getTenantId(),
1891
+ workspaceId,
1892
+ });
1893
+ if (!router.enabled) {
1894
+ throw new TaskforceRuleError('Atomic taxonomy library application is not enabled yet.', 409, 'WORKSPACE_SYNC_V3_TAXONOMY_ACTIVATION_DISABLED');
1895
+ }
1896
+ const result = router.mutateState(() => {
1897
+ const current = serializeTaxonomyStateForSync(core.getTaxonomyState(workspaceId));
1898
+ const nextCategories = selected.categories
1899
+ ? (remap ? pack.categories : [
1900
+ ...pack.categories,
1901
+ ...current.categories.filter((entry) => !pack.categories.some((candidate) => candidate.value === entry.value))
1902
+ .map((entry) => ({ ...entry, disabled: true })),
1903
+ ])
1904
+ : current.categories;
1905
+ const nextTypes = selected.types
1906
+ ? (remap ? pack.types : [
1907
+ ...pack.types,
1908
+ ...current.types.filter((entry) => !pack.types.some((candidate) => candidate.value === entry.value))
1909
+ .map((entry) => ({ ...entry, status: 'retired' })),
1910
+ ])
1911
+ : current.types;
1912
+ return {
1913
+ ...current,
1914
+ categories: nextCategories,
1915
+ types: nextTypes,
1916
+ priorities: selected.priorities
1917
+ ? pack.priorities.map((entry) => ({ ...entry, value: Number(entry.value) }))
1918
+ : current.priorities,
1919
+ };
1920
+ }, { remapIncompatibleTasks: remap });
1921
+ res.writeHead(200, { 'Content-Type': 'application/json' });
1922
+ res.end(JSON.stringify({ success: true, taxonomyState: result.taxonomyState }));
1923
+ }
1924
+ catch (error) {
1925
+ writeTaxonomyMutationError(res, error);
1926
+ }
1927
+ });
1204
1928
  // GET /api/taskforce/custom-taxonomy-library - List built-in custom taxonomy library packs
1205
1929
  addRoute('GET', '/api/taskforce/custom-taxonomy-library', async (req, res) => {
1206
1930
  if (!ensureAppAccess(req, res))
@@ -1221,11 +1945,19 @@ export function registerTaskRoutes(deps) {
1221
1945
  addRoute('POST', '/api/taskforce/taxonomy-display-labels', async (req, res) => {
1222
1946
  if (!ensureAppAccess(req, res))
1223
1947
  return;
1224
- const workspaceId = requestWorkspaceId(req);
1225
- const body = await parseJsonBody(req);
1226
- const displayLabels = core.updateTaxonomyDisplayLabels(body?.displayLabels || {}, workspaceId);
1227
- res.writeHead(200, { 'Content-Type': 'application/json' });
1228
- res.end(JSON.stringify({ success: true, displayLabels }));
1948
+ try {
1949
+ const workspaceId = requestWorkspaceId(req);
1950
+ const body = await parseJsonBody(req);
1951
+ const requested = body?.displayLabels || {};
1952
+ const durable = mutateTaxonomyThroughDurableBoundary(req, workspaceId, { field: 'displayLabels', value: requested });
1953
+ const displayLabels = durable?.taxonomyState.displayLabels
1954
+ || core.updateTaxonomyDisplayLabels(requested, workspaceId);
1955
+ res.writeHead(200, { 'Content-Type': 'application/json' });
1956
+ res.end(JSON.stringify({ success: true, displayLabels }));
1957
+ }
1958
+ catch (error) {
1959
+ writeTaxonomyMutationError(res, error);
1960
+ }
1229
1961
  });
1230
1962
  // GET /api/taskforce/categories - Get project categories
1231
1963
  addRoute('GET', '/api/taskforce/categories', async (req, res) => {
@@ -1248,9 +1980,16 @@ export function registerTaskRoutes(deps) {
1248
1980
  res.end(JSON.stringify({ error: 'categories array is required' }));
1249
1981
  return;
1250
1982
  }
1251
- core.updateCategories(categories, workspaceId);
1252
- res.writeHead(200, { 'Content-Type': 'application/json' });
1253
- res.end(JSON.stringify({ success: true, categories: core.getCategories(workspaceId) }));
1983
+ try {
1984
+ const durable = mutateTaxonomyThroughDurableBoundary(req, workspaceId, { field: 'categories', value: categories }, { remapIncompatibleTasks: true });
1985
+ if (!durable)
1986
+ core.updateCategories(categories, workspaceId);
1987
+ res.writeHead(200, { 'Content-Type': 'application/json' });
1988
+ res.end(JSON.stringify({ success: true, categories: durable?.taxonomyState.categories || core.getCategories(workspaceId) }));
1989
+ }
1990
+ catch (error) {
1991
+ writeTaxonomyMutationError(res, error);
1992
+ }
1254
1993
  });
1255
1994
  // GET /api/taskforce/types - Get project task types
1256
1995
  addRoute('GET', '/api/taskforce/types', async (req, res) => {
@@ -1273,9 +2012,16 @@ export function registerTaskRoutes(deps) {
1273
2012
  res.end(JSON.stringify({ error: 'types array is required' }));
1274
2013
  return;
1275
2014
  }
1276
- core.updateTypes(types, workspaceId);
1277
- res.writeHead(200, { 'Content-Type': 'application/json' });
1278
- res.end(JSON.stringify({ success: true, types: core.getTypes(workspaceId) }));
2015
+ try {
2016
+ const durable = mutateTaxonomyThroughDurableBoundary(req, workspaceId, { field: 'types', value: types });
2017
+ if (!durable)
2018
+ core.updateTypes(types, workspaceId);
2019
+ res.writeHead(200, { 'Content-Type': 'application/json' });
2020
+ res.end(JSON.stringify({ success: true, types: durable?.taxonomyState.types || core.getTypes(workspaceId) }));
2021
+ }
2022
+ catch (error) {
2023
+ writeTaxonomyMutationError(res, error);
2024
+ }
1279
2025
  });
1280
2026
  // GET /api/taskforce/priorities - Get project priority levels
1281
2027
  addRoute('GET', '/api/taskforce/priorities', async (req, res) => {
@@ -1298,32 +2044,16 @@ export function registerTaskRoutes(deps) {
1298
2044
  res.end(JSON.stringify({ error: 'priorities array is required' }));
1299
2045
  return;
1300
2046
  }
1301
- core.updatePriorities(priorities, workspaceId);
1302
- res.writeHead(200, { 'Content-Type': 'application/json' });
1303
- res.end(JSON.stringify({ success: true, priorities: core.getPriorities(workspaceId) }));
1304
- });
1305
- // GET /api/taskforce/approaches - Get project approach options
1306
- addRoute('GET', '/api/taskforce/approaches', async (req, res) => {
1307
- if (!ensureAppAccess(req, res))
1308
- return;
1309
- const approaches = core.getApproaches();
1310
- res.writeHead(200, { 'Content-Type': 'application/json' });
1311
- res.end(JSON.stringify({ approaches }));
1312
- });
1313
- // POST /api/taskforce/approaches - Update project approach options
1314
- addRoute('POST', '/api/taskforce/approaches', async (req, res) => {
1315
- if (!ensureAppAccess(req, res))
1316
- return;
1317
- const body = await parseJsonBody(req);
1318
- const { approaches } = body;
1319
- if (!approaches || !Array.isArray(approaches)) {
1320
- res.writeHead(400, { 'Content-Type': 'application/json' });
1321
- res.end(JSON.stringify({ error: 'approaches array is required' }));
1322
- return;
2047
+ try {
2048
+ const durable = mutateTaxonomyThroughDurableBoundary(req, workspaceId, { field: 'priorities', value: priorities });
2049
+ if (!durable)
2050
+ core.updatePriorities(priorities, workspaceId);
2051
+ res.writeHead(200, { 'Content-Type': 'application/json' });
2052
+ res.end(JSON.stringify({ success: true, priorities: durable?.taxonomyState.priorities || core.getPriorities(workspaceId) }));
2053
+ }
2054
+ catch (error) {
2055
+ writeTaxonomyMutationError(res, error);
1323
2056
  }
1324
- core.updateApproaches(approaches);
1325
- res.writeHead(200, { 'Content-Type': 'application/json' });
1326
- res.end(JSON.stringify({ success: true, approaches: core.getApproaches() }));
1327
2057
  });
1328
2058
  // GET /api/taskforce/taxonomies - Get project taxonomies
1329
2059
  addRoute('GET', '/api/taskforce/taxonomies', async (req, res) => {
@@ -1346,8 +2076,15 @@ export function registerTaskRoutes(deps) {
1346
2076
  res.end(JSON.stringify({ error: 'taxonomies array is required' }));
1347
2077
  return;
1348
2078
  }
1349
- core.updateTaxonomies(taxonomies, workspaceId);
1350
- res.writeHead(200, { 'Content-Type': 'application/json' });
1351
- res.end(JSON.stringify({ success: true, taxonomies: core.getTaxonomies(workspaceId) }));
2079
+ try {
2080
+ const durable = mutateTaxonomyThroughDurableBoundary(req, workspaceId, { field: 'taxonomies', value: taxonomies });
2081
+ if (!durable)
2082
+ core.updateTaxonomies(taxonomies, workspaceId);
2083
+ res.writeHead(200, { 'Content-Type': 'application/json' });
2084
+ res.end(JSON.stringify({ success: true, taxonomies: durable?.taxonomyState.taxonomies || core.getTaxonomies(workspaceId) }));
2085
+ }
2086
+ catch (error) {
2087
+ writeTaxonomyMutationError(res, error);
2088
+ }
1352
2089
  });
1353
2090
  }