@taskforcehq/taskforce 0.3.305 → 0.3.307

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 (440) hide show
  1. package/README.md +0 -2
  2. package/dist/Taskforce.module.css +603 -107
  3. package/dist/TaskforceCore.js +216 -43
  4. package/dist/TaskforceCore.test.js +611 -28
  5. package/dist/assets/fonts/CourierPrime-Bold.woff2 +0 -0
  6. package/dist/assets/fonts/CourierPrime-BoldItalic.woff2 +0 -0
  7. package/dist/assets/fonts/CourierPrime-Italic.woff2 +0 -0
  8. package/dist/assets/fonts/CourierPrime-Regular.woff2 +0 -0
  9. package/dist/assets/fonts/Noir_medium.woff2 +0 -0
  10. package/dist/assets/fonts/Noir_regular.woff2 +0 -0
  11. package/dist/assets/fonts/RussoOne-Regular.woff2 +0 -0
  12. package/dist/assets/fonts/SpecialElite-Regular.woff2 +0 -0
  13. package/dist/compat/workspaceSyncCompat.js +46 -2
  14. package/dist/compat/workspaceSyncCompat.test.js +38 -1
  15. package/dist/components/activity/EntityActivityTimeline.d.ts +34 -0
  16. package/dist/components/activity/EntityActivityTimeline.js +81 -0
  17. package/dist/components/context/ContextAttachmentManager.d.ts +14 -0
  18. package/dist/components/context/ContextAttachmentManager.js +561 -0
  19. package/dist/components/features/AgentsModule.d.ts +14 -1
  20. package/dist/components/features/AgentsModule.js +366 -18
  21. package/dist/components/features/AgentsModule.test.js +507 -8
  22. package/dist/components/features/AnnotatedAttachmentWorkspace.d.ts +3 -1
  23. package/dist/components/features/AnnotatedAttachmentWorkspace.js +118 -4
  24. package/dist/components/features/AnnotatedAttachmentWorkspace.test.js +52 -0
  25. package/dist/components/features/DocumentIndex.d.ts +2 -2
  26. package/dist/components/features/DocumentIndex.js +3 -4
  27. package/dist/components/features/DocumentViewer.d.ts +7 -1
  28. package/dist/components/features/DocumentViewer.js +62 -4
  29. package/dist/components/features/DocumentWorkspace.d.ts +10 -2
  30. package/dist/components/features/DocumentWorkspace.js +15 -4
  31. package/dist/components/features/DocumentWorkspace.test.js +51 -1
  32. package/dist/components/features/TaskSettings.d.ts +2 -0
  33. package/dist/components/features/TaskSettings.js +83 -78
  34. package/dist/components/features/TaskSettings.test.js +171 -82
  35. package/dist/components/features/documentWorkspaceModel.d.ts +1 -1
  36. package/dist/components/task/TaskActionHeader.js +11 -5
  37. package/dist/components/task/TaskActionHeader.test.js +10 -0
  38. package/dist/components/task/TaskCard.js +24 -29
  39. package/dist/components/task/TaskCard.test.js +38 -3
  40. package/dist/components/task/TaskContextUpload.js +4 -526
  41. package/dist/components/task/TaskContextUpload.test.js +3 -3
  42. package/dist/components/task/TaskForm.js +61 -116
  43. package/dist/components/task/TaskForm.test.js +110 -8
  44. package/dist/components/task/TaskKanban.d.ts +2 -1
  45. package/dist/components/task/TaskKanban.js +94 -21
  46. package/dist/components/task/TaskKanban.test.js +36 -0
  47. package/dist/components/task/TaskList.js +5 -1
  48. package/dist/components/task/TaskList.test.js +4 -0
  49. package/dist/components/ui/EditableAvatarButton.d.ts +18 -0
  50. package/dist/components/ui/EditableAvatarButton.js +18 -0
  51. package/dist/components/ui/HierarchyActionBadge.d.ts +10 -0
  52. package/dist/components/ui/HierarchyActionBadge.js +5 -0
  53. package/dist/components/views/AppShellHeader.d.ts +3 -1
  54. package/dist/components/views/AppShellHeader.js +27 -11
  55. package/dist/components/views/AppShellHeader.test.js +18 -1
  56. package/dist/components/views/PlanComparisonPage.d.ts +9 -1
  57. package/dist/components/views/PlanComparisonPage.js +78 -14
  58. package/dist/components/views/PlanComparisonPage.test.js +257 -0
  59. package/dist/components/views/PlansPage.js +127 -36
  60. package/dist/components/views/PlansPage.test.js +294 -12
  61. package/dist/components/views/StandaloneLayout.js +529 -592
  62. package/dist/components/views/WidgetView.js +10 -8
  63. package/dist/components/views/panels/PlanningDrawer.d.ts +25 -5
  64. package/dist/components/views/panels/PlanningDrawer.js +270 -55
  65. package/dist/components/views/panels/PlanningDrawer.test.d.ts +1 -0
  66. package/dist/components/views/panels/PlanningDrawer.test.js +529 -0
  67. package/dist/components/views/planningScope.d.ts +20 -0
  68. package/dist/components/views/planningScope.js +25 -0
  69. package/dist/components/views/planningScope.test.d.ts +1 -0
  70. package/dist/components/views/planningScope.test.js +60 -0
  71. package/dist/components/views/standalone/modals/AccountHubModal.d.ts +26 -1
  72. package/dist/components/views/standalone/modals/AccountHubModal.js +76 -2
  73. package/dist/components/views/standalone/modals/AccountHubModal.test.js +20 -3
  74. package/dist/components/views/standalone/modals/AvatarImageManagerModal.d.ts +20 -0
  75. package/dist/components/views/standalone/modals/AvatarImageManagerModal.js +127 -0
  76. package/dist/components/views/standalone/modals/EditProfileModal.d.ts +2 -9
  77. package/dist/components/views/standalone/modals/EditProfileModal.js +3 -2
  78. package/dist/components/views/standalone/modals/SyncEnableWarningModal.d.ts +9 -0
  79. package/dist/components/views/standalone/modals/SyncEnableWarningModal.js +6 -0
  80. package/dist/components/views/standalone/modals/SyncEnableWarningModal.test.d.ts +1 -0
  81. package/dist/components/views/standalone/modals/SyncEnableWarningModal.test.js +24 -0
  82. package/dist/components/views/standalone/modals/SyncStatusModal.d.ts +2 -1
  83. package/dist/components/views/standalone/modals/SyncStatusModal.js +2 -2
  84. package/dist/config/envSchema.js +1 -0
  85. package/dist/core/AiProfileService.d.ts +46 -2
  86. package/dist/core/AiProfileService.js +1073 -82
  87. package/dist/core/AiProfileService.test.js +19 -1
  88. package/dist/core/AiProfiles.test.js +1249 -44
  89. package/dist/core/AttachmentLinkService.d.ts +3 -0
  90. package/dist/core/AttachmentLinkService.js +110 -23
  91. package/dist/core/AuthIdentityService.d.ts +107 -0
  92. package/dist/core/AuthIdentityService.js +284 -0
  93. package/dist/core/AuthTokenService.d.ts +4 -0
  94. package/dist/core/AuthTokenService.js +34 -6
  95. package/dist/core/AuthTokenService.test.js +3 -3
  96. package/dist/core/EntitlementsPolicy.test.js +2 -2
  97. package/dist/core/GlobalSettingsService.js +127 -6
  98. package/dist/core/McpTokenService.d.ts +12 -0
  99. package/dist/core/McpTokenService.js +44 -1
  100. package/dist/core/PlanEntitlementService.d.ts +23 -2
  101. package/dist/core/PlanEntitlementService.js +343 -57
  102. package/dist/core/PlanFeatureCatalog.test.d.ts +1 -0
  103. package/dist/core/PlanFeatureCatalog.test.js +84 -0
  104. package/dist/core/PlanVersionPolicy.test.js +35 -2
  105. package/dist/core/PlanningEntities.test.js +418 -4
  106. package/dist/core/SignupMonetizationSettings.test.js +199 -27
  107. package/dist/core/SyncReconciliationService.js +2 -65
  108. package/dist/core/SystemAdmin.test.js +42 -42
  109. package/dist/core/TaskActivityService.d.ts +28 -1
  110. package/dist/core/TaskActivityService.js +227 -46
  111. package/dist/core/TaskActivitySync.test.d.ts +1 -0
  112. package/dist/core/TaskActivitySync.test.js +90 -0
  113. package/dist/core/TaskAttachmentsCanonical.test.js +51 -1
  114. package/dist/core/TaskAuditTimeline.test.js +96 -0
  115. package/dist/core/Taskforce.d.ts +415 -40
  116. package/dist/core/Taskforce.ids.test.js +58 -0
  117. package/dist/core/Taskforce.js +1543 -266
  118. package/dist/core/Taskforce.listTasksSlim.test.d.ts +1 -0
  119. package/dist/core/Taskforce.listTasksSlim.test.js +91 -0
  120. package/dist/core/Taskforce.mcpAuth.test.js +109 -0
  121. package/dist/core/UserProfileAvatarDrafts.test.js +30 -3
  122. package/dist/core/WorkspaceLifecycleService.js +0 -5
  123. package/dist/core/WorkspacePermissions.test.js +25 -1
  124. package/dist/core/WorkspacePlanMode.test.js +117 -16
  125. package/dist/core/shared.d.ts +1 -1
  126. package/dist/core/shared.js +5 -1
  127. package/dist/core/types.d.ts +75 -2
  128. package/dist/hooks/auth/useTaskforceAuthBootstrap.js +28 -2
  129. package/dist/hooks/bootstrapTimeouts.d.ts +4 -0
  130. package/dist/hooks/bootstrapTimeouts.js +8 -0
  131. package/dist/hooks/bootstrapTimeouts.test.d.ts +1 -0
  132. package/dist/hooks/bootstrapTimeouts.test.js +12 -0
  133. package/dist/hooks/sync/bootstrap.js +2 -0
  134. package/dist/hooks/sync/controlPlane.d.ts +37 -0
  135. package/dist/hooks/sync/controlPlane.js +78 -0
  136. package/dist/hooks/sync/controlPlane.test.d.ts +1 -0
  137. package/dist/hooks/sync/controlPlane.test.js +121 -0
  138. package/dist/hooks/sync/lifecyclePolicy.d.ts +45 -0
  139. package/dist/hooks/sync/lifecyclePolicy.js +93 -0
  140. package/dist/hooks/sync/lifecyclePolicy.test.d.ts +1 -0
  141. package/dist/hooks/sync/lifecyclePolicy.test.js +124 -0
  142. package/dist/hooks/sync/orchestratorShared.d.ts +13 -4
  143. package/dist/hooks/sync/orchestratorShared.js +129 -48
  144. package/dist/hooks/sync/orchestratorShared.test.js +50 -1
  145. package/dist/hooks/sync/pullLifecycle.d.ts +31 -0
  146. package/dist/hooks/sync/pullLifecycle.js +24 -0
  147. package/dist/hooks/sync/pullLifecycle.test.d.ts +1 -0
  148. package/dist/hooks/sync/pullLifecycle.test.js +80 -0
  149. package/dist/hooks/sync/recovery.d.ts +16 -2
  150. package/dist/hooks/sync/recovery.js +179 -53
  151. package/dist/hooks/sync/recovery.test.d.ts +1 -0
  152. package/dist/hooks/sync/recovery.test.js +292 -0
  153. package/dist/hooks/sync/transfers.d.ts +16 -3
  154. package/dist/hooks/sync/transfers.js +210 -66
  155. package/dist/hooks/sync/transfers.test.d.ts +1 -0
  156. package/dist/hooks/sync/transfers.test.js +928 -0
  157. package/dist/hooks/sync/useRecentSyncEvents.d.ts +21 -0
  158. package/dist/hooks/sync/useRecentSyncEvents.js +92 -0
  159. package/dist/hooks/sync/useRecentSyncEvents.test.d.ts +1 -0
  160. package/dist/hooks/sync/useRecentSyncEvents.test.js +124 -0
  161. package/dist/hooks/sync/useSyncStatusActions.d.ts +30 -0
  162. package/dist/hooks/sync/useSyncStatusActions.js +88 -0
  163. package/dist/hooks/sync/useSyncStatusActions.test.d.ts +1 -0
  164. package/dist/hooks/sync/useSyncStatusActions.test.js +133 -0
  165. package/dist/hooks/sync/useSyncStatusControls.d.ts +25 -0
  166. package/dist/hooks/sync/useSyncStatusControls.js +60 -0
  167. package/dist/hooks/sync/useSyncStatusControls.test.d.ts +1 -0
  168. package/dist/hooks/sync/useSyncStatusControls.test.js +88 -0
  169. package/dist/hooks/useFilterSort.js +13 -13
  170. package/dist/hooks/useFilterSort.test.js +87 -1
  171. package/dist/hooks/useSyncOrchestrator.aiProfiles.test.js +12 -0
  172. package/dist/hooks/useSyncOrchestrator.d.ts +9 -2
  173. package/dist/hooks/useSyncOrchestrator.js +409 -183
  174. package/dist/hooks/useSyncOrchestrator.retry-closure.test.js +407 -0
  175. package/dist/hooks/useTaskData.js +8 -3
  176. package/dist/hooks/useTaskData.test.js +45 -0
  177. package/dist/hooks/useTaskforce.d.ts +145 -52
  178. package/dist/hooks/useTaskforce.js +592 -253
  179. package/dist/hooks/useTaskforce.runtime-routing.test.d.ts +1 -0
  180. package/dist/hooks/useTaskforce.runtime-routing.test.js +246 -0
  181. package/dist/hooks/useTaskforce.sync-behavior.test.js +2468 -201
  182. package/dist/hooks/useWorkspaceSyncController.d.ts +1 -0
  183. package/dist/hooks/useWorkspaceSyncController.js +13 -2
  184. package/dist/hooks/useWorkspaceSyncController.test.js +48 -0
  185. package/dist/hooks/workspace/useTaskforceWorkspaceBootstrap.d.ts +16 -0
  186. package/dist/hooks/workspace/useTaskforceWorkspaceBootstrap.js +328 -40
  187. package/dist/localization/locales/en-US.d.ts +0 -1
  188. package/dist/localization/locales/en-US.js +0 -1
  189. package/dist/localization/locales/es-419.js +0 -1
  190. package/dist/localization/locales/pt-BR.js +0 -1
  191. package/dist/mcp/canonicalAssetHelpers.d.ts +16 -4
  192. package/dist/mcp/canonicalAssetHelpers.js +18 -10
  193. package/dist/mcp/canonicalAssetHelpers.test.d.ts +1 -0
  194. package/dist/mcp/canonicalAssetHelpers.test.js +67 -0
  195. package/dist/mcp/clientIntegrations.d.ts +1 -0
  196. package/dist/mcp/clientIntegrations.js +25 -0
  197. package/dist/mcp/clientIntegrations.test.js +14 -3
  198. package/dist/mcp/clientProfileDefaults.js +3 -3
  199. package/dist/mcp/collaborationRegistrar.js +7 -7
  200. package/dist/mcp/documentAssetRegistrar.js +116 -10
  201. package/dist/mcp/runtime.d.ts +3 -0
  202. package/dist/mcp/runtime.js +1099 -185
  203. package/dist/mcp/runtime.test.js +1491 -140
  204. package/dist/mcp/taskAttachmentTypes.d.ts +1 -1
  205. package/dist/mcp/taskPlanningRegistrar.js +48 -0
  206. package/dist/mcp/toolRegistry.d.ts +56 -0
  207. package/dist/mcp/toolRegistry.js +8 -0
  208. package/dist/mcp/toolRegistry.test.js +4 -0
  209. package/dist/migrations/taskSchemaMigrations.d.ts +1 -1
  210. package/dist/migrations/taskSchemaMigrations.js +192 -61
  211. package/dist/migrations/taskSchemaMigrations.test.js +15 -0
  212. package/dist/resources/templates/workflow-sources/workflowDocs.mjs +6 -6
  213. package/dist/resources/templates/workflows/collaborate.yaml +1 -1
  214. package/dist/resources/templates/workflows/evaluate.yaml +2 -2
  215. package/dist/resources/templates/workflows/plan.yaml +1 -1
  216. package/dist/resources/templates/workflows/review.yaml +2 -2
  217. package/dist/server/aiProfileAvatarAssets.d.ts +49 -0
  218. package/dist/server/aiProfileAvatarAssets.js +319 -0
  219. package/dist/server/aiProfileAvatarAssets.test.d.ts +1 -0
  220. package/dist/server/aiProfileAvatarAssets.test.js +213 -0
  221. package/dist/server/annotatedAttachmentsRoutes.test.js +69 -10
  222. package/dist/server/auth/providers/apple.d.ts +33 -0
  223. package/dist/server/auth/providers/apple.js +82 -0
  224. package/dist/server/auth/providers/appleClientSecret.d.ts +37 -0
  225. package/dist/server/auth/providers/appleClientSecret.js +65 -0
  226. package/dist/server/auth/providers/github.d.ts +26 -0
  227. package/dist/server/auth/providers/github.js +86 -0
  228. package/dist/server/auth/providers/google.d.ts +21 -0
  229. package/dist/server/auth/providers/google.js +56 -0
  230. package/dist/server/auth/providers/types.d.ts +21 -0
  231. package/dist/server/auth/providers/types.js +1 -0
  232. package/dist/server/auth.d.ts +2 -0
  233. package/dist/server/auth.js +6 -3
  234. package/dist/server/documentReviewRoutes.test.js +36 -3
  235. package/dist/server/index.cookieProxy.test.js +1 -0
  236. package/dist/server/index.d.ts +12 -0
  237. package/dist/server/index.js +124 -9
  238. package/dist/server/index.rateLimit.test.js +3 -0
  239. package/dist/server/index.test.js +111 -3
  240. package/dist/server/routes/admin.d.ts +3 -0
  241. package/dist/server/routes/admin.js +459 -28
  242. package/dist/server/routes/annotatedAttachments.js +51 -0
  243. package/dist/server/routes/auth.d.ts +26 -2
  244. package/dist/server/routes/auth.js +1170 -71
  245. package/dist/server/routes/authSupport.d.ts +5 -1
  246. package/dist/server/routes/authSupport.js +13 -2
  247. package/dist/server/routes/billing.js +372 -35
  248. package/dist/server/routes/billing.test.js +595 -12
  249. package/dist/server/routes/documents.d.ts +1 -0
  250. package/dist/server/routes/documents.js +182 -70
  251. package/dist/server/routes/shared.d.ts +28 -2
  252. package/dist/server/routes/shared.js +69 -14
  253. package/dist/server/routes/sync.integration.test.js +658 -39
  254. package/dist/server/routes/sync.js +74 -608
  255. package/dist/server/routes/syncAuxRoutes.d.ts +15 -0
  256. package/dist/server/routes/syncAuxRoutes.js +91 -0
  257. package/dist/server/routes/syncAuxRoutes.test.d.ts +1 -0
  258. package/dist/server/routes/syncAuxRoutes.test.js +158 -0
  259. package/dist/server/routes/syncPullApplyRoutes.d.ts +36 -0
  260. package/dist/server/routes/syncPullApplyRoutes.js +204 -0
  261. package/dist/server/routes/syncPushRoutes.d.ts +24 -0
  262. package/dist/server/routes/syncPushRoutes.js +212 -0
  263. package/dist/server/routes/syncRouteGuards.d.ts +36 -0
  264. package/dist/server/routes/syncRouteGuards.js +67 -0
  265. package/dist/server/routes/syncRouteGuards.test.d.ts +1 -0
  266. package/dist/server/routes/syncRouteGuards.test.js +94 -0
  267. package/dist/server/routes/syncRouteTypes.d.ts +13 -0
  268. package/dist/server/routes/syncRouteTypes.js +1 -0
  269. package/dist/server/routes/syncSnapshotRoutes.d.ts +66 -0
  270. package/dist/server/routes/syncSnapshotRoutes.js +182 -0
  271. package/dist/server/routes/tasks.js +55 -10
  272. package/dist/server/routes/workspaces.js +36 -5
  273. package/dist/server/routes.js +147 -11
  274. package/dist/server/routes.test.js +2704 -183
  275. package/dist/services/workflowExportSnapshots.test.js +2 -0
  276. package/dist/shared/aiProfileSeatScope.d.ts +5 -0
  277. package/dist/shared/aiProfileSeatScope.js +21 -0
  278. package/dist/shared/aiProfileSurfaceType.d.ts +1 -1
  279. package/dist/shared/aiProfileSurfaceType.js +10 -8
  280. package/dist/shared/passwordPolicy.d.ts +13 -0
  281. package/dist/shared/passwordPolicy.js +84 -0
  282. package/dist/shared/passwordPolicy.test.d.ts +1 -0
  283. package/dist/shared/passwordPolicy.test.js +34 -0
  284. package/dist/storage/objectStorage.d.ts +1 -0
  285. package/dist/storage/objectStorage.js +2 -1
  286. package/dist/storage/objectStorageClient.d.ts +1 -0
  287. package/dist/storage/objectStorageClient.js +41 -8
  288. package/dist/storage/objectStorageClient.test.js +26 -1
  289. package/dist/storage/objectStorageConfig.js +3 -1
  290. package/dist/storage/objectStorageConfig.test.js +13 -1
  291. package/dist/storage/workspaceAssetStore.d.ts +15 -3
  292. package/dist/storage/workspaceAssetStore.js +132 -44
  293. package/dist/storage/workspaceAssetStore.test.js +93 -6
  294. package/dist/styles/fonts.css +70 -0
  295. package/dist/sync/collaborationSyncPayload.d.ts +6 -1
  296. package/dist/sync/collaborationSyncPayload.js +19 -11
  297. package/dist/sync/collaborationSyncPayload.test.js +14 -1
  298. package/dist/sync/collaborationSyncState.d.ts +3 -3
  299. package/dist/sync/collaborationSyncState.js +19 -12
  300. package/dist/sync/contentSyncPayload.d.ts +5 -1
  301. package/dist/sync/contentSyncPayload.js +9 -0
  302. package/dist/sync/contentSyncPayload.test.js +39 -0
  303. package/dist/sync/contentSyncState.d.ts +9 -9
  304. package/dist/sync/contentSyncState.js +248 -107
  305. package/dist/sync/planningSyncPayload.js +5 -0
  306. package/dist/sync/planningSyncPayload.test.js +24 -0
  307. package/dist/sync/syncApplyHandlers.d.ts +11 -4
  308. package/dist/sync/syncApplyHandlers.js +115 -42
  309. package/dist/sync/syncApplyHandlers.test.js +251 -4
  310. package/dist/sync/syncFieldSemantics.d.ts +12 -0
  311. package/dist/sync/syncFieldSemantics.js +55 -0
  312. package/dist/sync/syncResourceAdapters.d.ts +46 -0
  313. package/dist/sync/syncResourceAdapters.js +79 -0
  314. package/dist/sync/syncService.d.ts +6 -0
  315. package/dist/sync/syncService.js +65 -1
  316. package/dist/sync/syncService.test.js +96 -3
  317. package/dist/sync/taskSyncChangeKey.d.ts +2 -0
  318. package/dist/sync/taskSyncChangeKey.js +143 -0
  319. package/dist/sync/taskSyncPayload.js +3 -8
  320. package/dist/sync/workspacePullFeed.d.ts +4 -0
  321. package/dist/sync/workspacePullFeed.js +132 -72
  322. package/dist/sync/workspacePullFeed.test.js +92 -0
  323. package/dist/sync/workspaceRepair.js +5 -2
  324. package/dist/sync/workspaceSyncModel.d.ts +73 -6
  325. package/dist/sync/workspaceSyncModel.js +342 -73
  326. package/dist/sync/workspaceSyncModel.test.js +559 -14
  327. package/dist/sync/workspaceSyncState.d.ts +17 -0
  328. package/dist/sync/workspaceSyncState.js +2 -1
  329. package/dist/sync/workspaceSyncSurface.js +3 -8
  330. package/dist/types.d.ts +50 -2
  331. package/dist/ui/assets/AgentsModule-2y82_3DO.js +1 -0
  332. package/dist/ui/assets/AnnotatedAttachmentWorkspace-BTLZZCiQ.js +3 -0
  333. package/dist/ui/assets/AnnotatedAttachmentWorkspace-BVKew-mH.css +1 -0
  334. package/dist/ui/assets/ContextAttachmentManager-D2epuNnG.js +3 -0
  335. package/dist/ui/assets/CourierPrime-Bold-BuLj_dpw.woff2 +0 -0
  336. package/dist/ui/assets/CourierPrime-BoldItalic-BrK2pUkZ.woff2 +0 -0
  337. package/dist/ui/assets/CourierPrime-Italic-DFUZK5Ey.woff2 +0 -0
  338. package/dist/ui/assets/CourierPrime-Regular-BsKphzVf.woff2 +0 -0
  339. package/dist/ui/assets/DocumentWorkspace-D4rJKXzd.css +1 -0
  340. package/dist/ui/assets/DocumentWorkspace-sVa-3Do6.js +252 -0
  341. package/dist/ui/assets/EntityActivityTimeline-DyqvvhuF.css +1 -0
  342. package/dist/ui/assets/EntityActivityTimeline-Zods27y_.js +1 -0
  343. package/dist/ui/assets/{InitiativesModule-Dhm7M8e7.js → InitiativesModule-D4XseTwW.js} +1 -1
  344. package/dist/ui/assets/Noir_medium-bxQwKGzB.woff2 +0 -0
  345. package/dist/ui/assets/Noir_regular-ojf2kxlG.woff2 +0 -0
  346. package/dist/ui/assets/PlansPage-D5AcbO0L.js +1 -0
  347. package/dist/ui/assets/PlansPage-Dvqsz5zc.css +1 -0
  348. package/dist/ui/assets/RussoOne-Regular-Cu_qq_qC.woff2 +0 -0
  349. package/dist/ui/assets/SpecialElite-Regular-Di6gSvAS.woff2 +0 -0
  350. package/dist/ui/assets/TaskContextUpload-uC5qx4Bv.js +1 -0
  351. package/dist/ui/assets/TaskSettings-CqvPAsTv.js +9 -0
  352. package/dist/ui/assets/{WorkflowsModule-BcS4afRn.js → WorkflowsModule-oOA9bcdK.js} +4 -4
  353. package/dist/ui/assets/documentReferences-DPZuTgHh.js +1 -0
  354. package/dist/ui/assets/index-607WPo_X.js +4 -0
  355. package/dist/ui/assets/index-CYyodXsg.css +1 -0
  356. package/dist/ui/assets/{vendor-icons-BSUaRwF8.js → vendor-icons-B32hGuF2.js} +1 -1
  357. package/dist/ui/fonts/CourierPrime-Bold.ttf +0 -0
  358. package/dist/ui/fonts/CourierPrime-Bold.woff2 +0 -0
  359. package/dist/ui/fonts/CourierPrime-BoldItalic.ttf +0 -0
  360. package/dist/ui/fonts/CourierPrime-BoldItalic.woff2 +0 -0
  361. package/dist/ui/fonts/CourierPrime-Italic.ttf +0 -0
  362. package/dist/ui/fonts/CourierPrime-Italic.woff2 +0 -0
  363. package/dist/ui/fonts/CourierPrime-Regular.ttf +0 -0
  364. package/dist/ui/fonts/CourierPrime-Regular.woff2 +0 -0
  365. package/dist/ui/fonts/Noir_medium.otf +0 -0
  366. package/dist/ui/fonts/Noir_medium.woff2 +0 -0
  367. package/dist/ui/fonts/Noir_regular.otf +0 -0
  368. package/dist/ui/fonts/Noir_regular.woff2 +0 -0
  369. package/dist/ui/fonts/RussoOne-Regular.woff2 +0 -0
  370. package/dist/ui/fonts/SpecialElite-Regular.ttf +0 -0
  371. package/dist/ui/fonts/SpecialElite-Regular.woff2 +0 -0
  372. package/dist/ui/index.html +3 -3
  373. package/dist/ui/product/agent manager.png +0 -0
  374. package/dist/ui/product/agent_manager_02.png +0 -0
  375. package/dist/utils/accountProfileSummaryCache.d.ts +5 -0
  376. package/dist/utils/aiProfileEvents.d.ts +7 -0
  377. package/dist/utils/aiProfileEvents.js +6 -0
  378. package/dist/utils/assignees.d.ts +8 -0
  379. package/dist/utils/assignees.js +10 -1
  380. package/dist/utils/assignees.test.d.ts +1 -0
  381. package/dist/utils/assignees.test.js +25 -0
  382. package/dist/utils/avatarDisplay.d.ts +1 -0
  383. package/dist/utils/avatarDisplay.js +15 -0
  384. package/dist/utils/avatarUpload.d.ts +27 -0
  385. package/dist/utils/avatarUpload.js +132 -0
  386. package/dist/utils/avatarUpload.test.d.ts +1 -0
  387. package/dist/utils/avatarUpload.test.js +40 -0
  388. package/dist/utils/bootstrapTrace.d.ts +7 -0
  389. package/dist/utils/bootstrapTrace.js +29 -0
  390. package/dist/utils/commercialLifecyclePresentation.js +3 -0
  391. package/dist/utils/contextAssetEvents.d.ts +2 -0
  392. package/dist/utils/contextFiles.d.ts +3 -1
  393. package/dist/utils/contextFiles.js +2 -1
  394. package/dist/utils/syncEventDetails.d.ts +3 -0
  395. package/dist/utils/syncEventDetails.js +64 -0
  396. package/dist/utils/syncEventDetails.test.d.ts +1 -0
  397. package/dist/utils/syncEventDetails.test.js +23 -0
  398. package/dist/utils/syncEventPresentation.d.ts +15 -0
  399. package/dist/utils/syncEventPresentation.js +129 -0
  400. package/dist/utils/syncEventPresentation.test.d.ts +1 -0
  401. package/dist/utils/syncEventPresentation.test.js +64 -0
  402. package/dist/utils/syncStatusPresentation.d.ts +72 -0
  403. package/dist/utils/syncStatusPresentation.js +217 -0
  404. package/dist/utils/syncStatusPresentation.test.d.ts +1 -0
  405. package/dist/utils/syncStatusPresentation.test.js +164 -0
  406. package/dist/utils/taskActivity.d.ts +9 -1
  407. package/dist/utils/taskActivity.js +290 -22
  408. package/dist/utils/taskActivity.test.js +141 -8
  409. package/dist/utils/taskSearch.d.ts +22 -0
  410. package/dist/utils/taskSearch.js +87 -0
  411. package/dist/utils/taskSearch.test.d.ts +1 -0
  412. package/dist/utils/taskSearch.test.js +69 -0
  413. package/dist/utils/taskUtils.js +10 -3
  414. package/dist/utils/taskUtils.test.d.ts +1 -0
  415. package/dist/utils/taskUtils.test.js +19 -0
  416. package/dist/utils/workspaceSyncPresentation.d.ts +4 -0
  417. package/dist/utils/workspaceSyncPresentation.js +68 -2
  418. package/dist/utils/workspaceSyncPresentation.test.js +36 -1
  419. package/package.json +3 -2
  420. package/scripts/export-sqlite-to-postgres.mjs +7 -9
  421. package/scripts/run-e2e-realtime.sh +17 -3
  422. package/scripts/run-smoke.sh +17 -5
  423. package/scripts/run-soak.sh +17 -5
  424. package/src/resources/templates/workflow-sources/workflowDocs.mjs +6 -6
  425. package/src/resources/templates/workflows/collaborate.yaml +1 -1
  426. package/src/resources/templates/workflows/evaluate.yaml +2 -2
  427. package/src/resources/templates/workflows/plan.yaml +1 -1
  428. package/src/resources/templates/workflows/review.yaml +2 -2
  429. package/dist/ui/assets/AgentsModule-N2MnQBZk.js +0 -1
  430. package/dist/ui/assets/AnnotatedAttachmentWorkspace-BG6P_GVW.js +0 -3
  431. package/dist/ui/assets/AnnotatedAttachmentWorkspace-BaS2VwIr.css +0 -1
  432. package/dist/ui/assets/DocumentWorkspace-B3nV_Gc5.css +0 -1
  433. package/dist/ui/assets/DocumentWorkspace-DRbDMwh8.js +0 -252
  434. package/dist/ui/assets/PlansPage-C2dd2n1X.css +0 -1
  435. package/dist/ui/assets/PlansPage-Cq0zXj3I.js +0 -1
  436. package/dist/ui/assets/RussoOne-Regular-C3BxZIj7.ttf +0 -0
  437. package/dist/ui/assets/TaskSettings-ln0aF7xc.js +0 -9
  438. package/dist/ui/assets/index-C2-OXZV7.css +0 -1
  439. package/dist/ui/assets/index-DcSI5F86.js +0 -6
  440. package/scripts/migrate-planning-model.ts +0 -233
@@ -3,10 +3,22 @@ import { WorkspaceAssetStore } from '../storage/workspaceAssetStore.js';
3
3
  import { type SyncEventInput } from './SyncReconciliationService.js';
4
4
  import { type FirstClassTaxonomyDisplayLabels, type WorkspaceTaxonomyState } from '../shared/taxonomyState.js';
5
5
  import { type AiProfileSurfaceType } from '../shared/aiProfileSurfaceType.js';
6
+ import { type AiProfileSeatScope } from '../shared/aiProfileSeatScope.js';
7
+ import type { PlanningBootstrapPayload } from '../types.js';
6
8
  import type { TaskActor } from '../shared/taskActor.js';
7
9
  export type { TaskActor } from '../shared/taskActor.js';
8
10
  export type { WorkspaceDeletedAssetRecord, WorkspaceDeleteSummary } from './types.js';
9
- import type { GlobalTaskforceSettings, UserGlobalSyncSettings, WorkspaceDeleteSummary } from './types.js';
11
+ import type { GlobalTaskforceSettings, UserGlobalSyncSettings, WorkspaceDeleteSummary, UserAuthProvider } from './types.js';
12
+ export interface PlanningBootstrapDiagnostics {
13
+ initiativeCount?: number;
14
+ workstreamCount?: number;
15
+ workstreamLinkedTaskCount?: number;
16
+ workstreamTaskSummaryCount?: number;
17
+ initiativeLoadMs?: number;
18
+ workstreamLoadMs?: number;
19
+ taskSummaryQueryMs?: number;
20
+ taskSummaryBuildMs?: number;
21
+ }
10
22
  import type { AnnotatedAttachmentAnnotation, AnnotatedAttachmentPayload, AnnotatedAttachmentSession, AnnotatedAttachmentSessionRecord } from '../annotatedAttachments/types.js';
11
23
  import type { DocumentReviewAnchor, DocumentReviewCommentSyncRecord, DocumentReviewSession, DocumentReviewSessionRecord, DocumentReviewSessionStatus } from '../documentReviews/types.js';
12
24
  import { type TaskforceTheme } from '../utils/theme.js';
@@ -32,10 +44,25 @@ export interface TaskEventDetails {
32
44
  changes?: Record<string, TaskEventChange>;
33
45
  [key: string]: unknown;
34
46
  }
47
+ export type ActivityEntityType = 'task' | 'initiative' | 'workstream';
48
+ interface BaseEntityEvent {
49
+ id: string;
50
+ workspaceId: string;
51
+ entityType: ActivityEntityType;
52
+ entityId: string;
53
+ action: string;
54
+ actor: string;
55
+ actorType: 'human' | 'ai' | 'system';
56
+ createdAt: string;
57
+ details?: TaskEventDetails;
58
+ actorProfile?: TaskActor | null;
59
+ }
35
60
  export interface TaskEvent {
36
61
  id: string;
37
62
  taskId: string;
38
63
  workspaceId: string;
64
+ entityType?: 'task';
65
+ entityId?: string;
39
66
  action: string;
40
67
  actor: string;
41
68
  actorType: 'human' | 'ai' | 'system';
@@ -43,6 +70,11 @@ export interface TaskEvent {
43
70
  details?: TaskEventDetails;
44
71
  actorProfile?: TaskActor | null;
45
72
  }
73
+ export interface PlanningEntityEvent extends BaseEntityEvent {
74
+ entityType: 'initiative' | 'workstream';
75
+ entityId: string;
76
+ }
77
+ export type EntityEvent = TaskEvent | PlanningEntityEvent;
46
78
  export interface CommentActivityItem {
47
79
  id: string;
48
80
  type: 'comment';
@@ -56,6 +88,13 @@ export interface AuditActivityItem {
56
88
  event: TaskEvent;
57
89
  }
58
90
  export type TaskActivityItem = CommentActivityItem | AuditActivityItem;
91
+ export interface EntityAuditActivityItem {
92
+ id: string;
93
+ type: 'event';
94
+ timestamp: string;
95
+ event: EntityEvent;
96
+ }
97
+ export type EntityActivityItem = CommentActivityItem | EntityAuditActivityItem;
59
98
  export type DeletedTaskSource = 'ui' | 'mcp' | 'sync' | 'workspace-delete' | 'system';
60
99
  export interface DeletedTaskDetails {
61
100
  reason?: string | null;
@@ -98,12 +137,7 @@ export interface TaskItem {
98
137
  comments?: Comment[];
99
138
  activity?: TaskActivityItem[];
100
139
  taskEvents?: TaskEvent[];
101
- attachments?: Array<string | {
102
- path: string;
103
- fsPath?: string;
104
- caption?: string;
105
- timestamp?: string;
106
- }>;
140
+ attachments?: AttachmentItem[];
107
141
  /** @deprecated Use status='done'. Safe to remove after v0.4.x migration gate. */
108
142
  completed?: boolean;
109
143
  /** @deprecated Use status='cancelled'. Safe to remove after v0.4.x migration gate. */
@@ -122,6 +156,18 @@ export interface TaskItem {
122
156
  workstreamId?: string | null;
123
157
  checklistItems?: ChecklistItem[];
124
158
  }
159
+ export type AttachmentItem = string | {
160
+ path: string;
161
+ fsPath?: string;
162
+ caption?: string;
163
+ displayName?: string;
164
+ originalFilename?: string;
165
+ timestamp?: string;
166
+ assetId?: string | null;
167
+ referenceNumber?: number | null;
168
+ referenceLabel?: string | null;
169
+ taskId?: string | null;
170
+ };
125
171
  export interface InitiativeItem {
126
172
  id: string;
127
173
  referenceNumber?: number | null;
@@ -130,12 +176,9 @@ export interface InitiativeItem {
130
176
  description: string | null;
131
177
  ownerId?: string | null;
132
178
  comments?: Comment[];
133
- attachments?: Array<string | {
134
- path: string;
135
- fsPath?: string;
136
- caption?: string;
137
- timestamp?: string;
138
- }>;
179
+ activity?: EntityActivityItem[];
180
+ entityEvents?: PlanningEntityEvent[];
181
+ attachments?: AttachmentItem[];
139
182
  createdAt: string;
140
183
  updatedAt?: string;
141
184
  order?: number | null;
@@ -150,12 +193,9 @@ export interface WorkstreamItem {
150
193
  description: string | null;
151
194
  ownerId?: string | null;
152
195
  comments?: Comment[];
153
- attachments?: Array<string | {
154
- path: string;
155
- fsPath?: string;
156
- caption?: string;
157
- timestamp?: string;
158
- }>;
196
+ activity?: EntityActivityItem[];
197
+ entityEvents?: PlanningEntityEvent[];
198
+ attachments?: AttachmentItem[];
159
199
  createdAt: string;
160
200
  updatedAt?: string;
161
201
  order?: number | null;
@@ -350,6 +390,8 @@ interface UserAccessRecord {
350
390
  role: AccessRole;
351
391
  permissionMode: PermissionMode;
352
392
  disabled: boolean;
393
+ accountDisabled?: boolean;
394
+ workspaceDisabled?: boolean;
353
395
  betaAccess: boolean;
354
396
  }
355
397
  interface UserIdentityRecord {
@@ -374,10 +416,26 @@ interface UserAvatarUploadDraftRecord {
374
416
  createdAt: string;
375
417
  updatedAt: string;
376
418
  }
419
+ interface TaskAttachmentUploadDraftRecord {
420
+ draftId: string;
421
+ workspaceId: string;
422
+ taskId: string;
423
+ actorRef: string;
424
+ storageKey: string;
425
+ mimeType: string;
426
+ originalFilename: string;
427
+ sizeBytes: number;
428
+ storageProvider: 'local' | 'r2' | 'external';
429
+ consumedAt?: string | null;
430
+ discardedAt?: string | null;
431
+ createdAt: string;
432
+ updatedAt: string;
433
+ }
377
434
  interface WorkspaceUserRecord {
378
435
  userId: string;
379
436
  email: string;
380
437
  displayName?: string | null;
438
+ avatarUrl?: string | null;
381
439
  role: AccessRole;
382
440
  permissionMode: PermissionMode;
383
441
  betaAccess: boolean;
@@ -395,12 +453,22 @@ export interface AiProfileRecord {
395
453
  username: string;
396
454
  icon: string;
397
455
  color: string;
456
+ avatarUrl?: string | null;
457
+ avatarSourceUrl?: string | null;
458
+ avatarRevision?: number;
459
+ avatarUpdatedAt?: string | null;
398
460
  description?: string | null;
399
461
  role?: string | null;
400
462
  provider?: string | null;
401
463
  model?: string | null;
402
464
  surfaceType?: AiProfileSurfaceType | null;
465
+ seatScope?: AiProfileSeatScope | null;
403
466
  providerMetadata?: Record<string, unknown> | null;
467
+ archivedAt?: string | null;
468
+ archivedBy?: string | null;
469
+ archivedReason?: string | null;
470
+ mergedIntoProfileId?: string | null;
471
+ rosterStateUpdatedAt?: string | null;
404
472
  createdAt: string;
405
473
  updatedAt: string;
406
474
  lastActiveAt?: string | null;
@@ -418,6 +486,9 @@ export interface ResolveAiProfileInput {
418
486
  profileToken?: string | null;
419
487
  providerMetadata?: Record<string, unknown> | null;
420
488
  }
489
+ export interface ResolveAiProfileOptions {
490
+ trustedSeatScope?: AiProfileSeatScope | null;
491
+ }
421
492
  export interface ResolveAiProfileResult {
422
493
  created: boolean;
423
494
  profile: AiProfileRecord;
@@ -563,6 +634,7 @@ export interface PlanVersionSnapshot {
563
634
  export interface PlanCatalogSnapshot {
564
635
  planId: string;
565
636
  displayName: string;
637
+ description: string | null;
566
638
  status: 'active' | 'archived';
567
639
  createdAt: string;
568
640
  updatedAt: string;
@@ -594,6 +666,7 @@ interface PasswordAuthResult {
594
666
  userId: string;
595
667
  workspaceId: string;
596
668
  role: AccessRole;
669
+ identityId?: string;
597
670
  };
598
671
  code?: 'INVALID_CREDENTIALS' | 'EMAIL_NOT_VERIFIED';
599
672
  }
@@ -686,6 +759,9 @@ export interface McpOAuthAccessTokenAuthResult {
686
759
  provider: McpOAuthProvider;
687
760
  scopes: McpAccessTokenScope[];
688
761
  status: McpOAuthGrantStatus;
762
+ aiProfileId?: string | null;
763
+ aiProfileToken?: string | null;
764
+ aiProfileName?: string | null;
689
765
  }
690
766
  /**
691
767
  * Subset of TaskforceCore methods required by the sync route.
@@ -733,7 +809,9 @@ export interface TaskforceSyncCapable {
733
809
  };
734
810
  listInitiatives(workspaceId?: string): InitiativeItem[];
735
811
  listWorkstreams(workspaceId?: string): WorkstreamItem[];
736
- listAiProfiles(workspaceId: string): AiProfileRecord[];
812
+ listAiProfiles(workspaceId: string, options?: {
813
+ includeArchived?: boolean;
814
+ }): AiProfileRecord[];
737
815
  listWorkspaceUsers(workspaceId: string): WorkspaceUserRecord[];
738
816
  listDocumentReviewSessionsForSync(input: {
739
817
  workspaceId?: string | null;
@@ -750,6 +828,21 @@ export interface TaskforceSyncCapable {
750
828
  listTaskEventsForSync(input: {
751
829
  workspaceId?: string | null;
752
830
  }): TaskEvent[];
831
+ getTaskEventForSync(input: {
832
+ workspaceId?: string | null;
833
+ taskId: string;
834
+ eventId: string;
835
+ }): TaskEvent | null;
836
+ taskExistsForSync(id: string, workspaceId?: string | null): boolean;
837
+ listEntityEventsForSync(input: {
838
+ workspaceId?: string | null;
839
+ }): EntityEvent[];
840
+ getEntityEventForSync(input: {
841
+ workspaceId?: string | null;
842
+ eventId: string;
843
+ }): EntityEvent | null;
844
+ initiativeExistsForSync(id: string, workspaceId?: string | null): boolean;
845
+ workstreamExistsForSync(id: string, workspaceId?: string | null): boolean;
753
846
  upsertAiProfileForSync(profile: AiProfileRecord): AiProfileRecord;
754
847
  replaceWorkspaceUsersForSync(input: {
755
848
  workspaceId: string;
@@ -761,6 +854,7 @@ export interface TaskforceSyncCapable {
761
854
  upsertDocumentReviewCommentForSync(comment: DocumentReviewCommentSyncRecord): DocumentReviewCommentSyncRecord;
762
855
  upsertAnnotatedAttachmentSessionForSync(session: AnnotatedAttachmentSessionRecord): AnnotatedAttachmentSessionRecord;
763
856
  upsertTaskEventForSync(event: TaskEvent): TaskEvent;
857
+ upsertEntityEventForSync(event: EntityEvent): EntityEvent;
764
858
  deleteDocumentReviewSessionForSync(input: {
765
859
  workspaceId?: string | null;
766
860
  sessionId: string;
@@ -781,6 +875,23 @@ export interface TaskforceSyncCapable {
781
875
  keepId: string;
782
876
  mergeId: string;
783
877
  }): AiProfileRecord;
878
+ archiveAiProfile(input: {
879
+ workspaceId: string;
880
+ profileId: string;
881
+ archivedBy?: string | null;
882
+ reason?: string | null;
883
+ }): AiProfileRecord;
884
+ updateAiProfileAvatar(input: {
885
+ workspaceId: string;
886
+ profileId: string;
887
+ avatarUrl?: string | null;
888
+ avatarSourceUrl?: string | null;
889
+ }): AiProfileRecord;
890
+ updateAiProfileSurfaceType(input: {
891
+ workspaceId: string;
892
+ profileId: string;
893
+ surfaceType?: AiProfileSurfaceType | null;
894
+ }): AiProfileRecord;
784
895
  resolveWorkspaceActor(workspaceId: string, actorRef: unknown): TaskActor | null;
785
896
  }
786
897
  export declare class TaskforceCore implements TaskforceSyncCapable {
@@ -798,6 +909,7 @@ export declare class TaskforceCore implements TaskforceSyncCapable {
798
909
  private db;
799
910
  private globalSettingsDb;
800
911
  private authTokenService;
912
+ private identityService;
801
913
  private mcpTokenService;
802
914
  private planEntitlementService;
803
915
  private realtimeMutationListeners;
@@ -813,6 +925,7 @@ export declare class TaskforceCore implements TaskforceSyncCapable {
813
925
  private isGenericAiActorReference;
814
926
  private isKnownAiModelName;
815
927
  private isHumanActorReference;
928
+ private isStableActorReference;
816
929
  private normalizeAiProfileName;
817
930
  private normalizeAiProfileUsername;
818
931
  private normalizeAiProfileIcon;
@@ -823,6 +936,9 @@ export declare class TaskforceCore implements TaskforceSyncCapable {
823
936
  private workspaceUserToActor;
824
937
  private aiProfileRowToRecord;
825
938
  private aiProfileToActor;
939
+ private resolveCanonicalAiProfileId;
940
+ private findCanonicalAiProfileIdsByAlias;
941
+ private resolveUniqueAiProfileActorByAlias;
826
942
  private canonicalizeActorReference;
827
943
  private normalizeCreatedBy;
828
944
  private normalizeCommentAuthor;
@@ -831,9 +947,13 @@ export declare class TaskforceCore implements TaskforceSyncCapable {
831
947
  private normalizePlanningAttachments;
832
948
  private replaceTaskComments;
833
949
  private normalizeTaskEventActor;
950
+ private listEntityEventsInternal;
834
951
  private listTaskEventsInternal;
952
+ private buildEntityActivity;
835
953
  private buildTaskActivity;
954
+ private addEntityEvent;
836
955
  private addTaskEvent;
956
+ private replaceEntityEvents;
837
957
  private replaceTaskEvents;
838
958
  private mapDeletedTaskRow;
839
959
  private pruneDeletedTasks;
@@ -874,6 +994,9 @@ export declare class TaskforceCore implements TaskforceSyncCapable {
874
994
  private initiativeExists;
875
995
  private workstreamExists;
876
996
  private valueEqualsForBulkUpdate;
997
+ private buildPlanningEntityEventChanges;
998
+ private getPlanningEntityEventAction;
999
+ private addWorkstreamTaskMembershipEvents;
877
1000
  private assertWorkstreamLinkAllowed;
878
1001
  private assertInitiativeLinkAllowed;
879
1002
  constructor(config: TaskforceConfig);
@@ -935,6 +1058,7 @@ export declare class TaskforceCore implements TaskforceSyncCapable {
935
1058
  };
936
1059
  private ensureDirectories;
937
1060
  private migrateLegacyGlobalSettingsDbIfNeeded;
1061
+ private supportsWorkspaceAssetLinkTargetType;
938
1062
  private initializeSchema;
939
1063
  private performMigrationIfNeeded;
940
1064
  private backfillMcpAuditLogMetadataColumns;
@@ -942,6 +1066,7 @@ export declare class TaskforceCore implements TaskforceSyncCapable {
942
1066
  private migrateUserBetaAccessBackfillIfNeeded;
943
1067
  private migrateDuplicateAiProfilesIfNeeded;
944
1068
  private migrateLegacyActorReferencesIfNeeded;
1069
+ private migrateLegacyCommentActorReferencesIfNeeded;
945
1070
  private getWorkspaceOwnerUserId;
946
1071
  getWorkspacePlanMode(workspaceId: string): 'personal' | 'team';
947
1072
  setWorkspacePlanMode(workspaceId: string, mode: 'personal' | 'team', source?: string): 'personal' | 'team';
@@ -992,9 +1117,10 @@ export declare class TaskforceCore implements TaskforceSyncCapable {
992
1117
  getEffectiveTheme(workspaceId?: string, userId?: string): TaskforceTheme;
993
1118
  hasProjectJsonBackupOverride(workspaceId?: string, userId?: string): boolean;
994
1119
  getOnboardingPolicy(): import("./types.js").OnboardingPolicy;
1120
+ listOnboardingPlanOptions(): import("./types.js").OnboardingPlanOption[];
995
1121
  validateOnboardingPolicy(input?: {
996
1122
  mode?: 'require_plan_selection' | 'auto_grant_free' | 'auto_start_trial';
997
- planVersionId?: string | null;
1123
+ planId?: string | null;
998
1124
  }): import("./types.js").OnboardingPolicyValidationResult;
999
1125
  updateGlobalSettings(settings: GlobalTaskforceSettings): void;
1000
1126
  private sanitizeUserGlobalSyncSettings;
@@ -1020,6 +1146,7 @@ export declare class TaskforceCore implements TaskforceSyncCapable {
1020
1146
  getJsonBackupEnabled(workspaceId?: string, userId?: string): boolean;
1021
1147
  private listCanonicalTaskAttachments;
1022
1148
  private syncCanonicalTaskAttachmentLinks;
1149
+ private syncCanonicalPlanningAttachmentLinks;
1023
1150
  private rowToTask;
1024
1151
  private rowToInitiative;
1025
1152
  private rowToWorkstream;
@@ -1031,16 +1158,44 @@ export declare class TaskforceCore implements TaskforceSyncCapable {
1031
1158
  resolveTaskIdentifier(value: string, workspaceId?: string): TaskItem | null;
1032
1159
  getInitiative(id: string, workspaceId?: string): InitiativeItem | null;
1033
1160
  listInitiatives(workspaceId?: string): InitiativeItem[];
1034
- createInitiative(input: Partial<InitiativeItem>, workspaceId?: string): InitiativeItem;
1035
- updateInitiative(id: string, patch: Partial<InitiativeItem>, workspaceId?: string): InitiativeItem;
1036
- archiveInitiative(id: string, workspaceId?: string): InitiativeItem;
1037
- unarchiveInitiative(id: string, workspaceId?: string): InitiativeItem;
1161
+ private isTransientPlanningHydrationError;
1162
+ private getInitiativeForWriteResult;
1163
+ private getWorkstreamForWriteResult;
1164
+ createInitiative(input: Partial<InitiativeItem>, workspaceId?: string, options?: {
1165
+ actorRef?: string;
1166
+ skipEntityEvents?: boolean;
1167
+ }): InitiativeItem;
1168
+ updateInitiative(id: string, patch: Partial<InitiativeItem>, workspaceId?: string, options?: {
1169
+ actorRef?: string;
1170
+ skipEntityEvents?: boolean;
1171
+ }): InitiativeItem;
1172
+ archiveInitiative(id: string, workspaceId?: string, options?: {
1173
+ actorRef?: string;
1174
+ skipEntityEvents?: boolean;
1175
+ }): InitiativeItem;
1176
+ unarchiveInitiative(id: string, workspaceId?: string, options?: {
1177
+ actorRef?: string;
1178
+ skipEntityEvents?: boolean;
1179
+ }): InitiativeItem;
1038
1180
  getWorkstream(id: string, workspaceId?: string): WorkstreamItem | null;
1039
1181
  listWorkstreams(workspaceId?: string): WorkstreamItem[];
1040
- createWorkstream(input: Partial<WorkstreamItem>, workspaceId?: string): WorkstreamItem;
1041
- updateWorkstream(id: string, patch: Partial<WorkstreamItem>, workspaceId?: string): WorkstreamItem;
1042
- archiveWorkstream(id: string, workspaceId?: string): WorkstreamItem;
1043
- unarchiveWorkstream(id: string, workspaceId?: string): WorkstreamItem;
1182
+ listPlanningBootstrap(workspaceId?: string, diagnostics?: PlanningBootstrapDiagnostics): PlanningBootstrapPayload;
1183
+ createWorkstream(input: Partial<WorkstreamItem>, workspaceId?: string, options?: {
1184
+ actorRef?: string;
1185
+ skipEntityEvents?: boolean;
1186
+ }): WorkstreamItem;
1187
+ updateWorkstream(id: string, patch: Partial<WorkstreamItem>, workspaceId?: string, options?: {
1188
+ actorRef?: string;
1189
+ skipEntityEvents?: boolean;
1190
+ }): WorkstreamItem;
1191
+ archiveWorkstream(id: string, workspaceId?: string, options?: {
1192
+ actorRef?: string;
1193
+ skipEntityEvents?: boolean;
1194
+ }): WorkstreamItem;
1195
+ unarchiveWorkstream(id: string, workspaceId?: string, options?: {
1196
+ actorRef?: string;
1197
+ skipEntityEvents?: boolean;
1198
+ }): WorkstreamItem;
1044
1199
  upsertInitiativeForSync(initiative: InitiativeItem, workspaceId?: string | null): InitiativeItem;
1045
1200
  upsertWorkstreamForSync(workstream: WorkstreamItem, workspaceId?: string | null): WorkstreamItem;
1046
1201
  listChecklistItems(taskId: string, workspaceId?: string): ChecklistItem[];
@@ -1112,6 +1267,24 @@ export declare class TaskforceCore implements TaskforceSyncCapable {
1112
1267
  private getSyncReconciliationServiceDeps;
1113
1268
  private getWorkspaceLifecycleServiceDeps;
1114
1269
  listTasks(workspaceId?: string): TaskFile;
1270
+ /**
1271
+ * Filter-pushdown listing used by read-only surfaces that don't need the
1272
+ * full task graph (MCP list_tasks, CLI summaries). Avoids the per-task
1273
+ * comments/events/attachments/checklist subqueries and actor resolution
1274
+ * that rowToTask performs, and applies filters + sort + limit at the SQL
1275
+ * layer so hot polls don't load the entire workspace.
1276
+ */
1277
+ listTasksSlim(workspaceId: string | undefined, filters?: {
1278
+ category?: string;
1279
+ status?: TaskStatus;
1280
+ openOnly?: boolean;
1281
+ assignee?: string;
1282
+ priority?: number;
1283
+ type?: string;
1284
+ sort?: 'created' | 'priority' | 'updated';
1285
+ order?: 'asc' | 'desc';
1286
+ limit?: number;
1287
+ }): Array<Record<string, unknown>>;
1115
1288
  getDataVersion(): number;
1116
1289
  getDatabaseProvider(): DatabaseProvider;
1117
1290
  isDatabaseHealthy(): boolean;
@@ -1165,11 +1338,33 @@ export declare class TaskforceCore implements TaskforceSyncCapable {
1165
1338
  markUserAvatarUploadDraftConsumed(userId: string, draftId: string): UserAvatarUploadDraftRecord | null;
1166
1339
  discardUserAvatarUploadDraft(userId: string, draftId: string): UserAvatarUploadDraftRecord | null;
1167
1340
  cleanupStaleUserAvatarUploadDrafts(userId: string, olderThanIso: string): UserAvatarUploadDraftRecord[];
1341
+ createTaskAttachmentUploadDraft(input: {
1342
+ draftId: string;
1343
+ workspaceId: string;
1344
+ taskId: string;
1345
+ actorRef: string;
1346
+ storageKey: string;
1347
+ mimeType: string;
1348
+ originalFilename: string;
1349
+ sizeBytes: number;
1350
+ storageProvider?: 'local' | 'r2' | 'external';
1351
+ }): TaskAttachmentUploadDraftRecord;
1352
+ getTaskAttachmentUploadDraft(draftId: string): TaskAttachmentUploadDraftRecord | null;
1353
+ markTaskAttachmentUploadDraftConsumed(draftId: string): TaskAttachmentUploadDraftRecord | null;
1354
+ discardTaskAttachmentUploadDraft(draftId: string): TaskAttachmentUploadDraftRecord | null;
1168
1355
  getSystemRole(userId: string): SystemRole;
1169
1356
  getUserBetaAccess(userId: string): boolean;
1170
1357
  countSystemAdmins(): number;
1171
1358
  hasAnySystemAdmin(): boolean;
1172
- listSystemUsers(): SystemUserRecord[];
1359
+ countSystemUsers(input?: {
1360
+ query?: string | null;
1361
+ }): number;
1362
+ listSystemUsers(input?: {
1363
+ query?: string | null;
1364
+ sort?: 'newest' | 'oldest' | null;
1365
+ limit?: number | null;
1366
+ offset?: number | null;
1367
+ }): SystemUserRecord[];
1173
1368
  setSystemRole(userId: string, role: SystemRole): boolean;
1174
1369
  setUserDisabledGlobal(userId: string, disabled: boolean): boolean;
1175
1370
  setUserBetaAccessGlobal(userId: string, enabled: boolean): boolean;
@@ -1185,10 +1380,17 @@ export declare class TaskforceCore implements TaskforceSyncCapable {
1185
1380
  users: WorkspaceUserRecord[];
1186
1381
  pruneMissing?: boolean;
1187
1382
  }): WorkspaceUserRecord[];
1188
- listAiProfiles(workspaceId: string): AiProfileRecord[];
1383
+ listAiProfiles(workspaceId: string, options?: {
1384
+ includeArchived?: boolean;
1385
+ diagnostics?: {
1386
+ metadataBackfillCount?: number;
1387
+ };
1388
+ }): AiProfileRecord[];
1189
1389
  getAiProfileByToken(input: {
1190
1390
  workspaceId: string;
1191
1391
  profileToken: string;
1392
+ includeArchived?: boolean;
1393
+ seatScope?: AiProfileSeatScope | null;
1192
1394
  }): AiProfileRecord | null;
1193
1395
  upsertAiProfileForSync(profile: AiProfileRecord): AiProfileRecord;
1194
1396
  mergeAiProfiles(input: {
@@ -1196,7 +1398,24 @@ export declare class TaskforceCore implements TaskforceSyncCapable {
1196
1398
  keepId: string;
1197
1399
  mergeId: string;
1198
1400
  }): AiProfileRecord;
1199
- resolveAiProfile(input: ResolveAiProfileInput): ResolveAiProfileResult;
1401
+ archiveAiProfile(input: {
1402
+ workspaceId: string;
1403
+ profileId: string;
1404
+ archivedBy?: string | null;
1405
+ reason?: string | null;
1406
+ }): AiProfileRecord;
1407
+ updateAiProfileAvatar(input: {
1408
+ workspaceId: string;
1409
+ profileId: string;
1410
+ avatarUrl?: string | null;
1411
+ avatarSourceUrl?: string | null;
1412
+ }): AiProfileRecord;
1413
+ updateAiProfileSurfaceType(input: {
1414
+ workspaceId: string;
1415
+ profileId: string;
1416
+ surfaceType?: AiProfileSurfaceType | null;
1417
+ }): AiProfileRecord;
1418
+ resolveAiProfile(input: ResolveAiProfileInput, options?: ResolveAiProfileOptions): ResolveAiProfileResult;
1200
1419
  listAnnotatedAttachmentSessions(input: {
1201
1420
  workspaceId?: string | null;
1202
1421
  taskId?: string | null;
@@ -1271,6 +1490,7 @@ export declare class TaskforceCore implements TaskforceSyncCapable {
1271
1490
  upsertDocumentReviewCommentForSync(comment: DocumentReviewCommentSyncRecord): DocumentReviewCommentSyncRecord;
1272
1491
  upsertAnnotatedAttachmentSessionForSync(session: AnnotatedAttachmentSessionRecord): AnnotatedAttachmentSessionRecord;
1273
1492
  upsertTaskEventForSync(event: TaskEvent): TaskEvent;
1493
+ upsertEntityEventForSync(event: EntityEvent): EntityEvent;
1274
1494
  deleteDocumentReviewSessionForSync(input: {
1275
1495
  workspaceId?: string | null;
1276
1496
  sessionId: string;
@@ -1385,6 +1605,7 @@ export declare class TaskforceCore implements TaskforceSyncCapable {
1385
1605
  upsertPlanCatalog(input: {
1386
1606
  planId: string;
1387
1607
  displayName: string;
1608
+ description?: string | null;
1388
1609
  status?: 'active' | 'archived';
1389
1610
  initialMode?: 'personal' | 'team';
1390
1611
  initialSeatLimit?: number | null;
@@ -1392,10 +1613,17 @@ export declare class TaskforceCore implements TaskforceSyncCapable {
1392
1613
  }): {
1393
1614
  planId: string;
1394
1615
  displayName: string;
1616
+ description: string | null;
1395
1617
  status: "active" | "archived";
1396
1618
  };
1397
1619
  listPlanCatalog(): import("./types.js").PlanCatalogSnapshot[];
1398
1620
  listPlanFeatureCatalog(): import("./types.js").PlanFeatureCatalogItem[];
1621
+ updatePlanFeatureCatalogMarketingCopy(input: {
1622
+ featureKey: string;
1623
+ publicLabel?: string | null;
1624
+ publicDescription?: string | null;
1625
+ publicDisplayOrder?: number | null;
1626
+ }): import("./types.js").PlanFeatureCatalogItem;
1399
1627
  listPlanVersions(planId: string): import("./types.js").PlanVersionSnapshot[];
1400
1628
  getPlanVersionFeatures(planId: string, versionId: string): import("./types.js").PlanVersionSnapshot;
1401
1629
  searchAccountsByEmail(query: string, limit?: number): {
@@ -1516,6 +1744,99 @@ export declare class TaskforceCore implements TaskforceSyncCapable {
1516
1744
  checkoutPending: boolean;
1517
1745
  commercialState: EntitlementState;
1518
1746
  };
1747
+ /**
1748
+ * Creates an OAuth state record and returns the state token + PKCE materials.
1749
+ * Delegates to AuthIdentityService.createOAuthState.
1750
+ */
1751
+ createOAuthLoginState(input: {
1752
+ provider: string;
1753
+ flowMode: string;
1754
+ userId?: string | null;
1755
+ inviteToken?: string | null;
1756
+ returnTo?: string | null;
1757
+ createdIp?: string | null;
1758
+ }): {
1759
+ state: string;
1760
+ codeVerifier: string;
1761
+ codeChallenge: string;
1762
+ nonce: string;
1763
+ };
1764
+ /**
1765
+ * Atomically consumes an OAuth state token and returns the row.
1766
+ * Returns null if invalid, expired, or already consumed.
1767
+ */
1768
+ consumeOAuthLoginState(state: string): import('./AuthIdentityService.js').OAuthStateRecord | null;
1769
+ /**
1770
+ * Finds the Taskforce user associated with a provider identity.
1771
+ * Returns { userId, identityId } or null if not yet linked.
1772
+ */
1773
+ findUserByOAuthProvider(provider: UserAuthProvider, providerSubject: string): {
1774
+ userId: string;
1775
+ identityId: string;
1776
+ } | null;
1777
+ /**
1778
+ * Links an OAuth provider identity to an existing user.
1779
+ * Throws IDENTITY_ALREADY_EXISTS if the user already has an identity for this provider.
1780
+ */
1781
+ linkOAuthProviderToUser(input: {
1782
+ userId: string;
1783
+ provider: UserAuthProvider;
1784
+ providerSubject: string;
1785
+ providerEmail?: string | null;
1786
+ providerEmailVerified?: boolean | null;
1787
+ displayNameSnapshot?: string | null;
1788
+ avatarUrlSnapshot?: string | null;
1789
+ }): string;
1790
+ /**
1791
+ * Lists all active login identities for a user.
1792
+ * Used by the Account Hub "Login methods" section.
1793
+ */
1794
+ listLoginMethodsForUser(userId: string): import('./types.js').UserAuthIdentity[];
1795
+ /**
1796
+ * Unlinks a provider identity from a user.
1797
+ * Throws LAST_IDENTITY_REQUIRED if it would be the last active method.
1798
+ */
1799
+ unlinkLoginMethod(userId: string, provider: UserAuthProvider): boolean;
1800
+ /**
1801
+ * Adds or replaces a password identity for a user that signed up via OAuth.
1802
+ * Uses upsert semantics (safe to call on accounts that already have a password).
1803
+ */
1804
+ addPasswordToAccount(userId: string, password: string): string;
1805
+ /**
1806
+ * Registers a new user account via an OAuth provider (no password).
1807
+ *
1808
+ * Creates the user row, applies commercial onboarding, and links the
1809
+ * provider identity — all in a single transaction.
1810
+ *
1811
+ * Returns the same shape as `registerPasswordUser` so callers can use
1812
+ * the same session-issuance path.
1813
+ */
1814
+ registerOAuthUser(input: {
1815
+ email: string | null;
1816
+ emailVerified?: boolean;
1817
+ provider: UserAuthProvider;
1818
+ providerSubject: string;
1819
+ displayName?: string | null;
1820
+ avatarUrl?: string | null;
1821
+ planVersionId?: string;
1822
+ betaAccess?: boolean;
1823
+ }): {
1824
+ userId: string;
1825
+ workspaceId: string | null;
1826
+ role: AccessRole;
1827
+ identityId: string;
1828
+ planSelectionRequired: boolean;
1829
+ checkoutPending: boolean;
1830
+ commercialState: EntitlementState;
1831
+ };
1832
+ /**
1833
+ * Looks up a user by email address (exact, case-insensitive).
1834
+ * Returns { userId, email } or null.
1835
+ */
1836
+ findUserByEmail(email: string): {
1837
+ userId: string;
1838
+ email: string;
1839
+ } | null;
1519
1840
  private createOneTimeAuthToken;
1520
1841
  private consumeOneTimeAuthToken;
1521
1842
  inspectOneTimeAuthToken(token: string, purpose: AuthTokenPurpose): AuthTokenInspection;
@@ -1540,6 +1861,11 @@ export declare class TaskforceCore implements TaskforceSyncCapable {
1540
1861
  workspaceId: string;
1541
1862
  tokenId: string;
1542
1863
  }): McpAccessTokenRecord;
1864
+ deleteMcpAccessToken(input: {
1865
+ actorUserId: string;
1866
+ workspaceId: string;
1867
+ tokenId: string;
1868
+ }): boolean;
1543
1869
  regenerateMcpAccessToken(input: {
1544
1870
  actorUserId: string;
1545
1871
  workspaceId: string;
@@ -1591,6 +1917,13 @@ export declare class TaskforceCore implements TaskforceSyncCapable {
1591
1917
  grantId: string;
1592
1918
  }): McpOAuthConnectorGrantRecord;
1593
1919
  authenticateMcpOAuthAccessToken(token: string, workspaceId?: string): McpOAuthAccessTokenAuthResult | null;
1920
+ bindMcpOAuthConnectorGrantAiProfile(input: {
1921
+ grantId: string;
1922
+ workspaceId: string;
1923
+ profileId: string;
1924
+ profileToken: string;
1925
+ profileName: string;
1926
+ }): boolean;
1594
1927
  recordMcpOAuthConnectorGrantUsage(input: {
1595
1928
  grantId: string;
1596
1929
  workspaceId: string;
@@ -1620,15 +1953,33 @@ export declare class TaskforceCore implements TaskforceSyncCapable {
1620
1953
  revokeInviteAcceptanceForUser(userId: string): {
1621
1954
  revoked: number;
1622
1955
  };
1623
- inspectInviteAcceptance(token: string): {
1624
- state: 'valid' | 'expired' | 'used' | 'missing' | 'revoked';
1625
- email?: string;
1626
- userId?: string;
1627
- workspaceId?: string;
1628
- inviteeKind?: 'existing_user' | 'new_user';
1629
- passwordRequired?: boolean;
1630
- };
1956
+ inspectInviteAcceptance(token: string): import('./types.js').InviteAcceptanceDetails;
1631
1957
  private completeInviteWorkspaceActivation;
1958
+ /**
1959
+ * Claims an invite by linking an OAuth provider identity to the invited user.
1960
+ *
1961
+ * Used when an invited user with `inviteeState: 'pending_setup'` completes an
1962
+ * OAuth flow with `flow_mode: 'invite_claim'`. The invite token must still be
1963
+ * valid and the user must have zero active identities (pending setup).
1964
+ *
1965
+ * Returns the same shape as `acceptInviteWithToken` so callers can issue a
1966
+ * session cookie on the same path.
1967
+ */
1968
+ claimInviteWithOAuthProvider(input: {
1969
+ token: string;
1970
+ provider: UserAuthProvider;
1971
+ providerSubject: string;
1972
+ providerEmail?: string | null;
1973
+ providerEmailVerified?: boolean | null;
1974
+ displayNameSnapshot?: string | null;
1975
+ avatarUrlSnapshot?: string | null;
1976
+ }): {
1977
+ userId: string;
1978
+ email: string;
1979
+ workspaceId: string;
1980
+ role: AccessRole;
1981
+ identityId: string;
1982
+ };
1632
1983
  acceptInviteWithToken(input: {
1633
1984
  token: string;
1634
1985
  password: string;
@@ -1637,6 +1988,7 @@ export declare class TaskforceCore implements TaskforceSyncCapable {
1637
1988
  email: string;
1638
1989
  workspaceId: string;
1639
1990
  role: AccessRole;
1991
+ identityId: string;
1640
1992
  };
1641
1993
  joinInviteWithAuthenticatedUser(input: {
1642
1994
  token: string;
@@ -1671,9 +2023,32 @@ export declare class TaskforceCore implements TaskforceSyncCapable {
1671
2023
  updateWorkspaceUserRole(userId: string, workspaceId: string, role: AccessRole): boolean;
1672
2024
  getTask(id: string, workspaceId?: string): TaskItem | null;
1673
2025
  listTaskEvents(taskId: string, workspaceId?: string): TaskEvent[];
2026
+ taskExistsForSync(id: string, workspaceId?: string | null): boolean;
2027
+ initiativeExistsForSync(id: string, workspaceId?: string | null): boolean;
2028
+ workstreamExistsForSync(id: string, workspaceId?: string | null): boolean;
2029
+ recordTaskEvent(input: {
2030
+ taskId: string;
2031
+ workspaceId?: string | null;
2032
+ action: string;
2033
+ actor?: unknown;
2034
+ createdAt?: string;
2035
+ details?: TaskEventDetails;
2036
+ }): void;
1674
2037
  listTaskEventsForSync(input: {
1675
2038
  workspaceId?: string | null;
1676
2039
  }): TaskEvent[];
2040
+ getTaskEventForSync(input: {
2041
+ workspaceId?: string | null;
2042
+ taskId: string;
2043
+ eventId: string;
2044
+ }): TaskEvent | null;
2045
+ listEntityEventsForSync(input: {
2046
+ workspaceId?: string | null;
2047
+ }): EntityEvent[];
2048
+ getEntityEventForSync(input: {
2049
+ workspaceId?: string | null;
2050
+ eventId: string;
2051
+ }): EntityEvent | null;
1677
2052
  getScheduleBoard(weekKey: string, showWeekends?: boolean, workspaceId?: string): ScheduleBoardResult;
1678
2053
  updateTaskSchedule(id: string, input: {
1679
2054
  scheduledDate: string | null;