@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
@@ -13,7 +13,7 @@ function makeCore() {
13
13
  billing: {
14
14
  onboardingPolicy: {
15
15
  mode: 'require_plan_selection',
16
- planVersionId: null
16
+ planId: null
17
17
  }
18
18
  }
19
19
  });
@@ -32,7 +32,7 @@ describe('Auth token lifecycle', () => {
32
32
  try {
33
33
  core.registerPasswordUser({
34
34
  email: 'verify@example.com',
35
- password: 'password123',
35
+ password: 'ValidPassphrase123!',
36
36
  displayName: 'Verify User',
37
37
  betaAccess: true
38
38
  });
@@ -56,7 +56,7 @@ describe('Auth token lifecycle', () => {
56
56
  try {
57
57
  core.registerPasswordUser({
58
58
  email: 'reset@example.com',
59
- password: 'password123',
59
+ password: 'ValidPassphrase123!',
60
60
  displayName: 'Reset User',
61
61
  betaAccess: true
62
62
  });
@@ -38,7 +38,7 @@ function openCore(projectRoot) {
38
38
  features: [
39
39
  { featureKey: 'collaboration.invites', access: 'enabled' },
40
40
  { featureKey: 'collaboration.team_management', access: 'enabled' },
41
- { featureKey: 'workspace.switching', access: 'enabled' }
41
+ { featureKey: 'workspace.workspaces', access: 'enabled' }
42
42
  ]
43
43
  });
44
44
  return core;
@@ -187,7 +187,7 @@ describe('Taskforce entitlements policy engine', () => {
187
187
  core.updatePlanVersionFeatures({
188
188
  planVersionId: 'free-v1',
189
189
  features: [
190
- { featureKey: 'workspace.switching', access: 'limited', config: { maxWorkspaces: 1 } }
190
+ { featureKey: 'workspace.workspaces', access: 'limited', config: { maxWorkspaces: 1 } }
191
191
  ]
192
192
  });
193
193
  core.createWorkspace({ workspaceId: 'workspace-one', name: 'Workspace One' });
@@ -17,6 +17,12 @@ function splitGlobalSettingsPayload(settings) {
17
17
  if (settings.setup && typeof settings.setup === 'object') {
18
18
  system.setup = { ...settings.setup };
19
19
  }
20
+ if (settings.objectStorage && typeof settings.objectStorage === 'object') {
21
+ system.objectStorage = { ...settings.objectStorage };
22
+ }
23
+ if (settings.oauthProviders && typeof settings.oauthProviders === 'object') {
24
+ system.oauthProviders = { ...settings.oauthProviders };
25
+ }
20
26
  const normalizedTheme = normalizeTaskforceTheme(settings.theme);
21
27
  if (normalizedTheme) {
22
28
  userPreferences.theme = normalizedTheme;
@@ -107,8 +113,8 @@ export function getGlobalSettingsService(deps) {
107
113
  || global.billing.onboardingPolicy.mode === 'auto_start_trial')
108
114
  ? {
109
115
  mode: global.billing.onboardingPolicy.mode,
110
- planVersionId: typeof global.billing.onboardingPolicy.planVersionId === 'string'
111
- ? (global.billing.onboardingPolicy.planVersionId.trim() || null)
116
+ planId: typeof global.billing.onboardingPolicy.planId === 'string'
117
+ ? (global.billing.onboardingPolicy.planId.trim() || null)
112
118
  : null
113
119
  }
114
120
  : null;
@@ -188,6 +194,12 @@ export function getGlobalSettingsService(deps) {
188
194
  : {}),
189
195
  ...(typeof global.site.pricingPageEnabled === 'boolean'
190
196
  ? { pricingPageEnabled: global.site.pricingPageEnabled }
197
+ : {}),
198
+ ...(typeof global.site.animatedBackgroundEnabled === 'boolean'
199
+ ? { animatedBackgroundEnabled: global.site.animatedBackgroundEnabled }
200
+ : {}),
201
+ ...(global.site.siteTheme === 'light' || global.site.siteTheme === 'dark'
202
+ ? { siteTheme: global.site.siteTheme }
191
203
  : {})
192
204
  }
193
205
  }
@@ -231,6 +243,57 @@ export function getGlobalSettingsService(deps) {
231
243
  : {})
232
244
  }
233
245
  }
246
+ : {}),
247
+ ...(global.oauthProviders && typeof global.oauthProviders === 'object'
248
+ ? {
249
+ oauthProviders: {
250
+ ...(global.oauthProviders.google && typeof global.oauthProviders.google === 'object'
251
+ ? {
252
+ google: {
253
+ ...(typeof global.oauthProviders.google.enabled === 'boolean' ? { enabled: global.oauthProviders.google.enabled } : {}),
254
+ ...(typeof global.oauthProviders.google.clientId === 'string' && global.oauthProviders.google.clientId.trim()
255
+ ? { clientId: global.oauthProviders.google.clientId.trim() }
256
+ : {}),
257
+ ...(typeof global.oauthProviders.google.clientSecret === 'string' && global.oauthProviders.google.clientSecret.trim()
258
+ ? { clientSecret: global.oauthProviders.google.clientSecret.trim() }
259
+ : {})
260
+ }
261
+ }
262
+ : {}),
263
+ ...(global.oauthProviders.github && typeof global.oauthProviders.github === 'object'
264
+ ? {
265
+ github: {
266
+ ...(typeof global.oauthProviders.github.enabled === 'boolean' ? { enabled: global.oauthProviders.github.enabled } : {}),
267
+ ...(typeof global.oauthProviders.github.clientId === 'string' && global.oauthProviders.github.clientId.trim()
268
+ ? { clientId: global.oauthProviders.github.clientId.trim() }
269
+ : {}),
270
+ ...(typeof global.oauthProviders.github.clientSecret === 'string' && global.oauthProviders.github.clientSecret.trim()
271
+ ? { clientSecret: global.oauthProviders.github.clientSecret.trim() }
272
+ : {})
273
+ }
274
+ }
275
+ : {}),
276
+ ...(global.oauthProviders.apple && typeof global.oauthProviders.apple === 'object'
277
+ ? {
278
+ apple: {
279
+ ...(typeof global.oauthProviders.apple.enabled === 'boolean' ? { enabled: global.oauthProviders.apple.enabled } : {}),
280
+ ...(typeof global.oauthProviders.apple.servicesId === 'string' && global.oauthProviders.apple.servicesId.trim()
281
+ ? { servicesId: global.oauthProviders.apple.servicesId.trim() }
282
+ : {}),
283
+ ...(typeof global.oauthProviders.apple.teamId === 'string' && global.oauthProviders.apple.teamId.trim()
284
+ ? { teamId: global.oauthProviders.apple.teamId.trim() }
285
+ : {}),
286
+ ...(typeof global.oauthProviders.apple.keyId === 'string' && global.oauthProviders.apple.keyId.trim()
287
+ ? { keyId: global.oauthProviders.apple.keyId.trim() }
288
+ : {}),
289
+ ...(typeof global.oauthProviders.apple.privateKeyPem === 'string' && global.oauthProviders.apple.privateKeyPem.trim()
290
+ ? { privateKeyPem: global.oauthProviders.apple.privateKeyPem.trim() }
291
+ : {})
292
+ }
293
+ }
294
+ : {})
295
+ }
296
+ }
234
297
  : {})
235
298
  };
236
299
  }
@@ -350,6 +413,12 @@ export function updateGlobalSettingsService(deps, settings) {
350
413
  : {}),
351
414
  ...(typeof incoming.pricingPageEnabled === 'boolean'
352
415
  ? { pricingPageEnabled: incoming.pricingPageEnabled }
416
+ : {}),
417
+ ...(typeof incoming.animatedBackgroundEnabled === 'boolean'
418
+ ? { animatedBackgroundEnabled: incoming.animatedBackgroundEnabled }
419
+ : {}),
420
+ ...(incoming.siteTheme === 'light' || incoming.siteTheme === 'dark'
421
+ ? { siteTheme: incoming.siteTheme }
353
422
  : {})
354
423
  };
355
424
  }
@@ -362,8 +431,8 @@ export function updateGlobalSettingsService(deps, settings) {
362
431
  || currentBilling.onboardingPolicy.mode === 'auto_start_trial')
363
432
  ? {
364
433
  mode: currentBilling.onboardingPolicy.mode,
365
- planVersionId: typeof currentBilling.onboardingPolicy.planVersionId === 'string'
366
- ? (currentBilling.onboardingPolicy.planVersionId.trim() || null)
434
+ planId: typeof currentBilling.onboardingPolicy.planId === 'string'
435
+ ? (currentBilling.onboardingPolicy.planId.trim() || null)
367
436
  : null
368
437
  }
369
438
  : null;
@@ -373,8 +442,8 @@ export function updateGlobalSettingsService(deps, settings) {
373
442
  || incoming.onboardingPolicy.mode === 'auto_start_trial')
374
443
  ? {
375
444
  mode: incoming.onboardingPolicy.mode,
376
- planVersionId: typeof incoming.onboardingPolicy.planVersionId === 'string'
377
- ? (incoming.onboardingPolicy.planVersionId.trim() || null)
445
+ planId: typeof incoming.onboardingPolicy.planId === 'string'
446
+ ? (incoming.onboardingPolicy.planId.trim() || null)
378
447
  : null
379
448
  }
380
449
  : null;
@@ -426,5 +495,57 @@ export function updateGlobalSettingsService(deps, settings) {
426
495
  : {})
427
496
  };
428
497
  }
498
+ if (settings.oauthProviders && typeof settings.oauthProviders === 'object') {
499
+ const currentProviders = next.oauthProviders && typeof next.oauthProviders === 'object' ? next.oauthProviders : {};
500
+ const incoming = settings.oauthProviders;
501
+ next.oauthProviders = { ...currentProviders };
502
+ if (incoming.google && typeof incoming.google === 'object') {
503
+ const cur = currentProviders.google && typeof currentProviders.google === 'object' ? currentProviders.google : {};
504
+ next.oauthProviders.google = {
505
+ ...cur,
506
+ ...(typeof incoming.google.enabled === 'boolean' ? { enabled: incoming.google.enabled } : {}),
507
+ ...(typeof incoming.google.clientId === 'string' ? { clientId: incoming.google.clientId.trim() } : {}),
508
+ ...(typeof incoming.google.clientSecret === 'string'
509
+ ? (incoming.google.clientSecret.trim()
510
+ ? { clientSecret: incoming.google.clientSecret.trim() }
511
+ : { clientSecret: undefined })
512
+ : {})
513
+ };
514
+ if (!next.oauthProviders.google.clientSecret)
515
+ delete next.oauthProviders.google.clientSecret;
516
+ }
517
+ if (incoming.github && typeof incoming.github === 'object') {
518
+ const cur = currentProviders.github && typeof currentProviders.github === 'object' ? currentProviders.github : {};
519
+ next.oauthProviders.github = {
520
+ ...cur,
521
+ ...(typeof incoming.github.enabled === 'boolean' ? { enabled: incoming.github.enabled } : {}),
522
+ ...(typeof incoming.github.clientId === 'string' ? { clientId: incoming.github.clientId.trim() } : {}),
523
+ ...(typeof incoming.github.clientSecret === 'string'
524
+ ? (incoming.github.clientSecret.trim()
525
+ ? { clientSecret: incoming.github.clientSecret.trim() }
526
+ : { clientSecret: undefined })
527
+ : {})
528
+ };
529
+ if (!next.oauthProviders.github.clientSecret)
530
+ delete next.oauthProviders.github.clientSecret;
531
+ }
532
+ if (incoming.apple && typeof incoming.apple === 'object') {
533
+ const cur = currentProviders.apple && typeof currentProviders.apple === 'object' ? currentProviders.apple : {};
534
+ next.oauthProviders.apple = {
535
+ ...cur,
536
+ ...(typeof incoming.apple.enabled === 'boolean' ? { enabled: incoming.apple.enabled } : {}),
537
+ ...(typeof incoming.apple.servicesId === 'string' ? { servicesId: incoming.apple.servicesId.trim() } : {}),
538
+ ...(typeof incoming.apple.teamId === 'string' ? { teamId: incoming.apple.teamId.trim() } : {}),
539
+ ...(typeof incoming.apple.keyId === 'string' ? { keyId: incoming.apple.keyId.trim() } : {}),
540
+ ...(typeof incoming.apple.privateKeyPem === 'string'
541
+ ? (incoming.apple.privateKeyPem.trim()
542
+ ? { privateKeyPem: incoming.apple.privateKeyPem.trim() }
543
+ : { privateKeyPem: undefined })
544
+ : {})
545
+ };
546
+ if (!next.oauthProviders.apple.privateKeyPem)
547
+ delete next.oauthProviders.apple.privateKeyPem;
548
+ }
549
+ }
429
550
  writeGlobalConfigService(deps, next);
430
551
  }
@@ -60,6 +60,11 @@ export declare class McpTokenService {
60
60
  workspaceId: string;
61
61
  tokenId: string;
62
62
  }): McpAccessTokenRecord;
63
+ deleteMcpAccessToken(input: {
64
+ actorUserId: string;
65
+ workspaceId: string;
66
+ tokenId: string;
67
+ }): boolean;
63
68
  regenerateMcpAccessToken(input: {
64
69
  actorUserId: string;
65
70
  workspaceId: string;
@@ -111,6 +116,13 @@ export declare class McpTokenService {
111
116
  grantId: string;
112
117
  }): McpOAuthConnectorGrantRecord;
113
118
  authenticateMcpOAuthAccessToken(token: string, workspaceId?: string): McpOAuthAccessTokenAuthResult | null;
119
+ bindMcpOAuthConnectorGrantAiProfile(input: {
120
+ grantId: string;
121
+ workspaceId: string;
122
+ profileId: string;
123
+ profileToken: string;
124
+ profileName: string;
125
+ }): boolean;
114
126
  recordMcpOAuthConnectorGrantUsage(input: {
115
127
  grantId: string;
116
128
  workspaceId: string;
@@ -518,6 +518,23 @@ export class McpTokenService {
518
518
  }
519
519
  return this.rowToMcpAccessTokenRecord(updated);
520
520
  }
521
+ deleteMcpAccessToken(input) {
522
+ this.getActiveWorkspaceMemberForMcp(input.actorUserId, input.workspaceId);
523
+ const row = this.getMcpAccessTokenRow(input.tokenId, input.workspaceId);
524
+ if (!row) {
525
+ throw new TaskforceRuleError('MCP token not found', 404, 'MCP_TOKEN_NOT_FOUND');
526
+ }
527
+ this.assertCanManageOwnMcpAccessToken(input.actorUserId, row);
528
+ const status = this.resolveMcpAccessTokenStatus(row);
529
+ if (status === 'active') {
530
+ throw new TaskforceRuleError('Active MCP tokens must be revoked before deletion', 400, 'MCP_TOKEN_DELETE_ACTIVE');
531
+ }
532
+ const result = this.db.prepare(`
533
+ DELETE FROM mcp_access_tokens
534
+ WHERE tenant_id = ? AND workspace_id = ? AND id = ?
535
+ `).run(this.tenantId, input.workspaceId, row.id);
536
+ return Number(result.changes || 0) > 0;
537
+ }
521
538
  regenerateMcpAccessToken(input) {
522
539
  this.getActiveWorkspaceMemberForMcp(input.actorUserId, input.workspaceId);
523
540
  const existing = this.getMcpAccessTokenRow(input.tokenId, input.workspaceId);
@@ -872,7 +889,8 @@ export class McpTokenService {
872
889
  if (!parsed)
873
890
  return null;
874
891
  const row = this.db.prepare(`
875
- SELECT id, provider, client_id, user_id, workspace_id, scopes_json, token_hash, status, revoked_at
892
+ SELECT id, provider, client_id, user_id, workspace_id, scopes_json, token_hash, status, revoked_at,
893
+ ai_profile_id, ai_profile_token, ai_profile_name
876
894
  FROM mcp_oauth_connector_grants
877
895
  WHERE tenant_id = ?
878
896
  AND token_prefix = ?
@@ -902,8 +920,33 @@ export class McpTokenService {
902
920
  provider: this.normalizeMcpOAuthProvider(row.provider),
903
921
  scopes,
904
922
  status: this.resolveMcpOAuthGrantStatus(row),
923
+ aiProfileId: row?.ai_profile_id ? String(row.ai_profile_id) : null,
924
+ aiProfileToken: row?.ai_profile_token ? String(row.ai_profile_token) : null,
925
+ aiProfileName: row?.ai_profile_name ? String(row.ai_profile_name) : null,
905
926
  };
906
927
  }
928
+ bindMcpOAuthConnectorGrantAiProfile(input) {
929
+ const grantId = String(input.grantId || '').trim();
930
+ const workspaceId = String(input.workspaceId || '').trim();
931
+ const profileId = String(input.profileId || '').trim();
932
+ const profileToken = String(input.profileToken || '').trim();
933
+ const profileName = String(input.profileName || '').trim();
934
+ if (!grantId || !workspaceId || !profileId || !profileToken || !profileName)
935
+ return false;
936
+ const now = new Date().toISOString();
937
+ const result = this.db.prepare(`
938
+ UPDATE mcp_oauth_connector_grants
939
+ SET ai_profile_id = ?,
940
+ ai_profile_token = ?,
941
+ ai_profile_name = ?,
942
+ updated_at = ?
943
+ WHERE tenant_id = ?
944
+ AND workspace_id = ?
945
+ AND id = ?
946
+ AND status = 'active'
947
+ `).run(profileId, profileToken, profileName, now, this.tenantId, workspaceId, grantId);
948
+ return Number(result?.changes || 0) > 0;
949
+ }
907
950
  recordMcpOAuthConnectorGrantUsage(input) {
908
951
  const grantId = String(input.grantId || '').trim();
909
952
  const workspaceId = String(input.workspaceId || '').trim();
@@ -1,5 +1,5 @@
1
1
  import type { DatabaseAdapter } from '../storage/databaseAdapter.js';
2
- import type { EntitlementState, PlanFeatureAccess, PlanFeatureSnapshot, PlanFeatureCatalogItem, PlanVersionSnapshot, PlanCatalogSnapshot, AccountEntitlementSnapshot, SeatUsageSnapshot, FeatureEvaluationResult, AccountAccessStatus, GlobalTaskforceSettings, OnboardingPolicy, OnboardingPolicyValidationResult } from './types.js';
2
+ import type { EntitlementState, PlanFeatureAccess, PlanFeatureSnapshot, PlanFeatureCatalogItem, PlanVersionSnapshot, PlanCatalogSnapshot, OnboardingPlanOption, AccountEntitlementSnapshot, SeatUsageSnapshot, FeatureEvaluationResult, AccountAccessStatus, GlobalTaskforceSettings, OnboardingPolicy, OnboardingPolicyValidationResult } from './types.js';
3
3
  export interface PlanEntitlementServiceDeps {
4
4
  getWorkspaceOwnerUserId: (workspaceId: string) => string | null;
5
5
  readGlobalConfig: () => GlobalTaskforceSettings;
@@ -17,6 +17,10 @@ export declare class PlanEntitlementService {
17
17
  constructor(db: DatabaseAdapter, tenantId: string, deps: PlanEntitlementServiceDeps);
18
18
  private generateEntityId;
19
19
  private parseJsonObject;
20
+ private normalizeOptionalCatalogMarketingCopy;
21
+ private canonicalizePlanFeatureKey;
22
+ private normalizeOptionalCatalogDisplayOrder;
23
+ private listPlanFeatureCatalogOverrideMap;
20
24
  normalizeEntitlementState(value: unknown): EntitlementState;
21
25
  private normalizeFeatureAccess;
22
26
  private readPositiveIntegerConfig;
@@ -27,7 +31,7 @@ export declare class PlanEntitlementService {
27
31
  private isEntitlementStateAllowed;
28
32
  private isIsoTimestampExpired;
29
33
  private readAccountEntitlementRow;
30
- private normalizeExpiredCheckoutPendingRow;
34
+ private normalizeExpiredLifecycleRow;
31
35
  private isBillingConfirmedTransitionSource;
32
36
  private countWorkspaceStorageUsageBytes;
33
37
  private resolveCanonicalTransitionSource;
@@ -36,6 +40,7 @@ export declare class PlanEntitlementService {
36
40
  private repairPlanDefaultVersionIfNeeded;
37
41
  repairPlanCatalogDefaultsIfNeeded(): void;
38
42
  normalizeLegacyPlanDataIfNeeded(): void;
43
+ private renameLegacyWorkspacesFeatureKey;
39
44
  private removeLegacyPlanFeatureRows;
40
45
  private migrateLegacySeatLimitFeatureConfigToVersionSeatLimit;
41
46
  private normalizeLegacyBillingMirrorRows;
@@ -85,6 +90,7 @@ export declare class PlanEntitlementService {
85
90
  private getActiveDefaultPlanVersions;
86
91
  private getDefaultPlanVersionByMode;
87
92
  private tryGetDefaultPlanVersionByMode;
93
+ private getOnboardingPlanSnapshot;
88
94
  getOnboardingPolicy(): OnboardingPolicy;
89
95
  validateOnboardingPolicy(input?: Partial<OnboardingPolicy>): OnboardingPolicyValidationResult;
90
96
  resolveRegistrationOnboardingOutcome(selectedPlanVersionIdRaw?: string): {
@@ -94,6 +100,7 @@ export declare class PlanEntitlementService {
94
100
  planVersionId: string | null;
95
101
  planId: string | null;
96
102
  };
103
+ listOnboardingPlanOptions(): OnboardingPlanOption[];
97
104
  createUserBillingRecord(userId: string, options?: {
98
105
  entitlementState?: string;
99
106
  planId?: string | null;
@@ -106,6 +113,7 @@ export declare class PlanEntitlementService {
106
113
  hasAccountEntitlement(accountId: string): boolean;
107
114
  private tryGetAccountEntitlement;
108
115
  private tryAutoHealLegacyPersonalFreeEntitlement;
116
+ private tryAutoHealCommercialEntitlementFromBillingMirror;
109
117
  getAccountAccessStatus(accountId: string): AccountAccessStatus;
110
118
  getEffectivePlanVersion(accountId: string): PlanVersionSnapshot;
111
119
  getAccountEntitlement(accountId: string): AccountEntitlementSnapshot;
@@ -131,6 +139,11 @@ export declare class PlanEntitlementService {
131
139
  planId: string;
132
140
  entitlementState: EntitlementState;
133
141
  };
142
+ resolveInviteAcceptanceDefaultEntitlement(): {
143
+ planVersionId: string;
144
+ planId: string;
145
+ commercialState: 'active';
146
+ } | null;
134
147
  private isValidEntitlementTransition;
135
148
  addEntitlementAuditLog(input: {
136
149
  actorUserId: string;
@@ -145,6 +158,7 @@ export declare class PlanEntitlementService {
145
158
  upsertPlanCatalog(input: {
146
159
  planId: string;
147
160
  displayName: string;
161
+ description?: string | null;
148
162
  status?: 'active' | 'archived';
149
163
  initialMode?: 'personal' | 'team';
150
164
  initialSeatLimit?: number | null;
@@ -152,10 +166,17 @@ export declare class PlanEntitlementService {
152
166
  }): {
153
167
  planId: string;
154
168
  displayName: string;
169
+ description: string | null;
155
170
  status: 'active' | 'archived';
156
171
  };
157
172
  listPlanCatalog(): PlanCatalogSnapshot[];
158
173
  listPlanFeatureCatalog(): PlanFeatureCatalogItem[];
174
+ updatePlanFeatureCatalogMarketingCopy(input: {
175
+ featureKey: string;
176
+ publicLabel?: string | null;
177
+ publicDescription?: string | null;
178
+ publicDisplayOrder?: number | null;
179
+ }): PlanFeatureCatalogItem;
159
180
  listPlanVersions(planId: string): PlanVersionSnapshot[];
160
181
  getPlanVersionFeatures(planId: string, versionId: string): PlanVersionSnapshot;
161
182
  searchAccountsByEmail(query: string, limit?: number): Array<{