@taskforcehq/taskforce 0.3.304 → 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 (383) hide show
  1. package/README.md +140 -247
  2. package/dist/Taskforce.module.css +295 -89
  3. package/dist/TaskforceCore.js +378 -111
  4. package/dist/TaskforceCore.test.js +1221 -107
  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 +52 -2
  14. package/dist/compat/workspaceSyncCompat.test.js +38 -1
  15. package/dist/components/context/ContextAttachmentManager.d.ts +14 -0
  16. package/dist/components/context/ContextAttachmentManager.js +549 -0
  17. package/dist/components/features/AgentsModule.d.ts +10 -1
  18. package/dist/components/features/AgentsModule.js +260 -15
  19. package/dist/components/features/AgentsModule.test.js +255 -5
  20. package/dist/components/features/DocumentIndex.d.ts +1 -1
  21. package/dist/components/features/DocumentIndex.js +1 -1
  22. package/dist/components/features/DocumentViewer.d.ts +6 -2
  23. package/dist/components/features/DocumentViewer.js +90 -10
  24. package/dist/components/features/DocumentWorkspace.d.ts +5 -22
  25. package/dist/components/features/DocumentWorkspace.js +12 -155
  26. package/dist/components/features/DocumentWorkspace.test.js +226 -6
  27. package/dist/components/features/TaskSettings.js +29 -3
  28. package/dist/components/features/TaskSettings.test.js +42 -1
  29. package/dist/components/features/documentWorkspaceModel.d.ts +24 -0
  30. package/dist/components/features/documentWorkspaceModel.js +57 -0
  31. package/dist/components/features/useDocumentWorkspaceController.d.ts +34 -0
  32. package/dist/components/features/useDocumentWorkspaceController.js +113 -0
  33. package/dist/components/task/TaskCard.js +19 -28
  34. package/dist/components/task/TaskCard.test.js +38 -3
  35. package/dist/components/task/TaskContextUpload.js +4 -526
  36. package/dist/components/task/TaskForm.d.ts +8 -8
  37. package/dist/components/task/TaskForm.js +362 -230
  38. package/dist/components/task/TaskForm.test.js +558 -381
  39. package/dist/components/task/TaskKanban.d.ts +2 -1
  40. package/dist/components/task/TaskKanban.js +96 -14
  41. package/dist/components/task/TaskKanban.test.js +36 -0
  42. package/dist/components/ui/EditableAvatarButton.d.ts +18 -0
  43. package/dist/components/ui/EditableAvatarButton.js +18 -0
  44. package/dist/components/views/PlanComparisonPage.d.ts +9 -1
  45. package/dist/components/views/PlanComparisonPage.js +70 -17
  46. package/dist/components/views/PlanComparisonPage.test.js +289 -41
  47. package/dist/components/views/PlansPage.js +239 -106
  48. package/dist/components/views/PlansPage.test.js +593 -42
  49. package/dist/components/views/StandaloneLayout.js +310 -554
  50. package/dist/components/views/panels/FilterToolbar.test.js +6 -4
  51. package/dist/components/views/panels/PlanningDrawer.d.ts +8 -1
  52. package/dist/components/views/panels/PlanningDrawer.js +18 -11
  53. package/dist/components/views/panels/PlanningDrawer.test.d.ts +1 -0
  54. package/dist/components/views/panels/PlanningDrawer.test.js +141 -0
  55. package/dist/components/views/planningScope.d.ts +20 -0
  56. package/dist/components/views/planningScope.js +25 -0
  57. package/dist/components/views/planningScope.test.d.ts +1 -0
  58. package/dist/components/views/planningScope.test.js +60 -0
  59. package/dist/components/views/standalone/modals/AccountHubModal.d.ts +27 -14
  60. package/dist/components/views/standalone/modals/AccountHubModal.js +87 -15
  61. package/dist/components/views/standalone/modals/AccountHubModal.test.js +42 -2
  62. package/dist/components/views/standalone/modals/AvatarImageManagerModal.d.ts +20 -0
  63. package/dist/components/views/standalone/modals/AvatarImageManagerModal.js +127 -0
  64. package/dist/components/views/standalone/modals/EditProfileModal.d.ts +2 -9
  65. package/dist/components/views/standalone/modals/EditProfileModal.js +3 -2
  66. package/dist/components/views/standalone/modals/SyncEnableWarningModal.d.ts +9 -0
  67. package/dist/components/views/standalone/modals/SyncEnableWarningModal.js +6 -0
  68. package/dist/components/views/standalone/modals/SyncEnableWarningModal.test.d.ts +1 -0
  69. package/dist/components/views/standalone/modals/SyncEnableWarningModal.test.js +24 -0
  70. package/dist/components/views/standalone/modals/SyncStatusModal.d.ts +2 -1
  71. package/dist/components/views/standalone/modals/SyncStatusModal.js +2 -2
  72. package/dist/config/envSchema.js +1 -1
  73. package/dist/core/AiProfileService.d.ts +45 -3
  74. package/dist/core/AiProfileService.js +774 -63
  75. package/dist/core/AiProfileService.test.js +22 -2
  76. package/dist/core/AiProfiles.test.js +761 -2
  77. package/dist/core/AttachmentLinkService.js +57 -15
  78. package/dist/core/AuthIdentityService.d.ts +107 -0
  79. package/dist/core/AuthIdentityService.js +284 -0
  80. package/dist/core/AuthTokenService.d.ts +4 -0
  81. package/dist/core/AuthTokenService.js +34 -6
  82. package/dist/core/AuthTokenService.test.d.ts +1 -0
  83. package/dist/core/AuthTokenService.test.js +78 -0
  84. package/dist/core/EntitlementsPolicy.test.js +77 -15
  85. package/dist/core/GlobalSettingsService.js +115 -6
  86. package/dist/core/PlanEntitlementService.d.ts +30 -3
  87. package/dist/core/PlanEntitlementService.js +454 -93
  88. package/dist/core/PlanFeatureCatalog.test.d.ts +1 -0
  89. package/dist/core/PlanFeatureCatalog.test.js +84 -0
  90. package/dist/core/PlanVersionPolicy.test.js +54 -28
  91. package/dist/core/PlanningEntities.test.js +52 -0
  92. package/dist/core/SignupMonetizationSettings.test.js +241 -44
  93. package/dist/core/SyncReconciliationService.js +2 -65
  94. package/dist/core/SystemAdmin.test.js +244 -88
  95. package/dist/core/TaskAttachmentsCanonical.test.js +51 -1
  96. package/dist/core/TaskTaxonomyValidation.test.js +53 -0
  97. package/dist/core/Taskforce.d.ts +228 -14
  98. package/dist/core/Taskforce.js +814 -201
  99. package/dist/core/Taskforce.listTasksSlim.test.d.ts +1 -0
  100. package/dist/core/Taskforce.listTasksSlim.test.js +91 -0
  101. package/dist/core/UserProfileAvatarDrafts.test.js +30 -3
  102. package/dist/core/WorkspaceLifecycleService.js +0 -5
  103. package/dist/core/WorkspacePermissions.test.js +25 -1
  104. package/dist/core/WorkspacePlanMode.test.js +128 -27
  105. package/dist/core/shared.d.ts +3 -1
  106. package/dist/core/shared.js +16 -1
  107. package/dist/core/types.d.ts +68 -2
  108. package/dist/hooks/auth/useTaskforceAuthBootstrap.js +26 -1
  109. package/dist/hooks/sync/auth.js +3 -1
  110. package/dist/hooks/sync/bootstrap.js +2 -0
  111. package/dist/hooks/sync/controlPlane.d.ts +37 -0
  112. package/dist/hooks/sync/controlPlane.js +78 -0
  113. package/dist/hooks/sync/controlPlane.test.d.ts +1 -0
  114. package/dist/hooks/sync/controlPlane.test.js +121 -0
  115. package/dist/hooks/sync/lifecyclePolicy.d.ts +45 -0
  116. package/dist/hooks/sync/lifecyclePolicy.js +93 -0
  117. package/dist/hooks/sync/lifecyclePolicy.test.d.ts +1 -0
  118. package/dist/hooks/sync/lifecyclePolicy.test.js +124 -0
  119. package/dist/hooks/sync/orchestratorShared.d.ts +10 -1
  120. package/dist/hooks/sync/orchestratorShared.js +68 -47
  121. package/dist/hooks/sync/orchestratorShared.test.js +50 -1
  122. package/dist/hooks/sync/pullLifecycle.d.ts +31 -0
  123. package/dist/hooks/sync/pullLifecycle.js +24 -0
  124. package/dist/hooks/sync/pullLifecycle.test.d.ts +1 -0
  125. package/dist/hooks/sync/pullLifecycle.test.js +80 -0
  126. package/dist/hooks/sync/recovery.d.ts +16 -2
  127. package/dist/hooks/sync/recovery.js +171 -53
  128. package/dist/hooks/sync/recovery.test.d.ts +1 -0
  129. package/dist/hooks/sync/recovery.test.js +292 -0
  130. package/dist/hooks/sync/transfers.d.ts +16 -3
  131. package/dist/hooks/sync/transfers.js +186 -65
  132. package/dist/hooks/sync/transfers.test.d.ts +1 -0
  133. package/dist/hooks/sync/transfers.test.js +396 -0
  134. package/dist/hooks/sync/useRecentSyncEvents.d.ts +21 -0
  135. package/dist/hooks/sync/useRecentSyncEvents.js +92 -0
  136. package/dist/hooks/sync/useRecentSyncEvents.test.d.ts +1 -0
  137. package/dist/hooks/sync/useRecentSyncEvents.test.js +124 -0
  138. package/dist/hooks/sync/useSyncStatusActions.d.ts +30 -0
  139. package/dist/hooks/sync/useSyncStatusActions.js +88 -0
  140. package/dist/hooks/sync/useSyncStatusActions.test.d.ts +1 -0
  141. package/dist/hooks/sync/useSyncStatusActions.test.js +133 -0
  142. package/dist/hooks/sync/useSyncStatusControls.d.ts +25 -0
  143. package/dist/hooks/sync/useSyncStatusControls.js +60 -0
  144. package/dist/hooks/sync/useSyncStatusControls.test.d.ts +1 -0
  145. package/dist/hooks/sync/useSyncStatusControls.test.js +88 -0
  146. package/dist/hooks/useSyncOrchestrator.aiProfiles.test.js +12 -0
  147. package/dist/hooks/useSyncOrchestrator.d.ts +16 -6
  148. package/dist/hooks/useSyncOrchestrator.js +424 -175
  149. package/dist/hooks/useSyncOrchestrator.retry-closure.test.js +487 -10
  150. package/dist/hooks/useTaskData.js +8 -3
  151. package/dist/hooks/useTaskData.test.js +45 -0
  152. package/dist/hooks/useTaskMutations.d.ts +2 -1
  153. package/dist/hooks/useTaskMutations.js +12 -1
  154. package/dist/hooks/useTaskMutations.test.js +30 -1
  155. package/dist/hooks/useTaskforce.d.ts +65 -4
  156. package/dist/hooks/useTaskforce.js +564 -243
  157. package/dist/hooks/useTaskforce.runtime-routing.test.d.ts +1 -0
  158. package/dist/hooks/useTaskforce.runtime-routing.test.js +152 -0
  159. package/dist/hooks/useTaskforce.sync-behavior.test.js +2454 -208
  160. package/dist/hooks/useWorkspaceSyncController.d.ts +4 -1
  161. package/dist/hooks/useWorkspaceSyncController.js +17 -2
  162. package/dist/hooks/useWorkspaceSyncController.test.js +1 -0
  163. package/dist/hooks/workspace/useTaskforceWorkspaceBootstrap.d.ts +16 -0
  164. package/dist/hooks/workspace/useTaskforceWorkspaceBootstrap.js +316 -35
  165. package/dist/localization/locales/en-US.d.ts +0 -1
  166. package/dist/localization/locales/en-US.js +0 -1
  167. package/dist/localization/locales/es-419.js +0 -1
  168. package/dist/localization/locales/pt-BR.js +0 -1
  169. package/dist/mcp/adminWorkspaceRegistrar.d.ts +2 -0
  170. package/dist/mcp/adminWorkspaceRegistrar.js +154 -0
  171. package/dist/mcp/collaborationRegistrar.d.ts +2 -0
  172. package/dist/mcp/collaborationRegistrar.js +71 -0
  173. package/dist/mcp/documentAssetRegistrar.d.ts +2 -0
  174. package/dist/mcp/documentAssetRegistrar.js +346 -0
  175. package/dist/mcp/runtime.d.ts +2 -0
  176. package/dist/mcp/runtime.js +2433 -3534
  177. package/dist/mcp/runtime.test.js +440 -2
  178. package/dist/mcp/taskPlanningRegistrar.d.ts +2 -0
  179. package/dist/mcp/taskPlanningRegistrar.js +418 -0
  180. package/dist/mcp/toolCatalog.d.ts +35 -0
  181. package/dist/mcp/toolCatalog.js +3 -0
  182. package/dist/migrations/taskSchemaMigrations.d.ts +1 -1
  183. package/dist/migrations/taskSchemaMigrations.js +171 -61
  184. package/dist/migrations/taskSchemaMigrations.test.js +15 -0
  185. package/dist/resources/templates/workflow-sources/workflowDocs.mjs +6 -6
  186. package/dist/resources/templates/workflows/collaborate.yaml +1 -1
  187. package/dist/resources/templates/workflows/evaluate.yaml +2 -2
  188. package/dist/resources/templates/workflows/plan.yaml +1 -1
  189. package/dist/resources/templates/workflows/review.yaml +2 -2
  190. package/dist/server/annotatedAttachmentsRoutes.test.js +3 -3
  191. package/dist/server/auth/providers/apple.d.ts +33 -0
  192. package/dist/server/auth/providers/apple.js +82 -0
  193. package/dist/server/auth/providers/appleClientSecret.d.ts +37 -0
  194. package/dist/server/auth/providers/appleClientSecret.js +65 -0
  195. package/dist/server/auth/providers/github.d.ts +26 -0
  196. package/dist/server/auth/providers/github.js +86 -0
  197. package/dist/server/auth/providers/google.d.ts +21 -0
  198. package/dist/server/auth/providers/google.js +56 -0
  199. package/dist/server/auth/providers/types.d.ts +21 -0
  200. package/dist/server/auth/providers/types.js +1 -0
  201. package/dist/server/auth.d.ts +2 -0
  202. package/dist/server/auth.js +6 -3
  203. package/dist/server/documentReviewRoutes.test.js +36 -3
  204. package/dist/server/index.cookieProxy.test.js +1 -0
  205. package/dist/server/index.d.ts +12 -0
  206. package/dist/server/index.js +120 -9
  207. package/dist/server/index.rateLimit.test.js +3 -0
  208. package/dist/server/index.test.js +106 -3
  209. package/dist/server/routes/admin.d.ts +4 -5
  210. package/dist/server/routes/admin.js +410 -80
  211. package/dist/server/routes/annotatedAttachments.d.ts +1 -1
  212. package/dist/server/routes/annotatedAttachments.js +1 -1
  213. package/dist/server/routes/auth.d.ts +16 -6
  214. package/dist/server/routes/auth.js +1015 -118
  215. package/dist/server/routes/authSupport.d.ts +30 -0
  216. package/dist/server/routes/authSupport.js +81 -0
  217. package/dist/server/routes/billing.d.ts +1 -1
  218. package/dist/server/routes/billing.js +276 -34
  219. package/dist/server/routes/billing.test.js +760 -52
  220. package/dist/server/routes/documentReviews.d.ts +1 -1
  221. package/dist/server/routes/documentReviews.js +1 -1
  222. package/dist/server/routes/documents.d.ts +5 -2
  223. package/dist/server/routes/documents.js +242 -74
  224. package/dist/server/routes/primitives.d.ts +11 -0
  225. package/dist/server/routes/primitives.js +73 -0
  226. package/dist/server/routes/resources.d.ts +1 -1
  227. package/dist/server/routes/resources.js +1 -1
  228. package/dist/server/routes/shared.d.ts +29 -3
  229. package/dist/server/routes/shared.js +69 -4
  230. package/dist/server/routes/sync.d.ts +1 -1
  231. package/dist/server/routes/sync.integration.test.js +437 -39
  232. package/dist/server/routes/sync.js +62 -606
  233. package/dist/server/routes/syncAuxRoutes.d.ts +15 -0
  234. package/dist/server/routes/syncAuxRoutes.js +91 -0
  235. package/dist/server/routes/syncAuxRoutes.test.d.ts +1 -0
  236. package/dist/server/routes/syncAuxRoutes.test.js +158 -0
  237. package/dist/server/routes/syncPullApplyRoutes.d.ts +36 -0
  238. package/dist/server/routes/syncPullApplyRoutes.js +204 -0
  239. package/dist/server/routes/syncPushRoutes.d.ts +24 -0
  240. package/dist/server/routes/syncPushRoutes.js +212 -0
  241. package/dist/server/routes/syncRouteGuards.d.ts +36 -0
  242. package/dist/server/routes/syncRouteGuards.js +67 -0
  243. package/dist/server/routes/syncRouteGuards.test.d.ts +1 -0
  244. package/dist/server/routes/syncRouteGuards.test.js +94 -0
  245. package/dist/server/routes/syncRouteTypes.d.ts +13 -0
  246. package/dist/server/routes/syncRouteTypes.js +1 -0
  247. package/dist/server/routes/syncSnapshotRoutes.d.ts +66 -0
  248. package/dist/server/routes/syncSnapshotRoutes.js +180 -0
  249. package/dist/server/routes/tasks.d.ts +1 -1
  250. package/dist/server/routes/tasks.js +44 -2
  251. package/dist/server/routes/workspaces.d.ts +1 -1
  252. package/dist/server/routes/workspaces.js +37 -6
  253. package/dist/server/routes.d.ts +2 -9
  254. package/dist/server/routes.js +136 -165
  255. package/dist/server/routes.test.js +2457 -162
  256. package/dist/services/workflowExportSnapshots.test.js +2 -0
  257. package/dist/shared/aiProfileSeatScope.d.ts +5 -0
  258. package/dist/shared/aiProfileSeatScope.js +21 -0
  259. package/dist/shared/passwordPolicy.d.ts +13 -0
  260. package/dist/shared/passwordPolicy.js +84 -0
  261. package/dist/shared/passwordPolicy.test.d.ts +1 -0
  262. package/dist/shared/passwordPolicy.test.js +34 -0
  263. package/dist/storage/workspaceAssetStore.d.ts +15 -3
  264. package/dist/storage/workspaceAssetStore.js +132 -44
  265. package/dist/storage/workspaceAssetStore.test.js +93 -6
  266. package/dist/styles/fonts.css +70 -0
  267. package/dist/sync/collaborationSyncPayload.d.ts +6 -1
  268. package/dist/sync/collaborationSyncPayload.js +17 -11
  269. package/dist/sync/collaborationSyncPayload.test.js +13 -1
  270. package/dist/sync/contentSyncState.d.ts +4 -8
  271. package/dist/sync/contentSyncState.js +33 -77
  272. package/dist/sync/syncApplyHandlers.d.ts +7 -0
  273. package/dist/sync/syncApplyHandlers.js +28 -13
  274. package/dist/sync/syncApplyHandlers.test.js +72 -3
  275. package/dist/sync/syncFieldSemantics.d.ts +12 -0
  276. package/dist/sync/syncFieldSemantics.js +55 -0
  277. package/dist/sync/syncResourceAdapters.d.ts +44 -0
  278. package/dist/sync/syncResourceAdapters.js +77 -0
  279. package/dist/sync/syncService.d.ts +6 -0
  280. package/dist/sync/syncService.js +60 -0
  281. package/dist/sync/syncService.test.js +71 -3
  282. package/dist/sync/taskSyncChangeKey.d.ts +2 -0
  283. package/dist/sync/taskSyncChangeKey.js +143 -0
  284. package/dist/sync/taskSyncPayload.js +3 -8
  285. package/dist/sync/workspacePullFeed.js +4 -3
  286. package/dist/sync/workspacePullFeed.test.js +43 -0
  287. package/dist/sync/workspaceRepair.js +5 -2
  288. package/dist/sync/workspaceSyncModel.d.ts +48 -0
  289. package/dist/sync/workspaceSyncModel.js +195 -31
  290. package/dist/sync/workspaceSyncModel.test.js +325 -12
  291. package/dist/sync/workspaceSyncState.d.ts +19 -0
  292. package/dist/sync/workspaceSyncState.js +3 -1
  293. package/dist/sync/workspaceSyncSurface.js +3 -8
  294. package/dist/types.d.ts +17 -0
  295. package/dist/ui/assets/AgentsModule-DrLawwNl.js +1 -0
  296. package/dist/ui/assets/{AnnotatedAttachmentWorkspace-BlS-cqnl.js → AnnotatedAttachmentWorkspace-Z9_whf7F.js} +1 -1
  297. package/dist/ui/assets/CourierPrime-Bold-BuLj_dpw.woff2 +0 -0
  298. package/dist/ui/assets/CourierPrime-BoldItalic-BrK2pUkZ.woff2 +0 -0
  299. package/dist/ui/assets/CourierPrime-Italic-DFUZK5Ey.woff2 +0 -0
  300. package/dist/ui/assets/CourierPrime-Regular-BsKphzVf.woff2 +0 -0
  301. package/dist/ui/assets/DocumentWorkspace-B03MaSkw.js +252 -0
  302. package/dist/ui/assets/DocumentWorkspace-Dhdso07p.css +1 -0
  303. package/dist/ui/assets/{InitiativesModule-BjR6iBf9.js → InitiativesModule-9E6ParrY.js} +1 -1
  304. package/dist/ui/assets/Noir_medium-bxQwKGzB.woff2 +0 -0
  305. package/dist/ui/assets/Noir_regular-ojf2kxlG.woff2 +0 -0
  306. package/dist/ui/assets/PlansPage-CvfnMiWq.css +1 -0
  307. package/dist/ui/assets/PlansPage-DRXscYxH.js +1 -0
  308. package/dist/ui/assets/RussoOne-Regular-Cu_qq_qC.woff2 +0 -0
  309. package/dist/ui/assets/SpecialElite-Regular-Di6gSvAS.woff2 +0 -0
  310. package/dist/ui/assets/TaskSettings-DZX4jk7e.js +9 -0
  311. package/dist/ui/assets/{WorkflowsModule-DnFqdUME.js → WorkflowsModule-BA7jcEpH.js} +1 -1
  312. package/dist/ui/assets/index-9eT8e0Lu.css +1 -0
  313. package/dist/ui/assets/index-C6k75jr8.js +6 -0
  314. package/dist/ui/assets/{vendor-icons-I7ZwG1z_.js → vendor-icons-DuEd_65c.js} +1 -1
  315. package/dist/ui/fonts/CourierPrime-Bold.ttf +0 -0
  316. package/dist/ui/fonts/CourierPrime-Bold.woff2 +0 -0
  317. package/dist/ui/fonts/CourierPrime-BoldItalic.ttf +0 -0
  318. package/dist/ui/fonts/CourierPrime-BoldItalic.woff2 +0 -0
  319. package/dist/ui/fonts/CourierPrime-Italic.ttf +0 -0
  320. package/dist/ui/fonts/CourierPrime-Italic.woff2 +0 -0
  321. package/dist/ui/fonts/CourierPrime-Regular.ttf +0 -0
  322. package/dist/ui/fonts/CourierPrime-Regular.woff2 +0 -0
  323. package/dist/ui/fonts/Noir_medium.otf +0 -0
  324. package/dist/ui/fonts/Noir_medium.woff2 +0 -0
  325. package/dist/ui/fonts/Noir_regular.otf +0 -0
  326. package/dist/ui/fonts/Noir_regular.woff2 +0 -0
  327. package/dist/ui/fonts/RussoOne-Regular.woff2 +0 -0
  328. package/dist/ui/fonts/SpecialElite-Regular.ttf +0 -0
  329. package/dist/ui/fonts/SpecialElite-Regular.woff2 +0 -0
  330. package/dist/ui/index.html +3 -3
  331. package/dist/utils/accountProfileSummaryCache.d.ts +5 -0
  332. package/dist/utils/assignees.d.ts +2 -0
  333. package/dist/utils/assignees.js +2 -0
  334. package/dist/utils/avatarUpload.d.ts +27 -0
  335. package/dist/utils/avatarUpload.js +132 -0
  336. package/dist/utils/avatarUpload.test.d.ts +1 -0
  337. package/dist/utils/avatarUpload.test.js +40 -0
  338. package/dist/utils/bootstrapTrace.d.ts +7 -0
  339. package/dist/utils/bootstrapTrace.js +29 -0
  340. package/dist/utils/commercialLifecyclePresentation.d.ts +19 -0
  341. package/dist/utils/commercialLifecyclePresentation.js +199 -0
  342. package/dist/utils/contextAssetEvents.d.ts +2 -0
  343. package/dist/utils/syncEventDetails.d.ts +3 -0
  344. package/dist/utils/syncEventDetails.js +64 -0
  345. package/dist/utils/syncEventDetails.test.d.ts +1 -0
  346. package/dist/utils/syncEventDetails.test.js +23 -0
  347. package/dist/utils/syncEventPresentation.d.ts +15 -0
  348. package/dist/utils/syncEventPresentation.js +129 -0
  349. package/dist/utils/syncEventPresentation.test.d.ts +1 -0
  350. package/dist/utils/syncEventPresentation.test.js +64 -0
  351. package/dist/utils/syncStatusPresentation.d.ts +72 -0
  352. package/dist/utils/syncStatusPresentation.js +217 -0
  353. package/dist/utils/syncStatusPresentation.test.d.ts +1 -0
  354. package/dist/utils/syncStatusPresentation.test.js +164 -0
  355. package/dist/utils/taskActivity.d.ts +2 -0
  356. package/dist/utils/taskActivity.js +228 -22
  357. package/dist/utils/taskActivity.test.js +119 -8
  358. package/dist/utils/workspaceSyncPresentation.d.ts +4 -0
  359. package/dist/utils/workspaceSyncPresentation.js +68 -2
  360. package/dist/utils/workspaceSyncPresentation.test.js +36 -1
  361. package/package.json +10 -2
  362. package/scripts/check-cloud-mcp.mjs +83 -0
  363. package/scripts/export-sqlite-to-postgres.mjs +7 -9
  364. package/scripts/playwright-auth.sh +5 -1
  365. package/scripts/run-billing-performance-smoke.sh +24 -0
  366. package/scripts/run-e2e-realtime.sh +17 -3
  367. package/scripts/run-smoke.sh +17 -5
  368. package/scripts/run-soak.sh +17 -5
  369. package/src/resources/templates/workflow-sources/workflowDocs.mjs +6 -6
  370. package/src/resources/templates/workflows/collaborate.yaml +1 -1
  371. package/src/resources/templates/workflows/evaluate.yaml +2 -2
  372. package/src/resources/templates/workflows/plan.yaml +1 -1
  373. package/src/resources/templates/workflows/review.yaml +2 -2
  374. package/dist/ui/assets/AgentsModule-BLWVbuKP.js +0 -1
  375. package/dist/ui/assets/DocumentWorkspace-BH_6DF6x.js +0 -250
  376. package/dist/ui/assets/DocumentWorkspace-C_8T8oz-.css +0 -1
  377. package/dist/ui/assets/PlansPage-C2dd2n1X.css +0 -1
  378. package/dist/ui/assets/PlansPage-CSDQ4sLa.js +0 -1
  379. package/dist/ui/assets/RussoOne-Regular-C3BxZIj7.ttf +0 -0
  380. package/dist/ui/assets/TaskSettings-CEDy34Jo.js +0 -9
  381. package/dist/ui/assets/index-DXUdtH1B.js +0 -6
  382. package/dist/ui/assets/index-Ii0B0rTO.css +0 -1
  383. package/scripts/migrate-planning-model.ts +0 -233
@@ -3,6 +3,7 @@ import fs from 'fs';
3
3
  import os from 'os';
4
4
  import path from 'path';
5
5
  import { TaskforceCore, TaskforceRuleError } from './Taskforce';
6
+ import { WorkspaceAssetStore } from '../storage/workspaceAssetStore.js';
6
7
  function makeProjectRoot() {
7
8
  return fs.mkdtempSync(path.join(os.tmpdir(), 'taskforce-entitlements-'));
8
9
  }
@@ -20,24 +21,24 @@ function openCore(projectRoot) {
20
21
  ) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?)
21
22
  `).run('default', planVersionId, 'month', `free:${planVersionId}:month`, 'free', 1, 0, null, now, now);
22
23
  };
23
- core.upsertPlanCatalog({ planId: 'starter', displayName: 'Starter' });
24
- addFreeMapping('starter-v1');
25
- core.upsertPlanCatalog({ planId: 'starter', displayName: 'Starter', status: 'active' });
26
- core.upsertPlanCatalog({ planId: 'collab', displayName: 'Collab' });
27
- addFreeMapping('collab-v1');
28
- core.upsertPlanCatalog({ planId: 'collab', displayName: 'Collab', status: 'active' });
24
+ core.upsertPlanCatalog({ planId: 'free', displayName: 'Free' });
25
+ addFreeMapping('free-v1');
26
+ core.upsertPlanCatalog({ planId: 'free', displayName: 'Free', status: 'active' });
27
+ core.upsertPlanCatalog({ planId: 'team-5', displayName: 'Team 5' });
28
+ addFreeMapping('team-5-v1');
29
+ core.upsertPlanCatalog({ planId: 'team-5', displayName: 'Team 5', status: 'active' });
29
30
  core.createPlanVersion({
30
- planId: 'collab',
31
+ planId: 'team-5',
31
32
  versionNumber: 2,
32
33
  isDefault: true,
33
34
  seatLimit: 5
34
35
  });
35
36
  core.updatePlanVersionFeatures({
36
- planVersionId: 'collab-v2',
37
+ planVersionId: 'team-5-v2',
37
38
  features: [
38
39
  { featureKey: 'collaboration.invites', access: 'enabled' },
39
40
  { featureKey: 'collaboration.team_management', access: 'enabled' },
40
- { featureKey: 'workspace.switching', access: 'enabled' }
41
+ { featureKey: 'workspace.workspaces', access: 'enabled' }
41
42
  ]
42
43
  });
43
44
  return core;
@@ -139,13 +140,13 @@ describe('Taskforce entitlements policy engine', () => {
139
140
  email: 'owner@example.com'
140
141
  });
141
142
  core.createPlanVersion({
142
- planId: 'collab',
143
+ planId: 'team-5',
143
144
  versionNumber: 3,
144
145
  isDefault: false,
145
146
  seatLimit: 2
146
147
  });
147
148
  core.updatePlanVersionFeatures({
148
- planVersionId: 'collab-v3',
149
+ planVersionId: 'team-5-v3',
149
150
  features: [
150
151
  { featureKey: 'collaboration.invites', access: 'enabled' },
151
152
  { featureKey: 'collaboration.team_management', access: 'enabled' },
@@ -154,7 +155,7 @@ describe('Taskforce entitlements policy engine', () => {
154
155
  });
155
156
  core.updateAccountEntitlement({
156
157
  accountId: 'owner-u1',
157
- planVersionId: 'collab-v3',
158
+ planVersionId: 'team-5-v3',
158
159
  entitlementState: 'active',
159
160
  actorUserId: 'system-admin',
160
161
  actorRole: 'system_admin'
@@ -184,9 +185,9 @@ describe('Taskforce entitlements policy engine', () => {
184
185
  const core = openCore(projectRoot);
185
186
  try {
186
187
  core.updatePlanVersionFeatures({
187
- planVersionId: 'starter-v1',
188
+ planVersionId: 'free-v1',
188
189
  features: [
189
- { featureKey: 'workspace.switching', access: 'limited', config: { maxWorkspaces: 1 } }
190
+ { featureKey: 'workspace.workspaces', access: 'limited', config: { maxWorkspaces: 1 } }
190
191
  ]
191
192
  });
192
193
  core.createWorkspace({ workspaceId: 'workspace-one', name: 'Workspace One' });
@@ -198,7 +199,7 @@ describe('Taskforce entitlements policy engine', () => {
198
199
  });
199
200
  core.updateAccountEntitlement({
200
201
  accountId: 'owner-u1',
201
- planVersionId: 'starter-v1',
202
+ planVersionId: 'free-v1',
202
203
  entitlementState: 'active',
203
204
  actorUserId: 'system-admin',
204
205
  actorRole: 'system_admin'
@@ -215,4 +216,65 @@ describe('Taskforce entitlements policy engine', () => {
215
216
  fs.rmSync(projectRoot, { recursive: true, force: true });
216
217
  }
217
218
  });
219
+ it('enforces limited document cloud storage allowances by current usage plus requested upload size', () => {
220
+ const projectRoot = makeProjectRoot();
221
+ const core = openCore(projectRoot);
222
+ try {
223
+ core.updatePlanVersionFeatures({
224
+ planVersionId: 'free-v1',
225
+ features: [
226
+ { featureKey: 'context.uploads', access: 'limited', config: { storageLimitMb: 1 } }
227
+ ]
228
+ });
229
+ core.createWorkspace({ workspaceId: 'workspace-storage', name: 'Storage Workspace' });
230
+ core.ensureBootstrapUserAccess({
231
+ userId: 'owner-u1',
232
+ workspaceId: 'workspace-storage',
233
+ role: 'owner',
234
+ email: 'owner@example.com'
235
+ });
236
+ core.updateAccountEntitlement({
237
+ accountId: 'owner-u1',
238
+ planVersionId: 'free-v1',
239
+ entitlementState: 'active',
240
+ actorUserId: 'system-admin',
241
+ actorRole: 'system_admin'
242
+ });
243
+ const store = new WorkspaceAssetStore(core.getDatabaseAdapter(), core.getTenantId());
244
+ store.upsertAsset({
245
+ assetId: 'asset-storage-1',
246
+ workspaceId: 'workspace-storage',
247
+ kind: 'document',
248
+ originalFilename: 'existing.pdf',
249
+ mimeType: 'application/pdf',
250
+ storageProvider: 'local',
251
+ storageKey: 'workspaces/workspace-storage/assets/documents/asset-storage-1-existing.pdf',
252
+ contentSha256: 'existing-hash',
253
+ sizeBytes: 900_000,
254
+ documentId: 'document-storage-1',
255
+ version: 1,
256
+ isLatest: true
257
+ });
258
+ const withinLimit = core.evaluateFeatureAccess({
259
+ userId: 'owner-u1',
260
+ workspaceId: 'workspace-storage',
261
+ featureKey: 'context.uploads',
262
+ context: { requestedBytes: 100_000 }
263
+ });
264
+ expect(withinLimit.allowed).toBe(true);
265
+ expect(withinLimit.reasonCode).toBe('OK');
266
+ const overLimit = core.evaluateFeatureAccess({
267
+ userId: 'owner-u1',
268
+ workspaceId: 'workspace-storage',
269
+ featureKey: 'context.uploads',
270
+ context: { requestedBytes: 200_000 }
271
+ });
272
+ expect(overLimit.allowed).toBe(false);
273
+ expect(overLimit.reasonCode).toBe('UPLOAD_STORAGE_LIMIT_REACHED');
274
+ }
275
+ finally {
276
+ core.close();
277
+ fs.rmSync(projectRoot, { recursive: true, force: true });
278
+ }
279
+ });
218
280
  });
@@ -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;
@@ -231,6 +237,57 @@ export function getGlobalSettingsService(deps) {
231
237
  : {})
232
238
  }
233
239
  }
240
+ : {}),
241
+ ...(global.oauthProviders && typeof global.oauthProviders === 'object'
242
+ ? {
243
+ oauthProviders: {
244
+ ...(global.oauthProviders.google && typeof global.oauthProviders.google === 'object'
245
+ ? {
246
+ google: {
247
+ ...(typeof global.oauthProviders.google.enabled === 'boolean' ? { enabled: global.oauthProviders.google.enabled } : {}),
248
+ ...(typeof global.oauthProviders.google.clientId === 'string' && global.oauthProviders.google.clientId.trim()
249
+ ? { clientId: global.oauthProviders.google.clientId.trim() }
250
+ : {}),
251
+ ...(typeof global.oauthProviders.google.clientSecret === 'string' && global.oauthProviders.google.clientSecret.trim()
252
+ ? { clientSecret: global.oauthProviders.google.clientSecret.trim() }
253
+ : {})
254
+ }
255
+ }
256
+ : {}),
257
+ ...(global.oauthProviders.github && typeof global.oauthProviders.github === 'object'
258
+ ? {
259
+ github: {
260
+ ...(typeof global.oauthProviders.github.enabled === 'boolean' ? { enabled: global.oauthProviders.github.enabled } : {}),
261
+ ...(typeof global.oauthProviders.github.clientId === 'string' && global.oauthProviders.github.clientId.trim()
262
+ ? { clientId: global.oauthProviders.github.clientId.trim() }
263
+ : {}),
264
+ ...(typeof global.oauthProviders.github.clientSecret === 'string' && global.oauthProviders.github.clientSecret.trim()
265
+ ? { clientSecret: global.oauthProviders.github.clientSecret.trim() }
266
+ : {})
267
+ }
268
+ }
269
+ : {}),
270
+ ...(global.oauthProviders.apple && typeof global.oauthProviders.apple === 'object'
271
+ ? {
272
+ apple: {
273
+ ...(typeof global.oauthProviders.apple.enabled === 'boolean' ? { enabled: global.oauthProviders.apple.enabled } : {}),
274
+ ...(typeof global.oauthProviders.apple.servicesId === 'string' && global.oauthProviders.apple.servicesId.trim()
275
+ ? { servicesId: global.oauthProviders.apple.servicesId.trim() }
276
+ : {}),
277
+ ...(typeof global.oauthProviders.apple.teamId === 'string' && global.oauthProviders.apple.teamId.trim()
278
+ ? { teamId: global.oauthProviders.apple.teamId.trim() }
279
+ : {}),
280
+ ...(typeof global.oauthProviders.apple.keyId === 'string' && global.oauthProviders.apple.keyId.trim()
281
+ ? { keyId: global.oauthProviders.apple.keyId.trim() }
282
+ : {}),
283
+ ...(typeof global.oauthProviders.apple.privateKeyPem === 'string' && global.oauthProviders.apple.privateKeyPem.trim()
284
+ ? { privateKeyPem: global.oauthProviders.apple.privateKeyPem.trim() }
285
+ : {})
286
+ }
287
+ }
288
+ : {})
289
+ }
290
+ }
234
291
  : {})
235
292
  };
236
293
  }
@@ -362,8 +419,8 @@ export function updateGlobalSettingsService(deps, settings) {
362
419
  || currentBilling.onboardingPolicy.mode === 'auto_start_trial')
363
420
  ? {
364
421
  mode: currentBilling.onboardingPolicy.mode,
365
- planVersionId: typeof currentBilling.onboardingPolicy.planVersionId === 'string'
366
- ? (currentBilling.onboardingPolicy.planVersionId.trim() || null)
422
+ planId: typeof currentBilling.onboardingPolicy.planId === 'string'
423
+ ? (currentBilling.onboardingPolicy.planId.trim() || null)
367
424
  : null
368
425
  }
369
426
  : null;
@@ -373,8 +430,8 @@ export function updateGlobalSettingsService(deps, settings) {
373
430
  || incoming.onboardingPolicy.mode === 'auto_start_trial')
374
431
  ? {
375
432
  mode: incoming.onboardingPolicy.mode,
376
- planVersionId: typeof incoming.onboardingPolicy.planVersionId === 'string'
377
- ? (incoming.onboardingPolicy.planVersionId.trim() || null)
433
+ planId: typeof incoming.onboardingPolicy.planId === 'string'
434
+ ? (incoming.onboardingPolicy.planId.trim() || null)
378
435
  : null
379
436
  }
380
437
  : null;
@@ -426,5 +483,57 @@ export function updateGlobalSettingsService(deps, settings) {
426
483
  : {})
427
484
  };
428
485
  }
486
+ if (settings.oauthProviders && typeof settings.oauthProviders === 'object') {
487
+ const currentProviders = next.oauthProviders && typeof next.oauthProviders === 'object' ? next.oauthProviders : {};
488
+ const incoming = settings.oauthProviders;
489
+ next.oauthProviders = { ...currentProviders };
490
+ if (incoming.google && typeof incoming.google === 'object') {
491
+ const cur = currentProviders.google && typeof currentProviders.google === 'object' ? currentProviders.google : {};
492
+ next.oauthProviders.google = {
493
+ ...cur,
494
+ ...(typeof incoming.google.enabled === 'boolean' ? { enabled: incoming.google.enabled } : {}),
495
+ ...(typeof incoming.google.clientId === 'string' ? { clientId: incoming.google.clientId.trim() } : {}),
496
+ ...(typeof incoming.google.clientSecret === 'string'
497
+ ? (incoming.google.clientSecret.trim()
498
+ ? { clientSecret: incoming.google.clientSecret.trim() }
499
+ : { clientSecret: undefined })
500
+ : {})
501
+ };
502
+ if (!next.oauthProviders.google.clientSecret)
503
+ delete next.oauthProviders.google.clientSecret;
504
+ }
505
+ if (incoming.github && typeof incoming.github === 'object') {
506
+ const cur = currentProviders.github && typeof currentProviders.github === 'object' ? currentProviders.github : {};
507
+ next.oauthProviders.github = {
508
+ ...cur,
509
+ ...(typeof incoming.github.enabled === 'boolean' ? { enabled: incoming.github.enabled } : {}),
510
+ ...(typeof incoming.github.clientId === 'string' ? { clientId: incoming.github.clientId.trim() } : {}),
511
+ ...(typeof incoming.github.clientSecret === 'string'
512
+ ? (incoming.github.clientSecret.trim()
513
+ ? { clientSecret: incoming.github.clientSecret.trim() }
514
+ : { clientSecret: undefined })
515
+ : {})
516
+ };
517
+ if (!next.oauthProviders.github.clientSecret)
518
+ delete next.oauthProviders.github.clientSecret;
519
+ }
520
+ if (incoming.apple && typeof incoming.apple === 'object') {
521
+ const cur = currentProviders.apple && typeof currentProviders.apple === 'object' ? currentProviders.apple : {};
522
+ next.oauthProviders.apple = {
523
+ ...cur,
524
+ ...(typeof incoming.apple.enabled === 'boolean' ? { enabled: incoming.apple.enabled } : {}),
525
+ ...(typeof incoming.apple.servicesId === 'string' ? { servicesId: incoming.apple.servicesId.trim() } : {}),
526
+ ...(typeof incoming.apple.teamId === 'string' ? { teamId: incoming.apple.teamId.trim() } : {}),
527
+ ...(typeof incoming.apple.keyId === 'string' ? { keyId: incoming.apple.keyId.trim() } : {}),
528
+ ...(typeof incoming.apple.privateKeyPem === 'string'
529
+ ? (incoming.apple.privateKeyPem.trim()
530
+ ? { privateKeyPem: incoming.apple.privateKeyPem.trim() }
531
+ : { privateKeyPem: undefined })
532
+ : {})
533
+ };
534
+ if (!next.oauthProviders.apple.privateKeyPem)
535
+ delete next.oauthProviders.apple.privateKeyPem;
536
+ }
537
+ }
429
538
  writeGlobalConfigService(deps, next);
430
539
  }
@@ -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,14 +31,16 @@ 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;
36
+ private countWorkspaceStorageUsageBytes;
32
37
  private resolveCanonicalTransitionSource;
33
38
  private resolvePendingPlanVersionId;
34
39
  private buildBlockedAccessStatus;
35
40
  private repairPlanDefaultVersionIfNeeded;
36
41
  repairPlanCatalogDefaultsIfNeeded(): void;
37
42
  normalizeLegacyPlanDataIfNeeded(): void;
43
+ private renameLegacyWorkspacesFeatureKey;
38
44
  private removeLegacyPlanFeatureRows;
39
45
  private migrateLegacySeatLimitFeatureConfigToVersionSeatLimit;
40
46
  private normalizeLegacyBillingMirrorRows;
@@ -73,6 +79,10 @@ export declare class PlanEntitlementService {
73
79
  limit: number | null;
74
80
  feature: PlanFeatureSnapshot | null;
75
81
  };
82
+ resolveAiProfileLimitForWorkspace(workspaceId: string): {
83
+ limit: number | null;
84
+ feature: PlanFeatureSnapshot | null;
85
+ };
76
86
  private planHasAnyActivePricing;
77
87
  private planVersionHasActiveFreePricing;
78
88
  private planVersionIsTrialEligible;
@@ -80,7 +90,7 @@ export declare class PlanEntitlementService {
80
90
  private getActiveDefaultPlanVersions;
81
91
  private getDefaultPlanVersionByMode;
82
92
  private tryGetDefaultPlanVersionByMode;
83
- private tryGetImplicitFreeOnboardingPlanVersion;
93
+ private getOnboardingPlanSnapshot;
84
94
  getOnboardingPolicy(): OnboardingPolicy;
85
95
  validateOnboardingPolicy(input?: Partial<OnboardingPolicy>): OnboardingPolicyValidationResult;
86
96
  resolveRegistrationOnboardingOutcome(selectedPlanVersionIdRaw?: string): {
@@ -90,6 +100,7 @@ export declare class PlanEntitlementService {
90
100
  planVersionId: string | null;
91
101
  planId: string | null;
92
102
  };
103
+ listOnboardingPlanOptions(): OnboardingPlanOption[];
93
104
  createUserBillingRecord(userId: string, options?: {
94
105
  entitlementState?: string;
95
106
  planId?: string | null;
@@ -101,12 +112,15 @@ export declare class PlanEntitlementService {
101
112
  };
102
113
  hasAccountEntitlement(accountId: string): boolean;
103
114
  private tryGetAccountEntitlement;
115
+ private tryAutoHealLegacyPersonalFreeEntitlement;
116
+ private tryAutoHealCommercialEntitlementFromBillingMirror;
104
117
  getAccountAccessStatus(accountId: string): AccountAccessStatus;
105
118
  getEffectivePlanVersion(accountId: string): PlanVersionSnapshot;
106
119
  getAccountEntitlement(accountId: string): AccountEntitlementSnapshot;
107
120
  countWorkspaceSeatUsage(workspaceId: string, options?: {
108
121
  includeInvited?: boolean;
109
122
  }): SeatUsageSnapshot;
123
+ countAiProfileUsage(workspaceId: string): SeatUsageSnapshot;
110
124
  assertSeatAvailable(workspaceId: string): void;
111
125
  evaluateFeatureAccess(input: {
112
126
  userId: string;
@@ -125,6 +139,11 @@ export declare class PlanEntitlementService {
125
139
  planId: string;
126
140
  entitlementState: EntitlementState;
127
141
  };
142
+ resolveInviteAcceptanceDefaultEntitlement(): {
143
+ planVersionId: string;
144
+ planId: string;
145
+ commercialState: 'active';
146
+ } | null;
128
147
  private isValidEntitlementTransition;
129
148
  addEntitlementAuditLog(input: {
130
149
  actorUserId: string;
@@ -139,6 +158,7 @@ export declare class PlanEntitlementService {
139
158
  upsertPlanCatalog(input: {
140
159
  planId: string;
141
160
  displayName: string;
161
+ description?: string | null;
142
162
  status?: 'active' | 'archived';
143
163
  initialMode?: 'personal' | 'team';
144
164
  initialSeatLimit?: number | null;
@@ -146,10 +166,17 @@ export declare class PlanEntitlementService {
146
166
  }): {
147
167
  planId: string;
148
168
  displayName: string;
169
+ description: string | null;
149
170
  status: 'active' | 'archived';
150
171
  };
151
172
  listPlanCatalog(): PlanCatalogSnapshot[];
152
173
  listPlanFeatureCatalog(): PlanFeatureCatalogItem[];
174
+ updatePlanFeatureCatalogMarketingCopy(input: {
175
+ featureKey: string;
176
+ publicLabel?: string | null;
177
+ publicDescription?: string | null;
178
+ publicDisplayOrder?: number | null;
179
+ }): PlanFeatureCatalogItem;
153
180
  listPlanVersions(planId: string): PlanVersionSnapshot[];
154
181
  getPlanVersionFeatures(planId: string, versionId: string): PlanVersionSnapshot;
155
182
  searchAccountsByEmail(query: string, limit?: number): Array<{