@taskforcehq/taskforce 0.3.327 → 0.3.329

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 (360) hide show
  1. package/dist/Taskforce.module.css +257 -87
  2. package/dist/TaskforceCore.js +237 -230
  3. package/dist/annotatedAttachments/AnnotatedAttachmentSessionStore.js +1 -1
  4. package/dist/cli.js +34 -0
  5. package/dist/cliCloudTargetGuard.d.ts +5 -0
  6. package/dist/cliCloudTargetGuard.js +11 -0
  7. package/dist/components/activity/EntityActivityTimeline.js +15 -5
  8. package/dist/components/context/AttachmentPreviewHost.js +1 -1
  9. package/dist/components/context/ContextAttachmentManager.d.ts +3 -0
  10. package/dist/components/context/ContextAttachmentManager.js +116 -20
  11. package/dist/components/features/AnnotatedAttachmentWorkspace.js +24 -8
  12. package/dist/components/features/TaskSettings.d.ts +12 -1
  13. package/dist/components/features/TaskSettings.js +147 -40
  14. package/dist/components/features/agentCapabilities/AgentCapabilitiesPrototype.d.ts +1 -1
  15. package/dist/components/features/planning/PlanningEntitySummary.d.ts +3 -1
  16. package/dist/components/features/planning/PlanningEntitySummary.js +3 -2
  17. package/dist/components/features/planning/PlanningLinkPicker.d.ts +3 -1
  18. package/dist/components/features/planning/PlanningLinkPicker.js +5 -3
  19. package/dist/components/features/planning/PlanningModule.js +28 -14
  20. package/dist/components/features/planning/PlanningTaskOrderList.d.ts +1 -1
  21. package/dist/components/features/planning/PlanningTaskOrderList.js +17 -6
  22. package/dist/components/features/planning/PlanningVisualIdentity.d.ts +14 -0
  23. package/dist/components/features/planning/PlanningVisualIdentity.js +106 -0
  24. package/dist/components/features/planning/planningTaskArrangement.d.ts +1 -0
  25. package/dist/components/features/planning/planningTaskArrangement.js +5 -5
  26. package/dist/components/features/planning/planningWorkspaceModel.d.ts +11 -0
  27. package/dist/components/features/taskforceAgentEditorModel.js +3 -1
  28. package/dist/components/task/TaskActionHeader.d.ts +2 -1
  29. package/dist/components/task/TaskActionHeader.js +2 -2
  30. package/dist/components/task/TaskCard.d.ts +5 -0
  31. package/dist/components/task/TaskCard.js +101 -13
  32. package/dist/components/task/TaskContextUpload.d.ts +3 -0
  33. package/dist/components/task/TaskContextUpload.js +2 -2
  34. package/dist/components/task/TaskForm.d.ts +4 -0
  35. package/dist/components/task/TaskForm.js +32 -7
  36. package/dist/components/task/TaskImageReviews.js +28 -19
  37. package/dist/components/task/TaskKanban.d.ts +6 -1
  38. package/dist/components/task/TaskKanban.js +152 -6
  39. package/dist/components/task/TaskList.d.ts +5 -0
  40. package/dist/components/task/TaskList.js +3 -3
  41. package/dist/components/task/TaskStatusActions.js +11 -2
  42. package/dist/components/task/TaskWorkstreamPicker.js +2 -1
  43. package/dist/components/ui/DocumentTypeIcon.d.ts +7 -0
  44. package/dist/components/ui/DocumentTypeIcon.js +8 -0
  45. package/dist/components/ui/PasswordInput.d.ts +6 -0
  46. package/dist/components/ui/PasswordInput.js +11 -0
  47. package/dist/components/ui/TaxonomyDropdown.d.ts +9 -1
  48. package/dist/components/ui/TaxonomyDropdown.js +30 -3
  49. package/dist/components/ui/TopNoticeLayer.js +1 -1
  50. package/dist/components/views/AppShellHeader.js +32 -11
  51. package/dist/components/views/PlanComparisonPage.js +12 -0
  52. package/dist/components/views/StandaloneLayout.js +68 -39
  53. package/dist/components/views/WidgetView.js +10 -7
  54. package/dist/components/views/panels/PlanningDrawer.d.ts +7 -1
  55. package/dist/components/views/panels/PlanningDrawer.js +51 -54
  56. package/dist/components/views/standalone/modals/AccountSettingsModal.js +26 -17
  57. package/dist/config/envSchema.js +13 -0
  58. package/dist/config/localServiceCloudTarget.d.ts +10 -0
  59. package/dist/config/localServiceCloudTarget.js +76 -0
  60. package/dist/config/localServiceRuntimeContract.d.ts +13 -0
  61. package/dist/config/localServiceRuntimeContract.js +135 -0
  62. package/dist/core/AiProfileService.d.ts +1 -0
  63. package/dist/core/AiProfileService.js +48 -9
  64. package/dist/core/AttachmentLinkService.js +7 -4
  65. package/dist/core/DeletedTaskLifecycleService.d.ts +5 -0
  66. package/dist/core/DeletedTaskLifecycleService.js +55 -3
  67. package/dist/core/McpTokenService.d.ts +4 -0
  68. package/dist/core/McpTokenService.js +52 -0
  69. package/dist/core/TaskAttachmentLinksDurableMutationService.d.ts +8 -2
  70. package/dist/core/TaskAttachmentLinksDurableMutationService.js +51 -18
  71. package/dist/core/Taskforce.d.ts +124 -2
  72. package/dist/core/Taskforce.js +1175 -87
  73. package/dist/core/types.d.ts +8 -1
  74. package/dist/documentReviews/DocumentReviewCommentStore.d.ts +11 -0
  75. package/dist/documentReviews/DocumentReviewCommentStore.js +35 -2
  76. package/dist/documentReviews/service.d.ts +4 -0
  77. package/dist/documentReviews/service.js +141 -46
  78. package/dist/hooks/sync/useDurableLocalOutboxDrain.d.ts +1 -1
  79. package/dist/hooks/sync/useDurableTaskCreateMutation.js +1 -1
  80. package/dist/hooks/sync/useDurableTaskMetadataMutation.d.ts +1 -0
  81. package/dist/hooks/sync/useDurableTaskMetadataMutation.js +1 -0
  82. package/dist/hooks/sync/useDurableTaskStatusMutation.d.ts +1 -0
  83. package/dist/hooks/tasks/taskHttpMutation.js +1 -0
  84. package/dist/hooks/tasks/useCloudTaskSearch.d.ts +12 -0
  85. package/dist/hooks/tasks/useCloudTaskSearch.js +71 -0
  86. package/dist/hooks/tasks/useTaskDescriptionImageDraftRecovery.d.ts +16 -0
  87. package/dist/hooks/tasks/useTaskDescriptionImageDraftRecovery.js +197 -0
  88. package/dist/hooks/tasks/useTaskEditorNavigation.d.ts +16 -3
  89. package/dist/hooks/tasks/useTaskEditorNavigation.js +72 -13
  90. package/dist/hooks/tasks/useTaskFormActions.d.ts +9 -0
  91. package/dist/hooks/tasks/useTaskFormActions.js +96 -17
  92. package/dist/hooks/ui/useSettingsModel.d.ts +24 -2
  93. package/dist/hooks/ui/useSettingsModel.js +13 -2
  94. package/dist/hooks/ui/useSettingsPersistence.d.ts +12 -1
  95. package/dist/hooks/ui/useSettingsPersistence.js +74 -47
  96. package/dist/hooks/useFilterSort.d.ts +7 -3
  97. package/dist/hooks/useFilterSort.js +15 -5
  98. package/dist/hooks/useTaskData.d.ts +10 -1
  99. package/dist/hooks/useTaskData.js +216 -7
  100. package/dist/hooks/useTaskMutations.d.ts +10 -2
  101. package/dist/hooks/useTaskMutations.js +223 -43
  102. package/dist/hooks/useTaskforce.d.ts +94 -57
  103. package/dist/hooks/useTaskforce.js +428 -16
  104. package/dist/hooks/useUiNotice.d.ts +4 -0
  105. package/dist/hooks/useUiNotice.js +4 -0
  106. package/dist/mcp/adminWorkspaceRegistrar.js +3 -3
  107. package/dist/mcp/canonicalAssetHelpers.d.ts +13 -0
  108. package/dist/mcp/canonicalAssetHelpers.js +39 -5
  109. package/dist/mcp/collaborationRegistrar.js +15 -13
  110. package/dist/mcp/documentAssetRegistrar.js +60 -44
  111. package/dist/mcp/documentHelpers.d.ts +1 -0
  112. package/dist/mcp/documentHelpers.js +7 -3
  113. package/dist/mcp/localServiceProxy.js +4 -1
  114. package/dist/mcp/runtime.d.ts +16 -0
  115. package/dist/mcp/runtime.js +735 -210
  116. package/dist/mcp/taskAttachmentCommandAdapter.d.ts +2 -0
  117. package/dist/mcp/taskAttachmentCommandAdapter.js +14 -8
  118. package/dist/mcp/taskPlanningRegistrar.js +78 -67
  119. package/dist/mcp/toolCallCompatibility.js +38 -1
  120. package/dist/mcp/toolCatalog.d.ts +1 -0
  121. package/dist/mcp/toolRegistry.js +2 -2
  122. package/dist/migrations/taskSchemaMigrations.js +47 -0
  123. package/dist/runtime/appGateDefinitions.d.ts +30 -6
  124. package/dist/runtime/appGateDefinitions.js +6 -6
  125. package/dist/runtime/appGates.d.ts +12 -13
  126. package/dist/runtime/appGates.js +29 -13
  127. package/dist/runtime/nodeAppGates.d.ts +8 -0
  128. package/dist/runtime/nodeAppGates.js +27 -0
  129. package/dist/server/appAccess.d.ts +12 -0
  130. package/dist/server/appAccess.js +21 -0
  131. package/dist/server/authorizedWorkspaceAccess.d.ts +12 -0
  132. package/dist/server/authorizedWorkspaceAccess.js +40 -0
  133. package/dist/server/cloudCollectionRead.d.ts +25 -0
  134. package/dist/server/cloudCollectionRead.js +120 -0
  135. package/dist/server/cloudCollectionReadPool.d.ts +52 -0
  136. package/dist/server/cloudCollectionReadPool.js +140 -0
  137. package/dist/server/cloudCollectionReadWorker.d.ts +1 -0
  138. package/dist/server/cloudCollectionReadWorker.js +36 -0
  139. package/dist/server/index.d.ts +6 -11
  140. package/dist/server/index.js +67 -42
  141. package/dist/server/localServiceLease.d.ts +6 -0
  142. package/dist/server/localServiceLease.js +17 -1
  143. package/dist/server/localWorkspaceSyncServerRuntime.js +10 -3
  144. package/dist/server/rateLimit.d.ts +1 -0
  145. package/dist/server/rateLimit.js +4 -0
  146. package/dist/server/realtimeSyncWs.js +36 -12
  147. package/dist/server/routes/admin.js +1 -0
  148. package/dist/server/routes/agentRoles.js +3 -2
  149. package/dist/server/routes/agentSkills.js +3 -2
  150. package/dist/server/routes/agents.js +118 -16
  151. package/dist/server/routes/annotatedAttachments.js +3 -2
  152. package/dist/server/routes/auth.js +3 -1
  153. package/dist/server/routes/documents.d.ts +5 -2
  154. package/dist/server/routes/documents.js +160 -13
  155. package/dist/server/routes/durableTaskHttpRouters.d.ts +11 -2
  156. package/dist/server/routes/durableTaskHttpRouters.js +2 -2
  157. package/dist/server/routes/localService.js +4 -0
  158. package/dist/server/routes/primitives.d.ts +4 -0
  159. package/dist/server/routes/shared.d.ts +24 -0
  160. package/dist/server/routes/shared.js +114 -18
  161. package/dist/server/routes/sync.js +22 -0
  162. package/dist/server/routes/syncAuxRoutes.js +5 -2
  163. package/dist/server/routes/syncPullApplyRoutes.js +23 -4
  164. package/dist/server/routes/syncV3FeedRoutes.js +22 -18
  165. package/dist/server/routes/syncV3LocalCaptureRoutes.js +48 -4
  166. package/dist/server/routes/syncV3LocalFeedApplyRoutes.d.ts +1 -0
  167. package/dist/server/routes/syncV3LocalFeedApplyRoutes.js +26 -0
  168. package/dist/server/routes/syncV3OperationRoutes.js +27 -2
  169. package/dist/server/routes/tasks.js +299 -97
  170. package/dist/server/routes/workspaces.js +43 -1
  171. package/dist/server/routes.js +35 -7
  172. package/dist/server/workspaceDeletionAdmission.d.ts +23 -0
  173. package/dist/server/workspaceDeletionAdmission.js +50 -0
  174. package/dist/service/localServiceCli.js +52 -25
  175. package/dist/service/localServiceClientLifecycle.js +93 -6
  176. package/dist/services/codexAppServerModelGateway.d.ts +112 -0
  177. package/dist/services/codexAppServerModelGateway.js +438 -0
  178. package/dist/services/taskforceAgentMcpBridge.d.ts +7 -1
  179. package/dist/services/taskforceAgentMcpBridge.js +23 -3
  180. package/dist/shared/planningIdentity.d.ts +20 -0
  181. package/dist/shared/planningIdentity.js +79 -0
  182. package/dist/shared/taskforceAgentDefinition.js +7 -1
  183. package/dist/shared/taskforceAgentModels.d.ts +1 -0
  184. package/dist/shared/taskforceAgentModels.js +30 -1
  185. package/dist/storage/postgresAdapter.d.ts +20 -3
  186. package/dist/storage/postgresAdapter.js +110 -14
  187. package/dist/storage/postgresRequestDiagnostics.d.ts +8 -0
  188. package/dist/storage/postgresRequestDiagnostics.js +24 -0
  189. package/dist/storage/postgresWorker.js +13 -4
  190. package/dist/storage/postgresWorkerProtocol.d.ts +29 -0
  191. package/dist/storage/postgresWorkerProtocol.js +30 -0
  192. package/dist/storage/workspaceAssetStore.d.ts +32 -0
  193. package/dist/storage/workspaceAssetStore.js +70 -0
  194. package/dist/sync/cloudSyncApi.d.ts +4 -1
  195. package/dist/sync/cloudSyncApi.js +7 -2
  196. package/dist/sync/contentSyncState.d.ts +1 -1
  197. package/dist/sync/coordinator/localSyncExecutionPermitStore.d.ts +17 -0
  198. package/dist/sync/coordinator/localSyncExecutionPermitStore.js +77 -23
  199. package/dist/sync/coordinator/localWorkspaceSyncRunner.js +6 -2
  200. package/dist/sync/coordinator/workspaceSyncTransportGateway.js +4 -2
  201. package/dist/sync/engine/workspaceSyncEngineBrowserGatewayRemoteServices.js +20 -2
  202. package/dist/sync/engine/workspaceSyncEngineLocalServices.d.ts +4 -0
  203. package/dist/sync/engine/workspaceSyncEngineLocalServices.js +11 -0
  204. package/dist/sync/engine/workspaceSyncEngineRemoteServices.d.ts +16 -0
  205. package/dist/sync/engine/workspaceSyncEngineRemoteServices.js +2 -1
  206. package/dist/sync/engine/workspaceSyncEngineServerRemoteServices.d.ts +1 -1
  207. package/dist/sync/engine/workspaceSyncEngineServerRemoteServices.js +46 -4
  208. package/dist/sync/engine/workspaceSyncEngineServerRunnerOperations.d.ts +3 -1
  209. package/dist/sync/engine/workspaceSyncEngineServerRunnerOperations.js +51 -11
  210. package/dist/sync/engine/workspaceSyncEngineTransfers.d.ts +1 -1
  211. package/dist/sync/engine/workspaceSyncEngineTransfers.js +8 -3
  212. package/dist/sync/engine/workspaceSyncV2ChangeDispatcher.js +2 -0
  213. package/dist/sync/syncApplyHandlers.d.ts +3 -1
  214. package/dist/sync/syncApplyHandlers.js +29 -0
  215. package/dist/sync/syncService.d.ts +2 -0
  216. package/dist/sync/syncService.js +13 -1
  217. package/dist/sync/taskSyncPayload.d.ts +1 -0
  218. package/dist/sync/taskSyncPayload.js +6 -0
  219. package/dist/sync/v3/combinedFeedCapability.js +4 -0
  220. package/dist/sync/v3/durableTaskAttachmentLinksMutationRouter.d.ts +3 -0
  221. package/dist/sync/v3/durableTaskAttachmentLinksMutationRouter.js +31 -3
  222. package/dist/sync/v3/durableTaskChecklistMutationRouter.d.ts +2 -0
  223. package/dist/sync/v3/durableTaskChecklistMutationRouter.js +4 -0
  224. package/dist/sync/v3/durableTaskHttpBulkMutationRouter.d.ts +1 -0
  225. package/dist/sync/v3/durableTaskHttpBulkMutationRouter.js +47 -12
  226. package/dist/sync/v3/durableTaskHttpRootMutationRouter.d.ts +5 -3
  227. package/dist/sync/v3/durableTaskHttpRootMutationRouter.js +27 -2
  228. package/dist/sync/v3/localInitiativeOutboxService.js +4 -2
  229. package/dist/sync/v3/localOutboxDispatcher.js +5 -1
  230. package/dist/sync/v3/localTaskAttachmentLinksOutboxHandler.js +12 -2
  231. package/dist/sync/v3/localTaskAttachmentLinksOutboxService.d.ts +3 -0
  232. package/dist/sync/v3/localTaskAttachmentLinksOutboxService.js +62 -10
  233. package/dist/sync/v3/localTaskCreateOutboxService.js +15 -6
  234. package/dist/sync/v3/localTaskMetadataClient.d.ts +1 -0
  235. package/dist/sync/v3/localTaskMetadataClient.js +1 -0
  236. package/dist/sync/v3/localTaskMetadataOutboxHandler.js +5 -1
  237. package/dist/sync/v3/localTaskMetadataOutboxService.d.ts +2 -0
  238. package/dist/sync/v3/localTaskMetadataOutboxService.js +7 -0
  239. package/dist/sync/v3/localTaskRestoreOutboxService.js +14 -6
  240. package/dist/sync/v3/localTaskStatusClient.d.ts +1 -0
  241. package/dist/sync/v3/localTaskStatusClient.js +6 -1
  242. package/dist/sync/v3/localTaskStatusOutboxService.d.ts +2 -0
  243. package/dist/sync/v3/localTaskStatusOutboxService.js +54 -13
  244. package/dist/sync/v3/localWorkstreamOutboxService.js +4 -2
  245. package/dist/sync/v3/syncDurabilityStore.d.ts +15 -0
  246. package/dist/sync/v3/syncDurabilityStore.js +201 -43
  247. package/dist/sync/v3/taskAttachmentLinksMutationService.d.ts +7 -4
  248. package/dist/sync/v3/taskAttachmentLinksMutationService.js +37 -12
  249. package/dist/sync/v3/taskChecklistMutationService.d.ts +4 -2
  250. package/dist/sync/v3/taskChecklistMutationService.js +4 -0
  251. package/dist/sync/v3/taskCreateMutationService.d.ts +2 -2
  252. package/dist/sync/v3/taskCreateMutationService.js +7 -4
  253. package/dist/sync/v3/taskMetadataCoexistence.js +4 -0
  254. package/dist/sync/v3/taskMetadataMutationService.d.ts +3 -0
  255. package/dist/sync/v3/taskMetadataMutationService.js +4 -0
  256. package/dist/sync/v3/taskRestoreMutationService.d.ts +2 -2
  257. package/dist/sync/v3/taskRestoreMutationService.js +7 -4
  258. package/dist/sync/v3/taskStatusMutationService.d.ts +2 -0
  259. package/dist/sync/v3/taskStatusMutationService.js +4 -0
  260. package/dist/sync/v3/workflowAssignmentSync.d.ts +1 -0
  261. package/dist/sync/v3/workflowAssignmentSync.js +3 -0
  262. package/dist/sync/v3/workspaceSyncV2ProjectionExclusions.d.ts +1 -1
  263. package/dist/sync/v3/workspaceSyncV2ProjectionExclusions.js +14 -12
  264. package/dist/sync/v3/workspaceSyncV3AttachmentApplyObligationStore.d.ts +11 -0
  265. package/dist/sync/v3/workspaceSyncV3AttachmentApplyObligationStore.js +27 -10
  266. package/dist/sync/v3/workspaceSyncV3AttachmentAssetHydration.d.ts +2 -1
  267. package/dist/sync/v3/workspaceSyncV3AttachmentAssetHydration.js +52 -10
  268. package/dist/sync/v3/workspaceSyncV3CloudOperationHandler.js +10 -1
  269. package/dist/sync/v3/workspaceSyncV3CombinedFeedOrchestrator.js +15 -4
  270. package/dist/sync/v3/workspaceSyncV3CombinedLocalApply.js +66 -13
  271. package/dist/sync/v3/workspaceSyncV3CombinedRepairBaseline.d.ts +11 -0
  272. package/dist/sync/v3/workspaceSyncV3CombinedRepairBaseline.js +57 -22
  273. package/dist/sync/v3/workspaceSyncV3CombinedRepairMaterialization.d.ts +10 -4
  274. package/dist/sync/v3/workspaceSyncV3CombinedRepairMaterialization.js +124 -51
  275. package/dist/sync/v3/workspaceSyncV3CombinedRepairSnapshot.d.ts +10 -0
  276. package/dist/sync/v3/workspaceSyncV3CombinedRepairSnapshot.js +120 -28
  277. package/dist/sync/v3/workspaceSyncV3CombinedWireContract.d.ts +3 -1
  278. package/dist/sync/v3/workspaceSyncV3CombinedWireContract.js +18 -0
  279. package/dist/sync/v3/workspaceSyncV3CoverageRegistry.js +6 -0
  280. package/dist/sync/v3/workspaceSyncV3FeedProfile.d.ts +1 -1
  281. package/dist/sync/v3/workspaceSyncV3LegacyBoundaryAttestation.d.ts +1 -0
  282. package/dist/sync/v3/workspaceSyncV3LegacyBoundaryAttestation.js +23 -10
  283. package/dist/sync/v3/workspaceSyncV3NestedTaskApply.d.ts +3 -0
  284. package/dist/sync/v3/workspaceSyncV3NestedTaskApply.js +64 -13
  285. package/dist/sync/v3/workspaceSyncV3NestedTaskCodecs.d.ts +9 -0
  286. package/dist/sync/v3/workspaceSyncV3NestedTaskCodecs.js +26 -0
  287. package/dist/sync/v3/workspaceSyncV3NestedTaskProjection.d.ts +15 -5
  288. package/dist/sync/v3/workspaceSyncV3NestedTaskProjection.js +50 -14
  289. package/dist/sync/v3/workspaceSyncV3NestedTaskRepairSnapshot.d.ts +2 -1
  290. package/dist/sync/v3/workspaceSyncV3NestedTaskRepairSnapshot.js +11 -3
  291. package/dist/sync/v3/workspaceSyncV3OperationProtocol.d.ts +3 -0
  292. package/dist/sync/v3/workspaceSyncV3OperatorDiagnostics.d.ts +2 -0
  293. package/dist/sync/v3/workspaceSyncV3OperatorDiagnostics.js +19 -7
  294. package/dist/sync/v3/workspaceSyncV3RepairSqlBatching.d.ts +2 -0
  295. package/dist/sync/v3/workspaceSyncV3RepairSqlBatching.js +10 -0
  296. package/dist/sync/v3/workspaceSyncV3TaskCommentAudit.js +9 -2
  297. package/dist/sync/v3/workspaceSyncV3TaskCoverCoverage.d.ts +7 -0
  298. package/dist/sync/v3/workspaceSyncV3TaskCoverCoverage.js +37 -0
  299. package/dist/sync/v3/workspaceSyncV3TaskCoverWireContract.d.ts +6 -0
  300. package/dist/sync/v3/workspaceSyncV3TaskCoverWireContract.js +9 -0
  301. package/dist/sync/v3/workspaceSyncV3TaskRootProjection.d.ts +1 -1
  302. package/dist/sync/v3/workspaceSyncV3TaskRootProjection.js +1 -1
  303. package/dist/sync/workspacePullFeed.d.ts +6 -1
  304. package/dist/sync/workspacePullFeed.js +174 -162
  305. package/dist/sync/workspaceRepair.d.ts +3 -0
  306. package/dist/sync/workspaceRepair.js +67 -6
  307. package/dist/sync/workspaceSyncModel.d.ts +11 -0
  308. package/dist/sync/workspaceSyncModel.js +27 -2
  309. package/dist/types.d.ts +55 -1
  310. package/dist/types.js +6 -0
  311. package/dist/ui/assets/{AiIdentityRosterCard-DB1BLO_j.js → AiIdentityRosterCard-BZM4aQnM.js} +1 -1
  312. package/dist/ui/assets/AiProfilesModule-BbAEWtHH.js +1 -0
  313. package/dist/ui/assets/AnnotatedAttachmentWorkspace-B68Wg-RV.js +3 -0
  314. package/dist/ui/assets/AnnotatedAttachmentWorkspace-TzYu7pkG.css +1 -0
  315. package/dist/ui/assets/AssetTraySortControl-C8Rztyal.js +1 -0
  316. package/dist/ui/assets/ContextAttachmentManager-Cj3c7X9y.js +3 -0
  317. package/dist/ui/assets/{DocumentWorkspace-BC7sy5TG.js → DocumentWorkspace-B5uvzems.js} +4 -4
  318. package/dist/ui/assets/EntityActivityTimeline-BVFvCB5R.js +1 -0
  319. package/dist/ui/assets/PlanningModule-B5DWQOGz.js +1 -0
  320. package/dist/ui/assets/PlanningModule-CoIR9hbV.css +1 -0
  321. package/dist/ui/assets/PlansPage-AY4cGWco.js +1 -0
  322. package/dist/ui/assets/TaskContextUpload-DZxTVesW.js +1 -0
  323. package/dist/ui/assets/TaskContextUpload-qmBeUw3u.css +1 -0
  324. package/dist/ui/assets/TaskSettings-BeWAuyZj.js +12 -0
  325. package/dist/ui/assets/{TaskforceAgentsModule-CkAxW19K.js → TaskforceAgentsModule-BifCYtjR.js} +6 -6
  326. package/dist/ui/assets/WorkflowManagerModule-DEr5di_r.js +1 -0
  327. package/dist/ui/assets/index-I5zhdtgt.js +7 -0
  328. package/dist/ui/assets/index-VRFsx3wz.css +1 -0
  329. package/dist/ui/assets/{vendor-icons-B8ZNsH1g.js → vendor-icons-D9Lpw-j4.js} +1 -1
  330. package/dist/ui/index.html +3 -3
  331. package/dist/utils/constants.d.ts +2 -2
  332. package/dist/utils/constants.js +1 -1
  333. package/dist/utils/contextAttachmentUpload.d.ts +2 -0
  334. package/dist/utils/contextAttachmentUpload.js +7 -0
  335. package/dist/utils/contextFiles.d.ts +1 -1
  336. package/dist/utils/contextFiles.js +4 -4
  337. package/dist/utils/taskActivity.d.ts +3 -2
  338. package/dist/utils/taskActivity.js +19 -2
  339. package/dist/utils/taskEditorReconciliation.d.ts +40 -0
  340. package/dist/utils/taskEditorReconciliation.js +217 -0
  341. package/dist/utils/taskNormalization.d.ts +1 -0
  342. package/dist/utils/taskNormalization.js +39 -0
  343. package/dist/utils/taskSearch.js +2 -2
  344. package/dist/utils/uiNotice.d.ts +4 -0
  345. package/package.json +21 -4
  346. package/dist/ui/assets/AiProfilesModule-DPxQeF9N.js +0 -1
  347. package/dist/ui/assets/AnnotatedAttachmentWorkspace-CBRZ8rca.css +0 -1
  348. package/dist/ui/assets/AnnotatedAttachmentWorkspace-DHNYaNg6.js +0 -3
  349. package/dist/ui/assets/AssetTraySortControl-DphbyHVc.js +0 -1
  350. package/dist/ui/assets/ContextAttachmentManager-CMxSzHqc.js +0 -3
  351. package/dist/ui/assets/EntityActivityTimeline-pJ2ZjZ-k.js +0 -1
  352. package/dist/ui/assets/PlanningModule-CeTqXMMz.css +0 -1
  353. package/dist/ui/assets/PlanningModule-t5GbvVR9.js +0 -1
  354. package/dist/ui/assets/PlansPage-BVH_NfgT.js +0 -1
  355. package/dist/ui/assets/TaskContextUpload-Ds4LnDzV.css +0 -1
  356. package/dist/ui/assets/TaskContextUpload-bl4fOOUz.js +0 -1
  357. package/dist/ui/assets/TaskSettings-xVsxSa0g.js +0 -12
  358. package/dist/ui/assets/WorkflowManagerModule-BKqIGVnF.js +0 -1
  359. package/dist/ui/assets/index-BzJlVnNS.css +0 -1
  360. package/dist/ui/assets/index-Cx7vZJHL.js +0 -7
@@ -4,13 +4,18 @@ import { normalizeTaskFromApi } from '../../utils/taskNormalization.js';
4
4
  import { createCloudTaskHttpMutationClient, fetchTaskHttpMutation, isConclusiveTaskHttpResponse, } from './taskHttpMutation.js';
5
5
  import { canonicalWorkspaceSyncJson } from '../../sync/v3/canonicalWorkspaceSyncJson.js';
6
6
  export function useTaskFormActions(input) {
7
- const { activeCategories, activeTab, apiEndpoint, assignee, attachments, attachmentsDirty, category, checklistItems, comments, complexity, description, dueDate, createTaskDurably, durableTaskHttpRootActivationEnabled = false, workspaceId, taskHttpMutationClient, updateTask, editingTaskId, fetchTasks, formTaxonomies, getDescriptionDraft: getDescriptionDraftInput, getPreferredCategoryValue, getTitleDraft: getTitleDraftInput, mergeTaskFromServer, onTaskCreated, workstreamInput, priority, pushNotice, queueWorkspaceSyncFromAuthoritativeTaskState, relationshipTasks, supplementalTasks = [], resetForm, resolveWorkstreamIdInput, scheduledDate, setActiveTab, setAttachmentsDirty, setComments, setError, setLastUsedCategory, setLoading, setNewCommentText, status, title, taxonomies, textDraftOccupied, type } = input;
7
+ const { activeCategories, activeTab, apiEndpoint, assignee, attachments, attachmentsDirty, category, checklistItems, comments, complexity, description, dueDate, createTaskDurably, durableTaskHttpRootActivationEnabled = false, workspaceId, taskHttpMutationClient, updateTask, editingTaskId, editorBaselineDraft = null, revisionConflict = false, fetchTasks, formTaxonomies, getAttachmentsDraft: getAttachmentsDraftInput, getDescriptionDraft: getDescriptionDraftInput, getPreferredCategoryValue, getTitleDraft: getTitleDraftInput, awaitPendingDescriptionImageUpload: awaitPendingDescriptionImageUploadInput, mergeTaskFromServer, onTaskCreated, onTaskCreateAccepted, workstreamInput, priority, pushNotice, queueWorkspaceSyncFromAuthoritativeTaskState, relationshipTasks, supplementalTasks = [], resetForm, resolveWorkstreamIdInput, scheduledDate, setActiveTab, setAttachmentsDirty, setComments, setError, setLastUsedCategory, setLoading, setNewCommentText, status, title, taxonomies, textDraftOccupied, type } = input;
8
8
  const getTitleDraft = getTitleDraftInput || (() => title);
9
9
  const getDescriptionDraft = getDescriptionDraftInput || (() => description);
10
+ const getAttachmentsDraft = getAttachmentsDraftInput || (() => attachments);
10
11
  const getTitleDraftRef = useRef(getTitleDraft);
11
12
  const getDescriptionDraftRef = useRef(getDescriptionDraft);
13
+ const getAttachmentsDraftRef = useRef(getAttachmentsDraft);
14
+ const awaitPendingDescriptionImageUploadRef = useRef(awaitPendingDescriptionImageUploadInput);
12
15
  getTitleDraftRef.current = getTitleDraft;
13
16
  getDescriptionDraftRef.current = getDescriptionDraft;
17
+ getAttachmentsDraftRef.current = getAttachmentsDraft;
18
+ awaitPendingDescriptionImageUploadRef.current = awaitPendingDescriptionImageUploadInput;
14
19
  const readTextDraft = useCallback(() => ({
15
20
  title: getTitleDraftRef.current(),
16
21
  description: getDescriptionDraftRef.current(),
@@ -48,30 +53,46 @@ export function useTaskFormActions(input) {
48
53
  }
49
54
  createDraftOccupiedRef.current = createDraftOccupied;
50
55
  }, [createDraftOccupied, createTaskDurably, workspaceId]);
51
- const buildTaskDraftSignature = useCallback((textDraft = readTextDraft()) => JSON.stringify({
52
- title: textDraft.title.trim(),
56
+ const buildTaskDraftSignatureFromEditorDraft = useCallback((draft) => JSON.stringify({
57
+ title: draft.title.trim(),
58
+ description: draft.description,
59
+ category: draft.category,
60
+ type: draft.type,
61
+ priority: Number(draft.priority),
62
+ complexity: Number(draft.complexity) || 3,
63
+ assignee: draft.assignee || 'agent',
64
+ scheduledDate: draft.scheduledDate || '',
65
+ dueDate: draft.dueDate || '',
66
+ workstreamId: draft.workstreamId || '',
67
+ checklistItems: draft.checklistItems,
68
+ taxonomies: draft.taxonomies,
69
+ attachments: draft.attachments,
70
+ }), []);
71
+ const buildTaskDraftSignature = useCallback((textDraft = readTextDraft(), attachmentDraft = getAttachmentsDraftRef.current()) => buildTaskDraftSignatureFromEditorDraft({
72
+ title: textDraft.title,
53
73
  description: textDraft.description,
54
74
  category: typeof category === 'string'
55
75
  ? category
56
76
  : category.label || getPreferredCategoryValue(activeCategories),
57
77
  type: typeof type === 'string' ? type : type.label || DEFAULT_TYPE_VALUE,
58
- priority: Number(priority),
78
+ priority,
59
79
  complexity: Number(complexity) || 3,
80
+ status,
60
81
  assignee: assignee || 'agent',
61
- scheduledDate: scheduledDate || '',
62
- dueDate: dueDate || '',
63
- workstreamInput: workstreamInput.trim(),
82
+ scheduledDate,
83
+ dueDate,
84
+ workstreamId: workstreamInput.trim()
85
+ ? (resolveWorkstreamIdInput(workstreamInput)?.id || workstreamInput.trim())
86
+ : '',
64
87
  checklistItems,
65
- comments,
66
88
  taxonomies: formTaxonomies,
67
- attachments,
89
+ attachments: attachmentDraft,
68
90
  }), [
69
91
  activeCategories,
70
92
  assignee,
71
- attachments,
93
+ buildTaskDraftSignatureFromEditorDraft,
72
94
  category,
73
95
  checklistItems,
74
- comments,
75
96
  complexity,
76
97
  description,
77
98
  dueDate,
@@ -79,7 +100,9 @@ export function useTaskFormActions(input) {
79
100
  getPreferredCategoryValue,
80
101
  priority,
81
102
  readTextDraft,
103
+ resolveWorkstreamIdInput,
82
104
  scheduledDate,
105
+ status,
83
106
  title,
84
107
  type,
85
108
  workstreamInput
@@ -90,6 +113,17 @@ export function useTaskFormActions(input) {
90
113
  autoSaveTimerRef.current = null;
91
114
  }
92
115
  }, []);
116
+ const hasUnsavedChangesNow = useCallback(() => Boolean(editingTaskId
117
+ && lastSavedDraftSignature !== null
118
+ && buildTaskDraftSignature() !== lastSavedDraftSignature), [buildTaskDraftSignature, editingTaskId, lastSavedDraftSignature]);
119
+ const hasUnsavedChanges = hasUnsavedChangesNow();
120
+ useEffect(() => {
121
+ if (!revisionConflict)
122
+ return;
123
+ clearAutoSaveTimer();
124
+ queuedAutoSaveRef.current = null;
125
+ setAutoSaveState('idle');
126
+ }, [clearAutoSaveTimer, revisionConflict]);
93
127
  const enqueueAutoSave = useCallback((request) => {
94
128
  if (activeAutoSaveSignatureRef.current === request.signature
95
129
  && queuedAutoSaveRef.current === null
@@ -123,9 +157,28 @@ export function useTaskFormActions(input) {
123
157
  const saveTask = useCallback(async (options) => {
124
158
  const quiet = options?.quiet ?? false;
125
159
  const source = options?.source ?? 'manual';
160
+ if (editingTaskId && revisionConflict) {
161
+ setError('');
162
+ setAutoSaveState('idle');
163
+ return false;
164
+ }
165
+ if (!editingTaskId && source === 'manual') {
166
+ try {
167
+ await awaitPendingDescriptionImageUploadRef.current?.();
168
+ }
169
+ catch (error) {
170
+ console.error('Description image upload did not settle before task creation.', error);
171
+ const message = 'Wait for the Description image upload to finish, then try again.';
172
+ setError(message);
173
+ if (!quiet)
174
+ pushNotice(message, 'error');
175
+ return false;
176
+ }
177
+ }
126
178
  const textDraft = options?.textDraft ?? readTextDraft();
127
179
  const draftTitle = textDraft.title;
128
180
  const draftDescription = textDraft.description;
181
+ const draftAttachments = getAttachmentsDraftRef.current();
129
182
  if (!editingTaskId) {
130
183
  createdTaskRef.current = null;
131
184
  }
@@ -218,10 +271,13 @@ export function useTaskFormActions(input) {
218
271
  if (!editingTaskId)
219
272
  body.comments = comments;
220
273
  if (!editingTaskId || attachmentsDirty) {
221
- body.attachments = attachments;
274
+ body.attachments = draftAttachments;
222
275
  }
223
276
  if (editingTaskId && Object.keys(body).length > 0) {
224
277
  body.saveSource = source;
278
+ if (existingTask?.detailRevision) {
279
+ body.expectedDetailRevision = existingTask.detailRevision;
280
+ }
225
281
  }
226
282
  if (editingTaskId && updateTask) {
227
283
  const saved = await updateTask(editingTaskId, body);
@@ -383,7 +439,6 @@ export function useTaskFormActions(input) {
383
439
  activeCategories,
384
440
  apiEndpoint,
385
441
  assignee,
386
- attachments,
387
442
  attachmentsDirty,
388
443
  category,
389
444
  checklistItems,
@@ -396,6 +451,7 @@ export function useTaskFormActions(input) {
396
451
  taskHttpMutationClient,
397
452
  updateTask,
398
453
  editingTaskId,
454
+ revisionConflict,
399
455
  editingReadOnlyMode,
400
456
  formTaxonomies,
401
457
  getPreferredCategoryValue,
@@ -424,6 +480,15 @@ export function useTaskFormActions(input) {
424
480
  suppressNextCreateSuccessNoticeRef.current = false;
425
481
  if (activeTab === 'add' && !editingTaskId) {
426
482
  const createdTask = createdTaskRef.current;
483
+ if (createdTask && onTaskCreateAccepted) {
484
+ try {
485
+ await onTaskCreateAccepted(createdTask);
486
+ }
487
+ catch (error) {
488
+ console.warn('Task create draft upload promotion failed.', error);
489
+ pushNotice('Task created successfully. Temporary image cleanup will retry automatically.', 'info');
490
+ }
491
+ }
427
492
  if (createdTask && onTaskCreated) {
428
493
  onTaskCreated(createdTask);
429
494
  return;
@@ -433,7 +498,7 @@ export function useTaskFormActions(input) {
433
498
  await fetchTasks();
434
499
  }
435
500
  }
436
- }, [activeTab, editingTaskId, fetchTasks, onTaskCreated, pushNotice, resetForm, saveTask, setActiveTab]);
501
+ }, [activeTab, editingTaskId, fetchTasks, onTaskCreateAccepted, onTaskCreated, pushNotice, resetForm, saveTask, setActiveTab]);
437
502
  useEffect(() => {
438
503
  clearAutoSaveTimer();
439
504
  queuedAutoSaveRef.current = null;
@@ -442,14 +507,23 @@ export function useTaskFormActions(input) {
442
507
  setAutoSaveState('idle');
443
508
  return;
444
509
  }
445
- setLastSavedDraftSignature(buildTaskDraftSignature());
510
+ setLastSavedDraftSignature(editorBaselineDraft
511
+ ? buildTaskDraftSignatureFromEditorDraft(editorBaselineDraft)
512
+ : buildTaskDraftSignature());
446
513
  setAutoSaveState('idle');
447
- }, [clearAutoSaveTimer, editingTaskId]);
514
+ }, [
515
+ buildTaskDraftSignatureFromEditorDraft,
516
+ clearAutoSaveTimer,
517
+ editingTaskId,
518
+ editorBaselineDraft,
519
+ ]);
448
520
  const flushAutoSave = useCallback(async () => {
449
521
  clearAutoSaveTimer();
450
522
  if (editingReadOnlyMode) {
451
523
  return true;
452
524
  }
525
+ if (revisionConflict)
526
+ return false;
453
527
  if (!editingTaskId || lastSavedDraftSignature === null) {
454
528
  return true;
455
529
  }
@@ -475,11 +549,12 @@ export function useTaskFormActions(input) {
475
549
  enqueueAutoSave,
476
550
  lastSavedDraftSignature,
477
551
  readTextDraft,
552
+ revisionConflict,
478
553
  saveTask,
479
554
  scheduledDate,
480
555
  ]);
481
556
  useEffect(() => {
482
- if (!editingTaskId || editingReadOnlyMode || lastSavedDraftSignature === null) {
557
+ if (!editingTaskId || editingReadOnlyMode || revisionConflict || lastSavedDraftSignature === null) {
483
558
  return;
484
559
  }
485
560
  const textDraft = readTextDraft();
@@ -525,6 +600,7 @@ export function useTaskFormActions(input) {
525
600
  enqueueAutoSave,
526
601
  lastSavedDraftSignature,
527
602
  readTextDraft,
603
+ revisionConflict,
528
604
  saveTask,
529
605
  scheduledDate,
530
606
  ]);
@@ -611,6 +687,9 @@ export function useTaskFormActions(input) {
611
687
  ]);
612
688
  return {
613
689
  autoSaveState,
690
+ hasUnsavedChanges,
691
+ hasUnsavedChangesNow,
692
+ hasPendingAutoSave: autoSaveState === 'saving',
614
693
  flushAutoSave,
615
694
  scheduleWarningPrompt,
616
695
  saveTask,
@@ -29,6 +29,11 @@ type UseSettingsModelInput = {
29
29
  manualComplexityEnabled: boolean;
30
30
  checklistDropdownEnabled: boolean;
31
31
  showTaskCardStatusLabel: boolean;
32
+ showTaskCardDescription: boolean;
33
+ showTaskCardAttachments: boolean;
34
+ showTaskCardChecklistProgress: boolean;
35
+ showTaskCardLatestActivity: boolean;
36
+ tintTaskCardActivityBackground: boolean;
32
37
  pathSaved: boolean;
33
38
  settingsSection: SettingsSection;
34
39
  setupState: any;
@@ -38,15 +43,21 @@ type UseSettingsModelInput = {
38
43
  setCurrentTheme: (value: any) => void;
39
44
  handleSaveTheme: (...args: any[]) => any;
40
45
  handleSaveGlobalTheme: (...args: any[]) => any;
46
+ handleUseGlobalThemeDefault: (...args: any[]) => any;
41
47
  setKeyShortcut: (value: string) => void;
42
48
  handleJsonBackupEnabledChange: (...args: any[]) => any;
43
49
  handleSaveGlobalJsonBackupEnabled: (...args: any[]) => any;
50
+ handleUseGlobalJsonBackupDefault: (...args: any[]) => any;
44
51
  handleSaveGlobalWeekStartsOn: (...args: any[]) => any;
45
52
  handleSaveLocale: (...args: any[]) => any;
46
53
  handleManualComplexityEnabledChange: (...args: any[]) => any;
47
54
  handleChecklistDropdownEnabledChange: (...args: any[]) => any;
48
55
  handleShowTaskCardStatusLabelChange: (...args: any[]) => any;
49
- handleResetProjectToGlobal: (...args: any[]) => any;
56
+ handleShowTaskCardDescriptionChange: (...args: any[]) => any;
57
+ handleShowTaskCardAttachmentsChange: (...args: any[]) => any;
58
+ handleShowTaskCardChecklistProgressChange: (...args: any[]) => any;
59
+ handleShowTaskCardLatestActivityChange: (...args: any[]) => any;
60
+ handleTintTaskCardActivityBackgroundChange: (...args: any[]) => any;
50
61
  handleSaveSettings: (...args: any[]) => any;
51
62
  initiativeTemplates: any[];
52
63
  fetchInitiativeTemplates: (...args: any[]) => any;
@@ -109,6 +120,11 @@ export declare function useSettingsModel(input: UseSettingsModelInput): {
109
120
  manualComplexityEnabled: boolean;
110
121
  checklistDropdownEnabled: boolean;
111
122
  showTaskCardStatusLabel: boolean;
123
+ showTaskCardDescription: boolean;
124
+ showTaskCardAttachments: boolean;
125
+ showTaskCardChecklistProgress: boolean;
126
+ showTaskCardLatestActivity: boolean;
127
+ tintTaskCardActivityBackground: boolean;
112
128
  pathSaved: boolean;
113
129
  initialSection: SettingsSection;
114
130
  setupState: any;
@@ -118,15 +134,21 @@ export declare function useSettingsModel(input: UseSettingsModelInput): {
118
134
  onThemeChange: (value: any) => void;
119
135
  onSaveTheme: (...args: any[]) => any;
120
136
  onSaveGlobalTheme: (...args: any[]) => any;
137
+ onUseGlobalThemeDefault: (...args: any[]) => any;
121
138
  onKeyShortcutChange: (value: string) => void;
122
139
  onJsonBackupEnabledChange: (...args: any[]) => any;
123
140
  onSaveGlobalJsonBackupEnabled: (...args: any[]) => any;
141
+ onUseGlobalJsonBackupDefault: (...args: any[]) => any;
124
142
  onSaveGlobalWeekStartsOn: (...args: any[]) => any;
125
143
  onSaveLocale: (...args: any[]) => any;
126
144
  onManualComplexityEnabledChange: (...args: any[]) => any;
127
145
  onChecklistDropdownEnabledChange: (...args: any[]) => any;
128
146
  onShowTaskCardStatusLabelChange: (...args: any[]) => any;
129
- onResetProjectToGlobal: (...args: any[]) => any;
147
+ onShowTaskCardDescriptionChange: (...args: any[]) => any;
148
+ onShowTaskCardAttachmentsChange: (...args: any[]) => any;
149
+ onShowTaskCardChecklistProgressChange: (...args: any[]) => any;
150
+ onShowTaskCardLatestActivityChange: (...args: any[]) => any;
151
+ onTintTaskCardActivityBackgroundChange: (...args: any[]) => any;
130
152
  onSaveSettings: (...args: any[]) => any;
131
153
  initiativeTemplates: any[];
132
154
  onRefreshInitiativeTemplates: (...args: any[]) => any;
@@ -1,6 +1,6 @@
1
1
  import { useCallback } from 'react';
2
2
  export function useSettingsModel(input) {
3
- const { resolveCloudAuthUrl, currentWorkspaceId, normalizedCloudAuthBaseUrl, normalizedCloudMcpBaseUrl, mergedConfig, availableWorkspaces, currentTheme, configLoaded, globalTheme, themeUseGlobalDefault, keyShortcut, jsonBackupEnabled, globalJsonBackupEnabled, globalWeekStartsOn, locale, supportedLocales, jsonBackupUseGlobalDefault, manualComplexityEnabled, checklistDropdownEnabled, showTaskCardStatusLabel, pathSaved, settingsSection, setupState, buildInfo, saveSetupMode, saveWorkspaceProfile, setCurrentTheme, handleSaveTheme, handleSaveGlobalTheme, setKeyShortcut, handleJsonBackupEnabledChange, handleSaveGlobalJsonBackupEnabled, handleSaveGlobalWeekStartsOn, handleSaveLocale, handleManualComplexityEnabledChange, handleChecklistDropdownEnabledChange, handleShowTaskCardStatusLabelChange, handleResetProjectToGlobal, handleSaveSettings, initiativeTemplates, fetchInitiativeTemplates, createInitiativeFromTemplate, setShowFolderBrowser, setBrowserTarget, fetchFolders, activeCategories, pathValidation, taxonomyDisplayLabels, handleUpdateCategory, handleRemoveCategory, handleSaveCategory, handleAddPath, handleRemovePath, handleUpdateCategoryIcon, handleUpdateCategoryColor, activeTypes, handleSaveType, handleRemoveType, handleUpdateType, taxonomies, handleUpdateTaxonomies, priorities, handleUpdatePriorities, analyzeSystemTaxonomyPack, handleApplySystemTaxonomyPack, handleUpdateTaxonomyDisplayLabels, projectRoot, projectName, mcpHostRoot, serverHostRoot, mcpScriptPath, tenantId, runtimeMode, workspaceSwitchingEnabled, deleteWorkspace, setMcpHostRoot, isAuthenticated } = input;
3
+ const { resolveCloudAuthUrl, currentWorkspaceId, normalizedCloudAuthBaseUrl, normalizedCloudMcpBaseUrl, mergedConfig, availableWorkspaces, currentTheme, configLoaded, globalTheme, themeUseGlobalDefault, keyShortcut, jsonBackupEnabled, globalJsonBackupEnabled, globalWeekStartsOn, locale, supportedLocales, jsonBackupUseGlobalDefault, manualComplexityEnabled, checklistDropdownEnabled, showTaskCardStatusLabel, showTaskCardDescription, showTaskCardAttachments, showTaskCardChecklistProgress, showTaskCardLatestActivity, tintTaskCardActivityBackground, pathSaved, settingsSection, setupState, buildInfo, saveSetupMode, saveWorkspaceProfile, setCurrentTheme, handleSaveTheme, handleSaveGlobalTheme, handleUseGlobalThemeDefault, setKeyShortcut, handleJsonBackupEnabledChange, handleSaveGlobalJsonBackupEnabled, handleUseGlobalJsonBackupDefault, handleSaveGlobalWeekStartsOn, handleSaveLocale, handleManualComplexityEnabledChange, handleChecklistDropdownEnabledChange, handleShowTaskCardStatusLabelChange, handleShowTaskCardDescriptionChange, handleShowTaskCardAttachmentsChange, handleShowTaskCardChecklistProgressChange, handleShowTaskCardLatestActivityChange, handleTintTaskCardActivityBackgroundChange, handleSaveSettings, initiativeTemplates, fetchInitiativeTemplates, createInitiativeFromTemplate, setShowFolderBrowser, setBrowserTarget, fetchFolders, activeCategories, pathValidation, taxonomyDisplayLabels, handleUpdateCategory, handleRemoveCategory, handleSaveCategory, handleAddPath, handleRemovePath, handleUpdateCategoryIcon, handleUpdateCategoryColor, activeTypes, handleSaveType, handleRemoveType, handleUpdateType, taxonomies, handleUpdateTaxonomies, priorities, handleUpdatePriorities, analyzeSystemTaxonomyPack, handleApplySystemTaxonomyPack, handleUpdateTaxonomyDisplayLabels, projectRoot, projectName, mcpHostRoot, serverHostRoot, mcpScriptPath, tenantId, runtimeMode, workspaceSwitchingEnabled, deleteWorkspace, setMcpHostRoot, isAuthenticated } = input;
4
4
  const fetchCloudAuthApi = useCallback(async (path, init) => {
5
5
  const resolvedUrl = resolveCloudAuthUrl(path);
6
6
  const headers = new Headers(init?.headers || undefined);
@@ -75,6 +75,11 @@ export function useSettingsModel(input) {
75
75
  manualComplexityEnabled,
76
76
  checklistDropdownEnabled,
77
77
  showTaskCardStatusLabel,
78
+ showTaskCardDescription,
79
+ showTaskCardAttachments,
80
+ showTaskCardChecklistProgress,
81
+ showTaskCardLatestActivity,
82
+ tintTaskCardActivityBackground,
78
83
  pathSaved,
79
84
  initialSection: settingsSection,
80
85
  setupState,
@@ -84,15 +89,21 @@ export function useSettingsModel(input) {
84
89
  onThemeChange: setCurrentTheme,
85
90
  onSaveTheme: handleSaveTheme,
86
91
  onSaveGlobalTheme: handleSaveGlobalTheme,
92
+ onUseGlobalThemeDefault: handleUseGlobalThemeDefault,
87
93
  onKeyShortcutChange: setKeyShortcut,
88
94
  onJsonBackupEnabledChange: handleJsonBackupEnabledChange,
89
95
  onSaveGlobalJsonBackupEnabled: handleSaveGlobalJsonBackupEnabled,
96
+ onUseGlobalJsonBackupDefault: handleUseGlobalJsonBackupDefault,
90
97
  onSaveGlobalWeekStartsOn: handleSaveGlobalWeekStartsOn,
91
98
  onSaveLocale: handleSaveLocale,
92
99
  onManualComplexityEnabledChange: handleManualComplexityEnabledChange,
93
100
  onChecklistDropdownEnabledChange: handleChecklistDropdownEnabledChange,
94
101
  onShowTaskCardStatusLabelChange: handleShowTaskCardStatusLabelChange,
95
- onResetProjectToGlobal: handleResetProjectToGlobal,
102
+ onShowTaskCardDescriptionChange: handleShowTaskCardDescriptionChange,
103
+ onShowTaskCardAttachmentsChange: handleShowTaskCardAttachmentsChange,
104
+ onShowTaskCardChecklistProgressChange: handleShowTaskCardChecklistProgressChange,
105
+ onShowTaskCardLatestActivityChange: handleShowTaskCardLatestActivityChange,
106
+ onTintTaskCardActivityBackgroundChange: handleTintTaskCardActivityBackgroundChange,
96
107
  onSaveSettings: handleSaveSettings,
97
108
  initiativeTemplates,
98
109
  onRefreshInitiativeTemplates: fetchInitiativeTemplates,
@@ -18,18 +18,29 @@ interface UseSettingsPersistenceInput {
18
18
  setManualComplexityEnabled: (value: boolean) => void;
19
19
  setChecklistDropdownEnabled: (value: boolean) => void;
20
20
  setShowTaskCardStatusLabel: (value: boolean) => void;
21
+ setShowTaskCardDescription: (value: boolean) => void;
22
+ setShowTaskCardAttachments: (value: boolean) => void;
23
+ setShowTaskCardChecklistProgress: (value: boolean) => void;
24
+ setShowTaskCardLatestActivity: (value: boolean) => void;
25
+ setTintTaskCardActivityBackground: (value: boolean) => void;
21
26
  }
22
27
  export declare function useSettingsPersistence(input: UseSettingsPersistenceInput): {
23
28
  handleSaveSettings: () => Promise<boolean>;
24
29
  handleSaveTheme: (theme: TaskforceTheme) => Promise<boolean>;
25
30
  handleSaveGlobalTheme: (theme: TaskforceTheme) => Promise<boolean>;
31
+ handleUseGlobalThemeDefault: () => Promise<boolean>;
26
32
  handleJsonBackupEnabledChange: (enabled: boolean) => Promise<boolean>;
27
33
  handleSaveGlobalJsonBackupEnabled: (enabled: boolean) => Promise<boolean>;
34
+ handleUseGlobalJsonBackupDefault: () => Promise<boolean>;
28
35
  handleSaveGlobalWeekStartsOn: (weekStartsOn: WeekStartsOn) => Promise<boolean>;
29
36
  handleSaveLocale: (nextLocale: string) => Promise<boolean>;
30
37
  handleManualComplexityEnabledChange: (enabled: boolean) => Promise<boolean>;
31
38
  handleChecklistDropdownEnabledChange: (enabled: boolean) => Promise<boolean>;
32
39
  handleShowTaskCardStatusLabelChange: (enabled: boolean) => Promise<boolean>;
33
- handleResetProjectToGlobal: () => Promise<boolean>;
40
+ handleShowTaskCardDescriptionChange: (enabled: boolean) => Promise<boolean>;
41
+ handleShowTaskCardAttachmentsChange: (enabled: boolean) => Promise<boolean>;
42
+ handleShowTaskCardChecklistProgressChange: (enabled: boolean) => Promise<boolean>;
43
+ handleShowTaskCardLatestActivityChange: (enabled: boolean) => Promise<boolean>;
44
+ handleTintTaskCardActivityBackgroundChange: (enabled: boolean) => Promise<boolean>;
34
45
  };
35
46
  export {};
@@ -1,7 +1,7 @@
1
1
  import { useCallback } from 'react';
2
2
  import { setLocale as setAppLocale } from '../../localization';
3
3
  export function useSettingsPersistence(input) {
4
- const { keyShortcut, themeUseGlobalDefault, runtimeMode, jsonBackupUseGlobalDefault, globalTheme, globalJsonBackupEnabled, setCurrentTheme, setThemeUseGlobalDefault, setGlobalTheme, setJsonBackupEnabled, setJsonBackupUseGlobalDefault, setGlobalJsonBackupEnabled, setGlobalWeekStartsOn, setLocale, setManualComplexityEnabled, setChecklistDropdownEnabled, setShowTaskCardStatusLabel } = input;
4
+ const { keyShortcut, themeUseGlobalDefault, runtimeMode, jsonBackupUseGlobalDefault, globalTheme, globalJsonBackupEnabled, setCurrentTheme, setThemeUseGlobalDefault, setGlobalTheme, setJsonBackupEnabled, setJsonBackupUseGlobalDefault, setGlobalJsonBackupEnabled, setGlobalWeekStartsOn, setLocale, setManualComplexityEnabled, setChecklistDropdownEnabled, setShowTaskCardStatusLabel, setShowTaskCardDescription, setShowTaskCardAttachments, setShowTaskCardChecklistProgress, setShowTaskCardLatestActivity, setTintTaskCardActivityBackground } = input;
5
5
  const handleSaveSettings = useCallback(async () => {
6
6
  try {
7
7
  const globalRes = await fetch('/api/taskforce/global-settings', {
@@ -61,6 +61,25 @@ export function useSettingsPersistence(input) {
61
61
  return false;
62
62
  }
63
63
  }, [setGlobalTheme, themeUseGlobalDefault, setCurrentTheme]);
64
+ const handleUseGlobalThemeDefault = useCallback(async () => {
65
+ try {
66
+ const configRes = await fetch('/api/taskforce/config', {
67
+ method: 'POST',
68
+ headers: { 'Content-Type': 'application/json' },
69
+ body: JSON.stringify({ theme: null }),
70
+ });
71
+ if (!configRes.ok) {
72
+ throw new Error(`Failed to save config (${configRes.status})`);
73
+ }
74
+ setThemeUseGlobalDefault(true);
75
+ setCurrentTheme(globalTheme);
76
+ return true;
77
+ }
78
+ catch {
79
+ console.error('[Taskforce] Failed to use global theme default');
80
+ return false;
81
+ }
82
+ }, [globalTheme, setCurrentTheme, setThemeUseGlobalDefault]);
64
83
  const handleJsonBackupEnabledChange = useCallback(async (enabled) => {
65
84
  if (runtimeMode === 'cloud') {
66
85
  setJsonBackupEnabled(false);
@@ -113,6 +132,25 @@ export function useSettingsPersistence(input) {
113
132
  return false;
114
133
  }
115
134
  }, [runtimeMode, setGlobalJsonBackupEnabled, jsonBackupUseGlobalDefault, setJsonBackupEnabled]);
135
+ const handleUseGlobalJsonBackupDefault = useCallback(async () => {
136
+ try {
137
+ const configRes = await fetch('/api/taskforce/config', {
138
+ method: 'POST',
139
+ headers: { 'Content-Type': 'application/json' },
140
+ body: JSON.stringify({ jsonBackupEnabled: null }),
141
+ });
142
+ if (!configRes.ok) {
143
+ throw new Error(`Failed to save config (${configRes.status})`);
144
+ }
145
+ setJsonBackupUseGlobalDefault(true);
146
+ setJsonBackupEnabled(globalJsonBackupEnabled);
147
+ return true;
148
+ }
149
+ catch {
150
+ console.error('[Taskforce] Failed to use global backup default');
151
+ return false;
152
+ }
153
+ }, [globalJsonBackupEnabled, setJsonBackupEnabled, setJsonBackupUseGlobalDefault]);
116
154
  const handleSaveGlobalWeekStartsOn = useCallback(async (weekStartsOn) => {
117
155
  setGlobalWeekStartsOn(weekStartsOn);
118
156
  try {
@@ -176,43 +214,12 @@ export function useSettingsPersistence(input) {
176
214
  return false;
177
215
  }
178
216
  }, [setChecklistDropdownEnabled]);
179
- const handleShowTaskCardStatusLabelChange = useCallback(async (enabled) => {
180
- setShowTaskCardStatusLabel(enabled);
181
- try {
182
- const configRes = await fetch('/api/taskforce/config', {
183
- method: 'POST',
184
- headers: { 'Content-Type': 'application/json' },
185
- body: JSON.stringify({ showTaskCardStatusLabel: enabled }),
186
- });
187
- if (!configRes.ok) {
188
- throw new Error(`Failed to save config (${configRes.status})`);
189
- }
190
- return true;
191
- }
192
- catch {
193
- console.error('[Taskforce] Failed to save task card status label setting');
194
- return false;
195
- }
196
- }, [setShowTaskCardStatusLabel]);
197
- const handleResetProjectToGlobal = useCallback(async () => {
198
- setThemeUseGlobalDefault(true);
199
- setJsonBackupUseGlobalDefault(true);
200
- setCurrentTheme(globalTheme);
201
- setJsonBackupEnabled(globalJsonBackupEnabled);
202
- setManualComplexityEnabled(false);
203
- setChecklistDropdownEnabled(true);
204
- setShowTaskCardStatusLabel(false);
217
+ const saveTaskCardPreference = useCallback(async (key, enabled, errorMessage) => {
205
218
  try {
206
219
  const configRes = await fetch('/api/taskforce/config', {
207
220
  method: 'POST',
208
221
  headers: { 'Content-Type': 'application/json' },
209
- body: JSON.stringify({
210
- theme: null,
211
- jsonBackupEnabled: null,
212
- manualComplexityEnabled: null,
213
- checklistDropdownEnabled: null,
214
- showTaskCardStatusLabel: null
215
- }),
222
+ body: JSON.stringify({ [key]: enabled }),
216
223
  });
217
224
  if (!configRes.ok) {
218
225
  throw new Error(`Failed to save config (${configRes.status})`);
@@ -220,31 +227,51 @@ export function useSettingsPersistence(input) {
220
227
  return true;
221
228
  }
222
229
  catch {
223
- console.error('[Taskforce] Failed to reset project settings');
230
+ console.error(`[Taskforce] ${errorMessage}`);
224
231
  return false;
225
232
  }
226
- }, [
227
- setThemeUseGlobalDefault,
228
- setJsonBackupUseGlobalDefault,
229
- setCurrentTheme,
230
- globalTheme,
231
- setJsonBackupEnabled,
232
- globalJsonBackupEnabled,
233
- setManualComplexityEnabled,
234
- setChecklistDropdownEnabled,
235
- setShowTaskCardStatusLabel
236
- ]);
233
+ }, []);
234
+ const handleShowTaskCardStatusLabelChange = useCallback(async (enabled) => {
235
+ setShowTaskCardStatusLabel(enabled);
236
+ return saveTaskCardPreference('showTaskCardStatusLabel', enabled, 'Failed to save task card status label setting');
237
+ }, [saveTaskCardPreference, setShowTaskCardStatusLabel]);
238
+ const handleShowTaskCardDescriptionChange = useCallback(async (enabled) => {
239
+ setShowTaskCardDescription(enabled);
240
+ return saveTaskCardPreference('showTaskCardDescription', enabled, 'Failed to save task card description setting');
241
+ }, [saveTaskCardPreference, setShowTaskCardDescription]);
242
+ const handleShowTaskCardAttachmentsChange = useCallback(async (enabled) => {
243
+ setShowTaskCardAttachments(enabled);
244
+ return saveTaskCardPreference('showTaskCardAttachments', enabled, 'Failed to save task card attachments setting');
245
+ }, [saveTaskCardPreference, setShowTaskCardAttachments]);
246
+ const handleShowTaskCardChecklistProgressChange = useCallback(async (enabled) => {
247
+ setShowTaskCardChecklistProgress(enabled);
248
+ return saveTaskCardPreference('showTaskCardChecklistProgress', enabled, 'Failed to save task card checklist progress setting');
249
+ }, [saveTaskCardPreference, setShowTaskCardChecklistProgress]);
250
+ const handleShowTaskCardLatestActivityChange = useCallback(async (enabled) => {
251
+ setShowTaskCardLatestActivity(enabled);
252
+ return saveTaskCardPreference('showTaskCardLatestActivity', enabled, 'Failed to save task card latest activity setting');
253
+ }, [saveTaskCardPreference, setShowTaskCardLatestActivity]);
254
+ const handleTintTaskCardActivityBackgroundChange = useCallback(async (enabled) => {
255
+ setTintTaskCardActivityBackground(enabled);
256
+ return saveTaskCardPreference('tintTaskCardActivityBackground', enabled, 'Failed to save task card activity background setting');
257
+ }, [saveTaskCardPreference, setTintTaskCardActivityBackground]);
237
258
  return {
238
259
  handleSaveSettings,
239
260
  handleSaveTheme,
240
261
  handleSaveGlobalTheme,
262
+ handleUseGlobalThemeDefault,
241
263
  handleJsonBackupEnabledChange,
242
264
  handleSaveGlobalJsonBackupEnabled,
265
+ handleUseGlobalJsonBackupDefault,
243
266
  handleSaveGlobalWeekStartsOn,
244
267
  handleSaveLocale,
245
268
  handleManualComplexityEnabledChange,
246
269
  handleChecklistDropdownEnabledChange,
247
270
  handleShowTaskCardStatusLabelChange,
248
- handleResetProjectToGlobal
271
+ handleShowTaskCardDescriptionChange,
272
+ handleShowTaskCardAttachmentsChange,
273
+ handleShowTaskCardChecklistProgressChange,
274
+ handleShowTaskCardLatestActivityChange,
275
+ handleTintTaskCardActivityBackgroundChange
249
276
  };
250
277
  }
@@ -20,8 +20,12 @@ interface UseFilterSortProps {
20
20
  referenceDataLoaded: boolean;
21
21
  assigneeOptionsLoaded: boolean;
22
22
  assigneeOptions?: TaskAssigneeOption[];
23
+ runtimeMode?: 'local' | 'cloud';
24
+ workspaceId?: string;
25
+ cloudTaskSearchEnabled?: boolean;
26
+ cloudTaskSearchScope?: 'active' | 'archive';
23
27
  }
24
- export declare function useFilterSort({ tasks, archivedTasks, activeCategories, activeTypes, priorities, taxonomies, configLoaded, referenceDataLoaded, assigneeOptionsLoaded, assigneeOptions }: UseFilterSortProps): {
28
+ export declare function useFilterSort({ tasks, archivedTasks, activeCategories, activeTypes, priorities, taxonomies, configLoaded, referenceDataLoaded, assigneeOptionsLoaded, assigneeOptions, runtimeMode, workspaceId, cloudTaskSearchEnabled, cloudTaskSearchScope, }: UseFilterSortProps): {
25
29
  searchQuery: string;
26
30
  setSearchQuery: import("react").Dispatch<import("react").SetStateAction<string>>;
27
31
  filterCategories: string[];
@@ -45,8 +49,8 @@ export declare function useFilterSort({ tasks, archivedTasks, activeCategories,
45
49
  sortOrder: "asc" | "desc";
46
50
  setSortOrder: import("react").Dispatch<import("react").SetStateAction<"asc" | "desc">>;
47
51
  toggleSortOrder: () => void;
48
- groupBy: "category" | "type" | "priority" | "status" | "complexity" | "assignee" | "schedule";
49
- setGroupBy: import("react").Dispatch<import("react").SetStateAction<"category" | "type" | "priority" | "status" | "complexity" | "assignee" | "schedule">>;
52
+ groupBy: "category" | "type" | "priority" | "complexity" | "status" | "assignee" | "schedule";
53
+ setGroupBy: import("react").Dispatch<import("react").SetStateAction<"category" | "type" | "priority" | "complexity" | "status" | "assignee" | "schedule">>;
50
54
  emptyColumnMode: "show" | "collapse" | "hide";
51
55
  setEmptyColumnMode: import("react").Dispatch<import("react").SetStateAction<"show" | "collapse" | "hide">>;
52
56
  collapsedCategories: Record<string, boolean>;