@taskforcehq/taskforce 0.3.326 → 0.3.327

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (1358) hide show
  1. package/LICENSE.md +68 -0
  2. package/README.md +19 -0
  3. package/dist/Taskforce.module.css +2173 -561
  4. package/dist/TaskforceCore.d.ts +1 -0
  5. package/dist/TaskforceCore.js +65 -22
  6. package/dist/annotatedAttachments/AnnotatedAttachmentSessionStore.d.ts +1 -0
  7. package/dist/annotatedAttachments/AnnotatedAttachmentSessionStore.js +3 -2
  8. package/dist/annotatedAttachments/commandService.d.ts +68 -0
  9. package/dist/annotatedAttachments/commandService.js +348 -0
  10. package/dist/annotatedAttachments/service.d.ts +2 -0
  11. package/dist/annotatedAttachments/service.js +13 -12
  12. package/dist/cli.js +158 -9
  13. package/dist/cliOpenPort.d.ts +1 -0
  14. package/dist/cliOpenPort.js +4 -0
  15. package/dist/compat/taskforceAgentDefinitionCompat.d.ts +12 -0
  16. package/dist/compat/taskforceAgentDefinitionCompat.js +25 -0
  17. package/dist/compat/workspaceSyncCompat.js +6 -2
  18. package/dist/compat/workspaceSyncV3CombinedCoverageCompat.d.ts +6 -0
  19. package/dist/compat/workspaceSyncV3CombinedCoverageCompat.js +22 -0
  20. package/dist/compat/workspaceSyncV3OperationCompat.d.ts +7 -0
  21. package/dist/compat/workspaceSyncV3OperationCompat.js +30 -0
  22. package/dist/components/activity/EntityActivityTimeline.d.ts +10 -2
  23. package/dist/components/activity/EntityActivityTimeline.js +73 -35
  24. package/dist/components/context/AttachmentPreviewHost.d.ts +6 -0
  25. package/dist/components/context/AttachmentPreviewHost.js +222 -0
  26. package/dist/components/context/ContextAttachmentManager.d.ts +4 -0
  27. package/dist/components/context/ContextAttachmentManager.js +418 -208
  28. package/dist/components/features/AiProfilesModule.d.ts +24 -0
  29. package/dist/components/features/AiProfilesModule.js +744 -0
  30. package/dist/components/features/AnnotatedAttachmentWorkspace.d.ts +4 -1
  31. package/dist/components/features/AnnotatedAttachmentWorkspace.js +351 -79
  32. package/dist/components/features/DocumentGenerateModal.js +23 -5
  33. package/dist/components/features/DocumentIndex.d.ts +19 -1
  34. package/dist/components/features/DocumentIndex.js +104 -15
  35. package/dist/components/features/DocumentViewer.d.ts +9 -1
  36. package/dist/components/features/DocumentViewer.js +721 -100
  37. package/dist/components/features/DocumentWorkspace.d.ts +37 -2
  38. package/dist/components/features/DocumentWorkspace.js +21 -6
  39. package/dist/components/features/TaskSettings.d.ts +6 -27
  40. package/dist/components/features/TaskSettings.js +232 -143
  41. package/dist/components/features/TaskforceAgentsModule.d.ts +36 -0
  42. package/dist/components/features/TaskforceAgentsModule.js +1782 -0
  43. package/dist/components/features/agentBehavior/AgentBehaviorManagerShared.d.ts +94 -0
  44. package/dist/components/features/agentBehavior/AgentBehaviorManagerShared.js +70 -0
  45. package/dist/components/features/agentCapabilities/AgentCapabilitiesPrototype.d.ts +65 -0
  46. package/dist/components/features/agentCapabilities/AgentCapabilitiesPrototype.js +115 -0
  47. package/dist/components/features/agentRoles/RoleManagerPanel.d.ts +4 -0
  48. package/dist/components/features/agentRoles/RoleManagerPanel.js +382 -0
  49. package/dist/components/features/agentSkills/SkillManagerPanel.d.ts +5 -0
  50. package/dist/components/features/agentSkills/SkillManagerPanel.js +355 -0
  51. package/dist/components/features/documentWorkspaceModel.d.ts +16 -4
  52. package/dist/components/features/documentWorkspaceModel.js +30 -5
  53. package/dist/components/features/planning/PlanningArchiveConfirmation.d.ts +9 -0
  54. package/dist/components/features/planning/PlanningArchiveConfirmation.js +19 -0
  55. package/dist/components/features/planning/PlanningCardIdentity.d.ts +12 -0
  56. package/dist/components/features/planning/PlanningCardIdentity.js +44 -0
  57. package/dist/components/features/planning/PlanningEntityDetails.d.ts +36 -0
  58. package/dist/components/features/planning/PlanningEntityDetails.js +131 -0
  59. package/dist/components/features/planning/PlanningEntitySummary.d.ts +44 -0
  60. package/dist/components/features/planning/PlanningEntitySummary.js +97 -0
  61. package/dist/components/features/planning/PlanningLinkPicker.d.ts +9 -0
  62. package/dist/components/features/planning/PlanningLinkPicker.js +26 -0
  63. package/dist/components/features/planning/PlanningModule.d.ts +6 -0
  64. package/dist/components/features/planning/PlanningModule.js +571 -0
  65. package/dist/components/features/planning/PlanningOwnerDropdown.d.ts +27 -0
  66. package/dist/components/features/planning/PlanningOwnerDropdown.js +80 -0
  67. package/dist/components/features/planning/PlanningTaskArrangeControl.d.ts +5 -0
  68. package/dist/components/features/planning/PlanningTaskArrangeControl.js +11 -0
  69. package/dist/components/features/planning/PlanningTaskCard.d.ts +20 -0
  70. package/dist/components/features/planning/PlanningTaskCard.js +26 -0
  71. package/dist/components/features/planning/PlanningTaskOrderList.d.ts +10 -0
  72. package/dist/components/features/planning/PlanningTaskOrderList.js +52 -0
  73. package/dist/components/features/planning/PlanningUnlinkConfirmation.d.ts +15 -0
  74. package/dist/components/features/planning/PlanningUnlinkConfirmation.js +7 -0
  75. package/dist/components/features/planning/planningCreateIntent.d.ts +10 -0
  76. package/dist/components/features/planning/planningCreateIntent.js +16 -0
  77. package/dist/components/features/planning/planningNavigator.d.ts +33 -0
  78. package/dist/components/features/planning/planningNavigator.js +96 -0
  79. package/dist/components/features/planning/planningTaskArrangement.d.ts +18 -0
  80. package/dist/components/features/planning/planningTaskArrangement.js +106 -0
  81. package/dist/components/features/planning/planningWorkspaceModel.d.ts +121 -0
  82. package/dist/components/features/planning/planningWorkspaceModel.js +5 -0
  83. package/dist/components/features/settings/CategoryManager.js +2 -2
  84. package/dist/components/features/settings/TaxonomyEditor.js +1 -1
  85. package/dist/components/features/settings/TaxonomyManager.js +1 -1
  86. package/dist/components/features/settings/TypeManager.js +1 -1
  87. package/dist/components/features/taskforceAgentAssignments/AgentBehaviorAssignments.d.ts +10 -0
  88. package/dist/components/features/taskforceAgentAssignments/AgentBehaviorAssignments.js +175 -0
  89. package/dist/components/features/taskforceAgentAssignments/agentBehaviorCatalogApi.d.ts +27 -0
  90. package/dist/components/features/taskforceAgentAssignments/agentBehaviorCatalogApi.js +24 -0
  91. package/dist/components/features/taskforceAgentEditorModel.d.ts +109 -0
  92. package/dist/components/features/taskforceAgentEditorModel.js +145 -0
  93. package/dist/components/features/useDocumentWorkspaceController.d.ts +20 -1
  94. package/dist/components/features/useDocumentWorkspaceController.js +106 -21
  95. package/dist/components/features/workflowManager/WorkflowManagerModule.d.ts +11 -0
  96. package/dist/components/features/workflowManager/WorkflowManagerModule.js +313 -0
  97. package/dist/components/features/workflowManager/WorkflowPublishDialog.d.ts +11 -0
  98. package/dist/components/features/workflowManager/WorkflowPublishDialog.js +8 -0
  99. package/dist/components/features/workflowManager/types.d.ts +74 -0
  100. package/dist/components/features/workflowManager/types.js +1 -0
  101. package/dist/components/features/workflowManager/useWorkflowManager.d.ts +30 -0
  102. package/dist/components/features/workflowManager/useWorkflowManager.js +213 -0
  103. package/dist/components/features/workflowManager/workflowManagerApi.d.ts +52 -0
  104. package/dist/components/features/workflowManager/workflowManagerApi.js +142 -0
  105. package/dist/components/task/TaskActionHeader.d.ts +6 -3
  106. package/dist/components/task/TaskActionHeader.js +46 -53
  107. package/dist/components/task/TaskCard.d.ts +10 -2
  108. package/dist/components/task/TaskCard.js +103 -54
  109. package/dist/components/task/TaskContextUpload.d.ts +1 -0
  110. package/dist/components/task/TaskContextUpload.js +3 -2
  111. package/dist/components/task/TaskForm.d.ts +12 -17
  112. package/dist/components/task/TaskForm.js +544 -199
  113. package/dist/components/task/TaskImageReviews.d.ts +8 -0
  114. package/dist/components/task/TaskImageReviews.js +47 -0
  115. package/dist/components/task/TaskKanban.d.ts +9 -10
  116. package/dist/components/task/TaskKanban.js +70 -18
  117. package/dist/components/task/TaskList.d.ts +9 -8
  118. package/dist/components/task/TaskList.js +46 -32
  119. package/dist/components/task/TaskReferenceBadge.d.ts +2 -1
  120. package/dist/components/task/TaskReferenceBadge.js +3 -2
  121. package/dist/components/task/TaskStatusActions.d.ts +3 -1
  122. package/dist/components/task/TaskStatusActions.js +17 -6
  123. package/dist/components/task/TaskWorkflowAssignmentField.d.ts +18 -0
  124. package/dist/components/task/TaskWorkflowAssignmentField.js +362 -0
  125. package/dist/components/task/TaskWorkstreamPicker.d.ts +8 -0
  126. package/dist/components/task/TaskWorkstreamPicker.js +24 -0
  127. package/dist/components/task/TrashRestoreControls.d.ts +18 -0
  128. package/dist/components/task/TrashRestoreControls.js +71 -0
  129. package/dist/components/ui/AiIdentityRosterCard.d.ts +20 -0
  130. package/dist/components/ui/AiIdentityRosterCard.js +5 -0
  131. package/dist/components/ui/AssetTraySortControl.d.ts +10 -0
  132. package/dist/components/ui/AssetTraySortControl.js +38 -0
  133. package/dist/components/ui/AssigneeIdentity.d.ts +12 -0
  134. package/dist/components/ui/AssigneeIdentity.js +41 -0
  135. package/dist/components/ui/DiscardChangesDialog.d.ts +10 -0
  136. package/dist/components/ui/DiscardChangesDialog.js +7 -0
  137. package/dist/components/ui/DisclosureSectionHeader.d.ts +4 -1
  138. package/dist/components/ui/DisclosureSectionHeader.js +2 -2
  139. package/dist/components/ui/EditableAvatarButton.d.ts +6 -1
  140. package/dist/components/ui/EditableAvatarButton.js +6 -5
  141. package/dist/components/ui/HierarchyActionBadge.d.ts +2 -1
  142. package/dist/components/ui/HierarchyActionBadge.js +2 -2
  143. package/dist/components/ui/Markdown.d.ts +13 -3
  144. package/dist/components/ui/Markdown.fixture.d.ts +1 -0
  145. package/dist/components/ui/Markdown.fixture.js +23 -0
  146. package/dist/components/ui/Markdown.js +158 -68
  147. package/dist/components/ui/Modal.d.ts +3 -1
  148. package/dist/components/ui/Modal.js +85 -19
  149. package/dist/components/ui/MultiSelectFilter.d.ts +9 -2
  150. package/dist/components/ui/MultiSelectFilter.js +26 -5
  151. package/dist/components/ui/ReferenceBadgeButton.js +2 -3
  152. package/dist/components/ui/TaxonomyDropdown.d.ts +10 -1
  153. package/dist/components/ui/TaxonomyDropdown.js +149 -58
  154. package/dist/components/ui/TopNoticeLayer.d.ts +2 -1
  155. package/dist/components/ui/TopNoticeLayer.js +5 -2
  156. package/dist/components/ui/useFallbackImageUrl.d.ts +4 -0
  157. package/dist/components/ui/useFallbackImageUrl.js +20 -0
  158. package/dist/components/views/AppShellHeader.js +2 -2
  159. package/dist/components/views/StandaloneLayout.d.ts +1 -0
  160. package/dist/components/views/StandaloneLayout.js +1662 -598
  161. package/dist/components/views/WidgetView.d.ts +1 -0
  162. package/dist/components/views/WidgetView.js +95 -30
  163. package/dist/components/views/chrome/WorkspaceChromeSections.d.ts +4 -2
  164. package/dist/components/views/chrome/WorkspaceChromeSections.js +3 -6
  165. package/dist/components/views/chrome/workspaceChrome.d.ts +5 -8
  166. package/dist/components/views/chrome/workspaceChrome.js +62 -27
  167. package/dist/components/views/panels/FilterToolbar.d.ts +4 -3
  168. package/dist/components/views/panels/FilterToolbar.js +8 -5
  169. package/dist/components/views/panels/FilterToolbarControls.d.ts +11 -2
  170. package/dist/components/views/panels/FilterToolbarControls.js +35 -20
  171. package/dist/components/views/panels/PlanningDrawer.d.ts +60 -49
  172. package/dist/components/views/panels/PlanningDrawer.js +978 -313
  173. package/dist/components/views/planningScope.js +7 -1
  174. package/dist/components/views/standalone/modals/AccountSettingsModal.d.ts +62 -0
  175. package/dist/components/views/standalone/modals/AccountSettingsModal.js +197 -0
  176. package/dist/components/views/standalone/modals/AvatarImageManagerModal.d.ts +7 -2
  177. package/dist/components/views/standalone/modals/AvatarImageManagerModal.js +56 -9
  178. package/dist/components/views/standalone/modals/HelpModal.d.ts +1 -2
  179. package/dist/components/views/standalone/modals/HelpModal.js +3 -4
  180. package/dist/components/views/standalone/modals/SyncStatusModal.d.ts +8 -9
  181. package/dist/components/views/standalone/modals/SyncStatusModal.js +85 -25
  182. package/dist/components/views/standalone/modals/TeamManagementModal.js +1 -1
  183. package/dist/config/applicationBaseUrl.d.ts +2 -0
  184. package/dist/config/applicationBaseUrl.js +23 -0
  185. package/dist/config/envSchema.d.ts +1 -1
  186. package/dist/config/envSchema.js +166 -5
  187. package/dist/core/AdminAuditRetentionService.d.ts +43 -0
  188. package/dist/core/AdminAuditRetentionService.js +126 -0
  189. package/dist/core/AiProfileService.d.ts +34 -0
  190. package/dist/core/AiProfileService.js +510 -251
  191. package/dist/core/AttachmentLinkService.d.ts +10 -2
  192. package/dist/core/AttachmentLinkService.js +44 -12
  193. package/dist/core/AuthIdentityService.d.ts +6 -0
  194. package/dist/core/AuthIdentityService.js +38 -0
  195. package/dist/core/AuthTokenService.d.ts +1 -0
  196. package/dist/core/AuthTokenService.js +13 -0
  197. package/dist/core/DeletedTaskLifecycleService.d.ts +4 -2
  198. package/dist/core/DeletedTaskLifecycleService.js +124 -38
  199. package/dist/core/GlobalSettingsService.d.ts +3 -1
  200. package/dist/core/GlobalSettingsService.js +30 -4
  201. package/dist/core/InitiativeDurableMutationService.d.ts +89 -0
  202. package/dist/core/InitiativeDurableMutationService.js +187 -0
  203. package/dist/core/McpTokenService.d.ts +1 -0
  204. package/dist/core/McpTokenService.js +39 -13
  205. package/dist/core/PlanningCommandPreparationService.d.ts +60 -0
  206. package/dist/core/PlanningCommandPreparationService.js +149 -0
  207. package/dist/core/ScheduleCommandService.d.ts +76 -0
  208. package/dist/core/ScheduleCommandService.js +165 -0
  209. package/dist/core/SyncReconciliationService.d.ts +29 -6
  210. package/dist/core/SyncReconciliationService.js +256 -84
  211. package/dist/core/TaskActivityService.d.ts +22 -2
  212. package/dist/core/TaskActivityService.js +177 -29
  213. package/dist/core/TaskAttachmentLinksDurableMutationService.d.ts +31 -0
  214. package/dist/core/TaskAttachmentLinksDurableMutationService.js +231 -0
  215. package/dist/core/TaskChecklistCommandService.d.ts +50 -0
  216. package/dist/core/TaskChecklistCommandService.js +111 -0
  217. package/dist/core/TaskDurableCreateMutationService.d.ts +38 -0
  218. package/dist/core/TaskDurableCreateMutationService.js +85 -0
  219. package/dist/core/TaskDurableDeleteMutationService.d.ts +47 -0
  220. package/dist/core/TaskDurableDeleteMutationService.js +54 -0
  221. package/dist/core/TaskDurableLifecycleMutationService.d.ts +38 -0
  222. package/dist/core/TaskDurableLifecycleMutationService.js +42 -0
  223. package/dist/core/TaskDurableRelationshipMutationService.d.ts +58 -0
  224. package/dist/core/TaskDurableRelationshipMutationService.js +66 -0
  225. package/dist/core/TaskDurableRestoreMutationService.d.ts +31 -0
  226. package/dist/core/TaskDurableRestoreMutationService.js +33 -0
  227. package/dist/core/TaskDurableStatusMutationService.d.ts +74 -0
  228. package/dist/core/TaskDurableStatusMutationService.js +247 -0
  229. package/dist/core/TaskDurableSyncMutationService.d.ts +34 -0
  230. package/dist/core/TaskDurableSyncMutationService.js +70 -0
  231. package/dist/core/TaskDurableWorkflowMutationService.d.ts +48 -0
  232. package/dist/core/TaskDurableWorkflowMutationService.js +59 -0
  233. package/dist/core/TaskLifecycleCommandService.d.ts +101 -0
  234. package/dist/core/TaskLifecycleCommandService.js +161 -0
  235. package/dist/core/TaskRootCommandPreparationService.d.ts +35 -0
  236. package/dist/core/TaskRootCommandPreparationService.js +103 -0
  237. package/dist/core/Taskforce.d.ts +479 -59
  238. package/dist/core/Taskforce.js +3671 -841
  239. package/dist/core/WorkflowAssignmentService.d.ts +40 -0
  240. package/dist/core/WorkflowAssignmentService.js +158 -0
  241. package/dist/core/WorkflowExecutionService.d.ts +69 -0
  242. package/dist/core/WorkflowExecutionService.js +342 -0
  243. package/dist/core/WorkflowTaskActivationService.d.ts +32 -0
  244. package/dist/core/WorkflowTaskActivationService.js +63 -0
  245. package/dist/core/WorkflowTemplateService.d.ts +64 -0
  246. package/dist/core/WorkflowTemplateService.js +223 -0
  247. package/dist/core/WorkspaceLifecycleService.d.ts +1 -0
  248. package/dist/core/WorkspaceLifecycleService.js +18 -0
  249. package/dist/core/WorkstreamDurableMutationService.d.ts +90 -0
  250. package/dist/core/WorkstreamDurableMutationService.js +184 -0
  251. package/dist/core/planningReferencePolicy.d.ts +14 -0
  252. package/dist/core/planningReferencePolicy.js +53 -0
  253. package/dist/core/taskReferencePolicy.js +24 -3
  254. package/dist/core/types.d.ts +10 -10
  255. package/dist/documentReviews/DocumentReviewCommentStore.d.ts +22 -2
  256. package/dist/documentReviews/DocumentReviewCommentStore.js +92 -8
  257. package/dist/documentReviews/commandService.d.ts +51 -0
  258. package/dist/documentReviews/commandService.js +63 -0
  259. package/dist/documentReviews/service.d.ts +20 -1
  260. package/dist/documentReviews/service.js +234 -24
  261. package/dist/documentReviews/types.d.ts +18 -1
  262. package/dist/hooks/sync/bootstrap.d.ts +3 -7
  263. package/dist/hooks/sync/bootstrap.js +6 -14
  264. package/dist/hooks/sync/browserSyncAuthority.d.ts +21 -0
  265. package/dist/hooks/sync/browserSyncAuthority.js +70 -0
  266. package/dist/hooks/sync/browserSyncRemoteServices.d.ts +29 -0
  267. package/dist/hooks/sync/browserSyncRemoteServices.js +58 -0
  268. package/dist/hooks/sync/controlPlane.d.ts +1 -37
  269. package/dist/hooks/sync/controlPlane.js +1 -78
  270. package/dist/hooks/sync/lifecyclePolicy.d.ts +1 -45
  271. package/dist/hooks/sync/lifecyclePolicy.js +1 -93
  272. package/dist/hooks/sync/orchestratorShared.d.ts +9 -3
  273. package/dist/hooks/sync/orchestratorShared.js +70 -96
  274. package/dist/hooks/sync/pullLifecycle.d.ts +1 -31
  275. package/dist/hooks/sync/pullLifecycle.js +1 -24
  276. package/dist/hooks/sync/realtime.d.ts +4 -1
  277. package/dist/hooks/sync/realtime.js +103 -3
  278. package/dist/hooks/sync/recovery.d.ts +1 -84
  279. package/dist/hooks/sync/recovery.js +1 -245
  280. package/dist/hooks/sync/transfers.d.ts +8 -129
  281. package/dist/hooks/sync/transfers.js +19 -581
  282. package/dist/hooks/sync/useDataVersionRefresh.d.ts +6 -1
  283. package/dist/hooks/sync/useDataVersionRefresh.js +127 -12
  284. package/dist/hooks/sync/useDurableLocalOutboxDrain.d.ts +14 -0
  285. package/dist/hooks/sync/useDurableLocalOutboxDrain.js +208 -0
  286. package/dist/hooks/sync/useDurableTaskCreateMutation.d.ts +15 -0
  287. package/dist/hooks/sync/useDurableTaskCreateMutation.js +152 -0
  288. package/dist/hooks/sync/useDurableTaskDeleteMutation.d.ts +11 -0
  289. package/dist/hooks/sync/useDurableTaskDeleteMutation.js +21 -0
  290. package/dist/hooks/sync/useDurableTaskLifecycleMutation.d.ts +12 -0
  291. package/dist/hooks/sync/useDurableTaskLifecycleMutation.js +22 -0
  292. package/dist/hooks/sync/useDurableTaskMetadataMutation.d.ts +14 -0
  293. package/dist/hooks/sync/useDurableTaskMetadataMutation.js +24 -0
  294. package/dist/hooks/sync/useDurableTaskRestoreMutation.d.ts +12 -0
  295. package/dist/hooks/sync/useDurableTaskRestoreMutation.js +24 -0
  296. package/dist/hooks/sync/useDurableTaskStatusMutation.d.ts +18 -0
  297. package/dist/hooks/sync/useDurableTaskStatusMutation.js +23 -0
  298. package/dist/hooks/sync/useLocalSyncCoordinatorSnapshot.d.ts +23 -0
  299. package/dist/hooks/sync/useLocalSyncCoordinatorSnapshot.js +414 -0
  300. package/dist/hooks/sync/useSyncStatusActions.d.ts +2 -1
  301. package/dist/hooks/sync/useSyncStatusActions.js +8 -3
  302. package/dist/hooks/tasks/taskHttpMutation.d.ts +25 -0
  303. package/dist/hooks/tasks/taskHttpMutation.js +134 -0
  304. package/dist/hooks/tasks/useCurrentTaskRelations.d.ts +6 -1
  305. package/dist/hooks/tasks/useCurrentTaskRelations.js +32 -6
  306. package/dist/hooks/tasks/useTaskEditorNavigation.d.ts +4 -3
  307. package/dist/hooks/tasks/useTaskEditorNavigation.js +9 -13
  308. package/dist/hooks/tasks/useTaskFormActions.d.ts +17 -2
  309. package/dist/hooks/tasks/useTaskFormActions.js +309 -55
  310. package/dist/hooks/tasks/useTaskReferenceContract.d.ts +5 -0
  311. package/dist/hooks/tasks/useTaskReferenceContract.js +17 -0
  312. package/dist/hooks/tasks/useTaskRelationships.d.ts +1 -3
  313. package/dist/hooks/tasks/useTaskRelationships.js +5 -25
  314. package/dist/hooks/tasks/useTrashSelection.d.ts +12 -0
  315. package/dist/hooks/tasks/useTrashSelection.js +49 -0
  316. package/dist/hooks/ui/useInitiativeTemplates.d.ts +24 -0
  317. package/dist/hooks/ui/useInitiativeTemplates.js +22 -0
  318. package/dist/hooks/ui/useSettingsModel.d.ts +5 -29
  319. package/dist/hooks/ui/useSettingsModel.js +31 -15
  320. package/dist/hooks/ui/useSettingsPersistence.d.ts +0 -1
  321. package/dist/hooks/ui/useSettingsPersistence.js +4 -8
  322. package/dist/hooks/ui/useSettingsTaxonomyManagement.js +31 -0
  323. package/dist/hooks/useFilterSort.d.ts +2 -2
  324. package/dist/hooks/useFilterSort.js +19 -15
  325. package/dist/hooks/useRealtimeSync.d.ts +10 -0
  326. package/dist/hooks/useRealtimeSync.js +57 -4
  327. package/dist/hooks/useSyncOrchestrator.d.ts +32 -1
  328. package/dist/hooks/useSyncOrchestrator.js +963 -287
  329. package/dist/hooks/useTaskData.d.ts +11 -2
  330. package/dist/hooks/useTaskData.js +59 -26
  331. package/dist/hooks/useTaskMutations.d.ts +42 -5
  332. package/dist/hooks/useTaskMutations.js +750 -125
  333. package/dist/hooks/useTaskforce.d.ts +114 -118
  334. package/dist/hooks/useTaskforce.js +1102 -449
  335. package/dist/hooks/useUiNotice.d.ts +5 -1
  336. package/dist/hooks/useUiNotice.js +13 -2
  337. package/dist/hooks/useWorkspaceSyncController.d.ts +9 -0
  338. package/dist/hooks/useWorkspaceSyncController.js +159 -17
  339. package/dist/hooks/workspace/usePersistedAppUiState.d.ts +74 -0
  340. package/dist/hooks/workspace/usePersistedAppUiState.js +325 -0
  341. package/dist/hooks/workspace/usePersistedLayoutUiState.d.ts +76 -0
  342. package/dist/hooks/workspace/usePersistedLayoutUiState.js +479 -0
  343. package/dist/hooks/workspace/useTaskforceWorkspaceBootstrap.d.ts +2 -7
  344. package/dist/hooks/workspace/useTaskforceWorkspaceBootstrap.js +42 -31
  345. package/dist/hooks/workspace/workspaceLocalState.d.ts +17 -6
  346. package/dist/hooks/workspace/workspaceLocalState.js +175 -5
  347. package/dist/hooks/workstreams/workstreamHttpMutation.d.ts +23 -0
  348. package/dist/hooks/workstreams/workstreamHttpMutation.js +134 -0
  349. package/dist/localization/locales/en-US.d.ts +3 -3
  350. package/dist/localization/locales/en-US.js +3 -3
  351. package/dist/localization/locales/es-419.js +3 -3
  352. package/dist/localization/locales/pt-BR.js +3 -3
  353. package/dist/mcp/adminWorkspaceRegistrar.js +2 -30
  354. package/dist/mcp/aiProfileBootstrap.d.ts +3 -0
  355. package/dist/mcp/aiProfileBootstrap.js +4 -0
  356. package/dist/mcp/canonicalAssetHelpers.d.ts +16 -4
  357. package/dist/mcp/canonicalAssetHelpers.js +104 -35
  358. package/dist/mcp/clientIntegrations.d.ts +4 -2
  359. package/dist/mcp/clientIntegrations.js +58 -57
  360. package/dist/mcp/clientRegistry.d.ts +30 -0
  361. package/dist/mcp/clientRegistry.js +134 -0
  362. package/dist/mcp/collaborationRegistrar.js +20 -6
  363. package/dist/mcp/documentAssetRegistrar.js +220 -52
  364. package/dist/mcp/documentContentCommand.d.ts +94 -0
  365. package/dist/mcp/documentContentCommand.js +226 -0
  366. package/dist/mcp/documentHelpers.d.ts +13 -65
  367. package/dist/mcp/documentHelpers.js +49 -62
  368. package/dist/mcp/durableTaskMutationRouter.d.ts +65 -0
  369. package/dist/mcp/durableTaskMutationRouter.js +217 -0
  370. package/dist/mcp/durableTaskRelationshipMutationRouter.d.ts +38 -0
  371. package/dist/mcp/durableTaskRelationshipMutationRouter.js +168 -0
  372. package/dist/mcp/durableTaskRootMutationRouter.d.ts +64 -0
  373. package/dist/mcp/durableTaskRootMutationRouter.js +226 -0
  374. package/dist/mcp/gitWorktreeRoots.d.ts +2 -0
  375. package/dist/mcp/gitWorktreeRoots.js +19 -0
  376. package/dist/mcp/legacyServer.d.ts +1 -0
  377. package/dist/mcp/legacyServer.js +42 -0
  378. package/dist/mcp/localCliHealth.d.ts +56 -0
  379. package/dist/mcp/localCliHealth.js +170 -0
  380. package/dist/mcp/localServiceProxy.d.ts +23 -0
  381. package/dist/mcp/localServiceProxy.js +255 -0
  382. package/dist/mcp/mcpInputValidator.d.ts +17 -0
  383. package/dist/mcp/mcpInputValidator.js +58 -0
  384. package/dist/mcp/planningAttachmentCommandAdapter.d.ts +127 -0
  385. package/dist/mcp/planningAttachmentCommandAdapter.js +188 -0
  386. package/dist/mcp/programScaffoldCommandAdapter.d.ts +6 -0
  387. package/dist/mcp/programScaffoldCommandAdapter.js +39 -0
  388. package/dist/mcp/proxyServer.d.ts +1 -0
  389. package/dist/mcp/proxyServer.js +2 -0
  390. package/dist/mcp/runtime.d.ts +82 -1
  391. package/dist/mcp/runtime.js +4285 -1925
  392. package/dist/mcp/server.js +29 -2
  393. package/dist/mcp/sharedLocalServiceGateD.d.ts +115 -0
  394. package/dist/mcp/sharedLocalServiceGateD.js +344 -0
  395. package/dist/mcp/stdioLifecycle.d.ts +22 -0
  396. package/dist/mcp/stdioLifecycle.js +54 -0
  397. package/dist/mcp/taskAttachmentCommandAdapter.d.ts +190 -0
  398. package/dist/mcp/taskAttachmentCommandAdapter.js +464 -0
  399. package/dist/mcp/taskAttachmentHelpers.d.ts +8 -6
  400. package/dist/mcp/taskAttachmentHelpers.js +74 -2
  401. package/dist/mcp/taskAttachmentTypes.d.ts +26 -5
  402. package/dist/mcp/taskPlanCommand.d.ts +64 -0
  403. package/dist/mcp/taskPlanCommand.js +98 -0
  404. package/dist/mcp/taskPlanningRegistrar.js +215 -27
  405. package/dist/mcp/toolCallCompatibility.d.ts +6 -0
  406. package/dist/mcp/toolCallCompatibility.js +16 -0
  407. package/dist/mcp/toolCatalog.d.ts +3 -1
  408. package/dist/mcp/toolProfiles.d.ts +12 -1
  409. package/dist/mcp/toolProfiles.js +43 -0
  410. package/dist/mcp/toolRegistry.d.ts +17 -2
  411. package/dist/mcp/toolRegistry.js +24 -9
  412. package/dist/mcp/workflowExecutionRegistrar.d.ts +2 -0
  413. package/dist/mcp/workflowExecutionRegistrar.js +51 -0
  414. package/dist/migrations/taskSchemaMigrations.d.ts +35 -0
  415. package/dist/migrations/taskSchemaMigrations.js +1797 -4
  416. package/dist/migrations/taskUpdatedAtSyncDriftMigration.d.ts +20 -0
  417. package/dist/migrations/taskUpdatedAtSyncDriftMigration.js +153 -0
  418. package/dist/migrations/taskforceAgentDefinitionMigration.d.ts +26 -0
  419. package/dist/migrations/taskforceAgentDefinitionMigration.js +116 -0
  420. package/dist/plugins/vite.js +48 -17
  421. package/dist/public/Taskforce_Van.webp +0 -0
  422. package/dist/runtime/appGateDefinitions.d.ts +16 -10
  423. package/dist/runtime/appGateDefinitions.js +16 -10
  424. package/dist/runtime/appGates.d.ts +5 -4
  425. package/dist/runtime/appGates.js +4 -3
  426. package/dist/server/aiProfileAvatarAssets.d.ts +11 -8
  427. package/dist/server/aiProfileAvatarAssets.js +159 -70
  428. package/dist/server/auth.js +15 -1
  429. package/dist/server/cors.d.ts +2 -1
  430. package/dist/server/cors.js +45 -8
  431. package/dist/server/email.d.ts +3 -1
  432. package/dist/server/email.js +46 -8
  433. package/dist/server/index.d.ts +24 -1
  434. package/dist/server/index.js +342 -46
  435. package/dist/server/localDataOwnerPermit.d.ts +18 -0
  436. package/dist/server/localDataOwnerPermit.js +58 -0
  437. package/dist/server/localDatabaseIdentity.d.ts +14 -0
  438. package/dist/server/localDatabaseIdentity.js +69 -0
  439. package/dist/server/localRealtimeFileInvalidation.d.ts +1 -0
  440. package/dist/server/localRealtimeFileInvalidation.js +7 -0
  441. package/dist/server/localServiceLease.d.ts +62 -0
  442. package/dist/server/localServiceLease.js +477 -0
  443. package/dist/server/localServiceOwnershipBootstrap.d.ts +19 -0
  444. package/dist/server/localServiceOwnershipBootstrap.js +84 -0
  445. package/dist/server/localServiceSessions.d.ts +87 -0
  446. package/dist/server/localServiceSessions.js +309 -0
  447. package/dist/server/localServiceWindowsAcl.d.ts +8 -0
  448. package/dist/server/localServiceWindowsAcl.js +60 -0
  449. package/dist/server/localSyncProcessLockBootstrap.d.ts +3 -0
  450. package/dist/server/localSyncProcessLockBootstrap.js +16 -0
  451. package/dist/server/localWorkspaceSyncServerComposition.d.ts +59 -0
  452. package/dist/server/localWorkspaceSyncServerComposition.js +91 -0
  453. package/dist/server/localWorkspaceSyncServerRuntime.d.ts +119 -0
  454. package/dist/server/localWorkspaceSyncServerRuntime.js +1163 -0
  455. package/dist/server/rateLimit.d.ts +1 -0
  456. package/dist/server/rateLimit.js +16 -0
  457. package/dist/server/routes/admin.d.ts +2 -4
  458. package/dist/server/routes/admin.js +199 -337
  459. package/dist/server/routes/agentRoles.d.ts +13 -0
  460. package/dist/server/routes/agentRoles.js +273 -0
  461. package/dist/server/routes/agentSkills.d.ts +16 -0
  462. package/dist/server/routes/agentSkills.js +291 -0
  463. package/dist/server/routes/agents.d.ts +49 -0
  464. package/dist/server/routes/agents.js +1455 -0
  465. package/dist/server/routes/annotatedAttachments.js +46 -9
  466. package/dist/server/routes/assetAccess.d.ts +36 -0
  467. package/dist/server/routes/assetAccess.js +93 -0
  468. package/dist/server/routes/auth.d.ts +4 -3
  469. package/dist/server/routes/auth.js +236 -21
  470. package/dist/server/routes/authSupport.d.ts +3 -1
  471. package/dist/server/routes/authSupport.js +22 -8
  472. package/dist/server/routes/documentReviews.d.ts +2 -0
  473. package/dist/server/routes/documentReviews.js +155 -15
  474. package/dist/server/routes/documents.d.ts +1 -0
  475. package/dist/server/routes/documents.js +335 -141
  476. package/dist/server/routes/durableTaskHttpRouters.d.ts +165 -0
  477. package/dist/server/routes/durableTaskHttpRouters.js +89 -0
  478. package/dist/server/routes/localMcpHealth.d.ts +11 -0
  479. package/dist/server/routes/localMcpHealth.js +29 -0
  480. package/dist/server/routes/localService.d.ts +13 -0
  481. package/dist/server/routes/localService.js +444 -0
  482. package/dist/server/routes/localUpdate.d.ts +11 -0
  483. package/dist/server/routes/localUpdate.js +154 -0
  484. package/dist/server/routes/primitives.d.ts +27 -0
  485. package/dist/server/routes/primitives.js +18 -0
  486. package/dist/server/routes/resources.d.ts +1 -10
  487. package/dist/server/routes/resources.js +1 -153
  488. package/dist/server/routes/shared.d.ts +31 -2
  489. package/dist/server/routes/shared.js +394 -0
  490. package/dist/server/routes/sync.d.ts +2 -0
  491. package/dist/server/routes/sync.js +184 -272
  492. package/dist/server/routes/syncAuxRoutes.d.ts +3 -1
  493. package/dist/server/routes/syncAuxRoutes.js +9 -4
  494. package/dist/server/routes/syncCoordinatorLocalRoutes.d.ts +6 -0
  495. package/dist/server/routes/syncCoordinatorLocalRoutes.js +867 -0
  496. package/dist/server/routes/syncPullApplyRoutes.d.ts +29 -1
  497. package/dist/server/routes/syncPullApplyRoutes.js +520 -17
  498. package/dist/server/routes/syncPushRoutes.d.ts +33 -4
  499. package/dist/server/routes/syncPushRoutes.js +251 -62
  500. package/dist/server/routes/syncRouteTypes.d.ts +1 -1
  501. package/dist/server/routes/syncSnapshotRoutes.d.ts +15 -7
  502. package/dist/server/routes/syncSnapshotRoutes.js +95 -17
  503. package/dist/server/routes/syncV3DiagnosticsRoutes.d.ts +14 -0
  504. package/dist/server/routes/syncV3DiagnosticsRoutes.js +72 -0
  505. package/dist/server/routes/syncV3FeedRoutes.d.ts +20 -0
  506. package/dist/server/routes/syncV3FeedRoutes.js +462 -0
  507. package/dist/server/routes/syncV3LocalCaptureRoutes.d.ts +37 -0
  508. package/dist/server/routes/syncV3LocalCaptureRoutes.js +897 -0
  509. package/dist/server/routes/syncV3LocalDispatchRoutes.d.ts +17 -0
  510. package/dist/server/routes/syncV3LocalDispatchRoutes.js +280 -0
  511. package/dist/server/routes/syncV3LocalFeedApplyRoutes.d.ts +17 -0
  512. package/dist/server/routes/syncV3LocalFeedApplyRoutes.js +493 -0
  513. package/dist/server/routes/syncV3LocalOwnershipRoutes.d.ts +10 -0
  514. package/dist/server/routes/syncV3LocalOwnershipRoutes.js +51 -0
  515. package/dist/server/routes/syncV3LocalRecoveryRoutes.d.ts +12 -0
  516. package/dist/server/routes/syncV3LocalRecoveryRoutes.js +78 -0
  517. package/dist/server/routes/syncV3OperationRoutes.d.ts +35 -0
  518. package/dist/server/routes/syncV3OperationRoutes.js +1136 -0
  519. package/dist/server/routes/tasks.d.ts +0 -2
  520. package/dist/server/routes/tasks.js +932 -195
  521. package/dist/server/routes/workflows.d.ts +26 -0
  522. package/dist/server/routes/workflows.js +500 -0
  523. package/dist/server/routes.d.ts +1 -6
  524. package/dist/server/routes.js +148 -339
  525. package/dist/server/smtpTransport.d.ts +11 -3
  526. package/dist/server/smtpTransport.js +9 -2
  527. package/dist/server/start.js +42 -10
  528. package/dist/service/localServiceCli.d.ts +33 -0
  529. package/dist/service/localServiceCli.js +365 -0
  530. package/dist/service/localServiceClientLifecycle.d.ts +25 -0
  531. package/dist/service/localServiceClientLifecycle.js +128 -0
  532. package/dist/service/localServiceOpen.d.ts +17 -0
  533. package/dist/service/localServiceOpen.js +27 -0
  534. package/dist/services/agentRoleResolver.d.ts +4 -0
  535. package/dist/services/agentRoleResolver.js +7 -0
  536. package/dist/services/aiProfileAvatarGenerationService.d.ts +41 -0
  537. package/dist/services/aiProfileAvatarGenerationService.js +158 -0
  538. package/dist/services/avatarImageProvider.d.ts +33 -0
  539. package/dist/services/avatarImageProvider.js +140 -0
  540. package/dist/services/bedrockAnthropicMessagesModelGateway.d.ts +24 -0
  541. package/dist/services/bedrockAnthropicMessagesModelGateway.js +95 -0
  542. package/dist/services/bedrockMantleModelGateway.d.ts +43 -0
  543. package/dist/services/bedrockMantleModelGateway.js +81 -0
  544. package/dist/services/bedrockModelGateway.d.ts +26 -0
  545. package/dist/services/bedrockModelGateway.js +94 -0
  546. package/dist/services/modelGateway.d.ts +82 -0
  547. package/dist/services/modelGateway.js +61 -0
  548. package/dist/services/taskforceAgentAvatarImageProvider.d.ts +8 -0
  549. package/dist/services/taskforceAgentAvatarImageProvider.js +24 -0
  550. package/dist/services/taskforceAgentMcpBridge.d.ts +77 -0
  551. package/dist/services/taskforceAgentMcpBridge.js +527 -0
  552. package/dist/shared/agentRoleDefinition.d.ts +34 -0
  553. package/dist/shared/agentRoleDefinition.js +207 -0
  554. package/dist/shared/aiProfileAvatarEligibility.d.ts +10 -0
  555. package/dist/shared/aiProfileAvatarEligibility.js +27 -0
  556. package/dist/shared/aiProfileColors.d.ts +7 -0
  557. package/dist/shared/aiProfileColors.js +33 -0
  558. package/dist/shared/colorPalette.d.ts +3 -0
  559. package/dist/shared/colorPalette.js +20 -0
  560. package/dist/shared/commentProvenance.d.ts +4 -0
  561. package/dist/shared/commentProvenance.js +6 -0
  562. package/dist/shared/deletedTaskRetention.d.ts +2 -0
  563. package/dist/shared/deletedTaskRetention.js +7 -0
  564. package/dist/shared/passwordPolicy.d.ts +2 -1
  565. package/dist/shared/passwordPolicy.js +9 -0
  566. package/dist/shared/taskDeepLinks.d.ts +28 -0
  567. package/dist/shared/taskDeepLinks.js +48 -0
  568. package/dist/shared/taskRestoreDestination.d.ts +2 -0
  569. package/dist/shared/taskRestoreDestination.js +5 -0
  570. package/dist/shared/taskforceAgentDefinition.d.ts +88 -0
  571. package/dist/shared/taskforceAgentDefinition.js +434 -0
  572. package/dist/shared/taskforceAgentExecutionSnapshot.d.ts +50 -0
  573. package/dist/shared/taskforceAgentExecutionSnapshot.js +68 -0
  574. package/dist/shared/taskforceAgentModels.d.ts +56 -0
  575. package/dist/shared/taskforceAgentModels.js +314 -0
  576. package/dist/shared/taskforceAgentRunContext.d.ts +23 -0
  577. package/dist/shared/taskforceAgentRunContext.js +21 -0
  578. package/dist/shared/taskforceAgentRuntimeResolution.d.ts +31 -0
  579. package/dist/shared/taskforceAgentRuntimeResolution.js +72 -0
  580. package/dist/shared/taskforceAgentSkill.d.ts +33 -0
  581. package/dist/shared/taskforceAgentSkill.js +149 -0
  582. package/dist/storage/agentRoleStore.d.ts +91 -0
  583. package/dist/storage/agentRoleStore.js +385 -0
  584. package/dist/storage/databaseAdapter.d.ts +1 -0
  585. package/dist/storage/databaseAdapter.js +7 -1
  586. package/dist/storage/documentIntegrity.d.ts +12 -3
  587. package/dist/storage/documentIntegrity.js +105 -27
  588. package/dist/storage/objectStorageClient.d.ts +10 -4
  589. package/dist/storage/objectStorageClient.js +73 -43
  590. package/dist/storage/postgresAdapter.d.ts +2 -1
  591. package/dist/storage/postgresAdapter.js +38 -6
  592. package/dist/storage/postgresWorker.js +65 -1
  593. package/dist/storage/sqliteAdapter.d.ts +1 -1
  594. package/dist/storage/sqliteAdapter.js +7 -1
  595. package/dist/storage/sqliteWalHealth.d.ts +71 -0
  596. package/dist/storage/sqliteWalHealth.js +176 -0
  597. package/dist/storage/taskDataPath.d.ts +1 -0
  598. package/dist/storage/taskDataPath.js +20 -0
  599. package/dist/storage/taskforceAgentConversationStore.d.ts +66 -0
  600. package/dist/storage/taskforceAgentConversationStore.js +264 -0
  601. package/dist/storage/taskforceAgentSkillStore.d.ts +93 -0
  602. package/dist/storage/taskforceAgentSkillStore.js +355 -0
  603. package/dist/storage/taskforceAgentStore.d.ts +105 -0
  604. package/dist/storage/taskforceAgentStore.js +549 -0
  605. package/dist/storage/workflowStore.d.ts +223 -0
  606. package/dist/storage/workflowStore.js +1032 -0
  607. package/dist/storage/workspaceAssetStore.d.ts +70 -0
  608. package/dist/storage/workspaceAssetStore.js +418 -25
  609. package/dist/sync/aiProfileAvatarSyncPaths.d.ts +14 -0
  610. package/dist/sync/aiProfileAvatarSyncPaths.js +56 -0
  611. package/dist/sync/cloudSyncApi.d.ts +329 -0
  612. package/dist/sync/cloudSyncApi.js +574 -1
  613. package/dist/sync/collaborationSyncPayload.d.ts +5 -1
  614. package/dist/sync/collaborationSyncPayload.js +213 -1
  615. package/dist/sync/collaborationSyncState.d.ts +23 -3
  616. package/dist/sync/collaborationSyncState.js +92 -3
  617. package/dist/sync/contentSyncPayload.d.ts +9 -0
  618. package/dist/sync/contentSyncPayload.js +29 -0
  619. package/dist/sync/contentSyncState.d.ts +79 -4
  620. package/dist/sync/contentSyncState.js +1113 -313
  621. package/dist/sync/coordinator/localSyncBrowserApplyPermitContext.d.ts +39 -0
  622. package/dist/sync/coordinator/localSyncBrowserApplyPermitContext.js +234 -0
  623. package/dist/sync/coordinator/localSyncBrowserAuthorityCapability.d.ts +7 -0
  624. package/dist/sync/coordinator/localSyncBrowserAuthorityCapability.js +10 -0
  625. package/dist/sync/coordinator/localSyncCommittedApplyPolicy.d.ts +7 -0
  626. package/dist/sync/coordinator/localSyncCommittedApplyPolicy.js +41 -0
  627. package/dist/sync/coordinator/localSyncCoordinatorBrowserClient.d.ts +178 -0
  628. package/dist/sync/coordinator/localSyncCoordinatorBrowserClient.js +131 -0
  629. package/dist/sync/coordinator/localSyncCoordinatorCommandLifecycle.d.ts +25 -0
  630. package/dist/sync/coordinator/localSyncCoordinatorCommandLifecycle.js +200 -0
  631. package/dist/sync/coordinator/localSyncCoordinatorHost.d.ts +84 -0
  632. package/dist/sync/coordinator/localSyncCoordinatorHost.js +435 -0
  633. package/dist/sync/coordinator/localSyncCoordinatorRouteServices.d.ts +33 -0
  634. package/dist/sync/coordinator/localSyncCoordinatorRouteServices.js +1 -0
  635. package/dist/sync/coordinator/localSyncCoordinatorStore.d.ts +122 -0
  636. package/dist/sync/coordinator/localSyncCoordinatorStore.js +1039 -0
  637. package/dist/sync/coordinator/localSyncCoordinatorTypes.d.ts +82 -0
  638. package/dist/sync/coordinator/localSyncCoordinatorTypes.js +9 -0
  639. package/dist/sync/coordinator/localSyncDispatchTracker.d.ts +15 -0
  640. package/dist/sync/coordinator/localSyncDispatchTracker.js +68 -0
  641. package/dist/sync/coordinator/localSyncExecutionPermitStore.d.ts +200 -0
  642. package/dist/sync/coordinator/localSyncExecutionPermitStore.js +1388 -0
  643. package/dist/sync/coordinator/localSyncExecutionPermitTypes.d.ts +52 -0
  644. package/dist/sync/coordinator/localSyncExecutionPermitTypes.js +8 -0
  645. package/dist/sync/coordinator/localSyncOwnershipDrainBarrier.d.ts +33 -0
  646. package/dist/sync/coordinator/localSyncOwnershipDrainBarrier.js +83 -0
  647. package/dist/sync/coordinator/localSyncPermitTransactionHooks.d.ts +9 -0
  648. package/dist/sync/coordinator/localSyncPermitTransactionHooks.js +27 -0
  649. package/dist/sync/coordinator/localSyncProcessLock.d.ts +12 -0
  650. package/dist/sync/coordinator/localSyncProcessLock.js +212 -0
  651. package/dist/sync/coordinator/localSyncV3DispatchRecoveryReconciler.d.ts +17 -0
  652. package/dist/sync/coordinator/localSyncV3DispatchRecoveryReconciler.js +82 -0
  653. package/dist/sync/coordinator/localWorkspaceSyncRunner.d.ts +134 -0
  654. package/dist/sync/coordinator/localWorkspaceSyncRunner.js +981 -0
  655. package/dist/sync/coordinator/localWorkspaceSyncRunnerState.d.ts +189 -0
  656. package/dist/sync/coordinator/localWorkspaceSyncRunnerState.js +961 -0
  657. package/dist/sync/coordinator/workspaceSyncCloudCredentialValidator.d.ts +19 -0
  658. package/dist/sync/coordinator/workspaceSyncCloudCredentialValidator.js +83 -0
  659. package/dist/sync/coordinator/workspaceSyncCredentialBroker.d.ts +117 -0
  660. package/dist/sync/coordinator/workspaceSyncCredentialBroker.js +323 -0
  661. package/dist/sync/coordinator/workspaceSyncLocalAccessBootstrap.d.ts +11 -0
  662. package/dist/sync/coordinator/workspaceSyncLocalAccessBootstrap.js +51 -0
  663. package/dist/sync/coordinator/workspaceSyncTransportGateway.d.ts +139 -0
  664. package/dist/sync/coordinator/workspaceSyncTransportGateway.js +738 -0
  665. package/dist/sync/engine/localWorkspaceContentManifestService.d.ts +21 -0
  666. package/dist/sync/engine/localWorkspaceContentManifestService.js +44 -0
  667. package/dist/sync/engine/workspaceSyncAtomicLocalPublisher.d.ts +36 -0
  668. package/dist/sync/engine/workspaceSyncAtomicLocalPublisher.js +203 -0
  669. package/dist/sync/engine/workspaceSyncContentLifecycleAdapter.d.ts +21 -0
  670. package/dist/sync/engine/workspaceSyncContentLifecycleAdapter.js +13 -0
  671. package/dist/sync/engine/workspaceSyncContentPullObligationStore.d.ts +65 -0
  672. package/dist/sync/engine/workspaceSyncContentPullObligationStore.js +160 -0
  673. package/dist/sync/engine/workspaceSyncContentVersionStore.d.ts +216 -0
  674. package/dist/sync/engine/workspaceSyncContentVersionStore.js +1068 -0
  675. package/dist/sync/engine/workspaceSyncEngineBrowserGatewayRemoteServices.d.ts +28 -0
  676. package/dist/sync/engine/workspaceSyncEngineBrowserGatewayRemoteServices.js +543 -0
  677. package/dist/sync/engine/workspaceSyncEngineContracts.d.ts +78 -0
  678. package/dist/sync/engine/workspaceSyncEngineContracts.js +1 -0
  679. package/dist/sync/engine/workspaceSyncEngineControlPlane.d.ts +37 -0
  680. package/dist/sync/engine/workspaceSyncEngineControlPlane.js +79 -0
  681. package/dist/sync/engine/workspaceSyncEngineIdentity.d.ts +1 -0
  682. package/dist/sync/engine/workspaceSyncEngineIdentity.js +4 -0
  683. package/dist/sync/engine/workspaceSyncEngineLifecyclePolicy.d.ts +68 -0
  684. package/dist/sync/engine/workspaceSyncEngineLifecyclePolicy.js +180 -0
  685. package/dist/sync/engine/workspaceSyncEngineLocalApply.d.ts +72 -0
  686. package/dist/sync/engine/workspaceSyncEngineLocalApply.js +132 -0
  687. package/dist/sync/engine/workspaceSyncEngineLocalServices.d.ts +70 -0
  688. package/dist/sync/engine/workspaceSyncEngineLocalServices.js +25 -0
  689. package/dist/sync/engine/workspaceSyncEngineParity.d.ts +8 -0
  690. package/dist/sync/engine/workspaceSyncEngineParity.js +7 -0
  691. package/dist/sync/engine/workspaceSyncEnginePullPolicy.d.ts +32 -0
  692. package/dist/sync/engine/workspaceSyncEnginePullPolicy.js +27 -0
  693. package/dist/sync/engine/workspaceSyncEnginePushCompletion.d.ts +20 -0
  694. package/dist/sync/engine/workspaceSyncEnginePushCompletion.js +87 -0
  695. package/dist/sync/engine/workspaceSyncEngineRecovery.d.ts +56 -0
  696. package/dist/sync/engine/workspaceSyncEngineRecovery.js +288 -0
  697. package/dist/sync/engine/workspaceSyncEngineRemoteServices.d.ts +104 -0
  698. package/dist/sync/engine/workspaceSyncEngineRemoteServices.js +21 -0
  699. package/dist/sync/engine/workspaceSyncEngineRuntime.d.ts +61 -0
  700. package/dist/sync/engine/workspaceSyncEngineRuntime.js +59 -0
  701. package/dist/sync/engine/workspaceSyncEngineServerApplyBoundary.d.ts +28 -0
  702. package/dist/sync/engine/workspaceSyncEngineServerApplyBoundary.js +86 -0
  703. package/dist/sync/engine/workspaceSyncEngineServerLocalServices.d.ts +73 -0
  704. package/dist/sync/engine/workspaceSyncEngineServerLocalServices.js +452 -0
  705. package/dist/sync/engine/workspaceSyncEngineServerRemoteServices.d.ts +23 -0
  706. package/dist/sync/engine/workspaceSyncEngineServerRemoteServices.js +451 -0
  707. package/dist/sync/engine/workspaceSyncEngineServerRunnerOperations.d.ts +125 -0
  708. package/dist/sync/engine/workspaceSyncEngineServerRunnerOperations.js +1124 -0
  709. package/dist/sync/engine/workspaceSyncEngineServerSnapshotReader.d.ts +63 -0
  710. package/dist/sync/engine/workspaceSyncEngineServerSnapshotReader.js +276 -0
  711. package/dist/sync/engine/workspaceSyncEngineTransferCompletion.d.ts +20 -0
  712. package/dist/sync/engine/workspaceSyncEngineTransferCompletion.js +37 -0
  713. package/dist/sync/engine/workspaceSyncEngineTransferTypes.d.ts +7 -0
  714. package/dist/sync/engine/workspaceSyncEngineTransferTypes.js +1 -0
  715. package/dist/sync/engine/workspaceSyncEngineTransfers.d.ts +240 -0
  716. package/dist/sync/engine/workspaceSyncEngineTransfers.js +1184 -0
  717. package/dist/sync/engine/workspaceSyncEngineV3LocalFeedApply.d.ts +39 -0
  718. package/dist/sync/engine/workspaceSyncEngineV3LocalFeedApply.js +39 -0
  719. package/dist/sync/engine/workspaceSyncImmutableContentGcRunner.d.ts +25 -0
  720. package/dist/sync/engine/workspaceSyncImmutableContentGcRunner.js +83 -0
  721. package/dist/sync/engine/workspaceSyncImmutableContentProvider.d.ts +71 -0
  722. package/dist/sync/engine/workspaceSyncImmutableContentProvider.js +209 -0
  723. package/dist/sync/engine/workspaceSyncImmutableContentStager.d.ts +32 -0
  724. package/dist/sync/engine/workspaceSyncImmutableContentStager.js +202 -0
  725. package/dist/sync/engine/workspaceSyncPublishedContentResolver.d.ts +43 -0
  726. package/dist/sync/engine/workspaceSyncPublishedContentResolver.js +142 -0
  727. package/dist/sync/engine/workspaceSyncServerContentRuntime.d.ts +26 -0
  728. package/dist/sync/engine/workspaceSyncServerContentRuntime.js +41 -0
  729. package/dist/sync/engine/workspaceSyncServerDataServices.d.ts +44 -0
  730. package/dist/sync/engine/workspaceSyncServerDataServices.js +143 -0
  731. package/dist/sync/engine/workspaceSyncTransferEvidence.d.ts +39 -0
  732. package/dist/sync/engine/workspaceSyncTransferEvidence.js +45 -0
  733. package/dist/sync/engine/workspaceSyncV2ChangeDispatcher.d.ts +44 -0
  734. package/dist/sync/engine/workspaceSyncV2ChangeDispatcher.js +990 -0
  735. package/dist/sync/engine/workspaceSyncV2PreparedContent.d.ts +82 -0
  736. package/dist/sync/engine/workspaceSyncV2PreparedContent.js +219 -0
  737. package/dist/sync/planningCanonicalFields.d.ts +41 -0
  738. package/dist/sync/planningCanonicalFields.js +211 -0
  739. package/dist/sync/planningSyncPayload.d.ts +5 -1
  740. package/dist/sync/planningSyncPayload.js +88 -4
  741. package/dist/sync/syncApplyHandlers.d.ts +98 -8
  742. package/dist/sync/syncApplyHandlers.js +816 -78
  743. package/dist/sync/syncResourceAdapters.d.ts +10 -0
  744. package/dist/sync/syncResourceAdapters.js +21 -1
  745. package/dist/sync/syncService.d.ts +57 -1
  746. package/dist/sync/syncService.js +1085 -138
  747. package/dist/sync/taskNestedContent.d.ts +2 -0
  748. package/dist/sync/taskNestedContent.js +8 -0
  749. package/dist/sync/taskSyncChangeKey.js +0 -1
  750. package/dist/sync/taskSyncPayload.d.ts +0 -1
  751. package/dist/sync/taskSyncPayload.js +14 -3
  752. package/dist/sync/v3/canonicalWorkspaceSyncJson.d.ts +2 -0
  753. package/dist/sync/v3/canonicalWorkspaceSyncJson.js +26 -0
  754. package/dist/sync/v3/combinedFeedCapability.d.ts +21 -0
  755. package/dist/sync/v3/combinedFeedCapability.js +80 -0
  756. package/dist/sync/v3/combinedFeedPrerequisites.d.ts +18 -0
  757. package/dist/sync/v3/combinedFeedPrerequisites.js +184 -0
  758. package/dist/sync/v3/durableInitiativeMutationRouter.d.ts +61 -0
  759. package/dist/sync/v3/durableInitiativeMutationRouter.js +287 -0
  760. package/dist/sync/v3/durableOperationReplay.d.ts +36 -0
  761. package/dist/sync/v3/durableOperationReplay.js +103 -0
  762. package/dist/sync/v3/durableTaskAttachmentLinksMutationRouter.d.ts +49 -0
  763. package/dist/sync/v3/durableTaskAttachmentLinksMutationRouter.js +198 -0
  764. package/dist/sync/v3/durableTaskChecklistMutationRouter.d.ts +47 -0
  765. package/dist/sync/v3/durableTaskChecklistMutationRouter.js +182 -0
  766. package/dist/sync/v3/durableTaskCommentMutationRouter.d.ts +47 -0
  767. package/dist/sync/v3/durableTaskCommentMutationRouter.js +191 -0
  768. package/dist/sync/v3/durableTaskHttpBulkMutationRouter.d.ts +60 -0
  769. package/dist/sync/v3/durableTaskHttpBulkMutationRouter.js +320 -0
  770. package/dist/sync/v3/durableTaskHttpRootMutationRouter.d.ts +40 -0
  771. package/dist/sync/v3/durableTaskHttpRootMutationRouter.js +518 -0
  772. package/dist/sync/v3/durableTaxonomyMutationRouter.d.ts +63 -0
  773. package/dist/sync/v3/durableTaxonomyMutationRouter.js +289 -0
  774. package/dist/sync/v3/durableWorkflowRuntimeMutationRouter.d.ts +77 -0
  775. package/dist/sync/v3/durableWorkflowRuntimeMutationRouter.js +361 -0
  776. package/dist/sync/v3/durableWorkstreamMutationRouter.d.ts +61 -0
  777. package/dist/sync/v3/durableWorkstreamMutationRouter.js +287 -0
  778. package/dist/sync/v3/durableWorkstreamTaskOrderMutationRouter.d.ts +42 -0
  779. package/dist/sync/v3/durableWorkstreamTaskOrderMutationRouter.js +122 -0
  780. package/dist/sync/v3/entityEventLegacyAdoptionContract.d.ts +6 -0
  781. package/dist/sync/v3/entityEventLegacyAdoptionContract.js +6 -0
  782. package/dist/sync/v3/entityEventLegacyAdoptionService.d.ts +62 -0
  783. package/dist/sync/v3/entityEventLegacyAdoptionService.js +180 -0
  784. package/dist/sync/v3/initiativeActivityAuthoritativeRevision.d.ts +11 -0
  785. package/dist/sync/v3/initiativeActivityAuthoritativeRevision.js +23 -0
  786. package/dist/sync/v3/initiativeActivityIdentity.d.ts +8 -0
  787. package/dist/sync/v3/initiativeActivityIdentity.js +14 -0
  788. package/dist/sync/v3/initiativeCoexistence.d.ts +26 -0
  789. package/dist/sync/v3/initiativeCoexistence.js +148 -0
  790. package/dist/sync/v3/initiativeFeedActivationCapability.d.ts +6 -0
  791. package/dist/sync/v3/initiativeFeedActivationCapability.js +16 -0
  792. package/dist/sync/v3/initiativeMutationPayload.d.ts +26 -0
  793. package/dist/sync/v3/initiativeMutationPayload.js +144 -0
  794. package/dist/sync/v3/initiativeMutationService.d.ts +62 -0
  795. package/dist/sync/v3/initiativeMutationService.js +206 -0
  796. package/dist/sync/v3/localEntityEventLegacyAdoption.d.ts +31 -0
  797. package/dist/sync/v3/localEntityEventLegacyAdoption.js +607 -0
  798. package/dist/sync/v3/localInitiativeOutboxHandler.d.ts +8 -0
  799. package/dist/sync/v3/localInitiativeOutboxHandler.js +88 -0
  800. package/dist/sync/v3/localInitiativeOutboxService.d.ts +50 -0
  801. package/dist/sync/v3/localInitiativeOutboxService.js +495 -0
  802. package/dist/sync/v3/localOperationIdentityStore.d.ts +81 -0
  803. package/dist/sync/v3/localOperationIdentityStore.js +388 -0
  804. package/dist/sync/v3/localOutboxDispatchCapability.d.ts +7 -0
  805. package/dist/sync/v3/localOutboxDispatchCapability.js +13 -0
  806. package/dist/sync/v3/localOutboxDispatchRuntime.d.ts +16 -0
  807. package/dist/sync/v3/localOutboxDispatchRuntime.js +269 -0
  808. package/dist/sync/v3/localOutboxDispatcher.d.ts +53 -0
  809. package/dist/sync/v3/localOutboxDispatcher.js +362 -0
  810. package/dist/sync/v3/localOutboxDrainClient.d.ts +50 -0
  811. package/dist/sync/v3/localOutboxDrainClient.js +250 -0
  812. package/dist/sync/v3/localOutboxOperationHandler.d.ts +31 -0
  813. package/dist/sync/v3/localOutboxOperationHandler.js +10 -0
  814. package/dist/sync/v3/localOutboxRecoveryClient.d.ts +14 -0
  815. package/dist/sync/v3/localOutboxRecoveryClient.js +45 -0
  816. package/dist/sync/v3/localOutboxRecoveryPreparationService.d.ts +12 -0
  817. package/dist/sync/v3/localOutboxRecoveryPreparationService.js +151 -0
  818. package/dist/sync/v3/localSyncIdentityStore.d.ts +9 -0
  819. package/dist/sync/v3/localSyncIdentityStore.js +43 -0
  820. package/dist/sync/v3/localTaskAttachmentLinksOutboxHandler.d.ts +10 -0
  821. package/dist/sync/v3/localTaskAttachmentLinksOutboxHandler.js +70 -0
  822. package/dist/sync/v3/localTaskAttachmentLinksOutboxService.d.ts +45 -0
  823. package/dist/sync/v3/localTaskAttachmentLinksOutboxService.js +291 -0
  824. package/dist/sync/v3/localTaskChecklistOutboxHandler.d.ts +10 -0
  825. package/dist/sync/v3/localTaskChecklistOutboxHandler.js +54 -0
  826. package/dist/sync/v3/localTaskChecklistOutboxService.d.ts +47 -0
  827. package/dist/sync/v3/localTaskChecklistOutboxService.js +221 -0
  828. package/dist/sync/v3/localTaskCommentOutboxHandler.d.ts +10 -0
  829. package/dist/sync/v3/localTaskCommentOutboxHandler.js +94 -0
  830. package/dist/sync/v3/localTaskCommentOutboxService.d.ts +75 -0
  831. package/dist/sync/v3/localTaskCommentOutboxService.js +391 -0
  832. package/dist/sync/v3/localTaskCreateClient.d.ts +27 -0
  833. package/dist/sync/v3/localTaskCreateClient.js +209 -0
  834. package/dist/sync/v3/localTaskCreateOutboxHandler.d.ts +8 -0
  835. package/dist/sync/v3/localTaskCreateOutboxHandler.js +147 -0
  836. package/dist/sync/v3/localTaskCreateOutboxService.d.ts +77 -0
  837. package/dist/sync/v3/localTaskCreateOutboxService.js +397 -0
  838. package/dist/sync/v3/localTaskDeleteClient.d.ts +10 -0
  839. package/dist/sync/v3/localTaskDeleteClient.js +23 -0
  840. package/dist/sync/v3/localTaskDeleteOutboxHandler.d.ts +8 -0
  841. package/dist/sync/v3/localTaskDeleteOutboxHandler.js +54 -0
  842. package/dist/sync/v3/localTaskDeleteOutboxService.d.ts +38 -0
  843. package/dist/sync/v3/localTaskDeleteOutboxService.js +235 -0
  844. package/dist/sync/v3/localTaskLegacyRootAdoption.d.ts +28 -0
  845. package/dist/sync/v3/localTaskLegacyRootAdoption.js +219 -0
  846. package/dist/sync/v3/localTaskLifecycleClient.d.ts +49 -0
  847. package/dist/sync/v3/localTaskLifecycleClient.js +57 -0
  848. package/dist/sync/v3/localTaskLifecycleOutboxHandler.d.ts +8 -0
  849. package/dist/sync/v3/localTaskLifecycleOutboxHandler.js +94 -0
  850. package/dist/sync/v3/localTaskLifecycleOutboxService.d.ts +60 -0
  851. package/dist/sync/v3/localTaskLifecycleOutboxService.js +304 -0
  852. package/dist/sync/v3/localTaskMetadataClient.d.ts +13 -0
  853. package/dist/sync/v3/localTaskMetadataClient.js +30 -0
  854. package/dist/sync/v3/localTaskMetadataOutboxHandler.d.ts +8 -0
  855. package/dist/sync/v3/localTaskMetadataOutboxHandler.js +70 -0
  856. package/dist/sync/v3/localTaskMetadataOutboxService.d.ts +48 -0
  857. package/dist/sync/v3/localTaskMetadataOutboxService.js +229 -0
  858. package/dist/sync/v3/localTaskOperationClient.d.ts +72 -0
  859. package/dist/sync/v3/localTaskOperationClient.js +195 -0
  860. package/dist/sync/v3/localTaskRelationshipOutboxHandler.d.ts +8 -0
  861. package/dist/sync/v3/localTaskRelationshipOutboxHandler.js +114 -0
  862. package/dist/sync/v3/localTaskRelationshipOutboxService.d.ts +45 -0
  863. package/dist/sync/v3/localTaskRelationshipOutboxService.js +192 -0
  864. package/dist/sync/v3/localTaskRestoreClient.d.ts +13 -0
  865. package/dist/sync/v3/localTaskRestoreClient.js +32 -0
  866. package/dist/sync/v3/localTaskRestoreOutboxHandler.d.ts +8 -0
  867. package/dist/sync/v3/localTaskRestoreOutboxHandler.js +41 -0
  868. package/dist/sync/v3/localTaskRestoreOutboxService.d.ts +56 -0
  869. package/dist/sync/v3/localTaskRestoreOutboxService.js +323 -0
  870. package/dist/sync/v3/localTaskStatusClient.d.ts +17 -0
  871. package/dist/sync/v3/localTaskStatusClient.js +35 -0
  872. package/dist/sync/v3/localTaskStatusOutboxHandler.d.ts +8 -0
  873. package/dist/sync/v3/localTaskStatusOutboxHandler.js +75 -0
  874. package/dist/sync/v3/localTaskStatusOutboxService.d.ts +53 -0
  875. package/dist/sync/v3/localTaskStatusOutboxService.js +422 -0
  876. package/dist/sync/v3/localTaxonomyCompositeOutboxService.d.ts +34 -0
  877. package/dist/sync/v3/localTaxonomyCompositeOutboxService.js +290 -0
  878. package/dist/sync/v3/localTaxonomyOutboxHandler.d.ts +9 -0
  879. package/dist/sync/v3/localTaxonomyOutboxHandler.js +106 -0
  880. package/dist/sync/v3/localTaxonomyOutboxService.d.ts +30 -0
  881. package/dist/sync/v3/localTaxonomyOutboxService.js +181 -0
  882. package/dist/sync/v3/localWorkflowRuntimeOutboxHandler.d.ts +8 -0
  883. package/dist/sync/v3/localWorkflowRuntimeOutboxHandler.js +113 -0
  884. package/dist/sync/v3/localWorkflowRuntimeOutboxService.d.ts +37 -0
  885. package/dist/sync/v3/localWorkflowRuntimeOutboxService.js +330 -0
  886. package/dist/sync/v3/localWorkspaceSyncServerOutboxDispatcher.d.ts +63 -0
  887. package/dist/sync/v3/localWorkspaceSyncServerOutboxDispatcher.js +264 -0
  888. package/dist/sync/v3/localWorkstreamOutboxHandler.d.ts +8 -0
  889. package/dist/sync/v3/localWorkstreamOutboxHandler.js +102 -0
  890. package/dist/sync/v3/localWorkstreamOutboxService.d.ts +52 -0
  891. package/dist/sync/v3/localWorkstreamOutboxService.js +579 -0
  892. package/dist/sync/v3/localWorkstreamTaskOrderOutboxHandler.d.ts +10 -0
  893. package/dist/sync/v3/localWorkstreamTaskOrderOutboxHandler.js +57 -0
  894. package/dist/sync/v3/localWorkstreamTaskOrderOutboxService.d.ts +30 -0
  895. package/dist/sync/v3/localWorkstreamTaskOrderOutboxService.js +128 -0
  896. package/dist/sync/v3/planningActivation.d.ts +13 -0
  897. package/dist/sync/v3/planningActivation.js +33 -0
  898. package/dist/sync/v3/planningAttachmentActivityValidation.d.ts +9 -0
  899. package/dist/sync/v3/planningAttachmentActivityValidation.js +87 -0
  900. package/dist/sync/v3/programScaffoldService.d.ts +143 -0
  901. package/dist/sync/v3/programScaffoldService.js +478 -0
  902. package/dist/sync/v3/syncDurabilityStore.d.ts +773 -0
  903. package/dist/sync/v3/syncDurabilityStore.js +4635 -0
  904. package/dist/sync/v3/taskActivityAuthoritativeRevision.d.ts +16 -0
  905. package/dist/sync/v3/taskActivityAuthoritativeRevision.js +67 -0
  906. package/dist/sync/v3/taskActivityJournal.d.ts +20 -0
  907. package/dist/sync/v3/taskActivityJournal.js +195 -0
  908. package/dist/sync/v3/taskAttachmentLinksActivityIdentity.d.ts +6 -0
  909. package/dist/sync/v3/taskAttachmentLinksActivityIdentity.js +14 -0
  910. package/dist/sync/v3/taskAttachmentLinksMutationService.d.ts +111 -0
  911. package/dist/sync/v3/taskAttachmentLinksMutationService.js +202 -0
  912. package/dist/sync/v3/taskChecklistActivityIdentity.d.ts +6 -0
  913. package/dist/sync/v3/taskChecklistActivityIdentity.js +14 -0
  914. package/dist/sync/v3/taskChecklistMutationService.d.ts +92 -0
  915. package/dist/sync/v3/taskChecklistMutationService.js +156 -0
  916. package/dist/sync/v3/taskCommentActivityIdentity.d.ts +7 -0
  917. package/dist/sync/v3/taskCommentActivityIdentity.js +15 -0
  918. package/dist/sync/v3/taskCommentMutationService.d.ts +150 -0
  919. package/dist/sync/v3/taskCommentMutationService.js +392 -0
  920. package/dist/sync/v3/taskCommentReconcileProvenance.d.ts +58 -0
  921. package/dist/sync/v3/taskCommentReconcileProvenance.js +170 -0
  922. package/dist/sync/v3/taskCreateActivation.d.ts +19 -0
  923. package/dist/sync/v3/taskCreateActivation.js +84 -0
  924. package/dist/sync/v3/taskCreateActivityIdentity.d.ts +7 -0
  925. package/dist/sync/v3/taskCreateActivityIdentity.js +18 -0
  926. package/dist/sync/v3/taskCreateMutationService.d.ts +103 -0
  927. package/dist/sync/v3/taskCreateMutationService.js +283 -0
  928. package/dist/sync/v3/taskDeleteActivation.d.ts +7 -0
  929. package/dist/sync/v3/taskDeleteActivation.js +14 -0
  930. package/dist/sync/v3/taskDeleteMutationService.d.ts +35 -0
  931. package/dist/sync/v3/taskDeleteMutationService.js +133 -0
  932. package/dist/sync/v3/taskLegacyRootAdoptionService.d.ts +78 -0
  933. package/dist/sync/v3/taskLegacyRootAdoptionService.js +175 -0
  934. package/dist/sync/v3/taskLifecycleActivityIdentity.d.ts +9 -0
  935. package/dist/sync/v3/taskLifecycleActivityIdentity.js +18 -0
  936. package/dist/sync/v3/taskLifecycleMutationPayload.d.ts +5 -0
  937. package/dist/sync/v3/taskLifecycleMutationPayload.js +28 -0
  938. package/dist/sync/v3/taskLifecycleMutationService.d.ts +66 -0
  939. package/dist/sync/v3/taskLifecycleMutationService.js +92 -0
  940. package/dist/sync/v3/taskMetadataActivation.d.ts +12 -0
  941. package/dist/sync/v3/taskMetadataActivation.js +38 -0
  942. package/dist/sync/v3/taskMetadataActivityIdentity.d.ts +7 -0
  943. package/dist/sync/v3/taskMetadataActivityIdentity.js +18 -0
  944. package/dist/sync/v3/taskMetadataCoexistence.d.ts +37 -0
  945. package/dist/sync/v3/taskMetadataCoexistence.js +134 -0
  946. package/dist/sync/v3/taskMetadataMutationService.d.ts +71 -0
  947. package/dist/sync/v3/taskMetadataMutationService.js +199 -0
  948. package/dist/sync/v3/taskRelationshipLegacyAdoptionService.d.ts +48 -0
  949. package/dist/sync/v3/taskRelationshipLegacyAdoptionService.js +164 -0
  950. package/dist/sync/v3/taskRelationshipMutationService.d.ts +50 -0
  951. package/dist/sync/v3/taskRelationshipMutationService.js +148 -0
  952. package/dist/sync/v3/taskRestoreMutationService.d.ts +90 -0
  953. package/dist/sync/v3/taskRestoreMutationService.js +179 -0
  954. package/dist/sync/v3/taskStatusActivation.d.ts +7 -0
  955. package/dist/sync/v3/taskStatusActivation.js +15 -0
  956. package/dist/sync/v3/taskStatusMutationService.d.ts +76 -0
  957. package/dist/sync/v3/taskStatusMutationService.js +308 -0
  958. package/dist/sync/v3/taskWorkflowMutationPayload.d.ts +4 -0
  959. package/dist/sync/v3/taskWorkflowMutationPayload.js +22 -0
  960. package/dist/sync/v3/taskWorkflowMutationService.d.ts +64 -0
  961. package/dist/sync/v3/taskWorkflowMutationService.js +102 -0
  962. package/dist/sync/v3/taxonomyCoexistence.d.ts +10 -0
  963. package/dist/sync/v3/taxonomyCoexistence.js +19 -0
  964. package/dist/sync/v3/taxonomyCompositeMutationService.d.ts +110 -0
  965. package/dist/sync/v3/taxonomyCompositeMutationService.js +304 -0
  966. package/dist/sync/v3/taxonomyMutationService.d.ts +57 -0
  967. package/dist/sync/v3/taxonomyMutationService.js +106 -0
  968. package/dist/sync/v3/taxonomyStateMutation.d.ts +22 -0
  969. package/dist/sync/v3/taxonomyStateMutation.js +49 -0
  970. package/dist/sync/v3/taxonomySyncPayload.d.ts +9 -0
  971. package/dist/sync/v3/taxonomySyncPayload.js +199 -0
  972. package/dist/sync/v3/workflowAssignmentSync.d.ts +22 -0
  973. package/dist/sync/v3/workflowAssignmentSync.js +213 -0
  974. package/dist/sync/v3/workflowRuntimeMutationService.d.ts +89 -0
  975. package/dist/sync/v3/workflowRuntimeMutationService.js +359 -0
  976. package/dist/sync/v3/workflowRuntimeOperationIdentity.d.ts +13 -0
  977. package/dist/sync/v3/workflowRuntimeOperationIdentity.js +35 -0
  978. package/dist/sync/v3/workflowRuntimeSync.d.ts +141 -0
  979. package/dist/sync/v3/workflowRuntimeSync.js +485 -0
  980. package/dist/sync/v3/workspaceSyncJournalReader.d.ts +43 -0
  981. package/dist/sync/v3/workspaceSyncJournalReader.js +45 -0
  982. package/dist/sync/v3/workspaceSyncLocalOwnershipSnapshot.d.ts +28 -0
  983. package/dist/sync/v3/workspaceSyncLocalOwnershipSnapshot.js +81 -0
  984. package/dist/sync/v3/workspaceSyncPayloadFingerprint.d.ts +1 -0
  985. package/dist/sync/v3/workspaceSyncPayloadFingerprint.js +5 -0
  986. package/dist/sync/v3/workspaceSyncV2ProjectionExclusions.d.ts +16 -0
  987. package/dist/sync/v3/workspaceSyncV2ProjectionExclusions.js +161 -0
  988. package/dist/sync/v3/workspaceSyncV3AttachmentApplyObligationStore.d.ts +83 -0
  989. package/dist/sync/v3/workspaceSyncV3AttachmentApplyObligationStore.js +161 -0
  990. package/dist/sync/v3/workspaceSyncV3AttachmentAssetHydration.d.ts +16 -0
  991. package/dist/sync/v3/workspaceSyncV3AttachmentAssetHydration.js +90 -0
  992. package/dist/sync/v3/workspaceSyncV3CloudOperationHandler.d.ts +65 -0
  993. package/dist/sync/v3/workspaceSyncV3CloudOperationHandler.js +356 -0
  994. package/dist/sync/v3/workspaceSyncV3CombinedCoverage.d.ts +51 -0
  995. package/dist/sync/v3/workspaceSyncV3CombinedCoverage.js +171 -0
  996. package/dist/sync/v3/workspaceSyncV3CombinedFeedOrchestrator.d.ts +43 -0
  997. package/dist/sync/v3/workspaceSyncV3CombinedFeedOrchestrator.js +535 -0
  998. package/dist/sync/v3/workspaceSyncV3CombinedLocalApply.d.ts +50 -0
  999. package/dist/sync/v3/workspaceSyncV3CombinedLocalApply.js +1149 -0
  1000. package/dist/sync/v3/workspaceSyncV3CombinedProjectionState.d.ts +96 -0
  1001. package/dist/sync/v3/workspaceSyncV3CombinedProjectionState.js +672 -0
  1002. package/dist/sync/v3/workspaceSyncV3CombinedRepairBaseline.d.ts +42 -0
  1003. package/dist/sync/v3/workspaceSyncV3CombinedRepairBaseline.js +598 -0
  1004. package/dist/sync/v3/workspaceSyncV3CombinedRepairMaterialization.d.ts +65 -0
  1005. package/dist/sync/v3/workspaceSyncV3CombinedRepairMaterialization.js +505 -0
  1006. package/dist/sync/v3/workspaceSyncV3CombinedRepairSnapshot.d.ts +78 -0
  1007. package/dist/sync/v3/workspaceSyncV3CombinedRepairSnapshot.js +511 -0
  1008. package/dist/sync/v3/workspaceSyncV3CombinedWireContract.d.ts +45 -0
  1009. package/dist/sync/v3/workspaceSyncV3CombinedWireContract.js +125 -0
  1010. package/dist/sync/v3/workspaceSyncV3CoverageRegistry.d.ts +13 -0
  1011. package/dist/sync/v3/workspaceSyncV3CoverageRegistry.js +34 -0
  1012. package/dist/sync/v3/workspaceSyncV3CursorEncoding.d.ts +1 -0
  1013. package/dist/sync/v3/workspaceSyncV3CursorEncoding.js +6 -0
  1014. package/dist/sync/v3/workspaceSyncV3DomainAdmission.d.ts +43 -0
  1015. package/dist/sync/v3/workspaceSyncV3DomainAdmission.js +118 -0
  1016. package/dist/sync/v3/workspaceSyncV3Feed.d.ts +95 -0
  1017. package/dist/sync/v3/workspaceSyncV3Feed.js +243 -0
  1018. package/dist/sync/v3/workspaceSyncV3FeedApply.d.ts +13 -0
  1019. package/dist/sync/v3/workspaceSyncV3FeedApply.js +67 -0
  1020. package/dist/sync/v3/workspaceSyncV3FeedClientContract.d.ts +3 -0
  1021. package/dist/sync/v3/workspaceSyncV3FeedClientContract.js +46 -0
  1022. package/dist/sync/v3/workspaceSyncV3FeedCursorKeys.d.ts +10 -0
  1023. package/dist/sync/v3/workspaceSyncV3FeedCursorKeys.js +58 -0
  1024. package/dist/sync/v3/workspaceSyncV3FeedOrchestrator.d.ts +31 -0
  1025. package/dist/sync/v3/workspaceSyncV3FeedOrchestrator.js +228 -0
  1026. package/dist/sync/v3/workspaceSyncV3FeedProfile.d.ts +32 -0
  1027. package/dist/sync/v3/workspaceSyncV3FeedProfile.js +21 -0
  1028. package/dist/sync/v3/workspaceSyncV3InitiativeLocalApply.d.ts +36 -0
  1029. package/dist/sync/v3/workspaceSyncV3InitiativeLocalApply.js +163 -0
  1030. package/dist/sync/v3/workspaceSyncV3InitiativeRepair.d.ts +33 -0
  1031. package/dist/sync/v3/workspaceSyncV3InitiativeRepair.js +118 -0
  1032. package/dist/sync/v3/workspaceSyncV3LegacyBoundaryAttestation.d.ts +10 -0
  1033. package/dist/sync/v3/workspaceSyncV3LegacyBoundaryAttestation.js +45 -0
  1034. package/dist/sync/v3/workspaceSyncV3LocalOutboxStatus.d.ts +27 -0
  1035. package/dist/sync/v3/workspaceSyncV3LocalOutboxStatus.js +83 -0
  1036. package/dist/sync/v3/workspaceSyncV3NestedCoverage.d.ts +10 -0
  1037. package/dist/sync/v3/workspaceSyncV3NestedCoverage.js +40 -0
  1038. package/dist/sync/v3/workspaceSyncV3NestedTaskApply.d.ts +83 -0
  1039. package/dist/sync/v3/workspaceSyncV3NestedTaskApply.js +325 -0
  1040. package/dist/sync/v3/workspaceSyncV3NestedTaskCodecs.d.ts +59 -0
  1041. package/dist/sync/v3/workspaceSyncV3NestedTaskCodecs.js +302 -0
  1042. package/dist/sync/v3/workspaceSyncV3NestedTaskProjection.d.ts +47 -0
  1043. package/dist/sync/v3/workspaceSyncV3NestedTaskProjection.js +329 -0
  1044. package/dist/sync/v3/workspaceSyncV3NestedTaskRepairSnapshot.d.ts +19 -0
  1045. package/dist/sync/v3/workspaceSyncV3NestedTaskRepairSnapshot.js +41 -0
  1046. package/dist/sync/v3/workspaceSyncV3NestedWireContract.d.ts +6 -0
  1047. package/dist/sync/v3/workspaceSyncV3NestedWireContract.js +16 -0
  1048. package/dist/sync/v3/workspaceSyncV3OperationProjection.d.ts +8 -0
  1049. package/dist/sync/v3/workspaceSyncV3OperationProjection.js +52 -0
  1050. package/dist/sync/v3/workspaceSyncV3OperationProtocol.d.ts +229 -0
  1051. package/dist/sync/v3/workspaceSyncV3OperationProtocol.js +1 -0
  1052. package/dist/sync/v3/workspaceSyncV3OperatorDiagnostics.d.ts +165 -0
  1053. package/dist/sync/v3/workspaceSyncV3OperatorDiagnostics.js +414 -0
  1054. package/dist/sync/v3/workspaceSyncV3OriginActor.d.ts +36 -0
  1055. package/dist/sync/v3/workspaceSyncV3OriginActor.js +61 -0
  1056. package/dist/sync/v3/workspaceSyncV3OriginAssertion.d.ts +46 -0
  1057. package/dist/sync/v3/workspaceSyncV3OriginAssertion.js +121 -0
  1058. package/dist/sync/v3/workspaceSyncV3OriginAssertionHeader.d.ts +1 -0
  1059. package/dist/sync/v3/workspaceSyncV3OriginAssertionHeader.js +1 -0
  1060. package/dist/sync/v3/workspaceSyncV3PlanningOrderCoverage.d.ts +10 -0
  1061. package/dist/sync/v3/workspaceSyncV3PlanningOrderCoverage.js +34 -0
  1062. package/dist/sync/v3/workspaceSyncV3PlanningOrderWireContract.d.ts +6 -0
  1063. package/dist/sync/v3/workspaceSyncV3PlanningOrderWireContract.js +10 -0
  1064. package/dist/sync/v3/workspaceSyncV3ProjectionState.d.ts +105 -0
  1065. package/dist/sync/v3/workspaceSyncV3ProjectionState.js +467 -0
  1066. package/dist/sync/v3/workspaceSyncV3TaskCommentAudit.d.ts +56 -0
  1067. package/dist/sync/v3/workspaceSyncV3TaskCommentAudit.js +250 -0
  1068. package/dist/sync/v3/workspaceSyncV3TaskRelationshipProjection.d.ts +30 -0
  1069. package/dist/sync/v3/workspaceSyncV3TaskRelationshipProjection.js +142 -0
  1070. package/dist/sync/v3/workspaceSyncV3TaskRootProjection.d.ts +40 -0
  1071. package/dist/sync/v3/workspaceSyncV3TaskRootProjection.js +246 -0
  1072. package/dist/sync/v3/workspaceSyncV3TaxonomyFeedProjection.d.ts +39 -0
  1073. package/dist/sync/v3/workspaceSyncV3TaxonomyFeedProjection.js +185 -0
  1074. package/dist/sync/v3/workspaceSyncV3WorkflowCoverage.d.ts +10 -0
  1075. package/dist/sync/v3/workspaceSyncV3WorkflowCoverage.js +36 -0
  1076. package/dist/sync/v3/workspaceSyncV3WorkflowRuntimeApply.d.ts +17 -0
  1077. package/dist/sync/v3/workspaceSyncV3WorkflowRuntimeApply.js +143 -0
  1078. package/dist/sync/v3/workspaceSyncV3WorkflowRuntimeProjection.d.ts +9 -0
  1079. package/dist/sync/v3/workspaceSyncV3WorkflowRuntimeProjection.js +195 -0
  1080. package/dist/sync/v3/workspaceSyncV3WorkflowWireContract.d.ts +11 -0
  1081. package/dist/sync/v3/workspaceSyncV3WorkflowWireContract.js +12 -0
  1082. package/dist/sync/v3/workspaceSyncV3WorkstreamProjection.d.ts +4 -0
  1083. package/dist/sync/v3/workspaceSyncV3WorkstreamProjection.js +98 -0
  1084. package/dist/sync/v3/workspaceSyncV3WorkstreamTaskOrderProjection.d.ts +9 -0
  1085. package/dist/sync/v3/workspaceSyncV3WorkstreamTaskOrderProjection.js +72 -0
  1086. package/dist/sync/v3/workstreamActivityAuthoritativeRevision.d.ts +11 -0
  1087. package/dist/sync/v3/workstreamActivityAuthoritativeRevision.js +23 -0
  1088. package/dist/sync/v3/workstreamActivityIdentity.d.ts +8 -0
  1089. package/dist/sync/v3/workstreamActivityIdentity.js +14 -0
  1090. package/dist/sync/v3/workstreamCoexistence.d.ts +19 -0
  1091. package/dist/sync/v3/workstreamCoexistence.js +64 -0
  1092. package/dist/sync/v3/workstreamMutationPayload.d.ts +27 -0
  1093. package/dist/sync/v3/workstreamMutationPayload.js +147 -0
  1094. package/dist/sync/v3/workstreamMutationService.d.ts +72 -0
  1095. package/dist/sync/v3/workstreamMutationService.js +256 -0
  1096. package/dist/sync/v3/workstreamTaskOrderMutationService.d.ts +55 -0
  1097. package/dist/sync/v3/workstreamTaskOrderMutationService.js +110 -0
  1098. package/dist/sync/v3/workstreamTaskOrderSync.d.ts +14 -0
  1099. package/dist/sync/v3/workstreamTaskOrderSync.js +25 -0
  1100. package/dist/sync/workspaceContentManifest.d.ts +86 -0
  1101. package/dist/sync/workspaceContentManifest.js +123 -0
  1102. package/dist/sync/workspacePullFeed.d.ts +186 -2
  1103. package/dist/sync/workspacePullFeed.js +513 -136
  1104. package/dist/sync/workspacePushPreparedPlan.d.ts +21 -0
  1105. package/dist/sync/workspacePushPreparedPlan.js +1 -0
  1106. package/dist/sync/workspaceRepair.d.ts +17 -25
  1107. package/dist/sync/workspaceRepair.js +348 -25
  1108. package/dist/sync/workspaceSyncContentDecryption.d.ts +6 -0
  1109. package/dist/sync/workspaceSyncContentDecryption.js +11 -0
  1110. package/dist/sync/workspaceSyncModel.d.ts +216 -5
  1111. package/dist/sync/workspaceSyncModel.js +371 -35
  1112. package/dist/sync/workspaceSyncSnapshotProjection.d.ts +11 -0
  1113. package/dist/sync/workspaceSyncSnapshotProjection.js +101 -0
  1114. package/dist/sync/workspaceSyncState.d.ts +13 -0
  1115. package/dist/sync/workspaceSyncState.js +36 -0
  1116. package/dist/sync/workspaceSyncV2SnapshotBuilder.d.ts +106 -0
  1117. package/dist/sync/workspaceSyncV2SnapshotBuilder.js +193 -0
  1118. package/dist/types.d.ts +23 -15
  1119. package/dist/types.js +1 -3
  1120. package/dist/ui/ai-profile-clients/amazon-nova.svg +1 -0
  1121. package/dist/ui/ai-profile-clients/antigravity.png +0 -0
  1122. package/dist/ui/ai-profile-clients/chatgpt.svg +10 -0
  1123. package/dist/ui/ai-profile-clients/claude-chat.svg +1 -0
  1124. package/dist/ui/ai-profile-clients/claude-code.svg +15 -0
  1125. package/dist/ui/ai-profile-clients/cline-app-icon-light.png +0 -0
  1126. package/dist/ui/ai-profile-clients/cline.svg +16 -0
  1127. package/dist/ui/ai-profile-clients/codex.svg +1 -0
  1128. package/dist/ui/ai-profile-clients/copilot.png +0 -0
  1129. package/dist/ui/ai-profile-clients/cursor.svg +1 -0
  1130. package/dist/ui/ai-profile-clients/deepseek.svg +1 -0
  1131. package/dist/ui/ai-profile-clients/gemini-cli-icon.png +0 -0
  1132. package/dist/ui/ai-profile-clients/gemini.svg +10 -0
  1133. package/dist/ui/ai-profile-clients/grok.svg +31 -0
  1134. package/dist/ui/ai-profile-clients/kiro.svg +11 -0
  1135. package/dist/ui/ai-profile-clients/llama.svg +1 -0
  1136. package/dist/ui/ai-profile-clients/mistral.svg +1 -0
  1137. package/dist/ui/ai-profile-clients/ms_copilot.jpeg +0 -0
  1138. package/dist/ui/ai-profile-clients/openclaw.png +0 -0
  1139. package/dist/ui/ai-profile-clients/perplexity.svg +1 -0
  1140. package/dist/ui/ai-profile-clients/vscode.svg +41 -0
  1141. package/dist/ui/ai-profile-clients/windsurf.svg +11 -0
  1142. package/dist/ui/assets/AiIdentityRosterCard-DB1BLO_j.js +1 -0
  1143. package/dist/ui/assets/AiProfilesModule-DPxQeF9N.js +1 -0
  1144. package/dist/ui/assets/AnnotatedAttachmentWorkspace-CBRZ8rca.css +1 -0
  1145. package/dist/ui/assets/AnnotatedAttachmentWorkspace-DHNYaNg6.js +3 -0
  1146. package/dist/ui/assets/AssetTraySortControl-B9k5caQW.css +1 -0
  1147. package/dist/ui/assets/AssetTraySortControl-DphbyHVc.js +1 -0
  1148. package/dist/ui/assets/ContextAttachmentManager-CMxSzHqc.js +3 -0
  1149. package/dist/ui/assets/DocumentWorkspace-BC7sy5TG.js +261 -0
  1150. package/dist/ui/assets/DocumentWorkspace-BIBGBfd7.css +1 -0
  1151. package/dist/ui/assets/EntityActivityTimeline-BfJbZRdl.css +1 -0
  1152. package/dist/ui/assets/EntityActivityTimeline-pJ2ZjZ-k.js +1 -0
  1153. package/dist/ui/assets/PlanningModule-CeTqXMMz.css +1 -0
  1154. package/dist/ui/assets/PlanningModule-t5GbvVR9.js +1 -0
  1155. package/dist/ui/assets/PlansPage-BVH_NfgT.js +1 -0
  1156. package/dist/ui/assets/PlansPage-C2nkK2Bp.css +1 -0
  1157. package/dist/ui/assets/TaskContextUpload-Ds4LnDzV.css +1 -0
  1158. package/dist/ui/assets/TaskContextUpload-bl4fOOUz.js +1 -0
  1159. package/dist/ui/assets/TaskSettings-xVsxSa0g.js +12 -0
  1160. package/dist/ui/assets/TaskforceAgentsModule-CkAxW19K.js +21 -0
  1161. package/dist/ui/assets/TaskforceAgentsModule-D6IC0S7Q.css +1 -0
  1162. package/dist/ui/assets/WorkflowManagerModule-BKqIGVnF.js +1 -0
  1163. package/dist/ui/assets/WorkflowManagerModule-DF10XENz.css +1 -0
  1164. package/dist/ui/assets/antigravity-DRKQga2U.png +0 -0
  1165. package/dist/ui/assets/cursor-BM_3k4Y4.svg +1 -0
  1166. package/dist/ui/assets/gemini-cli-icon-dBAVjCcn.png +0 -0
  1167. package/dist/ui/assets/grok-BuodbWaG.svg +31 -0
  1168. package/dist/ui/assets/index-BzJlVnNS.css +1 -0
  1169. package/dist/ui/assets/index-Cx7vZJHL.js +7 -0
  1170. package/dist/ui/assets/{vendor-dnd-DRzYolkg.js → vendor-dnd-CJ-AjP-Y.js} +1 -1
  1171. package/dist/ui/assets/{vendor-icons-CLnehDTw.js → vendor-icons-B8ZNsH1g.js} +1 -1
  1172. package/dist/ui/assets/{vendor-markdown-BUxTU7dS.js → vendor-markdown-_lhNCyq-.js} +9 -9
  1173. package/dist/ui/assets/vendor-router-AqJMU8Lz.js +3 -0
  1174. package/dist/ui/assets/vscode-C_7wk1WI.svg +41 -0
  1175. package/dist/ui/branding/logos/logo_dark_bg.png +0 -0
  1176. package/dist/ui/branding/logos/logo_favicon_dark.png +0 -0
  1177. package/dist/ui/branding/logos/logo_favicon_dark.svg +56 -0
  1178. package/dist/ui/branding/logos/logo_favicon_light.png +0 -0
  1179. package/dist/ui/branding/logos/logo_light_bg.png +0 -0
  1180. package/dist/ui/images/Taskforce_Van.webp +0 -0
  1181. package/dist/ui/index.html +6 -6
  1182. package/dist/update/uiUpdateService.d.ts +43 -0
  1183. package/dist/update/uiUpdateService.js +149 -0
  1184. package/dist/update/updateCli.d.ts +15 -0
  1185. package/dist/update/updateCli.js +76 -0
  1186. package/dist/update/updateExecutor.d.ts +40 -0
  1187. package/dist/update/updateExecutor.js +474 -0
  1188. package/dist/update/updateStatus.d.ts +83 -0
  1189. package/dist/update/updateStatus.js +703 -0
  1190. package/dist/utils/aiProfileAvatarPaths.d.ts +14 -0
  1191. package/dist/utils/aiProfileAvatarPaths.js +52 -0
  1192. package/dist/utils/aiProfileDefaultLogo.d.ts +7 -0
  1193. package/dist/utils/aiProfileDefaultLogo.js +84 -0
  1194. package/dist/utils/aiProfileEvents.d.ts +9 -1
  1195. package/dist/utils/annotatedAttachments.d.ts +8 -0
  1196. package/dist/utils/annotatedAttachments.js +17 -1
  1197. package/dist/utils/assetTraySorting.d.ts +25 -0
  1198. package/dist/utils/assetTraySorting.js +83 -0
  1199. package/dist/utils/assignees.d.ts +5 -0
  1200. package/dist/utils/assignees.js +14 -9
  1201. package/dist/utils/authLogin.d.ts +10 -0
  1202. package/dist/utils/authLogin.js +8 -0
  1203. package/dist/utils/authSessionEvents.d.ts +2 -0
  1204. package/dist/utils/authSessionEvents.js +6 -0
  1205. package/dist/utils/avatarUpload.js +5 -5
  1206. package/dist/utils/canonicalReferenceAttachments.d.ts +12 -0
  1207. package/dist/utils/canonicalReferenceAttachments.js +42 -0
  1208. package/dist/utils/cloudAssetDisplay.d.ts +2 -0
  1209. package/dist/utils/cloudAssetDisplay.js +8 -0
  1210. package/dist/utils/constants.d.ts +4 -11
  1211. package/dist/utils/constants.js +5 -64
  1212. package/dist/utils/contextAttachmentPreview.d.ts +11 -0
  1213. package/dist/utils/contextAttachmentPreview.js +8 -0
  1214. package/dist/utils/contextAttachmentUpload.d.ts +8 -0
  1215. package/dist/utils/contextAttachmentUpload.js +144 -0
  1216. package/dist/utils/documentNames.js +6 -4
  1217. package/dist/utils/entityReferences.d.ts +14 -0
  1218. package/dist/utils/entityReferences.js +21 -0
  1219. package/dist/utils/httpSetCookie.d.ts +3 -0
  1220. package/dist/utils/httpSetCookie.js +22 -0
  1221. package/dist/utils/imageNoteStoragePaths.d.ts +3 -0
  1222. package/dist/utils/imageNoteStoragePaths.js +19 -0
  1223. package/dist/utils/imageReferences.d.ts +6 -0
  1224. package/dist/utils/imageReferences.js +1 -0
  1225. package/dist/utils/planningArchiveOrchestrator.d.ts +23 -0
  1226. package/dist/utils/planningArchiveOrchestrator.js +37 -0
  1227. package/dist/utils/planningArchivePresentation.d.ts +20 -0
  1228. package/dist/utils/planningArchivePresentation.js +23 -0
  1229. package/dist/utils/planningArchiveReadiness.d.ts +26 -0
  1230. package/dist/utils/planningArchiveReadiness.js +30 -0
  1231. package/dist/utils/planningFavorites.d.ts +7 -0
  1232. package/dist/utils/planningFavorites.js +34 -0
  1233. package/dist/utils/syncEventPresentation.js +53 -0
  1234. package/dist/utils/syncStatusPresentation.d.ts +25 -0
  1235. package/dist/utils/syncStatusPresentation.js +86 -5
  1236. package/dist/utils/taskActivity.d.ts +9 -2
  1237. package/dist/utils/taskActivity.js +61 -0
  1238. package/dist/utils/taskDraftDefaults.d.ts +0 -8
  1239. package/dist/utils/taskDraftDefaults.js +0 -4
  1240. package/dist/utils/taskEvents.d.ts +11 -0
  1241. package/dist/utils/taskEvents.js +6 -0
  1242. package/dist/utils/taskHeaderQuickFilter.d.ts +14 -0
  1243. package/dist/utils/taskHeaderQuickFilter.js +32 -0
  1244. package/dist/utils/taskInvalidation.d.ts +23 -0
  1245. package/dist/utils/taskInvalidation.js +67 -0
  1246. package/dist/utils/taskNormalization.d.ts +2 -1
  1247. package/dist/utils/taskNormalization.js +44 -18
  1248. package/dist/utils/taskReferences.d.ts +16 -0
  1249. package/dist/utils/taskReferences.js +63 -0
  1250. package/dist/utils/taskforceAgentEvents.d.ts +8 -0
  1251. package/dist/utils/taskforceAgentEvents.js +6 -0
  1252. package/dist/utils/taskforceAgentSkillEvents.d.ts +7 -0
  1253. package/dist/utils/taskforceAgentSkillEvents.js +8 -0
  1254. package/dist/utils/uiNotice.d.ts +3 -0
  1255. package/dist/utils/uiNotice.js +1 -1
  1256. package/dist/utils/workspaceResourceEvents.d.ts +7 -0
  1257. package/dist/utils/workspaceResourceEvents.js +6 -0
  1258. package/dist/utils/workspaceSyncPresentation.d.ts +24 -0
  1259. package/dist/utils/workspaceSyncPresentation.js +243 -6
  1260. package/package.json +69 -21
  1261. package/dist/components/features/AgentsModule.d.ts +0 -18
  1262. package/dist/components/features/AgentsModule.js +0 -479
  1263. package/dist/components/features/InitiativesModule.d.ts +0 -22
  1264. package/dist/components/features/InitiativesModule.js +0 -33
  1265. package/dist/components/features/WorkflowsModule.d.ts +0 -27
  1266. package/dist/components/features/WorkflowsModule.js +0 -21
  1267. package/dist/components/features/settings/WorkflowEditor.d.ts +0 -15
  1268. package/dist/components/features/settings/WorkflowEditor.js +0 -245
  1269. package/dist/components/views/panels/DocumentFilterToolbar.d.ts +0 -10
  1270. package/dist/components/views/panels/DocumentFilterToolbar.js +0 -7
  1271. package/dist/components/views/standalone/modals/AccountHubModal.d.ts +0 -61
  1272. package/dist/components/views/standalone/modals/AccountHubModal.js +0 -108
  1273. package/dist/components/views/standalone/modals/EditProfileModal.d.ts +0 -19
  1274. package/dist/components/views/standalone/modals/EditProfileModal.js +0 -11
  1275. package/dist/hooks/ui/useResourceExport.d.ts +0 -21
  1276. package/dist/hooks/ui/useResourceExport.js +0 -87
  1277. package/dist/hooks/ui/useWorkflowTemplates.d.ts +0 -37
  1278. package/dist/hooks/ui/useWorkflowTemplates.js +0 -116
  1279. package/dist/mcp/clientProfileDefaults.d.ts +0 -12
  1280. package/dist/mcp/clientProfileDefaults.js +0 -41
  1281. package/dist/resources/templates/WORKFLOW_V2_POLICY.md +0 -55
  1282. package/dist/resources/templates/environments/aider.yaml +0 -14
  1283. package/dist/resources/templates/environments/antigravity.yaml +0 -10
  1284. package/dist/resources/templates/environments/claude.yaml +0 -10
  1285. package/dist/resources/templates/environments/cline.yaml +0 -10
  1286. package/dist/resources/templates/environments/codex.yaml +0 -13
  1287. package/dist/resources/templates/environments/copilot.yaml +0 -10
  1288. package/dist/resources/templates/environments/cursor.yaml +0 -9
  1289. package/dist/resources/templates/environments/gemini.yaml +0 -9
  1290. package/dist/resources/templates/environments/windsurf.yaml +0 -10
  1291. package/dist/resources/templates/workflow-sources/README.md +0 -9
  1292. package/dist/resources/templates/workflow-sources/workflowDocs.mjs +0 -530
  1293. package/dist/resources/templates/workflow-sources/workflowEditorOverrides.json +0 -1
  1294. package/dist/resources/templates/workflows/collaborate.yaml +0 -109
  1295. package/dist/resources/templates/workflows/do.yaml +0 -87
  1296. package/dist/resources/templates/workflows/evaluate.yaml +0 -116
  1297. package/dist/resources/templates/workflows/execute.yaml +0 -156
  1298. package/dist/resources/templates/workflows/plan.yaml +0 -118
  1299. package/dist/resources/templates/workflows/review.yaml +0 -114
  1300. package/dist/services/formatTransformers.d.ts +0 -29
  1301. package/dist/services/formatTransformers.js +0 -56
  1302. package/dist/services/templateEngine.d.ts +0 -46
  1303. package/dist/services/templateEngine.js +0 -148
  1304. package/dist/shared/workflowDefaults.d.ts +0 -9
  1305. package/dist/shared/workflowDefaults.js +0 -11
  1306. package/dist/ui/agent-logos/Gemini CLI.jpeg +0 -0
  1307. package/dist/ui/agent-logos/antigravity.jpeg +0 -0
  1308. package/dist/ui/agent-logos/chatgpt.png +0 -0
  1309. package/dist/ui/agent-logos/claude-code.jpeg +0 -0
  1310. package/dist/ui/agent-logos/codex.jpeg +0 -0
  1311. package/dist/ui/agent-logos/cursor.png +0 -0
  1312. package/dist/ui/agent-logos/openclaw.jpeg +0 -0
  1313. package/dist/ui/agent-logos/windsurf.png +0 -0
  1314. package/dist/ui/assets/AgentsModule-C4LcqhcZ.js +0 -1
  1315. package/dist/ui/assets/AnnotatedAttachmentWorkspace-B-Dq22d2.js +0 -3
  1316. package/dist/ui/assets/AnnotatedAttachmentWorkspace-BVKew-mH.css +0 -1
  1317. package/dist/ui/assets/ContextAttachmentManager-DsXPTvi-.js +0 -3
  1318. package/dist/ui/assets/DocumentWorkspace-CxA1wO3U.js +0 -252
  1319. package/dist/ui/assets/DocumentWorkspace-D4rJKXzd.css +0 -1
  1320. package/dist/ui/assets/EntityActivityTimeline-B8nSe8l3.js +0 -1
  1321. package/dist/ui/assets/EntityActivityTimeline-DyqvvhuF.css +0 -1
  1322. package/dist/ui/assets/InitiativesModule-VY95v38E.js +0 -1
  1323. package/dist/ui/assets/PlansPage-CQbKDv1a.js +0 -1
  1324. package/dist/ui/assets/PlansPage-DeAzWYTb.css +0 -1
  1325. package/dist/ui/assets/TaskContextUpload-DvDlNpHC.js +0 -1
  1326. package/dist/ui/assets/TaskSettings-CUWbYYtP.js +0 -12
  1327. package/dist/ui/assets/WorkflowsModule-CgM3Jako.js +0 -5
  1328. package/dist/ui/assets/documentReferences-Do9YjrS3.js +0 -1
  1329. package/dist/ui/assets/index--mh3pktj.js +0 -5
  1330. package/dist/ui/assets/index-BawaaEXS.css +0 -1
  1331. package/dist/ui/assets/vendor-router-BbWMxlnO.js +0 -3
  1332. package/dist/ui/branding/logos/logo_black_01.png +0 -0
  1333. package/dist/ui/branding/logos/logo_black_02.png +0 -0
  1334. package/dist/ui/branding/logos/logo_white_01.png +0 -0
  1335. package/dist/ui/branding/logos/logo_white_02.png +0 -0
  1336. package/scripts/generate-workflow-templates.mjs +0 -134
  1337. package/src/resources/templates/WORKFLOW_V2_POLICY.md +0 -55
  1338. package/src/resources/templates/environments/aider.yaml +0 -14
  1339. package/src/resources/templates/environments/antigravity.yaml +0 -10
  1340. package/src/resources/templates/environments/claude.yaml +0 -10
  1341. package/src/resources/templates/environments/cline.yaml +0 -10
  1342. package/src/resources/templates/environments/codex.yaml +0 -13
  1343. package/src/resources/templates/environments/copilot.yaml +0 -10
  1344. package/src/resources/templates/environments/cursor.yaml +0 -9
  1345. package/src/resources/templates/environments/gemini.yaml +0 -9
  1346. package/src/resources/templates/environments/windsurf.yaml +0 -10
  1347. package/src/resources/templates/workflow-sources/README.md +0 -9
  1348. package/src/resources/templates/workflow-sources/workflowDocs.mjs +0 -530
  1349. package/src/resources/templates/workflow-sources/workflowEditorOverrides.json +0 -1
  1350. package/src/resources/templates/workflows/collaborate.yaml +0 -109
  1351. package/src/resources/templates/workflows/do.yaml +0 -87
  1352. package/src/resources/templates/workflows/evaluate.yaml +0 -116
  1353. package/src/resources/templates/workflows/execute.yaml +0 -156
  1354. package/src/resources/templates/workflows/plan.yaml +0 -118
  1355. package/src/resources/templates/workflows/review.yaml +0 -114
  1356. /package/dist/ui/branding/logos/{logo_dark.svg → logo_dark_no_bg.svg} +0 -0
  1357. /package/dist/ui/branding/logos/{logo_favicon.svg → logo_favicon_light.svg} +0 -0
  1358. /package/dist/ui/branding/logos/{logo_light.svg → logo_light_no_bg.svg} +0 -0
@@ -1,46 +0,0 @@
1
- import { Environment } from '../types.js';
2
- export interface WorkflowTemplate {
3
- name: string;
4
- description: string;
5
- type: 'workflow' | 'command';
6
- metadata?: Record<string, any>;
7
- content: {
8
- default: string;
9
- [envId: string]: string;
10
- };
11
- variables?: string[];
12
- }
13
- export interface EnvironmentConfig {
14
- id: string;
15
- name: string;
16
- icon?: string;
17
- workflows: {
18
- directory: string;
19
- format: 'toml' | 'markdown' | 'mdc';
20
- filenamePattern: string;
21
- overrides?: Record<string, string | {
22
- filename: string;
23
- strategy?: 'overwrite' | 'inject' | 'append';
24
- }>;
25
- };
26
- mcp?: {
27
- prefix: string;
28
- };
29
- }
30
- export declare class TemplateEngine {
31
- private templatesDir;
32
- private sanitizeMcpIdentifier;
33
- constructor(templatesDir?: string);
34
- getTemplatePath(name: string): string;
35
- listTemplates(): string[];
36
- getEnvironmentPath(envId: string): string;
37
- listEnvironments(): Environment[];
38
- loadTemplate(name: string): WorkflowTemplate;
39
- loadEnvironment(envId: string): EnvironmentConfig;
40
- processTemplate(templateName: string, envId: string, variables?: Record<string, string>): {
41
- filename: string;
42
- content: string;
43
- strategy: 'overwrite' | 'inject' | 'append';
44
- };
45
- private substituteVariables;
46
- }
@@ -1,148 +0,0 @@
1
- import yaml from 'js-yaml';
2
- import { existsSync, readdirSync, readFileSync } from 'fs';
3
- import path from 'path';
4
- import { fileURLToPath } from 'url';
5
- import { formatTransformers } from './formatTransformers.js';
6
- const __dirname = path.dirname(fileURLToPath(import.meta.url));
7
- export class TemplateEngine {
8
- templatesDir;
9
- sanitizeMcpIdentifier(value) {
10
- const normalized = String(value || '')
11
- .replace(/[^a-zA-Z0-9_-]+/g, '-')
12
- .replace(/-+/g, '-')
13
- .replace(/^[-_]+|[-_]+$/g, '');
14
- return normalized || 'taskforce';
15
- }
16
- constructor(templatesDir) {
17
- if (templatesDir) {
18
- this.templatesDir = templatesDir;
19
- }
20
- else {
21
- // Locate templates directory relative to this service file
22
- // Works for both src/ (dev) and dist/ (prod) structure
23
- // src/services/templateEngine.ts -> src/resources/templates
24
- this.templatesDir = path.resolve(__dirname, '../resources/templates');
25
- }
26
- }
27
- getTemplatePath(name) {
28
- return path.join(this.templatesDir, 'workflows', `${name}.yaml`);
29
- }
30
- listTemplates() {
31
- const workflowsDir = path.join(this.templatesDir, 'workflows');
32
- if (!existsSync(workflowsDir))
33
- return [];
34
- return readdirSync(workflowsDir)
35
- .filter(file => file.endsWith('.yaml'))
36
- .map(file => file.replace('.yaml', ''));
37
- }
38
- getEnvironmentPath(envId) {
39
- return path.join(this.templatesDir, 'environments', `${envId}.yaml`);
40
- }
41
- listEnvironments() {
42
- const envDir = path.join(this.templatesDir, 'environments');
43
- if (!existsSync(envDir))
44
- return [];
45
- const envs = readdirSync(envDir)
46
- .filter(file => file.endsWith('.yaml'))
47
- .map(file => {
48
- const envId = file.replace('.yaml', '');
49
- try {
50
- const config = this.loadEnvironment(envId);
51
- return {
52
- id: config.id,
53
- name: config.name,
54
- icon: config.icon,
55
- directory: config.workflows.directory
56
- };
57
- }
58
- catch (e) {
59
- console.error(`Failed to load environment config ${file}:`, e);
60
- return null;
61
- }
62
- });
63
- return envs.filter((env) => env !== null);
64
- }
65
- loadTemplate(name) {
66
- const filePath = this.getTemplatePath(name);
67
- if (!existsSync(filePath)) {
68
- throw new Error(`Template not found: ${name}`);
69
- }
70
- return yaml.load(readFileSync(filePath, 'utf-8'));
71
- }
72
- loadEnvironment(envId) {
73
- const filePath = this.getEnvironmentPath(envId);
74
- if (!existsSync(filePath)) {
75
- throw new Error(`Environment not found: ${envId}`);
76
- }
77
- return yaml.load(readFileSync(filePath, 'utf-8'));
78
- }
79
- processTemplate(templateName, envId, variables = {}) {
80
- const template = this.loadTemplate(templateName);
81
- const envConfig = this.loadEnvironment(envId);
82
- // 1. Select Content (Env-specific or Default)
83
- let rawContent = template.content[envId] || template.content.default;
84
- // 2. Substitute Variables
85
- // Add default variables from environment config
86
- const effectiveVars = { ...variables };
87
- if (envConfig.mcp?.prefix) {
88
- const projectName = this.sanitizeMcpIdentifier(variables['projectName'] || 'taskforce');
89
- const dynamicPrefix = envConfig.mcp.prefix.replace('{projectName}', projectName);
90
- effectiveVars['MCP_PREFIX'] = dynamicPrefix;
91
- }
92
- const processedContent = this.substituteVariables(rawContent, effectiveVars);
93
- // 3. Transform Format
94
- let finalContent = processedContent;
95
- const metadata = {
96
- name: template.name,
97
- description: template.description,
98
- ...(template.metadata || {})
99
- };
100
- if (envConfig.workflows.format === 'toml') {
101
- finalContent = formatTransformers.toToml(processedContent, metadata);
102
- }
103
- else if (envConfig.workflows.format === 'markdown') {
104
- finalContent = formatTransformers.toMarkdown(processedContent, metadata);
105
- }
106
- else if (envConfig.workflows.format === 'mdc') {
107
- finalContent = formatTransformers.toMdc(processedContent, metadata);
108
- }
109
- // 4. Generate Filename
110
- const extMap = {
111
- 'toml': 'toml',
112
- 'markdown': 'md',
113
- 'mdc': 'mdc'
114
- };
115
- const ext = extMap[envConfig.workflows.format] || 'txt';
116
- let filenamePattern = envConfig.workflows.filenamePattern;
117
- let strategy = 'overwrite';
118
- // Check for overrides
119
- if (envConfig.workflows.overrides && envConfig.workflows.overrides[template.name]) {
120
- const override = envConfig.workflows.overrides[template.name];
121
- if (typeof override === 'string') {
122
- filenamePattern = override;
123
- }
124
- else {
125
- filenamePattern = override.filename;
126
- if (override.strategy) {
127
- strategy = override.strategy;
128
- }
129
- }
130
- }
131
- const filename = filenamePattern
132
- .replace('{name}', template.name)
133
- .replace('{ext}', ext);
134
- return {
135
- filename,
136
- content: finalContent,
137
- strategy
138
- };
139
- }
140
- substituteVariables(content, vars) {
141
- let result = content;
142
- for (const [key, value] of Object.entries(vars)) {
143
- const regex = new RegExp(`{{${key}}}`, 'g');
144
- result = result.replace(regex, value);
145
- }
146
- return result;
147
- }
148
- }
@@ -1,9 +0,0 @@
1
- export interface DefaultWorkflowDefinition {
2
- value: string;
3
- label: string;
4
- color?: string;
5
- icon?: string;
6
- }
7
- export declare const DEFAULT_WORKFLOW_VALUE = "default";
8
- export declare const BUILTIN_WORKFLOW_DEFINITIONS: readonly DefaultWorkflowDefinition[];
9
- export declare function cloneDefaultWorkflowDefinitions(): DefaultWorkflowDefinition[];
@@ -1,11 +0,0 @@
1
- export const DEFAULT_WORKFLOW_VALUE = 'default';
2
- export const BUILTIN_WORKFLOW_DEFINITIONS = [
3
- { value: DEFAULT_WORKFLOW_VALUE, label: 'Default', color: 'slate-500', icon: 'Circle' },
4
- { value: 'evaluate', label: 'Evaluate', color: 'amber-500', icon: 'Search' },
5
- { value: 'collaborate', label: 'Collaborate', color: 'blue-500', icon: 'Users' },
6
- { value: 'plan', label: 'Plan', color: 'teal-500', icon: 'FileText' },
7
- { value: 'review', label: 'Review', color: 'violet-500', icon: 'Microscope' },
8
- ];
9
- export function cloneDefaultWorkflowDefinitions() {
10
- return BUILTIN_WORKFLOW_DEFINITIONS.map((workflow) => ({ ...workflow }));
11
- }
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
@@ -1 +0,0 @@
1
- import{r as c,j as e}from"./vendor-react-CKJs5o3c.js";import{s as Ue,p as _,u as ie,v as De,w as se,x as le,y as we,t as r,E as Te,z as Me,B as ke,C as fe,F as b,G as oe}from"./index--mh3pktj.js";import{a0 as Re,x as $e,h as Ee,B as ne,m as C,b as Le,$ as Be,a5 as Ge}from"./vendor-icons-CLnehDTw.js";import"./vendor-markdown-BUxTU7dS.js";import"./vendor-dnd-DRzYolkg.js";import"./vendor-router-BbWMxlnO.js";function Fe(l){return typeof l.avatarUrl=="string"&&l.avatarUrl.trim().length>0}function K(l){return l?fe(l.avatarUrl,l.avatarRevision,l.avatarUpdatedAt):""}function ze(l){return l?fe(l.avatarSourceUrl,l.avatarRevision,l.avatarUpdatedAt):""}function He(l){return l.find(Fe)||l[0]}function ce(l){return`${l.seatScope||"unknown"}:${l.name.trim().toLowerCase()}`}function Oe(l){const m=Math.max(0,l-1);return`${m} duplicate${m===1?"":"s"}`}function de(l){return!l||typeof l!="object"?null:{used:Math.max(0,Number(l.used||0)),limit:l.limit===null||l.limit===void 0?null:Math.max(0,Number(l.limit||0)),remaining:l.remaining===null||l.remaining===void 0?null:Math.max(0,Number(l.remaining||0))}}function pe(l,m){const U=m?.variant==="inline"?`${r.aiProfileSeatScopeIcon} ${r.aiProfileSeatScopeIconInline}`:m?.variant==="detail"?`${r.aiProfileSeatScopeIcon} ${r.aiProfileSeatScopeIconDetail}`:r.aiProfileSeatScopeIcon;return l==="cloud_metered"?e.jsx("span",{className:`${U} ${r.aiProfileSeatScopeIconCloud}`,title:"Cloud MCP","aria-label":"Cloud MCP",children:e.jsx(Be,{size:20})}):l==="local_unmetered"?e.jsx("span",{className:`${U} ${r.aiProfileSeatScopeIconLocal}`,title:"Local MCP","aria-label":"Local MCP",children:e.jsx(Ge,{size:20})}):null}function qe({workspaceId:l,cloudAuthConfigured:m=!1,authSessionResolved:U=!1,isAuthenticated:ue=!1,cloudAiProfileSeatUsage:me=null,agentTrayOpen:E=!1,onCloseAgentTray:he,mcpSettingsNode:V=null}){const[S,L]=c.useState([]),[ve,ge]=c.useState(null),[B,J]=c.useState(!1),[h,D]=c.useState(null),[w,v]=c.useState(null),[T,x]=c.useState(null),[W,G]=c.useState(null),[ye,Y]=c.useState(!1),[P,j]=c.useState(null),[q,Q]=c.useState(null),[X,M]=c.useState(!1),[Pe,g]=c.useState(null),k=c.useCallback(async()=>{if(l){J(!0);try{const a=`/api/taskforce/workspace/assignee-options?workspaceId=${encodeURIComponent(l)}&kind=agent`,t=await fetch(a,{credentials:"include"}),i=t.ok?await t.json().catch(()=>({})):{},o=de(i?.aiProfileSeatUsage),d=Array.isArray(i?.assignees)?i.assignees.filter(s=>s.kind==="agent").map(s=>({id:String(s.value||""),name:String(s.label||s.value||"Unknown Agent"),username:String(s.username||s.value||""),icon:String(s.icon||"Bot"),color:String(s.color||"#6B7280"),avatarUrl:typeof s.avatarUrl=="string"?s.avatarUrl:null,avatarSourceUrl:typeof s.avatarSourceUrl=="string"?s.avatarSourceUrl:null,avatarRevision:Number.isFinite(Number(s.avatarRevision))?Math.max(0,Math.floor(Number(s.avatarRevision))):0,avatarUpdatedAt:typeof s.avatarUpdatedAt=="string"?s.avatarUpdatedAt:null,kind:String(s.kind||"agent"),description:typeof s.description=="string"?s.description:null,role:typeof s.role=="string"?s.role:null,provider:typeof s.provider=="string"?s.provider:null,model:typeof s.model=="string"?s.model:null,surfaceType:_(s.surfaceType),seatScope:Ue(s.seatScope),archivedAt:typeof s.archivedAt=="string"?s.archivedAt:null,createdAt:String(s.createdAt||""),updatedAt:String(s.updatedAt||s.createdAt||""),lastActiveAt:typeof s.lastActiveAt=="string"?s.lastActiveAt:null})):[];L(d),ge(o),x(s=>s&&!d.some(p=>p.id===s.profileId)?null:s),G(s=>s&&!d.some(p=>p.id===s.profileId)?null:s)}finally{J(!1)}}},[l]);c.useEffect(()=>{k()},[k]);const R=c.useMemo(()=>{const a=new Map;for(const t of S){const i=ie(t.surfaceType);a.has(i)||a.set(i,new Map);const o=a.get(i),d=ce(t);o.has(d)||o.set(d,[]),o.get(d).push(t)}return De.map(t=>({section:t,label:se(t),groups:Array.from(a.get(t)?.entries()||[]).map(([i,o])=>({groupId:`${t}:${i}`,section:t,sectionLabel:se(t),profiles:o,primaryProfile:He(o)}))})).filter(t=>t.groups.length>0)},[S]),y=c.useMemo(()=>R.flatMap(a=>a.groups),[R]),n=c.useMemo(()=>y.find(a=>a.groupId===P)||y[0]||null,[y,P]),u=c.useMemo(()=>S.find(a=>a.id===q)||null,[S,q]);c.useEffect(()=>{if(!y.length){P!==null&&j(null);return}(!P||!y.some(a=>a.groupId===P))&&j(y[0].groupId)},[y,P]);const Ae=async(a,t)=>{v(null),x(null);try{const i=await fetch("/api/taskforce/workspace/ai-profiles/merge",{method:"POST",credentials:"include",headers:{"Content-Type":"application/json"},body:JSON.stringify({keepId:a,mergeId:t})}),o=await i.json().catch(()=>({}));if(!i.ok){v({type:"error",message:String(o?.error||"Failed to merge AI profiles.")});return}D(null),v({type:"success",message:"AI profiles merged."}),await k(),b({workspaceId:l,profileId:a,reason:"merge"})}catch{v({type:"error",message:"Failed to merge AI profiles."})}},Z=async a=>{if(window.confirm(`Remove ${a.name} from the active roster? This frees an AI profile seat and preserves task and comment history.`)){x(null),v(null);try{const i=await fetch("/api/taskforce/workspace/ai-profiles/archive",{method:"POST",credentials:"include",headers:{"Content-Type":"application/json"},body:JSON.stringify({profileId:a.id,reason:"manual_archive"})}),o=await i.json().catch(()=>({}));if(!i.ok){x({profileId:a.id,message:String(o?.error||"Failed to remove AI profile from roster.")});return}(h?.keepId===a.id||h?.mergeId===a.id)&&D(null),v({type:"success",message:"AI profile removed from active roster."}),await k(),b({workspaceId:l,profileId:a.id,reason:"archive"})}catch{x({profileId:a.id,message:"Failed to remove AI profile from roster."})}}},Se=async(a,t)=>{const i=_(t),o=new Set(a.profiles.map(p=>p.surfaceType??"")),d=i??"";if(o.size===1&&o.has(d))return;Y(!0),G(null),v(null);const s=[];try{for(const f of a.profiles){const I=await fetch("/api/taskforce/workspace/ai-profiles/surface-type",{method:"POST",credentials:"include",headers:{"Content-Type":"application/json"},body:JSON.stringify({profileId:f.id,surfaceType:i})}),H=await I.json().catch(()=>({}));if(!I.ok||!H?.profile)throw new Error(String(H?.error||"Failed to update AI profile category."));const O=H.profile;s.push({...f,surfaceType:_(O.surfaceType),updatedAt:typeof O.updatedAt=="string"?O.updatedAt:f.updatedAt})}const p=new Map(s.map(f=>[f.id,f]));L(f=>f.map(I=>p.get(I.id)||I));const A=p.get(a.primaryProfile.id)||{...a.primaryProfile,surfaceType:i},Ce=ie(A.surfaceType);j(`${Ce}:${ce(A)}`),v({type:"success",message:"AI profile category updated."});for(const f of s)b({workspaceId:l,profileId:f.id,reason:"update"})}catch(p){G({profileId:a.primaryProfile.id,message:String(p?.message||"Failed to update AI profile category.")})}finally{Y(!1)}},ee=a=>new Promise((t,i)=>{const o=new FileReader;o.onload=()=>t(String(o.result||"")),o.onerror=()=>i(new Error("Failed to read image file.")),o.readAsDataURL(a)}),ae=a=>{const t=String(a?.id||"").trim();t&&L(i=>i.map(o=>o.id===t?{...o,avatarUrl:typeof a.avatarUrl=="string"?a.avatarUrl:null,avatarSourceUrl:typeof a.avatarSourceUrl=="string"?a.avatarSourceUrl:null,avatarRevision:Number.isFinite(Number(a.avatarRevision))?Math.max(0,Math.floor(Number(a.avatarRevision))):o.avatarRevision,avatarUpdatedAt:typeof a.avatarUpdatedAt=="string"?a.avatarUpdatedAt:o.avatarUpdatedAt,updatedAt:typeof a.updatedAt=="string"?a.updatedAt:o.updatedAt}:o))},xe=async(a,t,i)=>{const o=await ee(t),d=i?await ee(i):null,s={profileId:a,displayImage:{dataUrl:o,mimeType:t.type||"application/octet-stream",originalName:t.name||"display-avatar"}};i&&d&&(s.sourceImage={dataUrl:d,mimeType:i.type||"application/octet-stream",originalName:i.name||"source-avatar"});const p=await fetch("/api/taskforce/workspace/ai-profiles/avatar/upload",{method:"POST",credentials:"include",headers:{"Content-Type":"application/json"},body:JSON.stringify(s)}),A=await p.json().catch(()=>({}));if(!p.ok||!A?.profile)throw new Error(String(A?.error||"Failed to update AI profile avatar."));ae(A.profile),b({workspaceId:l,profileId:a,reason:"avatar"})},je=async a=>{const t=await fetch("/api/taskforce/workspace/ai-profiles/avatar",{method:"POST",credentials:"include",headers:{"Content-Type":"application/json"},body:JSON.stringify({profileId:a,avatarUrl:null,avatarSourceUrl:null})}),i=await t.json().catch(()=>({}));if(!t.ok||!i?.profile)throw new Error(String(i?.error||"Failed to update AI profile avatar."));ae(i.profile),b({workspaceId:l,profileId:a,reason:"avatar"})},Ne=async(a,t)=>{if(!u)return!1;if(!a.type.startsWith("image/"))return g("AI profile photo must be an image file."),!1;M(!0),g(null);try{const i=await oe(a,{maxBytes:5242880});if(i.exceededLimit)throw new Error(a.type==="image/gif"?"Animated GIF AI profile photos must be 5 MB or smaller.":"AI profile photo must be 5 MB or smaller.");const o=i.file;let d=null;if(t){const s=await oe(t,{maxBytes:5242880});if(s.exceededLimit)throw new Error(t.type==="image/gif"?"Animated GIF AI profile photos must be 5 MB or smaller.":"AI profile source photo must be 5 MB or smaller.");d=s.file}return await xe(u.id,o,d),!0}catch(i){return g(String(i?.message||"Failed to update AI profile photo.")),!1}finally{M(!1)}},Ie=async()=>{if(u){M(!0),g(null);try{await je(u.id)}catch(a){g(String(a?.message||"Failed to remove AI profile photo."))}finally{M(!1)}}},N=a=>{const t=String(a||"").trim();if(!t)return"Unknown";const i=Date.parse(t);return Number.isFinite(i)?new Date(i).toLocaleString(void 0,{dateStyle:"medium",timeStyle:"short"}):t},re=c.useMemo(()=>{if(!n)return{attributes:[],dates:[]};const a=n.primaryProfile,t=i=>i||"Not set";return{attributes:[{label:"Category",value:a.surfaceType?le(a.surfaceType):""},{label:"Connection",value:a.seatScope?we(a.seatScope):""},{label:"Provider",value:a.provider||""},{label:"Model",value:a.model||""}].map(i=>({...i,value:t(i.value)})),dates:[{label:"Status",value:a.archivedAt?"Retired":"Active"},{label:"Recruited",value:N(a.createdAt)},{label:"Last updated",value:N(a.updatedAt)},{label:"Last active",value:N(a.lastActiveAt)}].map(i=>({...i,value:t(i.value)}))}},[n]),be=!!n&&n.profiles.length>1,te=m&&U&&!ue,$=m?de(me):ve,F=te?"Log into account for Cloud agents":$?`${$.used}/${$.limit===null?"Unlimited":$.limit}`:null,z=!!V;return e.jsxs("section",{className:`${r.agentsModuleRoot} ${z?r.agentsModuleWithTray:""} ${z&&E?r.agentsModuleTrayOpen:""}`.trim(),children:[z&&e.jsxs("aside",{className:`${r.agentTrayPanel} ${E?r.agentTrayPanelOpen:""}`.trim(),"aria-label":"Agent MCP settings tray","aria-hidden":!E,children:[e.jsxs("div",{className:r.agentTrayHeader,children:[e.jsxs("span",{className:r.agentTrayTitle,children:[e.jsx(Re,{size:14}),"MCP Settings"]}),e.jsx("button",{type:"button",className:"tf-control-icon",onClick:he,title:"Collapse agent tray","aria-label":"Collapse agent tray",children:e.jsx($e,{size:16})})]}),e.jsx("div",{className:`${r.agentTrayContent} tf-scrollbar tf-scrollbar--track-transparent`,children:e.jsx("div",{className:r.agentTrayContentInner,children:V})})]}),e.jsx("div",{className:r.agentsModuleContent,children:e.jsx("div",{className:`${r.settingGroup} ${r.agentsModuleGroup}`,children:e.jsxs("div",{children:[e.jsx("h4",{className:r.settingSubTitle,children:"Registered AI Profiles"}),e.jsx("p",{className:`${r.settingsHint} ${r.marginBottom12}`,children:"AI agents register profiles when connecting via MCP. Merge duplicates created when a token was lost, or remove inactive profiles from the active roster to free seats while preserving history."}),F&&e.jsx("div",{className:r.aiProfileSeatSummary,children:te?F:`Registered Cloud Agents: ${F}`}),B&&e.jsxs("div",{className:r.settingsHint,children:[e.jsx(Ee,{size:13,className:r.spinner})," Loading profiles…"]}),!B&&S.length===0&&e.jsx("div",{className:r.settingsHint,children:"No AI profiles registered yet."}),!B&&R.length>0&&e.jsxs("div",{className:r.aiProfilesExplorer,children:[e.jsx("div",{className:`${r.aiProfilesListPane} tf-scrollbar tf-scrollbar--track-transparent`,children:e.jsx("div",{className:r.aiProfilesList,children:R.map(a=>e.jsxs("div",{className:r.aiProfilesSection,children:[e.jsx("div",{className:r.aiProfilesSectionHeader,children:a.label}),a.groups.map(t=>{const i=n?.groupId===t.groupId,o=t.primaryProfile;return e.jsxs("div",{role:"button",tabIndex:0,className:`${r.aiProfileGroup} ${t.profiles.length>1?r.aiProfileGroupDuplicate:""} ${i?r.aiProfileGroupSelected:""}`,onClick:()=>j(t.groupId),onKeyDown:d=>{d.key!=="Enter"&&d.key!==" "||(d.preventDefault(),j(t.groupId))},"aria-pressed":i,children:[pe(o.seatScope),e.jsxs("div",{className:r.aiProfileGroupHeader,children:[e.jsx("span",{className:r.aiProfileGroupAvatar,style:{color:o.color},children:o.avatarUrl?e.jsx("img",{src:K(o),alt:""}):e.jsx(ne,{size:22})}),e.jsxs("span",{className:r.aiProfileGroupIdentity,children:[e.jsx("span",{className:r.aiProfileName,children:o.name}),e.jsxs("span",{className:r.aiProfileHandle,children:["@",o.username]}),e.jsx("span",{className:r.aiProfileRole,children:o.role||"Role not set"}),t.profiles.length>1&&e.jsxs("span",{className:r.aiProfileDuplicateBadge,children:[e.jsx(C,{size:11})," ",Oe(t.profiles.length)]})]})]})]},t.groupId)})]},a.section))})}),n&&e.jsx("div",{className:r.aiProfileDetailPane,children:e.jsxs("div",{className:r.aiProfileDetailCard,children:[pe(n.primaryProfile.seatScope,{variant:"detail"}),e.jsxs("div",{className:r.aiProfileDetailHero,children:[e.jsx(Te,{label:"Edit AI profile photo",imageUrl:K(n.primaryProfile),fallback:e.jsx(ne,{size:38}),accentColor:n.primaryProfile.color,size:176,width:153,height:207,radius:6,editBadgeSize:28,editIconSize:14,className:r.aiProfileDetailAvatar,onClick:()=>{g(null),Q(n.primaryProfile.id)}}),e.jsxs("div",{className:r.aiProfileDetailHeading,children:[e.jsx("div",{className:r.aiProfileDetailTitleRow,children:e.jsx("h5",{className:r.aiProfileDetailTitle,children:n.primaryProfile.name})}),e.jsxs("div",{className:r.aiProfileDetailMetaRow,children:[e.jsxs("span",{className:r.aiProfileDetailHandle,children:["@",n.primaryProfile.username]}),n.profiles.length>1&&e.jsxs("span",{className:r.aiProfileDetailLinkedCount,children:[n.profiles.length," linked"]})]}),e.jsxs("div",{className:r.aiProfileDetailRole,children:["Role: ",n.primaryProfile.role||"Not set"]}),n.primaryProfile.description&&e.jsx("div",{className:r.aiProfileDetailDescription,children:n.primaryProfile.description}),e.jsxs("div",{className:r.aiProfileSignatureColor,children:[e.jsx("span",{children:"Signature color"}),e.jsx("span",{className:r.aiProfileSignatureSwatch,style:{backgroundColor:n.primaryProfile.color},"aria-hidden":"true"}),e.jsx("span",{children:n.primaryProfile.color})]})]})]}),e.jsxs("div",{className:r.aiProfileDetailDataList,children:[e.jsx("div",{className:r.aiProfileDetailDataGroup,children:re.attributes.map(a=>e.jsxs("div",{className:r.aiProfileDetailDataRow,children:[e.jsx("span",{className:r.aiProfileDetailDataLabel,children:a.label}),a.label==="Category"?e.jsx("span",{className:r.aiProfileDetailDataValue,children:e.jsxs("select",{className:r.aiProfileStatusSelect,"aria-label":"Agent category",value:n.primaryProfile.surfaceType??"",disabled:ye,onChange:t=>{Se(n,t.target.value)},children:[e.jsx("option",{value:"",children:"Unclassified"}),Me.map(t=>e.jsx("option",{value:t,children:le(t)},t))]})}):e.jsx("span",{className:r.aiProfileDetailDataValue,children:a.value})]},a.label))}),e.jsx("div",{className:`${r.aiProfileDetailDataGroup} ${r.aiProfileDetailDateGroup}`,children:re.dates.map(a=>e.jsxs("div",{className:r.aiProfileDetailDataRow,children:[e.jsx("span",{className:r.aiProfileDetailDataLabel,children:a.label}),a.label==="Status"?e.jsx("span",{className:r.aiProfileDetailDataValue,children:e.jsxs("select",{className:r.aiProfileStatusSelect,"aria-label":"Agent roster status",value:n.primaryProfile.archivedAt?"retired":"active",onChange:t=>{t.target.value==="retire"&&Z(n.primaryProfile)},children:[e.jsx("option",{value:"active",children:"Active"}),n.primaryProfile.archivedAt?e.jsx("option",{value:"retired",children:"Retired"}):e.jsx("option",{value:"retire",children:"Retire from roster"})]})}):e.jsx("span",{className:r.aiProfileDetailDataValue,children:a.value})]},a.label))})]}),W?.profileId===n.primaryProfile.id&&e.jsxs("div",{className:r.aiProfileInlineError,role:"alert",children:[e.jsx(C,{size:12}),e.jsx("span",{children:W.message})]}),be?e.jsxs("div",{className:r.aiProfileInstanceSection,children:[e.jsxs("div",{className:r.aiProfileInstanceSectionHeader,children:[e.jsx("span",{children:"Profile instances"}),e.jsx("span",{className:r.settingsHint,children:"Choose a keeper here if duplicates need to be merged."})]}),e.jsx("div",{className:r.aiProfileInstanceList,children:n.profiles.map(a=>e.jsxs("div",{className:r.aiProfileInstanceCard,children:[e.jsxs("div",{className:r.aiProfileInstanceTopRow,children:[e.jsxs("div",{children:[e.jsxs("div",{className:r.aiProfileInstanceName,children:["@",a.username]}),e.jsx("div",{className:r.aiProfileIdChip,children:a.id})]}),h?.keepId===a.id&&e.jsx("span",{className:r.aiProfileKeepBadge,children:"Keeping"})]}),e.jsxs("div",{className:r.aiProfileInstanceMeta,children:[e.jsxs("span",{children:["Created ",N(a.createdAt)]}),e.jsxs("span",{children:["Updated ",N(a.updatedAt)]})]}),h?.keepId!==a.id&&e.jsx("button",{className:r.secondaryHeaderBtn,title:"Keep this profile, merge others into it",onClick:()=>{const t=n.profiles.find(i=>i.id!==a.id)?.id;t&&D({keepId:a.id,mergeId:t})},children:"Keep this"}),T?.profileId===a.id&&e.jsxs("div",{className:r.aiProfileInlineError,role:"alert",children:[e.jsx(C,{size:12}),e.jsx("span",{children:T.message})]}),e.jsx("button",{className:r.aiProfileDangerTextButton,title:"Remove this profile from the active roster",onClick:()=>{Z(a)},children:"Remove from roster"})]},a.id))}),h&&n.profiles.some(a=>a.id===h.keepId)&&e.jsxs("div",{className:r.aiProfileMergeActions,children:[e.jsx("button",{className:r.dangerBtn,onClick:()=>{Ae(h.keepId,h.mergeId)},children:"Merge duplicates"}),e.jsx("button",{className:r.secondaryHeaderBtn,onClick:()=>D(null),children:"Cancel"})]})]}):e.jsxs("div",{className:r.aiProfileIdFooter,children:[e.jsx("div",{className:r.aiProfileIdFooterValue,children:n.primaryProfile.id}),T?.profileId===n.primaryProfile.id&&e.jsxs("div",{className:r.aiProfileInlineError,role:"alert",children:[e.jsx(C,{size:12}),e.jsx("span",{children:T.message})]})]})]})})]}),w&&e.jsxs("div",{className:`${w.type==="success"?r.successMessage:r.errorMessage} ${r.marginTop12}`,children:[w.type==="success"?e.jsx(Le,{size:14}):e.jsx(C,{size:14}),w.message]})]})})}),e.jsx(ke,{isOpen:!!u,theme:"dark",title:"Edit AI Profile Photo",currentImageUrl:K(u),editorImageUrl:ze(u),fallbackInitial:(u?.name||"AI").charAt(0).toUpperCase(),accept:"image/png,image/jpeg,image/webp,image/gif",busy:X,hasPendingImage:!1,canRemove:!!u?.avatarUrl,error:Pe,notice:null,onClose:()=>{X||(Q(null),g(null))},onApplyImage:Ne,onRemoveImage:Ie})]})}export{qe as AgentsModule};
@@ -1,3 +0,0 @@
1
- import{j as t,r as s,R as aa}from"./vendor-react-CKJs5o3c.js";import{R as Fn,f as ge,e as Rt,g as Hn,t as za,M as na}from"./index--mh3pktj.js";import{a7 as Ua,x as Dn,w as On,p as zn,P as Un,c as sa,T as Ga,r as Gn,h as Ka,an as Kn,R as Wn,ao as Yn,ap as Xn,aq as Vn,ar as ia,C as la,as as qn,at as Za,au as Qa,av as en,aw as tn,g as Jn,f as Zn,b as ca}from"./vendor-icons-CLnehDTw.js";import"./vendor-markdown-BUxTU7dS.js";import"./vendor-dnd-DRzYolkg.js";import"./vendor-router-BbWMxlnO.js";function Qn({copied:r,disabled:l=!1,label:f,onClick:p,title:b="Copy image reference",ariaLabel:x,className:L=""}){return t.jsx(Fn,{copied:r,disabled:l,label:"",onClick:p,title:b,ariaLabel:x,className:L,children:f})}const es="_shell_17mlo_1",ts="_shellWithImageTray_17mlo_18",as="_shellImageTrayOpen_17mlo_22",ns="_imageTrayPanel_17mlo_26",ss="_imageTrayPanelOpen_17mlo_50",rs="_imageTrayHeader_17mlo_58",os="_imageTrayTitle_17mlo_73",is="_imageTraySearch_17mlo_85",ls="_imageTraySearchIcon_17mlo_91",cs="_imageTraySearchInput_17mlo_100",ds="_imageTrayList_17mlo_117",us="_imageTrayState_17mlo_129",ms="_imageTrayStateError_17mlo_130",fs="_imageTrayItem_17mlo_142",hs="_imageTrayItemActive_17mlo_164",ps="_imageTrayThumb_17mlo_174",gs="_imageTrayItemBody_17mlo_191",ys="_imageTrayItemTitle_17mlo_199",bs="_imageTrayItemTask_17mlo_200",xs="_imageTrayItemMetaDetails_17mlo_201",vs="_imageTrayItemMeta_17mlo_201",_s="_imageTrayItemReference_17mlo_239",Is="_panel_17mlo_246",ws="_sessionPanel_17mlo_252",ks="_detailPanel_17mlo_253",Ss="_sessionContextBar_17mlo_259",Ns="_sessionContextLeft_17mlo_270",Cs="_sessionContextRight_17mlo_271",js="_sessionContextLabel_17mlo_286",Ts="_sessionContextSpacer_17mlo_292",$s="_canvasPanel_17mlo_297",Rs="_canvasWorkspace_17mlo_304",Ps="_canvasMain_17mlo_311",Bs="_panelHeader_17mlo_318",Es="_panelHeaderText_17mlo_327",As="_panelTitle_17mlo_331",Ms="_canvasHeading_17mlo_335",Ls="_sessionActions_17mlo_339",Fs="_sessionList_17mlo_347",Hs="_annotationList_17mlo_348",Ds="_markerHelpModalBody_17mlo_363",Os="_openImageModalBody_17mlo_369",zs="_openImageField_17mlo_375",Us="_openImageActions_17mlo_379",Gs="_markerHelpItem_17mlo_385",Ks="_markerHelpHeader_17mlo_393",Ws="_markerHelpExample_17mlo_405",Ys="_sessionCard_17mlo_409",Xs="_annotationCard_17mlo_410",Vs="_sessionEmptyState_17mlo_427",qs="_sessionCardButton_17mlo_434",Js="_annotationCardButton_17mlo_444",Zs="_sessionCardBody_17mlo_454",Qs="_sessionCardActive_17mlo_460",er="_annotationCardActive_17mlo_461",tr="_annotationMeta_17mlo_471",ar="_annotationInstructionPreview_17mlo_478",nr="_annotationPreviewFooter_17mlo_486",sr="_annotationInstructionEditor_17mlo_493",rr="_annotationTypeField_17mlo_499",or="_annotationInstructionButton_17mlo_505",ir="_annotationInstructionField_17mlo_514",lr="_sessionMeta_17mlo_518",cr="_sessionTitle_17mlo_525",dr="_annotationTitle_17mlo_526",ur="_sessionTimestamp_17mlo_532",mr="_annotationKind_17mlo_533",fr="_annotationInstructionTypeIcon_17mlo_537",hr="_sessionInstructionPreview_17mlo_543",pr="_sessionInstructionEditor_17mlo_551",gr="_sessionCardFooter_17mlo_557",yr="_toolRail_17mlo_564",br="_canvasToolRail_17mlo_573",xr="_toolbarCluster_17mlo_594",vr="_toolbarViewportCluster_17mlo_601",_r="_toolbarSeparator_17mlo_605",Ir="_toolBtn_17mlo_611",wr="_toolRailButton_17mlo_615",kr="_toolbarButton_17mlo_625",Sr="_toolBtnActive_17mlo_630",Nr="_toolbarActions_17mlo_637",Cr="_toolbarSelectionActions_17mlo_646",jr="_toolbarColorPicker_17mlo_654",Tr="_colorPickerButton_17mlo_658",$r="_colorPickerSwatch_17mlo_663",Rr="_colorPickerPopover_17mlo_671",Pr="_colorOption_17mlo_686",Br="_colorOptionActive_17mlo_696",Er="_toolbarUtilities_17mlo_703",Ar="_toolbarGeometryFields_17mlo_711",Mr="_toolbarGeometryField_17mlo_711",Lr="_toolbarGeometryLabel_17mlo_724",Fr="_toolbarGeometryInput_17mlo_730",Hr="_iconButton_17mlo_735",Dr="_ghostBtn_17mlo_740",Or="_payloadBtn_17mlo_741",zr="_backToTaskBtn_17mlo_742",Ur="_canvasScroller_17mlo_762",Gr="_canvasFrame_17mlo_778",Kr="_canvasMedia_17mlo_785",Wr="_canvasStatusOverlay_17mlo_793",Yr="_canvasStatusCard_17mlo_805",Xr="_canvasImage_17mlo_818",Vr="_overlay_17mlo_825",qr="_overlaySelect_17mlo_831",Jr="_overlayPan_17mlo_835",Zr="_overlaySvg_17mlo_839",Qr="_overlayHitLayer_17mlo_848",eo="_arrowHitArea_17mlo_857",to="_canvasHandleHit_17mlo_864",ao="_canvasResizeHandleHit_17mlo_871",no="_canvasHandleVisible_17mlo_875",so="_pin_17mlo_892",ro="_note_17mlo_893",oo="_annotationNumberBadge_17mlo_910",io="_box_17mlo_935",lo="_boxNumberBadge_17mlo_944",co="_arrowNumberBadge_17mlo_950",uo="_boxSurface_17mlo_954",mo="_selected_17mlo_967",fo="_textInput_17mlo_984",ho="_textArea_17mlo_985",po="_select_17mlo_967",go="_sessionTitleInput_17mlo_992",yo="_sessionInstructionField_17mlo_997",bo="_detailEmpty_17mlo_1006",xo="_emptyState_17mlo_1007",vo="_payloadModalBody_17mlo_1019",_o="_payloadModalToolbar_17mlo_1026",Io="_payloadViewToggle_17mlo_1033",wo="_payloadModalActions_17mlo_1034",ko="_payloadModalPreview_17mlo_1041",So="_statusBar_17mlo_1056",No="_annotationSummary_17mlo_1068",a={shell:es,shellWithImageTray:ts,shellImageTrayOpen:as,imageTrayPanel:ns,imageTrayPanelOpen:ss,imageTrayHeader:rs,imageTrayTitle:os,imageTraySearch:is,imageTraySearchIcon:ls,imageTraySearchInput:cs,imageTrayList:ds,imageTrayState:us,imageTrayStateError:ms,imageTrayItem:fs,imageTrayItemActive:hs,imageTrayThumb:ps,imageTrayItemBody:gs,imageTrayItemTitle:ys,imageTrayItemTask:bs,imageTrayItemMetaDetails:xs,imageTrayItemMeta:vs,imageTrayItemReference:_s,panel:Is,sessionPanel:ws,detailPanel:ks,sessionContextBar:Ss,sessionContextLeft:Ns,sessionContextRight:Cs,sessionContextLabel:js,sessionContextSpacer:Ts,canvasPanel:$s,canvasWorkspace:Rs,canvasMain:Ps,panelHeader:Bs,panelHeaderText:Es,panelTitle:As,canvasHeading:Ms,sessionActions:Ls,sessionList:Fs,annotationList:Hs,markerHelpModalBody:Ds,openImageModalBody:Os,openImageField:zs,openImageActions:Us,markerHelpItem:Gs,markerHelpHeader:Ks,markerHelpExample:Ws,sessionCard:Ys,annotationCard:Xs,sessionEmptyState:Vs,sessionCardButton:qs,annotationCardButton:Js,sessionCardBody:Zs,sessionCardActive:Qs,annotationCardActive:er,annotationMeta:tr,annotationInstructionPreview:ar,annotationPreviewFooter:nr,annotationInstructionEditor:sr,annotationTypeField:rr,annotationInstructionButton:or,annotationInstructionField:ir,sessionMeta:lr,sessionTitle:cr,annotationTitle:dr,sessionTimestamp:ur,annotationKind:mr,annotationInstructionTypeIcon:fr,sessionInstructionPreview:hr,sessionInstructionEditor:pr,sessionCardFooter:gr,toolRail:yr,canvasToolRail:br,toolbarCluster:xr,toolbarViewportCluster:vr,toolbarSeparator:_r,toolBtn:Ir,toolRailButton:wr,toolbarButton:kr,toolBtnActive:Sr,toolbarActions:Nr,toolbarSelectionActions:Cr,toolbarColorPicker:jr,colorPickerButton:Tr,colorPickerSwatch:$r,colorPickerPopover:Rr,colorOption:Pr,colorOptionActive:Br,toolbarUtilities:Er,toolbarGeometryFields:Ar,toolbarGeometryField:Mr,toolbarGeometryLabel:Lr,toolbarGeometryInput:Fr,iconButton:Hr,ghostBtn:Dr,payloadBtn:Or,backToTaskBtn:zr,canvasScroller:Ur,canvasFrame:Gr,canvasMedia:Kr,canvasStatusOverlay:Wr,canvasStatusCard:Yr,canvasImage:Xr,overlay:Vr,overlaySelect:qr,overlayPan:Jr,overlaySvg:Zr,overlayHitLayer:Qr,arrowHitArea:eo,canvasHandleHit:to,canvasResizeHandleHit:ao,canvasHandleVisible:no,pin:so,note:ro,annotationNumberBadge:oo,box:io,boxNumberBadge:lo,arrowNumberBadge:co,boxSurface:uo,selected:mo,textInput:fo,textArea:ho,select:po,sessionTitleInput:go,sessionInstructionField:yo,detailEmpty:bo,emptyState:xo,payloadModalBody:vo,payloadModalToolbar:_o,payloadViewToggle:Io,payloadModalActions:wo,payloadModalPreview:ko,statusBar:So,annotationSummary:No},Wa=[{value:"review",label:"Review"},{value:"change",label:"Change"},{value:"question",label:"Question"}],Ya=[{value:"select",label:"Select",icon:qn},{value:"pin",label:"Pin",icon:Za},{value:"box",label:"Box",icon:Qa},{value:"arrow",label:"Arrow",icon:en},{value:"text-note",label:"Note",icon:tn}],Co={pin:Za,box:Qa,arrow:en,"text-note":tn},jo={pin:"Pin",box:"Box",arrow:"Arrow","text-note":"Note"},To={review:ia,change:ca,question:la,issue:la,idea:ia},Pt={select:{short:"Select and edit existing markers.",detail:"Use Select to click, drag, reorder, resize, and update markers that are already on the image.",example:"Example: move an existing marker after the screenshot changes."},pin:{short:"Mark a precise spot.",detail:"Use Pin when feedback points to one exact location instead of a broader area.",example:'Example: "This icon is misaligned by 2px."'},box:{short:"Mark an area or component.",detail:"Use Box when the feedback applies to a whole region, card, panel, or bounded UI block.",example:'Example: "This whole card needs tighter padding and a stronger border."'},arrow:{short:"Show direction or relationship.",detail:"Use Arrow when you need to show movement, attachment, flow, or source-to-target intent.",example:'Example: "This tooltip should anchor to this button, not the panel."'},"text-note":{short:"Add a comment-style point marker.",detail:"Use Note when you want a point marker that reads more like a comment or open question.",example:'Example: "Ask design whether this badge should stay."'}},ct={question:"#0f766e",change:"#2563eb",issue:"#dc2626",idea:"#d97706",review:"#7c3aed"},$o=["#7c3aed","#2563eb","#0f766e","#dc2626","#d97706","#111827"],ce="review";function Ke(r){const l=String(r.displayName||"").trim();return l?`${l} review`:"Annotated session"}function an(){return`annotation-${Math.random().toString(36).slice(2,10)}`}function I(r){return!Number.isFinite(r)||r<=0?0:r>=1?1:r}function Se(r){return I(Math.max(.02,r))}function Ge(r){return r?[String(r.taskId||"").trim(),String(r.assetId||"").trim(),String(r.path||"").trim()].join("::"):""}function nn(r){if(!(r instanceof HTMLElement))return!1;const l=r.tagName.toLowerCase();return r.isContentEditable?!0:l==="input"||l==="textarea"||l==="select"}function Ro(r){if(!(r instanceof HTMLElement))return!1;if(nn(r))return!0;const l=r.tagName.toLowerCase();return l==="button"||l==="a"||r.getAttribute("role")==="button"}function ke(r){return r.map((l,f)=>({...l,order:f}))}function ra(r){if(!r)return"Unsaved";const l=new Date(r);return Number.isNaN(l.getTime())?"Unsaved":l.toLocaleString()}function Po(r){const l=typeof r=="number"&&Number.isFinite(r)?Math.max(0,r):0;return l<1024?`${l}B`:l<1024*1024?`${(l/1024).toFixed(1)}KB`:`${(l/(1024*1024)).toFixed(1)}MB`}function Bo(r){if(!r)return"";const l=new Date(r);if(Number.isNaN(l.getTime()))return"";const p=new Date().getTime()-l.getTime(),b=Math.floor(p/(1e3*60*60*24));return b<=0?"Today":b===1?"Yesterday":b<7?`${b}d ago`:b<30?`${Math.floor(b/7)}w ago`:l.toLocaleDateString()}function Bt(r){const l=String(r.createdByActor?.label||"").trim();return l||null}function Eo(r){const l=String(r||"").trim().replace(/\s+/g," ");return l?l.length>110?`${l.slice(0,107)}...`:l:""}function Xa(r,l,f,p=ct[ce]){const b={id:an(),order:0,instruction:"",markerType:ce,color:p};if(r==="pin")return{...b,kind:r,x:l.x,y:l.y};if(r==="text-note")return{...b,kind:r,x:l.x,y:l.y};if(r==="box"){const L=f||l;return{...b,kind:r,x:I(Math.min(l.x,L.x)),y:I(Math.min(l.y,L.y)),width:Se(Math.abs(L.x-l.x)),height:Se(Math.abs(L.y-l.y))}}const x=f||l;return{...b,kind:"arrow",x:l.x,y:l.y,x2:x.x,y2:x.y}}function oa(r){return r.color?r.color:ct[r.markerType||ce]}function Ao(r,l){const f=Math.max(l.width,1),p=Math.max(l.height,1),b=r.x*f,x=r.y*p,L=r.x2*f,ne=r.y2*p,se=L-b,dt=ne-x,Ne=Math.hypot(se,dt)||1,We=se/Ne,Ce=dt/Ne,G=Math.max(10,Math.min(16,Ne-2)),ye=G*.62,je=L-We*G,$=ne-Ce*G,ut=-Ce,be=We;return{shaftX1:b,shaftY1:x,shaftX2:je,shaftY2:$,headPoints:[`${L},${ne}`,`${je+ut*ye},${$+be*ye}`,`${je-ut*ye},${$-be*ye}`].join(" ")}}function Mo(r,l){return{...r,markerType:l,color:r.color||ct[l]}}function Lo(r,l){return{...r,id:an(),order:l}}function Fo(r,l){const f=String(r||"").trim()||(l?Ke(l):"Annotated session");return/\bcopy$/i.test(f)?`${f} 2`:`${f} copy`}function Ho(r,l,f){if(l===f||l<0||f<0||l>=r.length||f>=r.length)return r;const p=[...r],[b]=p.splice(l,1);return b?(p.splice(f,0,b),ke(p)):r}function ae(r){return String(Math.round(I(r)*1e3)/10)}function Do(r){const l=Number.parseFloat(r);return Number.isFinite(l)?I(l/100):null}function Oo(r,l,f){return r.kind==="pin"||r.kind==="text-note"?l==="x"||l==="y"?{...r,[l]:I(f)}:r:r.kind==="box"?l==="x"||l==="y"?{...r,[l]:I(f)}:l==="width"||l==="height"?{...r,[l]:Se(f)}:r:l==="x"||l==="y"||l==="x2"||l==="y2"?{...r,[l]:I(f)}:r}function zo(r){return r.kind==="pin"||r.kind==="text-note"?[{key:"x",label:"X",value:ae(r.x)},{key:"y",label:"Y",value:ae(r.y)}]:r.kind==="box"?[{key:"x",label:"X",value:ae(r.x)},{key:"y",label:"Y",value:ae(r.y)},{key:"width",label:"Width",value:ae(r.width)},{key:"height",label:"Height",value:ae(r.height)}]:[{key:"x",label:"Start X",value:ae(r.x)},{key:"y",label:"Start Y",value:ae(r.y)},{key:"x2",label:"End X",value:ae(r.x2)},{key:"y2",label:"End Y",value:ae(r.y2)}]}function Uo(r){if(!r)return null;const l=Math.round(r.x*100),f=Math.round(r.y*100),p=Math.round(r.width*100),b=Math.round(r.height*100);return`crop ${l}%, ${f}% size ${p}% x ${b}%`}function Go(r){return Number.isFinite(r)?Math.min(4,Math.max(.25,Number(r.toFixed(2)))):1}function Va(r){const l=[`Annotated attachment: ${r.title||r.image.displayName}`,`Image: ${r.image.displayName}`,`Image Reference: ${r.image.referenceLabel||r.image.assetId}`,`Task ID: ${r.taskId}`,r.globalInstruction?`Global instruction: ${r.globalInstruction}`:"Global instruction: None provided.","Markers:"];return r.annotations.length===0?(l.push("0. No markers."),l.join(`
2
- `)):(r.annotations.forEach((f,p)=>{const b=f.markerType||ce,x=Uo(f.cropHint);l.push(`${p+1}. ${f.kind} (${b})`),l.push(`Instruction: ${f.instruction||"No marker instruction."}`),x&&l.push(`Region: ${x}`)}),l.join(`
3
- `))}function Et(r){return{title:r.title,globalInstruction:r.globalInstruction,annotations:ke(r.annotations)}}function qa(r){return JSON.stringify(Et(r))}function Ja(r){const l=JSON.parse(r);return Et({title:String(l?.title||""),globalInstruction:String(l?.globalInstruction||""),annotations:Array.isArray(l?.annotations)?l.annotations:[]})}function Ko(r,l){return Et({title:r?.title||l,globalInstruction:r?.globalInstruction||"",annotations:r?.annotations||[]})}function Qo({runtimeMode:r="local",apiBaseUrl:l="",cloudAuthBaseUrl:f="",workspaceId:p="default",sessionLoadReady:b=!0,requestedTarget:x=null,requestedSessionId:L=null,requestedOpenVersion:ne=0,imageTrayOpen:se,onCloseImageTray:dt,resolveTaskReferenceLabel:Ne,resolveImageReferenceLabel:We,onRequestedTargetHandled:Ce,onOpenTarget:G,onContextChange:ye,onBackToTask:je}){const $=r==="cloud"&&(f||l)||"",[ut,be]=s.useState(x),[mt,Te]=s.useState([]),[v,$e]=s.useState(null),[At,Ye]=s.useState(!1),[Re,Xe]=s.useState(""),[Pe,Ve]=s.useState(""),[j,re]=s.useState([]),[S,F]=s.useState(null),[ft,da]=s.useState(ct[ce]),[ht,pt]=s.useState(!1),[T,Be]=s.useState("select"),[sn,xe]=s.useState(!1),[gt,ua]=s.useState(!1),[V,q]=s.useState(!1),[ma,g]=s.useState(null),[K,R]=s.useState("saved"),[Wo,O]=s.useState(null),[yt,fa]=s.useState(!1),[oe,Mt]=s.useState(null),[de,Lt]=s.useState(!1),[rn,Ft]=s.useState(!1),[Ht,ha]=s.useState("json"),[bt,Dt]=s.useState(!1),[xt,Ot]=s.useState(!1),[on,pa]=s.useState(!1),[ln,vt]=s.useState(!1),[zt,_t]=s.useState(""),[qe,ga]=s.useState(!1),[Ut,cn]=s.useState([]),[It,dn]=s.useState(""),[un,ya]=s.useState(!1),[ba,xa]=s.useState(null),[ue,Je]=s.useState(!1),[Gt,Ze]=s.useState(!1),[P,Kt]=s.useState(1),[mn,Qe]=s.useState(!1),[fn,et]=s.useState(!1),[wt,va]=s.useState(!1),[kt,tt]=s.useState({width:0,height:0}),_a=s.useRef(null),Ee=s.useRef(null),Wt=s.useRef(null),Ia=s.useRef(null),me=s.useRef(L),ie=s.useRef(""),St=s.useRef(0),Yt=s.useRef(""),ve=s.useRef(0),Nt=s.useRef(null),wa=s.useRef(0),fe=s.useRef(!1),at=s.useRef(null),Xt=s.useRef(null),_e=s.useRef(null),H=s.useRef(""),A=s.useRef(""),Ct=s.useRef(null),J=s.useRef(null),Ae=s.useRef(!1),jt=s.useRef(null),nt=s.useRef(null),st=s.useRef(null),Ie=s.useRef(null),Me=s.useRef(null),Le=s.useRef(null),Fe=s.useRef(null),he=s.useRef(null),Z=s.useRef(null),ka=s.useRef(null),Sa=s.useRef(null),B=s.useMemo(()=>mt.find(e=>e.id===v)||null,[v,mt]),Q=s.useMemo(()=>`workspaceId=${encodeURIComponent(String(p||"default").trim()||"default")}`,[p]),E=s.useMemo(()=>({"x-taskforce-workspace-id":String(p||"default").trim()||"default"}),[p]),z=s.useMemo(()=>j.find(e=>e.id===S)||null,[j,S]),ee=s.useMemo(()=>Ge(x),[x]),le=typeof G=="function",d=le?x:ut,Tt=s.useMemo(()=>{const e=String(d?.taskId||"").trim();if(!e)return"";const n=Ne?.(e).trim()||"";if(n)return n;const o=String(d?.taskReferenceLabel||"").trim();return o&&o!==e?o:n||e},[d?.taskId,d?.taskReferenceLabel,Ne]),rt=s.useMemo(()=>{const e=String(d?.assetId||"").trim();if(!e)return"";const n=We?.(e).trim()||"";return n||String(d?.imageReferenceLabel||"").trim()},[d?.assetId,d?.imageReferenceLabel,We]),Vt=s.useMemo(()=>j.findIndex(e=>e.id===S),[j,S]),qt=z?.color||ft,Na=s.useMemo(()=>Et({title:Re,globalInstruction:Pe,annotations:j}),[j,Pe,Re]),He=s.useMemo(()=>qa(Na),[Na]),Ca=He!==A.current,y=s.useMemo(()=>({width:Math.max(kt.width*P,0),height:Math.max(kt.height*P,0)}),[kt.height,kt.width,P]),De=s.useMemo(()=>({visibleRadius:7,hitRadius:11}),[]),Jt=s.useMemo(()=>`0 0 ${Math.max(y.width,1)} ${Math.max(y.height,1)}`,[y.height,y.width]),ot=typeof se=="boolean",ja=s.useMemo(()=>{const e=It.trim().toLowerCase();return e?Ut.filter(n=>[n.displayName,n.originalFilename,n.imageReferenceLabel,n.taskReferenceLabel,n.assetId].filter(Boolean).join(" ").toLowerCase().includes(e)):Ut},[Ut,It]),Oe=s.useMemo(()=>{const e=Ee.current;return e?P>1||y.width>e.clientWidth+1||y.height>e.clientHeight+1:P>1},[y.height,y.width,P]),Zt=`${Math.round(P*100)}%`,W=Oe&&(mn||fn),Qt=s.useMemo(()=>{const e=new Map;return j.forEach((n,o)=>{e.set(n.id,o+1)}),e},[j]);s.useEffect(()=>{me.current=L},[L]),s.useEffect(()=>{const e=Ia.current;if(!e||!S)return;e.focus();const n=e.value.length;e.setSelectionRange(n,n)},[S]),s.useEffect(()=>{_e.current=v},[v]),s.useEffect(()=>{Ye(!1)},[v]),s.useEffect(()=>{if(!z){pt(!1);return}da(z.color||ct[z.markerType||ce])},[z]);const $t=s.useCallback(async e=>{const n=typeof performance<"u"?performance.now():Date.now(),o=await ge(`/api/taskforce/annotated-attachments/sessions?${Q}`,{method:"POST",credentials:"include",headers:{"Content-Type":"application/json",...E},body:JSON.stringify({taskId:e.taskId,baseImageAssetId:e.assetId,title:Ke(e),globalInstruction:"",annotations:[]})},$),i=await o.json().catch(()=>({}));if(!o.ok)throw new Error(String(i?.error||"Failed to create session."));const c=i?.session;if(!c?.id)throw new Error("Failed to create session.");return Rt("annotated_session_create_completed",{assetId:e.assetId,taskId:e.taskId||null,sessionId:c.id,durationMs:Math.round((typeof performance<"u"?performance.now():Date.now())-n),debugTimings:i?.debugTimings||null,serverTiming:typeof o.headers?.get=="function"&&o.headers.get("server-timing")||null}),c},[E,$,Q]),Ta=s.useCallback(e=>new Promise((n,o)=>{const i=new FileReader;i.onload=()=>n(typeof i.result=="string"?i.result:""),i.onerror=()=>o(i.error||new Error("Failed to read clipboard image.")),i.readAsDataURL(e)}),[]),N=s.useCallback(()=>{at.current!==null&&(window.clearTimeout(at.current),at.current=null),st.current!==null&&(window.clearTimeout(st.current),st.current=null)},[]),ze=s.useCallback(e=>{Xe(e.title),Ve(e.globalInstruction),re(e.annotations),F(n=>n&&e.annotations.some(o=>o.id===n)?n:e.annotations[0]?.id||null)},[]),pe=s.useCallback((e,n)=>{const o=Ke(n||d||{assetId:e.baseImageAssetId,displayName:"Annotated session"}),i=Ko(e,o),c=qa(i);fe.current=!0,N(),ze(i),A.current=c,H.current=c,Ct.current=null,Ae.current=!1,jt.current=null,nt.current=null,O(null),R("saved"),q(!1)},[d,ze,N]),it=s.useCallback(e=>{fe.current=!0,N(),Te([]),$e(null),xe(!1),Ye(!1),Xe(Ke(e)),Ve(""),re([]),F(null),A.current="",H.current="",Ct.current=null,Ae.current=!1,jt.current=null,nt.current=null,Mt(null),Ft(!1),O(null),R("saved"),q(!1)},[N]),we=s.useCallback(async(e,n,o)=>{const i=_e.current;if(!i)return!0;if(e===A.current)return J.current||(O(null),R("saved")),!0;if(J.current){if(Ae.current=!0,!o?.waitForInFlight||!await J.current)return!1;const m=H.current;return m===A.current?!0:we(m,n,o)}N();const c=Ja(e);jt.current=i,Ct.current=e,q(!0),g(null),O(null),R("saving");const h=(async()=>{try{const u=await ge(`/api/taskforce/annotated-attachments/sessions/${encodeURIComponent(i)}?${Q}`,{method:"PATCH",credentials:"include",headers:{"Content-Type":"application/json",...E},body:JSON.stringify(c)},$),m=await u.json().catch(()=>({}));if(!u.ok)throw new Error(String(m?.error||"Failed to save session."));const _=m?.session;if(!_?.id)throw new Error("Failed to save session.");Te(ta=>{const Da=ta.findIndex(Ln=>Ln.id===_.id);if(Da===-1)return[_,...ta];const Oa=[...ta];return Oa[Da]=_,Oa}),A.current=e,nt.current=null,O(null);const k=_e.current===_.id,C=H.current,X=C!==e,lt=Ae.current||X;return Ae.current=!1,k&&!lt?(fe.current=!0,ze(c),R("saved")):!lt&&C===A.current?R("saved"):R("pending"),!0}catch(u){const m=u instanceof Error?u.message:"Failed to save session.";return g(m),O(m),R("error"),nt.current!==e&&_e.current===i&&H.current===e&&(nt.current=e,st.current=window.setTimeout(()=>{st.current=null,!(_e.current!==i||H.current!==e)&&we(e,n,{waitForInFlight:!0})},1500)),!1}finally{Ct.current=null,J.current=null,jt.current=null,q(!1)}})();J.current=h;const w=await h;if(w){const u=H.current;if(u!==A.current)return we(u,n,o)}return w},[ze,N,E,$,Q]),$a=s.useCallback(e=>{if(_e.current){if(H.current===A.current){O(null),J.current||R("saved");return}K!=="saving"&&R("pending"),N(),at.current=window.setTimeout(()=>{at.current=null,we(H.current,"structure")},e)}},[N,we,K]),Y=s.useCallback(e=>{Xt.current=e},[]),M=s.useCallback(async e=>{N();const n=H.current;return!_e.current||n===A.current?(O(null),J.current||R("saved"),!0):we(n,e,{waitForInFlight:!0})},[N,we]),hn=s.useCallback(()=>{const e=A.current;e&&(N(),fe.current=!0,ze(Ja(e)),O(null),R("saved"),g(null))},[ze,N]),U=s.useCallback(async(e,n)=>{const o=typeof performance<"u"?performance.now():Date.now(),i=JSON.stringify({targetKey:Ge(e),requestedSessionId:n?.requestedSessionId??null,autoCreateIfEmpty:n?.autoCreateIfEmpty===!0});if(Nt.current===i)return;const c=ve.current+1;ve.current=c,Nt.current=i,ua(!0),g(null);try{const h=new URLSearchParams;p&&h.set("workspaceId",p),e.taskId&&h.set("taskId",e.taskId),h.set("imageAssetId",e.assetId);const w=await ge(`/api/taskforce/annotated-attachments/sessions?${h.toString()}`,{credentials:"include",headers:E,cache:"no-store"},$),u=await w.json().catch(()=>({}));if(!w.ok)throw new Error(String(u?.error||"Failed to load annotated attachment sessions."));const m=Array.isArray(u?.sessions)?u.sessions:[];if(Rt("annotated_sessions_loaded",{assetId:e.assetId,taskId:e.taskId||null,requestedSessionId:n?.requestedSessionId??null,autoCreateIfEmpty:n?.autoCreateIfEmpty===!0,sessionCount:m.length,durationMs:Math.round((typeof performance<"u"?performance.now():Date.now())-o),serverTiming:typeof w.headers?.get=="function"&&w.headers.get("server-timing")||null}),m.length===0&&n?.autoCreateIfEmpty&&String(e.assetId||"").trim()){const C=n?.requestedSessionId??me.current;if(me.current=null,C&&g("The previously selected annotation session could not be restored."),ve.current!==c)return;const X=await $t(e);if(Rt("annotated_sessions_auto_created_after_empty_load",{assetId:e.assetId,taskId:e.taskId||null,sessionId:X.id,totalDurationMs:Math.round((typeof performance<"u"?performance.now():Date.now())-o)}),ve.current!==c)return;Te([X]),$e(X.id),xe(!1),pe(X,e);return}if(ve.current!==c)return;Te(m),xe(m.length===0);const _=n?.requestedSessionId??me.current;me.current=null;const k=m.find(C=>C.id===_)||m[0]||null;_&&!k&&g("The previously selected annotation session could not be restored."),$e(k?.id||null),k?pe(k,e):(fe.current=!0,N(),Xe(Ke(e)),Ve(""),re([]),F(null),A.current="",H.current="",O(null),R("saved"))}catch(h){if(ve.current!==c)return;g(h instanceof Error?h.message:"Failed to load sessions.")}finally{Nt.current===i&&(Nt.current=null),ve.current===c&&ua(!1)}},[N,$t,E,$,pe,p]),Ra=s.useCallback(async()=>{ya(!0),xa(null);try{const e=new URLSearchParams;e.set("workspaceId",String(p||"default").trim()||"default");const n=await ge(`/api/taskforce/annotated-attachments/images?${e.toString()}`,{credentials:"include",headers:E,cache:"no-store"},$),o=await n.json().catch(()=>({}));if(!n.ok)throw new Error(String(o?.error||"Failed to load images."));cn(Array.isArray(o?.images)?o.images:[])}catch(e){xa(e instanceof Error?e.message:"Failed to load images.")}finally{ya(!1)}},[E,$,p]),pn=s.useCallback(async()=>{if(typeof navigator>"u"||!navigator.clipboard||typeof navigator.clipboard.read!="function"){g("Clipboard image paste is not supported in this environment.");return}va(!0),g(null),wa.current=Date.now()+2e3;try{const n=(await navigator.clipboard.read()).find(_=>_.types.some(k=>k.startsWith("image/"))),o=n?.types.find(_=>_.startsWith("image/"))||"";if(!n||!o)throw new Error("No image found on the clipboard.");const i=await n.getType(o),c=await Ta(i);if(!c)throw new Error("Failed to read clipboard image.");const h=o==="image/jpeg"?"jpg":o==="image/webp"?"webp":o==="image/gif"?"gif":"png",w=await fetch("/api/taskforce/context-upload",{method:"POST",credentials:"include",headers:{"Content-Type":"application/json",...E},body:JSON.stringify({file:c,originalName:`pasted-image.${h}`,workspaceId:String(p||"default").trim()||"default"})}),u=await w.json().catch(()=>({}));if(!w.ok||!u?.success||typeof u?.assetId!="string"||typeof u?.path!="string")throw new Error(String(u?.error||"Failed to paste image into Image Notes."));const m={assetId:u.assetId,imageReferenceLabel:typeof u?.referenceLabel=="string"?u.referenceLabel:void 0,path:u.path,displayName:typeof u?.displayName=="string"&&u.displayName.trim().length>0?u.displayName.trim():"Pasted image"};me.current=null,le?(ie.current="",G?.(m,{sessionId:null})):(be(m),ie.current=Ge(m),U(m,{autoCreateIfEmpty:!0}))}catch(e){g(e instanceof Error?e.message:"Failed to paste image.")}finally{va(!1)}},[le,U,G,Ta,E,p]),gn=s.useCallback(async()=>{const e=zt.trim();if(!e){g("Enter an image reference to open.");return}ga(!0),g(null);try{const n=new URLSearchParams({workspaceId:String(p||"default").trim()||"default"}),o=await ge(`/api/taskforce/annotated-attachments/images/${encodeURIComponent(e)}?${n.toString()}`,{method:"GET",credentials:"include",headers:E}),i=await o.json().catch(()=>({}));if(!o.ok||!i?.target||typeof i.target.assetId!="string"||typeof i.target.path!="string")throw new Error(String(i?.error||"Failed to open image reference."));const c={assetId:i.target.assetId,path:i.target.path,displayName:typeof i.target.displayName=="string"&&i.target.displayName.trim().length>0?i.target.displayName.trim():"Image attachment",taskId:typeof i.target.taskId=="string"&&i.target.taskId.trim().length>0?i.target.taskId.trim():void 0,taskReferenceLabel:typeof i.target.taskReferenceLabel=="string"&&i.target.taskReferenceLabel.trim().length>0?i.target.taskReferenceLabel.trim():void 0,imageReferenceLabel:typeof i.target.imageReferenceLabel=="string"&&i.target.imageReferenceLabel.trim().length>0?i.target.imageReferenceLabel.trim():void 0};me.current=null,vt(!1),_t(""),le?(ie.current="",G?.(c,{sessionId:null})):(be(c),ie.current=Ge(c),U(c,{autoCreateIfEmpty:!0}))}catch(n){g(n instanceof Error?n.message:"Failed to open image reference.")}finally{ga(!1)}},[le,U,G,zt,E,p]),yn=s.useCallback(async e=>{if(!e.assetId||!e.path||!await M("session-switch"))return;const o={assetId:e.assetId,path:e.path,displayName:String(e.displayName||e.originalFilename||"Image attachment").trim()||"Image attachment",...e.taskId?{taskId:e.taskId}:{},...e.taskReferenceLabel?{taskReferenceLabel:e.taskReferenceLabel}:{},...e.imageReferenceLabel?{imageReferenceLabel:e.imageReferenceLabel}:{}};me.current=null,g(null),le?(ie.current="",G?.(o,{sessionId:null})):(be(o),ie.current=Ge(o),it(o),U(o,{autoCreateIfEmpty:!0}))},[M,le,U,G,it]),Pa=s.useCallback(e=>{Te(n=>{const o=n.findIndex(c=>c.id===e.id);if(o===-1)return[e,...n];const i=[...n];return i[o]=e,i}),$e(e.id),pe(e,d)},[d,pe]),Ba=s.useCallback(e=>{Te(n=>{const o=n.filter(c=>c.id!==e),i=o[0]||null;return $e(i?.id||null),i?pe(i,d):(fe.current=!0,N(),Xe(Ke(d||{displayName:"Annotated session"})),Ve(""),re([]),F(null),A.current="",H.current="",O(null),R("saved")),o})},[d,N,pe]);s.useEffect(()=>{if(!x)return;if(le||be(n=>n&&Ge(n)===ee&&n.taskReferenceLabel===x.taskReferenceLabel&&n.imageReferenceLabel===x.imageReferenceLabel&&n.displayName===x.displayName?n:x),!b){ee&&(ee!==ie.current||ne!==St.current)&&ee!==Yt.current&&(it(x),Yt.current=ee,St.current=ne,Rt("annotated_sessions_load_deferred",{assetId:x.assetId,taskId:x.taskId||null,requestedTargetKey:ee})),Ce?.();return}ee&&(ee!==ie.current||ne!==St.current)&&(it(x),ie.current=ee,St.current=ne,Yt.current="",U(x,{autoCreateIfEmpty:!0})),Ce?.()},[le,U,Ce,ne,x,ee,it,L,b]),s.useEffect(()=>{d&&ye?.({target:d,sessionId:v})},[d,ye,v]),s.useEffect(()=>{if(!d||typeof document>"u"||!b)return;const e=()=>{Date.now()<wa.current||H.current!==A.current||V||gt||U(d,{requestedSessionId:v})},n=()=>{document.visibilityState==="visible"&&e()};return document.addEventListener("visibilitychange",n),()=>{document.removeEventListener("visibilitychange",n)}},[d,U,gt,V,v,b]),s.useEffect(()=>{if(!d?.path){Je(!1),Ze(!1),tt({width:0,height:0});return}Je(!0),Ze(!1),tt({width:0,height:0}),Kt(1),Qe(!1),et(!1)},[d?.path]),s.useEffect(()=>{if(!ue)return;const e=Wt.current;!e||!e.complete||e.naturalWidth<=0||e.naturalHeight<=0||(tt({width:e.naturalWidth,height:e.naturalHeight}),Je(!1),Ze(!1))},[d?.path,ue]),s.useEffect(()=>{Oe||(Qe(!1),et(!1))},[Oe]),s.useEffect(()=>{Mt(null)},[v]),s.useEffect(()=>{if(H.current=He,fe.current){fe.current=!1;return}if(!v){N(),O(null),R("saved");return}if(He===A.current){N(),J.current||(O(null),R("saved"));return}const e=Xt.current;if(Xt.current=null,K==="error"&&e===null)return;const n=e??600;if(J.current){Ae.current=!0,R("pending");return}$a(n)},[N,He,K,$a,v]),s.useEffect(()=>{v&&(J.current||He===A.current&&K!=="error"&&K!=="saved"&&(O(null),R("saved")))},[He,K,v]),s.useEffect(()=>{!ot||!se||Ra()},[Ra,se,ot]),s.useEffect(()=>{if(typeof window>"u")return;const e=n=>{H.current!==A.current&&(n.preventDefault(),n.returnValue="")};return window.addEventListener("beforeunload",e),()=>window.removeEventListener("beforeunload",e)},[]),s.useEffect(()=>{if(typeof document>"u")return;const e=()=>{document.visibilityState==="hidden"&&M("visibility-hidden")};return document.addEventListener("visibilitychange",e),()=>document.removeEventListener("visibilitychange",e)},[M]),s.useEffect(()=>{if(!ht||typeof document>"u")return;const e=n=>{const o=n.target;o instanceof Node&&(ka.current?.contains(o)||pt(!1))};return document.addEventListener("mousedown",e),()=>document.removeEventListener("mousedown",e)},[ht]),s.useEffect(()=>{if(!At||typeof document>"u")return;const e=n=>{const o=n.target;o instanceof Node&&(Sa.current?.contains(o)||Ye(!1))};return document.addEventListener("mousedown",e),()=>document.removeEventListener("mousedown",e)},[At]),s.useEffect(()=>()=>{N()},[N]),s.useEffect(()=>{if(!de)return;const e=window.setTimeout(()=>Lt(!1),2e3);return()=>window.clearTimeout(e)},[de]),s.useEffect(()=>{if(!bt)return;const e=window.setTimeout(()=>Dt(!1),2e3);return()=>window.clearTimeout(e)},[bt]),s.useEffect(()=>{if(!xt)return;const e=window.setTimeout(()=>Ot(!1),2e3);return()=>window.clearTimeout(e)},[xt]);const te=s.useCallback((e,n,o=300)=>{re(i=>ke(i.map(c=>c.id===e?n(c):c))),Y(o)},[Y]),bn=s.useCallback(e=>{z&&(te(z.id,n=>({...n,color:e})),da(e),pt(!1))},[z,te]),Ea=s.useCallback(async()=>{if(!(!d||!await M("session-switch"))){q(!0),g(null);try{const n=await $t(d);xe(!1),await U(d,{requestedSessionId:n.id,autoCreateIfEmpty:!1}),Be("select")}catch(n){g(n instanceof Error?n.message:"Failed to create session."),xe(!0)}finally{q(!1)}}},[d,$t,M,U]),xn=s.useCallback(e=>{if(e!=="select"&&!B){Qe(!1),g("No session exists for this image yet."),xe(!0);return}g(null),xe(!1),Qe(!1),Be(e)},[B]),vn=s.useCallback(async()=>{if(!(!d||!B||!await M("duplicate"))){q(!0),g(null);try{const n=ke(j.map((h,w)=>Lo(h,w))),o=await ge(`/api/taskforce/annotated-attachments/sessions?${Q}`,{method:"POST",credentials:"include",headers:{"Content-Type":"application/json",...E},body:JSON.stringify({taskId:d.taskId,baseImageAssetId:d.assetId,title:Fo(Re||B.title,d),globalInstruction:Pe,annotations:n})},$),i=await o.json().catch(()=>({}));if(!o.ok)throw new Error(String(i?.error||"Failed to duplicate session."));const c=i?.session;if(!c?.id)throw new Error("Failed to duplicate session.");Pa(c),Be("select")}catch(n){g(n instanceof Error?n.message:"Failed to duplicate session.")}finally{q(!1)}}},[d,j,Pe,Re,Pa,M,E,$,B,Q]),_n=s.useCallback(async()=>M("manual"),[M]),Aa=s.useCallback(async()=>{if(v){fa(!0),g(null);try{const e=await ge(`/api/taskforce/annotated-attachments/sessions/${encodeURIComponent(v)}/payload?${Q}`,{credentials:"include",headers:E},$),n=await e.json().catch(()=>({}));if(!e.ok)throw new Error(String(n?.error||"Failed to load payload preview."));Mt(n?.payload||null)}catch(e){g(e instanceof Error?e.message:"Failed to load payload preview.")}finally{fa(!1)}}},[E,$,v,Q]),In=s.useCallback(()=>{v&&M("payload-preview").then(e=>{e&&(Ft(!0),Aa())})},[M,Aa,v]),Ma=s.useCallback(async e=>{if(!oe||!navigator.clipboard||typeof navigator.clipboard.writeText!="function"){g("Clipboard copy is not available in this browser.");return}try{const n=e==="json"?JSON.stringify(oe,null,2):Va(oe);await navigator.clipboard.writeText(n),Lt(e)}catch(n){g(n instanceof Error?n.message:"Failed to copy payload content."),Lt(!1)}},[oe]),wn=s.useCallback(async()=>{if(!Tt||!navigator.clipboard||typeof navigator.clipboard.writeText!="function"){g("Clipboard copy is not available in this browser.");return}try{await navigator.clipboard.writeText(Tt),Dt(!0)}catch(e){g(e instanceof Error?e.message:"Failed to copy task id."),Dt(!1)}},[Tt]),kn=s.useCallback(async()=>{if(!rt||!navigator.clipboard||typeof navigator.clipboard.writeText!="function"){g("Clipboard copy is not available in this browser.");return}try{await navigator.clipboard.writeText(rt),Ot(!0)}catch(e){g(e instanceof Error?e.message:"Failed to copy image reference."),Ot(!1)}},[rt]),Sn=s.useCallback(async()=>{if(!v||!await M("delete-session"))return;const n=(B?.title||"Untitled session").trim()||"Untitled session";if(window.confirm(`Delete the annotated attachment session "${n}"?`)){q(!0),g(null);try{const o=await ge(`/api/taskforce/annotated-attachments/sessions/${encodeURIComponent(v)}?${Q}`,{method:"DELETE",credentials:"include",headers:E},$),i=await o.json().catch(()=>({}));if(!o.ok)throw new Error(String(i?.error||"Failed to delete session."));Ba(v),Be("select")}catch(o){g(o instanceof Error?o.message:"Failed to delete session.")}finally{q(!1)}}},[M,Ba,E,$,B,v,Q]),ea=s.useCallback(()=>{S&&(re(e=>ke(e.filter(n=>n.id!==S))),F(null),Y(300))},[Y,S]),Ue=s.useCallback(e=>{const n=Go(e),o=Ee.current;if(!o||n===P){Kt(n);return}const i=(o.scrollLeft+o.clientWidth/2)*(n/P)-o.clientWidth/2,c=(o.scrollTop+o.clientHeight/2)*(n/P)-o.clientHeight/2;Kt(n),window.requestAnimationFrame(()=>{o.scrollLeft=Math.max(0,i),o.scrollTop=Math.max(0,c)})},[P]),Nn=s.useCallback(()=>{Ue(P+.25)},[Ue,P]),Cn=s.useCallback(()=>{Ue(P-.25)},[Ue,P]),jn=s.useCallback(()=>{Ue(1);const e=Ee.current;e&&window.requestAnimationFrame(()=>{e.scrollLeft=0,e.scrollTop=0})},[Ue]),La=s.useCallback(e=>{S&&re(n=>{const o=n.findIndex(c=>c.id===S);if(o===-1)return n;const i=e==="up"?o-1:o+1;return i<0||i>=n.length?n:(Y(300),Ho(n,o,i))})},[Y,S]);s.useEffect(()=>{if(!S)return;const e=n=>{n.key==="Delete"&&(nn(n.target)||(n.preventDefault(),ea()))};return window.addEventListener("keydown",e),()=>window.removeEventListener("keydown",e)},[ea,S]),s.useEffect(()=>{const e=i=>{i.code==="Space"&&Oe&&(Ro(i.target)||(i.preventDefault(),et(!0)))},n=i=>{i.code==="Space"&&et(!1)},o=()=>{et(!1)};return window.addEventListener("keydown",e),window.addEventListener("keyup",n),window.addEventListener("blur",o),()=>{window.removeEventListener("keydown",e),window.removeEventListener("keyup",n),window.removeEventListener("blur",o)}},[Oe]);const D=s.useCallback(e=>{const n=_a.current?.getBoundingClientRect();return!n||n.width<=0||n.height<=0?null:{x:I((e.clientX-n.left)/n.width),y:I((e.clientY-n.top)/n.height)}},[]),Tn=s.useCallback(e=>{if(W){const i=Ee.current;if(!i)return;Z.current={pointerId:e.pointerId,startX:e.clientX,startY:e.clientY,scrollLeft:i.scrollLeft,scrollTop:i.scrollTop},e.currentTarget.setPointerCapture(e.pointerId),e.preventDefault();return}if(!v)return;if(T==="select"){F(null);return}const n=D(e);if(!n)return;if(T==="pin"||T==="text-note"){const i=Xa(T,n,n,ft);re(c=>ke([...c,i])),F(i.id),Y(300),Be("select");return}Ie.current=n;const o=Xa(T,n,n,ft);he.current={annotationId:o.id,kind:T},e.currentTarget.setPointerCapture?.(e.pointerId),re(i=>ke([...i,o])),F(o.id),Y(300)},[ft,W,Y,D,v,T]),$n=s.useCallback(e=>{if(Z.current?.pointerId===e.pointerId){e.currentTarget.releasePointerCapture?.(e.pointerId);return}if(!Ie.current||!he.current||T!=="box"&&T!=="arrow")return;const n=D(e);Ie.current=null,he.current=null,e.currentTarget.releasePointerCapture?.(e.pointerId),n&&Be("select")},[D,T]),Fa=s.useCallback((e,n)=>{if(T!=="select"||W)return;const o=D(e);o&&(Me.current={annotationId:n.id,originPointer:o,originAnnotation:n},F(n.id),e.stopPropagation())},[W,D,T]),Rn=s.useCallback(e=>{if(Z.current?.pointerId===e.pointerId){const u=Ee.current;if(!u)return;const m=e.clientX-Z.current.startX,_=e.clientY-Z.current.startY;u.scrollLeft=Z.current.scrollLeft-m,u.scrollTop=Z.current.scrollTop-_;return}if(he.current&&Ie.current){const u=D(e);if(!u)return;const{annotationId:m,kind:_}=he.current,k=Ie.current;te(m,C=>_==="box"&&C.kind==="box"?{...C,x:I(Math.min(k.x,u.x)),y:I(Math.min(k.y,u.y)),width:Se(Math.abs(u.x-k.x)),height:Se(Math.abs(u.y-k.y))}:_==="arrow"&&C.kind==="arrow"?{...C,x:k.x,y:k.y,x2:u.x,y2:u.y}:C);return}if(Le.current){const u=D(e);if(!u)return;const{annotationId:m,originPointer:_,originAnnotation:k}=Le.current,C=u.x-_.x,X=u.y-_.y;te(m,()=>({...k,width:Se(k.width+C),height:Se(k.height+X)}));return}if(Fe.current){const u=D(e);if(!u)return;const{annotationId:m,endpoint:_,originPointer:k,originAnnotation:C}=Fe.current,X=u.x-k.x,lt=u.y-k.y;te(m,()=>_==="tail"?{...C,x:I(C.x+X),y:I(C.y+lt)}:{...C,x2:I(C.x2+X),y2:I(C.y2+lt)});return}if(!Me.current)return;const n=D(e);if(!n)return;const{annotationId:o,originPointer:i,originAnnotation:c}=Me.current,h=n.x-i.x,w=n.y-i.y;te(o,()=>c.kind==="pin"||c.kind==="text-note"?{...c,x:I(c.x+h),y:I(c.y+w)}:c.kind==="box"?{...c,x:I(c.x+h),y:I(c.y+w)}:{...c,x:I(c.x+h),y:I(c.y+w),x2:I(c.x2+h),y2:I(c.y2+w)})},[D,te]),Pn=s.useCallback(()=>{Ie.current=null,Me.current=null,Le.current=null,Fe.current=null,he.current=null,Z.current=null},[]),Bn=s.useCallback(()=>{Ie.current=null,Me.current=null,Le.current=null,Fe.current=null,he.current=null,Z.current=null},[]),En=s.useCallback(()=>{Me.current=null,Le.current=null,Fe.current=null,he.current=null,Z.current=null},[]),An=s.useCallback((e,n)=>{if(T!=="select"||W)return;const o=D(e);o&&(Le.current={annotationId:n.id,originPointer:o,originAnnotation:n},F(n.id),e.stopPropagation())},[W,D,T]),Ha=s.useCallback((e,n,o)=>{if(T!=="select"||W)return;const i=D(e);i&&(Fe.current={annotationId:n.id,originPointer:i,originAnnotation:n,endpoint:o},F(n.id),e.stopPropagation())},[W,D,T]),Mn=B?.updatedAt?ra(B.updatedAt):"Not saved yet";return t.jsxs("div",{className:`${a.shell} ${ot?a.shellWithImageTray:""} ${ot&&se?a.shellImageTrayOpen:""}`.trim(),children:[ot?t.jsxs("aside",{className:`${a.imageTrayPanel} ${se?a.imageTrayPanelOpen:""}`.trim(),"aria-label":"Image tray","aria-hidden":!se,children:[t.jsxs("div",{className:a.imageTrayHeader,children:[t.jsxs("span",{className:a.imageTrayTitle,children:[t.jsx(Ua,{size:14}),"Images"]}),t.jsx("button",{type:"button",className:"tf-control-icon",onClick:dt,title:"Collapse image tray","aria-label":"Collapse image tray",children:t.jsx(Dn,{size:16})})]}),t.jsxs("div",{className:a.imageTraySearch,children:[t.jsx(On,{size:12,className:a.imageTraySearchIcon}),t.jsx("input",{type:"text",placeholder:"Search images...",value:It,onChange:e=>dn(e.target.value),className:a.imageTraySearchInput})]}),t.jsx("div",{className:`tf-scrollbar ${a.imageTrayList}`,children:un?t.jsx("div",{className:a.imageTrayState,children:"Loading images..."}):ba?t.jsx("div",{className:a.imageTrayStateError,children:ba}):ja.length===0?t.jsx("div",{className:a.imageTrayState,children:It.trim()?"No images match your search.":"No images found."}):ja.map(e=>{const n=d?.assetId===e.assetId,o=typeof e.attachmentCount=="number"&&Number.isFinite(e.attachmentCount)?Math.max(0,e.attachmentCount):0,i=typeof e.sessionCount=="number"&&Number.isFinite(e.sessionCount)?Math.max(0,e.sessionCount):0,c=o>1?`${o} tasks linked`:o===1?e.taskReferenceLabel||"1 task linked":"Unattached",h=String(e.displayName||e.originalFilename||"Image attachment").trim()||"Image attachment";return t.jsxs("button",{type:"button",className:`${a.imageTrayItem} ${n?a.imageTrayItemActive:""}`.trim(),onClick:()=>{yn(e)},title:h,children:[t.jsx("span",{className:a.imageTrayThumb,children:t.jsx("img",{src:e.path,alt:"",loading:"lazy"})}),t.jsxs("span",{className:a.imageTrayItemBody,children:[t.jsx("span",{className:a.imageTrayItemTitle,children:h}),t.jsx("span",{className:a.imageTrayItemTask,children:c}),t.jsxs("span",{className:a.imageTrayItemMeta,children:[t.jsxs("span",{className:a.imageTrayItemMetaDetails,children:[Po(e.sizeBytes),e.updatedAt?t.jsxs(t.Fragment,{children:[" · ",Bo(e.updatedAt)]}):null,i>0?t.jsxs(t.Fragment,{children:[" · ",i," session",i===1?"":"s"]}):null]}),e.imageReferenceLabel?t.jsx("span",{className:a.imageTrayItemReference,children:e.imageReferenceLabel}):null]})]})]},e.assetId)})})]}):null,t.jsxs("section",{className:`tf-surface-panel ${a.panel} ${a.sessionPanel}`,children:[t.jsx("div",{className:a.sessionContextBar,children:d?.taskId?t.jsxs(t.Fragment,{children:[t.jsx("div",{className:a.sessionContextLeft,children:je?t.jsx("button",{type:"button",className:`tf-button-ghost tf-button-compact ${a.ghostBtn} ${a.backToTaskBtn}`,onClick:()=>{M("back-to-task").then(e=>{e&&d.taskId&&je(d.taskId)})},"aria-label":"Back to task",title:"Back to task",children:t.jsx(zn,{size:16})}):t.jsx("div",{className:a.sessionContextSpacer,"aria-hidden":"true"})}),t.jsx("div",{className:a.sessionContextRight,children:t.jsx(Hn,{copied:bt,onClick:()=>{wn()},title:"Copy task id",ariaLabel:bt?"Copied task id":"Copy task id",label:Tt})})]}):t.jsxs(t.Fragment,{children:[t.jsx("div",{className:a.sessionContextLeft,children:t.jsx("span",{className:`tf-label-micro ${a.sessionContextLabel}`,children:"Unattached Image"})}),t.jsx("div",{className:a.sessionContextRight,children:t.jsx("div",{className:a.sessionContextSpacer,"aria-hidden":"true"})})]})}),t.jsxs("div",{className:a.panelHeader,children:[t.jsxs("div",{className:a.panelHeaderText,children:[t.jsx("div",{className:`tf-heading-card ${a.panelTitle}`,children:"Sessions"}),d?null:t.jsx("div",{className:"tf-text-secondary",children:"Open an image attachment to begin"})]}),t.jsx("div",{className:a.sessionActions,children:t.jsx("button",{type:"button",className:`tf-control-icon ${a.iconButton}`,onClick:()=>{Ea()},disabled:!d||V,"aria-label":"Create session",title:"Create session",children:t.jsx(Un,{size:16})})})]}),d?gt?t.jsx("div",{className:a.emptyState,children:t.jsx("p",{className:"tf-empty-copy",children:"Loading sessions…"})}):t.jsx("div",{className:`tf-scrollbar ${a.sessionList}`,children:mt.length===0?t.jsxs("div",{className:a.sessionEmptyState,children:[t.jsx("div",{className:`tf-heading-card ${a.sessionTitle}`,children:"No sessions yet"}),t.jsx("div",{className:`tf-text-secondary ${a.annotationSummary}`,children:"Create the first annotation session for this image."})]}):mt.map(e=>{const n=v===e.id,o=n&&At,i=Eo(n?Pe:e.globalInstruction),c=(n?Re:e.title)||"Untitled session";return t.jsxs("div",{className:`tf-surface-elevated ${a.sessionCard} ${n?a.sessionCardActive:""}`,ref:n?Sa:void 0,onBlur:o?h=>{const w=h.relatedTarget;w instanceof Node&&h.currentTarget.contains(w)||Ye(!1)}:void 0,children:[o?t.jsxs("div",{className:a.sessionCardBody,children:[t.jsxs("div",{className:a.sessionMeta,children:[t.jsx("label",{className:"tf-field-label",htmlFor:"annotated-session-title",children:"Session title"}),t.jsx("input",{id:"annotated-session-title",className:`tf-field-shell ${a.textInput} ${a.sessionTitleInput}`,value:Re,onChange:h=>{Xe(h.target.value),Y(600)},placeholder:"Session title"}),t.jsx("span",{className:`tf-text-meta ${a.sessionTimestamp}`,children:ra(e.updatedAt)})]}),Bt(e)?t.jsxs("div",{className:`tf-text-secondary ${a.sessionCreator}`,children:["Created by ",Bt(e)]}):null,t.jsxs("div",{className:a.sessionInstructionEditor,children:[t.jsx("label",{className:"tf-field-label",htmlFor:"annotated-session-instruction",children:"Session instruction"}),t.jsx("textarea",{id:"annotated-session-instruction",className:`tf-field-shell ${a.textArea} ${a.sessionInstructionField}`,value:Pe,onChange:h=>{Ve(h.target.value),Y(600)},placeholder:"Add overall instructions, context, or framing for this session."})]}),t.jsxs("div",{className:`tf-text-secondary ${a.annotationSummary}`,children:[e.annotations.length," annotation",e.annotations.length===1?"":"s"]})]}):t.jsxs("button",{type:"button",className:a.sessionCardButton,onClick:()=>{if(n){Ye(!0);return}M("session-switch").then(h=>{h&&($e(e.id),pe(e,d))})},"aria-pressed":n,children:[t.jsxs("div",{className:a.sessionMeta,children:[t.jsx("span",{className:`tf-heading-card ${a.sessionTitle}`,children:c}),t.jsx("span",{className:`tf-text-meta ${a.sessionTimestamp}`,children:ra(e.updatedAt)})]}),Bt(e)?t.jsxs("div",{className:`tf-text-secondary ${a.sessionCreator}`,children:["Created by ",Bt(e)]}):null,i?t.jsx("div",{className:`tf-text-secondary ${a.sessionInstructionPreview}`,children:i}):null,t.jsxs("div",{className:`tf-text-secondary ${a.annotationSummary}`,children:[e.annotations.length," annotation",e.annotations.length===1?"":"s"]})]}),n?t.jsx("div",{className:a.sessionCardFooter,children:t.jsxs(t.Fragment,{children:[t.jsx("button",{type:"button",className:`tf-button-ghost ${a.toolRailButton} ${a.iconButton}`,onClick:()=>{vn()},disabled:V,"aria-label":"Duplicate session",title:`Duplicate session "${c}"`,children:t.jsx(sa,{size:16})}),t.jsx("button",{type:"button",className:`tf-button-ghost ${a.toolRailButton} ${a.iconButton}`,onClick:()=>{Sn()},disabled:V,"aria-label":"Delete session",title:`Delete session "${c}"`,children:t.jsx(Ga,{size:16})})]})}):null]},e.id)})}):t.jsxs("div",{className:a.emptyState,children:[t.jsx("strong",{className:"tf-empty-title",children:"No image selected"}),t.jsx("p",{className:"tf-empty-copy",children:"Open an image attachment from a task to start an annotated session."})]})]}),t.jsxs("section",{className:`tf-surface-panel ${a.panel} ${a.canvasPanel}`,children:[t.jsxs("div",{className:a.panelHeader,children:[t.jsxs("div",{className:a.canvasHeading,children:[t.jsx("div",{className:"tf-heading-card",children:d?.displayName||"Annotated attachment"}),t.jsx("div",{className:"tf-text-secondary",children:B?`${j.length} markers · ${Mn}`:"Pick or create a session"})]}),rt?t.jsx(Qn,{copied:xt,onClick:()=>{kn()},title:"Copy image reference",ariaLabel:xt?"Copied image reference":"Copy image reference",label:rt}):null]}),t.jsxs("div",{className:a.toolRail,children:[t.jsxs("div",{className:`${a.toolbarCluster} ${a.toolbarViewportCluster}`,children:[t.jsx("button",{type:"button",className:`tf-button-ghost tf-button-compact ${a.ghostBtn} ${a.toolbarButton}`,onClick:()=>{_n()},disabled:!B||V||!Ca&&K!=="error","aria-label":V?"Saving session":"Save session",title:V?"Saving session":"Save session",children:t.jsx(Gn,{size:18})}),t.jsx("button",{type:"button",className:`tf-button-ghost tf-button-compact ${a.ghostBtn} ${a.toolbarButton}`,onClick:()=>vt(!0),disabled:qe,"aria-label":"Open image",title:"Open image",children:t.jsx(Ua,{size:18})}),t.jsx("button",{type:"button",className:`tf-button-ghost tf-button-compact ${a.ghostBtn} ${a.toolbarButton}`,onClick:()=>{pn()},disabled:wt,"aria-label":wt?"Pasting image":"Paste image",title:wt?"Pasting image":"Paste image",children:wt?t.jsx(Ka,{size:18,className:za.spin}):t.jsx(Kn,{size:18})}),t.jsx("button",{type:"button",className:`tf-button-ghost tf-button-compact ${a.ghostBtn} ${a.toolbarButton}`,onClick:()=>{B&&hn()},disabled:!B||!Ca,"aria-label":"Reset unsaved changes",title:"Reset unsaved changes",children:t.jsx(Wn,{size:18})}),t.jsx("button",{type:"button",className:`tf-button-ghost ${a.toolRailButton} ${a.iconButton}`,onClick:Cn,disabled:!d||ue||P<=.25,"aria-label":"Zoom out",children:t.jsx(Yn,{size:18})}),t.jsx("button",{type:"button",className:`tf-button-ghost tf-button-compact ${a.ghostBtn} ${a.toolbarButton}`,onClick:jn,disabled:!d||ue||P===1,"aria-label":`Reset zoom to 100 percent (currently ${Zt})`,title:`Reset zoom to 100% (currently ${Zt})`,children:t.jsx("span",{children:Zt})}),t.jsx("button",{type:"button",className:`tf-button-ghost ${a.toolRailButton} ${a.iconButton}`,onClick:Nn,disabled:!d||ue||P>=4,"aria-label":"Zoom in",children:t.jsx(Xn,{size:18})}),t.jsx("button",{type:"button",className:`tf-button-ghost tf-button-compact ${a.toolBtn} ${a.toolbarButton} ${W?a.toolBtnActive:""}`,onClick:()=>Qe(e=>!e),disabled:!d||ue||!Oe,"aria-label":"Pan canvas",title:"Pan canvas",children:t.jsx(Vn,{size:18})})]}),t.jsx("span",{className:a.toolbarSeparator,"aria-hidden":"true"}),t.jsxs("div",{className:a.toolbarActions,children:[t.jsx("div",{className:a.toolbarSelectionActions,children:z?t.jsxs(t.Fragment,{children:[t.jsxs("div",{ref:ka,className:a.toolbarColorPicker,children:[t.jsx("button",{type:"button",className:`tf-button-ghost tf-button-compact ${a.ghostBtn} ${a.toolbarButton} ${a.colorPickerButton}`,onClick:()=>pt(e=>!e),"aria-label":"Marker color","aria-expanded":ht,title:"Marker color",children:t.jsx("span",{className:a.colorPickerSwatch,style:{backgroundColor:qt},"aria-hidden":"true"})}),ht?t.jsx("div",{className:a.colorPickerPopover,role:"menu","aria-label":"Marker color options",children:$o.map(e=>t.jsx("button",{type:"button",className:`${a.colorOption} ${qt===e?a.colorOptionActive:""}`,style:{backgroundColor:e},onClick:()=>bn(e),"aria-label":`Use marker color ${e}`,"aria-pressed":qt===e},e))}):null]}),t.jsx("button",{type:"button",className:`tf-button-ghost tf-button-compact ${a.ghostBtn} ${a.toolbarButton}`,onClick:ea,"aria-label":"Delete marker",title:"Delete selected marker",children:t.jsx(Ga,{size:18})}),t.jsx("div",{className:a.toolbarGeometryFields,"aria-label":"Marker geometry percent controls",children:zo(z).map(e=>t.jsxs("label",{className:a.toolbarGeometryField,children:[t.jsx("span",{className:`tf-text-meta ${a.toolbarGeometryLabel}`,children:e.label}),t.jsx("input",{className:`tf-field-shell ${a.toolbarGeometryInput}`,type:"number",min:0,max:100,step:.1,value:e.value,onChange:n=>{const o=Do(n.target.value);o!==null&&te(z.id,i=>Oo(i,e.key,o))},"aria-label":`${e.label} percent`})]},e.key))})]}):null}),t.jsxs("div",{className:a.toolbarUtilities,children:[t.jsx("button",{type:"button",className:`tf-button-ghost tf-button-compact ${a.ghostBtn} ${a.payloadBtn} ${a.toolbarButton}`,onClick:In,disabled:!B||yt,"aria-label":yt?"Loading payload preview":"Preview payload",title:yt?"Loading payload preview":"Preview payload",children:t.jsx(ia,{size:18})}),t.jsx("button",{type:"button",className:`tf-button-ghost tf-button-compact ${a.ghostBtn} ${a.toolbarButton}`,onClick:()=>pa(!0),"aria-label":"How to use marker tools",title:"How to use marker tools",children:t.jsx(la,{size:18})})]})]})]}),t.jsxs("div",{className:a.canvasWorkspace,children:[t.jsx("div",{className:a.canvasToolRail,"aria-label":"Annotation tools",children:Ya.map(e=>{const n=e.icon;return t.jsx("button",{type:"button",className:`tf-button-ghost ${a.toolRailButton} ${T===e.value?a.toolBtnActive:""}`,onClick:()=>xn(e.value),disabled:!d,title:e.label,"aria-label":`${e.label} tool. ${Pt[e.value].short}`,children:t.jsx(n,{size:18})},e.value)})}),t.jsx("div",{className:a.canvasMain,children:t.jsx("div",{ref:Ee,className:`tf-scrollbar ${a.canvasScroller}`,children:d?t.jsxs(t.Fragment,{children:[ue&&!Gt?t.jsx("div",{className:a.canvasStatusOverlay,"aria-live":"polite",children:t.jsxs("div",{className:a.canvasStatusCard,children:[t.jsx(Ka,{size:20,className:za.spinner}),t.jsx("span",{children:"Loading image…"})]})}):null,Gt?t.jsx("div",{className:a.canvasStatusOverlay,"aria-live":"polite",children:t.jsx("div",{className:a.canvasStatusCard,children:t.jsx("span",{children:"Image failed to load."})})}):null,t.jsx("div",{className:a.canvasFrame,children:t.jsxs("div",{className:a.canvasMedia,style:{width:y.width?`${y.width}px`:void 0,height:y.height?`${y.height}px`:void 0},children:[t.jsx("img",{ref:Wt,src:d.path,alt:d.displayName,className:a.canvasImage,onLoad:()=>{const e=Wt.current;tt({width:e?.naturalWidth||0,height:e?.naturalHeight||0}),Je(!1),Ze(!1)},onError:()=>{tt({width:0,height:0}),Je(!1),Ze(!0)}}),!ue&&!Gt&&B?t.jsxs("div",{ref:_a,className:`${a.overlay} ${T==="select"?a.overlaySelect:""} ${W?a.overlayPan:""}`,onPointerDown:Tn,onPointerMove:Rn,onPointerUp:e=>{$n(e),En()},"data-testid":"annotated-attachment-overlay",onPointerLeave:Pn,onPointerCancel:Bn,children:[t.jsx("svg",{className:a.overlaySvg,viewBox:Jt,preserveAspectRatio:"none","aria-hidden":"true",children:j.filter(e=>e.kind==="arrow").map(e=>{const n=Ao(e,y),o=oa(e),i=S===e.id;return t.jsxs(aa.Fragment,{children:[i?t.jsxs(t.Fragment,{children:[t.jsx("line",{x1:n.shaftX1,y1:n.shaftY1,x2:n.shaftX2,y2:n.shaftY2,stroke:"color-mix(in srgb, var(--surface-elevated) 92%, transparent)",strokeWidth:14,strokeLinecap:"round"}),t.jsx("polygon",{points:n.headPoints,fill:o,stroke:"color-mix(in srgb, var(--surface-elevated) 92%, transparent)",strokeWidth:4,strokeLinejoin:"round"})]}):null,t.jsx("line",{x1:n.shaftX1,y1:n.shaftY1,x2:n.shaftX2,y2:n.shaftY2,stroke:o,strokeWidth:i?10:6,strokeLinecap:"round"}),t.jsx("polygon",{points:n.headPoints,fill:o})]},e.id)})}),t.jsx("svg",{className:a.overlayHitLayer,viewBox:Jt,preserveAspectRatio:"none",children:j.filter(e=>e.kind==="arrow").map(e=>t.jsxs(aa.Fragment,{children:[t.jsx("line",{x1:e.x*y.width,y1:e.y*y.height,x2:e.x2*y.width,y2:e.y2*y.height,className:a.arrowHitArea,"data-testid":`annotated-arrow-hit-${e.id}`,"aria-label":`Arrow marker ${Qt.get(e.id)||0}`,onPointerDown:n=>Fa(n,e),onClick:n=>{n.stopPropagation(),F(e.id)}}),S===e.id?t.jsxs(t.Fragment,{children:[t.jsx("circle",{cx:e.x*y.width,cy:e.y*y.height,r:De.hitRadius,className:a.canvasHandleHit,role:"button",tabIndex:0,"aria-label":"Move arrow tail",onPointerDown:n=>Ha(n,e,"tail")}),t.jsx("circle",{cx:e.x*y.width,cy:e.y*y.height,r:De.visibleRadius,className:a.canvasHandleVisible,"aria-hidden":"true"}),t.jsx("circle",{cx:e.x2*y.width,cy:e.y2*y.height,r:De.hitRadius,className:a.canvasHandleHit,role:"button",tabIndex:0,"aria-label":"Move arrow tip",onPointerDown:n=>Ha(n,e,"tip")}),t.jsx("circle",{cx:e.x2*y.width,cy:e.y2*y.height,r:De.visibleRadius,className:a.canvasHandleVisible,"aria-hidden":"true"})]}):null]},`hit-${e.id}`))}),j.filter(e=>e.kind==="arrow").map(e=>t.jsx("div",{className:`${a.annotationNumberBadge} ${a.arrowNumberBadge}`,style:{left:`${(e.x+e.x2)/2*100}%`,top:`${(e.y+e.y2)/2*100}%`,backgroundColor:oa(e)},"aria-hidden":"true",children:Qt.get(e.id)||0},`arrow-number-${e.id}`)),j.filter(e=>e.kind!=="arrow").map(e=>{const n=oa(e),o=Qt.get(e.id)||0,i={onPointerDown:c=>Fa(c,e),onClick:c=>{c.stopPropagation(),F(e.id)}};return e.kind==="pin"?t.jsx("button",{type:"button",...i,className:`${a.pin} ${S===e.id?a.selected:""}`,style:{left:`${e.x*100}%`,top:`${e.y*100}%`,backgroundColor:n},children:o},e.id):e.kind==="text-note"?t.jsx("button",{type:"button",...i,className:`${a.note} ${S===e.id?a.selected:""}`,style:{left:`${e.x*100}%`,top:`${e.y*100}%`,backgroundColor:n},children:o},e.id):t.jsxs("div",{className:`${a.box} ${S===e.id?a.selected:""}`,style:{left:`${e.x*100}%`,top:`${e.y*100}%`,width:`${e.width*100}%`,height:`${e.height*100}%`,borderColor:n},children:[t.jsx("span",{className:`${a.annotationNumberBadge} ${a.boxNumberBadge}`,style:{backgroundColor:n},"aria-hidden":"true",children:o}),t.jsx("button",{type:"button",...i,className:a.boxSurface,"aria-label":`Box marker ${o}`})]},e.id)}),t.jsx("svg",{className:a.overlaySvg,viewBox:Jt,preserveAspectRatio:"none",children:j.filter(e=>e.kind==="box"&&S===e.id).map(e=>t.jsxs(aa.Fragment,{children:[t.jsx("circle",{cx:(e.x+e.width)*y.width,cy:(e.y+e.height)*y.height,r:De.hitRadius,className:`${a.canvasHandleHit} ${a.canvasResizeHandleHit}`,role:"button",tabIndex:0,"aria-label":"Resize box marker",onPointerDown:n=>An(n,e)}),t.jsx("circle",{cx:(e.x+e.width)*y.width,cy:(e.y+e.height)*y.height,r:De.visibleRadius,className:a.canvasHandleVisible,"aria-hidden":"true"})]},`box-handle-${e.id}`))})]}):null]})})]}):t.jsx("div",{className:a.emptyState,children:t.jsx("p",{className:"tf-empty-copy",children:"Select an image attachment to annotate."})})})})]}),t.jsxs("div",{className:a.statusBar,children:[t.jsx("span",{children:K==="error"?"Save failed. Retry now.":K==="saving"||K==="pending"?"Saving…":"Saved"}),ma?t.jsx("span",{children:ma}):t.jsx("span",{children:B?W?"Drag on the image to pan.":T==="select"?"Select a marker to edit it.":`Click on the image to place a ${T}.`:"Create a session to begin placing markers on this image."}),d&&!B&&sn?t.jsx("button",{type:"button",className:`tf-button-ghost tf-button-compact ${a.ghostBtn} ${a.toolbarButton}`,onClick:()=>{Ea()},disabled:V||gt,children:V?"Creating…":"Create one now"}):null]})]}),t.jsx("section",{className:`tf-surface-panel ${a.panel} ${a.detailPanel}`,children:B?t.jsxs(t.Fragment,{children:[t.jsxs("div",{className:a.panelHeader,children:[t.jsxs("div",{className:a.panelHeaderText,children:[t.jsx("div",{className:`tf-heading-card ${a.panelTitle}`,children:"Markers"}),t.jsxs("div",{className:"tf-text-secondary",children:[j.length," in this session"]})]}),t.jsxs("div",{className:a.sessionActions,children:[t.jsx("button",{type:"button",className:`tf-control-icon ${a.iconButton}`,onClick:()=>La("up"),disabled:!z||Vt<=0,"aria-label":"Move marker up",children:t.jsx(Jn,{size:16})}),t.jsx("button",{type:"button",className:`tf-control-icon ${a.iconButton}`,onClick:()=>La("down"),disabled:!z||Vt===-1||Vt>=j.length-1,"aria-label":"Move marker down",children:t.jsx(Zn,{size:16})})]})]}),t.jsx("div",{className:`tf-scrollbar ${a.annotationList}`,children:j.length===0?t.jsx("div",{className:a.detailEmpty,children:t.jsx("p",{className:"tf-empty-copy",children:"Add a marker on the image to begin."})}):j.map((e,n)=>{const o=Co[e.kind],i=jo[e.kind],c=`${i} ${n+1}`,h=To[e.markerType||ce],w=Wa.find(m=>m.value===(e.markerType||ce))?.label||"Review",u=S===e.id;return t.jsxs("div",{className:`tf-surface-elevated ${a.annotationCard} ${u?a.annotationCardActive:""}`,children:[t.jsx("button",{type:"button",className:a.annotationCardButton,onClick:()=>F(e.id),"aria-label":i,children:t.jsxs("div",{className:a.annotationMeta,children:[t.jsx("span",{className:`tf-heading-card ${a.annotationTitle}`,children:c}),t.jsx("span",{className:`tf-text-meta ${a.annotationKind}`,"aria-hidden":"true",children:t.jsx(o,{size:16})})]})}),u?t.jsxs("div",{className:a.annotationInstructionEditor,children:[t.jsx("label",{className:"tf-field-label",htmlFor:"annotated-marker-instruction",children:"Marker instruction"}),t.jsx("textarea",{id:"annotated-marker-instruction",ref:u?Ia:null,className:`tf-field-shell ${a.textArea} ${a.annotationInstructionField}`,value:e.instruction,onChange:m=>{te(e.id,_=>({..._,instruction:m.target.value}),600)},onBlur:()=>{M("text")},placeholder:"What should the AI focus on for this marker?"}),t.jsxs("div",{className:a.annotationTypeField,children:[t.jsx("label",{className:"tf-field-label",htmlFor:"annotated-marker-type",children:"Instruction type"}),t.jsx("select",{id:"annotated-marker-type",className:`tf-field-shell ${a.select}`,value:e.markerType||ce,onChange:m=>{te(e.id,_=>Mo(_,m.target.value))},children:Wa.map(m=>t.jsx("option",{value:m.value,children:m.label},m.value))})]})]}):t.jsx("button",{type:"button",className:a.annotationInstructionButton,onClick:()=>F(e.id),"aria-label":`Edit ${i} instruction`,children:t.jsxs("div",{className:a.annotationInstructionEditor,children:[t.jsx("div",{className:`tf-text-secondary ${a.annotationInstructionPreview}`,children:e.instruction.trim()||"No marker instruction yet."}),t.jsx("div",{className:a.annotationPreviewFooter,children:t.jsx("span",{className:`tf-text-meta ${a.annotationInstructionTypeIcon}`,"aria-label":`Instruction type: ${w}`,title:w,children:t.jsx(h,{size:16})})})]})})]},e.id)})})]}):t.jsxs("div",{className:a.emptyState,children:[t.jsx("strong",{className:"tf-empty-title",children:"No active session"}),t.jsx("p",{className:"tf-empty-copy",children:"Create or select a session to edit annotations."})]})}),t.jsx(na,{isOpen:ln,onClose:()=>{qe||(vt(!1),_t(""))},title:"Open Image",size:"sm",children:t.jsxs("form",{className:a.openImageModalBody,onSubmit:e=>{e.preventDefault(),gn()},children:[t.jsx("label",{className:"tf-field-label",htmlFor:"annotated-open-image-reference",children:"Image reference number"}),t.jsx("input",{id:"annotated-open-image-reference",className:`tf-field-shell ${a.textInput} ${a.openImageField}`,value:zt,onChange:e=>_t(e.target.value),placeholder:"I-24",autoFocus:!0}),t.jsxs("div",{className:a.openImageActions,children:[t.jsx("button",{type:"button",className:"tf-button-ghost tf-button-compact",onClick:()=>{vt(!1),_t("")},disabled:qe,children:"Cancel"}),t.jsx("button",{type:"submit",className:"tf-button-primary tf-button-compact",disabled:qe,children:qe?"Opening…":"Open"})]})]})}),t.jsx(na,{isOpen:on,onClose:()=>pa(!1),title:"How To Use Markers",size:"md",children:t.jsx("div",{className:a.markerHelpModalBody,children:Ya.filter(e=>e.value!=="select").map(e=>t.jsxs("div",{className:`tf-surface-inset ${a.markerHelpItem}`,children:[t.jsxs("div",{className:a.markerHelpHeader,children:[t.jsx("strong",{className:"tf-heading-card",children:e.label}),t.jsx("span",{className:"tf-text-meta",children:Pt[e.value].short})]}),t.jsx("p",{className:"tf-text-secondary",children:Pt[e.value].detail}),t.jsx("p",{className:`tf-text-body ${a.markerHelpExample}`,children:Pt[e.value].example})]},e.value))})}),t.jsx(na,{isOpen:rn,onClose:()=>Ft(!1),title:"AI Payload",size:"lg",children:t.jsxs("div",{className:a.payloadModalBody,children:[t.jsxs("div",{className:a.payloadModalToolbar,children:[t.jsxs("div",{className:a.payloadViewToggle,children:[t.jsx("button",{type:"button",className:`tf-button-ghost tf-button-compact ${a.toolBtn} ${Ht==="json"?a.toolBtnActive:""}`,onClick:()=>ha("json"),children:"JSON"}),t.jsx("button",{type:"button",className:`tf-button-ghost tf-button-compact ${a.toolBtn} ${Ht==="brief"?a.toolBtnActive:""}`,onClick:()=>ha("brief"),children:"AI Brief"})]}),t.jsxs("div",{className:a.payloadModalActions,children:[t.jsxs("button",{type:"button",className:`tf-button-ghost tf-button-compact ${a.ghostBtn}`,onClick:()=>{Ma("json")},disabled:!oe,"aria-label":de==="json"?"Copied JSON":"Copy JSON",title:de==="json"?"Copied JSON":"Copy JSON",children:[de==="json"?t.jsx(ca,{size:16}):t.jsx(sa,{size:16}),t.jsx("span",{children:"JSON"})]}),t.jsxs("button",{type:"button",className:`tf-button-ghost tf-button-compact ${a.ghostBtn}`,onClick:()=>{Ma("brief")},disabled:!oe,"aria-label":de==="brief"?"Copied AI Brief":"Copy AI Brief",title:de==="brief"?"Copied AI Brief":"Copy AI Brief",children:[de==="brief"?t.jsx(ca,{size:16}):t.jsx(sa,{size:16}),t.jsx("span",{children:"AI Brief"})]})]})]}),yt?t.jsx("div",{className:a.detailEmpty,children:t.jsx("p",{className:"tf-empty-copy",children:"Loading payload…"})}):oe?t.jsx("pre",{className:`tf-surface-inset tf-scrollbar ${a.payloadModalPreview}`,children:Ht==="json"?JSON.stringify(oe,null,2):Va(oe)}):t.jsx("div",{className:a.detailEmpty,children:t.jsx("p",{className:"tf-empty-copy",children:"Load a payload preview to inspect the current session contract."})})]})})]})}export{Qo as AnnotatedAttachmentWorkspaceShell};
@@ -1 +0,0 @@
1
- ._shell_17mlo_1{--image-tray-width: min(332px, calc(100vw - 96px) );position:relative;align-self:stretch;width:100%;box-sizing:border-box;display:grid;grid-template-columns:minmax(220px,280px) minmax(0,1fr) minmax(280px,340px);gap:16px;height:100%;min-height:0;padding:16px;background:radial-gradient(circle at top left,color-mix(in srgb,var(--brand-primary) 8%,transparent),transparent 26%),linear-gradient(180deg,color-mix(in srgb,var(--surface-page) 84%,var(--surface-panel)) 0%,var(--surface-page) 100%)}._shellWithImageTray_17mlo_18{transition:padding-left .22s cubic-bezier(.4,0,.2,1)}._shellImageTrayOpen_17mlo_22{padding-left:calc(var(--image-tray-width) + 16px)}._imageTrayPanel_17mlo_26{position:absolute;top:0;bottom:0;left:0;width:var(--image-tray-width);min-width:260px;max-width:332px;display:flex;flex-direction:column;padding:0 12px;box-sizing:border-box;border-right:1px solid var(--border-primary);background:var(--bg-secondary);overflow:hidden;transform:translate(-100%);opacity:0;visibility:hidden;pointer-events:none;z-index:34;box-shadow:4px 0 18px #080a1829;transition:transform .22s cubic-bezier(.4,0,.2,1),opacity .16s ease,visibility 0s linear .22s}._imageTrayPanelOpen_17mlo_50{transform:translate(0);opacity:1;visibility:visible;pointer-events:auto;transition:transform .22s cubic-bezier(.4,0,.2,1),opacity .16s ease,visibility 0s linear 0s}._imageTrayHeader_17mlo_58{position:sticky;top:0;z-index:12;display:flex;align-items:center;justify-content:space-between;gap:.75rem;padding:12px 0 10px;border-bottom:1px solid var(--border-default);background:var(--bg-secondary);box-shadow:0 10px 16px color-mix(in srgb,var(--bg-secondary) 90%,transparent);flex-shrink:0}._imageTrayTitle_17mlo_73{flex:1;display:flex;align-items:center;gap:6px;font-size:.78rem;font-weight:700;letter-spacing:.06em;text-transform:uppercase;color:var(--text-secondary)}._imageTraySearch_17mlo_85{position:relative;padding:12px 0 0;flex-shrink:0}._imageTraySearchIcon_17mlo_91{position:absolute;left:10px;top:50%;transform:translateY(-50%);color:var(--text-muted);pointer-events:none}._imageTraySearchInput_17mlo_100{width:100%;padding:7px 8px 7px 28px;background:color-mix(in srgb,var(--surface-inset) 88%,transparent);border:1px solid var(--border-default);border-radius:var(--radius-md);color:var(--text-primary);font-size:.75rem;font-family:inherit;outline:none;box-sizing:border-box}._imageTraySearchInput_17mlo_100:focus{border-color:var(--brand-primary)}._imageTrayList_17mlo_117{display:flex;flex-direction:column;gap:.375rem;flex:1;overflow-y:auto;min-height:0;padding:12px 0;scrollbar-width:thin;scrollbar-color:var(--scrollbar-thumb) var(--scrollbar-track)}._imageTrayState_17mlo_129,._imageTrayStateError_17mlo_130{padding:24px 16px;font-size:.75rem;color:var(--text-muted);text-align:center;line-height:1.5}._imageTrayStateError_17mlo_130{color:var(--status-error)}._imageTrayItem_17mlo_142{width:100%;display:flex;align-items:flex-start;gap:8px;padding:.55rem .65rem;border-radius:var(--radius-md);border:1px solid var(--border-default);background:color-mix(in srgb,var(--surface-inset) 88%,transparent);cursor:pointer;text-align:left;transition:background var(--transition-base),border-color var(--transition-base),box-shadow var(--transition-base),transform var(--transition-base);font-family:inherit;color:var(--text-primary);min-width:0}._imageTrayItem_17mlo_142:hover{background:color-mix(in srgb,var(--surface-hover) 72%,transparent);transform:translateY(-1px)}._imageTrayItemActive_17mlo_164{border-color:var(--brand-primary-border);background:color-mix(in srgb,var(--brand-primary-soft) 94%,transparent);box-shadow:inset 0 0 0 1px color-mix(in srgb,var(--brand-primary-border) 42%,transparent)}._imageTrayItemActive_17mlo_164:hover{background:color-mix(in srgb,var(--brand-primary-soft) 92%,transparent)}._imageTrayThumb_17mlo_174{width:34px;height:34px;flex-shrink:0;border-radius:6px;overflow:hidden;background:var(--surface-inset);border:1px solid var(--border-subtle)}._imageTrayThumb_17mlo_174 img{width:100%;height:100%;object-fit:cover;display:block}._imageTrayItemBody_17mlo_191{display:flex;flex-direction:column;gap:.25rem;min-width:0;flex:1}._imageTrayItemTitle_17mlo_199,._imageTrayItemTask_17mlo_200,._imageTrayItemMetaDetails_17mlo_201{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}._imageTrayItemTitle_17mlo_199{display:block;max-width:100%;font-size:.875rem;font-weight:700;line-height:1.28;color:var(--text-primary)}._imageTrayItemTask_17mlo_200{display:block;max-width:100%;font-size:.75rem;line-height:1.35;color:color-mix(in srgb,var(--text-secondary) 92%,transparent)}._imageTrayItemMeta_17mlo_201{display:flex;align-items:center;justify-content:space-between;gap:8px;width:100%;font-size:.72rem;line-height:1.35;color:color-mix(in srgb,var(--text-secondary) 82%,transparent)}._imageTrayItemMetaDetails_17mlo_201{min-width:0}._imageTrayItemReference_17mlo_239{flex-shrink:0;font-size:.7rem;font-weight:700;color:var(--text-secondary)}._panel_17mlo_246{min-height:0;border-radius:var(--radius-md);box-shadow:0 18px 38px #0f172a14}._sessionPanel_17mlo_252,._detailPanel_17mlo_253{display:flex;flex-direction:column;overflow:hidden}._sessionContextBar_17mlo_259{display:flex;align-items:center;justify-content:space-between;gap:12px;min-height:58px;padding:12px 16px;border-bottom:1px solid var(--border-default);background:color-mix(in srgb,var(--surface-inset) 88%,transparent)}._sessionContextLeft_17mlo_270,._sessionContextRight_17mlo_271{display:flex;align-items:center;min-width:0}._sessionContextLeft_17mlo_270{flex:1}._sessionContextRight_17mlo_271{justify-content:flex-end;min-width:118px}._sessionContextLabel_17mlo_286{font-size:.84rem;font-weight:600;color:var(--text-secondary)}._sessionContextSpacer_17mlo_292{width:118px;height:32px}._canvasPanel_17mlo_297{display:flex;flex-direction:column;min-height:0;overflow:hidden}._canvasWorkspace_17mlo_304{display:grid;grid-template-columns:auto minmax(0,1fr);min-height:0;flex:1}._canvasMain_17mlo_311{display:flex;flex-direction:column;min-width:0;min-height:0}._panelHeader_17mlo_318{display:flex;align-items:center;justify-content:space-between;gap:12px;padding:16px;border-bottom:1px solid var(--border-default)}._panelHeaderText_17mlo_327{min-width:0}._panelTitle_17mlo_331{font-size:1rem}._canvasHeading_17mlo_335{min-width:0}._sessionActions_17mlo_339{display:inline-flex;align-items:center;gap:8px;margin-left:auto;flex-shrink:0}._sessionList_17mlo_347,._annotationList_17mlo_348{display:flex;flex:1 1 auto;flex-direction:column;gap:10px;min-height:0;padding:14px;overflow:auto;scrollbar-gutter:stable}._annotationList_17mlo_348{gap:12px}._markerHelpModalBody_17mlo_363{display:flex;flex-direction:column;gap:14px}._openImageModalBody_17mlo_369{display:flex;flex-direction:column;gap:12px}._openImageField_17mlo_375{width:100%}._openImageActions_17mlo_379{display:flex;justify-content:flex-end;gap:8px}._markerHelpItem_17mlo_385{display:flex;flex-direction:column;gap:6px;padding:12px 14px;border-radius:var(--radius-md)}._markerHelpHeader_17mlo_393{display:flex;align-items:baseline;justify-content:space-between;gap:12px}._markerHelpItem_17mlo_385 p{margin:0;line-height:1.45}._markerHelpExample_17mlo_405{font-weight:600}._sessionCard_17mlo_409,._annotationCard_17mlo_410{display:flex;flex-direction:column;gap:8px;padding:12px;border-radius:var(--radius-md);text-align:left;transition:border-color var(--transition-base),box-shadow var(--transition-base),transform var(--transition-base)}._sessionCard_17mlo_409{gap:10px}._sessionEmptyState_17mlo_427{display:flex;flex-direction:column;gap:8px;padding:8px 2px 0}._sessionCardButton_17mlo_434,._annotationCardButton_17mlo_444{display:flex;flex-direction:column;gap:8px;padding:0;border:0;background:transparent;text-align:left}._sessionCardBody_17mlo_454{display:flex;flex-direction:column;gap:8px}._sessionCardActive_17mlo_460,._annotationCardActive_17mlo_461{border-color:var(--button-tile-active-border);box-shadow:0 0 0 1px transparent,0 12px 28px var(--brand-primary-glow-soft)}._sessionCard_17mlo_409:hover,._annotationCard_17mlo_410:hover{transform:translateY(-1px)}._annotationMeta_17mlo_471{display:flex;align-items:center;justify-content:space-between;gap:8px}._annotationInstructionPreview_17mlo_478{display:-webkit-box;overflow:hidden;-webkit-line-clamp:2;-webkit-box-orient:vertical;line-height:1.45}._annotationPreviewFooter_17mlo_486{display:flex;align-items:center;justify-content:flex-start;min-height:16px}._annotationInstructionEditor_17mlo_493,._annotationTypeField_17mlo_499{display:flex;flex-direction:column;gap:8px}._annotationInstructionButton_17mlo_505{display:block;width:100%;padding:0;border:0;background:transparent;text-align:left}._annotationInstructionField_17mlo_514{min-height:92px}._sessionMeta_17mlo_518{display:flex;flex-direction:column;align-items:flex-start;gap:4px}._sessionTitle_17mlo_525,._annotationTitle_17mlo_526{font-size:.98rem;font-weight:700;color:var(--text-primary)}._sessionTimestamp_17mlo_532,._annotationKind_17mlo_533{text-transform:capitalize}._annotationInstructionTypeIcon_17mlo_537{display:inline-flex;align-items:center;justify-content:center}._sessionInstructionPreview_17mlo_543{line-height:1.45;display:-webkit-box;-webkit-box-orient:vertical;-webkit-line-clamp:2;overflow:hidden}._sessionInstructionEditor_17mlo_551{display:flex;flex-direction:column;gap:8px}._sessionCardFooter_17mlo_557{display:flex;align-items:center;justify-content:flex-end;gap:8px}._toolRail_17mlo_564{display:flex;flex-wrap:wrap;gap:8px;padding:0;border-bottom:1px solid var(--border-default);background:color-mix(in srgb,var(--surface-inset) 92%,transparent)}._canvasToolRail_17mlo_573{display:flex;flex-direction:column;align-items:center;gap:8px;padding:0;border-right:1px solid var(--border-default);background:color-mix(in srgb,var(--surface-inset) 94%,transparent)}._toolGroup_17mlo_583{display:inline-flex;flex-wrap:wrap;gap:8px;align-items:center;padding:4px;border:1px solid var(--border-default);border-radius:16px;background:var(--surface-panel)}._toolbarCluster_17mlo_594{display:inline-flex;flex-wrap:wrap;gap:8px;align-items:center}._toolbarViewportCluster_17mlo_601{margin-left:44px}._toolbarSeparator_17mlo_605{width:1px;align-self:stretch;background:var(--border-default)}._toolBtn_17mlo_611{white-space:nowrap}._toolRailButton_17mlo_615{display:inline-flex;align-items:center;justify-content:center;width:44px;height:44px;padding:0;border-radius:var(--radius-md)}._toolbarButton_17mlo_625{min-height:44px;border-radius:var(--radius-md)}._toolBtnActive_17mlo_630{background:var(--button-tile-active-bg);border-color:var(--button-tile-active-border);color:var(--button-tile-active-text);box-shadow:0 0 0 1px transparent,0 8px 24px var(--brand-primary-glow-soft)}._toolbarActions_17mlo_637{display:inline-flex;flex-wrap:wrap;align-items:center;gap:8px;flex:1 1 auto;min-width:0}._toolbarSelectionActions_17mlo_646{display:inline-flex;align-items:center;gap:8px;min-width:44px;flex-wrap:wrap}._toolbarColorPicker_17mlo_654{position:relative}._colorPickerButton_17mlo_658{min-width:44px;padding:0}._colorPickerSwatch_17mlo_663{width:24px;height:24px;border-radius:var(--radius-sm);border:2px solid color-mix(in srgb,var(--surface-panel) 88%,transparent);box-shadow:inset 0 0 0 1px #0f172a1f}._colorPickerPopover_17mlo_671{position:absolute;top:calc(100% + 8px);left:0;z-index:3;display:grid;grid-template-columns:repeat(3,1fr);gap:8px;padding:10px;border:1px solid var(--border-default);border-radius:var(--radius-md);background:var(--surface-panel);box-shadow:0 18px 32px #0f172a24}._colorOption_17mlo_686{width:24px;height:24px;padding:0;border:2px solid transparent;border-radius:var(--radius-sm);cursor:pointer;box-shadow:inset 0 0 0 1px #0f172a24}._colorOptionActive_17mlo_696{border-color:color-mix(in srgb,var(--surface-panel) 78%,var(--brand-primary));box-shadow:inset 0 0 0 1px #0f172a24,0 0 0 2px color-mix(in srgb,var(--brand-primary) 24%,transparent)}._toolbarUtilities_17mlo_703{margin-left:auto;display:inline-flex;flex-wrap:wrap;align-items:center;gap:8px}._toolbarGeometryFields_17mlo_711{display:inline-flex;align-items:center;gap:8px;flex-wrap:wrap}._toolbarGeometryField_17mlo_711{display:inline-flex;align-items:center;gap:6px}._toolbarGeometryLabel_17mlo_724{margin:0;text-transform:uppercase;white-space:nowrap}._toolbarGeometryInput_17mlo_730{width:68px;text-align:right}._iconButton_17mlo_735{flex-shrink:0}._primaryBtn_17mlo_739,._ghostBtn_17mlo_740,._payloadBtn_17mlo_741,._backToTaskBtn_17mlo_742{white-space:nowrap}._backToTaskBtn_17mlo_742{padding:7px 10px;color:var(--text-secondary);font-size:.88rem;font-weight:600}._backToTaskBtn_17mlo_742:hover,._backToTaskBtn_17mlo_742:focus-visible{color:var(--text-primary)}._payloadBtn_17mlo_741{font-weight:700}._canvasScroller_17mlo_762{position:relative;flex:1;min-height:0;overflow:auto;display:block;scrollbar-gutter:stable;background:linear-gradient(45deg,color-mix(in srgb,var(--surface-inset) 66%,var(--border-default)) 25%,transparent 25%),linear-gradient(-45deg,color-mix(in srgb,var(--surface-inset) 66%,var(--border-default)) 25%,transparent 25%),linear-gradient(45deg,transparent 75%,color-mix(in srgb,var(--surface-inset) 66%,var(--border-default)) 75%),linear-gradient(-45deg,transparent 75%,color-mix(in srgb,var(--surface-inset) 66%,var(--border-default)) 75%);background-size:22px 22px;background-position:0 0,0 11px,11px -11px,-11px 0}._canvasFrame_17mlo_778{position:relative;display:block;width:max-content;min-width:100%}._canvasMedia_17mlo_785{position:relative;display:block;flex-shrink:0;margin:0 auto;overflow:hidden}._canvasStatusOverlay_17mlo_793{position:absolute;inset:0;z-index:2;display:flex;align-items:center;justify-content:center;padding:24px;background:color-mix(in srgb,var(--surface-scrim) 68%,transparent);pointer-events:none}._canvasStatusCard_17mlo_805{display:inline-flex;align-items:center;gap:10px;padding:12px 16px;border:1px solid color-mix(in srgb,var(--border-strong) 44%,white);border-radius:var(--radius-md);background:#0f172ac7;color:#fff;box-shadow:0 18px 30px #0f172a38;-webkit-backdrop-filter:blur(10px);backdrop-filter:blur(10px)}._canvasImage_17mlo_818{display:block;width:100%;height:100%;-webkit-user-select:none;user-select:none}._overlay_17mlo_825{position:absolute;inset:0;cursor:crosshair}._overlaySelect_17mlo_831{cursor:default}._overlayPan_17mlo_835{cursor:grab}._overlaySvg_17mlo_839{position:absolute;inset:0;display:block;width:100%;height:100%;pointer-events:none}._overlayHitLayer_17mlo_848{position:absolute;inset:0;display:block;width:100%;height:100%;pointer-events:auto}._arrowHitArea_17mlo_857{stroke:transparent;stroke-width:24;pointer-events:stroke;cursor:move}._canvasHandleHit_17mlo_864{fill:transparent;pointer-events:all;cursor:grab;outline:none}._canvasResizeHandleHit_17mlo_871{cursor:nwse-resize}._canvasHandleVisible_17mlo_875{--canvas-handle-fill: var(--brand-primary);--canvas-handle-outline: var(--surface-elevated);--canvas-handle-shadow: 0 6px 12px rgba(15, 23, 42, .18);fill:var(--canvas-handle-fill);stroke:var(--canvas-handle-outline);stroke-width:3;vector-effect:non-scaling-stroke;filter:drop-shadow(var(--canvas-handle-shadow));pointer-events:none}._canvasHandleHit_17mlo_864:focus-visible+._canvasHandleVisible_17mlo_875{stroke:color-mix(in srgb,var(--brand-primary) 72%,var(--surface-elevated));stroke-width:4}._pin_17mlo_892,._note_17mlo_893{position:absolute;transform:translate(-50%,-50%);display:inline-flex;align-items:center;justify-content:center;min-width:28px;min-height:28px;border:2px solid var(--surface-elevated);border-radius:999px;box-shadow:0 8px 18px #0f172a38;color:#fff;font-size:.74rem;font-weight:800;pointer-events:auto}._annotationNumberBadge_17mlo_910{position:absolute;display:inline-flex;align-items:center;justify-content:center;min-width:28px;min-height:28px;padding:0 8px;border:2px solid var(--surface-elevated);border-radius:999px;box-shadow:0 8px 18px #0f172a38;color:#fff;font-size:.74rem;font-weight:800;line-height:1;pointer-events:none;z-index:2}._note_17mlo_893{min-width:38px;padding:0 10px;border-radius:999px}._box_17mlo_935{position:absolute;border:2px solid;border-radius:var(--radius-sm);box-shadow:inset 0 0 0 1px color-mix(in srgb,var(--surface-elevated) 34%,transparent);background:color-mix(in srgb,var(--surface-elevated) 10%,transparent);pointer-events:auto}._boxNumberBadge_17mlo_944{top:0;left:0;transform:translate(-28%,-36%)}._arrowNumberBadge_17mlo_950{transform:translate(-50%,-50%)}._boxSurface_17mlo_954{position:absolute;inset:0;border:0;background:transparent;cursor:move}._boxSurface_17mlo_954:focus-visible{outline:2px solid color-mix(in srgb,var(--brand-primary) 34%,var(--surface-elevated));outline-offset:2px}._selected_17mlo_967{outline:3px solid color-mix(in srgb,var(--surface-elevated) 92%,transparent);outline-offset:1px}._fieldGroup_17mlo_972{display:flex;flex-direction:column;gap:8px;padding:14px 16px}._detailPanel_17mlo_253 ._fieldGroup_17mlo_972{padding-top:12px;padding-bottom:12px}._textInput_17mlo_984,._textArea_17mlo_985,._select_17mlo_967{width:100%;box-sizing:border-box;font:inherit}._sessionTitleInput_17mlo_992{font-size:1rem;font-weight:600}._sessionInstructionField_17mlo_997{min-height:112px}._textArea_17mlo_985{min-height:110px;resize:vertical}._detailEmpty_17mlo_1006,._emptyState_17mlo_1007,._errorState_17mlo_1008{display:flex;flex-direction:column;align-items:center;justify-content:center;gap:10px;min-height:240px;padding:24px;text-align:center}._payloadModalBody_17mlo_1019{display:flex;flex-direction:column;gap:12px;min-height:0}._payloadModalToolbar_17mlo_1026{display:flex;align-items:center;justify-content:space-between;gap:12px}._payloadViewToggle_17mlo_1033,._payloadModalActions_17mlo_1034{display:inline-flex;flex-wrap:wrap;align-items:center;gap:8px}._payloadModalPreview_17mlo_1041{margin:0;min-height:360px;max-height:min(70vh,720px);padding:16px;overflow:auto;scrollbar-gutter:stable;white-space:pre-wrap;word-break:break-word;font-size:.78rem;line-height:1.55;border-radius:var(--radius-md);color:var(--text-body)}._statusBar_17mlo_1056{display:flex;align-items:center;justify-content:space-between;gap:12px;padding:12px 16px;border-top:1px solid var(--border-default);color:var(--text-secondary);font-size:.82rem;background:color-mix(in srgb,var(--surface-panel) 88%,var(--surface-inset))}._annotationSummary_17mlo_1068{font-size:.82rem;line-height:1.5}@media(max-width:1180px){._shell_17mlo_1{grid-template-columns:minmax(0,1fr);grid-template-rows:auto minmax(320px,1fr) auto;gap:12px;padding:12px}._sessionContextBar_17mlo_259,._panelHeader_17mlo_318,._toolRail_17mlo_564,._statusBar_17mlo_1056,._payloadModalToolbar_17mlo_1026,._markerHelpHeader_17mlo_393{flex-wrap:wrap}._sessionContextRight_17mlo_271,._sessionContextLeft_17mlo_270,._canvasHeading_17mlo_335{min-width:0}._sessionContextRight_17mlo_271{width:100%;justify-content:flex-start}._toolbarActions_17mlo_637{width:100%;margin-left:0}._toolbarUtilities_17mlo_703{margin-left:0}._toolGroup_17mlo_583{max-width:100%}._canvasWorkspace_17mlo_304{grid-template-columns:minmax(0,1fr);grid-template-rows:auto minmax(0,1fr)}._toolbarViewportCluster_17mlo_601{margin-left:0}._canvasToolRail_17mlo_573{flex-direction:row;justify-content:flex-start;overflow-x:auto;padding:0;border-right:0;border-bottom:1px solid var(--border-default)}._statusBar_17mlo_1056{align-items:flex-start}._detailEmpty_17mlo_1006,._emptyState_17mlo_1007,._errorState_17mlo_1008{min-height:180px}}
@@ -1,3 +0,0 @@
1
- import{r as y,j as e}from"./vendor-react-CKJs5o3c.js";import{t as s,Z as Et,_ as St,$ as pt,a0 as dt,a1 as Lt}from"./index--mh3pktj.js";import{g as Dt}from"./documentReferences-Do9YjrS3.js";import{h as Pt,aM as K,c as X,m as Ut,aN as $t,aI as ut,T as ht,ax as Ft}from"./vendor-icons-CLnehDTw.js";import"./vendor-markdown-BUxTU7dS.js";import"./vendor-dnd-DRzYolkg.js";import"./vendor-router-BbWMxlnO.js";const gt=[".png",".jpg",".jpeg",".webp",".gif",".pdf",".txt",".md",".csv",".json",".doc",".docx",".html",".js",".ts",".tsx",".css",".py",".java",".go",".rs",".sh"].join(","),Rt=new Set(["image/png","image/jpeg","image/webp"]),zt=new Set(gt.split(",").map(o=>o.trim().toLowerCase())),Ot=10*1024*1024,_t=3500;function xt(o){const c=o.trim().toLowerCase(),m=c.lastIndexOf(".");return m===-1?"":c.slice(m)}function J(o){if(o.length===0)return"";const c=o.slice(0,3).join(", "),m=o.length-3;return m>0?`${c}, +${m} more`:c}function Bt(o){return`${o.name.trim().toLowerCase()}::${o.size}::${o.lastModified}`}function Mt(o){return new Promise((c,m)=>{const g=new FileReader;g.onload=()=>c(String(g.result||"")),g.onerror=()=>m(g.error||new Error("Failed to read file")),g.readAsDataURL(o)})}function L(o){return/\.(png|jpe?g|webp|gif)(\?|#|$)/i.test(o)}function Ht(o){const c=o.types;if(!c)return null;for(const m of Array.from(c)){const g=String(m||"").trim().toLowerCase();if(Rt.has(g))return g}return null}function ft(o,c){const m=o.includes("?")?"&":"?";return`${o}${m}download=1&filename=${encodeURIComponent(c)}`}function mt(o){return typeof o=="string"?o.split("/").pop()||"Context file":o.displayName||o.originalFilename||o.caption||o.fsPath||o.path.split("/").pop()||"Context file"}function Kt(o){const c=typeof o=="string"?[o]:[o.originalFilename,o.displayName,o.caption,o.fsPath,o.path];for(const g of c){if(!g)continue;const D=xt(g);if(D)return D.replace(".","").slice(0,5).toUpperCase()}const m=typeof o=="string"?o:o.path;return/^https?:\/\//i.test(m)?"LINK":"FILE"}function Qt(o){const{ownerType:c="task",ownerId:m,ownerReferenceLabel:g,workspaceId:D,attachments:N,onAddAttachment:Y,onRemoveAttachment:G,onUpdateAttachmentCaption:W}=o,v=y.useRef(null),[P,Z]=y.useState(!1),[V,C]=y.useState(null),[$,q]=y.useState(""),[F,A]=y.useState(null),[T,b]=y.useState(null),[R,yt]=y.useState(!1),[wt,z]=y.useState(!1),[Xt,O]=y.useState(0),I=y.useRef(new Set),Q=y.useRef(new Set),tt=t=>(t||"").trim(),U=(t,n)=>{const a=[],r=tt(t),p=tt(n);return r&&a.push(`path:${r}`),p&&a.push(`fs:${p}`),a},et=y.useMemo(()=>{const t=new Set;return N.forEach(n=>{if(typeof n=="string"){U(n).forEach(a=>t.add(a));return}U(n.path,n.fsPath).forEach(a=>t.add(a))}),t},[N]);y.useEffect(()=>{I.current=new Set(et)},[et]);const nt=(t,n)=>n.some(a=>t.has(a)),at=(t,n)=>n.forEach(a=>t.add(a)),E=String(D||"").trim(),j=String(m||"").trim(),st=c==="initiative"?"initiative":c==="workstream"?"workstream":"task",_={ownerType:c,ownerId:j||null,taskId:c==="task"&&j||null},B=(t="application/json")=>{const n={"Content-Type":t};return E&&(n["x-taskforce-workspace-id"]=E),n},ot=(t,n=!0,a=I.current)=>{const r=t.trim();if(!r||!/^https?:\/\//i.test(r))return"invalid";const i=r,f=U(i);if(nt(a,f))return"duplicate";const u=r.split(/[\\/]/).pop()||r;return Y({path:i,caption:u,timestamp:new Date().toISOString()}),at(a,f),n&&q(""),A(null),"added"};y.useEffect(()=>{if(!T)return;const t=window.setTimeout(()=>{b(null)},_t);return()=>window.clearTimeout(t)},[T]);const rt=async t=>{if(t.length===0)return;C(null),b(null);const n=t,a=[],r=[],p=[],i=[],f=new Set(Q.current);n.forEach(x=>{const h=xt(x.name);if(!zt.has(h)){a.push(x.name);return}if(x.size>Ot){r.push(x.name);return}const S=Bt(x);if(f.has(S)){p.push(x.name);return}f.add(S),i.push({file:x,fingerprint:S})});const u=[];if(a.length>0&&u.push(`${a.length} unsupported file${a.length===1?"":"s"} skipped: ${J(a)}.`),r.length>0&&u.push(`${r.length} file${r.length===1?"":"s"} over 10 MB skipped: ${J(r)}.`),p.length>0&&u.push(`${p.length} local duplicate file${p.length===1?"":"s"} skipped before upload: ${J(p)}.`),i.length===0){u.length>0&&b(u.join(" ")),v.current&&(v.current.value="");return}Z(!0);const k=new Set(I.current);let d=0;try{for(const{file:h,fingerprint:S}of i){let l=null;const lt=await fetch("/api/taskforce/context-upload/init",{method:"POST",headers:B(),body:JSON.stringify({originalName:h.name,mimeType:h.type||"application/octet-stream",size:h.size,..._,workspaceId:E||null})});if(lt.ok){const w=await lt.json();if(w?.success&&typeof w?.uploadUrl=="string"&&typeof w?.path=="string"){if(!(await fetch(w.uploadUrl,{method:String(w.method||"PUT"),headers:w.headers||{"Content-Type":h.type||"application/octet-stream"},body:h})).ok)throw new Error(`Upload failed for ${h.name}`);const H=await fetch("/api/taskforce/context-upload/finalize",{method:"POST",headers:B(),body:JSON.stringify({relativePath:w.relativePath,mimeType:h.type||"application/octet-stream",originalName:h.name,size:h.size,..._,workspaceId:E||null})});if(!H.ok){const It=await H.json().catch(()=>({}));throw new Error(It?.error||`Upload failed for ${h.name}`)}l=await H.json().catch(()=>null)}else w?.success&&typeof w?.path=="string"&&(l=w)}if(!l){const w=await Mt(h),M=await fetch("/api/taskforce/context-upload",{method:"POST",headers:B(),body:JSON.stringify({file:w,originalName:h.name,..._,workspaceId:E||null})});if(!M.ok)throw new Error(`Upload failed for ${h.name}`);l=await M.json()}if(!l?.success||!l?.path)throw new Error(`Upload failed for ${h.name}`);const ct=U(l.path,l.fsPath);if(nt(k,ct)){d+=1;continue}Y({path:l.path,fsPath:l.fsPath,caption:typeof l.caption=="string"&&l.caption.trim().length>0?l.caption:h.name,displayName:typeof l.displayName=="string"?l.displayName:void 0,originalFilename:typeof l.originalFilename=="string"?l.originalFilename:h.name,assetId:typeof l.assetId=="string"?l.assetId:void 0,referenceNumber:typeof l.referenceNumber=="number"?l.referenceNumber:null,referenceLabel:typeof l.referenceLabel=="string"?l.referenceLabel:void 0,taskId:c==="task"&&typeof l.taskId=="string"?l.taskId:null,timestamp:typeof l.timestamp=="string"&&l.timestamp.trim().length>0?l.timestamp:new Date().toISOString()}),Lt({workspaceId:E||"default",ownerType:c,ownerId:j||null,taskId:c==="task"&&j||null,reason:"upload"}),at(k,ct),Q.current.add(S)}const x=[...u];d>0&&x.push(`${d} duplicate file${d===1?"":"s"} skipped.`),b(x.length>0?x.join(" "):null),I.current=k}catch(x){C(x instanceof Error?x.message:"Failed to upload context file")}finally{Z(!1),v.current&&(v.current.value="")}},it=async t=>{!t||t.length===0||await rt(Array.from(t))},kt=async()=>{if(C(null),b(null),!navigator.clipboard||typeof navigator.clipboard.read!="function"){C("Clipboard image paste is not available in this browser.");return}try{const t=await navigator.clipboard.read(),n=[];for(const a of t){const r=Ht(a);if(!r)continue;const p=await a.getType(r),i=r.toLowerCase()==="image/png"?"png":r.toLowerCase()==="image/webp"?"webp":"jpg";n.push(new globalThis.File([p],`pasted-image-${Date.now()}.${i}`,{type:r}))}if(n.length===0){C("Clipboard does not currently contain a supported image.");return}await rt(n)}catch(t){C(t?.message||"Failed to read an image from the clipboard.")}},bt=t=>{const n=new Set,a=t.dataTransfer.getData("text/uri-list")||"",r=t.dataTransfer.getData("text/plain")||"",p=`${a}
2
- ${r}`.split(`
3
- `).map(i=>i.trim()).filter(i=>!!i&&!i.startsWith("#"));for(const i of p){if(/^file:\/\//i.test(i)){try{const f=new URL(i),u=decodeURIComponent(f.pathname||"").trim();u&&n.add(u)}catch{}continue}n.add(i)}return Array.from(n)},jt=t=>{if(t.preventDefault(),t.stopPropagation(),z(!1),O(0),C(null),A(null),b(null),t.dataTransfer.files&&t.dataTransfer.files.length>0){it(t.dataTransfer.files);return}const n=bt(t);if(n.length===0){A("Drop a file or URL.");return}const a=new Set(I.current);let r=0,p=0,i=0;n.forEach(u=>{const k=ot(u,!1,a);k==="duplicate"&&(r+=1),k==="added"&&(p+=1),k==="invalid"&&(i+=1)});const f=[];r>0&&f.push(`${r} duplicate link${r===1?"":"s"} skipped.`),i>0&&f.push(`${i} local path${i===1?"":"s"} skipped. Upload files to attach them, or drop an http(s) URL to link.`),b(f.length>0?f.join(" "):p>0?null:T),I.current=a},Nt=t=>{t.preventDefault(),t.stopPropagation(),O(n=>n+1),z(!0)},Ct=t=>{t.preventDefault(),t.stopPropagation(),O(n=>{const a=Math.max(0,n-1);return a===0&&z(!1),a})},vt=t=>{t.preventDefault(),t.stopPropagation(),t.dataTransfer.dropEffect="copy"},At=N.filter(t=>{const n=typeof t=="string"?t:t.path;return L(n)}),Tt=N.filter(t=>{const n=typeof t=="string"?t:t.path;return!L(n)});return e.jsxs("div",{className:s.specialistSection,children:[e.jsx(Et,{label:"Context Documents",count:N.length,expanded:R,expandedTitle:"Hide context documents",collapsedTitle:"Show context documents",onToggle:()=>yt(!R)}),R&&e.jsxs(e.Fragment,{children:[e.jsxs("p",{className:s.settingsHint,children:["Upload files into ",st," context storage, or add an external http(s) URL."]}),e.jsxs("div",{className:s.contextUploadPanel,children:[e.jsxs("div",{className:s.contextUploadActions,children:[e.jsxs("button",{type:"button",className:s.secondaryHeaderBtn,onClick:()=>v.current?.click(),disabled:P,children:[P?e.jsx(Pt,{size:12,className:s.spinner}):e.jsx(K,{size:12}),P?"Uploading...":"Upload File"]}),e.jsxs("button",{type:"button",className:s.secondaryHeaderBtn,onClick:()=>{kt()},disabled:P,children:[e.jsx(X,{size:12}),"Paste Image from Clipboard"]})]}),e.jsx("input",{ref:v,type:"file",accept:gt,multiple:!0,className:s.hiddenInput,onChange:t=>{it(t.target.files)}}),V&&e.jsx("div",{className:s.error,children:V}),e.jsxs("div",{className:s.contextLinkRow,children:[e.jsx("input",{type:"text",className:s.input,placeholder:"Add external URL (https://...)",value:$,onChange:t=>{q(t.target.value),F&&A(null),T&&b(null)}}),e.jsx("button",{type:"button",className:s.secondaryHeaderBtn,onClick:()=>{if(!$.trim()){A("Enter an http(s) URL to link.");return}const t=ot($,!0);if(t==="invalid"){A("Only external http(s) URLs can be linked here. Upload files to attach them.");return}t==="duplicate"?b(`Link already exists in ${st} context.`):t==="added"&&b(null)},children:"Add URL"})]}),e.jsxs("div",{className:`${s.contextDropzone} ${wt?s.contextDropzoneActive:""}`,onDragEnter:Nt,onDragLeave:Ct,onDragOver:vt,onDrop:jt,children:[e.jsx(K,{size:14}),e.jsx("span",{children:"Drop files or URLs here"})]})]}),T&&e.jsx("div",{className:s.contextNotice,children:T}),F&&e.jsx("div",{className:s.error,children:F}),At.length>0&&e.jsx("div",{className:s.attachmentGrid,children:N.map((t,n)=>{const a=typeof t=="string"?t:t.path;if(!L(a))return null;const r=typeof t=="string"?void 0:t.fsPath,p=typeof t=="string"?"":t.caption||"",i=mt(t),f=L(a),u=/^https?:\/\//i.test(a),k=c==="task"&&St(t);return e.jsxs("div",{className:s.attachmentCard,children:[e.jsxs("div",{className:s.attachmentPreviewContainer,children:[f?e.jsx("img",{src:a,alt:p||`Context file ${n}`,onClick:()=>{c==="task"&&pt(t,{taskId:j,taskReferenceLabel:g})||window.open(a,"_blank")},onError:d=>{d.target.style.display="none",d.target.parentElement.classList.add(s.brokenImage)}}):e.jsxs("button",{type:"button",className:s.contextFileLink,onClick:()=>{const d=c==="task"?typeof t=="string"?{path:t,taskId:j}:{...t,taskId:j}:t;dt(d,r)||window.open(a,"_blank")},title:"Open file",children:[e.jsx(K,{size:16}),e.jsx("span",{children:p||r||a.split("/").pop()||"Context file"})]}),e.jsxs("div",{className:s.brokenImagePlaceholder,children:[e.jsx(Ut,{size:16}),e.jsx("span",{children:"Preview unavailable"})]}),e.jsxs("div",{className:s.attachmentActions,children:[k&&e.jsx("button",{type:"button",className:s.attachmentActionBtn,onClick:d=>{d.stopPropagation(),pt(t,{taskId:j,taskReferenceLabel:g})},title:"Annotate",children:e.jsx($t,{size:12})}),r&&e.jsx("button",{type:"button",className:s.attachmentActionBtn,onClick:d=>{d.stopPropagation(),navigator.clipboard.writeText(r)},title:`Copy path: ${r}`,children:e.jsx(X,{size:12})}),!u&&e.jsx("button",{type:"button",className:s.attachmentActionBtn,onClick:d=>{d.stopPropagation(),window.open(ft(a,p||i),"_blank")},title:"Download",children:e.jsx(ut,{size:12})}),e.jsx("button",{type:"button",className:s.attachmentActionBtn,onClick:d=>{d.stopPropagation(),G(n)},title:"Delete",children:e.jsx(ht,{size:12})})]})]}),e.jsx("input",{type:"text",className:s.attachmentCaptionInput,placeholder:"Add a label...",value:p,onChange:d=>W(n,d.target.value)})]},n)})}),Tt.length>0&&e.jsx("div",{className:s.documentAttachmentList,children:N.map((t,n)=>{const a=typeof t=="string"?t:t.path;if(L(a))return null;const r=typeof t=="string"?void 0:t.fsPath,p=typeof t=="string"?"":t.caption||"",i=mt(t),f=Kt(t),u=typeof t=="string"?"":Dt(t),k=/^https?:\/\//i.test(a);return e.jsxs("div",{className:s.documentAttachmentItem,children:[e.jsxs("div",{className:s.documentAttachmentRow,children:[e.jsxs("button",{type:"button",className:s.documentAttachmentLink,onClick:()=>{const d=c==="task"?typeof t=="string"?{path:t,taskId:j}:{...t,taskId:j}:t;dt(d,r)||window.open(a,"_blank")},title:i,children:[e.jsxs("span",{className:s.documentAttachmentMain,children:[e.jsx("span",{className:s.documentAttachmentIcon,"aria-hidden":"true",children:e.jsx(Ft,{size:13})}),e.jsxs("span",{className:s.documentAttachmentText,children:[e.jsx("span",{className:s.documentAttachmentName,children:i}),u&&e.jsx("span",{className:s.taskIdBadge,children:u})]})]}),e.jsx("span",{className:s.documentAttachmentType,children:f})]}),e.jsxs("div",{className:s.documentAttachmentActions,children:[r&&e.jsx("button",{type:"button",className:s.documentAttachmentActionBtn,onClick:()=>{navigator.clipboard.writeText(r)},title:`Copy path: ${r}`,children:e.jsx(X,{size:12})}),!k&&e.jsx("button",{type:"button",className:s.documentAttachmentActionBtn,onClick:()=>{window.open(ft(a,p||i),"_blank")},title:"Download",children:e.jsx(ut,{size:12})}),e.jsx("button",{type:"button",className:s.documentAttachmentActionBtn,onClick:()=>G(n),title:"Delete",children:e.jsx(ht,{size:12})})]})]}),e.jsx("input",{type:"text",className:s.documentAttachmentCaptionInput,placeholder:"Add a label...",value:p,onChange:d=>W(n,d.target.value)})]},n)})})]})]})}export{Qt as ContextAttachmentManager};