@taskforcehq/taskforce 0.3.326 → 0.3.328

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