@taskforcehq/taskforce 0.3.326 → 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 (1358) hide show
  1. package/LICENSE.md +68 -0
  2. package/README.md +19 -0
  3. package/dist/Taskforce.module.css +2173 -561
  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 +232 -143
  41. package/dist/components/features/TaskforceAgentsModule.d.ts +36 -0
  42. package/dist/components/features/TaskforceAgentsModule.js +1782 -0
  43. package/dist/components/features/agentBehavior/AgentBehaviorManagerShared.d.ts +94 -0
  44. package/dist/components/features/agentBehavior/AgentBehaviorManagerShared.js +70 -0
  45. package/dist/components/features/agentCapabilities/AgentCapabilitiesPrototype.d.ts +65 -0
  46. package/dist/components/features/agentCapabilities/AgentCapabilitiesPrototype.js +115 -0
  47. package/dist/components/features/agentRoles/RoleManagerPanel.d.ts +4 -0
  48. package/dist/components/features/agentRoles/RoleManagerPanel.js +382 -0
  49. package/dist/components/features/agentSkills/SkillManagerPanel.d.ts +5 -0
  50. package/dist/components/features/agentSkills/SkillManagerPanel.js +355 -0
  51. package/dist/components/features/documentWorkspaceModel.d.ts +16 -4
  52. package/dist/components/features/documentWorkspaceModel.js +30 -5
  53. package/dist/components/features/planning/PlanningArchiveConfirmation.d.ts +9 -0
  54. package/dist/components/features/planning/PlanningArchiveConfirmation.js +19 -0
  55. package/dist/components/features/planning/PlanningCardIdentity.d.ts +12 -0
  56. package/dist/components/features/planning/PlanningCardIdentity.js +44 -0
  57. package/dist/components/features/planning/PlanningEntityDetails.d.ts +36 -0
  58. package/dist/components/features/planning/PlanningEntityDetails.js +131 -0
  59. package/dist/components/features/planning/PlanningEntitySummary.d.ts +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 +9 -10
  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 +1662 -598
  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 +60 -49
  172. package/dist/components/views/panels/PlanningDrawer.js +978 -313
  173. package/dist/components/views/planningScope.js +7 -1
  174. package/dist/components/views/standalone/modals/AccountSettingsModal.d.ts +62 -0
  175. package/dist/components/views/standalone/modals/AccountSettingsModal.js +197 -0
  176. package/dist/components/views/standalone/modals/AvatarImageManagerModal.d.ts +7 -2
  177. package/dist/components/views/standalone/modals/AvatarImageManagerModal.js +56 -9
  178. package/dist/components/views/standalone/modals/HelpModal.d.ts +1 -2
  179. package/dist/components/views/standalone/modals/HelpModal.js +3 -4
  180. package/dist/components/views/standalone/modals/SyncStatusModal.d.ts +8 -9
  181. package/dist/components/views/standalone/modals/SyncStatusModal.js +85 -25
  182. package/dist/components/views/standalone/modals/TeamManagementModal.js +1 -1
  183. package/dist/config/applicationBaseUrl.d.ts +2 -0
  184. package/dist/config/applicationBaseUrl.js +23 -0
  185. package/dist/config/envSchema.d.ts +1 -1
  186. package/dist/config/envSchema.js +166 -5
  187. package/dist/core/AdminAuditRetentionService.d.ts +43 -0
  188. package/dist/core/AdminAuditRetentionService.js +126 -0
  189. package/dist/core/AiProfileService.d.ts +34 -0
  190. package/dist/core/AiProfileService.js +510 -251
  191. package/dist/core/AttachmentLinkService.d.ts +10 -2
  192. package/dist/core/AttachmentLinkService.js +44 -12
  193. package/dist/core/AuthIdentityService.d.ts +6 -0
  194. package/dist/core/AuthIdentityService.js +38 -0
  195. package/dist/core/AuthTokenService.d.ts +1 -0
  196. package/dist/core/AuthTokenService.js +13 -0
  197. package/dist/core/DeletedTaskLifecycleService.d.ts +4 -2
  198. package/dist/core/DeletedTaskLifecycleService.js +124 -38
  199. package/dist/core/GlobalSettingsService.d.ts +3 -1
  200. package/dist/core/GlobalSettingsService.js +30 -4
  201. package/dist/core/InitiativeDurableMutationService.d.ts +89 -0
  202. package/dist/core/InitiativeDurableMutationService.js +187 -0
  203. package/dist/core/McpTokenService.d.ts +1 -0
  204. package/dist/core/McpTokenService.js +39 -13
  205. package/dist/core/PlanningCommandPreparationService.d.ts +60 -0
  206. package/dist/core/PlanningCommandPreparationService.js +149 -0
  207. package/dist/core/ScheduleCommandService.d.ts +76 -0
  208. package/dist/core/ScheduleCommandService.js +165 -0
  209. package/dist/core/SyncReconciliationService.d.ts +29 -6
  210. package/dist/core/SyncReconciliationService.js +256 -84
  211. package/dist/core/TaskActivityService.d.ts +22 -2
  212. package/dist/core/TaskActivityService.js +177 -29
  213. package/dist/core/TaskAttachmentLinksDurableMutationService.d.ts +31 -0
  214. package/dist/core/TaskAttachmentLinksDurableMutationService.js +231 -0
  215. package/dist/core/TaskChecklistCommandService.d.ts +50 -0
  216. package/dist/core/TaskChecklistCommandService.js +111 -0
  217. package/dist/core/TaskDurableCreateMutationService.d.ts +38 -0
  218. package/dist/core/TaskDurableCreateMutationService.js +85 -0
  219. package/dist/core/TaskDurableDeleteMutationService.d.ts +47 -0
  220. package/dist/core/TaskDurableDeleteMutationService.js +54 -0
  221. package/dist/core/TaskDurableLifecycleMutationService.d.ts +38 -0
  222. package/dist/core/TaskDurableLifecycleMutationService.js +42 -0
  223. package/dist/core/TaskDurableRelationshipMutationService.d.ts +58 -0
  224. package/dist/core/TaskDurableRelationshipMutationService.js +66 -0
  225. package/dist/core/TaskDurableRestoreMutationService.d.ts +31 -0
  226. package/dist/core/TaskDurableRestoreMutationService.js +33 -0
  227. package/dist/core/TaskDurableStatusMutationService.d.ts +74 -0
  228. package/dist/core/TaskDurableStatusMutationService.js +247 -0
  229. package/dist/core/TaskDurableSyncMutationService.d.ts +34 -0
  230. package/dist/core/TaskDurableSyncMutationService.js +70 -0
  231. package/dist/core/TaskDurableWorkflowMutationService.d.ts +48 -0
  232. package/dist/core/TaskDurableWorkflowMutationService.js +59 -0
  233. package/dist/core/TaskLifecycleCommandService.d.ts +101 -0
  234. package/dist/core/TaskLifecycleCommandService.js +161 -0
  235. package/dist/core/TaskRootCommandPreparationService.d.ts +35 -0
  236. package/dist/core/TaskRootCommandPreparationService.js +103 -0
  237. package/dist/core/Taskforce.d.ts +479 -59
  238. package/dist/core/Taskforce.js +3671 -841
  239. package/dist/core/WorkflowAssignmentService.d.ts +40 -0
  240. package/dist/core/WorkflowAssignmentService.js +158 -0
  241. package/dist/core/WorkflowExecutionService.d.ts +69 -0
  242. package/dist/core/WorkflowExecutionService.js +342 -0
  243. package/dist/core/WorkflowTaskActivationService.d.ts +32 -0
  244. package/dist/core/WorkflowTaskActivationService.js +63 -0
  245. package/dist/core/WorkflowTemplateService.d.ts +64 -0
  246. package/dist/core/WorkflowTemplateService.js +223 -0
  247. package/dist/core/WorkspaceLifecycleService.d.ts +1 -0
  248. package/dist/core/WorkspaceLifecycleService.js +18 -0
  249. package/dist/core/WorkstreamDurableMutationService.d.ts +90 -0
  250. package/dist/core/WorkstreamDurableMutationService.js +184 -0
  251. package/dist/core/planningReferencePolicy.d.ts +14 -0
  252. package/dist/core/planningReferencePolicy.js +53 -0
  253. package/dist/core/taskReferencePolicy.js +24 -3
  254. package/dist/core/types.d.ts +10 -10
  255. package/dist/documentReviews/DocumentReviewCommentStore.d.ts +22 -2
  256. package/dist/documentReviews/DocumentReviewCommentStore.js +92 -8
  257. package/dist/documentReviews/commandService.d.ts +51 -0
  258. package/dist/documentReviews/commandService.js +63 -0
  259. package/dist/documentReviews/service.d.ts +20 -1
  260. package/dist/documentReviews/service.js +234 -24
  261. package/dist/documentReviews/types.d.ts +18 -1
  262. package/dist/hooks/sync/bootstrap.d.ts +3 -7
  263. package/dist/hooks/sync/bootstrap.js +6 -14
  264. package/dist/hooks/sync/browserSyncAuthority.d.ts +21 -0
  265. package/dist/hooks/sync/browserSyncAuthority.js +70 -0
  266. package/dist/hooks/sync/browserSyncRemoteServices.d.ts +29 -0
  267. package/dist/hooks/sync/browserSyncRemoteServices.js +58 -0
  268. package/dist/hooks/sync/controlPlane.d.ts +1 -37
  269. package/dist/hooks/sync/controlPlane.js +1 -78
  270. package/dist/hooks/sync/lifecyclePolicy.d.ts +1 -45
  271. package/dist/hooks/sync/lifecyclePolicy.js +1 -93
  272. package/dist/hooks/sync/orchestratorShared.d.ts +9 -3
  273. package/dist/hooks/sync/orchestratorShared.js +70 -96
  274. package/dist/hooks/sync/pullLifecycle.d.ts +1 -31
  275. package/dist/hooks/sync/pullLifecycle.js +1 -24
  276. package/dist/hooks/sync/realtime.d.ts +4 -1
  277. package/dist/hooks/sync/realtime.js +103 -3
  278. package/dist/hooks/sync/recovery.d.ts +1 -84
  279. package/dist/hooks/sync/recovery.js +1 -245
  280. package/dist/hooks/sync/transfers.d.ts +8 -129
  281. package/dist/hooks/sync/transfers.js +19 -581
  282. package/dist/hooks/sync/useDataVersionRefresh.d.ts +6 -1
  283. package/dist/hooks/sync/useDataVersionRefresh.js +127 -12
  284. package/dist/hooks/sync/useDurableLocalOutboxDrain.d.ts +14 -0
  285. package/dist/hooks/sync/useDurableLocalOutboxDrain.js +208 -0
  286. package/dist/hooks/sync/useDurableTaskCreateMutation.d.ts +15 -0
  287. package/dist/hooks/sync/useDurableTaskCreateMutation.js +152 -0
  288. package/dist/hooks/sync/useDurableTaskDeleteMutation.d.ts +11 -0
  289. package/dist/hooks/sync/useDurableTaskDeleteMutation.js +21 -0
  290. package/dist/hooks/sync/useDurableTaskLifecycleMutation.d.ts +12 -0
  291. package/dist/hooks/sync/useDurableTaskLifecycleMutation.js +22 -0
  292. package/dist/hooks/sync/useDurableTaskMetadataMutation.d.ts +14 -0
  293. package/dist/hooks/sync/useDurableTaskMetadataMutation.js +24 -0
  294. package/dist/hooks/sync/useDurableTaskRestoreMutation.d.ts +12 -0
  295. package/dist/hooks/sync/useDurableTaskRestoreMutation.js +24 -0
  296. package/dist/hooks/sync/useDurableTaskStatusMutation.d.ts +18 -0
  297. package/dist/hooks/sync/useDurableTaskStatusMutation.js +23 -0
  298. package/dist/hooks/sync/useLocalSyncCoordinatorSnapshot.d.ts +23 -0
  299. package/dist/hooks/sync/useLocalSyncCoordinatorSnapshot.js +414 -0
  300. package/dist/hooks/sync/useSyncStatusActions.d.ts +2 -1
  301. package/dist/hooks/sync/useSyncStatusActions.js +8 -3
  302. package/dist/hooks/tasks/taskHttpMutation.d.ts +25 -0
  303. package/dist/hooks/tasks/taskHttpMutation.js +134 -0
  304. package/dist/hooks/tasks/useCurrentTaskRelations.d.ts +6 -1
  305. package/dist/hooks/tasks/useCurrentTaskRelations.js +32 -6
  306. package/dist/hooks/tasks/useTaskEditorNavigation.d.ts +4 -3
  307. package/dist/hooks/tasks/useTaskEditorNavigation.js +9 -13
  308. package/dist/hooks/tasks/useTaskFormActions.d.ts +17 -2
  309. package/dist/hooks/tasks/useTaskFormActions.js +309 -55
  310. package/dist/hooks/tasks/useTaskReferenceContract.d.ts +5 -0
  311. package/dist/hooks/tasks/useTaskReferenceContract.js +17 -0
  312. package/dist/hooks/tasks/useTaskRelationships.d.ts +1 -3
  313. package/dist/hooks/tasks/useTaskRelationships.js +5 -25
  314. package/dist/hooks/tasks/useTrashSelection.d.ts +12 -0
  315. package/dist/hooks/tasks/useTrashSelection.js +49 -0
  316. package/dist/hooks/ui/useInitiativeTemplates.d.ts +24 -0
  317. package/dist/hooks/ui/useInitiativeTemplates.js +22 -0
  318. package/dist/hooks/ui/useSettingsModel.d.ts +5 -29
  319. package/dist/hooks/ui/useSettingsModel.js +31 -15
  320. package/dist/hooks/ui/useSettingsPersistence.d.ts +0 -1
  321. package/dist/hooks/ui/useSettingsPersistence.js +4 -8
  322. package/dist/hooks/ui/useSettingsTaxonomyManagement.js +31 -0
  323. package/dist/hooks/useFilterSort.d.ts +2 -2
  324. package/dist/hooks/useFilterSort.js +19 -15
  325. package/dist/hooks/useRealtimeSync.d.ts +10 -0
  326. package/dist/hooks/useRealtimeSync.js +57 -4
  327. package/dist/hooks/useSyncOrchestrator.d.ts +32 -1
  328. package/dist/hooks/useSyncOrchestrator.js +963 -287
  329. package/dist/hooks/useTaskData.d.ts +11 -2
  330. package/dist/hooks/useTaskData.js +59 -26
  331. package/dist/hooks/useTaskMutations.d.ts +42 -5
  332. package/dist/hooks/useTaskMutations.js +750 -125
  333. package/dist/hooks/useTaskforce.d.ts +114 -118
  334. package/dist/hooks/useTaskforce.js +1102 -449
  335. package/dist/hooks/useUiNotice.d.ts +5 -1
  336. package/dist/hooks/useUiNotice.js +13 -2
  337. package/dist/hooks/useWorkspaceSyncController.d.ts +9 -0
  338. package/dist/hooks/useWorkspaceSyncController.js +159 -17
  339. package/dist/hooks/workspace/usePersistedAppUiState.d.ts +74 -0
  340. package/dist/hooks/workspace/usePersistedAppUiState.js +325 -0
  341. package/dist/hooks/workspace/usePersistedLayoutUiState.d.ts +76 -0
  342. package/dist/hooks/workspace/usePersistedLayoutUiState.js +479 -0
  343. package/dist/hooks/workspace/useTaskforceWorkspaceBootstrap.d.ts +2 -7
  344. package/dist/hooks/workspace/useTaskforceWorkspaceBootstrap.js +42 -31
  345. package/dist/hooks/workspace/workspaceLocalState.d.ts +17 -6
  346. package/dist/hooks/workspace/workspaceLocalState.js +175 -5
  347. package/dist/hooks/workstreams/workstreamHttpMutation.d.ts +23 -0
  348. package/dist/hooks/workstreams/workstreamHttpMutation.js +134 -0
  349. package/dist/localization/locales/en-US.d.ts +3 -3
  350. package/dist/localization/locales/en-US.js +3 -3
  351. package/dist/localization/locales/es-419.js +3 -3
  352. package/dist/localization/locales/pt-BR.js +3 -3
  353. package/dist/mcp/adminWorkspaceRegistrar.js +2 -30
  354. package/dist/mcp/aiProfileBootstrap.d.ts +3 -0
  355. package/dist/mcp/aiProfileBootstrap.js +4 -0
  356. package/dist/mcp/canonicalAssetHelpers.d.ts +16 -4
  357. package/dist/mcp/canonicalAssetHelpers.js +104 -35
  358. package/dist/mcp/clientIntegrations.d.ts +4 -2
  359. package/dist/mcp/clientIntegrations.js +58 -57
  360. package/dist/mcp/clientRegistry.d.ts +30 -0
  361. package/dist/mcp/clientRegistry.js +134 -0
  362. package/dist/mcp/collaborationRegistrar.js +20 -6
  363. package/dist/mcp/documentAssetRegistrar.js +220 -52
  364. package/dist/mcp/documentContentCommand.d.ts +94 -0
  365. package/dist/mcp/documentContentCommand.js +226 -0
  366. package/dist/mcp/documentHelpers.d.ts +13 -65
  367. package/dist/mcp/documentHelpers.js +49 -62
  368. package/dist/mcp/durableTaskMutationRouter.d.ts +65 -0
  369. package/dist/mcp/durableTaskMutationRouter.js +217 -0
  370. package/dist/mcp/durableTaskRelationshipMutationRouter.d.ts +38 -0
  371. package/dist/mcp/durableTaskRelationshipMutationRouter.js +168 -0
  372. package/dist/mcp/durableTaskRootMutationRouter.d.ts +64 -0
  373. package/dist/mcp/durableTaskRootMutationRouter.js +226 -0
  374. package/dist/mcp/gitWorktreeRoots.d.ts +2 -0
  375. package/dist/mcp/gitWorktreeRoots.js +19 -0
  376. package/dist/mcp/legacyServer.d.ts +1 -0
  377. package/dist/mcp/legacyServer.js +42 -0
  378. package/dist/mcp/localCliHealth.d.ts +56 -0
  379. package/dist/mcp/localCliHealth.js +170 -0
  380. package/dist/mcp/localServiceProxy.d.ts +23 -0
  381. package/dist/mcp/localServiceProxy.js +255 -0
  382. package/dist/mcp/mcpInputValidator.d.ts +17 -0
  383. package/dist/mcp/mcpInputValidator.js +58 -0
  384. package/dist/mcp/planningAttachmentCommandAdapter.d.ts +127 -0
  385. package/dist/mcp/planningAttachmentCommandAdapter.js +188 -0
  386. package/dist/mcp/programScaffoldCommandAdapter.d.ts +6 -0
  387. package/dist/mcp/programScaffoldCommandAdapter.js +39 -0
  388. package/dist/mcp/proxyServer.d.ts +1 -0
  389. package/dist/mcp/proxyServer.js +2 -0
  390. package/dist/mcp/runtime.d.ts +82 -1
  391. package/dist/mcp/runtime.js +4285 -1925
  392. package/dist/mcp/server.js +29 -2
  393. package/dist/mcp/sharedLocalServiceGateD.d.ts +115 -0
  394. package/dist/mcp/sharedLocalServiceGateD.js +344 -0
  395. package/dist/mcp/stdioLifecycle.d.ts +22 -0
  396. package/dist/mcp/stdioLifecycle.js +54 -0
  397. package/dist/mcp/taskAttachmentCommandAdapter.d.ts +190 -0
  398. package/dist/mcp/taskAttachmentCommandAdapter.js +464 -0
  399. package/dist/mcp/taskAttachmentHelpers.d.ts +8 -6
  400. package/dist/mcp/taskAttachmentHelpers.js +74 -2
  401. package/dist/mcp/taskAttachmentTypes.d.ts +26 -5
  402. package/dist/mcp/taskPlanCommand.d.ts +64 -0
  403. package/dist/mcp/taskPlanCommand.js +98 -0
  404. package/dist/mcp/taskPlanningRegistrar.js +215 -27
  405. package/dist/mcp/toolCallCompatibility.d.ts +6 -0
  406. package/dist/mcp/toolCallCompatibility.js +16 -0
  407. package/dist/mcp/toolCatalog.d.ts +3 -1
  408. package/dist/mcp/toolProfiles.d.ts +12 -1
  409. package/dist/mcp/toolProfiles.js +43 -0
  410. package/dist/mcp/toolRegistry.d.ts +17 -2
  411. package/dist/mcp/toolRegistry.js +24 -9
  412. package/dist/mcp/workflowExecutionRegistrar.d.ts +2 -0
  413. package/dist/mcp/workflowExecutionRegistrar.js +51 -0
  414. package/dist/migrations/taskSchemaMigrations.d.ts +35 -0
  415. package/dist/migrations/taskSchemaMigrations.js +1797 -4
  416. package/dist/migrations/taskUpdatedAtSyncDriftMigration.d.ts +20 -0
  417. package/dist/migrations/taskUpdatedAtSyncDriftMigration.js +153 -0
  418. package/dist/migrations/taskforceAgentDefinitionMigration.d.ts +26 -0
  419. package/dist/migrations/taskforceAgentDefinitionMigration.js +116 -0
  420. package/dist/plugins/vite.js +48 -17
  421. package/dist/public/Taskforce_Van.webp +0 -0
  422. package/dist/runtime/appGateDefinitions.d.ts +16 -10
  423. package/dist/runtime/appGateDefinitions.js +16 -10
  424. package/dist/runtime/appGates.d.ts +5 -4
  425. package/dist/runtime/appGates.js +4 -3
  426. package/dist/server/aiProfileAvatarAssets.d.ts +11 -8
  427. package/dist/server/aiProfileAvatarAssets.js +159 -70
  428. package/dist/server/auth.js +15 -1
  429. package/dist/server/cors.d.ts +2 -1
  430. package/dist/server/cors.js +45 -8
  431. package/dist/server/email.d.ts +3 -1
  432. package/dist/server/email.js +46 -8
  433. package/dist/server/index.d.ts +24 -1
  434. package/dist/server/index.js +342 -46
  435. package/dist/server/localDataOwnerPermit.d.ts +18 -0
  436. package/dist/server/localDataOwnerPermit.js +58 -0
  437. package/dist/server/localDatabaseIdentity.d.ts +14 -0
  438. package/dist/server/localDatabaseIdentity.js +69 -0
  439. package/dist/server/localRealtimeFileInvalidation.d.ts +1 -0
  440. package/dist/server/localRealtimeFileInvalidation.js +7 -0
  441. package/dist/server/localServiceLease.d.ts +62 -0
  442. package/dist/server/localServiceLease.js +477 -0
  443. package/dist/server/localServiceOwnershipBootstrap.d.ts +19 -0
  444. package/dist/server/localServiceOwnershipBootstrap.js +84 -0
  445. package/dist/server/localServiceSessions.d.ts +87 -0
  446. package/dist/server/localServiceSessions.js +309 -0
  447. package/dist/server/localServiceWindowsAcl.d.ts +8 -0
  448. package/dist/server/localServiceWindowsAcl.js +60 -0
  449. package/dist/server/localSyncProcessLockBootstrap.d.ts +3 -0
  450. package/dist/server/localSyncProcessLockBootstrap.js +16 -0
  451. package/dist/server/localWorkspaceSyncServerComposition.d.ts +59 -0
  452. package/dist/server/localWorkspaceSyncServerComposition.js +91 -0
  453. package/dist/server/localWorkspaceSyncServerRuntime.d.ts +119 -0
  454. package/dist/server/localWorkspaceSyncServerRuntime.js +1163 -0
  455. package/dist/server/rateLimit.d.ts +1 -0
  456. package/dist/server/rateLimit.js +16 -0
  457. package/dist/server/routes/admin.d.ts +2 -4
  458. package/dist/server/routes/admin.js +199 -337
  459. package/dist/server/routes/agentRoles.d.ts +13 -0
  460. package/dist/server/routes/agentRoles.js +273 -0
  461. package/dist/server/routes/agentSkills.d.ts +16 -0
  462. package/dist/server/routes/agentSkills.js +291 -0
  463. package/dist/server/routes/agents.d.ts +49 -0
  464. package/dist/server/routes/agents.js +1455 -0
  465. package/dist/server/routes/annotatedAttachments.js +46 -9
  466. package/dist/server/routes/assetAccess.d.ts +36 -0
  467. package/dist/server/routes/assetAccess.js +93 -0
  468. package/dist/server/routes/auth.d.ts +4 -3
  469. package/dist/server/routes/auth.js +236 -21
  470. package/dist/server/routes/authSupport.d.ts +3 -1
  471. package/dist/server/routes/authSupport.js +22 -8
  472. package/dist/server/routes/documentReviews.d.ts +2 -0
  473. package/dist/server/routes/documentReviews.js +155 -15
  474. package/dist/server/routes/documents.d.ts +1 -0
  475. package/dist/server/routes/documents.js +335 -141
  476. package/dist/server/routes/durableTaskHttpRouters.d.ts +165 -0
  477. package/dist/server/routes/durableTaskHttpRouters.js +89 -0
  478. package/dist/server/routes/localMcpHealth.d.ts +11 -0
  479. package/dist/server/routes/localMcpHealth.js +29 -0
  480. package/dist/server/routes/localService.d.ts +13 -0
  481. package/dist/server/routes/localService.js +444 -0
  482. package/dist/server/routes/localUpdate.d.ts +11 -0
  483. package/dist/server/routes/localUpdate.js +154 -0
  484. package/dist/server/routes/primitives.d.ts +27 -0
  485. package/dist/server/routes/primitives.js +18 -0
  486. package/dist/server/routes/resources.d.ts +1 -10
  487. package/dist/server/routes/resources.js +1 -153
  488. package/dist/server/routes/shared.d.ts +31 -2
  489. package/dist/server/routes/shared.js +394 -0
  490. package/dist/server/routes/sync.d.ts +2 -0
  491. package/dist/server/routes/sync.js +184 -272
  492. package/dist/server/routes/syncAuxRoutes.d.ts +3 -1
  493. package/dist/server/routes/syncAuxRoutes.js +9 -4
  494. package/dist/server/routes/syncCoordinatorLocalRoutes.d.ts +6 -0
  495. package/dist/server/routes/syncCoordinatorLocalRoutes.js +867 -0
  496. package/dist/server/routes/syncPullApplyRoutes.d.ts +29 -1
  497. package/dist/server/routes/syncPullApplyRoutes.js +520 -17
  498. package/dist/server/routes/syncPushRoutes.d.ts +33 -4
  499. package/dist/server/routes/syncPushRoutes.js +251 -62
  500. package/dist/server/routes/syncRouteTypes.d.ts +1 -1
  501. package/dist/server/routes/syncSnapshotRoutes.d.ts +15 -7
  502. package/dist/server/routes/syncSnapshotRoutes.js +95 -17
  503. package/dist/server/routes/syncV3DiagnosticsRoutes.d.ts +14 -0
  504. package/dist/server/routes/syncV3DiagnosticsRoutes.js +72 -0
  505. package/dist/server/routes/syncV3FeedRoutes.d.ts +20 -0
  506. package/dist/server/routes/syncV3FeedRoutes.js +462 -0
  507. package/dist/server/routes/syncV3LocalCaptureRoutes.d.ts +37 -0
  508. package/dist/server/routes/syncV3LocalCaptureRoutes.js +897 -0
  509. package/dist/server/routes/syncV3LocalDispatchRoutes.d.ts +17 -0
  510. package/dist/server/routes/syncV3LocalDispatchRoutes.js +280 -0
  511. package/dist/server/routes/syncV3LocalFeedApplyRoutes.d.ts +17 -0
  512. package/dist/server/routes/syncV3LocalFeedApplyRoutes.js +493 -0
  513. package/dist/server/routes/syncV3LocalOwnershipRoutes.d.ts +10 -0
  514. package/dist/server/routes/syncV3LocalOwnershipRoutes.js +51 -0
  515. package/dist/server/routes/syncV3LocalRecoveryRoutes.d.ts +12 -0
  516. package/dist/server/routes/syncV3LocalRecoveryRoutes.js +78 -0
  517. package/dist/server/routes/syncV3OperationRoutes.d.ts +35 -0
  518. package/dist/server/routes/syncV3OperationRoutes.js +1136 -0
  519. package/dist/server/routes/tasks.d.ts +0 -2
  520. package/dist/server/routes/tasks.js +932 -195
  521. package/dist/server/routes/workflows.d.ts +26 -0
  522. package/dist/server/routes/workflows.js +500 -0
  523. package/dist/server/routes.d.ts +1 -6
  524. package/dist/server/routes.js +148 -339
  525. package/dist/server/smtpTransport.d.ts +11 -3
  526. package/dist/server/smtpTransport.js +9 -2
  527. package/dist/server/start.js +42 -10
  528. package/dist/service/localServiceCli.d.ts +33 -0
  529. package/dist/service/localServiceCli.js +365 -0
  530. package/dist/service/localServiceClientLifecycle.d.ts +25 -0
  531. package/dist/service/localServiceClientLifecycle.js +128 -0
  532. package/dist/service/localServiceOpen.d.ts +17 -0
  533. package/dist/service/localServiceOpen.js +27 -0
  534. package/dist/services/agentRoleResolver.d.ts +4 -0
  535. package/dist/services/agentRoleResolver.js +7 -0
  536. package/dist/services/aiProfileAvatarGenerationService.d.ts +41 -0
  537. package/dist/services/aiProfileAvatarGenerationService.js +158 -0
  538. package/dist/services/avatarImageProvider.d.ts +33 -0
  539. package/dist/services/avatarImageProvider.js +140 -0
  540. package/dist/services/bedrockAnthropicMessagesModelGateway.d.ts +24 -0
  541. package/dist/services/bedrockAnthropicMessagesModelGateway.js +95 -0
  542. package/dist/services/bedrockMantleModelGateway.d.ts +43 -0
  543. package/dist/services/bedrockMantleModelGateway.js +81 -0
  544. package/dist/services/bedrockModelGateway.d.ts +26 -0
  545. package/dist/services/bedrockModelGateway.js +94 -0
  546. package/dist/services/modelGateway.d.ts +82 -0
  547. package/dist/services/modelGateway.js +61 -0
  548. package/dist/services/taskforceAgentAvatarImageProvider.d.ts +8 -0
  549. package/dist/services/taskforceAgentAvatarImageProvider.js +24 -0
  550. package/dist/services/taskforceAgentMcpBridge.d.ts +77 -0
  551. package/dist/services/taskforceAgentMcpBridge.js +527 -0
  552. package/dist/shared/agentRoleDefinition.d.ts +34 -0
  553. package/dist/shared/agentRoleDefinition.js +207 -0
  554. package/dist/shared/aiProfileAvatarEligibility.d.ts +10 -0
  555. package/dist/shared/aiProfileAvatarEligibility.js +27 -0
  556. package/dist/shared/aiProfileColors.d.ts +7 -0
  557. package/dist/shared/aiProfileColors.js +33 -0
  558. package/dist/shared/colorPalette.d.ts +3 -0
  559. package/dist/shared/colorPalette.js +20 -0
  560. package/dist/shared/commentProvenance.d.ts +4 -0
  561. package/dist/shared/commentProvenance.js +6 -0
  562. package/dist/shared/deletedTaskRetention.d.ts +2 -0
  563. package/dist/shared/deletedTaskRetention.js +7 -0
  564. package/dist/shared/passwordPolicy.d.ts +2 -1
  565. package/dist/shared/passwordPolicy.js +9 -0
  566. package/dist/shared/taskDeepLinks.d.ts +28 -0
  567. package/dist/shared/taskDeepLinks.js +48 -0
  568. package/dist/shared/taskRestoreDestination.d.ts +2 -0
  569. package/dist/shared/taskRestoreDestination.js +5 -0
  570. package/dist/shared/taskforceAgentDefinition.d.ts +88 -0
  571. package/dist/shared/taskforceAgentDefinition.js +434 -0
  572. package/dist/shared/taskforceAgentExecutionSnapshot.d.ts +50 -0
  573. package/dist/shared/taskforceAgentExecutionSnapshot.js +68 -0
  574. package/dist/shared/taskforceAgentModels.d.ts +56 -0
  575. package/dist/shared/taskforceAgentModels.js +314 -0
  576. package/dist/shared/taskforceAgentRunContext.d.ts +23 -0
  577. package/dist/shared/taskforceAgentRunContext.js +21 -0
  578. package/dist/shared/taskforceAgentRuntimeResolution.d.ts +31 -0
  579. package/dist/shared/taskforceAgentRuntimeResolution.js +72 -0
  580. package/dist/shared/taskforceAgentSkill.d.ts +33 -0
  581. package/dist/shared/taskforceAgentSkill.js +149 -0
  582. package/dist/storage/agentRoleStore.d.ts +91 -0
  583. package/dist/storage/agentRoleStore.js +385 -0
  584. package/dist/storage/databaseAdapter.d.ts +1 -0
  585. package/dist/storage/databaseAdapter.js +7 -1
  586. package/dist/storage/documentIntegrity.d.ts +12 -3
  587. package/dist/storage/documentIntegrity.js +105 -27
  588. package/dist/storage/objectStorageClient.d.ts +10 -4
  589. package/dist/storage/objectStorageClient.js +73 -43
  590. package/dist/storage/postgresAdapter.d.ts +2 -1
  591. package/dist/storage/postgresAdapter.js +38 -6
  592. package/dist/storage/postgresWorker.js +65 -1
  593. package/dist/storage/sqliteAdapter.d.ts +1 -1
  594. package/dist/storage/sqliteAdapter.js +7 -1
  595. package/dist/storage/sqliteWalHealth.d.ts +71 -0
  596. package/dist/storage/sqliteWalHealth.js +176 -0
  597. package/dist/storage/taskDataPath.d.ts +1 -0
  598. package/dist/storage/taskDataPath.js +20 -0
  599. package/dist/storage/taskforceAgentConversationStore.d.ts +66 -0
  600. package/dist/storage/taskforceAgentConversationStore.js +264 -0
  601. package/dist/storage/taskforceAgentSkillStore.d.ts +93 -0
  602. package/dist/storage/taskforceAgentSkillStore.js +355 -0
  603. package/dist/storage/taskforceAgentStore.d.ts +105 -0
  604. package/dist/storage/taskforceAgentStore.js +549 -0
  605. package/dist/storage/workflowStore.d.ts +223 -0
  606. package/dist/storage/workflowStore.js +1032 -0
  607. package/dist/storage/workspaceAssetStore.d.ts +70 -0
  608. package/dist/storage/workspaceAssetStore.js +418 -25
  609. package/dist/sync/aiProfileAvatarSyncPaths.d.ts +14 -0
  610. package/dist/sync/aiProfileAvatarSyncPaths.js +56 -0
  611. package/dist/sync/cloudSyncApi.d.ts +329 -0
  612. package/dist/sync/cloudSyncApi.js +574 -1
  613. package/dist/sync/collaborationSyncPayload.d.ts +5 -1
  614. package/dist/sync/collaborationSyncPayload.js +213 -1
  615. package/dist/sync/collaborationSyncState.d.ts +23 -3
  616. package/dist/sync/collaborationSyncState.js +92 -3
  617. package/dist/sync/contentSyncPayload.d.ts +9 -0
  618. package/dist/sync/contentSyncPayload.js +29 -0
  619. package/dist/sync/contentSyncState.d.ts +79 -4
  620. package/dist/sync/contentSyncState.js +1113 -313
  621. package/dist/sync/coordinator/localSyncBrowserApplyPermitContext.d.ts +39 -0
  622. package/dist/sync/coordinator/localSyncBrowserApplyPermitContext.js +234 -0
  623. package/dist/sync/coordinator/localSyncBrowserAuthorityCapability.d.ts +7 -0
  624. package/dist/sync/coordinator/localSyncBrowserAuthorityCapability.js +10 -0
  625. package/dist/sync/coordinator/localSyncCommittedApplyPolicy.d.ts +7 -0
  626. package/dist/sync/coordinator/localSyncCommittedApplyPolicy.js +41 -0
  627. package/dist/sync/coordinator/localSyncCoordinatorBrowserClient.d.ts +178 -0
  628. package/dist/sync/coordinator/localSyncCoordinatorBrowserClient.js +131 -0
  629. package/dist/sync/coordinator/localSyncCoordinatorCommandLifecycle.d.ts +25 -0
  630. package/dist/sync/coordinator/localSyncCoordinatorCommandLifecycle.js +200 -0
  631. package/dist/sync/coordinator/localSyncCoordinatorHost.d.ts +84 -0
  632. package/dist/sync/coordinator/localSyncCoordinatorHost.js +435 -0
  633. package/dist/sync/coordinator/localSyncCoordinatorRouteServices.d.ts +33 -0
  634. package/dist/sync/coordinator/localSyncCoordinatorRouteServices.js +1 -0
  635. package/dist/sync/coordinator/localSyncCoordinatorStore.d.ts +122 -0
  636. package/dist/sync/coordinator/localSyncCoordinatorStore.js +1039 -0
  637. package/dist/sync/coordinator/localSyncCoordinatorTypes.d.ts +82 -0
  638. package/dist/sync/coordinator/localSyncCoordinatorTypes.js +9 -0
  639. package/dist/sync/coordinator/localSyncDispatchTracker.d.ts +15 -0
  640. package/dist/sync/coordinator/localSyncDispatchTracker.js +68 -0
  641. package/dist/sync/coordinator/localSyncExecutionPermitStore.d.ts +200 -0
  642. package/dist/sync/coordinator/localSyncExecutionPermitStore.js +1388 -0
  643. package/dist/sync/coordinator/localSyncExecutionPermitTypes.d.ts +52 -0
  644. package/dist/sync/coordinator/localSyncExecutionPermitTypes.js +8 -0
  645. package/dist/sync/coordinator/localSyncOwnershipDrainBarrier.d.ts +33 -0
  646. package/dist/sync/coordinator/localSyncOwnershipDrainBarrier.js +83 -0
  647. package/dist/sync/coordinator/localSyncPermitTransactionHooks.d.ts +9 -0
  648. package/dist/sync/coordinator/localSyncPermitTransactionHooks.js +27 -0
  649. package/dist/sync/coordinator/localSyncProcessLock.d.ts +12 -0
  650. package/dist/sync/coordinator/localSyncProcessLock.js +212 -0
  651. package/dist/sync/coordinator/localSyncV3DispatchRecoveryReconciler.d.ts +17 -0
  652. package/dist/sync/coordinator/localSyncV3DispatchRecoveryReconciler.js +82 -0
  653. package/dist/sync/coordinator/localWorkspaceSyncRunner.d.ts +134 -0
  654. package/dist/sync/coordinator/localWorkspaceSyncRunner.js +981 -0
  655. package/dist/sync/coordinator/localWorkspaceSyncRunnerState.d.ts +189 -0
  656. package/dist/sync/coordinator/localWorkspaceSyncRunnerState.js +961 -0
  657. package/dist/sync/coordinator/workspaceSyncCloudCredentialValidator.d.ts +19 -0
  658. package/dist/sync/coordinator/workspaceSyncCloudCredentialValidator.js +83 -0
  659. package/dist/sync/coordinator/workspaceSyncCredentialBroker.d.ts +117 -0
  660. package/dist/sync/coordinator/workspaceSyncCredentialBroker.js +323 -0
  661. package/dist/sync/coordinator/workspaceSyncLocalAccessBootstrap.d.ts +11 -0
  662. package/dist/sync/coordinator/workspaceSyncLocalAccessBootstrap.js +51 -0
  663. package/dist/sync/coordinator/workspaceSyncTransportGateway.d.ts +139 -0
  664. package/dist/sync/coordinator/workspaceSyncTransportGateway.js +738 -0
  665. package/dist/sync/engine/localWorkspaceContentManifestService.d.ts +21 -0
  666. package/dist/sync/engine/localWorkspaceContentManifestService.js +44 -0
  667. package/dist/sync/engine/workspaceSyncAtomicLocalPublisher.d.ts +36 -0
  668. package/dist/sync/engine/workspaceSyncAtomicLocalPublisher.js +203 -0
  669. package/dist/sync/engine/workspaceSyncContentLifecycleAdapter.d.ts +21 -0
  670. package/dist/sync/engine/workspaceSyncContentLifecycleAdapter.js +13 -0
  671. package/dist/sync/engine/workspaceSyncContentPullObligationStore.d.ts +65 -0
  672. package/dist/sync/engine/workspaceSyncContentPullObligationStore.js +160 -0
  673. package/dist/sync/engine/workspaceSyncContentVersionStore.d.ts +216 -0
  674. package/dist/sync/engine/workspaceSyncContentVersionStore.js +1068 -0
  675. package/dist/sync/engine/workspaceSyncEngineBrowserGatewayRemoteServices.d.ts +28 -0
  676. package/dist/sync/engine/workspaceSyncEngineBrowserGatewayRemoteServices.js +543 -0
  677. package/dist/sync/engine/workspaceSyncEngineContracts.d.ts +78 -0
  678. package/dist/sync/engine/workspaceSyncEngineContracts.js +1 -0
  679. package/dist/sync/engine/workspaceSyncEngineControlPlane.d.ts +37 -0
  680. package/dist/sync/engine/workspaceSyncEngineControlPlane.js +79 -0
  681. package/dist/sync/engine/workspaceSyncEngineIdentity.d.ts +1 -0
  682. package/dist/sync/engine/workspaceSyncEngineIdentity.js +4 -0
  683. package/dist/sync/engine/workspaceSyncEngineLifecyclePolicy.d.ts +68 -0
  684. package/dist/sync/engine/workspaceSyncEngineLifecyclePolicy.js +180 -0
  685. package/dist/sync/engine/workspaceSyncEngineLocalApply.d.ts +72 -0
  686. package/dist/sync/engine/workspaceSyncEngineLocalApply.js +132 -0
  687. package/dist/sync/engine/workspaceSyncEngineLocalServices.d.ts +70 -0
  688. package/dist/sync/engine/workspaceSyncEngineLocalServices.js +25 -0
  689. package/dist/sync/engine/workspaceSyncEngineParity.d.ts +8 -0
  690. package/dist/sync/engine/workspaceSyncEngineParity.js +7 -0
  691. package/dist/sync/engine/workspaceSyncEnginePullPolicy.d.ts +32 -0
  692. package/dist/sync/engine/workspaceSyncEnginePullPolicy.js +27 -0
  693. package/dist/sync/engine/workspaceSyncEnginePushCompletion.d.ts +20 -0
  694. package/dist/sync/engine/workspaceSyncEnginePushCompletion.js +87 -0
  695. package/dist/sync/engine/workspaceSyncEngineRecovery.d.ts +56 -0
  696. package/dist/sync/engine/workspaceSyncEngineRecovery.js +288 -0
  697. package/dist/sync/engine/workspaceSyncEngineRemoteServices.d.ts +104 -0
  698. package/dist/sync/engine/workspaceSyncEngineRemoteServices.js +21 -0
  699. package/dist/sync/engine/workspaceSyncEngineRuntime.d.ts +61 -0
  700. package/dist/sync/engine/workspaceSyncEngineRuntime.js +59 -0
  701. package/dist/sync/engine/workspaceSyncEngineServerApplyBoundary.d.ts +28 -0
  702. package/dist/sync/engine/workspaceSyncEngineServerApplyBoundary.js +86 -0
  703. package/dist/sync/engine/workspaceSyncEngineServerLocalServices.d.ts +73 -0
  704. package/dist/sync/engine/workspaceSyncEngineServerLocalServices.js +452 -0
  705. package/dist/sync/engine/workspaceSyncEngineServerRemoteServices.d.ts +23 -0
  706. package/dist/sync/engine/workspaceSyncEngineServerRemoteServices.js +451 -0
  707. package/dist/sync/engine/workspaceSyncEngineServerRunnerOperations.d.ts +125 -0
  708. package/dist/sync/engine/workspaceSyncEngineServerRunnerOperations.js +1124 -0
  709. package/dist/sync/engine/workspaceSyncEngineServerSnapshotReader.d.ts +63 -0
  710. package/dist/sync/engine/workspaceSyncEngineServerSnapshotReader.js +276 -0
  711. package/dist/sync/engine/workspaceSyncEngineTransferCompletion.d.ts +20 -0
  712. package/dist/sync/engine/workspaceSyncEngineTransferCompletion.js +37 -0
  713. package/dist/sync/engine/workspaceSyncEngineTransferTypes.d.ts +7 -0
  714. package/dist/sync/engine/workspaceSyncEngineTransferTypes.js +1 -0
  715. package/dist/sync/engine/workspaceSyncEngineTransfers.d.ts +240 -0
  716. package/dist/sync/engine/workspaceSyncEngineTransfers.js +1184 -0
  717. package/dist/sync/engine/workspaceSyncEngineV3LocalFeedApply.d.ts +39 -0
  718. package/dist/sync/engine/workspaceSyncEngineV3LocalFeedApply.js +39 -0
  719. package/dist/sync/engine/workspaceSyncImmutableContentGcRunner.d.ts +25 -0
  720. package/dist/sync/engine/workspaceSyncImmutableContentGcRunner.js +83 -0
  721. package/dist/sync/engine/workspaceSyncImmutableContentProvider.d.ts +71 -0
  722. package/dist/sync/engine/workspaceSyncImmutableContentProvider.js +209 -0
  723. package/dist/sync/engine/workspaceSyncImmutableContentStager.d.ts +32 -0
  724. package/dist/sync/engine/workspaceSyncImmutableContentStager.js +202 -0
  725. package/dist/sync/engine/workspaceSyncPublishedContentResolver.d.ts +43 -0
  726. package/dist/sync/engine/workspaceSyncPublishedContentResolver.js +142 -0
  727. package/dist/sync/engine/workspaceSyncServerContentRuntime.d.ts +26 -0
  728. package/dist/sync/engine/workspaceSyncServerContentRuntime.js +41 -0
  729. package/dist/sync/engine/workspaceSyncServerDataServices.d.ts +44 -0
  730. package/dist/sync/engine/workspaceSyncServerDataServices.js +143 -0
  731. package/dist/sync/engine/workspaceSyncTransferEvidence.d.ts +39 -0
  732. package/dist/sync/engine/workspaceSyncTransferEvidence.js +45 -0
  733. package/dist/sync/engine/workspaceSyncV2ChangeDispatcher.d.ts +44 -0
  734. package/dist/sync/engine/workspaceSyncV2ChangeDispatcher.js +990 -0
  735. package/dist/sync/engine/workspaceSyncV2PreparedContent.d.ts +82 -0
  736. package/dist/sync/engine/workspaceSyncV2PreparedContent.js +219 -0
  737. package/dist/sync/planningCanonicalFields.d.ts +41 -0
  738. package/dist/sync/planningCanonicalFields.js +211 -0
  739. package/dist/sync/planningSyncPayload.d.ts +5 -1
  740. package/dist/sync/planningSyncPayload.js +88 -4
  741. package/dist/sync/syncApplyHandlers.d.ts +98 -8
  742. package/dist/sync/syncApplyHandlers.js +816 -78
  743. package/dist/sync/syncResourceAdapters.d.ts +10 -0
  744. package/dist/sync/syncResourceAdapters.js +21 -1
  745. package/dist/sync/syncService.d.ts +57 -1
  746. package/dist/sync/syncService.js +1085 -138
  747. package/dist/sync/taskNestedContent.d.ts +2 -0
  748. package/dist/sync/taskNestedContent.js +8 -0
  749. package/dist/sync/taskSyncChangeKey.js +0 -1
  750. package/dist/sync/taskSyncPayload.d.ts +0 -1
  751. package/dist/sync/taskSyncPayload.js +14 -3
  752. package/dist/sync/v3/canonicalWorkspaceSyncJson.d.ts +2 -0
  753. package/dist/sync/v3/canonicalWorkspaceSyncJson.js +26 -0
  754. package/dist/sync/v3/combinedFeedCapability.d.ts +21 -0
  755. package/dist/sync/v3/combinedFeedCapability.js +80 -0
  756. package/dist/sync/v3/combinedFeedPrerequisites.d.ts +18 -0
  757. package/dist/sync/v3/combinedFeedPrerequisites.js +184 -0
  758. package/dist/sync/v3/durableInitiativeMutationRouter.d.ts +61 -0
  759. package/dist/sync/v3/durableInitiativeMutationRouter.js +287 -0
  760. package/dist/sync/v3/durableOperationReplay.d.ts +36 -0
  761. package/dist/sync/v3/durableOperationReplay.js +103 -0
  762. package/dist/sync/v3/durableTaskAttachmentLinksMutationRouter.d.ts +49 -0
  763. package/dist/sync/v3/durableTaskAttachmentLinksMutationRouter.js +198 -0
  764. package/dist/sync/v3/durableTaskChecklistMutationRouter.d.ts +47 -0
  765. package/dist/sync/v3/durableTaskChecklistMutationRouter.js +182 -0
  766. package/dist/sync/v3/durableTaskCommentMutationRouter.d.ts +47 -0
  767. package/dist/sync/v3/durableTaskCommentMutationRouter.js +191 -0
  768. package/dist/sync/v3/durableTaskHttpBulkMutationRouter.d.ts +60 -0
  769. package/dist/sync/v3/durableTaskHttpBulkMutationRouter.js +320 -0
  770. package/dist/sync/v3/durableTaskHttpRootMutationRouter.d.ts +40 -0
  771. package/dist/sync/v3/durableTaskHttpRootMutationRouter.js +518 -0
  772. package/dist/sync/v3/durableTaxonomyMutationRouter.d.ts +63 -0
  773. package/dist/sync/v3/durableTaxonomyMutationRouter.js +289 -0
  774. package/dist/sync/v3/durableWorkflowRuntimeMutationRouter.d.ts +77 -0
  775. package/dist/sync/v3/durableWorkflowRuntimeMutationRouter.js +361 -0
  776. package/dist/sync/v3/durableWorkstreamMutationRouter.d.ts +61 -0
  777. package/dist/sync/v3/durableWorkstreamMutationRouter.js +287 -0
  778. package/dist/sync/v3/durableWorkstreamTaskOrderMutationRouter.d.ts +42 -0
  779. package/dist/sync/v3/durableWorkstreamTaskOrderMutationRouter.js +122 -0
  780. package/dist/sync/v3/entityEventLegacyAdoptionContract.d.ts +6 -0
  781. package/dist/sync/v3/entityEventLegacyAdoptionContract.js +6 -0
  782. package/dist/sync/v3/entityEventLegacyAdoptionService.d.ts +62 -0
  783. package/dist/sync/v3/entityEventLegacyAdoptionService.js +180 -0
  784. package/dist/sync/v3/initiativeActivityAuthoritativeRevision.d.ts +11 -0
  785. package/dist/sync/v3/initiativeActivityAuthoritativeRevision.js +23 -0
  786. package/dist/sync/v3/initiativeActivityIdentity.d.ts +8 -0
  787. package/dist/sync/v3/initiativeActivityIdentity.js +14 -0
  788. package/dist/sync/v3/initiativeCoexistence.d.ts +26 -0
  789. package/dist/sync/v3/initiativeCoexistence.js +148 -0
  790. package/dist/sync/v3/initiativeFeedActivationCapability.d.ts +6 -0
  791. package/dist/sync/v3/initiativeFeedActivationCapability.js +16 -0
  792. package/dist/sync/v3/initiativeMutationPayload.d.ts +26 -0
  793. package/dist/sync/v3/initiativeMutationPayload.js +144 -0
  794. package/dist/sync/v3/initiativeMutationService.d.ts +62 -0
  795. package/dist/sync/v3/initiativeMutationService.js +206 -0
  796. package/dist/sync/v3/localEntityEventLegacyAdoption.d.ts +31 -0
  797. package/dist/sync/v3/localEntityEventLegacyAdoption.js +607 -0
  798. package/dist/sync/v3/localInitiativeOutboxHandler.d.ts +8 -0
  799. package/dist/sync/v3/localInitiativeOutboxHandler.js +88 -0
  800. package/dist/sync/v3/localInitiativeOutboxService.d.ts +50 -0
  801. package/dist/sync/v3/localInitiativeOutboxService.js +495 -0
  802. package/dist/sync/v3/localOperationIdentityStore.d.ts +81 -0
  803. package/dist/sync/v3/localOperationIdentityStore.js +388 -0
  804. package/dist/sync/v3/localOutboxDispatchCapability.d.ts +7 -0
  805. package/dist/sync/v3/localOutboxDispatchCapability.js +13 -0
  806. package/dist/sync/v3/localOutboxDispatchRuntime.d.ts +16 -0
  807. package/dist/sync/v3/localOutboxDispatchRuntime.js +269 -0
  808. package/dist/sync/v3/localOutboxDispatcher.d.ts +53 -0
  809. package/dist/sync/v3/localOutboxDispatcher.js +362 -0
  810. package/dist/sync/v3/localOutboxDrainClient.d.ts +50 -0
  811. package/dist/sync/v3/localOutboxDrainClient.js +250 -0
  812. package/dist/sync/v3/localOutboxOperationHandler.d.ts +31 -0
  813. package/dist/sync/v3/localOutboxOperationHandler.js +10 -0
  814. package/dist/sync/v3/localOutboxRecoveryClient.d.ts +14 -0
  815. package/dist/sync/v3/localOutboxRecoveryClient.js +45 -0
  816. package/dist/sync/v3/localOutboxRecoveryPreparationService.d.ts +12 -0
  817. package/dist/sync/v3/localOutboxRecoveryPreparationService.js +151 -0
  818. package/dist/sync/v3/localSyncIdentityStore.d.ts +9 -0
  819. package/dist/sync/v3/localSyncIdentityStore.js +43 -0
  820. package/dist/sync/v3/localTaskAttachmentLinksOutboxHandler.d.ts +10 -0
  821. package/dist/sync/v3/localTaskAttachmentLinksOutboxHandler.js +70 -0
  822. package/dist/sync/v3/localTaskAttachmentLinksOutboxService.d.ts +45 -0
  823. package/dist/sync/v3/localTaskAttachmentLinksOutboxService.js +291 -0
  824. package/dist/sync/v3/localTaskChecklistOutboxHandler.d.ts +10 -0
  825. package/dist/sync/v3/localTaskChecklistOutboxHandler.js +54 -0
  826. package/dist/sync/v3/localTaskChecklistOutboxService.d.ts +47 -0
  827. package/dist/sync/v3/localTaskChecklistOutboxService.js +221 -0
  828. package/dist/sync/v3/localTaskCommentOutboxHandler.d.ts +10 -0
  829. package/dist/sync/v3/localTaskCommentOutboxHandler.js +94 -0
  830. package/dist/sync/v3/localTaskCommentOutboxService.d.ts +75 -0
  831. package/dist/sync/v3/localTaskCommentOutboxService.js +391 -0
  832. package/dist/sync/v3/localTaskCreateClient.d.ts +27 -0
  833. package/dist/sync/v3/localTaskCreateClient.js +209 -0
  834. package/dist/sync/v3/localTaskCreateOutboxHandler.d.ts +8 -0
  835. package/dist/sync/v3/localTaskCreateOutboxHandler.js +147 -0
  836. package/dist/sync/v3/localTaskCreateOutboxService.d.ts +77 -0
  837. package/dist/sync/v3/localTaskCreateOutboxService.js +397 -0
  838. package/dist/sync/v3/localTaskDeleteClient.d.ts +10 -0
  839. package/dist/sync/v3/localTaskDeleteClient.js +23 -0
  840. package/dist/sync/v3/localTaskDeleteOutboxHandler.d.ts +8 -0
  841. package/dist/sync/v3/localTaskDeleteOutboxHandler.js +54 -0
  842. package/dist/sync/v3/localTaskDeleteOutboxService.d.ts +38 -0
  843. package/dist/sync/v3/localTaskDeleteOutboxService.js +235 -0
  844. package/dist/sync/v3/localTaskLegacyRootAdoption.d.ts +28 -0
  845. package/dist/sync/v3/localTaskLegacyRootAdoption.js +219 -0
  846. package/dist/sync/v3/localTaskLifecycleClient.d.ts +49 -0
  847. package/dist/sync/v3/localTaskLifecycleClient.js +57 -0
  848. package/dist/sync/v3/localTaskLifecycleOutboxHandler.d.ts +8 -0
  849. package/dist/sync/v3/localTaskLifecycleOutboxHandler.js +94 -0
  850. package/dist/sync/v3/localTaskLifecycleOutboxService.d.ts +60 -0
  851. package/dist/sync/v3/localTaskLifecycleOutboxService.js +304 -0
  852. package/dist/sync/v3/localTaskMetadataClient.d.ts +13 -0
  853. package/dist/sync/v3/localTaskMetadataClient.js +30 -0
  854. package/dist/sync/v3/localTaskMetadataOutboxHandler.d.ts +8 -0
  855. package/dist/sync/v3/localTaskMetadataOutboxHandler.js +70 -0
  856. package/dist/sync/v3/localTaskMetadataOutboxService.d.ts +48 -0
  857. package/dist/sync/v3/localTaskMetadataOutboxService.js +229 -0
  858. package/dist/sync/v3/localTaskOperationClient.d.ts +72 -0
  859. package/dist/sync/v3/localTaskOperationClient.js +195 -0
  860. package/dist/sync/v3/localTaskRelationshipOutboxHandler.d.ts +8 -0
  861. package/dist/sync/v3/localTaskRelationshipOutboxHandler.js +114 -0
  862. package/dist/sync/v3/localTaskRelationshipOutboxService.d.ts +45 -0
  863. package/dist/sync/v3/localTaskRelationshipOutboxService.js +192 -0
  864. package/dist/sync/v3/localTaskRestoreClient.d.ts +13 -0
  865. package/dist/sync/v3/localTaskRestoreClient.js +32 -0
  866. package/dist/sync/v3/localTaskRestoreOutboxHandler.d.ts +8 -0
  867. package/dist/sync/v3/localTaskRestoreOutboxHandler.js +41 -0
  868. package/dist/sync/v3/localTaskRestoreOutboxService.d.ts +56 -0
  869. package/dist/sync/v3/localTaskRestoreOutboxService.js +323 -0
  870. package/dist/sync/v3/localTaskStatusClient.d.ts +17 -0
  871. package/dist/sync/v3/localTaskStatusClient.js +35 -0
  872. package/dist/sync/v3/localTaskStatusOutboxHandler.d.ts +8 -0
  873. package/dist/sync/v3/localTaskStatusOutboxHandler.js +75 -0
  874. package/dist/sync/v3/localTaskStatusOutboxService.d.ts +53 -0
  875. package/dist/sync/v3/localTaskStatusOutboxService.js +422 -0
  876. package/dist/sync/v3/localTaxonomyCompositeOutboxService.d.ts +34 -0
  877. package/dist/sync/v3/localTaxonomyCompositeOutboxService.js +290 -0
  878. package/dist/sync/v3/localTaxonomyOutboxHandler.d.ts +9 -0
  879. package/dist/sync/v3/localTaxonomyOutboxHandler.js +106 -0
  880. package/dist/sync/v3/localTaxonomyOutboxService.d.ts +30 -0
  881. package/dist/sync/v3/localTaxonomyOutboxService.js +181 -0
  882. package/dist/sync/v3/localWorkflowRuntimeOutboxHandler.d.ts +8 -0
  883. package/dist/sync/v3/localWorkflowRuntimeOutboxHandler.js +113 -0
  884. package/dist/sync/v3/localWorkflowRuntimeOutboxService.d.ts +37 -0
  885. package/dist/sync/v3/localWorkflowRuntimeOutboxService.js +330 -0
  886. package/dist/sync/v3/localWorkspaceSyncServerOutboxDispatcher.d.ts +63 -0
  887. package/dist/sync/v3/localWorkspaceSyncServerOutboxDispatcher.js +264 -0
  888. package/dist/sync/v3/localWorkstreamOutboxHandler.d.ts +8 -0
  889. package/dist/sync/v3/localWorkstreamOutboxHandler.js +102 -0
  890. package/dist/sync/v3/localWorkstreamOutboxService.d.ts +52 -0
  891. package/dist/sync/v3/localWorkstreamOutboxService.js +579 -0
  892. package/dist/sync/v3/localWorkstreamTaskOrderOutboxHandler.d.ts +10 -0
  893. package/dist/sync/v3/localWorkstreamTaskOrderOutboxHandler.js +57 -0
  894. package/dist/sync/v3/localWorkstreamTaskOrderOutboxService.d.ts +30 -0
  895. package/dist/sync/v3/localWorkstreamTaskOrderOutboxService.js +128 -0
  896. package/dist/sync/v3/planningActivation.d.ts +13 -0
  897. package/dist/sync/v3/planningActivation.js +33 -0
  898. package/dist/sync/v3/planningAttachmentActivityValidation.d.ts +9 -0
  899. package/dist/sync/v3/planningAttachmentActivityValidation.js +87 -0
  900. package/dist/sync/v3/programScaffoldService.d.ts +143 -0
  901. package/dist/sync/v3/programScaffoldService.js +478 -0
  902. package/dist/sync/v3/syncDurabilityStore.d.ts +773 -0
  903. package/dist/sync/v3/syncDurabilityStore.js +4635 -0
  904. package/dist/sync/v3/taskActivityAuthoritativeRevision.d.ts +16 -0
  905. package/dist/sync/v3/taskActivityAuthoritativeRevision.js +67 -0
  906. package/dist/sync/v3/taskActivityJournal.d.ts +20 -0
  907. package/dist/sync/v3/taskActivityJournal.js +195 -0
  908. package/dist/sync/v3/taskAttachmentLinksActivityIdentity.d.ts +6 -0
  909. package/dist/sync/v3/taskAttachmentLinksActivityIdentity.js +14 -0
  910. package/dist/sync/v3/taskAttachmentLinksMutationService.d.ts +111 -0
  911. package/dist/sync/v3/taskAttachmentLinksMutationService.js +202 -0
  912. package/dist/sync/v3/taskChecklistActivityIdentity.d.ts +6 -0
  913. package/dist/sync/v3/taskChecklistActivityIdentity.js +14 -0
  914. package/dist/sync/v3/taskChecklistMutationService.d.ts +92 -0
  915. package/dist/sync/v3/taskChecklistMutationService.js +156 -0
  916. package/dist/sync/v3/taskCommentActivityIdentity.d.ts +7 -0
  917. package/dist/sync/v3/taskCommentActivityIdentity.js +15 -0
  918. package/dist/sync/v3/taskCommentMutationService.d.ts +150 -0
  919. package/dist/sync/v3/taskCommentMutationService.js +392 -0
  920. package/dist/sync/v3/taskCommentReconcileProvenance.d.ts +58 -0
  921. package/dist/sync/v3/taskCommentReconcileProvenance.js +170 -0
  922. package/dist/sync/v3/taskCreateActivation.d.ts +19 -0
  923. package/dist/sync/v3/taskCreateActivation.js +84 -0
  924. package/dist/sync/v3/taskCreateActivityIdentity.d.ts +7 -0
  925. package/dist/sync/v3/taskCreateActivityIdentity.js +18 -0
  926. package/dist/sync/v3/taskCreateMutationService.d.ts +103 -0
  927. package/dist/sync/v3/taskCreateMutationService.js +283 -0
  928. package/dist/sync/v3/taskDeleteActivation.d.ts +7 -0
  929. package/dist/sync/v3/taskDeleteActivation.js +14 -0
  930. package/dist/sync/v3/taskDeleteMutationService.d.ts +35 -0
  931. package/dist/sync/v3/taskDeleteMutationService.js +133 -0
  932. package/dist/sync/v3/taskLegacyRootAdoptionService.d.ts +78 -0
  933. package/dist/sync/v3/taskLegacyRootAdoptionService.js +175 -0
  934. package/dist/sync/v3/taskLifecycleActivityIdentity.d.ts +9 -0
  935. package/dist/sync/v3/taskLifecycleActivityIdentity.js +18 -0
  936. package/dist/sync/v3/taskLifecycleMutationPayload.d.ts +5 -0
  937. package/dist/sync/v3/taskLifecycleMutationPayload.js +28 -0
  938. package/dist/sync/v3/taskLifecycleMutationService.d.ts +66 -0
  939. package/dist/sync/v3/taskLifecycleMutationService.js +92 -0
  940. package/dist/sync/v3/taskMetadataActivation.d.ts +12 -0
  941. package/dist/sync/v3/taskMetadataActivation.js +38 -0
  942. package/dist/sync/v3/taskMetadataActivityIdentity.d.ts +7 -0
  943. package/dist/sync/v3/taskMetadataActivityIdentity.js +18 -0
  944. package/dist/sync/v3/taskMetadataCoexistence.d.ts +37 -0
  945. package/dist/sync/v3/taskMetadataCoexistence.js +134 -0
  946. package/dist/sync/v3/taskMetadataMutationService.d.ts +71 -0
  947. package/dist/sync/v3/taskMetadataMutationService.js +199 -0
  948. package/dist/sync/v3/taskRelationshipLegacyAdoptionService.d.ts +48 -0
  949. package/dist/sync/v3/taskRelationshipLegacyAdoptionService.js +164 -0
  950. package/dist/sync/v3/taskRelationshipMutationService.d.ts +50 -0
  951. package/dist/sync/v3/taskRelationshipMutationService.js +148 -0
  952. package/dist/sync/v3/taskRestoreMutationService.d.ts +90 -0
  953. package/dist/sync/v3/taskRestoreMutationService.js +179 -0
  954. package/dist/sync/v3/taskStatusActivation.d.ts +7 -0
  955. package/dist/sync/v3/taskStatusActivation.js +15 -0
  956. package/dist/sync/v3/taskStatusMutationService.d.ts +76 -0
  957. package/dist/sync/v3/taskStatusMutationService.js +308 -0
  958. package/dist/sync/v3/taskWorkflowMutationPayload.d.ts +4 -0
  959. package/dist/sync/v3/taskWorkflowMutationPayload.js +22 -0
  960. package/dist/sync/v3/taskWorkflowMutationService.d.ts +64 -0
  961. package/dist/sync/v3/taskWorkflowMutationService.js +102 -0
  962. package/dist/sync/v3/taxonomyCoexistence.d.ts +10 -0
  963. package/dist/sync/v3/taxonomyCoexistence.js +19 -0
  964. package/dist/sync/v3/taxonomyCompositeMutationService.d.ts +110 -0
  965. package/dist/sync/v3/taxonomyCompositeMutationService.js +304 -0
  966. package/dist/sync/v3/taxonomyMutationService.d.ts +57 -0
  967. package/dist/sync/v3/taxonomyMutationService.js +106 -0
  968. package/dist/sync/v3/taxonomyStateMutation.d.ts +22 -0
  969. package/dist/sync/v3/taxonomyStateMutation.js +49 -0
  970. package/dist/sync/v3/taxonomySyncPayload.d.ts +9 -0
  971. package/dist/sync/v3/taxonomySyncPayload.js +199 -0
  972. package/dist/sync/v3/workflowAssignmentSync.d.ts +22 -0
  973. package/dist/sync/v3/workflowAssignmentSync.js +213 -0
  974. package/dist/sync/v3/workflowRuntimeMutationService.d.ts +89 -0
  975. package/dist/sync/v3/workflowRuntimeMutationService.js +359 -0
  976. package/dist/sync/v3/workflowRuntimeOperationIdentity.d.ts +13 -0
  977. package/dist/sync/v3/workflowRuntimeOperationIdentity.js +35 -0
  978. package/dist/sync/v3/workflowRuntimeSync.d.ts +141 -0
  979. package/dist/sync/v3/workflowRuntimeSync.js +485 -0
  980. package/dist/sync/v3/workspaceSyncJournalReader.d.ts +43 -0
  981. package/dist/sync/v3/workspaceSyncJournalReader.js +45 -0
  982. package/dist/sync/v3/workspaceSyncLocalOwnershipSnapshot.d.ts +28 -0
  983. package/dist/sync/v3/workspaceSyncLocalOwnershipSnapshot.js +81 -0
  984. package/dist/sync/v3/workspaceSyncPayloadFingerprint.d.ts +1 -0
  985. package/dist/sync/v3/workspaceSyncPayloadFingerprint.js +5 -0
  986. package/dist/sync/v3/workspaceSyncV2ProjectionExclusions.d.ts +16 -0
  987. package/dist/sync/v3/workspaceSyncV2ProjectionExclusions.js +161 -0
  988. package/dist/sync/v3/workspaceSyncV3AttachmentApplyObligationStore.d.ts +83 -0
  989. package/dist/sync/v3/workspaceSyncV3AttachmentApplyObligationStore.js +161 -0
  990. package/dist/sync/v3/workspaceSyncV3AttachmentAssetHydration.d.ts +16 -0
  991. package/dist/sync/v3/workspaceSyncV3AttachmentAssetHydration.js +90 -0
  992. package/dist/sync/v3/workspaceSyncV3CloudOperationHandler.d.ts +65 -0
  993. package/dist/sync/v3/workspaceSyncV3CloudOperationHandler.js +356 -0
  994. package/dist/sync/v3/workspaceSyncV3CombinedCoverage.d.ts +51 -0
  995. package/dist/sync/v3/workspaceSyncV3CombinedCoverage.js +171 -0
  996. package/dist/sync/v3/workspaceSyncV3CombinedFeedOrchestrator.d.ts +43 -0
  997. package/dist/sync/v3/workspaceSyncV3CombinedFeedOrchestrator.js +535 -0
  998. package/dist/sync/v3/workspaceSyncV3CombinedLocalApply.d.ts +50 -0
  999. package/dist/sync/v3/workspaceSyncV3CombinedLocalApply.js +1149 -0
  1000. package/dist/sync/v3/workspaceSyncV3CombinedProjectionState.d.ts +96 -0
  1001. package/dist/sync/v3/workspaceSyncV3CombinedProjectionState.js +672 -0
  1002. package/dist/sync/v3/workspaceSyncV3CombinedRepairBaseline.d.ts +42 -0
  1003. package/dist/sync/v3/workspaceSyncV3CombinedRepairBaseline.js +598 -0
  1004. package/dist/sync/v3/workspaceSyncV3CombinedRepairMaterialization.d.ts +65 -0
  1005. package/dist/sync/v3/workspaceSyncV3CombinedRepairMaterialization.js +505 -0
  1006. package/dist/sync/v3/workspaceSyncV3CombinedRepairSnapshot.d.ts +78 -0
  1007. package/dist/sync/v3/workspaceSyncV3CombinedRepairSnapshot.js +511 -0
  1008. package/dist/sync/v3/workspaceSyncV3CombinedWireContract.d.ts +45 -0
  1009. package/dist/sync/v3/workspaceSyncV3CombinedWireContract.js +125 -0
  1010. package/dist/sync/v3/workspaceSyncV3CoverageRegistry.d.ts +13 -0
  1011. package/dist/sync/v3/workspaceSyncV3CoverageRegistry.js +34 -0
  1012. package/dist/sync/v3/workspaceSyncV3CursorEncoding.d.ts +1 -0
  1013. package/dist/sync/v3/workspaceSyncV3CursorEncoding.js +6 -0
  1014. package/dist/sync/v3/workspaceSyncV3DomainAdmission.d.ts +43 -0
  1015. package/dist/sync/v3/workspaceSyncV3DomainAdmission.js +118 -0
  1016. package/dist/sync/v3/workspaceSyncV3Feed.d.ts +95 -0
  1017. package/dist/sync/v3/workspaceSyncV3Feed.js +243 -0
  1018. package/dist/sync/v3/workspaceSyncV3FeedApply.d.ts +13 -0
  1019. package/dist/sync/v3/workspaceSyncV3FeedApply.js +67 -0
  1020. package/dist/sync/v3/workspaceSyncV3FeedClientContract.d.ts +3 -0
  1021. package/dist/sync/v3/workspaceSyncV3FeedClientContract.js +46 -0
  1022. package/dist/sync/v3/workspaceSyncV3FeedCursorKeys.d.ts +10 -0
  1023. package/dist/sync/v3/workspaceSyncV3FeedCursorKeys.js +58 -0
  1024. package/dist/sync/v3/workspaceSyncV3FeedOrchestrator.d.ts +31 -0
  1025. package/dist/sync/v3/workspaceSyncV3FeedOrchestrator.js +228 -0
  1026. package/dist/sync/v3/workspaceSyncV3FeedProfile.d.ts +32 -0
  1027. package/dist/sync/v3/workspaceSyncV3FeedProfile.js +21 -0
  1028. package/dist/sync/v3/workspaceSyncV3InitiativeLocalApply.d.ts +36 -0
  1029. package/dist/sync/v3/workspaceSyncV3InitiativeLocalApply.js +163 -0
  1030. package/dist/sync/v3/workspaceSyncV3InitiativeRepair.d.ts +33 -0
  1031. package/dist/sync/v3/workspaceSyncV3InitiativeRepair.js +118 -0
  1032. package/dist/sync/v3/workspaceSyncV3LegacyBoundaryAttestation.d.ts +10 -0
  1033. package/dist/sync/v3/workspaceSyncV3LegacyBoundaryAttestation.js +45 -0
  1034. package/dist/sync/v3/workspaceSyncV3LocalOutboxStatus.d.ts +27 -0
  1035. package/dist/sync/v3/workspaceSyncV3LocalOutboxStatus.js +83 -0
  1036. package/dist/sync/v3/workspaceSyncV3NestedCoverage.d.ts +10 -0
  1037. package/dist/sync/v3/workspaceSyncV3NestedCoverage.js +40 -0
  1038. package/dist/sync/v3/workspaceSyncV3NestedTaskApply.d.ts +83 -0
  1039. package/dist/sync/v3/workspaceSyncV3NestedTaskApply.js +325 -0
  1040. package/dist/sync/v3/workspaceSyncV3NestedTaskCodecs.d.ts +59 -0
  1041. package/dist/sync/v3/workspaceSyncV3NestedTaskCodecs.js +302 -0
  1042. package/dist/sync/v3/workspaceSyncV3NestedTaskProjection.d.ts +47 -0
  1043. package/dist/sync/v3/workspaceSyncV3NestedTaskProjection.js +329 -0
  1044. package/dist/sync/v3/workspaceSyncV3NestedTaskRepairSnapshot.d.ts +19 -0
  1045. package/dist/sync/v3/workspaceSyncV3NestedTaskRepairSnapshot.js +41 -0
  1046. package/dist/sync/v3/workspaceSyncV3NestedWireContract.d.ts +6 -0
  1047. package/dist/sync/v3/workspaceSyncV3NestedWireContract.js +16 -0
  1048. package/dist/sync/v3/workspaceSyncV3OperationProjection.d.ts +8 -0
  1049. package/dist/sync/v3/workspaceSyncV3OperationProjection.js +52 -0
  1050. package/dist/sync/v3/workspaceSyncV3OperationProtocol.d.ts +229 -0
  1051. package/dist/sync/v3/workspaceSyncV3OperationProtocol.js +1 -0
  1052. package/dist/sync/v3/workspaceSyncV3OperatorDiagnostics.d.ts +165 -0
  1053. package/dist/sync/v3/workspaceSyncV3OperatorDiagnostics.js +414 -0
  1054. package/dist/sync/v3/workspaceSyncV3OriginActor.d.ts +36 -0
  1055. package/dist/sync/v3/workspaceSyncV3OriginActor.js +61 -0
  1056. package/dist/sync/v3/workspaceSyncV3OriginAssertion.d.ts +46 -0
  1057. package/dist/sync/v3/workspaceSyncV3OriginAssertion.js +121 -0
  1058. package/dist/sync/v3/workspaceSyncV3OriginAssertionHeader.d.ts +1 -0
  1059. package/dist/sync/v3/workspaceSyncV3OriginAssertionHeader.js +1 -0
  1060. package/dist/sync/v3/workspaceSyncV3PlanningOrderCoverage.d.ts +10 -0
  1061. package/dist/sync/v3/workspaceSyncV3PlanningOrderCoverage.js +34 -0
  1062. package/dist/sync/v3/workspaceSyncV3PlanningOrderWireContract.d.ts +6 -0
  1063. package/dist/sync/v3/workspaceSyncV3PlanningOrderWireContract.js +10 -0
  1064. package/dist/sync/v3/workspaceSyncV3ProjectionState.d.ts +105 -0
  1065. package/dist/sync/v3/workspaceSyncV3ProjectionState.js +467 -0
  1066. package/dist/sync/v3/workspaceSyncV3TaskCommentAudit.d.ts +56 -0
  1067. package/dist/sync/v3/workspaceSyncV3TaskCommentAudit.js +250 -0
  1068. package/dist/sync/v3/workspaceSyncV3TaskRelationshipProjection.d.ts +30 -0
  1069. package/dist/sync/v3/workspaceSyncV3TaskRelationshipProjection.js +142 -0
  1070. package/dist/sync/v3/workspaceSyncV3TaskRootProjection.d.ts +40 -0
  1071. package/dist/sync/v3/workspaceSyncV3TaskRootProjection.js +246 -0
  1072. package/dist/sync/v3/workspaceSyncV3TaxonomyFeedProjection.d.ts +39 -0
  1073. package/dist/sync/v3/workspaceSyncV3TaxonomyFeedProjection.js +185 -0
  1074. package/dist/sync/v3/workspaceSyncV3WorkflowCoverage.d.ts +10 -0
  1075. package/dist/sync/v3/workspaceSyncV3WorkflowCoverage.js +36 -0
  1076. package/dist/sync/v3/workspaceSyncV3WorkflowRuntimeApply.d.ts +17 -0
  1077. package/dist/sync/v3/workspaceSyncV3WorkflowRuntimeApply.js +143 -0
  1078. package/dist/sync/v3/workspaceSyncV3WorkflowRuntimeProjection.d.ts +9 -0
  1079. package/dist/sync/v3/workspaceSyncV3WorkflowRuntimeProjection.js +195 -0
  1080. package/dist/sync/v3/workspaceSyncV3WorkflowWireContract.d.ts +11 -0
  1081. package/dist/sync/v3/workspaceSyncV3WorkflowWireContract.js +12 -0
  1082. package/dist/sync/v3/workspaceSyncV3WorkstreamProjection.d.ts +4 -0
  1083. package/dist/sync/v3/workspaceSyncV3WorkstreamProjection.js +98 -0
  1084. package/dist/sync/v3/workspaceSyncV3WorkstreamTaskOrderProjection.d.ts +9 -0
  1085. package/dist/sync/v3/workspaceSyncV3WorkstreamTaskOrderProjection.js +72 -0
  1086. package/dist/sync/v3/workstreamActivityAuthoritativeRevision.d.ts +11 -0
  1087. package/dist/sync/v3/workstreamActivityAuthoritativeRevision.js +23 -0
  1088. package/dist/sync/v3/workstreamActivityIdentity.d.ts +8 -0
  1089. package/dist/sync/v3/workstreamActivityIdentity.js +14 -0
  1090. package/dist/sync/v3/workstreamCoexistence.d.ts +19 -0
  1091. package/dist/sync/v3/workstreamCoexistence.js +64 -0
  1092. package/dist/sync/v3/workstreamMutationPayload.d.ts +27 -0
  1093. package/dist/sync/v3/workstreamMutationPayload.js +147 -0
  1094. package/dist/sync/v3/workstreamMutationService.d.ts +72 -0
  1095. package/dist/sync/v3/workstreamMutationService.js +256 -0
  1096. package/dist/sync/v3/workstreamTaskOrderMutationService.d.ts +55 -0
  1097. package/dist/sync/v3/workstreamTaskOrderMutationService.js +110 -0
  1098. package/dist/sync/v3/workstreamTaskOrderSync.d.ts +14 -0
  1099. package/dist/sync/v3/workstreamTaskOrderSync.js +25 -0
  1100. package/dist/sync/workspaceContentManifest.d.ts +86 -0
  1101. package/dist/sync/workspaceContentManifest.js +123 -0
  1102. package/dist/sync/workspacePullFeed.d.ts +186 -2
  1103. package/dist/sync/workspacePullFeed.js +513 -136
  1104. package/dist/sync/workspacePushPreparedPlan.d.ts +21 -0
  1105. package/dist/sync/workspacePushPreparedPlan.js +1 -0
  1106. package/dist/sync/workspaceRepair.d.ts +17 -25
  1107. package/dist/sync/workspaceRepair.js +348 -25
  1108. package/dist/sync/workspaceSyncContentDecryption.d.ts +6 -0
  1109. package/dist/sync/workspaceSyncContentDecryption.js +11 -0
  1110. package/dist/sync/workspaceSyncModel.d.ts +216 -5
  1111. package/dist/sync/workspaceSyncModel.js +371 -35
  1112. package/dist/sync/workspaceSyncSnapshotProjection.d.ts +11 -0
  1113. package/dist/sync/workspaceSyncSnapshotProjection.js +101 -0
  1114. package/dist/sync/workspaceSyncState.d.ts +13 -0
  1115. package/dist/sync/workspaceSyncState.js +36 -0
  1116. package/dist/sync/workspaceSyncV2SnapshotBuilder.d.ts +106 -0
  1117. package/dist/sync/workspaceSyncV2SnapshotBuilder.js +193 -0
  1118. package/dist/types.d.ts +23 -15
  1119. package/dist/types.js +1 -3
  1120. package/dist/ui/ai-profile-clients/amazon-nova.svg +1 -0
  1121. package/dist/ui/ai-profile-clients/antigravity.png +0 -0
  1122. package/dist/ui/ai-profile-clients/chatgpt.svg +10 -0
  1123. package/dist/ui/ai-profile-clients/claude-chat.svg +1 -0
  1124. package/dist/ui/ai-profile-clients/claude-code.svg +15 -0
  1125. package/dist/ui/ai-profile-clients/cline-app-icon-light.png +0 -0
  1126. package/dist/ui/ai-profile-clients/cline.svg +16 -0
  1127. package/dist/ui/ai-profile-clients/codex.svg +1 -0
  1128. package/dist/ui/ai-profile-clients/copilot.png +0 -0
  1129. package/dist/ui/ai-profile-clients/cursor.svg +1 -0
  1130. package/dist/ui/ai-profile-clients/deepseek.svg +1 -0
  1131. package/dist/ui/ai-profile-clients/gemini-cli-icon.png +0 -0
  1132. package/dist/ui/ai-profile-clients/gemini.svg +10 -0
  1133. package/dist/ui/ai-profile-clients/grok.svg +31 -0
  1134. package/dist/ui/ai-profile-clients/kiro.svg +11 -0
  1135. package/dist/ui/ai-profile-clients/llama.svg +1 -0
  1136. package/dist/ui/ai-profile-clients/mistral.svg +1 -0
  1137. package/dist/ui/ai-profile-clients/ms_copilot.jpeg +0 -0
  1138. package/dist/ui/ai-profile-clients/openclaw.png +0 -0
  1139. package/dist/ui/ai-profile-clients/perplexity.svg +1 -0
  1140. package/dist/ui/ai-profile-clients/vscode.svg +41 -0
  1141. package/dist/ui/ai-profile-clients/windsurf.svg +11 -0
  1142. package/dist/ui/assets/AiIdentityRosterCard-DB1BLO_j.js +1 -0
  1143. package/dist/ui/assets/AiProfilesModule-DPxQeF9N.js +1 -0
  1144. package/dist/ui/assets/AnnotatedAttachmentWorkspace-CBRZ8rca.css +1 -0
  1145. package/dist/ui/assets/AnnotatedAttachmentWorkspace-DHNYaNg6.js +3 -0
  1146. package/dist/ui/assets/AssetTraySortControl-B9k5caQW.css +1 -0
  1147. package/dist/ui/assets/AssetTraySortControl-DphbyHVc.js +1 -0
  1148. package/dist/ui/assets/ContextAttachmentManager-CMxSzHqc.js +3 -0
  1149. package/dist/ui/assets/DocumentWorkspace-BC7sy5TG.js +261 -0
  1150. package/dist/ui/assets/DocumentWorkspace-BIBGBfd7.css +1 -0
  1151. package/dist/ui/assets/EntityActivityTimeline-BfJbZRdl.css +1 -0
  1152. package/dist/ui/assets/EntityActivityTimeline-pJ2ZjZ-k.js +1 -0
  1153. package/dist/ui/assets/PlanningModule-CeTqXMMz.css +1 -0
  1154. package/dist/ui/assets/PlanningModule-t5GbvVR9.js +1 -0
  1155. package/dist/ui/assets/PlansPage-BVH_NfgT.js +1 -0
  1156. package/dist/ui/assets/PlansPage-C2nkK2Bp.css +1 -0
  1157. package/dist/ui/assets/TaskContextUpload-Ds4LnDzV.css +1 -0
  1158. package/dist/ui/assets/TaskContextUpload-bl4fOOUz.js +1 -0
  1159. package/dist/ui/assets/TaskSettings-xVsxSa0g.js +12 -0
  1160. package/dist/ui/assets/TaskforceAgentsModule-CkAxW19K.js +21 -0
  1161. package/dist/ui/assets/TaskforceAgentsModule-D6IC0S7Q.css +1 -0
  1162. package/dist/ui/assets/WorkflowManagerModule-BKqIGVnF.js +1 -0
  1163. package/dist/ui/assets/WorkflowManagerModule-DF10XENz.css +1 -0
  1164. package/dist/ui/assets/antigravity-DRKQga2U.png +0 -0
  1165. package/dist/ui/assets/cursor-BM_3k4Y4.svg +1 -0
  1166. package/dist/ui/assets/gemini-cli-icon-dBAVjCcn.png +0 -0
  1167. package/dist/ui/assets/grok-BuodbWaG.svg +31 -0
  1168. package/dist/ui/assets/index-BzJlVnNS.css +1 -0
  1169. package/dist/ui/assets/index-Cx7vZJHL.js +7 -0
  1170. package/dist/ui/assets/{vendor-dnd-DRzYolkg.js → vendor-dnd-CJ-AjP-Y.js} +1 -1
  1171. package/dist/ui/assets/{vendor-icons-CLnehDTw.js → vendor-icons-B8ZNsH1g.js} +1 -1
  1172. package/dist/ui/assets/{vendor-markdown-BUxTU7dS.js → vendor-markdown-_lhNCyq-.js} +9 -9
  1173. package/dist/ui/assets/vendor-router-AqJMU8Lz.js +3 -0
  1174. package/dist/ui/assets/vscode-C_7wk1WI.svg +41 -0
  1175. package/dist/ui/branding/logos/logo_dark_bg.png +0 -0
  1176. package/dist/ui/branding/logos/logo_favicon_dark.png +0 -0
  1177. package/dist/ui/branding/logos/logo_favicon_dark.svg +56 -0
  1178. package/dist/ui/branding/logos/logo_favicon_light.png +0 -0
  1179. package/dist/ui/branding/logos/logo_light_bg.png +0 -0
  1180. package/dist/ui/images/Taskforce_Van.webp +0 -0
  1181. package/dist/ui/index.html +6 -6
  1182. package/dist/update/uiUpdateService.d.ts +43 -0
  1183. package/dist/update/uiUpdateService.js +149 -0
  1184. package/dist/update/updateCli.d.ts +15 -0
  1185. package/dist/update/updateCli.js +76 -0
  1186. package/dist/update/updateExecutor.d.ts +40 -0
  1187. package/dist/update/updateExecutor.js +474 -0
  1188. package/dist/update/updateStatus.d.ts +83 -0
  1189. package/dist/update/updateStatus.js +703 -0
  1190. package/dist/utils/aiProfileAvatarPaths.d.ts +14 -0
  1191. package/dist/utils/aiProfileAvatarPaths.js +52 -0
  1192. package/dist/utils/aiProfileDefaultLogo.d.ts +7 -0
  1193. package/dist/utils/aiProfileDefaultLogo.js +84 -0
  1194. package/dist/utils/aiProfileEvents.d.ts +9 -1
  1195. package/dist/utils/annotatedAttachments.d.ts +8 -0
  1196. package/dist/utils/annotatedAttachments.js +17 -1
  1197. package/dist/utils/assetTraySorting.d.ts +25 -0
  1198. package/dist/utils/assetTraySorting.js +83 -0
  1199. package/dist/utils/assignees.d.ts +5 -0
  1200. package/dist/utils/assignees.js +14 -9
  1201. package/dist/utils/authLogin.d.ts +10 -0
  1202. package/dist/utils/authLogin.js +8 -0
  1203. package/dist/utils/authSessionEvents.d.ts +2 -0
  1204. package/dist/utils/authSessionEvents.js +6 -0
  1205. package/dist/utils/avatarUpload.js +5 -5
  1206. package/dist/utils/canonicalReferenceAttachments.d.ts +12 -0
  1207. package/dist/utils/canonicalReferenceAttachments.js +42 -0
  1208. package/dist/utils/cloudAssetDisplay.d.ts +2 -0
  1209. package/dist/utils/cloudAssetDisplay.js +8 -0
  1210. package/dist/utils/constants.d.ts +4 -11
  1211. package/dist/utils/constants.js +5 -64
  1212. package/dist/utils/contextAttachmentPreview.d.ts +11 -0
  1213. package/dist/utils/contextAttachmentPreview.js +8 -0
  1214. package/dist/utils/contextAttachmentUpload.d.ts +8 -0
  1215. package/dist/utils/contextAttachmentUpload.js +144 -0
  1216. package/dist/utils/documentNames.js +6 -4
  1217. package/dist/utils/entityReferences.d.ts +14 -0
  1218. package/dist/utils/entityReferences.js +21 -0
  1219. package/dist/utils/httpSetCookie.d.ts +3 -0
  1220. package/dist/utils/httpSetCookie.js +22 -0
  1221. package/dist/utils/imageNoteStoragePaths.d.ts +3 -0
  1222. package/dist/utils/imageNoteStoragePaths.js +19 -0
  1223. package/dist/utils/imageReferences.d.ts +6 -0
  1224. package/dist/utils/imageReferences.js +1 -0
  1225. package/dist/utils/planningArchiveOrchestrator.d.ts +23 -0
  1226. package/dist/utils/planningArchiveOrchestrator.js +37 -0
  1227. package/dist/utils/planningArchivePresentation.d.ts +20 -0
  1228. package/dist/utils/planningArchivePresentation.js +23 -0
  1229. package/dist/utils/planningArchiveReadiness.d.ts +26 -0
  1230. package/dist/utils/planningArchiveReadiness.js +30 -0
  1231. package/dist/utils/planningFavorites.d.ts +7 -0
  1232. package/dist/utils/planningFavorites.js +34 -0
  1233. package/dist/utils/syncEventPresentation.js +53 -0
  1234. package/dist/utils/syncStatusPresentation.d.ts +25 -0
  1235. package/dist/utils/syncStatusPresentation.js +86 -5
  1236. package/dist/utils/taskActivity.d.ts +9 -2
  1237. package/dist/utils/taskActivity.js +61 -0
  1238. package/dist/utils/taskDraftDefaults.d.ts +0 -8
  1239. package/dist/utils/taskDraftDefaults.js +0 -4
  1240. package/dist/utils/taskEvents.d.ts +11 -0
  1241. package/dist/utils/taskEvents.js +6 -0
  1242. package/dist/utils/taskHeaderQuickFilter.d.ts +14 -0
  1243. package/dist/utils/taskHeaderQuickFilter.js +32 -0
  1244. package/dist/utils/taskInvalidation.d.ts +23 -0
  1245. package/dist/utils/taskInvalidation.js +67 -0
  1246. package/dist/utils/taskNormalization.d.ts +2 -1
  1247. package/dist/utils/taskNormalization.js +44 -18
  1248. package/dist/utils/taskReferences.d.ts +16 -0
  1249. package/dist/utils/taskReferences.js +63 -0
  1250. package/dist/utils/taskforceAgentEvents.d.ts +8 -0
  1251. package/dist/utils/taskforceAgentEvents.js +6 -0
  1252. package/dist/utils/taskforceAgentSkillEvents.d.ts +7 -0
  1253. package/dist/utils/taskforceAgentSkillEvents.js +8 -0
  1254. package/dist/utils/uiNotice.d.ts +3 -0
  1255. package/dist/utils/uiNotice.js +1 -1
  1256. package/dist/utils/workspaceResourceEvents.d.ts +7 -0
  1257. package/dist/utils/workspaceResourceEvents.js +6 -0
  1258. package/dist/utils/workspaceSyncPresentation.d.ts +24 -0
  1259. package/dist/utils/workspaceSyncPresentation.js +243 -6
  1260. package/package.json +69 -21
  1261. package/dist/components/features/AgentsModule.d.ts +0 -18
  1262. package/dist/components/features/AgentsModule.js +0 -479
  1263. package/dist/components/features/InitiativesModule.d.ts +0 -22
  1264. package/dist/components/features/InitiativesModule.js +0 -33
  1265. package/dist/components/features/WorkflowsModule.d.ts +0 -27
  1266. package/dist/components/features/WorkflowsModule.js +0 -21
  1267. package/dist/components/features/settings/WorkflowEditor.d.ts +0 -15
  1268. package/dist/components/features/settings/WorkflowEditor.js +0 -245
  1269. package/dist/components/views/panels/DocumentFilterToolbar.d.ts +0 -10
  1270. package/dist/components/views/panels/DocumentFilterToolbar.js +0 -7
  1271. package/dist/components/views/standalone/modals/AccountHubModal.d.ts +0 -61
  1272. package/dist/components/views/standalone/modals/AccountHubModal.js +0 -108
  1273. package/dist/components/views/standalone/modals/EditProfileModal.d.ts +0 -19
  1274. package/dist/components/views/standalone/modals/EditProfileModal.js +0 -11
  1275. package/dist/hooks/ui/useResourceExport.d.ts +0 -21
  1276. package/dist/hooks/ui/useResourceExport.js +0 -87
  1277. package/dist/hooks/ui/useWorkflowTemplates.d.ts +0 -37
  1278. package/dist/hooks/ui/useWorkflowTemplates.js +0 -116
  1279. package/dist/mcp/clientProfileDefaults.d.ts +0 -12
  1280. package/dist/mcp/clientProfileDefaults.js +0 -41
  1281. package/dist/resources/templates/WORKFLOW_V2_POLICY.md +0 -55
  1282. package/dist/resources/templates/environments/aider.yaml +0 -14
  1283. package/dist/resources/templates/environments/antigravity.yaml +0 -10
  1284. package/dist/resources/templates/environments/claude.yaml +0 -10
  1285. package/dist/resources/templates/environments/cline.yaml +0 -10
  1286. package/dist/resources/templates/environments/codex.yaml +0 -13
  1287. package/dist/resources/templates/environments/copilot.yaml +0 -10
  1288. package/dist/resources/templates/environments/cursor.yaml +0 -9
  1289. package/dist/resources/templates/environments/gemini.yaml +0 -9
  1290. package/dist/resources/templates/environments/windsurf.yaml +0 -10
  1291. package/dist/resources/templates/workflow-sources/README.md +0 -9
  1292. package/dist/resources/templates/workflow-sources/workflowDocs.mjs +0 -530
  1293. package/dist/resources/templates/workflow-sources/workflowEditorOverrides.json +0 -1
  1294. package/dist/resources/templates/workflows/collaborate.yaml +0 -109
  1295. package/dist/resources/templates/workflows/do.yaml +0 -87
  1296. package/dist/resources/templates/workflows/evaluate.yaml +0 -116
  1297. package/dist/resources/templates/workflows/execute.yaml +0 -156
  1298. package/dist/resources/templates/workflows/plan.yaml +0 -118
  1299. package/dist/resources/templates/workflows/review.yaml +0 -114
  1300. package/dist/services/formatTransformers.d.ts +0 -29
  1301. package/dist/services/formatTransformers.js +0 -56
  1302. package/dist/services/templateEngine.d.ts +0 -46
  1303. package/dist/services/templateEngine.js +0 -148
  1304. package/dist/shared/workflowDefaults.d.ts +0 -9
  1305. package/dist/shared/workflowDefaults.js +0 -11
  1306. package/dist/ui/agent-logos/Gemini CLI.jpeg +0 -0
  1307. package/dist/ui/agent-logos/antigravity.jpeg +0 -0
  1308. package/dist/ui/agent-logos/chatgpt.png +0 -0
  1309. package/dist/ui/agent-logos/claude-code.jpeg +0 -0
  1310. package/dist/ui/agent-logos/codex.jpeg +0 -0
  1311. package/dist/ui/agent-logos/cursor.png +0 -0
  1312. package/dist/ui/agent-logos/openclaw.jpeg +0 -0
  1313. package/dist/ui/agent-logos/windsurf.png +0 -0
  1314. package/dist/ui/assets/AgentsModule-C4LcqhcZ.js +0 -1
  1315. package/dist/ui/assets/AnnotatedAttachmentWorkspace-B-Dq22d2.js +0 -3
  1316. package/dist/ui/assets/AnnotatedAttachmentWorkspace-BVKew-mH.css +0 -1
  1317. package/dist/ui/assets/ContextAttachmentManager-DsXPTvi-.js +0 -3
  1318. package/dist/ui/assets/DocumentWorkspace-CxA1wO3U.js +0 -252
  1319. package/dist/ui/assets/DocumentWorkspace-D4rJKXzd.css +0 -1
  1320. package/dist/ui/assets/EntityActivityTimeline-B8nSe8l3.js +0 -1
  1321. package/dist/ui/assets/EntityActivityTimeline-DyqvvhuF.css +0 -1
  1322. package/dist/ui/assets/InitiativesModule-VY95v38E.js +0 -1
  1323. package/dist/ui/assets/PlansPage-CQbKDv1a.js +0 -1
  1324. package/dist/ui/assets/PlansPage-DeAzWYTb.css +0 -1
  1325. package/dist/ui/assets/TaskContextUpload-DvDlNpHC.js +0 -1
  1326. package/dist/ui/assets/TaskSettings-CUWbYYtP.js +0 -12
  1327. package/dist/ui/assets/WorkflowsModule-CgM3Jako.js +0 -5
  1328. package/dist/ui/assets/documentReferences-Do9YjrS3.js +0 -1
  1329. package/dist/ui/assets/index--mh3pktj.js +0 -5
  1330. package/dist/ui/assets/index-BawaaEXS.css +0 -1
  1331. package/dist/ui/assets/vendor-router-BbWMxlnO.js +0 -3
  1332. package/dist/ui/branding/logos/logo_black_01.png +0 -0
  1333. package/dist/ui/branding/logos/logo_black_02.png +0 -0
  1334. package/dist/ui/branding/logos/logo_white_01.png +0 -0
  1335. package/dist/ui/branding/logos/logo_white_02.png +0 -0
  1336. package/scripts/generate-workflow-templates.mjs +0 -134
  1337. package/src/resources/templates/WORKFLOW_V2_POLICY.md +0 -55
  1338. package/src/resources/templates/environments/aider.yaml +0 -14
  1339. package/src/resources/templates/environments/antigravity.yaml +0 -10
  1340. package/src/resources/templates/environments/claude.yaml +0 -10
  1341. package/src/resources/templates/environments/cline.yaml +0 -10
  1342. package/src/resources/templates/environments/codex.yaml +0 -13
  1343. package/src/resources/templates/environments/copilot.yaml +0 -10
  1344. package/src/resources/templates/environments/cursor.yaml +0 -9
  1345. package/src/resources/templates/environments/gemini.yaml +0 -9
  1346. package/src/resources/templates/environments/windsurf.yaml +0 -10
  1347. package/src/resources/templates/workflow-sources/README.md +0 -9
  1348. package/src/resources/templates/workflow-sources/workflowDocs.mjs +0 -530
  1349. package/src/resources/templates/workflow-sources/workflowEditorOverrides.json +0 -1
  1350. package/src/resources/templates/workflows/collaborate.yaml +0 -109
  1351. package/src/resources/templates/workflows/do.yaml +0 -87
  1352. package/src/resources/templates/workflows/evaluate.yaml +0 -116
  1353. package/src/resources/templates/workflows/execute.yaml +0 -156
  1354. package/src/resources/templates/workflows/plan.yaml +0 -118
  1355. package/src/resources/templates/workflows/review.yaml +0 -114
  1356. /package/dist/ui/branding/logos/{logo_dark.svg → logo_dark_no_bg.svg} +0 -0
  1357. /package/dist/ui/branding/logos/{logo_favicon.svg → logo_favicon_light.svg} +0 -0
  1358. /package/dist/ui/branding/logos/{logo_light.svg → logo_light_no_bg.svg} +0 -0
@@ -1,6 +1,10 @@
1
1
  import { isAiProfileSurfaceType } from '../shared/aiProfileSurfaceType.js';
2
2
  import { isAiProfileSeatScope } from '../shared/aiProfileSeatScope.js';
3
3
  import { normalizeSyncSameOriginAssetUrl } from '../sync/syncFieldSemantics.js';
4
+ import { buildAiProfileAvatarStoragePrefixes } from '../utils/aiProfileAvatarPaths.js';
5
+ import { getMcpClientRegistryEntry, inferLegacyMcpClientIdFromProfile } from '../mcp/clientRegistry.js';
6
+ import { assignedAiProfileColor, normalizeAiProfileColor, parseAiProfileColorSource, } from '../shared/aiProfileColors.js';
7
+ import { getTaskforceManagedAgentId, isTaskforceManagedAiProfile } from '../shared/aiProfileAvatarEligibility.js';
4
8
  function normalizeNullableIsoString(value) {
5
9
  if (typeof value !== 'string')
6
10
  return null;
@@ -44,6 +48,36 @@ function compareIsoStrings(left, right) {
44
48
  return 1;
45
49
  return normalizedLeft.localeCompare(normalizedRight);
46
50
  }
51
+ const AI_PROFILE_COLOR_SOURCE_SYNC_RANK = {
52
+ legacy: 0,
53
+ assigned_default: 1,
54
+ agent_explicit: 2,
55
+ product_default: 3,
56
+ user_override: 4,
57
+ };
58
+ function compareAiProfileColorSyncCandidates(incoming, existing) {
59
+ const timestampComparison = compareIsoStrings(incoming.updatedAt, existing.updatedAt);
60
+ if (timestampComparison !== 0)
61
+ return timestampComparison;
62
+ const sourceComparison = AI_PROFILE_COLOR_SOURCE_SYNC_RANK[incoming.source]
63
+ - AI_PROFILE_COLOR_SOURCE_SYNC_RANK[existing.source];
64
+ if (sourceComparison !== 0)
65
+ return sourceComparison;
66
+ if (incoming.color === existing.color)
67
+ return 0;
68
+ return incoming.color < existing.color ? -1 : 1;
69
+ }
70
+ function resolveAiProfileProductDefaultColor(profile) {
71
+ if (isTaskforceManagedAiProfile(profile))
72
+ return null;
73
+ const connection = profile.providerMetadata?.connection;
74
+ const configuredClientId = connection && typeof connection === 'object' && !Array.isArray(connection)
75
+ ? connection.clientId
76
+ : null;
77
+ const clientId = getMcpClientRegistryEntry(configuredClientId)?.id
78
+ || inferLegacyMcpClientIdFromProfile(profile);
79
+ return normalizeAiProfileColor(getMcpClientRegistryEntry(clientId)?.signatureColor);
80
+ }
47
81
  function deriveRosterStateUpdatedAt(value, fallbacks) {
48
82
  const explicitValue = normalizeNullableIsoString(value);
49
83
  const archivedAt = normalizeNullableIsoString(fallbacks.archivedAt);
@@ -213,65 +247,26 @@ function filterAiProfileRowsForTrustedSeatScope(deps, rows, trustedSeatScope) {
213
247
  return rows;
214
248
  return rows.filter((row) => aiProfileMatchesTrustedSeatScope(deps, row, trustedSeatScope));
215
249
  }
216
- function normalizeAiProfileIdentityValue(value) {
217
- return String(value || '').trim().toLowerCase();
218
- }
219
- function latestAiProfileActivityValue(row) {
220
- return normalizeNullableIsoString(row.last_active_at)
221
- ?? normalizeNullableIsoString(row.updated_at)
222
- ?? normalizeNullableIsoString(row.created_at)
223
- ?? '';
224
- }
225
- function rankNullableIdentityMatch(existingValue, incomingValue) {
226
- const existing = normalizeAiProfileIdentityValue(existingValue);
227
- if (incomingValue) {
228
- if (existing === incomingValue)
229
- return 2;
230
- if (!existing)
231
- return 1;
232
- return 0;
233
- }
234
- return existing ? 0 : 1;
235
- }
236
- function selectAiProfileIdentityMatch(deps, rows, input, trustedSeatScope) {
250
+ function selectAiProfileIdentityMatch(deps, rows, trustedSeatScope) {
237
251
  const scopedRows = filterAiProfileRowsForTrustedSeatScope(deps, rows, trustedSeatScope);
238
- const incomingProvider = normalizeAiProfileIdentityValue(input.provider) || null;
239
- const incomingModel = normalizeAiProfileIdentityValue(input.model) || null;
240
- const incomingSurfaceType = input.surfaceTypeProvided
241
- ? normalizeAiProfileIdentityValue(input.surfaceType) || null
242
- : null;
243
- const ranked = scopedRows
244
- .map((row) => {
245
- const providerRank = rankNullableIdentityMatch(row.provider, incomingProvider);
246
- const surfaceRank = input.surfaceTypeProvided
247
- ? rankNullableIdentityMatch(row.surface_type, incomingSurfaceType)
248
- : 0;
249
- const modelRank = incomingModel && normalizeAiProfileIdentityValue(row.model) === incomingModel ? 1 : 0;
252
+ return {
253
+ row: scopedRows.length === 1 ? scopedRows[0] : undefined,
254
+ rows: scopedRows,
255
+ matchCount: scopedRows.length,
256
+ };
257
+ }
258
+ function buildAiProfileIdentityCandidates(deps, rows) {
259
+ return rows.map((row) => {
260
+ const profile = deps.aiProfileRowToRecord(row);
250
261
  return {
251
- row,
252
- providerRank,
253
- surfaceRank,
254
- modelRank,
255
- activity: latestAiProfileActivityValue(row),
262
+ id: profile.id,
263
+ name: profile.name,
264
+ username: profile.username,
265
+ surfaceType: profile.surfaceType ?? null,
266
+ seatScope: profile.seatScope ?? null,
267
+ archived: Boolean(profile.archivedAt),
256
268
  };
257
- })
258
- .filter((entry) => Boolean(entry))
259
- .sort((left, right) => {
260
- if (right.providerRank !== left.providerRank)
261
- return right.providerRank - left.providerRank;
262
- if (right.surfaceRank !== left.surfaceRank)
263
- return right.surfaceRank - left.surfaceRank;
264
- if (right.modelRank !== left.modelRank)
265
- return right.modelRank - left.modelRank;
266
- const activityDelta = right.activity.localeCompare(left.activity);
267
- if (activityDelta !== 0)
268
- return activityDelta;
269
- return String(left.row.id || '').localeCompare(String(right.row.id || ''));
270
269
  });
271
- return {
272
- row: ranked[0]?.row,
273
- matchCount: ranked.length,
274
- };
275
270
  }
276
271
  function requiresCloudSeatReservation(existing, nextSeatScope) {
277
272
  if (nextSeatScope !== 'cloud_metered')
@@ -287,7 +282,8 @@ function assertAiProfileSeatAvailable(deps, workspaceId) {
287
282
  workspaceId,
288
283
  limit: aiProfileUsage.limit,
289
284
  used: aiProfileUsage.used,
290
- remaining: aiProfileUsage.remaining
285
+ remaining: aiProfileUsage.remaining,
286
+ recovery: 'Use the existing profileToken when reconnecting, reactivate an archived profile with its token, remove an unused cloud AI profile, or upgrade the workspace plan.'
291
287
  });
292
288
  }
293
289
  }
@@ -358,11 +354,12 @@ function resolveOptionalProfileField(inputValue, existingValue, fallbackValue) {
358
354
  return preservedValue;
359
355
  return normalizeOptionalProfileField(fallbackValue);
360
356
  }
361
- function resolveAiProfileMetadataFields(deps, input, existing) {
362
- const surfaceTypeInput = normalizeAiProfileSurfaceTypeInput(deps, input.surfaceType);
357
+ function resolveAiProfileMetadataFields(deps, input, existing, trustedSurfaceType) {
358
+ const trustedSurfaceTypeProvided = trustedSurfaceType !== undefined;
359
+ const surfaceTypeInput = normalizeAiProfileSurfaceTypeInput(deps, trustedSurfaceTypeProvided ? trustedSurfaceType : input.surfaceType);
363
360
  const manuallyOverridden = hasManualSurfaceTypeOverride(existing);
364
361
  const effectiveSurfaceType = surfaceTypeInput === undefined
365
- || manuallyOverridden
362
+ || (manuallyOverridden && !trustedSurfaceTypeProvided)
366
363
  ? existing?.surfaceType ?? null
367
364
  : surfaceTypeInput;
368
365
  const inferredDefaults = inferAiProfileMetadataDefaults(input.name, effectiveSurfaceType);
@@ -372,7 +369,7 @@ function resolveAiProfileMetadataFields(deps, input, existing) {
372
369
  provider: resolveOptionalProfileField(input.provider, existing?.provider, inferredDefaults.provider) ?? null,
373
370
  model: resolveOptionalProfileField(input.model, existing?.model, inferredDefaults.model) ?? null,
374
371
  surfaceType: effectiveSurfaceType,
375
- surfaceTypeProvided: surfaceTypeInput !== undefined && !manuallyOverridden,
372
+ surfaceTypeProvided: surfaceTypeInput !== undefined && (!manuallyOverridden || trustedSurfaceTypeProvided),
376
373
  };
377
374
  }
378
375
  function applyAiProfileMetadataDefaults(record) {
@@ -458,7 +455,7 @@ function backfillMissingAiProfileAvatarFromAssetIndex(deps, row) {
458
455
  return;
459
456
  if (normalizeNullableIsoString(row.avatar_updated_at))
460
457
  return;
461
- const avatarPrefix = `workspaces/${workspaceId}/assets/images/ai-profiles/${id}/avatar/`;
458
+ const avatarPrefixes = buildAiProfileAvatarStoragePrefixes({ workspaceId, profileId: id });
462
459
  try {
463
460
  const latestCropped = deps.db.prepare(`
464
461
  SELECT storage_key, updated_at, created_at
@@ -466,7 +463,7 @@ function backfillMissingAiProfileAvatarFromAssetIndex(deps, row) {
466
463
  WHERE tenant_id = ?
467
464
  AND workspace_id = ?
468
465
  AND deleted_at IS NULL
469
- AND storage_key LIKE ?
466
+ AND (storage_key LIKE ? OR storage_key LIKE ?)
470
467
  AND (
471
468
  LOWER(original_filename) LIKE 'cropped-%'
472
469
  OR LOWER(logical_name) = 'ai profile avatar display'
@@ -482,7 +479,7 @@ function backfillMissingAiProfileAvatarFromAssetIndex(deps, row) {
482
479
  )
483
480
  ORDER BY COALESCE(updated_at, created_at) DESC, storage_key DESC
484
481
  LIMIT 1
485
- `).get(deps.tenantId, workspaceId, `${avatarPrefix}%`);
482
+ `).get(deps.tenantId, workspaceId, `${avatarPrefixes[0]}%`, `${avatarPrefixes[1]}%`);
486
483
  if (!latestCropped)
487
484
  return;
488
485
  const latestSource = deps.db.prepare(`
@@ -491,7 +488,7 @@ function backfillMissingAiProfileAvatarFromAssetIndex(deps, row) {
491
488
  WHERE tenant_id = ?
492
489
  AND workspace_id = ?
493
490
  AND deleted_at IS NULL
494
- AND storage_key LIKE ?
491
+ AND (storage_key LIKE ? OR storage_key LIKE ?)
495
492
  AND (
496
493
  LOWER(original_filename) LIKE 'source-%'
497
494
  OR LOWER(logical_name) = 'ai profile avatar source'
@@ -503,7 +500,7 @@ function backfillMissingAiProfileAvatarFromAssetIndex(deps, row) {
503
500
  )
504
501
  ORDER BY COALESCE(updated_at, created_at) DESC, storage_key DESC
505
502
  LIMIT 1
506
- `).get(deps.tenantId, workspaceId, `${avatarPrefix}%`);
503
+ `).get(deps.tenantId, workspaceId, `${avatarPrefixes[0]}%`, `${avatarPrefixes[1]}%`);
507
504
  const avatarStorageKey = String(latestCropped.storage_key || '').trim();
508
505
  if (!avatarStorageKey)
509
506
  return;
@@ -547,7 +544,7 @@ function hydrateAiProfileRecord(deps, row, diagnostics) {
547
544
  backfillMissingAiProfileAvatarFromDuplicate(deps, row);
548
545
  backfillMissingAiProfileAvatarFromAssetIndex(deps, row);
549
546
  const record = deps.aiProfileRowToRecord(row);
550
- const hydrated = applyAiProfileMetadataDefaults(record);
547
+ let hydrated = applyAiProfileMetadataDefaults(record);
551
548
  const metadataChanged = record.description !== hydrated.description
552
549
  || record.role !== hydrated.role
553
550
  || record.provider !== hydrated.provider
@@ -565,6 +562,23 @@ function hydrateAiProfileRecord(deps, row, diagnostics) {
565
562
  diagnostics.metadataBackfillCount = (diagnostics.metadataBackfillCount || 0) + 1;
566
563
  }
567
564
  }
565
+ const taskforceAgentId = getTaskforceManagedAgentId(hydrated);
566
+ const canonicalAgentColor = taskforceAgentId ? assignedAiProfileColor(taskforceAgentId) : null;
567
+ if (canonicalAgentColor && hydrated.colorSource !== 'user_override'
568
+ && (normalizeAiProfileColor(hydrated.color) !== canonicalAgentColor || hydrated.colorSource !== 'assigned_default')) {
569
+ const colorUpdatedAt = hydrated.colorUpdatedAt ?? hydrated.updatedAt;
570
+ deps.db.prepare(`
571
+ UPDATE ai_profiles
572
+ SET color = ?, color_source = 'assigned_default', color_updated_at = ?
573
+ WHERE tenant_id = ? AND id = ?
574
+ `).run(canonicalAgentColor, colorUpdatedAt, deps.tenantId, hydrated.id);
575
+ hydrated = {
576
+ ...hydrated,
577
+ color: canonicalAgentColor,
578
+ colorSource: 'assigned_default',
579
+ colorUpdatedAt,
580
+ };
581
+ }
568
582
  return hydrated;
569
583
  }
570
584
  export function listAiProfilesService(deps, workspaceId, options) {
@@ -579,6 +593,8 @@ export function listAiProfilesService(deps, workspaceId, options) {
579
593
  username,
580
594
  icon,
581
595
  color,
596
+ color_source,
597
+ color_updated_at,
582
598
  avatar_url,
583
599
  avatar_source_url,
584
600
  avatar_revision,
@@ -748,7 +764,40 @@ export function upsertAiProfileForSyncService(deps, profile) {
748
764
  const mergedName = metadataSourceProfile?.name ?? deps.normalizeAiProfileName(profile.name);
749
765
  const mergedUsername = metadataSourceProfile?.username ?? deps.normalizeAiProfileUsername(profile.username, profile.name);
750
766
  const mergedIcon = metadataSourceProfile?.icon ?? deps.normalizeAiProfileIcon(profile.icon);
751
- const mergedColor = metadataSourceProfile?.color ?? deps.normalizeAiProfileColor(profile.color);
767
+ const incomingColor = normalizeAiProfileColor(profile.color);
768
+ const incomingColorSource = parseAiProfileColorSource(profile.colorSource) ?? 'legacy';
769
+ const incomingColorUpdatedAtProvided = Object.prototype.hasOwnProperty.call(profile, 'colorUpdatedAt');
770
+ const incomingColorUpdatedAt = normalizeNullableIsoString(profile.colorUpdatedAt);
771
+ const existingColorSource = parseAiProfileColorSource(existingProfile?.colorSource) ?? 'legacy';
772
+ const existingColorUpdatedAt = normalizeNullableIsoString(existingProfile?.colorUpdatedAt) ?? existingUpdatedAt;
773
+ const existingRawColor = String(existingProfile?.color || '').trim();
774
+ const incomingColorWins = !existingRow
775
+ || Boolean(incomingColorUpdatedAtProvided && incomingColorUpdatedAt && incomingColor && (compareAiProfileColorSyncCandidates({ color: incomingColor, source: incomingColorSource, updatedAt: incomingColorUpdatedAt }, {
776
+ color: existingRawColor || assignedAiProfileColor(`${mergedName}:${mergedUsername}`),
777
+ source: existingColorSource,
778
+ updatedAt: existingColorUpdatedAt,
779
+ }) > 0));
780
+ let mergedColor = incomingColorWins && incomingColor
781
+ ? incomingColor
782
+ : existingRawColor || assignedAiProfileColor(`${mergedName}:${mergedUsername}`);
783
+ let mergedColorSource = !existingRow && !incomingColor
784
+ ? 'assigned_default'
785
+ : incomingColorWins && incomingColor
786
+ ? (!incomingColorUpdatedAt ? 'assigned_default' : incomingColorSource)
787
+ : existingColorSource;
788
+ const mergedColorUpdatedAt = incomingColorWins && incomingColor
789
+ ? (incomingColorUpdatedAt ?? normalizedUpdatedAt)
790
+ : existingColorUpdatedAt;
791
+ const productDefaultColor = resolveAiProfileProductDefaultColor({
792
+ name: mergedName,
793
+ username: mergedUsername,
794
+ surfaceType: resolvedMetadata.surfaceType,
795
+ providerMetadata: metadataSourceProfile?.providerMetadata ?? existingProfile?.providerMetadata ?? null,
796
+ });
797
+ if (productDefaultColor && mergedColorSource !== 'user_override') {
798
+ mergedColor = productDefaultColor;
799
+ mergedColorSource = 'product_default';
800
+ }
752
801
  const existingAvatarUrl = normalizeAiProfileAvatarUrl(existingProfile?.avatarUrl);
753
802
  const existingAvatarSourceUrl = normalizeAiProfileAvatarUrl(existingProfile?.avatarSourceUrl);
754
803
  const incomingAvatarUrl = incomingAvatarUrlProvided ? normalizeAiProfileAvatarUrl(profile.avatarUrl) : null;
@@ -807,14 +856,15 @@ export function upsertAiProfileForSyncService(deps, profile) {
807
856
  const mergedLastActiveAt = compareIsoStrings(normalizedLastActiveAt, existingLastActiveAt) > 0
808
857
  ? normalizedLastActiveAt
809
858
  : existingLastActiveAt;
810
- deps.db.prepare(`
859
+ return deps.db.transaction(() => {
860
+ deps.db.prepare(`
811
861
  INSERT INTO ai_profiles (
812
- id, tenant_id, workspace_id, profile_token, name, username, icon, color,
862
+ id, tenant_id, workspace_id, profile_token, name, username, icon, color, color_source, color_updated_at,
813
863
  avatar_url, avatar_source_url, avatar_revision, avatar_updated_at,
814
864
  description, role, provider, model, surface_type, seat_scope, provider_metadata_json,
815
865
  archived_at, archived_by, archived_reason, merged_into_profile_id,
816
866
  roster_state_updated_at, created_at, updated_at, last_active_at
817
- ) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)
867
+ ) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)
818
868
  ON CONFLICT(id) DO UPDATE SET
819
869
  workspace_id = excluded.workspace_id,
820
870
  profile_token = excluded.profile_token,
@@ -822,6 +872,8 @@ export function upsertAiProfileForSyncService(deps, profile) {
822
872
  username = excluded.username,
823
873
  icon = excluded.icon,
824
874
  color = excluded.color,
875
+ color_source = excluded.color_source,
876
+ color_updated_at = excluded.color_updated_at,
825
877
  avatar_url = excluded.avatar_url,
826
878
  avatar_source_url = excluded.avatar_source_url,
827
879
  avatar_revision = excluded.avatar_revision,
@@ -841,17 +893,64 @@ export function upsertAiProfileForSyncService(deps, profile) {
841
893
  created_at = excluded.created_at,
842
894
  updated_at = excluded.updated_at,
843
895
  last_active_at = excluded.last_active_at
844
- `).run(profileId, deps.tenantId, normalizedWorkspaceId, mergedProfileToken, mergedName, mergedUsername, mergedIcon, mergedColor, mergedAvatarUrl, mergedAvatarSourceUrl, mergedAvatarRevision, mergedAvatarUpdatedAt, resolvedMetadata.description, resolvedMetadata.role, resolvedMetadata.provider, resolvedMetadata.model, resolvedMetadata.surfaceType, resolvedSeatScope.seatScope, mergedProviderMetadata, mergedArchivedAt, mergedArchivedBy, mergedArchivedReason, mergedMergedIntoProfileId, mergedRosterStateUpdatedAt, mergedCreatedAt, mergedUpdatedAt, mergedLastActiveAt);
845
- const refreshed = deps.db.prepare(`
896
+ `).run(profileId, deps.tenantId, normalizedWorkspaceId, mergedProfileToken, mergedName, mergedUsername, mergedIcon, mergedColor, mergedColorSource, mergedColorUpdatedAt, mergedAvatarUrl, mergedAvatarSourceUrl, mergedAvatarRevision, mergedAvatarUpdatedAt, resolvedMetadata.description, resolvedMetadata.role, resolvedMetadata.provider, resolvedMetadata.model, resolvedMetadata.surfaceType, resolvedSeatScope.seatScope, mergedProviderMetadata, mergedArchivedAt, mergedArchivedBy, mergedArchivedReason, mergedMergedIntoProfileId, mergedRosterStateUpdatedAt, mergedCreatedAt, mergedUpdatedAt, mergedLastActiveAt);
897
+ if (incomingMetadataWins) {
898
+ reconcileSyncedAiProfileConnectionBindings(deps, normalizedWorkspaceId, profileId, mergedProviderMetadata);
899
+ }
900
+ const refreshed = deps.db.prepare(`
846
901
  SELECT *
847
902
  FROM ai_profiles
848
903
  WHERE tenant_id = ? AND id = ?
849
904
  LIMIT 1
850
905
  `).get(deps.tenantId, profileId);
851
- if (!refreshed) {
852
- throw deps.createRuleError('Failed to upsert AI profile during sync', 500, 'AI_PROFILE_SYNC_UPSERT_FAILED');
906
+ if (!refreshed) {
907
+ throw deps.createRuleError('Failed to upsert AI profile during sync', 500, 'AI_PROFILE_SYNC_UPSERT_FAILED');
908
+ }
909
+ return hydrateAiProfileRecord(deps, refreshed);
910
+ })();
911
+ }
912
+ function reconcileSyncedAiProfileConnectionBindings(deps, workspaceId, profileId, providerMetadataJson) {
913
+ let metadata = {};
914
+ if (providerMetadataJson) {
915
+ try {
916
+ const parsed = JSON.parse(providerMetadataJson);
917
+ if (parsed && typeof parsed === 'object' && !Array.isArray(parsed))
918
+ metadata = parsed;
919
+ }
920
+ catch {
921
+ // The profile row remains authoritative even when legacy metadata is malformed.
922
+ }
923
+ }
924
+ const connection = metadata.connection && typeof metadata.connection === 'object' && !Array.isArray(metadata.connection)
925
+ ? metadata.connection
926
+ : {};
927
+ const bindingIds = Array.isArray(connection.bindingIds)
928
+ ? Array.from(new Set(connection.bindingIds
929
+ .map((value) => String(value || '').trim())
930
+ .filter((value) => value.length > 0 && value.length <= 128 && /^[A-Za-z0-9._:-]+$/.test(value))))
931
+ .sort()
932
+ : [];
933
+ const clientId = String(connection.clientId || '').trim() || null;
934
+ if (bindingIds.length === 0) {
935
+ deps.db.prepare(`DELETE FROM ai_profile_connection_bindings WHERE tenant_id = ? AND workspace_id = ? AND profile_id = ?`)
936
+ .run(deps.tenantId, workspaceId, profileId);
937
+ return;
938
+ }
939
+ const placeholders = bindingIds.map(() => '?').join(', ');
940
+ deps.db.prepare(`DELETE FROM ai_profile_connection_bindings
941
+ WHERE tenant_id = ? AND workspace_id = ? AND profile_id = ? AND connection_id NOT IN (${placeholders})`)
942
+ .run(deps.tenantId, workspaceId, profileId, ...bindingIds);
943
+ const now = new Date().toISOString();
944
+ const upsert = deps.db.prepare(`INSERT INTO ai_profile_connection_bindings
945
+ (tenant_id, workspace_id, connection_id, profile_id, client_id, created_at, updated_at)
946
+ VALUES (?, ?, ?, ?, ?, ?, ?)
947
+ ON CONFLICT (tenant_id, workspace_id, connection_id) DO UPDATE SET
948
+ profile_id = excluded.profile_id,
949
+ client_id = excluded.client_id,
950
+ updated_at = excluded.updated_at`);
951
+ for (const bindingId of bindingIds) {
952
+ upsert.run(deps.tenantId, workspaceId, bindingId, profileId, clientId, now, now);
853
953
  }
854
- return hydrateAiProfileRecord(deps, refreshed);
855
954
  }
856
955
  export function mergeAiProfilesService(deps, input) {
857
956
  const normalizedWorkspaceId = deps.normalizeWorkspaceId(input.workspaceId);
@@ -885,40 +984,97 @@ export function mergeAiProfilesService(deps, input) {
885
984
  });
886
985
  }
887
986
  const mergedSeatScope = resolveAiProfileSeatScope(deps, mergeRecord.seatScope, keepRecord);
987
+ const keepMetadata = keepRecord.providerMetadata && typeof keepRecord.providerMetadata === 'object' ? keepRecord.providerMetadata : {};
988
+ const mergeMetadata = mergeRecord.providerMetadata && typeof mergeRecord.providerMetadata === 'object' ? mergeRecord.providerMetadata : {};
989
+ const keepConnection = keepMetadata.connection && typeof keepMetadata.connection === 'object' && !Array.isArray(keepMetadata.connection)
990
+ ? keepMetadata.connection : {};
991
+ const mergeConnection = mergeMetadata.connection && typeof mergeMetadata.connection === 'object' && !Array.isArray(mergeMetadata.connection)
992
+ ? mergeMetadata.connection : {};
888
993
  const mergedAt = new Date().toISOString();
889
- const doMerge = deps.db.transaction(() => {
890
- deps.db.prepare(`
891
- UPDATE tasks SET assignee = ?, updated_at = ?
892
- WHERE tenant_id = ? AND workspace_id = ? AND assignee = ?
893
- `).run(keepId, mergedAt, deps.tenantId, normalizedWorkspaceId, mergeId);
894
- deps.db.prepare(`
895
- UPDATE tasks SET created_by = ?, updated_at = ?
896
- WHERE tenant_id = ? AND workspace_id = ? AND created_by = ?
897
- `).run(keepId, mergedAt, deps.tenantId, normalizedWorkspaceId, mergeId);
898
- deps.db.prepare(`
899
- UPDATE ai_profiles
900
- SET seat_scope = ?,
901
- avatar_url = COALESCE(avatar_url, ?),
902
- avatar_source_url = COALESCE(avatar_source_url, ?),
903
- updated_at = ?
904
- WHERE tenant_id = ? AND workspace_id = ? AND id = ?
905
- `).run(mergedSeatScope.seatScope, normalizeAiProfileAvatarUrl(mergeRecord.avatarUrl), normalizeAiProfileAvatarUrl(mergeRecord.avatarSourceUrl), mergedAt, deps.tenantId, normalizedWorkspaceId, keepId);
906
- deps.db.prepare(`
907
- UPDATE comments SET author = ?
908
- WHERE tenant_id = ? AND workspace_id = ? AND author = ?
909
- `).run(keepId, deps.tenantId, normalizedWorkspaceId, mergeId);
910
- deps.db.prepare(`
911
- UPDATE ai_profiles
912
- SET archived_at = ?,
913
- archived_by = ?,
914
- archived_reason = ?,
915
- merged_into_profile_id = ?,
916
- roster_state_updated_at = ?,
917
- updated_at = ?
918
- WHERE tenant_id = ? AND workspace_id = ? AND id = ?
919
- `).run(mergedAt, keepId, 'merged_duplicate', keepId, mergedAt, mergedAt, deps.tenantId, normalizedWorkspaceId, mergeId);
994
+ const lockTaskIds = deps.db.prepare(`
995
+ SELECT id FROM tasks
996
+ WHERE tenant_id = ? AND workspace_id = ?
997
+ ORDER BY id
998
+ `).all(deps.tenantId, normalizedWorkspaceId)
999
+ .map((row) => String(row.id || '').trim()).filter(Boolean);
1000
+ deps.runTaskMetadataOwnershipTransaction({
1001
+ workspaceId: normalizedWorkspaceId,
1002
+ taskIds: lockTaskIds,
1003
+ updatedAt: mergedAt,
1004
+ apply: (protectedTaskIds) => {
1005
+ const affectedTaskIds = deps.db.prepare(`
1006
+ SELECT id FROM tasks
1007
+ WHERE tenant_id = ? AND workspace_id = ? AND (assignee = ? OR created_by = ?)
1008
+ ORDER BY id
1009
+ `).all(deps.tenantId, normalizedWorkspaceId, mergeId, mergeId)
1010
+ .map((row) => String(row.id || '').trim()).filter(Boolean);
1011
+ const conflicts = affectedTaskIds.filter((taskId) => protectedTaskIds.has(taskId));
1012
+ if (conflicts.length > 0) {
1013
+ throw deps.createRuleError('This task metadata is managed by durable sync. Retry the edit from a durable-sync-aware task editor.', 409, 'TASK_METADATA_DURABLE_SYNC_REQUIRED', { taskIds: conflicts });
1014
+ }
1015
+ const doMerge = deps.db.transaction(() => {
1016
+ if (affectedTaskIds.length > 0) {
1017
+ const taskPlaceholders = affectedTaskIds.map(() => '?').join(',');
1018
+ deps.db.prepare(`
1019
+ UPDATE tasks SET assignee = ?, updated_at = ?
1020
+ WHERE tenant_id = ? AND workspace_id = ? AND assignee = ?
1021
+ AND id IN (${taskPlaceholders})
1022
+ `).run(keepId, mergedAt, deps.tenantId, normalizedWorkspaceId, mergeId, ...affectedTaskIds);
1023
+ deps.db.prepare(`
1024
+ UPDATE tasks SET created_by = ?, updated_at = ?
1025
+ WHERE tenant_id = ? AND workspace_id = ? AND created_by = ?
1026
+ AND id IN (${taskPlaceholders})
1027
+ `).run(keepId, mergedAt, deps.tenantId, normalizedWorkspaceId, mergeId, ...affectedTaskIds);
1028
+ }
1029
+ deps.db.prepare(`
1030
+ UPDATE ai_profile_connection_bindings SET profile_id = ?, updated_at = ?
1031
+ WHERE tenant_id = ? AND workspace_id = ? AND profile_id = ?
1032
+ `).run(keepId, mergedAt, deps.tenantId, normalizedWorkspaceId, mergeId);
1033
+ const canonicalBindingIds = deps.db.prepare(`SELECT connection_id FROM ai_profile_connection_bindings WHERE tenant_id = ? AND workspace_id = ? AND profile_id = ? ORDER BY connection_id`)
1034
+ .all(deps.tenantId, normalizedWorkspaceId, keepId)
1035
+ .map((row) => String(row.connection_id || '').trim()).filter(Boolean);
1036
+ const mergedBindingIds = Array.from(new Set([
1037
+ ...(Array.isArray(keepConnection.bindingIds) ? keepConnection.bindingIds : []),
1038
+ ...(Array.isArray(mergeConnection.bindingIds) ? mergeConnection.bindingIds : []),
1039
+ ...canonicalBindingIds,
1040
+ ].map((value) => String(value || '').trim()).filter(Boolean)));
1041
+ const nextKeepConnection = {
1042
+ ...mergeConnection,
1043
+ ...keepConnection,
1044
+ ...(mergedBindingIds.length > 0 ? { bindingIds: mergedBindingIds } : {}),
1045
+ };
1046
+ const nextMergeConnection = { ...mergeConnection };
1047
+ delete nextMergeConnection.bindingIds;
1048
+ const nextKeepMetadata = { ...mergeMetadata, ...keepMetadata, connection: nextKeepConnection };
1049
+ const nextMergeMetadata = { ...mergeMetadata, connection: nextMergeConnection };
1050
+ deps.db.prepare(`
1051
+ UPDATE ai_profiles
1052
+ SET seat_scope = ?,
1053
+ avatar_url = COALESCE(avatar_url, ?),
1054
+ avatar_source_url = COALESCE(avatar_source_url, ?),
1055
+ provider_metadata_json = ?,
1056
+ updated_at = ?
1057
+ WHERE tenant_id = ? AND workspace_id = ? AND id = ?
1058
+ `).run(mergedSeatScope.seatScope, normalizeAiProfileAvatarUrl(mergeRecord.avatarUrl), normalizeAiProfileAvatarUrl(mergeRecord.avatarSourceUrl), JSON.stringify(nextKeepMetadata), mergedAt, deps.tenantId, normalizedWorkspaceId, keepId);
1059
+ deps.db.prepare(`
1060
+ UPDATE comments SET author = ?
1061
+ WHERE tenant_id = ? AND workspace_id = ? AND author = ?
1062
+ `).run(keepId, deps.tenantId, normalizedWorkspaceId, mergeId);
1063
+ deps.db.prepare(`
1064
+ UPDATE ai_profiles
1065
+ SET archived_at = ?,
1066
+ archived_by = ?,
1067
+ archived_reason = ?,
1068
+ merged_into_profile_id = ?,
1069
+ provider_metadata_json = ?,
1070
+ roster_state_updated_at = ?,
1071
+ updated_at = ?
1072
+ WHERE tenant_id = ? AND workspace_id = ? AND id = ?
1073
+ `).run(mergedAt, keepId, 'merged_duplicate', keepId, JSON.stringify(nextMergeMetadata), mergedAt, mergedAt, deps.tenantId, normalizedWorkspaceId, mergeId);
1074
+ });
1075
+ return doMerge();
1076
+ },
920
1077
  });
921
- doMerge();
922
1078
  const refreshed = deps.db.prepare(`
923
1079
  SELECT * FROM ai_profiles WHERE tenant_id = ? AND id = ? LIMIT 1
924
1080
  `).get(deps.tenantId, keepId);
@@ -994,6 +1150,56 @@ export function updateAiProfileAvatarService(deps, input) {
994
1150
  }
995
1151
  return hydrateAiProfileRecord(deps, refreshed);
996
1152
  }
1153
+ export function updateAiProfileColorGroupService(deps, input) {
1154
+ const workspaceId = deps.normalizeWorkspaceId(input.workspaceId);
1155
+ const profileIds = Array.from(new Set((input.profileIds || []).map((id) => String(id || '').trim()).filter(Boolean)));
1156
+ if (!profileIds.length)
1157
+ throw deps.createRuleError('profileIds is required', 400, 'AI_PROFILE_IDS_REQUIRED');
1158
+ const profiles = deps.db.prepare(`
1159
+ SELECT * FROM ai_profiles
1160
+ WHERE tenant_id = ? AND workspace_id = ? AND archived_at IS NULL
1161
+ `).all(deps.tenantId, workspaceId);
1162
+ const selected = profileIds.map((id) => profiles.find((row) => String(row.id) === id)).filter(Boolean);
1163
+ if (selected.length !== profileIds.length)
1164
+ throw deps.createRuleError('One or more AI profiles were not found.', 404, 'AI_PROFILE_NOT_FOUND');
1165
+ const records = selected.map((row) => deps.aiProfileRowToRecord(row));
1166
+ if (records.some(isTaskforceManagedAiProfile) && input.allowTaskforceManaged !== true) {
1167
+ throw deps.createRuleError('Taskforce-managed agent colors require a trusted workspace color editor.', 409, 'AI_PROFILE_COLOR_MANAGED');
1168
+ }
1169
+ const resetColors = input.reset === true ? new Map(records.map((profile) => {
1170
+ const productColor = resolveAiProfileProductDefaultColor(profile);
1171
+ const taskforceMetadata = profile.providerMetadata?.taskforce;
1172
+ const taskforceAgentId = taskforceMetadata && typeof taskforceMetadata === 'object' && !Array.isArray(taskforceMetadata)
1173
+ ? String(taskforceMetadata.taskforceAgentId || '').trim()
1174
+ : '';
1175
+ return [profile.id, {
1176
+ color: taskforceAgentId
1177
+ ? assignedAiProfileColor(taskforceAgentId)
1178
+ : productColor || assignedAiProfileColor(`${profile.name}:${profile.username}`),
1179
+ source: taskforceAgentId ? 'assigned_default' : (productColor ? 'product_default' : 'assigned_default'),
1180
+ }];
1181
+ })) : null;
1182
+ const requestedColor = input.reset === true ? null : normalizeAiProfileColor(input.color);
1183
+ if (input.reset !== true && !requestedColor) {
1184
+ throw deps.createRuleError('color must be a Taskforce palette token or hex color.', 400, 'AI_PROFILE_COLOR_INVALID');
1185
+ }
1186
+ const now = new Date().toISOString();
1187
+ const run = deps.db.transaction(() => {
1188
+ for (const id of profileIds) {
1189
+ const resetColor = resetColors?.get(id);
1190
+ deps.db.prepare(`
1191
+ UPDATE ai_profiles SET color = ?, color_source = ?, color_updated_at = ?
1192
+ WHERE tenant_id = ? AND workspace_id = ? AND id = ?
1193
+ `).run(resetColor?.color ?? requestedColor, resetColor?.source ?? 'user_override', now, deps.tenantId, workspaceId, id);
1194
+ }
1195
+ });
1196
+ run();
1197
+ return profileIds.map((id) => {
1198
+ const row = deps.db.prepare(`SELECT * FROM ai_profiles WHERE tenant_id = ? AND workspace_id = ? AND id = ?`)
1199
+ .get(deps.tenantId, workspaceId, id);
1200
+ return hydrateAiProfileRecord(deps, row);
1201
+ });
1202
+ }
997
1203
  export function updateAiProfileSurfaceTypeService(deps, input) {
998
1204
  const normalizedWorkspaceId = deps.normalizeWorkspaceId(input.workspaceId);
999
1205
  const profileId = String(input.profileId || '').trim();
@@ -1034,6 +1240,137 @@ export function updateAiProfileSurfaceTypeService(deps, input) {
1034
1240
  }
1035
1241
  return hydrateAiProfileRecord(deps, refreshed);
1036
1242
  }
1243
+ export function updateAiProfileProviderMetadataService(deps, input) {
1244
+ const normalizedWorkspaceId = deps.normalizeWorkspaceId(input.workspaceId);
1245
+ const profileId = String(input.profileId || '').trim();
1246
+ if (!profileId)
1247
+ throw deps.createRuleError('profileId is required', 400, 'AI_PROFILE_ID_REQUIRED');
1248
+ const existing = deps.db.prepare(`
1249
+ SELECT *
1250
+ FROM ai_profiles
1251
+ WHERE tenant_id = ? AND workspace_id = ? AND id = ? AND archived_at IS NULL
1252
+ LIMIT 1
1253
+ `).get(deps.tenantId, normalizedWorkspaceId, profileId);
1254
+ if (!existing) {
1255
+ throw deps.createRuleError(`Profile ${profileId} not found`, 404, 'AI_PROFILE_NOT_FOUND');
1256
+ }
1257
+ const providerMetadata = input.providerMetadata && typeof input.providerMetadata === 'object' && !Array.isArray(input.providerMetadata)
1258
+ ? input.providerMetadata
1259
+ : null;
1260
+ const updatedAt = new Date().toISOString();
1261
+ deps.db.prepare(`
1262
+ UPDATE ai_profiles
1263
+ SET provider_metadata_json = ?,
1264
+ updated_at = ?
1265
+ WHERE tenant_id = ? AND workspace_id = ? AND id = ?
1266
+ `).run(providerMetadata ? JSON.stringify(providerMetadata) : null, updatedAt, deps.tenantId, normalizedWorkspaceId, profileId);
1267
+ const refreshed = deps.db.prepare(`
1268
+ SELECT *
1269
+ FROM ai_profiles
1270
+ WHERE tenant_id = ? AND workspace_id = ? AND id = ?
1271
+ LIMIT 1
1272
+ `).get(deps.tenantId, normalizedWorkspaceId, profileId);
1273
+ if (!refreshed) {
1274
+ throw deps.createRuleError('Failed to update AI profile provider metadata', 500, 'AI_PROFILE_METADATA_UPDATE_FAILED');
1275
+ }
1276
+ return hydrateAiProfileRecord(deps, refreshed);
1277
+ }
1278
+ function normalizeConnectionBindingId(deps, value) {
1279
+ const normalized = String(value || '').trim();
1280
+ if (!normalized || normalized.length > 128 || !/^[A-Za-z0-9._:-]+$/.test(normalized)) {
1281
+ throw deps.createRuleError('A valid MCP connection ID is required', 400, 'AI_PROFILE_CONNECTION_ID_INVALID');
1282
+ }
1283
+ return normalized;
1284
+ }
1285
+ function parseProviderMetadataRow(row) {
1286
+ if (typeof row.provider_metadata_json !== 'string' || !row.provider_metadata_json.trim())
1287
+ return {};
1288
+ try {
1289
+ const parsed = JSON.parse(row.provider_metadata_json);
1290
+ return parsed && typeof parsed === 'object' && !Array.isArray(parsed) ? parsed : {};
1291
+ }
1292
+ catch {
1293
+ return {};
1294
+ }
1295
+ }
1296
+ export function bindAiProfileConnectionService(deps, input) {
1297
+ const workspaceId = deps.normalizeWorkspaceId(input.workspaceId);
1298
+ const profileId = String(input.profileId || '').trim();
1299
+ const connectionId = normalizeConnectionBindingId(deps, input.connectionId);
1300
+ const clientId = String(input.clientId || '').trim() || null;
1301
+ return deps.db.transaction(() => {
1302
+ const target = deps.db.prepare(`SELECT * FROM ai_profiles WHERE tenant_id = ? AND workspace_id = ? AND id = ? AND archived_at IS NULL LIMIT 1`)
1303
+ .get(deps.tenantId, workspaceId, profileId);
1304
+ if (!target)
1305
+ throw deps.createRuleError(`Profile ${profileId} not found`, 404, 'AI_PROFILE_NOT_FOUND');
1306
+ const now = new Date().toISOString();
1307
+ deps.db.prepare(`INSERT INTO ai_profile_connection_bindings (tenant_id, workspace_id, connection_id, profile_id, client_id, created_at, updated_at)
1308
+ VALUES (?, ?, ?, ?, ?, ?, ?)
1309
+ ON CONFLICT (tenant_id, workspace_id, connection_id) DO UPDATE SET profile_id = excluded.profile_id, client_id = excluded.client_id, updated_at = excluded.updated_at`)
1310
+ .run(deps.tenantId, workspaceId, connectionId, profileId, clientId, now, now);
1311
+ const rows = deps.db.prepare(`SELECT * FROM ai_profiles WHERE tenant_id = ? AND workspace_id = ?`).all(deps.tenantId, workspaceId);
1312
+ for (const row of rows) {
1313
+ const metadata = parseProviderMetadataRow(row);
1314
+ const connection = metadata.connection && typeof metadata.connection === 'object' && !Array.isArray(metadata.connection)
1315
+ ? metadata.connection
1316
+ : {};
1317
+ const bindingIds = Array.isArray(connection.bindingIds)
1318
+ ? connection.bindingIds.map((value) => String(value || '').trim()).filter(Boolean)
1319
+ : [];
1320
+ const isTarget = String(row.id) === profileId;
1321
+ const nextBindingIds = isTarget
1322
+ ? Array.from(new Set([...bindingIds, connectionId]))
1323
+ : bindingIds.filter((value) => value !== connectionId);
1324
+ const nextConnection = { ...connection };
1325
+ if (isTarget && clientId)
1326
+ nextConnection.clientId = clientId;
1327
+ if (nextBindingIds.length > 0)
1328
+ nextConnection.bindingIds = nextBindingIds;
1329
+ else
1330
+ delete nextConnection.bindingIds;
1331
+ const changed = JSON.stringify(connection) !== JSON.stringify(nextConnection);
1332
+ if (!changed)
1333
+ continue;
1334
+ deps.db.prepare(`UPDATE ai_profiles SET provider_metadata_json = ?, updated_at = ? WHERE tenant_id = ? AND workspace_id = ? AND id = ?`)
1335
+ .run(JSON.stringify({ ...metadata, connection: nextConnection }), now, deps.tenantId, workspaceId, row.id);
1336
+ }
1337
+ const refreshed = deps.db.prepare(`SELECT * FROM ai_profiles WHERE tenant_id = ? AND workspace_id = ? AND id = ? LIMIT 1`)
1338
+ .get(deps.tenantId, workspaceId, profileId);
1339
+ if (!refreshed)
1340
+ throw deps.createRuleError('Failed to bind MCP connection', 500, 'AI_PROFILE_CONNECTION_BIND_FAILED');
1341
+ return hydrateAiProfileRecord(deps, refreshed);
1342
+ })();
1343
+ }
1344
+ export function getAiProfileByConnectionService(deps, input) {
1345
+ const workspaceId = deps.normalizeWorkspaceId(input.workspaceId);
1346
+ const connectionId = normalizeConnectionBindingId(deps, input.connectionId);
1347
+ const binding = deps.db.prepare(`SELECT p.* FROM ai_profile_connection_bindings b JOIN ai_profiles p ON p.tenant_id = b.tenant_id AND p.workspace_id = b.workspace_id AND p.id = b.profile_id
1348
+ WHERE b.tenant_id = ? AND b.workspace_id = ? AND b.connection_id = ? LIMIT 1`)
1349
+ .get(deps.tenantId, workspaceId, connectionId);
1350
+ if (binding) {
1351
+ const record = hydrateAiProfileRecord(deps, binding);
1352
+ return input.seatScope !== undefined && (record.seatScope ?? null) !== input.seatScope ? null : record;
1353
+ }
1354
+ const legacyRows = deps.db.prepare(`SELECT * FROM ai_profiles WHERE tenant_id = ? AND workspace_id = ?`).all(deps.tenantId, workspaceId)
1355
+ .filter((row) => {
1356
+ const record = hydrateAiProfileRecord(deps, row);
1357
+ if (input.seatScope !== undefined && (record.seatScope ?? null) !== input.seatScope)
1358
+ return false;
1359
+ const connection = parseProviderMetadataRow(row).connection;
1360
+ return Array.isArray(connection?.bindingIds) && connection.bindingIds.includes(connectionId);
1361
+ });
1362
+ if (legacyRows.length > 1) {
1363
+ throw deps.createRuleError('This MCP connection is bound to multiple AI profiles. Merge the duplicates or reconnect with a profileToken.', 409, 'AI_PROFILE_BINDING_AMBIGUOUS', {
1364
+ workspaceId, profileIds: legacyRows.map((row) => String(row.id)),
1365
+ });
1366
+ }
1367
+ if (legacyRows.length === 0)
1368
+ return null;
1369
+ const record = hydrateAiProfileRecord(deps, legacyRows[0]);
1370
+ if (!record.archivedAt)
1371
+ bindAiProfileConnectionService(deps, { workspaceId, profileId: record.id, connectionId });
1372
+ return record;
1373
+ }
1037
1374
  export function archiveAiProfileService(deps, input) {
1038
1375
  const normalizedWorkspaceId = deps.normalizeWorkspaceId(input.workspaceId);
1039
1376
  const profileId = String(input.profileId || '').trim();
@@ -1092,6 +1429,29 @@ export function resolveAiProfileService(deps, input, options) {
1092
1429
  const profileToken = String(input.profileToken || '').trim();
1093
1430
  const now = new Date().toISOString();
1094
1431
  const trustedSeatScope = normalizeAiProfileSeatScopeInput(deps, options?.trustedSeatScope);
1432
+ const resolveExistingColor = (existing) => {
1433
+ if (isTaskforceManagedAiProfile(existing)) {
1434
+ return { color: existing.color, source: existing.colorSource ?? 'legacy', updatedAt: existing.colorUpdatedAt ?? existing.updatedAt };
1435
+ }
1436
+ if (existing.colorSource === 'user_override') {
1437
+ return { color: existing.color, source: existing.colorSource, updatedAt: existing.colorUpdatedAt ?? existing.updatedAt };
1438
+ }
1439
+ const productColor = normalizeAiProfileColor(options?.trustedSignatureColor);
1440
+ if (productColor) {
1441
+ const productColorAlreadyApplied = normalizeAiProfileColor(existing.color) === productColor
1442
+ && existing.colorSource === 'product_default';
1443
+ return productColorAlreadyApplied
1444
+ ? { color: existing.color, source: existing.colorSource, updatedAt: existing.colorUpdatedAt ?? existing.updatedAt }
1445
+ : { color: productColor, source: 'product_default', updatedAt: now };
1446
+ }
1447
+ if (input.color === undefined || input.color === null || String(input.color).trim() === '') {
1448
+ return { color: existing.color, source: existing.colorSource ?? 'legacy', updatedAt: existing.colorUpdatedAt ?? existing.updatedAt };
1449
+ }
1450
+ const color = normalizeAiProfileColor(input.color);
1451
+ if (!color)
1452
+ throw deps.createRuleError('color must be a Taskforce palette token or hex color.', 400, 'AI_PROFILE_COLOR_INVALID');
1453
+ return { color, source: 'agent_explicit', updatedAt: now };
1454
+ };
1095
1455
  if (profileToken) {
1096
1456
  const existingRows = deps.db.prepare(`
1097
1457
  SELECT *
@@ -1121,9 +1481,7 @@ export function resolveAiProfileService(deps, input, options) {
1121
1481
  const nextIcon = input.icon === undefined
1122
1482
  ? existingProfile.icon
1123
1483
  : deps.normalizeAiProfileIcon(input.icon);
1124
- const nextColor = input.color === undefined
1125
- ? existingProfile.color
1126
- : deps.normalizeAiProfileColor(input.color);
1484
+ const nextColor = resolveExistingColor(existingProfile);
1127
1485
  const nextDescription = normalizeOptionalProfileField(input.description);
1128
1486
  const nextRole = normalizeOptionalProfileField(input.role);
1129
1487
  const nextProvider = normalizeOptionalProfileField(input.provider);
@@ -1135,7 +1493,7 @@ export function resolveAiProfileService(deps, input, options) {
1135
1493
  provider: nextProvider,
1136
1494
  model: nextModel,
1137
1495
  surfaceType: input.surfaceType,
1138
- }, existingProfile);
1496
+ }, existingProfile, options?.trustedSurfaceType);
1139
1497
  const resolvedSeatScope = resolveTrustedAiProfileSeatScope(deps, trustedSeatScope, existingProfile);
1140
1498
  if (requiresCloudSeatReservation(existingProfile, resolvedSeatScope.seatScope)) {
1141
1499
  assertAiProfileSeatAvailable(deps, normalizedWorkspaceId);
@@ -1145,7 +1503,7 @@ export function resolveAiProfileService(deps, input, options) {
1145
1503
  SET name = ?,
1146
1504
  username = ?,
1147
1505
  icon = ?,
1148
- color = ?,
1506
+ color = ?, color_source = ?, color_updated_at = ?,
1149
1507
  description = COALESCE(?, description),
1150
1508
  role = COALESCE(?, role),
1151
1509
  provider = COALESCE(?, provider),
@@ -1166,7 +1524,7 @@ export function resolveAiProfileService(deps, input, options) {
1166
1524
  last_active_at = ?,
1167
1525
  updated_at = ?
1168
1526
  WHERE tenant_id = ? AND id = ?
1169
- `).run(nextName, nextUsername, nextIcon, nextColor, resolvedMetadata.description, resolvedMetadata.role, resolvedMetadata.provider, resolvedMetadata.model, resolvedMetadata.surfaceTypeProvided ? 1 : 0, resolvedMetadata.surfaceType, resolvedSeatScope.seatScopeProvided ? 1 : 0, resolvedSeatScope.seatScope, now, now, now, deps.tenantId, String(archivedRow.id || '').trim());
1527
+ `).run(nextName, nextUsername, nextIcon, nextColor.color, nextColor.source, nextColor.updatedAt, resolvedMetadata.description, resolvedMetadata.role, resolvedMetadata.provider, resolvedMetadata.model, resolvedMetadata.surfaceTypeProvided ? 1 : 0, resolvedMetadata.surfaceType, resolvedSeatScope.seatScopeProvided ? 1 : 0, resolvedSeatScope.seatScope, now, now, now, deps.tenantId, String(archivedRow.id || '').trim());
1170
1528
  const refreshed = deps.db.prepare(`
1171
1529
  SELECT *
1172
1530
  FROM ai_profiles
@@ -1192,9 +1550,7 @@ export function resolveAiProfileService(deps, input, options) {
1192
1550
  const nextIcon = input.icon === undefined
1193
1551
  ? existingProfile.icon
1194
1552
  : deps.normalizeAiProfileIcon(input.icon);
1195
- const nextColor = input.color === undefined
1196
- ? existingProfile.color
1197
- : deps.normalizeAiProfileColor(input.color);
1553
+ const nextColor = resolveExistingColor(existingProfile);
1198
1554
  const nextDescription = normalizeOptionalProfileField(input.description);
1199
1555
  const nextRole = normalizeOptionalProfileField(input.role);
1200
1556
  const nextProvider = normalizeOptionalProfileField(input.provider);
@@ -1206,7 +1562,7 @@ export function resolveAiProfileService(deps, input, options) {
1206
1562
  provider: nextProvider,
1207
1563
  model: nextModel,
1208
1564
  surfaceType: input.surfaceType,
1209
- }, existingProfile);
1565
+ }, existingProfile, options?.trustedSurfaceType);
1210
1566
  const resolvedSeatScope = resolveTrustedAiProfileSeatScope(deps, trustedSeatScope, existingProfile);
1211
1567
  if (requiresCloudSeatReservation(existingProfile, resolvedSeatScope.seatScope)) {
1212
1568
  assertAiProfileSeatAvailable(deps, normalizedWorkspaceId);
@@ -1216,7 +1572,7 @@ export function resolveAiProfileService(deps, input, options) {
1216
1572
  SET name = ?,
1217
1573
  username = ?,
1218
1574
  icon = ?,
1219
- color = ?,
1575
+ color = ?, color_source = ?, color_updated_at = ?,
1220
1576
  description = COALESCE(?, description),
1221
1577
  role = COALESCE(?, role),
1222
1578
  provider = COALESCE(?, provider),
@@ -1232,7 +1588,7 @@ export function resolveAiProfileService(deps, input, options) {
1232
1588
  last_active_at = ?,
1233
1589
  updated_at = ?
1234
1590
  WHERE tenant_id = ? AND id = ?
1235
- `).run(nextName, nextUsername, nextIcon, nextColor, resolvedMetadata.description, resolvedMetadata.role, resolvedMetadata.provider, resolvedMetadata.model, resolvedMetadata.surfaceTypeProvided ? 1 : 0, resolvedMetadata.surfaceType, resolvedSeatScope.seatScopeProvided ? 1 : 0, resolvedSeatScope.seatScope, now, now, deps.tenantId, String(existingRow.id || '').trim());
1591
+ `).run(nextName, nextUsername, nextIcon, nextColor.color, nextColor.source, nextColor.updatedAt, resolvedMetadata.description, resolvedMetadata.role, resolvedMetadata.provider, resolvedMetadata.model, resolvedMetadata.surfaceTypeProvided ? 1 : 0, resolvedMetadata.surfaceType, resolvedSeatScope.seatScopeProvided ? 1 : 0, resolvedSeatScope.seatScope, now, now, deps.tenantId, String(existingRow.id || '').trim());
1236
1592
  const refreshed = deps.db.prepare(`
1237
1593
  SELECT *
1238
1594
  FROM ai_profiles
@@ -1248,21 +1604,6 @@ export function resolveAiProfileService(deps, input, options) {
1248
1604
  };
1249
1605
  }
1250
1606
  }
1251
- const identityDescription = normalizeOptionalProfileField(input.description);
1252
- const identityRole = normalizeOptionalProfileField(input.role);
1253
- const inferredIdentity = inferAiProfileProviderModelDefaults(name);
1254
- const identityProvider = normalizeOptionalProfileField(input.provider)
1255
- ?? normalizeOptionalProfileField(inferredIdentity.provider);
1256
- const identityModel = normalizeOptionalProfileField(input.model)
1257
- ?? normalizeOptionalProfileField(inferredIdentity.model);
1258
- const identityMetadata = resolveAiProfileMetadataFields(deps, {
1259
- name,
1260
- description: identityDescription,
1261
- role: identityRole,
1262
- provider: identityProvider,
1263
- model: identityModel,
1264
- surfaceType: input.surfaceType,
1265
- }, null);
1266
1607
  const exactMatches = deps.db.prepare(`
1267
1608
  SELECT *
1268
1609
  FROM ai_profiles
@@ -1275,52 +1616,22 @@ export function resolveAiProfileService(deps, input, options) {
1275
1616
  )
1276
1617
  ORDER BY COALESCE(last_active_at, updated_at, created_at) DESC, id ASC
1277
1618
  `).all(deps.tenantId, normalizedWorkspaceId, name, deps.normalizeAiProfileUsername(undefined, name));
1278
- const exactMatch = selectAiProfileIdentityMatch(deps, exactMatches, identityMetadata, trustedSeatScope);
1619
+ const exactMatch = selectAiProfileIdentityMatch(deps, exactMatches, trustedSeatScope);
1620
+ if (exactMatch.matchCount > 1) {
1621
+ throw deps.createRuleError(`Multiple active AI profiles match "${name}". Bind with a profileToken or merge the duplicates before retrying.`, 409, 'AI_PROFILE_AMBIGUOUS', {
1622
+ workspaceId: normalizedWorkspaceId,
1623
+ candidates: buildAiProfileIdentityCandidates(deps, exactMatch.rows),
1624
+ recovery: 'Use a profileToken for the intended profile, or merge/archive duplicate profiles in AI Profile Manager.',
1625
+ });
1626
+ }
1279
1627
  if (exactMatch.row) {
1280
1628
  const canonicalId = String(exactMatch.row.id || '').trim();
1281
- const nextName = name;
1282
- const nextUsername = deps.normalizeAiProfileUsername(undefined, nextName);
1283
- const nextIcon = deps.normalizeAiProfileIcon(input.icon);
1284
- const nextColor = deps.normalizeAiProfileColor(input.color);
1285
- const nextDescription = normalizeOptionalProfileField(input.description);
1286
- const nextRole = normalizeOptionalProfileField(input.role);
1287
- const nextProvider = normalizeOptionalProfileField(input.provider);
1288
- const nextModel = normalizeOptionalProfileField(input.model);
1289
- const existingProfile = deps.aiProfileRowToRecord(exactMatch.row);
1290
- const resolvedMetadata = resolveAiProfileMetadataFields(deps, {
1291
- name: nextName,
1292
- description: nextDescription,
1293
- role: nextRole,
1294
- provider: nextProvider,
1295
- model: nextModel,
1296
- surfaceType: input.surfaceType,
1297
- }, existingProfile);
1298
- const resolvedSeatScope = resolveTrustedAiProfileSeatScope(deps, trustedSeatScope, existingProfile);
1299
- if (requiresCloudSeatReservation(existingProfile, resolvedSeatScope.seatScope)) {
1300
- assertAiProfileSeatAvailable(deps, normalizedWorkspaceId);
1301
- }
1302
1629
  deps.db.prepare(`
1303
1630
  UPDATE ai_profiles
1304
- SET name = ?,
1305
- username = ?,
1306
- icon = ?,
1307
- color = ?,
1308
- description = COALESCE(?, description),
1309
- role = COALESCE(?, role),
1310
- provider = COALESCE(?, provider),
1311
- model = COALESCE(?, model),
1312
- last_active_at = ?,
1313
- updated_at = ?,
1314
- surface_type = CASE
1315
- WHEN ? = 1 THEN ?
1316
- ELSE surface_type
1317
- END,
1318
- seat_scope = CASE
1319
- WHEN ? = 1 THEN ?
1320
- ELSE seat_scope
1321
- END
1631
+ SET last_active_at = ?,
1632
+ updated_at = ?
1322
1633
  WHERE tenant_id = ? AND id = ?
1323
- `).run(nextName, nextUsername, nextIcon, nextColor, resolvedMetadata.description, resolvedMetadata.role, resolvedMetadata.provider, resolvedMetadata.model, now, now, resolvedMetadata.surfaceTypeProvided ? 1 : 0, resolvedMetadata.surfaceType, resolvedSeatScope.seatScopeProvided ? 1 : 0, resolvedSeatScope.seatScope, deps.tenantId, canonicalId);
1634
+ `).run(now, now, deps.tenantId, canonicalId);
1324
1635
  const reused = deps.db.prepare(`
1325
1636
  SELECT *
1326
1637
  FROM ai_profiles
@@ -1332,13 +1643,7 @@ export function resolveAiProfileService(deps, input, options) {
1332
1643
  }
1333
1644
  return {
1334
1645
  created: false,
1335
- profile: hydrateAiProfileRecord(deps, reused),
1336
- ...(exactMatch.matchCount > 1 ? {
1337
- duplicateWarning: {
1338
- existingProfileId: canonicalId,
1339
- message: `Multiple profiles matched "${name}". Reused ${canonicalId}; merge the remaining duplicates.`
1340
- }
1341
- } : {})
1646
+ profile: hydrateAiProfileRecord(deps, reused)
1342
1647
  };
1343
1648
  }
1344
1649
  const archivedMatches = deps.db.prepare(`
@@ -1353,76 +1658,30 @@ export function resolveAiProfileService(deps, input, options) {
1353
1658
  )
1354
1659
  ORDER BY COALESCE(last_active_at, updated_at, created_at) DESC, id ASC
1355
1660
  `).all(deps.tenantId, normalizedWorkspaceId, name, deps.normalizeAiProfileUsername(undefined, name));
1356
- const archivedMatch = selectAiProfileIdentityMatch(deps, archivedMatches, identityMetadata, trustedSeatScope);
1357
- if (archivedMatch.row) {
1358
- const canonicalId = String(archivedMatch.row.id || '').trim();
1359
- const nextName = name;
1360
- const nextUsername = deps.normalizeAiProfileUsername(undefined, nextName);
1361
- const nextIcon = deps.normalizeAiProfileIcon(input.icon);
1362
- const nextColor = deps.normalizeAiProfileColor(input.color);
1363
- const nextDescription = normalizeOptionalProfileField(input.description);
1364
- const nextRole = normalizeOptionalProfileField(input.role);
1365
- const nextProvider = normalizeOptionalProfileField(input.provider);
1366
- const nextModel = normalizeOptionalProfileField(input.model);
1367
- const existingProfile = deps.aiProfileRowToRecord(archivedMatch.row);
1368
- const resolvedMetadata = resolveAiProfileMetadataFields(deps, {
1369
- name: nextName,
1370
- description: nextDescription,
1371
- role: nextRole,
1372
- provider: nextProvider,
1373
- model: nextModel,
1374
- surfaceType: input.surfaceType,
1375
- }, existingProfile);
1376
- const resolvedSeatScope = resolveTrustedAiProfileSeatScope(deps, trustedSeatScope, existingProfile);
1377
- if (requiresCloudSeatReservation(existingProfile, resolvedSeatScope.seatScope)) {
1378
- assertAiProfileSeatAvailable(deps, normalizedWorkspaceId);
1379
- }
1380
- deps.db.prepare(`
1381
- UPDATE ai_profiles
1382
- SET name = ?,
1383
- username = ?,
1384
- icon = ?,
1385
- color = ?,
1386
- description = COALESCE(?, description),
1387
- role = COALESCE(?, role),
1388
- provider = COALESCE(?, provider),
1389
- model = COALESCE(?, model),
1390
- last_active_at = ?,
1391
- updated_at = ?,
1392
- archived_at = NULL,
1393
- archived_by = NULL,
1394
- archived_reason = NULL,
1395
- merged_into_profile_id = NULL,
1396
- roster_state_updated_at = ?,
1397
- surface_type = CASE
1398
- WHEN ? = 1 THEN ?
1399
- ELSE surface_type
1400
- END,
1401
- seat_scope = CASE
1402
- WHEN ? = 1 THEN ?
1403
- ELSE seat_scope
1404
- END
1405
- WHERE tenant_id = ? AND id = ?
1406
- `).run(nextName, nextUsername, nextIcon, nextColor, resolvedMetadata.description, resolvedMetadata.role, resolvedMetadata.provider, resolvedMetadata.model, now, now, now, resolvedMetadata.surfaceTypeProvided ? 1 : 0, resolvedMetadata.surfaceType, resolvedSeatScope.seatScopeProvided ? 1 : 0, resolvedSeatScope.seatScope, deps.tenantId, canonicalId);
1407
- const reactivated = deps.db.prepare(`
1408
- SELECT *
1409
- FROM ai_profiles
1410
- WHERE tenant_id = ? AND id = ?
1411
- LIMIT 1
1412
- `).get(deps.tenantId, canonicalId);
1413
- if (!reactivated) {
1414
- throw deps.createRuleError('Failed to refresh AI profile', 500, 'AI_PROFILE_REFRESH_FAILED');
1415
- }
1416
- return {
1417
- created: false,
1418
- profile: hydrateAiProfileRecord(deps, reactivated)
1419
- };
1661
+ const archivedMatch = selectAiProfileIdentityMatch(deps, archivedMatches, trustedSeatScope);
1662
+ if (archivedMatch.matchCount > 0) {
1663
+ throw deps.createRuleError(`An archived AI profile matches "${name}". Reactivate it with its profileToken or choose a distinct identity.`, 409, 'AI_PROFILE_RETIRED', {
1664
+ workspaceId: normalizedWorkspaceId,
1665
+ candidates: buildAiProfileIdentityCandidates(deps, archivedMatch.rows),
1666
+ recovery: 'Use the archived profileToken to reactivate the intended profile, or rename the new identity.',
1667
+ });
1420
1668
  }
1421
1669
  const id = deps.generateEntityId('ai-profile');
1422
1670
  const issuedProfileToken = deps.issueProfileToken();
1423
1671
  const username = deps.normalizeAiProfileUsername(undefined, name);
1424
1672
  const icon = deps.normalizeAiProfileIcon(input.icon);
1425
- const color = deps.normalizeAiProfileColor(input.color);
1673
+ const explicitColorProvided = input.color !== undefined && input.color !== null && String(input.color).trim() !== '';
1674
+ const explicitColor = explicitColorProvided ? normalizeAiProfileColor(input.color) : null;
1675
+ if (explicitColorProvided && !explicitColor) {
1676
+ throw deps.createRuleError('color must be a Taskforce palette token or hex color.', 400, 'AI_PROFILE_COLOR_INVALID');
1677
+ }
1678
+ const productColor = normalizeAiProfileColor(options?.trustedSignatureColor);
1679
+ const color = productColor || explicitColor || assignedAiProfileColor(`${name}:${username}`);
1680
+ const colorSource = productColor
1681
+ ? 'product_default'
1682
+ : explicitColor
1683
+ ? 'agent_explicit'
1684
+ : 'assigned_default';
1426
1685
  const description = normalizeOptionalProfileField(input.description);
1427
1686
  const role = normalizeOptionalProfileField(input.role);
1428
1687
  const provider = normalizeOptionalProfileField(input.provider);
@@ -1434,7 +1693,7 @@ export function resolveAiProfileService(deps, input, options) {
1434
1693
  provider,
1435
1694
  model,
1436
1695
  surfaceType: input.surfaceType,
1437
- }, null);
1696
+ }, null, options?.trustedSurfaceType);
1438
1697
  const resolvedSeatScope = resolveTrustedAiProfileSeatScope(deps, trustedSeatScope, null);
1439
1698
  if (resolvedSeatScope.seatScope === 'cloud_metered') {
1440
1699
  assertAiProfileSeatAvailable(deps, normalizedWorkspaceId);
@@ -1444,12 +1703,12 @@ export function resolveAiProfileService(deps, input, options) {
1444
1703
  : null;
1445
1704
  deps.db.prepare(`
1446
1705
  INSERT INTO ai_profiles (
1447
- id, tenant_id, workspace_id, profile_token, name, username, icon, color,
1706
+ id, tenant_id, workspace_id, profile_token, name, username, icon, color, color_source, color_updated_at,
1448
1707
  avatar_url, avatar_source_url, description, role, provider, model, surface_type, seat_scope, provider_metadata_json,
1449
1708
  archived_at, archived_by, archived_reason, merged_into_profile_id,
1450
1709
  roster_state_updated_at, created_at, updated_at, last_active_at
1451
- ) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)
1452
- `).run(id, deps.tenantId, normalizedWorkspaceId, issuedProfileToken, name, username, icon, color, null, null, resolvedMetadata.description, resolvedMetadata.role, resolvedMetadata.provider, resolvedMetadata.model, resolvedMetadata.surfaceType, resolvedSeatScope.seatScope, providerMetadata ? JSON.stringify(providerMetadata) : null, null, null, null, null, now, now, now, now);
1710
+ ) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)
1711
+ `).run(id, deps.tenantId, normalizedWorkspaceId, issuedProfileToken, name, username, icon, color, colorSource, now, null, null, resolvedMetadata.description, resolvedMetadata.role, resolvedMetadata.provider, resolvedMetadata.model, resolvedMetadata.surfaceType, resolvedSeatScope.seatScope, providerMetadata ? JSON.stringify(providerMetadata) : null, null, null, null, null, now, now, now, now);
1453
1712
  const created = deps.db.prepare(`
1454
1713
  SELECT *
1455
1714
  FROM ai_profiles