@taskforcehq/taskforce 0.3.324 → 0.3.327

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