@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.
- package/README.md +140 -247
- package/dist/Taskforce.module.css +295 -89
- package/dist/TaskforceCore.js +378 -111
- package/dist/TaskforceCore.test.js +1221 -107
- package/dist/assets/fonts/CourierPrime-Bold.woff2 +0 -0
- package/dist/assets/fonts/CourierPrime-BoldItalic.woff2 +0 -0
- package/dist/assets/fonts/CourierPrime-Italic.woff2 +0 -0
- package/dist/assets/fonts/CourierPrime-Regular.woff2 +0 -0
- package/dist/assets/fonts/Noir_medium.woff2 +0 -0
- package/dist/assets/fonts/Noir_regular.woff2 +0 -0
- package/dist/assets/fonts/RussoOne-Regular.woff2 +0 -0
- package/dist/assets/fonts/SpecialElite-Regular.woff2 +0 -0
- package/dist/compat/workspaceSyncCompat.js +52 -2
- package/dist/compat/workspaceSyncCompat.test.js +38 -1
- package/dist/components/context/ContextAttachmentManager.d.ts +14 -0
- package/dist/components/context/ContextAttachmentManager.js +549 -0
- package/dist/components/features/AgentsModule.d.ts +10 -1
- package/dist/components/features/AgentsModule.js +260 -15
- package/dist/components/features/AgentsModule.test.js +255 -5
- package/dist/components/features/DocumentIndex.d.ts +1 -1
- package/dist/components/features/DocumentIndex.js +1 -1
- package/dist/components/features/DocumentViewer.d.ts +6 -2
- package/dist/components/features/DocumentViewer.js +90 -10
- package/dist/components/features/DocumentWorkspace.d.ts +5 -22
- package/dist/components/features/DocumentWorkspace.js +12 -155
- package/dist/components/features/DocumentWorkspace.test.js +226 -6
- package/dist/components/features/TaskSettings.js +29 -3
- package/dist/components/features/TaskSettings.test.js +42 -1
- package/dist/components/features/documentWorkspaceModel.d.ts +24 -0
- package/dist/components/features/documentWorkspaceModel.js +57 -0
- package/dist/components/features/useDocumentWorkspaceController.d.ts +34 -0
- package/dist/components/features/useDocumentWorkspaceController.js +113 -0
- package/dist/components/task/TaskCard.js +19 -28
- package/dist/components/task/TaskCard.test.js +38 -3
- package/dist/components/task/TaskContextUpload.js +4 -526
- package/dist/components/task/TaskForm.d.ts +8 -8
- package/dist/components/task/TaskForm.js +362 -230
- package/dist/components/task/TaskForm.test.js +558 -381
- package/dist/components/task/TaskKanban.d.ts +2 -1
- package/dist/components/task/TaskKanban.js +96 -14
- package/dist/components/task/TaskKanban.test.js +36 -0
- package/dist/components/ui/EditableAvatarButton.d.ts +18 -0
- package/dist/components/ui/EditableAvatarButton.js +18 -0
- package/dist/components/views/PlanComparisonPage.d.ts +9 -1
- package/dist/components/views/PlanComparisonPage.js +70 -17
- package/dist/components/views/PlanComparisonPage.test.js +289 -41
- package/dist/components/views/PlansPage.js +239 -106
- package/dist/components/views/PlansPage.test.js +593 -42
- package/dist/components/views/StandaloneLayout.js +310 -554
- package/dist/components/views/panels/FilterToolbar.test.js +6 -4
- package/dist/components/views/panels/PlanningDrawer.d.ts +8 -1
- package/dist/components/views/panels/PlanningDrawer.js +18 -11
- package/dist/components/views/panels/PlanningDrawer.test.d.ts +1 -0
- package/dist/components/views/panels/PlanningDrawer.test.js +141 -0
- package/dist/components/views/planningScope.d.ts +20 -0
- package/dist/components/views/planningScope.js +25 -0
- package/dist/components/views/planningScope.test.d.ts +1 -0
- package/dist/components/views/planningScope.test.js +60 -0
- package/dist/components/views/standalone/modals/AccountHubModal.d.ts +27 -14
- package/dist/components/views/standalone/modals/AccountHubModal.js +87 -15
- package/dist/components/views/standalone/modals/AccountHubModal.test.js +42 -2
- package/dist/components/views/standalone/modals/AvatarImageManagerModal.d.ts +20 -0
- package/dist/components/views/standalone/modals/AvatarImageManagerModal.js +127 -0
- package/dist/components/views/standalone/modals/EditProfileModal.d.ts +2 -9
- package/dist/components/views/standalone/modals/EditProfileModal.js +3 -2
- package/dist/components/views/standalone/modals/SyncEnableWarningModal.d.ts +9 -0
- package/dist/components/views/standalone/modals/SyncEnableWarningModal.js +6 -0
- package/dist/components/views/standalone/modals/SyncEnableWarningModal.test.d.ts +1 -0
- package/dist/components/views/standalone/modals/SyncEnableWarningModal.test.js +24 -0
- package/dist/components/views/standalone/modals/SyncStatusModal.d.ts +2 -1
- package/dist/components/views/standalone/modals/SyncStatusModal.js +2 -2
- package/dist/config/envSchema.js +1 -1
- package/dist/core/AiProfileService.d.ts +45 -3
- package/dist/core/AiProfileService.js +774 -63
- package/dist/core/AiProfileService.test.js +22 -2
- package/dist/core/AiProfiles.test.js +761 -2
- package/dist/core/AttachmentLinkService.js +57 -15
- package/dist/core/AuthIdentityService.d.ts +107 -0
- package/dist/core/AuthIdentityService.js +284 -0
- package/dist/core/AuthTokenService.d.ts +4 -0
- package/dist/core/AuthTokenService.js +34 -6
- package/dist/core/AuthTokenService.test.d.ts +1 -0
- package/dist/core/AuthTokenService.test.js +78 -0
- package/dist/core/EntitlementsPolicy.test.js +77 -15
- package/dist/core/GlobalSettingsService.js +115 -6
- package/dist/core/PlanEntitlementService.d.ts +30 -3
- package/dist/core/PlanEntitlementService.js +454 -93
- package/dist/core/PlanFeatureCatalog.test.d.ts +1 -0
- package/dist/core/PlanFeatureCatalog.test.js +84 -0
- package/dist/core/PlanVersionPolicy.test.js +54 -28
- package/dist/core/PlanningEntities.test.js +52 -0
- package/dist/core/SignupMonetizationSettings.test.js +241 -44
- package/dist/core/SyncReconciliationService.js +2 -65
- package/dist/core/SystemAdmin.test.js +244 -88
- package/dist/core/TaskAttachmentsCanonical.test.js +51 -1
- package/dist/core/TaskTaxonomyValidation.test.js +53 -0
- package/dist/core/Taskforce.d.ts +228 -14
- package/dist/core/Taskforce.js +814 -201
- package/dist/core/Taskforce.listTasksSlim.test.d.ts +1 -0
- package/dist/core/Taskforce.listTasksSlim.test.js +91 -0
- package/dist/core/UserProfileAvatarDrafts.test.js +30 -3
- package/dist/core/WorkspaceLifecycleService.js +0 -5
- package/dist/core/WorkspacePermissions.test.js +25 -1
- package/dist/core/WorkspacePlanMode.test.js +128 -27
- package/dist/core/shared.d.ts +3 -1
- package/dist/core/shared.js +16 -1
- package/dist/core/types.d.ts +68 -2
- package/dist/hooks/auth/useTaskforceAuthBootstrap.js +26 -1
- package/dist/hooks/sync/auth.js +3 -1
- package/dist/hooks/sync/bootstrap.js +2 -0
- package/dist/hooks/sync/controlPlane.d.ts +37 -0
- package/dist/hooks/sync/controlPlane.js +78 -0
- package/dist/hooks/sync/controlPlane.test.d.ts +1 -0
- package/dist/hooks/sync/controlPlane.test.js +121 -0
- package/dist/hooks/sync/lifecyclePolicy.d.ts +45 -0
- package/dist/hooks/sync/lifecyclePolicy.js +93 -0
- package/dist/hooks/sync/lifecyclePolicy.test.d.ts +1 -0
- package/dist/hooks/sync/lifecyclePolicy.test.js +124 -0
- package/dist/hooks/sync/orchestratorShared.d.ts +10 -1
- package/dist/hooks/sync/orchestratorShared.js +68 -47
- package/dist/hooks/sync/orchestratorShared.test.js +50 -1
- package/dist/hooks/sync/pullLifecycle.d.ts +31 -0
- package/dist/hooks/sync/pullLifecycle.js +24 -0
- package/dist/hooks/sync/pullLifecycle.test.d.ts +1 -0
- package/dist/hooks/sync/pullLifecycle.test.js +80 -0
- package/dist/hooks/sync/recovery.d.ts +16 -2
- package/dist/hooks/sync/recovery.js +171 -53
- package/dist/hooks/sync/recovery.test.d.ts +1 -0
- package/dist/hooks/sync/recovery.test.js +292 -0
- package/dist/hooks/sync/transfers.d.ts +16 -3
- package/dist/hooks/sync/transfers.js +186 -65
- package/dist/hooks/sync/transfers.test.d.ts +1 -0
- package/dist/hooks/sync/transfers.test.js +396 -0
- package/dist/hooks/sync/useRecentSyncEvents.d.ts +21 -0
- package/dist/hooks/sync/useRecentSyncEvents.js +92 -0
- package/dist/hooks/sync/useRecentSyncEvents.test.d.ts +1 -0
- package/dist/hooks/sync/useRecentSyncEvents.test.js +124 -0
- package/dist/hooks/sync/useSyncStatusActions.d.ts +30 -0
- package/dist/hooks/sync/useSyncStatusActions.js +88 -0
- package/dist/hooks/sync/useSyncStatusActions.test.d.ts +1 -0
- package/dist/hooks/sync/useSyncStatusActions.test.js +133 -0
- package/dist/hooks/sync/useSyncStatusControls.d.ts +25 -0
- package/dist/hooks/sync/useSyncStatusControls.js +60 -0
- package/dist/hooks/sync/useSyncStatusControls.test.d.ts +1 -0
- package/dist/hooks/sync/useSyncStatusControls.test.js +88 -0
- package/dist/hooks/useSyncOrchestrator.aiProfiles.test.js +12 -0
- package/dist/hooks/useSyncOrchestrator.d.ts +16 -6
- package/dist/hooks/useSyncOrchestrator.js +424 -175
- package/dist/hooks/useSyncOrchestrator.retry-closure.test.js +487 -10
- package/dist/hooks/useTaskData.js +8 -3
- package/dist/hooks/useTaskData.test.js +45 -0
- package/dist/hooks/useTaskMutations.d.ts +2 -1
- package/dist/hooks/useTaskMutations.js +12 -1
- package/dist/hooks/useTaskMutations.test.js +30 -1
- package/dist/hooks/useTaskforce.d.ts +65 -4
- package/dist/hooks/useTaskforce.js +564 -243
- package/dist/hooks/useTaskforce.runtime-routing.test.d.ts +1 -0
- package/dist/hooks/useTaskforce.runtime-routing.test.js +152 -0
- package/dist/hooks/useTaskforce.sync-behavior.test.js +2454 -208
- package/dist/hooks/useWorkspaceSyncController.d.ts +4 -1
- package/dist/hooks/useWorkspaceSyncController.js +17 -2
- package/dist/hooks/useWorkspaceSyncController.test.js +1 -0
- package/dist/hooks/workspace/useTaskforceWorkspaceBootstrap.d.ts +16 -0
- package/dist/hooks/workspace/useTaskforceWorkspaceBootstrap.js +316 -35
- package/dist/localization/locales/en-US.d.ts +0 -1
- package/dist/localization/locales/en-US.js +0 -1
- package/dist/localization/locales/es-419.js +0 -1
- package/dist/localization/locales/pt-BR.js +0 -1
- package/dist/mcp/adminWorkspaceRegistrar.d.ts +2 -0
- package/dist/mcp/adminWorkspaceRegistrar.js +154 -0
- package/dist/mcp/collaborationRegistrar.d.ts +2 -0
- package/dist/mcp/collaborationRegistrar.js +71 -0
- package/dist/mcp/documentAssetRegistrar.d.ts +2 -0
- package/dist/mcp/documentAssetRegistrar.js +346 -0
- package/dist/mcp/runtime.d.ts +2 -0
- package/dist/mcp/runtime.js +2433 -3534
- package/dist/mcp/runtime.test.js +440 -2
- package/dist/mcp/taskPlanningRegistrar.d.ts +2 -0
- package/dist/mcp/taskPlanningRegistrar.js +418 -0
- package/dist/mcp/toolCatalog.d.ts +35 -0
- package/dist/mcp/toolCatalog.js +3 -0
- package/dist/migrations/taskSchemaMigrations.d.ts +1 -1
- package/dist/migrations/taskSchemaMigrations.js +171 -61
- package/dist/migrations/taskSchemaMigrations.test.js +15 -0
- package/dist/resources/templates/workflow-sources/workflowDocs.mjs +6 -6
- package/dist/resources/templates/workflows/collaborate.yaml +1 -1
- package/dist/resources/templates/workflows/evaluate.yaml +2 -2
- package/dist/resources/templates/workflows/plan.yaml +1 -1
- package/dist/resources/templates/workflows/review.yaml +2 -2
- package/dist/server/annotatedAttachmentsRoutes.test.js +3 -3
- package/dist/server/auth/providers/apple.d.ts +33 -0
- package/dist/server/auth/providers/apple.js +82 -0
- package/dist/server/auth/providers/appleClientSecret.d.ts +37 -0
- package/dist/server/auth/providers/appleClientSecret.js +65 -0
- package/dist/server/auth/providers/github.d.ts +26 -0
- package/dist/server/auth/providers/github.js +86 -0
- package/dist/server/auth/providers/google.d.ts +21 -0
- package/dist/server/auth/providers/google.js +56 -0
- package/dist/server/auth/providers/types.d.ts +21 -0
- package/dist/server/auth/providers/types.js +1 -0
- package/dist/server/auth.d.ts +2 -0
- package/dist/server/auth.js +6 -3
- package/dist/server/documentReviewRoutes.test.js +36 -3
- package/dist/server/index.cookieProxy.test.js +1 -0
- package/dist/server/index.d.ts +12 -0
- package/dist/server/index.js +120 -9
- package/dist/server/index.rateLimit.test.js +3 -0
- package/dist/server/index.test.js +106 -3
- package/dist/server/routes/admin.d.ts +4 -5
- package/dist/server/routes/admin.js +410 -80
- package/dist/server/routes/annotatedAttachments.d.ts +1 -1
- package/dist/server/routes/annotatedAttachments.js +1 -1
- package/dist/server/routes/auth.d.ts +16 -6
- package/dist/server/routes/auth.js +1015 -118
- package/dist/server/routes/authSupport.d.ts +30 -0
- package/dist/server/routes/authSupport.js +81 -0
- package/dist/server/routes/billing.d.ts +1 -1
- package/dist/server/routes/billing.js +276 -34
- package/dist/server/routes/billing.test.js +760 -52
- package/dist/server/routes/documentReviews.d.ts +1 -1
- package/dist/server/routes/documentReviews.js +1 -1
- package/dist/server/routes/documents.d.ts +5 -2
- package/dist/server/routes/documents.js +242 -74
- package/dist/server/routes/primitives.d.ts +11 -0
- package/dist/server/routes/primitives.js +73 -0
- package/dist/server/routes/resources.d.ts +1 -1
- package/dist/server/routes/resources.js +1 -1
- package/dist/server/routes/shared.d.ts +29 -3
- package/dist/server/routes/shared.js +69 -4
- package/dist/server/routes/sync.d.ts +1 -1
- package/dist/server/routes/sync.integration.test.js +437 -39
- package/dist/server/routes/sync.js +62 -606
- package/dist/server/routes/syncAuxRoutes.d.ts +15 -0
- package/dist/server/routes/syncAuxRoutes.js +91 -0
- package/dist/server/routes/syncAuxRoutes.test.d.ts +1 -0
- package/dist/server/routes/syncAuxRoutes.test.js +158 -0
- package/dist/server/routes/syncPullApplyRoutes.d.ts +36 -0
- package/dist/server/routes/syncPullApplyRoutes.js +204 -0
- package/dist/server/routes/syncPushRoutes.d.ts +24 -0
- package/dist/server/routes/syncPushRoutes.js +212 -0
- package/dist/server/routes/syncRouteGuards.d.ts +36 -0
- package/dist/server/routes/syncRouteGuards.js +67 -0
- package/dist/server/routes/syncRouteGuards.test.d.ts +1 -0
- package/dist/server/routes/syncRouteGuards.test.js +94 -0
- package/dist/server/routes/syncRouteTypes.d.ts +13 -0
- package/dist/server/routes/syncRouteTypes.js +1 -0
- package/dist/server/routes/syncSnapshotRoutes.d.ts +66 -0
- package/dist/server/routes/syncSnapshotRoutes.js +180 -0
- package/dist/server/routes/tasks.d.ts +1 -1
- package/dist/server/routes/tasks.js +44 -2
- package/dist/server/routes/workspaces.d.ts +1 -1
- package/dist/server/routes/workspaces.js +37 -6
- package/dist/server/routes.d.ts +2 -9
- package/dist/server/routes.js +136 -165
- package/dist/server/routes.test.js +2457 -162
- package/dist/services/workflowExportSnapshots.test.js +2 -0
- package/dist/shared/aiProfileSeatScope.d.ts +5 -0
- package/dist/shared/aiProfileSeatScope.js +21 -0
- package/dist/shared/passwordPolicy.d.ts +13 -0
- package/dist/shared/passwordPolicy.js +84 -0
- package/dist/shared/passwordPolicy.test.d.ts +1 -0
- package/dist/shared/passwordPolicy.test.js +34 -0
- package/dist/storage/workspaceAssetStore.d.ts +15 -3
- package/dist/storage/workspaceAssetStore.js +132 -44
- package/dist/storage/workspaceAssetStore.test.js +93 -6
- package/dist/styles/fonts.css +70 -0
- package/dist/sync/collaborationSyncPayload.d.ts +6 -1
- package/dist/sync/collaborationSyncPayload.js +17 -11
- package/dist/sync/collaborationSyncPayload.test.js +13 -1
- package/dist/sync/contentSyncState.d.ts +4 -8
- package/dist/sync/contentSyncState.js +33 -77
- package/dist/sync/syncApplyHandlers.d.ts +7 -0
- package/dist/sync/syncApplyHandlers.js +28 -13
- package/dist/sync/syncApplyHandlers.test.js +72 -3
- package/dist/sync/syncFieldSemantics.d.ts +12 -0
- package/dist/sync/syncFieldSemantics.js +55 -0
- package/dist/sync/syncResourceAdapters.d.ts +44 -0
- package/dist/sync/syncResourceAdapters.js +77 -0
- package/dist/sync/syncService.d.ts +6 -0
- package/dist/sync/syncService.js +60 -0
- package/dist/sync/syncService.test.js +71 -3
- package/dist/sync/taskSyncChangeKey.d.ts +2 -0
- package/dist/sync/taskSyncChangeKey.js +143 -0
- package/dist/sync/taskSyncPayload.js +3 -8
- package/dist/sync/workspacePullFeed.js +4 -3
- package/dist/sync/workspacePullFeed.test.js +43 -0
- package/dist/sync/workspaceRepair.js +5 -2
- package/dist/sync/workspaceSyncModel.d.ts +48 -0
- package/dist/sync/workspaceSyncModel.js +195 -31
- package/dist/sync/workspaceSyncModel.test.js +325 -12
- package/dist/sync/workspaceSyncState.d.ts +19 -0
- package/dist/sync/workspaceSyncState.js +3 -1
- package/dist/sync/workspaceSyncSurface.js +3 -8
- package/dist/types.d.ts +17 -0
- package/dist/ui/assets/AgentsModule-DrLawwNl.js +1 -0
- package/dist/ui/assets/{AnnotatedAttachmentWorkspace-BlS-cqnl.js → AnnotatedAttachmentWorkspace-Z9_whf7F.js} +1 -1
- package/dist/ui/assets/CourierPrime-Bold-BuLj_dpw.woff2 +0 -0
- package/dist/ui/assets/CourierPrime-BoldItalic-BrK2pUkZ.woff2 +0 -0
- package/dist/ui/assets/CourierPrime-Italic-DFUZK5Ey.woff2 +0 -0
- package/dist/ui/assets/CourierPrime-Regular-BsKphzVf.woff2 +0 -0
- package/dist/ui/assets/DocumentWorkspace-B03MaSkw.js +252 -0
- package/dist/ui/assets/DocumentWorkspace-Dhdso07p.css +1 -0
- package/dist/ui/assets/{InitiativesModule-BjR6iBf9.js → InitiativesModule-9E6ParrY.js} +1 -1
- package/dist/ui/assets/Noir_medium-bxQwKGzB.woff2 +0 -0
- package/dist/ui/assets/Noir_regular-ojf2kxlG.woff2 +0 -0
- package/dist/ui/assets/PlansPage-CvfnMiWq.css +1 -0
- package/dist/ui/assets/PlansPage-DRXscYxH.js +1 -0
- package/dist/ui/assets/RussoOne-Regular-Cu_qq_qC.woff2 +0 -0
- package/dist/ui/assets/SpecialElite-Regular-Di6gSvAS.woff2 +0 -0
- package/dist/ui/assets/TaskSettings-DZX4jk7e.js +9 -0
- package/dist/ui/assets/{WorkflowsModule-DnFqdUME.js → WorkflowsModule-BA7jcEpH.js} +1 -1
- package/dist/ui/assets/index-9eT8e0Lu.css +1 -0
- package/dist/ui/assets/index-C6k75jr8.js +6 -0
- package/dist/ui/assets/{vendor-icons-I7ZwG1z_.js → vendor-icons-DuEd_65c.js} +1 -1
- package/dist/ui/fonts/CourierPrime-Bold.ttf +0 -0
- package/dist/ui/fonts/CourierPrime-Bold.woff2 +0 -0
- package/dist/ui/fonts/CourierPrime-BoldItalic.ttf +0 -0
- package/dist/ui/fonts/CourierPrime-BoldItalic.woff2 +0 -0
- package/dist/ui/fonts/CourierPrime-Italic.ttf +0 -0
- package/dist/ui/fonts/CourierPrime-Italic.woff2 +0 -0
- package/dist/ui/fonts/CourierPrime-Regular.ttf +0 -0
- package/dist/ui/fonts/CourierPrime-Regular.woff2 +0 -0
- package/dist/ui/fonts/Noir_medium.otf +0 -0
- package/dist/ui/fonts/Noir_medium.woff2 +0 -0
- package/dist/ui/fonts/Noir_regular.otf +0 -0
- package/dist/ui/fonts/Noir_regular.woff2 +0 -0
- package/dist/ui/fonts/RussoOne-Regular.woff2 +0 -0
- package/dist/ui/fonts/SpecialElite-Regular.ttf +0 -0
- package/dist/ui/fonts/SpecialElite-Regular.woff2 +0 -0
- package/dist/ui/index.html +3 -3
- package/dist/utils/accountProfileSummaryCache.d.ts +5 -0
- package/dist/utils/assignees.d.ts +2 -0
- package/dist/utils/assignees.js +2 -0
- package/dist/utils/avatarUpload.d.ts +27 -0
- package/dist/utils/avatarUpload.js +132 -0
- package/dist/utils/avatarUpload.test.d.ts +1 -0
- package/dist/utils/avatarUpload.test.js +40 -0
- package/dist/utils/bootstrapTrace.d.ts +7 -0
- package/dist/utils/bootstrapTrace.js +29 -0
- package/dist/utils/commercialLifecyclePresentation.d.ts +19 -0
- package/dist/utils/commercialLifecyclePresentation.js +199 -0
- package/dist/utils/contextAssetEvents.d.ts +2 -0
- package/dist/utils/syncEventDetails.d.ts +3 -0
- package/dist/utils/syncEventDetails.js +64 -0
- package/dist/utils/syncEventDetails.test.d.ts +1 -0
- package/dist/utils/syncEventDetails.test.js +23 -0
- package/dist/utils/syncEventPresentation.d.ts +15 -0
- package/dist/utils/syncEventPresentation.js +129 -0
- package/dist/utils/syncEventPresentation.test.d.ts +1 -0
- package/dist/utils/syncEventPresentation.test.js +64 -0
- package/dist/utils/syncStatusPresentation.d.ts +72 -0
- package/dist/utils/syncStatusPresentation.js +217 -0
- package/dist/utils/syncStatusPresentation.test.d.ts +1 -0
- package/dist/utils/syncStatusPresentation.test.js +164 -0
- package/dist/utils/taskActivity.d.ts +2 -0
- package/dist/utils/taskActivity.js +228 -22
- package/dist/utils/taskActivity.test.js +119 -8
- package/dist/utils/workspaceSyncPresentation.d.ts +4 -0
- package/dist/utils/workspaceSyncPresentation.js +68 -2
- package/dist/utils/workspaceSyncPresentation.test.js +36 -1
- package/package.json +10 -2
- package/scripts/check-cloud-mcp.mjs +83 -0
- package/scripts/export-sqlite-to-postgres.mjs +7 -9
- package/scripts/playwright-auth.sh +5 -1
- package/scripts/run-billing-performance-smoke.sh +24 -0
- package/scripts/run-e2e-realtime.sh +17 -3
- package/scripts/run-smoke.sh +17 -5
- package/scripts/run-soak.sh +17 -5
- package/src/resources/templates/workflow-sources/workflowDocs.mjs +6 -6
- package/src/resources/templates/workflows/collaborate.yaml +1 -1
- package/src/resources/templates/workflows/evaluate.yaml +2 -2
- package/src/resources/templates/workflows/plan.yaml +1 -1
- package/src/resources/templates/workflows/review.yaml +2 -2
- package/dist/ui/assets/AgentsModule-BLWVbuKP.js +0 -1
- package/dist/ui/assets/DocumentWorkspace-BH_6DF6x.js +0 -250
- package/dist/ui/assets/DocumentWorkspace-C_8T8oz-.css +0 -1
- package/dist/ui/assets/PlansPage-C2dd2n1X.css +0 -1
- package/dist/ui/assets/PlansPage-CSDQ4sLa.js +0 -1
- package/dist/ui/assets/RussoOne-Regular-C3BxZIj7.ttf +0 -0
- package/dist/ui/assets/TaskSettings-CEDy34Jo.js +0 -9
- package/dist/ui/assets/index-DXUdtH1B.js +0 -6
- package/dist/ui/assets/index-Ii0B0rTO.css +0 -1
- 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: '
|
|
24
|
-
addFreeMapping('
|
|
25
|
-
core.upsertPlanCatalog({ planId: '
|
|
26
|
-
core.upsertPlanCatalog({ planId: '
|
|
27
|
-
addFreeMapping('
|
|
28
|
-
core.upsertPlanCatalog({ planId: '
|
|
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: '
|
|
31
|
+
planId: 'team-5',
|
|
31
32
|
versionNumber: 2,
|
|
32
33
|
isDefault: true,
|
|
33
34
|
seatLimit: 5
|
|
34
35
|
});
|
|
35
36
|
core.updatePlanVersionFeatures({
|
|
36
|
-
planVersionId: '
|
|
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.
|
|
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: '
|
|
143
|
+
planId: 'team-5',
|
|
143
144
|
versionNumber: 3,
|
|
144
145
|
isDefault: false,
|
|
145
146
|
seatLimit: 2
|
|
146
147
|
});
|
|
147
148
|
core.updatePlanVersionFeatures({
|
|
148
|
-
planVersionId: '
|
|
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: '
|
|
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: '
|
|
188
|
+
planVersionId: 'free-v1',
|
|
188
189
|
features: [
|
|
189
|
-
{ featureKey: 'workspace.
|
|
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: '
|
|
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
|
-
|
|
111
|
-
? (global.billing.onboardingPolicy.
|
|
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
|
-
|
|
366
|
-
? (currentBilling.onboardingPolicy.
|
|
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
|
-
|
|
377
|
-
? (incoming.onboardingPolicy.
|
|
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
|
|
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
|
|
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<{
|