@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.
- package/README.md +0 -2
- package/dist/Taskforce.module.css +603 -107
- package/dist/TaskforceCore.js +216 -43
- package/dist/TaskforceCore.test.js +611 -28
- 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 +46 -2
- package/dist/compat/workspaceSyncCompat.test.js +38 -1
- package/dist/components/activity/EntityActivityTimeline.d.ts +34 -0
- package/dist/components/activity/EntityActivityTimeline.js +81 -0
- package/dist/components/context/ContextAttachmentManager.d.ts +14 -0
- package/dist/components/context/ContextAttachmentManager.js +561 -0
- package/dist/components/features/AgentsModule.d.ts +14 -1
- package/dist/components/features/AgentsModule.js +366 -18
- package/dist/components/features/AgentsModule.test.js +507 -8
- package/dist/components/features/AnnotatedAttachmentWorkspace.d.ts +3 -1
- package/dist/components/features/AnnotatedAttachmentWorkspace.js +118 -4
- package/dist/components/features/AnnotatedAttachmentWorkspace.test.js +52 -0
- package/dist/components/features/DocumentIndex.d.ts +2 -2
- package/dist/components/features/DocumentIndex.js +3 -4
- package/dist/components/features/DocumentViewer.d.ts +7 -1
- package/dist/components/features/DocumentViewer.js +62 -4
- package/dist/components/features/DocumentWorkspace.d.ts +10 -2
- package/dist/components/features/DocumentWorkspace.js +15 -4
- package/dist/components/features/DocumentWorkspace.test.js +51 -1
- package/dist/components/features/TaskSettings.d.ts +2 -0
- package/dist/components/features/TaskSettings.js +83 -78
- package/dist/components/features/TaskSettings.test.js +171 -82
- package/dist/components/features/documentWorkspaceModel.d.ts +1 -1
- package/dist/components/task/TaskActionHeader.js +11 -5
- package/dist/components/task/TaskActionHeader.test.js +10 -0
- package/dist/components/task/TaskCard.js +24 -29
- package/dist/components/task/TaskCard.test.js +38 -3
- package/dist/components/task/TaskContextUpload.js +4 -526
- package/dist/components/task/TaskContextUpload.test.js +3 -3
- package/dist/components/task/TaskForm.js +61 -116
- package/dist/components/task/TaskForm.test.js +110 -8
- package/dist/components/task/TaskKanban.d.ts +2 -1
- package/dist/components/task/TaskKanban.js +94 -21
- package/dist/components/task/TaskKanban.test.js +36 -0
- package/dist/components/task/TaskList.js +5 -1
- package/dist/components/task/TaskList.test.js +4 -0
- package/dist/components/ui/EditableAvatarButton.d.ts +18 -0
- package/dist/components/ui/EditableAvatarButton.js +18 -0
- package/dist/components/ui/HierarchyActionBadge.d.ts +10 -0
- package/dist/components/ui/HierarchyActionBadge.js +5 -0
- package/dist/components/views/AppShellHeader.d.ts +3 -1
- package/dist/components/views/AppShellHeader.js +27 -11
- package/dist/components/views/AppShellHeader.test.js +18 -1
- package/dist/components/views/PlanComparisonPage.d.ts +9 -1
- package/dist/components/views/PlanComparisonPage.js +78 -14
- package/dist/components/views/PlanComparisonPage.test.js +257 -0
- package/dist/components/views/PlansPage.js +127 -36
- package/dist/components/views/PlansPage.test.js +294 -12
- package/dist/components/views/StandaloneLayout.js +529 -592
- package/dist/components/views/WidgetView.js +10 -8
- package/dist/components/views/panels/PlanningDrawer.d.ts +25 -5
- package/dist/components/views/panels/PlanningDrawer.js +270 -55
- package/dist/components/views/panels/PlanningDrawer.test.d.ts +1 -0
- package/dist/components/views/panels/PlanningDrawer.test.js +529 -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 +26 -1
- package/dist/components/views/standalone/modals/AccountHubModal.js +76 -2
- package/dist/components/views/standalone/modals/AccountHubModal.test.js +20 -3
- 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 -0
- package/dist/core/AiProfileService.d.ts +46 -2
- package/dist/core/AiProfileService.js +1073 -82
- package/dist/core/AiProfileService.test.js +19 -1
- package/dist/core/AiProfiles.test.js +1249 -44
- package/dist/core/AttachmentLinkService.d.ts +3 -0
- package/dist/core/AttachmentLinkService.js +110 -23
- 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.js +3 -3
- package/dist/core/EntitlementsPolicy.test.js +2 -2
- package/dist/core/GlobalSettingsService.js +127 -6
- package/dist/core/McpTokenService.d.ts +12 -0
- package/dist/core/McpTokenService.js +44 -1
- package/dist/core/PlanEntitlementService.d.ts +23 -2
- package/dist/core/PlanEntitlementService.js +343 -57
- package/dist/core/PlanFeatureCatalog.test.d.ts +1 -0
- package/dist/core/PlanFeatureCatalog.test.js +84 -0
- package/dist/core/PlanVersionPolicy.test.js +35 -2
- package/dist/core/PlanningEntities.test.js +418 -4
- package/dist/core/SignupMonetizationSettings.test.js +199 -27
- package/dist/core/SyncReconciliationService.js +2 -65
- package/dist/core/SystemAdmin.test.js +42 -42
- package/dist/core/TaskActivityService.d.ts +28 -1
- package/dist/core/TaskActivityService.js +227 -46
- package/dist/core/TaskActivitySync.test.d.ts +1 -0
- package/dist/core/TaskActivitySync.test.js +90 -0
- package/dist/core/TaskAttachmentsCanonical.test.js +51 -1
- package/dist/core/TaskAuditTimeline.test.js +96 -0
- package/dist/core/Taskforce.d.ts +415 -40
- package/dist/core/Taskforce.ids.test.js +58 -0
- package/dist/core/Taskforce.js +1543 -266
- package/dist/core/Taskforce.listTasksSlim.test.d.ts +1 -0
- package/dist/core/Taskforce.listTasksSlim.test.js +91 -0
- package/dist/core/Taskforce.mcpAuth.test.js +109 -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 +117 -16
- package/dist/core/shared.d.ts +1 -1
- package/dist/core/shared.js +5 -1
- package/dist/core/types.d.ts +75 -2
- package/dist/hooks/auth/useTaskforceAuthBootstrap.js +28 -2
- package/dist/hooks/bootstrapTimeouts.d.ts +4 -0
- package/dist/hooks/bootstrapTimeouts.js +8 -0
- package/dist/hooks/bootstrapTimeouts.test.d.ts +1 -0
- package/dist/hooks/bootstrapTimeouts.test.js +12 -0
- 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 +13 -4
- package/dist/hooks/sync/orchestratorShared.js +129 -48
- 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 +179 -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 +210 -66
- package/dist/hooks/sync/transfers.test.d.ts +1 -0
- package/dist/hooks/sync/transfers.test.js +928 -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/useFilterSort.js +13 -13
- package/dist/hooks/useFilterSort.test.js +87 -1
- package/dist/hooks/useSyncOrchestrator.aiProfiles.test.js +12 -0
- package/dist/hooks/useSyncOrchestrator.d.ts +9 -2
- package/dist/hooks/useSyncOrchestrator.js +409 -183
- package/dist/hooks/useSyncOrchestrator.retry-closure.test.js +407 -0
- package/dist/hooks/useTaskData.js +8 -3
- package/dist/hooks/useTaskData.test.js +45 -0
- package/dist/hooks/useTaskforce.d.ts +145 -52
- package/dist/hooks/useTaskforce.js +592 -253
- package/dist/hooks/useTaskforce.runtime-routing.test.d.ts +1 -0
- package/dist/hooks/useTaskforce.runtime-routing.test.js +246 -0
- package/dist/hooks/useTaskforce.sync-behavior.test.js +2468 -201
- package/dist/hooks/useWorkspaceSyncController.d.ts +1 -0
- package/dist/hooks/useWorkspaceSyncController.js +13 -2
- package/dist/hooks/useWorkspaceSyncController.test.js +48 -0
- package/dist/hooks/workspace/useTaskforceWorkspaceBootstrap.d.ts +16 -0
- package/dist/hooks/workspace/useTaskforceWorkspaceBootstrap.js +328 -40
- 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/canonicalAssetHelpers.d.ts +16 -4
- package/dist/mcp/canonicalAssetHelpers.js +18 -10
- package/dist/mcp/canonicalAssetHelpers.test.d.ts +1 -0
- package/dist/mcp/canonicalAssetHelpers.test.js +67 -0
- package/dist/mcp/clientIntegrations.d.ts +1 -0
- package/dist/mcp/clientIntegrations.js +25 -0
- package/dist/mcp/clientIntegrations.test.js +14 -3
- package/dist/mcp/clientProfileDefaults.js +3 -3
- package/dist/mcp/collaborationRegistrar.js +7 -7
- package/dist/mcp/documentAssetRegistrar.js +116 -10
- package/dist/mcp/runtime.d.ts +3 -0
- package/dist/mcp/runtime.js +1099 -185
- package/dist/mcp/runtime.test.js +1491 -140
- package/dist/mcp/taskAttachmentTypes.d.ts +1 -1
- package/dist/mcp/taskPlanningRegistrar.js +48 -0
- package/dist/mcp/toolRegistry.d.ts +56 -0
- package/dist/mcp/toolRegistry.js +8 -0
- package/dist/mcp/toolRegistry.test.js +4 -0
- package/dist/migrations/taskSchemaMigrations.d.ts +1 -1
- package/dist/migrations/taskSchemaMigrations.js +192 -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/aiProfileAvatarAssets.d.ts +49 -0
- package/dist/server/aiProfileAvatarAssets.js +319 -0
- package/dist/server/aiProfileAvatarAssets.test.d.ts +1 -0
- package/dist/server/aiProfileAvatarAssets.test.js +213 -0
- package/dist/server/annotatedAttachmentsRoutes.test.js +69 -10
- 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 +124 -9
- package/dist/server/index.rateLimit.test.js +3 -0
- package/dist/server/index.test.js +111 -3
- package/dist/server/routes/admin.d.ts +3 -0
- package/dist/server/routes/admin.js +459 -28
- package/dist/server/routes/annotatedAttachments.js +51 -0
- package/dist/server/routes/auth.d.ts +26 -2
- package/dist/server/routes/auth.js +1170 -71
- package/dist/server/routes/authSupport.d.ts +5 -1
- package/dist/server/routes/authSupport.js +13 -2
- package/dist/server/routes/billing.js +372 -35
- package/dist/server/routes/billing.test.js +595 -12
- package/dist/server/routes/documents.d.ts +1 -0
- package/dist/server/routes/documents.js +182 -70
- package/dist/server/routes/shared.d.ts +28 -2
- package/dist/server/routes/shared.js +69 -14
- package/dist/server/routes/sync.integration.test.js +658 -39
- package/dist/server/routes/sync.js +74 -608
- 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 +182 -0
- package/dist/server/routes/tasks.js +55 -10
- package/dist/server/routes/workspaces.js +36 -5
- package/dist/server/routes.js +147 -11
- package/dist/server/routes.test.js +2704 -183
- 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/aiProfileSurfaceType.d.ts +1 -1
- package/dist/shared/aiProfileSurfaceType.js +10 -8
- 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/objectStorage.d.ts +1 -0
- package/dist/storage/objectStorage.js +2 -1
- package/dist/storage/objectStorageClient.d.ts +1 -0
- package/dist/storage/objectStorageClient.js +41 -8
- package/dist/storage/objectStorageClient.test.js +26 -1
- package/dist/storage/objectStorageConfig.js +3 -1
- package/dist/storage/objectStorageConfig.test.js +13 -1
- 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 +19 -11
- package/dist/sync/collaborationSyncPayload.test.js +14 -1
- package/dist/sync/collaborationSyncState.d.ts +3 -3
- package/dist/sync/collaborationSyncState.js +19 -12
- package/dist/sync/contentSyncPayload.d.ts +5 -1
- package/dist/sync/contentSyncPayload.js +9 -0
- package/dist/sync/contentSyncPayload.test.js +39 -0
- package/dist/sync/contentSyncState.d.ts +9 -9
- package/dist/sync/contentSyncState.js +248 -107
- package/dist/sync/planningSyncPayload.js +5 -0
- package/dist/sync/planningSyncPayload.test.js +24 -0
- package/dist/sync/syncApplyHandlers.d.ts +11 -4
- package/dist/sync/syncApplyHandlers.js +115 -42
- package/dist/sync/syncApplyHandlers.test.js +251 -4
- package/dist/sync/syncFieldSemantics.d.ts +12 -0
- package/dist/sync/syncFieldSemantics.js +55 -0
- package/dist/sync/syncResourceAdapters.d.ts +46 -0
- package/dist/sync/syncResourceAdapters.js +79 -0
- package/dist/sync/syncService.d.ts +6 -0
- package/dist/sync/syncService.js +65 -1
- package/dist/sync/syncService.test.js +96 -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.d.ts +4 -0
- package/dist/sync/workspacePullFeed.js +132 -72
- package/dist/sync/workspacePullFeed.test.js +92 -0
- package/dist/sync/workspaceRepair.js +5 -2
- package/dist/sync/workspaceSyncModel.d.ts +73 -6
- package/dist/sync/workspaceSyncModel.js +342 -73
- package/dist/sync/workspaceSyncModel.test.js +559 -14
- package/dist/sync/workspaceSyncState.d.ts +17 -0
- package/dist/sync/workspaceSyncState.js +2 -1
- package/dist/sync/workspaceSyncSurface.js +3 -8
- package/dist/types.d.ts +50 -2
- package/dist/ui/assets/AgentsModule-2y82_3DO.js +1 -0
- package/dist/ui/assets/AnnotatedAttachmentWorkspace-BTLZZCiQ.js +3 -0
- package/dist/ui/assets/AnnotatedAttachmentWorkspace-BVKew-mH.css +1 -0
- package/dist/ui/assets/ContextAttachmentManager-D2epuNnG.js +3 -0
- 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-D4rJKXzd.css +1 -0
- package/dist/ui/assets/DocumentWorkspace-sVa-3Do6.js +252 -0
- package/dist/ui/assets/EntityActivityTimeline-DyqvvhuF.css +1 -0
- package/dist/ui/assets/EntityActivityTimeline-Zods27y_.js +1 -0
- package/dist/ui/assets/{InitiativesModule-Dhm7M8e7.js → InitiativesModule-D4XseTwW.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-D5AcbO0L.js +1 -0
- package/dist/ui/assets/PlansPage-Dvqsz5zc.css +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/TaskContextUpload-uC5qx4Bv.js +1 -0
- package/dist/ui/assets/TaskSettings-CqvPAsTv.js +9 -0
- package/dist/ui/assets/{WorkflowsModule-BcS4afRn.js → WorkflowsModule-oOA9bcdK.js} +4 -4
- package/dist/ui/assets/documentReferences-DPZuTgHh.js +1 -0
- package/dist/ui/assets/index-607WPo_X.js +4 -0
- package/dist/ui/assets/index-CYyodXsg.css +1 -0
- package/dist/ui/assets/{vendor-icons-BSUaRwF8.js → vendor-icons-B32hGuF2.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/ui/product/agent manager.png +0 -0
- package/dist/ui/product/agent_manager_02.png +0 -0
- package/dist/utils/accountProfileSummaryCache.d.ts +5 -0
- package/dist/utils/aiProfileEvents.d.ts +7 -0
- package/dist/utils/aiProfileEvents.js +6 -0
- package/dist/utils/assignees.d.ts +8 -0
- package/dist/utils/assignees.js +10 -1
- package/dist/utils/assignees.test.d.ts +1 -0
- package/dist/utils/assignees.test.js +25 -0
- package/dist/utils/avatarDisplay.d.ts +1 -0
- package/dist/utils/avatarDisplay.js +15 -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.js +3 -0
- package/dist/utils/contextAssetEvents.d.ts +2 -0
- package/dist/utils/contextFiles.d.ts +3 -1
- package/dist/utils/contextFiles.js +2 -1
- 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 +9 -1
- package/dist/utils/taskActivity.js +290 -22
- package/dist/utils/taskActivity.test.js +141 -8
- package/dist/utils/taskSearch.d.ts +22 -0
- package/dist/utils/taskSearch.js +87 -0
- package/dist/utils/taskSearch.test.d.ts +1 -0
- package/dist/utils/taskSearch.test.js +69 -0
- package/dist/utils/taskUtils.js +10 -3
- package/dist/utils/taskUtils.test.d.ts +1 -0
- package/dist/utils/taskUtils.test.js +19 -0
- 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 +3 -2
- package/scripts/export-sqlite-to-postgres.mjs +7 -9
- 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-N2MnQBZk.js +0 -1
- package/dist/ui/assets/AnnotatedAttachmentWorkspace-BG6P_GVW.js +0 -3
- package/dist/ui/assets/AnnotatedAttachmentWorkspace-BaS2VwIr.css +0 -1
- package/dist/ui/assets/DocumentWorkspace-B3nV_Gc5.css +0 -1
- package/dist/ui/assets/DocumentWorkspace-DRbDMwh8.js +0 -252
- package/dist/ui/assets/PlansPage-C2dd2n1X.css +0 -1
- package/dist/ui/assets/PlansPage-Cq0zXj3I.js +0 -1
- package/dist/ui/assets/RussoOne-Regular-C3BxZIj7.ttf +0 -0
- package/dist/ui/assets/TaskSettings-ln0aF7xc.js +0 -9
- package/dist/ui/assets/index-C2-OXZV7.css +0 -1
- package/dist/ui/assets/index-DcSI5F86.js +0 -6
- 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
|
-
|
|
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: '
|
|
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: '
|
|
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.
|
|
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.
|
|
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
|
-
|
|
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;
|
|
@@ -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
|
-
|
|
366
|
-
? (currentBilling.onboardingPolicy.
|
|
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
|
-
|
|
377
|
-
? (incoming.onboardingPolicy.
|
|
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
|
|
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<{
|