@taskforcehq/taskforce 0.3.305 → 0.3.306

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 (337) hide show
  1. package/dist/Taskforce.module.css +295 -89
  2. package/dist/TaskforceCore.js +215 -43
  3. package/dist/TaskforceCore.test.js +433 -28
  4. package/dist/assets/fonts/CourierPrime-Bold.woff2 +0 -0
  5. package/dist/assets/fonts/CourierPrime-BoldItalic.woff2 +0 -0
  6. package/dist/assets/fonts/CourierPrime-Italic.woff2 +0 -0
  7. package/dist/assets/fonts/CourierPrime-Regular.woff2 +0 -0
  8. package/dist/assets/fonts/Noir_medium.woff2 +0 -0
  9. package/dist/assets/fonts/Noir_regular.woff2 +0 -0
  10. package/dist/assets/fonts/RussoOne-Regular.woff2 +0 -0
  11. package/dist/assets/fonts/SpecialElite-Regular.woff2 +0 -0
  12. package/dist/compat/workspaceSyncCompat.js +46 -2
  13. package/dist/compat/workspaceSyncCompat.test.js +38 -1
  14. package/dist/components/context/ContextAttachmentManager.d.ts +14 -0
  15. package/dist/components/context/ContextAttachmentManager.js +549 -0
  16. package/dist/components/features/AgentsModule.d.ts +10 -1
  17. package/dist/components/features/AgentsModule.js +260 -15
  18. package/dist/components/features/AgentsModule.test.js +255 -5
  19. package/dist/components/features/DocumentViewer.d.ts +5 -1
  20. package/dist/components/features/DocumentViewer.js +60 -3
  21. package/dist/components/features/DocumentWorkspace.js +1 -1
  22. package/dist/components/features/DocumentWorkspace.test.js +33 -0
  23. package/dist/components/features/documentWorkspaceModel.d.ts +1 -1
  24. package/dist/components/task/TaskCard.js +19 -28
  25. package/dist/components/task/TaskCard.test.js +38 -3
  26. package/dist/components/task/TaskContextUpload.js +4 -526
  27. package/dist/components/task/TaskForm.js +85 -90
  28. package/dist/components/task/TaskForm.test.js +110 -8
  29. package/dist/components/task/TaskKanban.d.ts +2 -1
  30. package/dist/components/task/TaskKanban.js +94 -13
  31. package/dist/components/task/TaskKanban.test.js +36 -0
  32. package/dist/components/ui/EditableAvatarButton.d.ts +18 -0
  33. package/dist/components/ui/EditableAvatarButton.js +18 -0
  34. package/dist/components/views/PlanComparisonPage.d.ts +9 -1
  35. package/dist/components/views/PlanComparisonPage.js +70 -14
  36. package/dist/components/views/PlanComparisonPage.test.js +238 -0
  37. package/dist/components/views/PlansPage.js +127 -36
  38. package/dist/components/views/PlansPage.test.js +294 -12
  39. package/dist/components/views/StandaloneLayout.js +283 -533
  40. package/dist/components/views/panels/PlanningDrawer.d.ts +8 -1
  41. package/dist/components/views/panels/PlanningDrawer.js +18 -11
  42. package/dist/components/views/panels/PlanningDrawer.test.d.ts +1 -0
  43. package/dist/components/views/panels/PlanningDrawer.test.js +141 -0
  44. package/dist/components/views/planningScope.d.ts +20 -0
  45. package/dist/components/views/planningScope.js +25 -0
  46. package/dist/components/views/planningScope.test.d.ts +1 -0
  47. package/dist/components/views/planningScope.test.js +60 -0
  48. package/dist/components/views/standalone/modals/AccountHubModal.d.ts +26 -1
  49. package/dist/components/views/standalone/modals/AccountHubModal.js +76 -2
  50. package/dist/components/views/standalone/modals/AccountHubModal.test.js +20 -3
  51. package/dist/components/views/standalone/modals/AvatarImageManagerModal.d.ts +20 -0
  52. package/dist/components/views/standalone/modals/AvatarImageManagerModal.js +127 -0
  53. package/dist/components/views/standalone/modals/EditProfileModal.d.ts +2 -9
  54. package/dist/components/views/standalone/modals/EditProfileModal.js +3 -2
  55. package/dist/components/views/standalone/modals/SyncEnableWarningModal.d.ts +9 -0
  56. package/dist/components/views/standalone/modals/SyncEnableWarningModal.js +6 -0
  57. package/dist/components/views/standalone/modals/SyncEnableWarningModal.test.d.ts +1 -0
  58. package/dist/components/views/standalone/modals/SyncEnableWarningModal.test.js +24 -0
  59. package/dist/components/views/standalone/modals/SyncStatusModal.d.ts +2 -1
  60. package/dist/components/views/standalone/modals/SyncStatusModal.js +2 -2
  61. package/dist/core/AiProfileService.d.ts +39 -2
  62. package/dist/core/AiProfileService.js +639 -73
  63. package/dist/core/AiProfileService.test.js +19 -1
  64. package/dist/core/AiProfiles.test.js +566 -7
  65. package/dist/core/AttachmentLinkService.js +57 -15
  66. package/dist/core/AuthIdentityService.d.ts +107 -0
  67. package/dist/core/AuthIdentityService.js +284 -0
  68. package/dist/core/AuthTokenService.d.ts +4 -0
  69. package/dist/core/AuthTokenService.js +34 -6
  70. package/dist/core/AuthTokenService.test.js +3 -3
  71. package/dist/core/EntitlementsPolicy.test.js +2 -2
  72. package/dist/core/GlobalSettingsService.js +115 -6
  73. package/dist/core/PlanEntitlementService.d.ts +23 -2
  74. package/dist/core/PlanEntitlementService.js +343 -57
  75. package/dist/core/PlanFeatureCatalog.test.d.ts +1 -0
  76. package/dist/core/PlanFeatureCatalog.test.js +84 -0
  77. package/dist/core/PlanVersionPolicy.test.js +35 -2
  78. package/dist/core/PlanningEntities.test.js +52 -0
  79. package/dist/core/SignupMonetizationSettings.test.js +199 -27
  80. package/dist/core/SyncReconciliationService.js +2 -65
  81. package/dist/core/SystemAdmin.test.js +42 -42
  82. package/dist/core/TaskAttachmentsCanonical.test.js +51 -1
  83. package/dist/core/Taskforce.d.ts +225 -14
  84. package/dist/core/Taskforce.js +765 -192
  85. package/dist/core/Taskforce.listTasksSlim.test.d.ts +1 -0
  86. package/dist/core/Taskforce.listTasksSlim.test.js +91 -0
  87. package/dist/core/UserProfileAvatarDrafts.test.js +30 -3
  88. package/dist/core/WorkspaceLifecycleService.js +0 -5
  89. package/dist/core/WorkspacePermissions.test.js +25 -1
  90. package/dist/core/WorkspacePlanMode.test.js +117 -16
  91. package/dist/core/shared.d.ts +1 -1
  92. package/dist/core/shared.js +5 -1
  93. package/dist/core/types.d.ts +68 -2
  94. package/dist/hooks/auth/useTaskforceAuthBootstrap.js +26 -1
  95. package/dist/hooks/sync/bootstrap.js +2 -0
  96. package/dist/hooks/sync/controlPlane.d.ts +37 -0
  97. package/dist/hooks/sync/controlPlane.js +78 -0
  98. package/dist/hooks/sync/controlPlane.test.d.ts +1 -0
  99. package/dist/hooks/sync/controlPlane.test.js +121 -0
  100. package/dist/hooks/sync/lifecyclePolicy.d.ts +45 -0
  101. package/dist/hooks/sync/lifecyclePolicy.js +93 -0
  102. package/dist/hooks/sync/lifecyclePolicy.test.d.ts +1 -0
  103. package/dist/hooks/sync/lifecyclePolicy.test.js +124 -0
  104. package/dist/hooks/sync/orchestratorShared.d.ts +10 -1
  105. package/dist/hooks/sync/orchestratorShared.js +68 -47
  106. package/dist/hooks/sync/orchestratorShared.test.js +50 -1
  107. package/dist/hooks/sync/pullLifecycle.d.ts +31 -0
  108. package/dist/hooks/sync/pullLifecycle.js +24 -0
  109. package/dist/hooks/sync/pullLifecycle.test.d.ts +1 -0
  110. package/dist/hooks/sync/pullLifecycle.test.js +80 -0
  111. package/dist/hooks/sync/recovery.d.ts +16 -2
  112. package/dist/hooks/sync/recovery.js +171 -53
  113. package/dist/hooks/sync/recovery.test.d.ts +1 -0
  114. package/dist/hooks/sync/recovery.test.js +292 -0
  115. package/dist/hooks/sync/transfers.d.ts +15 -3
  116. package/dist/hooks/sync/transfers.js +179 -62
  117. package/dist/hooks/sync/transfers.test.d.ts +1 -0
  118. package/dist/hooks/sync/transfers.test.js +396 -0
  119. package/dist/hooks/sync/useRecentSyncEvents.d.ts +21 -0
  120. package/dist/hooks/sync/useRecentSyncEvents.js +92 -0
  121. package/dist/hooks/sync/useRecentSyncEvents.test.d.ts +1 -0
  122. package/dist/hooks/sync/useRecentSyncEvents.test.js +124 -0
  123. package/dist/hooks/sync/useSyncStatusActions.d.ts +30 -0
  124. package/dist/hooks/sync/useSyncStatusActions.js +88 -0
  125. package/dist/hooks/sync/useSyncStatusActions.test.d.ts +1 -0
  126. package/dist/hooks/sync/useSyncStatusActions.test.js +133 -0
  127. package/dist/hooks/sync/useSyncStatusControls.d.ts +25 -0
  128. package/dist/hooks/sync/useSyncStatusControls.js +60 -0
  129. package/dist/hooks/sync/useSyncStatusControls.test.d.ts +1 -0
  130. package/dist/hooks/sync/useSyncStatusControls.test.js +88 -0
  131. package/dist/hooks/useSyncOrchestrator.aiProfiles.test.js +12 -0
  132. package/dist/hooks/useSyncOrchestrator.d.ts +9 -2
  133. package/dist/hooks/useSyncOrchestrator.js +359 -178
  134. package/dist/hooks/useSyncOrchestrator.retry-closure.test.js +407 -0
  135. package/dist/hooks/useTaskData.js +8 -3
  136. package/dist/hooks/useTaskData.test.js +45 -0
  137. package/dist/hooks/useTaskforce.d.ts +60 -2
  138. package/dist/hooks/useTaskforce.js +549 -240
  139. package/dist/hooks/useTaskforce.runtime-routing.test.d.ts +1 -0
  140. package/dist/hooks/useTaskforce.runtime-routing.test.js +152 -0
  141. package/dist/hooks/useTaskforce.sync-behavior.test.js +2380 -212
  142. package/dist/hooks/useWorkspaceSyncController.d.ts +1 -0
  143. package/dist/hooks/useWorkspaceSyncController.js +6 -1
  144. package/dist/hooks/workspace/useTaskforceWorkspaceBootstrap.d.ts +16 -0
  145. package/dist/hooks/workspace/useTaskforceWorkspaceBootstrap.js +316 -35
  146. package/dist/localization/locales/en-US.d.ts +0 -1
  147. package/dist/localization/locales/en-US.js +0 -1
  148. package/dist/localization/locales/es-419.js +0 -1
  149. package/dist/localization/locales/pt-BR.js +0 -1
  150. package/dist/mcp/documentAssetRegistrar.js +3 -3
  151. package/dist/mcp/runtime.d.ts +2 -0
  152. package/dist/mcp/runtime.js +131 -64
  153. package/dist/mcp/runtime.test.js +291 -12
  154. package/dist/migrations/taskSchemaMigrations.d.ts +1 -1
  155. package/dist/migrations/taskSchemaMigrations.js +171 -61
  156. package/dist/migrations/taskSchemaMigrations.test.js +15 -0
  157. package/dist/resources/templates/workflow-sources/workflowDocs.mjs +6 -6
  158. package/dist/resources/templates/workflows/collaborate.yaml +1 -1
  159. package/dist/resources/templates/workflows/evaluate.yaml +2 -2
  160. package/dist/resources/templates/workflows/plan.yaml +1 -1
  161. package/dist/resources/templates/workflows/review.yaml +2 -2
  162. package/dist/server/annotatedAttachmentsRoutes.test.js +3 -3
  163. package/dist/server/auth/providers/apple.d.ts +33 -0
  164. package/dist/server/auth/providers/apple.js +82 -0
  165. package/dist/server/auth/providers/appleClientSecret.d.ts +37 -0
  166. package/dist/server/auth/providers/appleClientSecret.js +65 -0
  167. package/dist/server/auth/providers/github.d.ts +26 -0
  168. package/dist/server/auth/providers/github.js +86 -0
  169. package/dist/server/auth/providers/google.d.ts +21 -0
  170. package/dist/server/auth/providers/google.js +56 -0
  171. package/dist/server/auth/providers/types.d.ts +21 -0
  172. package/dist/server/auth/providers/types.js +1 -0
  173. package/dist/server/auth.d.ts +2 -0
  174. package/dist/server/auth.js +6 -3
  175. package/dist/server/documentReviewRoutes.test.js +36 -3
  176. package/dist/server/index.cookieProxy.test.js +1 -0
  177. package/dist/server/index.d.ts +12 -0
  178. package/dist/server/index.js +120 -9
  179. package/dist/server/index.rateLimit.test.js +3 -0
  180. package/dist/server/index.test.js +106 -3
  181. package/dist/server/routes/admin.d.ts +3 -0
  182. package/dist/server/routes/admin.js +272 -19
  183. package/dist/server/routes/auth.d.ts +15 -2
  184. package/dist/server/routes/auth.js +994 -57
  185. package/dist/server/routes/authSupport.d.ts +1 -1
  186. package/dist/server/routes/authSupport.js +1 -1
  187. package/dist/server/routes/billing.js +361 -35
  188. package/dist/server/routes/billing.test.js +592 -12
  189. package/dist/server/routes/documents.d.ts +1 -0
  190. package/dist/server/routes/documents.js +172 -70
  191. package/dist/server/routes/shared.d.ts +28 -2
  192. package/dist/server/routes/shared.js +69 -4
  193. package/dist/server/routes/sync.integration.test.js +437 -39
  194. package/dist/server/routes/sync.js +61 -605
  195. package/dist/server/routes/syncAuxRoutes.d.ts +15 -0
  196. package/dist/server/routes/syncAuxRoutes.js +91 -0
  197. package/dist/server/routes/syncAuxRoutes.test.d.ts +1 -0
  198. package/dist/server/routes/syncAuxRoutes.test.js +158 -0
  199. package/dist/server/routes/syncPullApplyRoutes.d.ts +36 -0
  200. package/dist/server/routes/syncPullApplyRoutes.js +204 -0
  201. package/dist/server/routes/syncPushRoutes.d.ts +24 -0
  202. package/dist/server/routes/syncPushRoutes.js +212 -0
  203. package/dist/server/routes/syncRouteGuards.d.ts +36 -0
  204. package/dist/server/routes/syncRouteGuards.js +67 -0
  205. package/dist/server/routes/syncRouteGuards.test.d.ts +1 -0
  206. package/dist/server/routes/syncRouteGuards.test.js +94 -0
  207. package/dist/server/routes/syncRouteTypes.d.ts +13 -0
  208. package/dist/server/routes/syncRouteTypes.js +1 -0
  209. package/dist/server/routes/syncSnapshotRoutes.d.ts +66 -0
  210. package/dist/server/routes/syncSnapshotRoutes.js +180 -0
  211. package/dist/server/routes/tasks.js +43 -1
  212. package/dist/server/routes/workspaces.js +36 -5
  213. package/dist/server/routes.js +60 -3
  214. package/dist/server/routes.test.js +1824 -171
  215. package/dist/services/workflowExportSnapshots.test.js +2 -0
  216. package/dist/shared/aiProfileSeatScope.d.ts +5 -0
  217. package/dist/shared/aiProfileSeatScope.js +21 -0
  218. package/dist/shared/passwordPolicy.d.ts +13 -0
  219. package/dist/shared/passwordPolicy.js +84 -0
  220. package/dist/shared/passwordPolicy.test.d.ts +1 -0
  221. package/dist/shared/passwordPolicy.test.js +34 -0
  222. package/dist/storage/workspaceAssetStore.d.ts +15 -3
  223. package/dist/storage/workspaceAssetStore.js +132 -44
  224. package/dist/storage/workspaceAssetStore.test.js +93 -6
  225. package/dist/styles/fonts.css +70 -0
  226. package/dist/sync/collaborationSyncPayload.d.ts +6 -1
  227. package/dist/sync/collaborationSyncPayload.js +17 -11
  228. package/dist/sync/collaborationSyncPayload.test.js +13 -1
  229. package/dist/sync/contentSyncState.d.ts +4 -8
  230. package/dist/sync/contentSyncState.js +17 -70
  231. package/dist/sync/syncApplyHandlers.d.ts +7 -0
  232. package/dist/sync/syncApplyHandlers.js +28 -13
  233. package/dist/sync/syncApplyHandlers.test.js +70 -3
  234. package/dist/sync/syncFieldSemantics.d.ts +12 -0
  235. package/dist/sync/syncFieldSemantics.js +55 -0
  236. package/dist/sync/syncResourceAdapters.d.ts +44 -0
  237. package/dist/sync/syncResourceAdapters.js +77 -0
  238. package/dist/sync/syncService.d.ts +5 -0
  239. package/dist/sync/syncService.js +52 -0
  240. package/dist/sync/syncService.test.js +57 -3
  241. package/dist/sync/taskSyncChangeKey.d.ts +2 -0
  242. package/dist/sync/taskSyncChangeKey.js +143 -0
  243. package/dist/sync/taskSyncPayload.js +3 -8
  244. package/dist/sync/workspacePullFeed.js +4 -3
  245. package/dist/sync/workspacePullFeed.test.js +43 -0
  246. package/dist/sync/workspaceRepair.js +5 -2
  247. package/dist/sync/workspaceSyncModel.d.ts +45 -0
  248. package/dist/sync/workspaceSyncModel.js +183 -28
  249. package/dist/sync/workspaceSyncModel.test.js +291 -12
  250. package/dist/sync/workspaceSyncState.d.ts +17 -0
  251. package/dist/sync/workspaceSyncState.js +2 -1
  252. package/dist/sync/workspaceSyncSurface.js +3 -8
  253. package/dist/types.d.ts +17 -0
  254. package/dist/ui/assets/AgentsModule-DrLawwNl.js +1 -0
  255. package/dist/ui/assets/{AnnotatedAttachmentWorkspace-BG6P_GVW.js → AnnotatedAttachmentWorkspace-Z9_whf7F.js} +1 -1
  256. package/dist/ui/assets/CourierPrime-Bold-BuLj_dpw.woff2 +0 -0
  257. package/dist/ui/assets/CourierPrime-BoldItalic-BrK2pUkZ.woff2 +0 -0
  258. package/dist/ui/assets/CourierPrime-Italic-DFUZK5Ey.woff2 +0 -0
  259. package/dist/ui/assets/CourierPrime-Regular-BsKphzVf.woff2 +0 -0
  260. package/dist/ui/assets/DocumentWorkspace-B03MaSkw.js +252 -0
  261. package/dist/ui/assets/DocumentWorkspace-Dhdso07p.css +1 -0
  262. package/dist/ui/assets/{InitiativesModule-Dhm7M8e7.js → InitiativesModule-9E6ParrY.js} +1 -1
  263. package/dist/ui/assets/Noir_medium-bxQwKGzB.woff2 +0 -0
  264. package/dist/ui/assets/Noir_regular-ojf2kxlG.woff2 +0 -0
  265. package/dist/ui/assets/PlansPage-CvfnMiWq.css +1 -0
  266. package/dist/ui/assets/PlansPage-DRXscYxH.js +1 -0
  267. package/dist/ui/assets/RussoOne-Regular-Cu_qq_qC.woff2 +0 -0
  268. package/dist/ui/assets/SpecialElite-Regular-Di6gSvAS.woff2 +0 -0
  269. package/dist/ui/assets/{TaskSettings-ln0aF7xc.js → TaskSettings-DZX4jk7e.js} +1 -1
  270. package/dist/ui/assets/{WorkflowsModule-BcS4afRn.js → WorkflowsModule-BA7jcEpH.js} +1 -1
  271. package/dist/ui/assets/index-9eT8e0Lu.css +1 -0
  272. package/dist/ui/assets/index-C6k75jr8.js +6 -0
  273. package/dist/ui/assets/{vendor-icons-BSUaRwF8.js → vendor-icons-DuEd_65c.js} +1 -1
  274. package/dist/ui/fonts/CourierPrime-Bold.ttf +0 -0
  275. package/dist/ui/fonts/CourierPrime-Bold.woff2 +0 -0
  276. package/dist/ui/fonts/CourierPrime-BoldItalic.ttf +0 -0
  277. package/dist/ui/fonts/CourierPrime-BoldItalic.woff2 +0 -0
  278. package/dist/ui/fonts/CourierPrime-Italic.ttf +0 -0
  279. package/dist/ui/fonts/CourierPrime-Italic.woff2 +0 -0
  280. package/dist/ui/fonts/CourierPrime-Regular.ttf +0 -0
  281. package/dist/ui/fonts/CourierPrime-Regular.woff2 +0 -0
  282. package/dist/ui/fonts/Noir_medium.otf +0 -0
  283. package/dist/ui/fonts/Noir_medium.woff2 +0 -0
  284. package/dist/ui/fonts/Noir_regular.otf +0 -0
  285. package/dist/ui/fonts/Noir_regular.woff2 +0 -0
  286. package/dist/ui/fonts/RussoOne-Regular.woff2 +0 -0
  287. package/dist/ui/fonts/SpecialElite-Regular.ttf +0 -0
  288. package/dist/ui/fonts/SpecialElite-Regular.woff2 +0 -0
  289. package/dist/ui/index.html +3 -3
  290. package/dist/utils/accountProfileSummaryCache.d.ts +5 -0
  291. package/dist/utils/assignees.d.ts +2 -0
  292. package/dist/utils/assignees.js +2 -0
  293. package/dist/utils/avatarUpload.d.ts +27 -0
  294. package/dist/utils/avatarUpload.js +132 -0
  295. package/dist/utils/avatarUpload.test.d.ts +1 -0
  296. package/dist/utils/avatarUpload.test.js +40 -0
  297. package/dist/utils/bootstrapTrace.d.ts +7 -0
  298. package/dist/utils/bootstrapTrace.js +29 -0
  299. package/dist/utils/commercialLifecyclePresentation.js +3 -0
  300. package/dist/utils/contextAssetEvents.d.ts +2 -0
  301. package/dist/utils/syncEventDetails.d.ts +3 -0
  302. package/dist/utils/syncEventDetails.js +64 -0
  303. package/dist/utils/syncEventDetails.test.d.ts +1 -0
  304. package/dist/utils/syncEventDetails.test.js +23 -0
  305. package/dist/utils/syncEventPresentation.d.ts +15 -0
  306. package/dist/utils/syncEventPresentation.js +129 -0
  307. package/dist/utils/syncEventPresentation.test.d.ts +1 -0
  308. package/dist/utils/syncEventPresentation.test.js +64 -0
  309. package/dist/utils/syncStatusPresentation.d.ts +72 -0
  310. package/dist/utils/syncStatusPresentation.js +217 -0
  311. package/dist/utils/syncStatusPresentation.test.d.ts +1 -0
  312. package/dist/utils/syncStatusPresentation.test.js +164 -0
  313. package/dist/utils/taskActivity.d.ts +2 -0
  314. package/dist/utils/taskActivity.js +228 -22
  315. package/dist/utils/taskActivity.test.js +119 -8
  316. package/dist/utils/workspaceSyncPresentation.d.ts +4 -0
  317. package/dist/utils/workspaceSyncPresentation.js +68 -2
  318. package/dist/utils/workspaceSyncPresentation.test.js +36 -1
  319. package/package.json +3 -2
  320. package/scripts/export-sqlite-to-postgres.mjs +7 -9
  321. package/scripts/run-e2e-realtime.sh +17 -3
  322. package/scripts/run-smoke.sh +17 -5
  323. package/scripts/run-soak.sh +17 -5
  324. package/src/resources/templates/workflow-sources/workflowDocs.mjs +6 -6
  325. package/src/resources/templates/workflows/collaborate.yaml +1 -1
  326. package/src/resources/templates/workflows/evaluate.yaml +2 -2
  327. package/src/resources/templates/workflows/plan.yaml +1 -1
  328. package/src/resources/templates/workflows/review.yaml +2 -2
  329. package/dist/ui/assets/AgentsModule-N2MnQBZk.js +0 -1
  330. package/dist/ui/assets/DocumentWorkspace-B3nV_Gc5.css +0 -1
  331. package/dist/ui/assets/DocumentWorkspace-DRbDMwh8.js +0 -252
  332. package/dist/ui/assets/PlansPage-C2dd2n1X.css +0 -1
  333. package/dist/ui/assets/PlansPage-Cq0zXj3I.js +0 -1
  334. package/dist/ui/assets/RussoOne-Regular-C3BxZIj7.ttf +0 -0
  335. package/dist/ui/assets/index-C2-OXZV7.css +0 -1
  336. package/dist/ui/assets/index-DcSI5F86.js +0 -6
  337. 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';
@@ -350,6 +362,8 @@ interface UserAccessRecord {
350
362
  role: AccessRole;
351
363
  permissionMode: PermissionMode;
352
364
  disabled: boolean;
365
+ accountDisabled?: boolean;
366
+ workspaceDisabled?: boolean;
353
367
  betaAccess: boolean;
354
368
  }
355
369
  interface UserIdentityRecord {
@@ -378,6 +392,7 @@ interface WorkspaceUserRecord {
378
392
  userId: string;
379
393
  email: string;
380
394
  displayName?: string | null;
395
+ avatarUrl?: string | null;
381
396
  role: AccessRole;
382
397
  permissionMode: PermissionMode;
383
398
  betaAccess: boolean;
@@ -395,12 +410,20 @@ export interface AiProfileRecord {
395
410
  username: string;
396
411
  icon: string;
397
412
  color: string;
413
+ avatarUrl?: string | null;
414
+ avatarSourceUrl?: string | null;
398
415
  description?: string | null;
399
416
  role?: string | null;
400
417
  provider?: string | null;
401
418
  model?: string | null;
402
419
  surfaceType?: AiProfileSurfaceType | null;
420
+ seatScope?: AiProfileSeatScope | null;
403
421
  providerMetadata?: Record<string, unknown> | null;
422
+ archivedAt?: string | null;
423
+ archivedBy?: string | null;
424
+ archivedReason?: string | null;
425
+ mergedIntoProfileId?: string | null;
426
+ rosterStateUpdatedAt?: string | null;
404
427
  createdAt: string;
405
428
  updatedAt: string;
406
429
  lastActiveAt?: string | null;
@@ -418,6 +441,9 @@ export interface ResolveAiProfileInput {
418
441
  profileToken?: string | null;
419
442
  providerMetadata?: Record<string, unknown> | null;
420
443
  }
444
+ export interface ResolveAiProfileOptions {
445
+ trustedSeatScope?: AiProfileSeatScope | null;
446
+ }
421
447
  export interface ResolveAiProfileResult {
422
448
  created: boolean;
423
449
  profile: AiProfileRecord;
@@ -563,6 +589,7 @@ export interface PlanVersionSnapshot {
563
589
  export interface PlanCatalogSnapshot {
564
590
  planId: string;
565
591
  displayName: string;
592
+ description: string | null;
566
593
  status: 'active' | 'archived';
567
594
  createdAt: string;
568
595
  updatedAt: string;
@@ -594,6 +621,7 @@ interface PasswordAuthResult {
594
621
  userId: string;
595
622
  workspaceId: string;
596
623
  role: AccessRole;
624
+ identityId?: string;
597
625
  };
598
626
  code?: 'INVALID_CREDENTIALS' | 'EMAIL_NOT_VERIFIED';
599
627
  }
@@ -733,7 +761,9 @@ export interface TaskforceSyncCapable {
733
761
  };
734
762
  listInitiatives(workspaceId?: string): InitiativeItem[];
735
763
  listWorkstreams(workspaceId?: string): WorkstreamItem[];
736
- listAiProfiles(workspaceId: string): AiProfileRecord[];
764
+ listAiProfiles(workspaceId: string, options?: {
765
+ includeArchived?: boolean;
766
+ }): AiProfileRecord[];
737
767
  listWorkspaceUsers(workspaceId: string): WorkspaceUserRecord[];
738
768
  listDocumentReviewSessionsForSync(input: {
739
769
  workspaceId?: string | null;
@@ -781,6 +811,18 @@ export interface TaskforceSyncCapable {
781
811
  keepId: string;
782
812
  mergeId: string;
783
813
  }): AiProfileRecord;
814
+ archiveAiProfile(input: {
815
+ workspaceId: string;
816
+ profileId: string;
817
+ archivedBy?: string | null;
818
+ reason?: string | null;
819
+ }): AiProfileRecord;
820
+ updateAiProfileAvatar(input: {
821
+ workspaceId: string;
822
+ profileId: string;
823
+ avatarUrl?: string | null;
824
+ avatarSourceUrl?: string | null;
825
+ }): AiProfileRecord;
784
826
  resolveWorkspaceActor(workspaceId: string, actorRef: unknown): TaskActor | null;
785
827
  }
786
828
  export declare class TaskforceCore implements TaskforceSyncCapable {
@@ -798,6 +840,7 @@ export declare class TaskforceCore implements TaskforceSyncCapable {
798
840
  private db;
799
841
  private globalSettingsDb;
800
842
  private authTokenService;
843
+ private identityService;
801
844
  private mcpTokenService;
802
845
  private planEntitlementService;
803
846
  private realtimeMutationListeners;
@@ -935,6 +978,7 @@ export declare class TaskforceCore implements TaskforceSyncCapable {
935
978
  };
936
979
  private ensureDirectories;
937
980
  private migrateLegacyGlobalSettingsDbIfNeeded;
981
+ private supportsWorkspaceAssetLinkTargetType;
938
982
  private initializeSchema;
939
983
  private performMigrationIfNeeded;
940
984
  private backfillMcpAuditLogMetadataColumns;
@@ -992,9 +1036,10 @@ export declare class TaskforceCore implements TaskforceSyncCapable {
992
1036
  getEffectiveTheme(workspaceId?: string, userId?: string): TaskforceTheme;
993
1037
  hasProjectJsonBackupOverride(workspaceId?: string, userId?: string): boolean;
994
1038
  getOnboardingPolicy(): import("./types.js").OnboardingPolicy;
1039
+ listOnboardingPlanOptions(): import("./types.js").OnboardingPlanOption[];
995
1040
  validateOnboardingPolicy(input?: {
996
1041
  mode?: 'require_plan_selection' | 'auto_grant_free' | 'auto_start_trial';
997
- planVersionId?: string | null;
1042
+ planId?: string | null;
998
1043
  }): import("./types.js").OnboardingPolicyValidationResult;
999
1044
  updateGlobalSettings(settings: GlobalTaskforceSettings): void;
1000
1045
  private sanitizeUserGlobalSyncSettings;
@@ -1037,6 +1082,7 @@ export declare class TaskforceCore implements TaskforceSyncCapable {
1037
1082
  unarchiveInitiative(id: string, workspaceId?: string): InitiativeItem;
1038
1083
  getWorkstream(id: string, workspaceId?: string): WorkstreamItem | null;
1039
1084
  listWorkstreams(workspaceId?: string): WorkstreamItem[];
1085
+ listPlanningBootstrap(workspaceId?: string, diagnostics?: PlanningBootstrapDiagnostics): PlanningBootstrapPayload;
1040
1086
  createWorkstream(input: Partial<WorkstreamItem>, workspaceId?: string): WorkstreamItem;
1041
1087
  updateWorkstream(id: string, patch: Partial<WorkstreamItem>, workspaceId?: string): WorkstreamItem;
1042
1088
  archiveWorkstream(id: string, workspaceId?: string): WorkstreamItem;
@@ -1112,6 +1158,24 @@ export declare class TaskforceCore implements TaskforceSyncCapable {
1112
1158
  private getSyncReconciliationServiceDeps;
1113
1159
  private getWorkspaceLifecycleServiceDeps;
1114
1160
  listTasks(workspaceId?: string): TaskFile;
1161
+ /**
1162
+ * Filter-pushdown listing used by read-only surfaces that don't need the
1163
+ * full task graph (MCP list_tasks, CLI summaries). Avoids the per-task
1164
+ * comments/events/attachments/checklist subqueries and actor resolution
1165
+ * that rowToTask performs, and applies filters + sort + limit at the SQL
1166
+ * layer so hot polls don't load the entire workspace.
1167
+ */
1168
+ listTasksSlim(workspaceId: string | undefined, filters?: {
1169
+ category?: string;
1170
+ status?: TaskStatus;
1171
+ openOnly?: boolean;
1172
+ assignee?: string;
1173
+ priority?: number;
1174
+ type?: string;
1175
+ sort?: 'created' | 'priority' | 'updated';
1176
+ order?: 'asc' | 'desc';
1177
+ limit?: number;
1178
+ }): Array<Record<string, unknown>>;
1115
1179
  getDataVersion(): number;
1116
1180
  getDatabaseProvider(): DatabaseProvider;
1117
1181
  isDatabaseHealthy(): boolean;
@@ -1169,7 +1233,15 @@ export declare class TaskforceCore implements TaskforceSyncCapable {
1169
1233
  getUserBetaAccess(userId: string): boolean;
1170
1234
  countSystemAdmins(): number;
1171
1235
  hasAnySystemAdmin(): boolean;
1172
- listSystemUsers(): SystemUserRecord[];
1236
+ countSystemUsers(input?: {
1237
+ query?: string | null;
1238
+ }): number;
1239
+ listSystemUsers(input?: {
1240
+ query?: string | null;
1241
+ sort?: 'newest' | 'oldest' | null;
1242
+ limit?: number | null;
1243
+ offset?: number | null;
1244
+ }): SystemUserRecord[];
1173
1245
  setSystemRole(userId: string, role: SystemRole): boolean;
1174
1246
  setUserDisabledGlobal(userId: string, disabled: boolean): boolean;
1175
1247
  setUserBetaAccessGlobal(userId: string, enabled: boolean): boolean;
@@ -1185,10 +1257,17 @@ export declare class TaskforceCore implements TaskforceSyncCapable {
1185
1257
  users: WorkspaceUserRecord[];
1186
1258
  pruneMissing?: boolean;
1187
1259
  }): WorkspaceUserRecord[];
1188
- listAiProfiles(workspaceId: string): AiProfileRecord[];
1260
+ listAiProfiles(workspaceId: string, options?: {
1261
+ includeArchived?: boolean;
1262
+ diagnostics?: {
1263
+ metadataBackfillCount?: number;
1264
+ };
1265
+ }): AiProfileRecord[];
1189
1266
  getAiProfileByToken(input: {
1190
1267
  workspaceId: string;
1191
1268
  profileToken: string;
1269
+ includeArchived?: boolean;
1270
+ seatScope?: AiProfileSeatScope | null;
1192
1271
  }): AiProfileRecord | null;
1193
1272
  upsertAiProfileForSync(profile: AiProfileRecord): AiProfileRecord;
1194
1273
  mergeAiProfiles(input: {
@@ -1196,7 +1275,19 @@ export declare class TaskforceCore implements TaskforceSyncCapable {
1196
1275
  keepId: string;
1197
1276
  mergeId: string;
1198
1277
  }): AiProfileRecord;
1199
- resolveAiProfile(input: ResolveAiProfileInput): ResolveAiProfileResult;
1278
+ archiveAiProfile(input: {
1279
+ workspaceId: string;
1280
+ profileId: string;
1281
+ archivedBy?: string | null;
1282
+ reason?: string | null;
1283
+ }): AiProfileRecord;
1284
+ updateAiProfileAvatar(input: {
1285
+ workspaceId: string;
1286
+ profileId: string;
1287
+ avatarUrl?: string | null;
1288
+ avatarSourceUrl?: string | null;
1289
+ }): AiProfileRecord;
1290
+ resolveAiProfile(input: ResolveAiProfileInput, options?: ResolveAiProfileOptions): ResolveAiProfileResult;
1200
1291
  listAnnotatedAttachmentSessions(input: {
1201
1292
  workspaceId?: string | null;
1202
1293
  taskId?: string | null;
@@ -1385,6 +1476,7 @@ export declare class TaskforceCore implements TaskforceSyncCapable {
1385
1476
  upsertPlanCatalog(input: {
1386
1477
  planId: string;
1387
1478
  displayName: string;
1479
+ description?: string | null;
1388
1480
  status?: 'active' | 'archived';
1389
1481
  initialMode?: 'personal' | 'team';
1390
1482
  initialSeatLimit?: number | null;
@@ -1392,10 +1484,17 @@ export declare class TaskforceCore implements TaskforceSyncCapable {
1392
1484
  }): {
1393
1485
  planId: string;
1394
1486
  displayName: string;
1487
+ description: string | null;
1395
1488
  status: "active" | "archived";
1396
1489
  };
1397
1490
  listPlanCatalog(): import("./types.js").PlanCatalogSnapshot[];
1398
1491
  listPlanFeatureCatalog(): import("./types.js").PlanFeatureCatalogItem[];
1492
+ updatePlanFeatureCatalogMarketingCopy(input: {
1493
+ featureKey: string;
1494
+ publicLabel?: string | null;
1495
+ publicDescription?: string | null;
1496
+ publicDisplayOrder?: number | null;
1497
+ }): import("./types.js").PlanFeatureCatalogItem;
1399
1498
  listPlanVersions(planId: string): import("./types.js").PlanVersionSnapshot[];
1400
1499
  getPlanVersionFeatures(planId: string, versionId: string): import("./types.js").PlanVersionSnapshot;
1401
1500
  searchAccountsByEmail(query: string, limit?: number): {
@@ -1516,6 +1615,99 @@ export declare class TaskforceCore implements TaskforceSyncCapable {
1516
1615
  checkoutPending: boolean;
1517
1616
  commercialState: EntitlementState;
1518
1617
  };
1618
+ /**
1619
+ * Creates an OAuth state record and returns the state token + PKCE materials.
1620
+ * Delegates to AuthIdentityService.createOAuthState.
1621
+ */
1622
+ createOAuthLoginState(input: {
1623
+ provider: string;
1624
+ flowMode: string;
1625
+ userId?: string | null;
1626
+ inviteToken?: string | null;
1627
+ returnTo?: string | null;
1628
+ createdIp?: string | null;
1629
+ }): {
1630
+ state: string;
1631
+ codeVerifier: string;
1632
+ codeChallenge: string;
1633
+ nonce: string;
1634
+ };
1635
+ /**
1636
+ * Atomically consumes an OAuth state token and returns the row.
1637
+ * Returns null if invalid, expired, or already consumed.
1638
+ */
1639
+ consumeOAuthLoginState(state: string): import('./AuthIdentityService.js').OAuthStateRecord | null;
1640
+ /**
1641
+ * Finds the Taskforce user associated with a provider identity.
1642
+ * Returns { userId, identityId } or null if not yet linked.
1643
+ */
1644
+ findUserByOAuthProvider(provider: UserAuthProvider, providerSubject: string): {
1645
+ userId: string;
1646
+ identityId: string;
1647
+ } | null;
1648
+ /**
1649
+ * Links an OAuth provider identity to an existing user.
1650
+ * Throws IDENTITY_ALREADY_EXISTS if the user already has an identity for this provider.
1651
+ */
1652
+ linkOAuthProviderToUser(input: {
1653
+ userId: string;
1654
+ provider: UserAuthProvider;
1655
+ providerSubject: string;
1656
+ providerEmail?: string | null;
1657
+ providerEmailVerified?: boolean | null;
1658
+ displayNameSnapshot?: string | null;
1659
+ avatarUrlSnapshot?: string | null;
1660
+ }): string;
1661
+ /**
1662
+ * Lists all active login identities for a user.
1663
+ * Used by the Account Hub "Login methods" section.
1664
+ */
1665
+ listLoginMethodsForUser(userId: string): import('./types.js').UserAuthIdentity[];
1666
+ /**
1667
+ * Unlinks a provider identity from a user.
1668
+ * Throws LAST_IDENTITY_REQUIRED if it would be the last active method.
1669
+ */
1670
+ unlinkLoginMethod(userId: string, provider: UserAuthProvider): boolean;
1671
+ /**
1672
+ * Adds or replaces a password identity for a user that signed up via OAuth.
1673
+ * Uses upsert semantics (safe to call on accounts that already have a password).
1674
+ */
1675
+ addPasswordToAccount(userId: string, password: string): string;
1676
+ /**
1677
+ * Registers a new user account via an OAuth provider (no password).
1678
+ *
1679
+ * Creates the user row, applies commercial onboarding, and links the
1680
+ * provider identity — all in a single transaction.
1681
+ *
1682
+ * Returns the same shape as `registerPasswordUser` so callers can use
1683
+ * the same session-issuance path.
1684
+ */
1685
+ registerOAuthUser(input: {
1686
+ email: string | null;
1687
+ emailVerified?: boolean;
1688
+ provider: UserAuthProvider;
1689
+ providerSubject: string;
1690
+ displayName?: string | null;
1691
+ avatarUrl?: string | null;
1692
+ planVersionId?: string;
1693
+ betaAccess?: boolean;
1694
+ }): {
1695
+ userId: string;
1696
+ workspaceId: string | null;
1697
+ role: AccessRole;
1698
+ identityId: string;
1699
+ planSelectionRequired: boolean;
1700
+ checkoutPending: boolean;
1701
+ commercialState: EntitlementState;
1702
+ };
1703
+ /**
1704
+ * Looks up a user by email address (exact, case-insensitive).
1705
+ * Returns { userId, email } or null.
1706
+ */
1707
+ findUserByEmail(email: string): {
1708
+ userId: string;
1709
+ email: string;
1710
+ } | null;
1519
1711
  private createOneTimeAuthToken;
1520
1712
  private consumeOneTimeAuthToken;
1521
1713
  inspectOneTimeAuthToken(token: string, purpose: AuthTokenPurpose): AuthTokenInspection;
@@ -1620,15 +1812,33 @@ export declare class TaskforceCore implements TaskforceSyncCapable {
1620
1812
  revokeInviteAcceptanceForUser(userId: string): {
1621
1813
  revoked: number;
1622
1814
  };
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
- };
1815
+ inspectInviteAcceptance(token: string): import('./types.js').InviteAcceptanceDetails;
1631
1816
  private completeInviteWorkspaceActivation;
1817
+ /**
1818
+ * Claims an invite by linking an OAuth provider identity to the invited user.
1819
+ *
1820
+ * Used when an invited user with `inviteeState: 'pending_setup'` completes an
1821
+ * OAuth flow with `flow_mode: 'invite_claim'`. The invite token must still be
1822
+ * valid and the user must have zero active identities (pending setup).
1823
+ *
1824
+ * Returns the same shape as `acceptInviteWithToken` so callers can issue a
1825
+ * session cookie on the same path.
1826
+ */
1827
+ claimInviteWithOAuthProvider(input: {
1828
+ token: string;
1829
+ provider: UserAuthProvider;
1830
+ providerSubject: string;
1831
+ providerEmail?: string | null;
1832
+ providerEmailVerified?: boolean | null;
1833
+ displayNameSnapshot?: string | null;
1834
+ avatarUrlSnapshot?: string | null;
1835
+ }): {
1836
+ userId: string;
1837
+ email: string;
1838
+ workspaceId: string;
1839
+ role: AccessRole;
1840
+ identityId: string;
1841
+ };
1632
1842
  acceptInviteWithToken(input: {
1633
1843
  token: string;
1634
1844
  password: string;
@@ -1637,6 +1847,7 @@ export declare class TaskforceCore implements TaskforceSyncCapable {
1637
1847
  email: string;
1638
1848
  workspaceId: string;
1639
1849
  role: AccessRole;
1850
+ identityId: string;
1640
1851
  };
1641
1852
  joinInviteWithAuthenticatedUser(input: {
1642
1853
  token: string;