@taskforcehq/taskforce 0.3.328 → 0.3.330
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/dist/Taskforce.module.css +523 -79
- package/dist/TaskforceCore.js +237 -230
- package/dist/annotatedAttachments/AnnotatedAttachmentSessionStore.js +1 -1
- package/dist/cli.js +34 -0
- package/dist/cliCloudTargetGuard.d.ts +5 -0
- package/dist/cliCloudTargetGuard.js +11 -0
- package/dist/components/features/AiProfilesModule.js +3 -5
- package/dist/components/features/AnnotatedAttachmentWorkspace.js +24 -8
- package/dist/components/features/TaskSettings.d.ts +12 -1
- package/dist/components/features/TaskSettings.js +217 -54
- package/dist/components/features/TaskforceAgentsModule.d.ts +1 -2
- package/dist/components/features/TaskforceAgentsModule.js +586 -116
- package/dist/components/features/agentCapabilities/AgentCapabilitiesPrototype.d.ts +1 -1
- package/dist/components/features/agentConnections/AgentConnectionControl.d.ts +15 -0
- package/dist/components/features/agentConnections/AgentConnectionControl.js +125 -0
- package/dist/components/features/agentConnections/ModelConnectionsPanel.d.ts +18 -0
- package/dist/components/features/agentConnections/ModelConnectionsPanel.js +393 -0
- package/dist/components/features/agentConnections/modelConnectionsApi.d.ts +65 -0
- package/dist/components/features/agentConnections/modelConnectionsApi.js +129 -0
- package/dist/components/features/planning/PlanningModule.js +2 -5
- package/dist/components/features/planning/PlanningTaskOrderList.d.ts +1 -1
- package/dist/components/features/planning/PlanningTaskOrderList.js +17 -6
- package/dist/components/features/planning/planningTaskArrangement.d.ts +1 -0
- package/dist/components/features/planning/planningTaskArrangement.js +5 -5
- package/dist/components/features/taskforceAgentAssignments/AgentBehaviorAssignments.js +15 -24
- package/dist/components/features/taskforceAgentEditorModel.d.ts +2 -1
- package/dist/components/features/taskforceAgentEditorModel.js +5 -1
- package/dist/components/features/workflowManager/workflowManagerApi.d.ts +1 -1
- package/dist/components/features/workflowManager/workflowManagerApi.js +3 -0
- package/dist/components/task/TaskCard.d.ts +5 -0
- package/dist/components/task/TaskCard.js +65 -10
- package/dist/components/task/TaskImageReviews.js +14 -5
- package/dist/components/task/TaskKanban.d.ts +6 -1
- package/dist/components/task/TaskKanban.js +152 -6
- package/dist/components/task/TaskList.d.ts +5 -0
- package/dist/components/task/TaskList.js +3 -3
- package/dist/components/task/TaskWorkflowAssignmentField.js +68 -10
- package/dist/components/ui/PasswordInput.d.ts +6 -0
- package/dist/components/ui/PasswordInput.js +11 -0
- package/dist/components/ui/TopNoticeLayer.js +1 -1
- package/dist/components/views/AppShellHeader.js +32 -11
- package/dist/components/views/PlanComparisonPage.js +12 -0
- package/dist/components/views/StandaloneLayout.js +32 -55
- package/dist/components/views/WidgetView.js +3 -3
- package/dist/components/views/panels/PlanningDrawer.js +5 -12
- package/dist/components/views/standalone/modals/AccountSettingsModal.js +26 -17
- package/dist/components/views/standalone/modals/SyncStatusModal.d.ts +4 -3
- package/dist/components/views/standalone/modals/SyncStatusModal.js +33 -38
- package/dist/config/envSchema.js +60 -1
- package/dist/config/localServiceRuntimeContract.d.ts +13 -0
- package/dist/config/localServiceRuntimeContract.js +135 -0
- package/dist/core/AiProfileService.js +46 -8
- package/dist/core/DeletedTaskLifecycleService.d.ts +1 -0
- package/dist/core/DeletedTaskLifecycleService.js +37 -6
- package/dist/core/McpTokenService.d.ts +23 -1
- package/dist/core/McpTokenService.js +93 -10
- package/dist/core/TaskAttachmentLinksDurableMutationService.d.ts +3 -2
- package/dist/core/TaskAttachmentLinksDurableMutationService.js +33 -9
- package/dist/core/TaskChecklistCommandService.d.ts +27 -0
- package/dist/core/TaskChecklistCommandService.js +83 -5
- package/dist/core/TaskLifecycleCommandService.d.ts +3 -1
- package/dist/core/TaskLifecycleCommandService.js +6 -2
- package/dist/core/Taskforce.d.ts +94 -2
- package/dist/core/Taskforce.js +760 -36
- package/dist/core/types.d.ts +14 -0
- package/dist/documentReviews/commandService.d.ts +2 -1
- package/dist/documentReviews/commandService.js +6 -3
- package/dist/hooks/sync/orchestratorShared.d.ts +1 -0
- package/dist/hooks/sync/orchestratorShared.js +2 -0
- package/dist/hooks/sync/useDurableLocalOutboxDrain.d.ts +1 -1
- package/dist/hooks/sync/useDurableTaskCreateMutation.js +1 -1
- package/dist/hooks/sync/useDurableTaskMetadataMutation.d.ts +1 -0
- package/dist/hooks/sync/useDurableTaskMetadataMutation.js +1 -0
- package/dist/hooks/sync/useDurableTaskStatusMutation.d.ts +1 -0
- package/dist/hooks/sync/useLocalSyncCoordinatorSnapshot.d.ts +3 -0
- package/dist/hooks/sync/useLocalSyncCoordinatorSnapshot.js +85 -9
- package/dist/hooks/sync/useSyncStatusControls.d.ts +4 -1
- package/dist/hooks/sync/useSyncStatusControls.js +47 -11
- package/dist/hooks/tasks/taskHttpMutation.js +1 -0
- package/dist/hooks/tasks/useCloudTaskSearch.d.ts +12 -0
- package/dist/hooks/tasks/useCloudTaskSearch.js +71 -0
- package/dist/hooks/tasks/useTaskDescriptionImageDraftRecovery.d.ts +16 -0
- package/dist/hooks/tasks/useTaskDescriptionImageDraftRecovery.js +197 -0
- package/dist/hooks/tasks/useTaskEditorNavigation.d.ts +16 -3
- package/dist/hooks/tasks/useTaskEditorNavigation.js +72 -13
- package/dist/hooks/tasks/useTaskFormActions.d.ts +6 -0
- package/dist/hooks/tasks/useTaskFormActions.js +65 -12
- package/dist/hooks/ui/useSettingsModel.d.ts +24 -2
- package/dist/hooks/ui/useSettingsModel.js +13 -2
- package/dist/hooks/ui/useSettingsPersistence.d.ts +12 -1
- package/dist/hooks/ui/useSettingsPersistence.js +74 -47
- package/dist/hooks/useFilterSort.d.ts +7 -3
- package/dist/hooks/useFilterSort.js +15 -5
- package/dist/hooks/useSyncOrchestrator.d.ts +3 -0
- package/dist/hooks/useSyncOrchestrator.js +111 -2
- package/dist/hooks/useTaskData.d.ts +40 -1
- package/dist/hooks/useTaskData.js +240 -9
- package/dist/hooks/useTaskMutations.d.ts +12 -2
- package/dist/hooks/useTaskMutations.js +266 -52
- package/dist/hooks/useTaskforce.d.ts +39 -9
- package/dist/hooks/useTaskforce.js +359 -40
- package/dist/hooks/useUiNotice.d.ts +4 -0
- package/dist/hooks/useUiNotice.js +4 -0
- package/dist/mcp/adminWorkspaceRegistrar.js +3 -3
- package/dist/mcp/clientRegistry.d.ts +2 -2
- package/dist/mcp/clientRegistry.js +1 -1
- package/dist/mcp/documentAssetRegistrar.js +53 -41
- package/dist/mcp/documentHelpers.d.ts +1 -0
- package/dist/mcp/documentHelpers.js +7 -3
- package/dist/mcp/durableTaskMutationRouter.d.ts +4 -1
- package/dist/mcp/durableTaskMutationRouter.js +10 -0
- package/dist/mcp/durableTaskRelationshipMutationRouter.js +4 -0
- package/dist/mcp/httpProtocolRouting.d.ts +10 -0
- package/dist/mcp/httpProtocolRouting.js +19 -0
- package/dist/mcp/localCliHealth.d.ts +2 -2
- package/dist/mcp/localCliHealth.js +2 -2
- package/dist/mcp/localServiceProxy.d.ts +1 -0
- package/dist/mcp/localServiceProxy.js +530 -68
- package/dist/mcp/planningAttachmentCommandAdapter.d.ts +3 -1
- package/dist/mcp/planningAttachmentCommandAdapter.js +20 -2
- package/dist/mcp/runtime.d.ts +54 -79
- package/dist/mcp/runtime.js +556 -139
- package/dist/mcp/taskPlanningRegistrar.js +64 -42
- package/dist/mcp/toolCallCompatibility.js +38 -1
- package/dist/mcp/toolCatalog.d.ts +1 -0
- package/dist/mcp/toolProfiles.d.ts +2 -0
- package/dist/mcp/toolProfiles.js +10 -0
- package/dist/mcp/toolRegistry.d.ts +1 -0
- package/dist/mcp/toolRegistry.js +1 -0
- package/dist/mcp/workflowExecutionRegistrar.js +4 -4
- package/dist/migrations/taskSchemaMigrations.d.ts +5 -0
- package/dist/migrations/taskSchemaMigrations.js +427 -0
- package/dist/runtime/appGateDefinitions.d.ts +30 -6
- package/dist/runtime/appGateDefinitions.js +6 -6
- package/dist/runtime/appGates.d.ts +13 -13
- package/dist/runtime/appGates.js +36 -13
- package/dist/runtime/nodeAppGates.d.ts +8 -0
- package/dist/runtime/nodeAppGates.js +27 -0
- package/dist/server/cloudCollectionRead.d.ts +1 -1
- package/dist/server/cloudCollectionRead.js +2 -2
- package/dist/server/index.d.ts +6 -0
- package/dist/server/index.js +123 -14
- package/dist/server/localDatabaseIdentity.js +4 -1
- package/dist/server/localServiceLease.d.ts +3 -0
- package/dist/server/localServiceLease.js +11 -2
- package/dist/server/localServiceSessions.d.ts +14 -17
- package/dist/server/localServiceSessions.js +308 -94
- package/dist/server/localWorkspaceSyncServerRuntime.js +12 -7
- package/dist/server/rateLimit.d.ts +1 -0
- package/dist/server/rateLimit.js +4 -0
- package/dist/server/realtimeSyncWs.js +36 -12
- package/dist/server/routes/admin.d.ts +4 -0
- package/dist/server/routes/admin.js +113 -3
- package/dist/server/routes/agentRoles.js +3 -2
- package/dist/server/routes/agentSkills.js +3 -2
- package/dist/server/routes/agents.d.ts +7 -0
- package/dist/server/routes/agents.js +394 -39
- package/dist/server/routes/annotatedAttachments.js +3 -2
- package/dist/server/routes/auth.js +3 -1
- package/dist/server/routes/billing.js +5 -1
- package/dist/server/routes/durableTaskHttpRouters.d.ts +11 -2
- package/dist/server/routes/executorPhaseAApprovals.d.ts +19 -0
- package/dist/server/routes/executorPhaseAApprovals.js +140 -0
- package/dist/server/routes/executorPhaseAIssuerRedemptions.d.ts +11 -0
- package/dist/server/routes/executorPhaseAIssuerRedemptions.js +24 -0
- package/dist/server/routes/githubReviewEvidence.d.ts +19 -0
- package/dist/server/routes/githubReviewEvidence.js +116 -0
- package/dist/server/routes/localService.d.ts +15 -4
- package/dist/server/routes/localService.js +138 -40
- package/dist/server/routes/modelConnections.d.ts +24 -0
- package/dist/server/routes/modelConnections.js +205 -0
- package/dist/server/routes/primitives.d.ts +2 -0
- package/dist/server/routes/shared.d.ts +19 -0
- package/dist/server/routes/shared.js +95 -19
- package/dist/server/routes/sync.js +1 -0
- package/dist/server/routes/syncAuxRoutes.js +9 -2
- package/dist/server/routes/syncPullApplyRoutes.js +23 -4
- package/dist/server/routes/syncPushRoutes.d.ts +1 -0
- package/dist/server/routes/syncPushRoutes.js +1 -0
- package/dist/server/routes/syncV3FeedRoutes.js +27 -16
- package/dist/server/routes/syncV3LocalCaptureRoutes.js +28 -2
- package/dist/server/routes/syncV3LocalFeedApplyRoutes.d.ts +1 -0
- package/dist/server/routes/syncV3LocalFeedApplyRoutes.js +26 -0
- package/dist/server/routes/syncV3OperationRoutes.js +45 -9
- package/dist/server/routes/tasks.js +124 -13
- package/dist/server/routes/workflows.js +9 -1
- package/dist/server/routes/workspaces.js +43 -1
- package/dist/server/routes.js +59 -0
- package/dist/server/workspaceDeletionAdmission.d.ts +23 -0
- package/dist/server/workspaceDeletionAdmission.js +50 -0
- package/dist/service/localServiceCli.js +16 -0
- package/dist/service/localServiceClientLifecycle.js +36 -10
- package/dist/services/codexAppServerModelGateway.d.ts +161 -0
- package/dist/services/codexAppServerModelGateway.js +663 -0
- package/dist/services/codexDeviceCodeLoginManager.d.ts +39 -0
- package/dist/services/codexDeviceCodeLoginManager.js +265 -0
- package/dist/services/codexModelProviderConnectionLifecycle.d.ts +8 -0
- package/dist/services/codexModelProviderConnectionLifecycle.js +73 -0
- package/dist/services/executorPhaseAApprovalRuntime.d.ts +14 -0
- package/dist/services/executorPhaseAApprovalRuntime.js +24 -0
- package/dist/services/executorPhaseAApprovalService.d.ts +40 -0
- package/dist/services/executorPhaseAApprovalService.js +609 -0
- package/dist/services/executorPhaseADriftEvaluator.d.ts +78 -0
- package/dist/services/executorPhaseADriftEvaluator.js +93 -0
- package/dist/services/executorPhaseAIssuerCore.d.ts +126 -0
- package/dist/services/executorPhaseAIssuerCore.js +295 -0
- package/dist/services/executorPhaseAIssuerRedemptionService.d.ts +34 -0
- package/dist/services/executorPhaseAIssuerRedemptionService.js +158 -0
- package/dist/services/githubReviewEvidenceRuntime.d.ts +14 -0
- package/dist/services/githubReviewEvidenceRuntime.js +30 -0
- package/dist/services/githubReviewEvidenceService.d.ts +93 -0
- package/dist/services/githubReviewEvidenceService.js +336 -0
- package/dist/services/modelGateway.d.ts +7 -0
- package/dist/services/modelProviderConnectionService.d.ts +71 -0
- package/dist/services/modelProviderConnectionService.js +279 -0
- package/dist/services/modelProviderCredentialHome.d.ts +32 -0
- package/dist/services/modelProviderCredentialHome.js +271 -0
- package/dist/services/ownerScopedModelConnectionGateway.d.ts +12 -0
- package/dist/services/ownerScopedModelConnectionGateway.js +30 -0
- package/dist/services/taskforceAgentConnectionBindingService.d.ts +66 -0
- package/dist/services/taskforceAgentConnectionBindingService.js +185 -0
- package/dist/services/taskforceAgentMcpBridge.d.ts +8 -2
- package/dist/services/taskforceAgentMcpBridge.js +30 -27
- package/dist/shared/adminEdgeProxy.d.ts +5 -0
- package/dist/shared/adminEdgeProxy.js +94 -0
- package/dist/shared/adminProxySessionCookies.d.ts +16 -0
- package/dist/shared/adminProxySessionCookies.js +86 -0
- package/dist/shared/aiProfileColors.d.ts +31 -1
- package/dist/shared/aiProfileColors.js +14 -6
- package/dist/shared/executorPhaseAApprovalGoldenVector.json +269 -0
- package/dist/shared/executorPhaseAApprovalReceipt.d.ts +112 -0
- package/dist/shared/executorPhaseAApprovalReceipt.js +58 -0
- package/dist/shared/executorPhaseAApprovalTrustPolicy.json +10 -0
- package/dist/shared/executorPhaseADriftContracts.d.ts +37 -0
- package/dist/shared/executorPhaseADriftContracts.js +63 -0
- package/dist/shared/executorPhaseAIssuerContracts.d.ts +75 -0
- package/dist/shared/executorPhaseAIssuerContracts.js +90 -0
- package/dist/shared/executorPhaseARunAuthorization.d.ts +120 -0
- package/dist/shared/executorPhaseARunAuthorization.js +232 -0
- package/dist/shared/executorPhaseASchemaValidation.d.ts +7 -0
- package/dist/shared/executorPhaseASchemaValidation.js +53 -0
- package/dist/shared/executorPhaseASchemas/approval-receipt.schema.json +106 -0
- package/dist/shared/executorPhaseASchemas/drift-attestation.schema.json +54 -0
- package/dist/shared/executorPhaseASchemas/drift-request.schema.json +47 -0
- package/dist/shared/executorPhaseASchemas/foundation-manifest.schema.json +29 -0
- package/dist/shared/executorPhaseASchemas/issuer-audit-record.schema.json +24 -0
- package/dist/shared/executorPhaseASchemas/issuer-proof.schema.json +43 -0
- package/dist/shared/executorPhaseASchemas/issuer-redemption-request.schema.json +18 -0
- package/dist/shared/executorPhaseASchemas/issuer-redemption-response.schema.json +39 -0
- package/dist/shared/executorPhaseASchemas/logical-envelope.schema.json +149 -0
- package/dist/shared/executorPhaseASchemas/preflight-report.schema.json +216 -0
- package/dist/shared/executorPhaseASchemas/run-capability.schema.json +111 -0
- package/dist/shared/executorPhaseASchemas/sender-proof.schema.json +37 -0
- package/dist/shared/executorPhaseASchemas/workload-grant.schema.json +68 -0
- package/dist/shared/executorPhaseASchemas/workload-jwt-claims.schema.json +67 -0
- package/dist/shared/executorPhaseATiming.d.ts +1 -0
- package/dist/shared/executorPhaseATiming.js +1 -0
- package/dist/shared/planningIdentity.js +1 -1
- package/dist/shared/productLogoKeys.d.ts +2 -0
- package/dist/shared/productLogoKeys.js +18 -0
- package/dist/shared/taskforceAgentDefinition.d.ts +0 -1
- package/dist/shared/taskforceAgentDefinition.js +6 -3
- package/dist/shared/taskforceAgentModels.d.ts +1 -0
- package/dist/shared/taskforceAgentModels.js +36 -3
- package/dist/shared/userFeatureGrants.d.ts +4 -0
- package/dist/shared/userFeatureGrants.js +7 -0
- package/dist/storage/executorPhaseAApprovalReceiptStore.d.ts +37 -0
- package/dist/storage/executorPhaseAApprovalReceiptStore.js +81 -0
- package/dist/storage/executorPhaseARunAuthorizationStore.d.ts +103 -0
- package/dist/storage/executorPhaseARunAuthorizationStore.js +492 -0
- package/dist/storage/githubReviewEvidenceInstallationStore.d.ts +26 -0
- package/dist/storage/githubReviewEvidenceInstallationStore.js +89 -0
- package/dist/storage/modelProviderConnectionStore.d.ts +99 -0
- package/dist/storage/modelProviderConnectionStore.js +446 -0
- package/dist/storage/postgresAdapter.d.ts +24 -3
- package/dist/storage/postgresAdapter.js +117 -14
- package/dist/storage/postgresWorker.js +22 -5
- package/dist/storage/postgresWorkerProtocol.d.ts +30 -0
- package/dist/storage/postgresWorkerProtocol.js +30 -0
- package/dist/storage/taskforceAgentConnectionBindingStore.d.ts +31 -0
- package/dist/storage/taskforceAgentConnectionBindingStore.js +84 -0
- package/dist/sync/cloudSyncApi.d.ts +4 -1
- package/dist/sync/cloudSyncApi.js +7 -2
- package/dist/sync/contentSyncState.d.ts +1 -1
- package/dist/sync/coordinator/localSyncExecutionPermitStore.d.ts +1 -0
- package/dist/sync/coordinator/localSyncExecutionPermitStore.js +67 -30
- package/dist/sync/coordinator/localWorkspaceSyncPendingV2PushProgress.d.ts +10 -0
- package/dist/sync/coordinator/localWorkspaceSyncPendingV2PushProgress.js +29 -0
- package/dist/sync/coordinator/localWorkspaceSyncRunner.js +6 -2
- package/dist/sync/coordinator/localWorkspaceSyncRunnerState.d.ts +15 -1
- package/dist/sync/coordinator/localWorkspaceSyncRunnerState.js +99 -2
- package/dist/sync/coordinator/workspaceSyncCredentialBroker.d.ts +1 -0
- package/dist/sync/coordinator/workspaceSyncCredentialBroker.js +33 -4
- package/dist/sync/engine/workspaceSyncContentLifecycleAdapter.d.ts +2 -1
- package/dist/sync/engine/workspaceSyncContentVersionStore.d.ts +38 -0
- package/dist/sync/engine/workspaceSyncContentVersionStore.js +50 -1
- package/dist/sync/engine/workspaceSyncEngineBrowserGatewayRemoteServices.js +20 -2
- package/dist/sync/engine/workspaceSyncEngineLifecyclePolicy.js +6 -6
- package/dist/sync/engine/workspaceSyncEngineLocalServices.d.ts +4 -0
- package/dist/sync/engine/workspaceSyncEngineLocalServices.js +11 -0
- package/dist/sync/engine/workspaceSyncEnginePushCompletion.d.ts +14 -0
- package/dist/sync/engine/workspaceSyncEnginePushCompletion.js +84 -0
- package/dist/sync/engine/workspaceSyncEngineRecovery.js +1 -0
- package/dist/sync/engine/workspaceSyncEngineRemoteServices.d.ts +11 -0
- package/dist/sync/engine/workspaceSyncEngineRemoteServices.js +2 -1
- package/dist/sync/engine/workspaceSyncEngineRuntime.d.ts +1 -0
- package/dist/sync/engine/workspaceSyncEngineRuntime.js +1 -0
- package/dist/sync/engine/workspaceSyncEngineServerRemoteServices.js +31 -4
- package/dist/sync/engine/workspaceSyncEngineServerRunnerOperations.d.ts +3 -1
- package/dist/sync/engine/workspaceSyncEngineServerRunnerOperations.js +134 -43
- package/dist/sync/engine/workspaceSyncEngineServerSnapshotReader.js +6 -0
- package/dist/sync/engine/workspaceSyncEngineTransfers.d.ts +1 -1
- package/dist/sync/engine/workspaceSyncEngineTransfers.js +11 -4
- package/dist/sync/engine/workspaceSyncV2ChangeDispatcher.d.ts +1 -0
- package/dist/sync/engine/workspaceSyncV2ChangeDispatcher.js +29 -0
- package/dist/sync/syncApplyHandlers.d.ts +2 -0
- package/dist/sync/syncApplyHandlers.js +10 -1
- package/dist/sync/syncService.d.ts +17 -0
- package/dist/sync/syncService.js +87 -19
- package/dist/sync/taskforceAgentSyncAuthorization.d.ts +16 -0
- package/dist/sync/taskforceAgentSyncAuthorization.js +20 -0
- package/dist/sync/v3/combinedFeedCapability.js +8 -0
- package/dist/sync/v3/durableInitiativeMutationRouter.js +18 -10
- package/dist/sync/v3/durableOperationReplay.d.ts +14 -0
- package/dist/sync/v3/durableOperationReplay.js +18 -0
- package/dist/sync/v3/durableTaskAttachmentLinksMutationRouter.d.ts +2 -0
- package/dist/sync/v3/durableTaskAttachmentLinksMutationRouter.js +14 -1
- package/dist/sync/v3/durableTaskChecklistMutationRouter.d.ts +4 -1
- package/dist/sync/v3/durableTaskChecklistMutationRouter.js +62 -15
- package/dist/sync/v3/durableTaskCommentMutationRouter.js +3 -0
- package/dist/sync/v3/durableTaskHttpBulkMutationRouter.d.ts +1 -0
- package/dist/sync/v3/durableTaskHttpBulkMutationRouter.js +30 -8
- package/dist/sync/v3/durableTaskHttpRootMutationRouter.d.ts +5 -3
- package/dist/sync/v3/durableTaskHttpRootMutationRouter.js +37 -2
- package/dist/sync/v3/durableTaxonomyMutationRouter.js +5 -0
- package/dist/sync/v3/durableWorkflowRuntimeMutationRouter.d.ts +11 -0
- package/dist/sync/v3/durableWorkflowRuntimeMutationRouter.js +39 -10
- package/dist/sync/v3/durableWorkstreamMutationRouter.js +18 -10
- package/dist/sync/v3/durableWorkstreamTaskOrderMutationRouter.js +16 -5
- package/dist/sync/v3/localOutboxDispatchRuntime.js +2 -2
- package/dist/sync/v3/localTaskAttachmentLinksOutboxService.d.ts +2 -0
- package/dist/sync/v3/localTaskAttachmentLinksOutboxService.js +47 -7
- package/dist/sync/v3/localTaskChecklistOutboxHandler.js +16 -2
- package/dist/sync/v3/localTaskChecklistOutboxService.d.ts +4 -0
- package/dist/sync/v3/localTaskChecklistOutboxService.js +14 -1
- package/dist/sync/v3/localTaskCreateOutboxService.js +15 -6
- package/dist/sync/v3/localTaskMetadataClient.d.ts +1 -0
- package/dist/sync/v3/localTaskMetadataClient.js +1 -0
- package/dist/sync/v3/localTaskMetadataOutboxHandler.js +5 -1
- package/dist/sync/v3/localTaskMetadataOutboxService.d.ts +2 -0
- package/dist/sync/v3/localTaskMetadataOutboxService.js +7 -0
- package/dist/sync/v3/localTaskRestoreOutboxService.js +14 -6
- package/dist/sync/v3/localTaskStatusClient.d.ts +1 -0
- package/dist/sync/v3/localTaskStatusClient.js +6 -1
- package/dist/sync/v3/localTaskStatusOutboxService.d.ts +10 -0
- package/dist/sync/v3/localTaskStatusOutboxService.js +272 -24
- package/dist/sync/v3/syncDurabilityStore.d.ts +41 -0
- package/dist/sync/v3/syncDurabilityStore.js +199 -13
- package/dist/sync/v3/taskAttachmentLinksMutationService.d.ts +6 -4
- package/dist/sync/v3/taskAttachmentLinksMutationService.js +19 -10
- package/dist/sync/v3/taskChecklistMutationService.d.ts +15 -2
- package/dist/sync/v3/taskChecklistMutationService.js +48 -1
- package/dist/sync/v3/taskCreateMutationService.d.ts +2 -2
- package/dist/sync/v3/taskCreateMutationService.js +7 -4
- package/dist/sync/v3/taskMetadataMutationService.d.ts +3 -0
- package/dist/sync/v3/taskMetadataMutationService.js +4 -0
- package/dist/sync/v3/taskRestoreMutationService.d.ts +2 -2
- package/dist/sync/v3/taskRestoreMutationService.js +7 -4
- package/dist/sync/v3/taskStatusMutationService.d.ts +31 -1
- package/dist/sync/v3/taskStatusMutationService.js +123 -3
- package/dist/sync/v3/workflowAssignmentSync.d.ts +6 -0
- package/dist/sync/v3/workflowAssignmentSync.js +30 -0
- package/dist/sync/v3/workspaceSyncJournalReader.js +1 -1
- package/dist/sync/v3/workspaceSyncOperationRetentionService.d.ts +16 -0
- package/dist/sync/v3/workspaceSyncOperationRetentionService.js +83 -0
- package/dist/sync/v3/workspaceSyncV2ProjectionExclusions.d.ts +1 -1
- package/dist/sync/v3/workspaceSyncV2ProjectionExclusions.js +13 -3
- package/dist/sync/v3/workspaceSyncV3AttachmentApplyObligationStore.d.ts +11 -0
- package/dist/sync/v3/workspaceSyncV3AttachmentApplyObligationStore.js +27 -10
- package/dist/sync/v3/workspaceSyncV3AttachmentAssetHydration.d.ts +2 -1
- package/dist/sync/v3/workspaceSyncV3AttachmentAssetHydration.js +52 -10
- package/dist/sync/v3/workspaceSyncV3CloudOperationHandler.d.ts +1 -0
- package/dist/sync/v3/workspaceSyncV3CloudOperationHandler.js +18 -3
- package/dist/sync/v3/workspaceSyncV3CombinedFeedOrchestrator.js +8 -3
- package/dist/sync/v3/workspaceSyncV3CombinedLocalApply.js +51 -10
- package/dist/sync/v3/workspaceSyncV3CombinedRepairBaseline.d.ts +14 -0
- package/dist/sync/v3/workspaceSyncV3CombinedRepairBaseline.js +49 -25
- package/dist/sync/v3/workspaceSyncV3CombinedRepairMaterialization.d.ts +13 -4
- package/dist/sync/v3/workspaceSyncV3CombinedRepairMaterialization.js +124 -57
- package/dist/sync/v3/workspaceSyncV3CombinedRepairSnapshot.d.ts +20 -0
- package/dist/sync/v3/workspaceSyncV3CombinedRepairSnapshot.js +106 -30
- package/dist/sync/v3/workspaceSyncV3CombinedWireContract.d.ts +4 -1
- package/dist/sync/v3/workspaceSyncV3CombinedWireContract.js +34 -0
- package/dist/sync/v3/workspaceSyncV3CoverageRegistry.js +12 -0
- package/dist/sync/v3/workspaceSyncV3FeedProfile.d.ts +1 -1
- package/dist/sync/v3/workspaceSyncV3LegacyBoundaryAttestation.d.ts +1 -0
- package/dist/sync/v3/workspaceSyncV3LegacyBoundaryAttestation.js +23 -10
- package/dist/sync/v3/workspaceSyncV3NestedTaskApply.d.ts +3 -0
- package/dist/sync/v3/workspaceSyncV3NestedTaskApply.js +64 -13
- package/dist/sync/v3/workspaceSyncV3NestedTaskCodecs.d.ts +9 -0
- package/dist/sync/v3/workspaceSyncV3NestedTaskCodecs.js +26 -0
- package/dist/sync/v3/workspaceSyncV3NestedTaskProjection.d.ts +15 -5
- package/dist/sync/v3/workspaceSyncV3NestedTaskProjection.js +50 -14
- package/dist/sync/v3/workspaceSyncV3NestedTaskRepairSnapshot.d.ts +2 -1
- package/dist/sync/v3/workspaceSyncV3NestedTaskRepairSnapshot.js +11 -3
- package/dist/sync/v3/workspaceSyncV3OperationProtocol.d.ts +5 -0
- package/dist/sync/v3/workspaceSyncV3OperatorDiagnostics.d.ts +7 -0
- package/dist/sync/v3/workspaceSyncV3OperatorDiagnostics.js +55 -9
- package/dist/sync/v3/workspaceSyncV3RepairSnapshotRetentionService.d.ts +17 -0
- package/dist/sync/v3/workspaceSyncV3RepairSnapshotRetentionService.js +64 -0
- package/dist/sync/v3/workspaceSyncV3TaskCommentAudit.js +9 -2
- package/dist/sync/v3/workspaceSyncV3TaskCoverCoverage.d.ts +7 -0
- package/dist/sync/v3/workspaceSyncV3TaskCoverCoverage.js +37 -0
- package/dist/sync/v3/workspaceSyncV3TaskCoverWireContract.d.ts +6 -0
- package/dist/sync/v3/workspaceSyncV3TaskCoverWireContract.js +9 -0
- package/dist/sync/v3/workspaceSyncV3WorkflowTaskCoverCoverage.d.ts +7 -0
- package/dist/sync/v3/workspaceSyncV3WorkflowTaskCoverCoverage.js +33 -0
- package/dist/sync/v3/workspaceSyncV3WorkflowTaskCoverWireContract.d.ts +7 -0
- package/dist/sync/v3/workspaceSyncV3WorkflowTaskCoverWireContract.js +8 -0
- package/dist/sync/workspacePullFeed.js +2 -1
- package/dist/sync/workspaceRepair.d.ts +8 -2
- package/dist/sync/workspaceRepair.js +222 -6
- package/dist/sync/workspaceSyncModel.d.ts +21 -0
- package/dist/sync/workspaceSyncModel.js +35 -7
- package/dist/sync/workspaceSyncState.d.ts +1 -0
- package/dist/sync/workspaceSyncV2SnapshotBuilder.d.ts +6 -0
- package/dist/sync/workspaceSyncV2SnapshotBuilder.js +5 -0
- package/dist/types.d.ts +47 -1
- package/dist/types.js +6 -0
- package/dist/ui/assets/AiIdentityRosterCard-OcSz1PkK.js +1 -0
- package/dist/ui/assets/AiProfilesModule-ByhYW5Xi.js +1 -0
- package/dist/ui/assets/AnnotatedAttachmentWorkspace-BTM6nIg_.js +3 -0
- package/dist/ui/assets/AnnotatedAttachmentWorkspace-TzYu7pkG.css +1 -0
- package/dist/ui/assets/{AssetTraySortControl-Kf1pelSy.js → AssetTraySortControl-DabEG8L4.js} +1 -1
- package/dist/ui/assets/{ContextAttachmentManager-B8boOs6Q.js → ContextAttachmentManager-Coa8yVGM.js} +2 -2
- package/dist/ui/assets/{DocumentWorkspace-DXH4XUsB.js → DocumentWorkspace-BB0qhdix.js} +1 -1
- package/dist/ui/assets/{EntityActivityTimeline-BtSTq0ON.js → EntityActivityTimeline-CZ8x4UJE.js} +1 -1
- package/dist/ui/assets/PlanningModule-pRPjR7v5.js +1 -0
- package/dist/ui/assets/PlansPage-D86pZSSl.js +1 -0
- package/dist/ui/assets/TaskContextUpload-BVIkU9yT.js +1 -0
- package/dist/ui/assets/TaskSettings-Cv1mNhv_.js +12 -0
- package/dist/ui/assets/TaskforceAgentsModule-b-8R25cJ.css +1 -0
- package/dist/ui/assets/TaskforceAgentsModule-gmH-PD2q.js +24 -0
- package/dist/ui/assets/{WorkflowManagerModule-DWFspC-o.js → WorkflowManagerModule-DbfnHJ-f.js} +1 -1
- package/dist/ui/assets/index-BZ-hdZSk.css +1 -0
- package/dist/ui/assets/index-CTsDBaef.js +7 -0
- package/dist/ui/assets/{vendor-icons-BkFLXavV.js → vendor-icons-Bsq-mcEn.js} +1 -1
- package/dist/ui/branding/logos/letterhead_dark.png +0 -0
- package/dist/ui/branding/logos/letterhead_light.png +0 -0
- package/dist/ui/branding/logos/signature_dark.png +0 -0
- package/dist/ui/branding/logos/signature_light.png +0 -0
- package/dist/ui/index.html +3 -3
- package/dist/utils/aiProfileDefaultLogo.js +16 -48
- package/dist/utils/httpSetCookie.d.ts +1 -0
- package/dist/utils/httpSetCookie.js +4 -1
- package/dist/utils/localRuntimeUrl.d.ts +1 -0
- package/dist/utils/localRuntimeUrl.js +14 -0
- package/dist/utils/productLogoRegistry.d.ts +2 -0
- package/dist/utils/productLogoRegistry.js +36 -0
- package/dist/utils/syncStatusPresentation.d.ts +4 -0
- package/dist/utils/syncStatusPresentation.js +17 -0
- package/dist/utils/taskActivity.d.ts +3 -2
- package/dist/utils/taskActivity.js +19 -2
- package/dist/utils/taskEditorReconciliation.d.ts +40 -0
- package/dist/utils/taskEditorReconciliation.js +217 -0
- package/dist/utils/taskEvents.d.ts +2 -0
- package/dist/utils/taskNormalization.d.ts +1 -0
- package/dist/utils/taskNormalization.js +39 -0
- package/dist/utils/taskSearch.js +2 -2
- package/dist/utils/uiNotice.d.ts +4 -0
- package/dist/utils/workspaceSyncPresentation.d.ts +1 -1
- package/dist/utils/workspaceSyncPresentation.js +23 -17
- package/package.json +36 -6
- package/dist/ui/assets/AiIdentityRosterCard-MZs7lVED.js +0 -1
- package/dist/ui/assets/AiProfilesModule-C3i0LOxe.js +0 -1
- package/dist/ui/assets/AnnotatedAttachmentWorkspace-CBRZ8rca.css +0 -1
- package/dist/ui/assets/AnnotatedAttachmentWorkspace-DVZk5Tln.js +0 -3
- package/dist/ui/assets/PlanningModule-BPVyEa-f.js +0 -1
- package/dist/ui/assets/PlansPage-ChqgxALc.js +0 -1
- package/dist/ui/assets/TaskContextUpload-CB3ol0sN.js +0 -1
- package/dist/ui/assets/TaskSettings-g4ECKNOz.js +0 -12
- package/dist/ui/assets/TaskforceAgentsModule-BazdUwxZ.js +0 -21
- package/dist/ui/assets/TaskforceAgentsModule-D6IC0S7Q.css +0 -1
- package/dist/ui/assets/index-BUplSsv_.js +0 -7
- package/dist/ui/assets/index-gz2EXuoK.css +0 -1
|
@@ -6,6 +6,7 @@ import { resolveStorageKeyPathInsideRoot } from '../utils/pathSafety.js';
|
|
|
6
6
|
import { compareWorkspaceMutationOrdering } from './workspaceSyncSurface.js';
|
|
7
7
|
import { relativePathWithinRoot } from '../utils/pathContainment.js';
|
|
8
8
|
import { listReferencedAiProfileAvatarAssetPaths, } from './aiProfileAvatarSyncPaths.js';
|
|
9
|
+
import { WORKSPACE_CONTENT_MANIFEST_VERSION, createWorkspaceContentMetadataFingerprintV1, } from './workspaceContentManifest.js';
|
|
9
10
|
function normalizeWorkspaceId(raw) {
|
|
10
11
|
return String(raw || '').trim() || 'default';
|
|
11
12
|
}
|
|
@@ -44,6 +45,14 @@ function collectFiles(dirPath, predicate) {
|
|
|
44
45
|
visit(root);
|
|
45
46
|
return output;
|
|
46
47
|
}
|
|
48
|
+
function isStorageRootAccessible(basePath) {
|
|
49
|
+
try {
|
|
50
|
+
return fs.statSync(basePath).isDirectory();
|
|
51
|
+
}
|
|
52
|
+
catch {
|
|
53
|
+
return false;
|
|
54
|
+
}
|
|
55
|
+
}
|
|
47
56
|
function readFileFingerprint(absolutePath) {
|
|
48
57
|
try {
|
|
49
58
|
const stat = fs.statSync(absolutePath);
|
|
@@ -102,6 +111,68 @@ function getPrimaryTaskId(store, assetId, workspaceId) {
|
|
|
102
111
|
const links = store.listLinksForAsset(assetId, workspaceId, { includeDeleted: false });
|
|
103
112
|
return links[0]?.taskId || null;
|
|
104
113
|
}
|
|
114
|
+
function buildContentPullObligationInputForAsset(input) {
|
|
115
|
+
const links = input.store.listLinksForAsset(input.entry.assetId, input.workspaceId, { includeDeleted: false });
|
|
116
|
+
const primaryLink = links[0] || null;
|
|
117
|
+
// Mirrors resolveSyncLinkTarget (src/sync/contentSyncState.ts): a task link has no
|
|
118
|
+
// explicit targetType on the row (it's implied), so it must default to 'task' here
|
|
119
|
+
// rather than null — otherwise this fingerprint diverges from the one a real content
|
|
120
|
+
// manifest read (workspacePullFeed.ts) computes for the same task-linked asset, and
|
|
121
|
+
// the 'exact-version' obligation-resolution path can never match it.
|
|
122
|
+
const primaryLinkTargetId = String(primaryLink?.targetId || primaryLink?.taskId || '').trim();
|
|
123
|
+
const linkTargetType = primaryLinkTargetId
|
|
124
|
+
? (primaryLink.targetType === 'initiative' || primaryLink.targetType === 'workstream' ? primaryLink.targetType : 'task')
|
|
125
|
+
: null;
|
|
126
|
+
const linkTargetId = linkTargetType ? primaryLinkTargetId : null;
|
|
127
|
+
const taskId = linkTargetType === 'task' ? linkTargetId : null;
|
|
128
|
+
const metadataFingerprint = input.kind === 'document'
|
|
129
|
+
? createWorkspaceContentMetadataFingerprintV1({
|
|
130
|
+
kind: 'document',
|
|
131
|
+
metadata: {
|
|
132
|
+
assetId: input.entry.assetId,
|
|
133
|
+
documentId: input.entry.documentId,
|
|
134
|
+
referenceNumber: input.entry.referenceNumber,
|
|
135
|
+
version: input.entry.version,
|
|
136
|
+
taskId,
|
|
137
|
+
linkTargetType,
|
|
138
|
+
linkTargetId,
|
|
139
|
+
logicalName: input.entry.logicalName,
|
|
140
|
+
caption: null,
|
|
141
|
+
originalFilename: input.entry.originalFilename,
|
|
142
|
+
linkRole: primaryLink?.role === 'reference' ? 'reference' : 'attachment',
|
|
143
|
+
},
|
|
144
|
+
})
|
|
145
|
+
: createWorkspaceContentMetadataFingerprintV1({
|
|
146
|
+
kind: 'asset',
|
|
147
|
+
metadata: {
|
|
148
|
+
assetId: input.entry.assetId,
|
|
149
|
+
assetKind: input.entry.kind === 'image' ? 'image' : 'file',
|
|
150
|
+
mimeType: input.entry.mimeType,
|
|
151
|
+
referenceNumber: input.entry.referenceNumber,
|
|
152
|
+
taskId,
|
|
153
|
+
linkTargetType,
|
|
154
|
+
linkTargetId,
|
|
155
|
+
logicalName: input.entry.logicalName,
|
|
156
|
+
caption: null,
|
|
157
|
+
originalFilename: input.entry.originalFilename,
|
|
158
|
+
linkRole: primaryLink?.role || 'attachment',
|
|
159
|
+
},
|
|
160
|
+
});
|
|
161
|
+
const manifest = {
|
|
162
|
+
manifestVersion: WORKSPACE_CONTENT_MANIFEST_VERSION,
|
|
163
|
+
kind: input.kind,
|
|
164
|
+
path: input.path,
|
|
165
|
+
sha256: String(input.entry.contentSha256 || ''),
|
|
166
|
+
sizeBytes: Number(input.entry.sizeBytes || 0),
|
|
167
|
+
updatedAt: input.entry.updatedAt,
|
|
168
|
+
metadataFingerprint,
|
|
169
|
+
existsLocally: false,
|
|
170
|
+
};
|
|
171
|
+
return {
|
|
172
|
+
manifest,
|
|
173
|
+
sourceWatermark: input.entry.updatedAt,
|
|
174
|
+
};
|
|
175
|
+
}
|
|
105
176
|
function decodePathSegment(raw) {
|
|
106
177
|
try {
|
|
107
178
|
return decodeURIComponent(raw);
|
|
@@ -145,6 +216,7 @@ function buildManifestEntriesFromMetadata(tenantId, workspaceId, store, basePath
|
|
|
145
216
|
const assetDeletes = [];
|
|
146
217
|
const protectedDocumentPaths = new Set();
|
|
147
218
|
const protectedAssetPaths = new Set();
|
|
219
|
+
const storageRootAccessible = isStorageRootAccessible(basePath);
|
|
148
220
|
const metadataEntries = store.listAllByWorkspace(workspaceId, { includeDeleted: true });
|
|
149
221
|
for (const entry of metadataEntries) {
|
|
150
222
|
const contentKind = entry.kind === 'document' ? 'document' : 'asset';
|
|
@@ -192,6 +264,7 @@ function buildManifestEntriesFromMetadata(tenantId, workspaceId, store, basePath
|
|
|
192
264
|
? resolveStorageKeyPathInsideRoot(basePath, published.physicalKey)
|
|
193
265
|
: null;
|
|
194
266
|
let existsLocally = false;
|
|
267
|
+
let contentCheckReliable = true;
|
|
195
268
|
if (!supportsPublishedContent) {
|
|
196
269
|
existsLocally = true;
|
|
197
270
|
}
|
|
@@ -200,13 +273,23 @@ function buildManifestEntriesFromMetadata(tenantId, workspaceId, store, basePath
|
|
|
200
273
|
existsLocally = true;
|
|
201
274
|
}
|
|
202
275
|
else if (physicalPath) {
|
|
203
|
-
|
|
204
|
-
|
|
205
|
-
|
|
206
|
-
|
|
207
|
-
}
|
|
208
|
-
catch {
|
|
276
|
+
if (!storageRootAccessible) {
|
|
277
|
+
// The storage root itself couldn't be verified (e.g. an unmounted volume or
|
|
278
|
+
// transient I/O failure) — every local file would look "missing" in that state,
|
|
279
|
+
// so don't let a whole-root outage masquerade as N individual deletions.
|
|
209
280
|
existsLocally = false;
|
|
281
|
+
contentCheckReliable = false;
|
|
282
|
+
}
|
|
283
|
+
else {
|
|
284
|
+
try {
|
|
285
|
+
const stat = fs.statSync(physicalPath);
|
|
286
|
+
existsLocally = stat.isFile()
|
|
287
|
+
&& (published.source !== 'versioned' || stat.size === published.sizeBytes);
|
|
288
|
+
}
|
|
289
|
+
catch (error) {
|
|
290
|
+
existsLocally = false;
|
|
291
|
+
contentCheckReliable = error?.code === 'ENOENT';
|
|
292
|
+
}
|
|
210
293
|
}
|
|
211
294
|
}
|
|
212
295
|
}
|
|
@@ -231,6 +314,7 @@ function buildManifestEntriesFromMetadata(tenantId, workspaceId, store, basePath
|
|
|
231
314
|
sha256: contentSha256,
|
|
232
315
|
sizeBytes,
|
|
233
316
|
existsLocally,
|
|
317
|
+
contentCheckReliable,
|
|
234
318
|
source: 'metadata',
|
|
235
319
|
publicationState,
|
|
236
320
|
publicationError,
|
|
@@ -249,6 +333,7 @@ function buildManifestEntriesFromMetadata(tenantId, workspaceId, store, basePath
|
|
|
249
333
|
sha256: contentSha256,
|
|
250
334
|
sizeBytes,
|
|
251
335
|
existsLocally,
|
|
336
|
+
contentCheckReliable,
|
|
252
337
|
source: 'metadata',
|
|
253
338
|
publicationState,
|
|
254
339
|
publicationError,
|
|
@@ -307,6 +392,7 @@ export function buildWorkspaceRepairManifest(input) {
|
|
|
307
392
|
sha256: fingerprint.sha256,
|
|
308
393
|
sizeBytes: fingerprint.sizeBytes,
|
|
309
394
|
existsLocally: true,
|
|
395
|
+
contentCheckReliable: true,
|
|
310
396
|
source: 'filesystem',
|
|
311
397
|
publicationState: 'legacy',
|
|
312
398
|
publicationError: null,
|
|
@@ -337,6 +423,7 @@ export function buildWorkspaceRepairManifest(input) {
|
|
|
337
423
|
sha256: fingerprint.sha256,
|
|
338
424
|
sizeBytes: fingerprint.sizeBytes,
|
|
339
425
|
existsLocally: true,
|
|
426
|
+
contentCheckReliable: true,
|
|
340
427
|
source: 'filesystem',
|
|
341
428
|
publicationState: 'legacy',
|
|
342
429
|
publicationError: null,
|
|
@@ -466,6 +553,19 @@ export function scanWorkspaceRepair(input) {
|
|
|
466
553
|
continue;
|
|
467
554
|
}
|
|
468
555
|
if (!document.existsLocally) {
|
|
556
|
+
if (!document.contentCheckReliable) {
|
|
557
|
+
issues.push({
|
|
558
|
+
code: 'document_content_unverified',
|
|
559
|
+
entityKind: 'document',
|
|
560
|
+
path: document.path,
|
|
561
|
+
assetId: document.assetId,
|
|
562
|
+
taskId: document.taskId,
|
|
563
|
+
repairable: false,
|
|
564
|
+
recommendedAction: 'retry-pull',
|
|
565
|
+
detail: 'Local document file could not be confirmed missing — the storage root was unreachable or the check was inconclusive. Skipped to avoid converting unavailable content into an authoritative deletion; queued for durable retry instead.'
|
|
566
|
+
});
|
|
567
|
+
continue;
|
|
568
|
+
}
|
|
469
569
|
issues.push({
|
|
470
570
|
code: 'missing_document_file',
|
|
471
571
|
entityKind: 'document',
|
|
@@ -564,6 +664,19 @@ export function scanWorkspaceRepair(input) {
|
|
|
564
664
|
if (!asset.existsLocally) {
|
|
565
665
|
if (protectedAiAvatarAssetPaths.has(asset.path))
|
|
566
666
|
continue;
|
|
667
|
+
if (!asset.contentCheckReliable) {
|
|
668
|
+
issues.push({
|
|
669
|
+
code: 'asset_content_unverified',
|
|
670
|
+
entityKind: 'asset',
|
|
671
|
+
path: asset.path,
|
|
672
|
+
assetId: asset.assetId,
|
|
673
|
+
taskId: asset.taskId,
|
|
674
|
+
repairable: false,
|
|
675
|
+
recommendedAction: 'retry-pull',
|
|
676
|
+
detail: 'Local asset file could not be confirmed missing — the storage root was unreachable or the check was inconclusive. Skipped to avoid converting unavailable content into an authoritative deletion; queued for durable retry instead.'
|
|
677
|
+
});
|
|
678
|
+
continue;
|
|
679
|
+
}
|
|
567
680
|
issues.push({
|
|
568
681
|
code: 'missing_asset_file',
|
|
569
682
|
entityKind: 'asset',
|
|
@@ -721,6 +834,7 @@ export function applyWorkspaceRepair(input) {
|
|
|
721
834
|
const actionsApplied = [];
|
|
722
835
|
const workspaceId = normalizeWorkspaceId(input.workspaceId);
|
|
723
836
|
const activeTaskIds = new Set((input.tasks || []).map((task) => String(task.id || '').trim()).filter(Boolean));
|
|
837
|
+
const nowIso = () => (input.now ? input.now() : new Date().toISOString());
|
|
724
838
|
const deletedMetadataByPath = new Map();
|
|
725
839
|
if (input.workspaceAssetStore) {
|
|
726
840
|
for (const entry of input.workspaceAssetStore.listAllByWorkspace(workspaceId, { includeDeleted: true })) {
|
|
@@ -730,6 +844,69 @@ export function applyWorkspaceRepair(input) {
|
|
|
730
844
|
}
|
|
731
845
|
}
|
|
732
846
|
for (const issue of scan.issues) {
|
|
847
|
+
if (issue.code === 'document_content_unverified' || issue.code === 'asset_content_unverified') {
|
|
848
|
+
if (!input.contentPullObligationStore || !input.workspaceAssetStore || !issue.assetId || !issue.path) {
|
|
849
|
+
actionsApplied.push({
|
|
850
|
+
code: issue.code,
|
|
851
|
+
path: issue.path,
|
|
852
|
+
assetId: issue.assetId,
|
|
853
|
+
taskId: issue.taskId,
|
|
854
|
+
action: issue.recommendedAction,
|
|
855
|
+
status: 'skipped',
|
|
856
|
+
detail: 'No durable content-pull obligation store is available in this runtime; content-availability uncertainty was reported but not queued for retry.'
|
|
857
|
+
});
|
|
858
|
+
continue;
|
|
859
|
+
}
|
|
860
|
+
try {
|
|
861
|
+
const assetEntry = input.workspaceAssetStore.get(issue.assetId, workspaceId);
|
|
862
|
+
if (!assetEntry) {
|
|
863
|
+
actionsApplied.push({
|
|
864
|
+
code: issue.code,
|
|
865
|
+
path: issue.path,
|
|
866
|
+
assetId: issue.assetId,
|
|
867
|
+
taskId: issue.taskId,
|
|
868
|
+
action: issue.recommendedAction,
|
|
869
|
+
status: 'skipped',
|
|
870
|
+
detail: 'Canonical metadata for this asset was no longer present; skipped queuing a recovery obligation.'
|
|
871
|
+
});
|
|
872
|
+
continue;
|
|
873
|
+
}
|
|
874
|
+
const obligationInput = buildContentPullObligationInputForAsset({
|
|
875
|
+
kind: issue.code === 'document_content_unverified' ? 'document' : 'asset',
|
|
876
|
+
path: issue.path,
|
|
877
|
+
entry: assetEntry,
|
|
878
|
+
store: input.workspaceAssetStore,
|
|
879
|
+
workspaceId,
|
|
880
|
+
});
|
|
881
|
+
input.contentPullObligationStore.upsertMany({
|
|
882
|
+
tenantId: input.tenantId,
|
|
883
|
+
workspaceId,
|
|
884
|
+
obligations: [obligationInput],
|
|
885
|
+
now: nowIso(),
|
|
886
|
+
});
|
|
887
|
+
actionsApplied.push({
|
|
888
|
+
code: issue.code,
|
|
889
|
+
path: issue.path,
|
|
890
|
+
assetId: issue.assetId,
|
|
891
|
+
taskId: issue.taskId,
|
|
892
|
+
action: issue.recommendedAction,
|
|
893
|
+
status: 'applied',
|
|
894
|
+
detail: 'Queued a durable content-pull recovery obligation instead of treating unavailable content as deleted.'
|
|
895
|
+
});
|
|
896
|
+
}
|
|
897
|
+
catch (error) {
|
|
898
|
+
actionsApplied.push({
|
|
899
|
+
code: issue.code,
|
|
900
|
+
path: issue.path,
|
|
901
|
+
assetId: issue.assetId,
|
|
902
|
+
taskId: issue.taskId,
|
|
903
|
+
action: issue.recommendedAction,
|
|
904
|
+
status: 'failed',
|
|
905
|
+
detail: String(error?.message || error || 'Failed to queue a recovery obligation.')
|
|
906
|
+
});
|
|
907
|
+
}
|
|
908
|
+
continue;
|
|
909
|
+
}
|
|
733
910
|
if (!issue.repairable) {
|
|
734
911
|
actionsApplied.push({
|
|
735
912
|
code: issue.code,
|
|
@@ -791,6 +968,17 @@ export function applyWorkspaceRepair(input) {
|
|
|
791
968
|
continue;
|
|
792
969
|
}
|
|
793
970
|
if ((issue.code === 'missing_document_file' || issue.code === 'missing_asset_file') && issue.assetId) {
|
|
971
|
+
if (input.repairMissingContentFiles !== true) {
|
|
972
|
+
actionsApplied.push({
|
|
973
|
+
code: issue.code,
|
|
974
|
+
path: issue.path,
|
|
975
|
+
assetId: issue.assetId,
|
|
976
|
+
action: issue.recommendedAction,
|
|
977
|
+
status: 'skipped',
|
|
978
|
+
detail: 'Missing content file repair requires explicit admin confirmation, since a single failed existence check can also mean the content is temporarily unavailable rather than deleted.'
|
|
979
|
+
});
|
|
980
|
+
continue;
|
|
981
|
+
}
|
|
794
982
|
const updated = input.workspaceAssetStore.markDeleted(issue.assetId, workspaceId);
|
|
795
983
|
actionsApplied.push({
|
|
796
984
|
code: issue.code,
|
|
@@ -886,6 +1074,34 @@ export function applyWorkspaceRepair(input) {
|
|
|
886
1074
|
});
|
|
887
1075
|
}
|
|
888
1076
|
}
|
|
1077
|
+
if (input.contentPullObligationStore) {
|
|
1078
|
+
const resolutionClaims = [
|
|
1079
|
+
...scan.snapshot.documents
|
|
1080
|
+
.filter((entry) => entry.existsLocally && entry.assetId)
|
|
1081
|
+
.map((entry) => ({
|
|
1082
|
+
kind: 'document',
|
|
1083
|
+
path: entry.path,
|
|
1084
|
+
sourceWatermark: entry.updatedAt,
|
|
1085
|
+
resolution: 'at-or-before-watermark',
|
|
1086
|
+
})),
|
|
1087
|
+
...scan.snapshot.assets
|
|
1088
|
+
.filter((entry) => entry.existsLocally && entry.assetId)
|
|
1089
|
+
.map((entry) => ({
|
|
1090
|
+
kind: 'asset',
|
|
1091
|
+
path: entry.path,
|
|
1092
|
+
sourceWatermark: entry.updatedAt,
|
|
1093
|
+
resolution: 'at-or-before-watermark',
|
|
1094
|
+
})),
|
|
1095
|
+
];
|
|
1096
|
+
if (resolutionClaims.length > 0) {
|
|
1097
|
+
input.contentPullObligationStore.resolveMany({
|
|
1098
|
+
tenantId: input.tenantId,
|
|
1099
|
+
workspaceId,
|
|
1100
|
+
claims: resolutionClaims,
|
|
1101
|
+
now: nowIso(),
|
|
1102
|
+
});
|
|
1103
|
+
}
|
|
1104
|
+
}
|
|
889
1105
|
const refreshed = scanWorkspaceRepair(input);
|
|
890
1106
|
return {
|
|
891
1107
|
...refreshed,
|
|
@@ -229,6 +229,9 @@ export interface WorkspaceSyncInitiativeSnapshot {
|
|
|
229
229
|
order?: number | null;
|
|
230
230
|
attachments?: Array<string | AttachmentItem>;
|
|
231
231
|
isArchived?: boolean;
|
|
232
|
+
icon?: PlanningIdentityIcon | null;
|
|
233
|
+
color?: PlanningIdentityColor | null;
|
|
234
|
+
identityUpdatedAt?: string | null;
|
|
232
235
|
durableRevision?: WorkspaceSyncDurablePlanningRevision<'initiative'>;
|
|
233
236
|
}
|
|
234
237
|
export interface WorkspaceSyncWorkstreamSnapshot {
|
|
@@ -245,6 +248,9 @@ export interface WorkspaceSyncWorkstreamSnapshot {
|
|
|
245
248
|
order?: number | null;
|
|
246
249
|
attachments?: Array<string | AttachmentItem>;
|
|
247
250
|
isArchived?: boolean;
|
|
251
|
+
icon?: PlanningIdentityIcon | null;
|
|
252
|
+
color?: PlanningIdentityColor | null;
|
|
253
|
+
identityUpdatedAt?: string | null;
|
|
248
254
|
durableRevision?: WorkspaceSyncDurablePlanningRevision<'workstream'>;
|
|
249
255
|
}
|
|
250
256
|
export interface WorkspaceSyncPlanningIdentitySnapshot {
|
|
@@ -425,6 +431,7 @@ export interface WorkspaceSyncPayload {
|
|
|
425
431
|
currentInitiativeWatermarks: Map<string, string>;
|
|
426
432
|
currentWorkstreamIds: Set<string>;
|
|
427
433
|
currentWorkstreamWatermarks: Map<string, string>;
|
|
434
|
+
currentPlanningIdentityWatermarks?: Map<string, string>;
|
|
428
435
|
currentAiProfileIds: Set<string>;
|
|
429
436
|
currentAiProfileWatermarks: Map<string, string>;
|
|
430
437
|
currentAiProfileChangeKeys?: Map<string, string>;
|
|
@@ -472,6 +479,7 @@ export interface WorkspaceSyncDeltaDiagnostics {
|
|
|
472
479
|
taskRelationships?: WorkspaceSyncDomainDeltaDiagnostics;
|
|
473
480
|
initiatives: WorkspaceSyncDomainDeltaDiagnostics;
|
|
474
481
|
workstreams: WorkspaceSyncDomainDeltaDiagnostics;
|
|
482
|
+
planningIdentities?: WorkspaceSyncDomainDeltaDiagnostics;
|
|
475
483
|
aiProfiles: WorkspaceSyncDomainDeltaDiagnostics;
|
|
476
484
|
documents: WorkspaceSyncDomainDeltaDiagnostics;
|
|
477
485
|
assets: WorkspaceSyncDomainDeltaDiagnostics;
|
|
@@ -537,6 +545,18 @@ export declare function buildWorkspaceSyncPayloadModel(input: {
|
|
|
537
545
|
assets?: WorkspaceSyncAssetSnapshot[];
|
|
538
546
|
currentDocumentPaths?: Iterable<string>;
|
|
539
547
|
currentAssetPaths?: Iterable<string>;
|
|
548
|
+
/**
|
|
549
|
+
* Positive completeness signal for the current-workspace document/asset
|
|
550
|
+
* snapshot used to compute deleteDocumentPaths/deleteAssetPaths. Explicit
|
|
551
|
+
* `false` means the snapshot is known failed, partial, stale, for the wrong
|
|
552
|
+
* workspace, or not yet hydrated — the delete-diff for that domain is
|
|
553
|
+
* suppressed entirely rather than trusted. Omitted/undefined defaults to
|
|
554
|
+
* `true` for callers (tests, other pure-function consumers) that don't model
|
|
555
|
+
* hydration state; the real browser sync orchestrator always passes the
|
|
556
|
+
* verified value.
|
|
557
|
+
*/
|
|
558
|
+
documentsSnapshotComplete?: boolean;
|
|
559
|
+
assetsSnapshotComplete?: boolean;
|
|
540
560
|
documentReviewSessions?: WorkspaceSyncDocumentReviewSessionSnapshot[];
|
|
541
561
|
documentReviewComments?: WorkspaceSyncDocumentReviewCommentSnapshot[];
|
|
542
562
|
annotatedAttachmentSessions?: WorkspaceSyncAnnotatedAttachmentSessionSnapshot[];
|
|
@@ -549,6 +569,7 @@ export declare function buildWorkspaceSyncPayloadModel(input: {
|
|
|
549
569
|
lastPushedInitiativeWatermarks?: Map<string, string>;
|
|
550
570
|
lastPushedWorkstreamIds?: Set<string>;
|
|
551
571
|
lastPushedWorkstreamWatermarks?: Map<string, string>;
|
|
572
|
+
lastPushedPlanningIdentityWatermarks?: Map<string, string>;
|
|
552
573
|
lastPushedAiProfileIds?: Set<string>;
|
|
553
574
|
lastPushedAiProfileWatermarks?: Map<string, string>;
|
|
554
575
|
lastPushedDocumentPaths?: Set<string>;
|
|
@@ -223,6 +223,8 @@ export function buildWorkspaceSyncPayloadModel(input) {
|
|
|
223
223
|
return true;
|
|
224
224
|
return previousWorkstreamWatermarks.get(change.workstream.id) !== change.workstream.updatedAt;
|
|
225
225
|
});
|
|
226
|
+
const previousPlanningIdentityWatermarks = input.lastPushedPlanningIdentityWatermarks;
|
|
227
|
+
const currentPlanningIdentityWatermarks = new Map();
|
|
226
228
|
const planningIdentityUpsertChanges = [
|
|
227
229
|
...(Array.isArray(input.initiatives) ? input.initiatives : []).map((initiative) => ({
|
|
228
230
|
entityType: 'initiative',
|
|
@@ -240,7 +242,13 @@ export function buildWorkspaceSyncPayloadModel(input) {
|
|
|
240
242
|
})),
|
|
241
243
|
]
|
|
242
244
|
.filter((identity) => identity.entityId.length > 0 && Number.isFinite(Date.parse(identity.updatedAt)))
|
|
243
|
-
.map((identity) =>
|
|
245
|
+
.map((identity) => {
|
|
246
|
+
const identityKey = `${identity.entityType}:${identity.entityId}`;
|
|
247
|
+
currentPlanningIdentityWatermarks.set(identityKey, identity.updatedAt);
|
|
248
|
+
return { op: 'planning-identity-upsert', identity, identityKey };
|
|
249
|
+
})
|
|
250
|
+
.filter((change) => previousPlanningIdentityWatermarks?.get(change.identityKey) !== change.identity.updatedAt)
|
|
251
|
+
.map(({ identityKey: _identityKey, ...change }) => change);
|
|
244
252
|
const currentAiProfileIds = new Set((Array.isArray(input.aiProfiles) ? input.aiProfiles : [])
|
|
245
253
|
.map((profile) => String(profile?.id || '').trim())
|
|
246
254
|
.filter((profileId) => profileId.length > 0));
|
|
@@ -312,9 +320,18 @@ export function buildWorkspaceSyncPayloadModel(input) {
|
|
|
312
320
|
});
|
|
313
321
|
const currentDocumentPaths = normalizeWorkspaceSyncPathSet(input.currentDocumentPaths, (Array.isArray(input.documents) ? input.documents : [])
|
|
314
322
|
.map((doc) => String(doc?.path || '').trim()));
|
|
315
|
-
|
|
316
|
-
|
|
317
|
-
|
|
323
|
+
// A raw set-difference against the previous push is only trustworthy when the
|
|
324
|
+
// current snapshot is a verified-complete, current-workspace read. A failed,
|
|
325
|
+
// partial, stale, or not-yet-hydrated snapshot must never be interpreted as
|
|
326
|
+
// deletion intent — so documentsSnapshotComplete === false suppresses the
|
|
327
|
+
// entire delete-diff for this cycle rather than trusting a plausible-looking
|
|
328
|
+
// but potentially wrong difference.
|
|
329
|
+
const documentsSnapshotComplete = input.documentsSnapshotComplete !== false;
|
|
330
|
+
const deleteDocumentPaths = documentsSnapshotComplete
|
|
331
|
+
? new Set(Array.from(input.lastPushedDocumentPaths || new Set())
|
|
332
|
+
.map((docPath) => String(docPath || '').trim())
|
|
333
|
+
.filter((docPath) => docPath.length > 0 && !currentDocumentPaths.has(docPath)))
|
|
334
|
+
: new Set();
|
|
318
335
|
const currentDocumentWatermarks = new Map((Array.isArray(input.documents) ? input.documents : [])
|
|
319
336
|
.map((doc) => [String(doc?.path || '').trim(), String(doc?.updatedAt || '').trim()])
|
|
320
337
|
.filter(([docPath]) => docPath.length > 0));
|
|
@@ -349,9 +366,14 @@ export function buildWorkspaceSyncPayloadModel(input) {
|
|
|
349
366
|
});
|
|
350
367
|
const currentAssetPaths = normalizeWorkspaceSyncPathSet(input.currentAssetPaths, (Array.isArray(input.assets) ? input.assets : [])
|
|
351
368
|
.map((asset) => String(asset?.path || '').trim()));
|
|
352
|
-
|
|
353
|
-
|
|
354
|
-
|
|
369
|
+
// See documentsSnapshotComplete above — the same admission boundary applies
|
|
370
|
+
// to assets.
|
|
371
|
+
const assetsSnapshotComplete = input.assetsSnapshotComplete !== false;
|
|
372
|
+
const deleteAssetPaths = assetsSnapshotComplete
|
|
373
|
+
? new Set(Array.from(input.lastPushedAssetPaths || new Set())
|
|
374
|
+
.map((assetPath) => String(assetPath || '').trim())
|
|
375
|
+
.filter((assetPath) => assetPath.length > 0 && !currentAssetPaths.has(assetPath)))
|
|
376
|
+
: new Set();
|
|
355
377
|
const currentAssetWatermarks = new Map((Array.isArray(input.assets) ? input.assets : [])
|
|
356
378
|
.map((asset) => [String(asset?.path || '').trim(), String(asset?.updatedAt || '').trim()])
|
|
357
379
|
.filter(([assetPath]) => assetPath.length > 0));
|
|
@@ -958,6 +980,7 @@ export function buildWorkspaceSyncPayloadModel(input) {
|
|
|
958
980
|
currentInitiativeWatermarks,
|
|
959
981
|
currentWorkstreamIds,
|
|
960
982
|
currentWorkstreamWatermarks,
|
|
983
|
+
currentPlanningIdentityWatermarks,
|
|
961
984
|
currentAiProfileIds,
|
|
962
985
|
currentAiProfileWatermarks,
|
|
963
986
|
currentAiProfileChangeKeys,
|
|
@@ -1012,6 +1035,11 @@ export function buildWorkspaceSyncPayloadModel(input) {
|
|
|
1012
1035
|
baselineCount: previousWorkstreamWatermarks?.size || 0,
|
|
1013
1036
|
upsertCount: workstreamUpsertChanges.length
|
|
1014
1037
|
}),
|
|
1038
|
+
planningIdentities: resolveDomainDeltaDiagnostics({
|
|
1039
|
+
currentCount: currentPlanningIdentityWatermarks.size,
|
|
1040
|
+
baselineCount: previousPlanningIdentityWatermarks?.size || 0,
|
|
1041
|
+
upsertCount: planningIdentityUpsertChanges.length
|
|
1042
|
+
}),
|
|
1015
1043
|
aiProfiles: resolveDomainDeltaDiagnostics({
|
|
1016
1044
|
currentCount: currentAiProfileIds.size,
|
|
1017
1045
|
baselineCount: previousAiProfileWatermarks?.size || 0,
|
|
@@ -11,6 +11,7 @@ export interface WorkspaceSyncPushBaselineSnapshot {
|
|
|
11
11
|
taskRelationshipChangeKeys?: Array<[string, string]>;
|
|
12
12
|
initiativeWatermarks: Array<[string, string]>;
|
|
13
13
|
workstreamWatermarks: Array<[string, string]>;
|
|
14
|
+
planningIdentityWatermarks?: Array<[string, string]>;
|
|
14
15
|
aiProfileWatermarks: Array<[string, string]>;
|
|
15
16
|
aiProfileChangeKeys?: Array<[string, string]>;
|
|
16
17
|
taskforceAgentWatermarks?: Array<[string, string]>;
|
|
@@ -19,6 +19,9 @@ export interface WorkspaceSyncV2SnapshotInput {
|
|
|
19
19
|
assets?: readonly WorkspaceSyncAssetSnapshot[];
|
|
20
20
|
currentDocumentPaths?: ReadonlySet<string>;
|
|
21
21
|
currentAssetPaths?: ReadonlySet<string>;
|
|
22
|
+
/** See WorkspaceSyncPayloadModel's documentsSnapshotComplete/assetsSnapshotComplete. */
|
|
23
|
+
documentsSnapshotComplete?: boolean;
|
|
24
|
+
assetsSnapshotComplete?: boolean;
|
|
22
25
|
documentReviewSessions?: readonly WorkspaceSyncDocumentReviewSessionSnapshot[];
|
|
23
26
|
documentReviewComments?: readonly WorkspaceSyncDocumentReviewCommentSnapshot[];
|
|
24
27
|
annotatedAttachmentSessions?: readonly WorkspaceSyncAnnotatedAttachmentSessionSnapshot[];
|
|
@@ -45,6 +48,8 @@ export interface WorkspaceSyncV2FrozenSnapshot {
|
|
|
45
48
|
readonly assets: readonly WorkspaceSyncAssetSnapshot[];
|
|
46
49
|
readonly currentDocumentPaths: ReadonlySet<string>;
|
|
47
50
|
readonly currentAssetPaths: ReadonlySet<string>;
|
|
51
|
+
readonly documentsSnapshotComplete: boolean;
|
|
52
|
+
readonly assetsSnapshotComplete: boolean;
|
|
48
53
|
readonly documentReviewSessions: readonly WorkspaceSyncDocumentReviewSessionSnapshot[];
|
|
49
54
|
readonly documentReviewComments: readonly WorkspaceSyncDocumentReviewCommentSnapshot[];
|
|
50
55
|
readonly annotatedAttachmentSessions: readonly WorkspaceSyncAnnotatedAttachmentSessionSnapshot[];
|
|
@@ -64,6 +69,7 @@ export interface WorkspaceSyncV2PushBaseline {
|
|
|
64
69
|
readonly lastPushedInitiativeWatermarks: ReadonlyMap<string, string>;
|
|
65
70
|
readonly lastPushedWorkstreamIds: ReadonlySet<string>;
|
|
66
71
|
readonly lastPushedWorkstreamWatermarks: ReadonlyMap<string, string>;
|
|
72
|
+
readonly lastPushedPlanningIdentityWatermarks?: ReadonlyMap<string, string>;
|
|
67
73
|
readonly lastPushedAiProfileIds: ReadonlySet<string>;
|
|
68
74
|
readonly lastPushedAiProfileWatermarks: ReadonlyMap<string, string>;
|
|
69
75
|
readonly lastPushedAiProfileChangeKeys: ReadonlyMap<string, string>;
|
|
@@ -62,6 +62,8 @@ export function createWorkspaceSyncV2FrozenSnapshot(input) {
|
|
|
62
62
|
assets,
|
|
63
63
|
currentDocumentPaths: stringSet(input.currentDocumentPaths, documents.map((entry) => entry.path)),
|
|
64
64
|
currentAssetPaths: stringSet(input.currentAssetPaths, assets.map((entry) => entry.path)),
|
|
65
|
+
documentsSnapshotComplete: input.documentsSnapshotComplete !== false,
|
|
66
|
+
assetsSnapshotComplete: input.assetsSnapshotComplete !== false,
|
|
65
67
|
documentReviewSessions: frozenArray(input.documentReviewSessions),
|
|
66
68
|
documentReviewComments: frozenArray(input.documentReviewComments),
|
|
67
69
|
annotatedAttachmentSessions: frozenArray(input.annotatedAttachmentSessions),
|
|
@@ -119,6 +121,7 @@ export function buildWorkspaceSyncV2Candidate(input) {
|
|
|
119
121
|
lastPushedInitiativeWatermarks: mutableMap(baseline.lastPushedInitiativeWatermarks),
|
|
120
122
|
lastPushedWorkstreamIds: mutableSet(baseline.lastPushedWorkstreamIds),
|
|
121
123
|
lastPushedWorkstreamWatermarks: mutableMap(baseline.lastPushedWorkstreamWatermarks),
|
|
124
|
+
lastPushedPlanningIdentityWatermarks: mutableMap(baseline.lastPushedPlanningIdentityWatermarks || new Map()),
|
|
122
125
|
aiProfiles: Array.from(snapshot.aiProfiles),
|
|
123
126
|
lastPushedAiProfileIds: forceAllAiProfiles ? new Set() : mutableSet(baseline.lastPushedAiProfileIds),
|
|
124
127
|
lastPushedAiProfileWatermarks: forceAllAiProfiles ? new Map() : mutableMap(baseline.lastPushedAiProfileWatermarks),
|
|
@@ -127,6 +130,8 @@ export function buildWorkspaceSyncV2Candidate(input) {
|
|
|
127
130
|
assets: Array.from(snapshot.assets),
|
|
128
131
|
currentDocumentPaths: snapshot.currentDocumentPaths,
|
|
129
132
|
currentAssetPaths: snapshot.currentAssetPaths,
|
|
133
|
+
documentsSnapshotComplete: snapshot.documentsSnapshotComplete,
|
|
134
|
+
assetsSnapshotComplete: snapshot.assetsSnapshotComplete,
|
|
130
135
|
documentReviewSessions: Array.from(snapshot.documentReviewSessions),
|
|
131
136
|
documentReviewComments: Array.from(snapshot.documentReviewComments),
|
|
132
137
|
annotatedAttachmentSessions: Array.from(snapshot.annotatedAttachmentSessions),
|
package/dist/types.d.ts
CHANGED
|
@@ -8,6 +8,7 @@ export type { TaskActor } from './shared/taskActor.js';
|
|
|
8
8
|
import type { TaskforceTheme } from './utils/theme';
|
|
9
9
|
import type { TaskActor } from './shared/taskActor.js';
|
|
10
10
|
import type { PlanningIdentityColor, PlanningIdentityIcon } from './shared/planningIdentity.js';
|
|
11
|
+
import type { ResolvedFeatureAccessMap } from './runtime/appGates.js';
|
|
11
12
|
export interface Comment {
|
|
12
13
|
id: string;
|
|
13
14
|
author: 'user' | 'ai' | string;
|
|
@@ -68,6 +69,17 @@ export interface AuditActivityItem {
|
|
|
68
69
|
event: TaskEvent;
|
|
69
70
|
}
|
|
70
71
|
export type TaskActivityItem = CommentActivityItem | AuditActivityItem;
|
|
72
|
+
export type TaskActivitySummaryItem = {
|
|
73
|
+
id: string;
|
|
74
|
+
type: 'comment';
|
|
75
|
+
timestamp: string;
|
|
76
|
+
comment: Pick<Comment, 'text' | 'author' | 'actor'>;
|
|
77
|
+
} | {
|
|
78
|
+
id: string;
|
|
79
|
+
type: 'event';
|
|
80
|
+
timestamp: string;
|
|
81
|
+
event: Pick<TaskEvent, 'action' | 'details' | 'actor' | 'actorType' | 'actorProfile'>;
|
|
82
|
+
};
|
|
71
83
|
export interface EntityAuditActivityItem {
|
|
72
84
|
id: string;
|
|
73
85
|
type: 'event';
|
|
@@ -244,6 +256,7 @@ export interface TaskItem {
|
|
|
244
256
|
taskEvents?: TaskEvent[];
|
|
245
257
|
attachments?: Array<string | AttachmentItem>;
|
|
246
258
|
cardCoverAssetId?: string | null;
|
|
259
|
+
cardCoverAttachment?: AttachmentItem | null;
|
|
247
260
|
/** @deprecated Use status='cancelled'. Safe to remove after v0.4.x migration gate. */
|
|
248
261
|
cancelled?: boolean;
|
|
249
262
|
/** @deprecated Use status='done'. Safe to remove after v0.4.x migration gate. */
|
|
@@ -267,7 +280,27 @@ export interface TaskItem {
|
|
|
267
280
|
workstreamOrder?: number | null;
|
|
268
281
|
workstreamId?: string | null;
|
|
269
282
|
checklistItems?: ChecklistItem[];
|
|
283
|
+
/** True when this object came from a collection read and omits the full task graph. */
|
|
284
|
+
isSummary?: boolean;
|
|
285
|
+
commentCount?: number;
|
|
286
|
+
checklistCount?: number;
|
|
287
|
+
completedChecklistCount?: number;
|
|
288
|
+
attachmentCount?: number;
|
|
289
|
+
relationshipCount?: number;
|
|
290
|
+
/** Compact newest comment or audit event carried by lightweight collection reads. */
|
|
291
|
+
latestActivity?: TaskActivitySummaryItem | null;
|
|
292
|
+
detailRevision?: string;
|
|
270
293
|
}
|
|
294
|
+
export type TaskSummary = Omit<TaskItem, 'description' | 'comments' | 'activity' | 'taskEvents' | 'attachments' | 'checklistItems'> & {
|
|
295
|
+
isSummary: true;
|
|
296
|
+
commentCount: number;
|
|
297
|
+
checklistCount: number;
|
|
298
|
+
completedChecklistCount: number;
|
|
299
|
+
attachmentCount: number;
|
|
300
|
+
relationshipCount: number;
|
|
301
|
+
latestActivity: TaskActivitySummaryItem | null;
|
|
302
|
+
detailRevision: string;
|
|
303
|
+
};
|
|
271
304
|
export interface CategoryConfig {
|
|
272
305
|
value: string;
|
|
273
306
|
label: string;
|
|
@@ -310,6 +343,8 @@ export interface TaskforceConfig {
|
|
|
310
343
|
cloudMcpBaseUrl?: string;
|
|
311
344
|
/** Optional absolute/relative base URL for Taskforce websocket (defaults to apiBaseUrl or current origin) */
|
|
312
345
|
wsBaseUrl?: string;
|
|
346
|
+
/** Server-resolved feature availability for the active deployment environment. */
|
|
347
|
+
appGates?: ResolvedFeatureAccessMap;
|
|
313
348
|
/** Button position on screen */
|
|
314
349
|
position?: 'bottom-left' | 'bottom-right' | 'top-left' | 'top-right';
|
|
315
350
|
/** Vertical offset from edge (useful for stacking with other widgets) */
|
|
@@ -324,16 +359,27 @@ export interface TaskforceConfig {
|
|
|
324
359
|
checklistDropdownEnabled?: boolean;
|
|
325
360
|
/** Show status text labels in task card status controls */
|
|
326
361
|
showTaskCardStatusLabel?: boolean;
|
|
362
|
+
/** Show task descriptions on task cards when the runtime provides them */
|
|
363
|
+
showTaskCardDescription?: boolean;
|
|
364
|
+
/** Show compact image and document attachment rows on task cards */
|
|
365
|
+
showTaskCardAttachments?: boolean;
|
|
366
|
+
/** Show checklist completion progress on task cards */
|
|
367
|
+
showTaskCardChecklistProgress?: boolean;
|
|
368
|
+
/** Show the latest activity summary on task cards */
|
|
369
|
+
showTaskCardLatestActivity?: boolean;
|
|
370
|
+
/** Tint the latest activity background with the actor's signature color */
|
|
371
|
+
tintTaskCardActivityBackground?: boolean;
|
|
327
372
|
}
|
|
328
373
|
export interface TaskforcePluginOptions {
|
|
329
374
|
/** Path to store JSON files (relative to project root) */
|
|
330
375
|
outputPath?: string;
|
|
331
376
|
}
|
|
332
|
-
export declare const DEFAULT_CONFIG: Required<Omit<TaskforceConfig, 'apiEndpoint' | 'apiBaseUrl' | 'cloudAuthBaseUrl' | 'cloudMcpBaseUrl' | 'wsBaseUrl' | 'taxonomies'>> & {
|
|
377
|
+
export declare const DEFAULT_CONFIG: Required<Omit<TaskforceConfig, 'apiEndpoint' | 'apiBaseUrl' | 'cloudAuthBaseUrl' | 'cloudMcpBaseUrl' | 'wsBaseUrl' | 'appGates' | 'taxonomies'>> & {
|
|
333
378
|
apiEndpoint: string;
|
|
334
379
|
apiBaseUrl?: string;
|
|
335
380
|
cloudAuthBaseUrl?: string;
|
|
336
381
|
cloudMcpBaseUrl?: string;
|
|
337
382
|
wsBaseUrl?: string;
|
|
383
|
+
appGates?: ResolvedFeatureAccessMap;
|
|
338
384
|
taxonomies: TaxonomyDefinition[];
|
|
339
385
|
};
|
package/dist/types.js
CHANGED
|
@@ -14,6 +14,7 @@ export const DEFAULT_CONFIG = {
|
|
|
14
14
|
cloudAuthBaseUrl: undefined,
|
|
15
15
|
cloudMcpBaseUrl: undefined,
|
|
16
16
|
wsBaseUrl: undefined,
|
|
17
|
+
appGates: undefined,
|
|
17
18
|
position: 'bottom-right',
|
|
18
19
|
offsetY: 70,
|
|
19
20
|
theme: 'dawn',
|
|
@@ -21,4 +22,9 @@ export const DEFAULT_CONFIG = {
|
|
|
21
22
|
manualComplexityEnabled: false,
|
|
22
23
|
checklistDropdownEnabled: true,
|
|
23
24
|
showTaskCardStatusLabel: false,
|
|
25
|
+
showTaskCardDescription: true,
|
|
26
|
+
showTaskCardAttachments: true,
|
|
27
|
+
showTaskCardChecklistProgress: true,
|
|
28
|
+
showTaskCardLatestActivity: true,
|
|
29
|
+
tintTaskCardActivityBackground: false,
|
|
24
30
|
};
|