libre-webui 0.21.3 → 0.22.1
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 +308 -328
- package/backend/dist/cli/migrateSqliteToPostgres.d.ts +2 -0
- package/backend/dist/cli/migrateSqliteToPostgres.d.ts.map +1 -0
- package/backend/dist/cli/migrateSqliteToPostgres.js +113 -0
- package/backend/dist/cli/migrateSqliteToPostgres.js.map +1 -0
- package/backend/dist/cli/recoveryBackup.d.ts +3 -0
- package/backend/dist/cli/recoveryBackup.d.ts.map +1 -0
- package/backend/dist/cli/recoveryBackup.js +251 -0
- package/backend/dist/cli/recoveryBackup.js.map +1 -0
- package/backend/dist/cli/recoveryInventory.d.ts +2 -0
- package/backend/dist/cli/recoveryInventory.d.ts.map +1 -0
- package/backend/dist/cli/recoveryInventory.js +109 -0
- package/backend/dist/cli/recoveryInventory.js.map +1 -0
- package/backend/dist/db.d.ts +27 -0
- package/backend/dist/db.d.ts.map +1 -1
- package/backend/dist/db.js +333 -16
- package/backend/dist/db.js.map +1 -1
- package/backend/dist/env.d.ts.map +1 -1
- package/backend/dist/env.js +12 -2
- package/backend/dist/env.js.map +1 -1
- package/backend/dist/index.d.ts.map +1 -1
- package/backend/dist/index.js +235 -47
- package/backend/dist/index.js.map +1 -1
- package/backend/dist/main.d.ts +2 -0
- package/backend/dist/main.d.ts.map +1 -0
- package/backend/dist/main.js +137 -0
- package/backend/dist/main.js.map +1 -0
- package/backend/dist/middleware/auth.d.ts.map +1 -1
- package/backend/dist/middleware/auth.js +7 -3
- package/backend/dist/middleware/auth.js.map +1 -1
- package/backend/dist/middleware/chatCancellationAdmission.d.ts +7 -0
- package/backend/dist/middleware/chatCancellationAdmission.d.ts.map +1 -0
- package/backend/dist/middleware/chatCancellationAdmission.js +17 -0
- package/backend/dist/middleware/chatCancellationAdmission.js.map +1 -0
- package/backend/dist/middleware/coordinatedRateLimit.d.ts +18 -0
- package/backend/dist/middleware/coordinatedRateLimit.d.ts.map +1 -0
- package/backend/dist/middleware/coordinatedRateLimit.js +52 -0
- package/backend/dist/middleware/coordinatedRateLimit.js.map +1 -0
- package/backend/dist/middleware/sharedRateLimit.d.ts +26 -0
- package/backend/dist/middleware/sharedRateLimit.d.ts.map +1 -0
- package/backend/dist/middleware/sharedRateLimit.js +99 -0
- package/backend/dist/middleware/sharedRateLimit.js.map +1 -0
- package/backend/dist/models/personaModel.d.ts +1 -26
- package/backend/dist/models/personaModel.d.ts.map +1 -1
- package/backend/dist/models/personaModel.js +54 -247
- package/backend/dist/models/personaModel.js.map +1 -1
- package/backend/dist/models/userModel.d.ts +23 -66
- package/backend/dist/models/userModel.d.ts.map +1 -1
- package/backend/dist/models/userModel.js +110 -187
- package/backend/dist/models/userModel.js.map +1 -1
- package/backend/dist/persistence/chatGenerationTypes.d.ts +24 -0
- package/backend/dist/persistence/chatGenerationTypes.d.ts.map +1 -0
- package/backend/dist/persistence/chatGenerationTypes.js +7 -0
- package/backend/dist/persistence/chatGenerationTypes.js.map +1 -0
- package/backend/dist/persistence/extensionTypes.d.ts +185 -0
- package/backend/dist/persistence/extensionTypes.d.ts.map +1 -0
- package/backend/dist/persistence/extensionTypes.js +13 -0
- package/backend/dist/persistence/extensionTypes.js.map +1 -0
- package/backend/dist/persistence/identityDeletionTypes.d.ts +16 -0
- package/backend/dist/persistence/identityDeletionTypes.d.ts.map +1 -0
- package/backend/dist/persistence/identityDeletionTypes.js +7 -0
- package/backend/dist/persistence/identityDeletionTypes.js.map +1 -0
- package/backend/dist/persistence/index.d.ts +48 -0
- package/backend/dist/persistence/index.d.ts.map +1 -0
- package/backend/dist/persistence/index.js +159 -0
- package/backend/dist/persistence/index.js.map +1 -0
- package/backend/dist/persistence/postgresConfig.d.ts +32 -0
- package/backend/dist/persistence/postgresConfig.d.ts.map +1 -0
- package/backend/dist/persistence/postgresConfig.js +91 -0
- package/backend/dist/persistence/postgresConfig.js.map +1 -0
- package/backend/dist/persistence/postgresCoreMigration.d.ts +8 -0
- package/backend/dist/persistence/postgresCoreMigration.d.ts.map +1 -0
- package/backend/dist/persistence/postgresCoreMigration.js +179 -0
- package/backend/dist/persistence/postgresCoreMigration.js.map +1 -0
- package/backend/dist/persistence/postgresDatabase.d.ts +40 -0
- package/backend/dist/persistence/postgresDatabase.d.ts.map +1 -0
- package/backend/dist/persistence/postgresDatabase.js +148 -0
- package/backend/dist/persistence/postgresDatabase.js.map +1 -0
- package/backend/dist/persistence/postgresExtensionMigration.d.ts +4 -0
- package/backend/dist/persistence/postgresExtensionMigration.d.ts.map +1 -0
- package/backend/dist/persistence/postgresExtensionMigration.js +143 -0
- package/backend/dist/persistence/postgresExtensionMigration.js.map +1 -0
- package/backend/dist/persistence/postgresExtensionRepositories.d.ts +6 -0
- package/backend/dist/persistence/postgresExtensionRepositories.d.ts.map +1 -0
- package/backend/dist/persistence/postgresExtensionRepositories.js +550 -0
- package/backend/dist/persistence/postgresExtensionRepositories.js.map +1 -0
- package/backend/dist/persistence/postgresImportState.d.ts +9 -0
- package/backend/dist/persistence/postgresImportState.d.ts.map +1 -0
- package/backend/dist/persistence/postgresImportState.js +64 -0
- package/backend/dist/persistence/postgresImportState.js.map +1 -0
- package/backend/dist/persistence/postgresMigrationRegistry.d.ts +4 -0
- package/backend/dist/persistence/postgresMigrationRegistry.d.ts.map +1 -0
- package/backend/dist/persistence/postgresMigrationRegistry.js +33 -0
- package/backend/dist/persistence/postgresMigrationRegistry.js.map +1 -0
- package/backend/dist/persistence/postgresMigrationTypes.d.ts +24 -0
- package/backend/dist/persistence/postgresMigrationTypes.d.ts.map +1 -0
- package/backend/dist/persistence/postgresMigrationTypes.js +7 -0
- package/backend/dist/persistence/postgresMigrationTypes.js.map +1 -0
- package/backend/dist/persistence/postgresMigrations.d.ts +15 -0
- package/backend/dist/persistence/postgresMigrations.d.ts.map +1 -0
- package/backend/dist/persistence/postgresMigrations.js +333 -0
- package/backend/dist/persistence/postgresMigrations.js.map +1 -0
- package/backend/dist/persistence/postgresPersistence.d.ts +17 -0
- package/backend/dist/persistence/postgresPersistence.d.ts.map +1 -0
- package/backend/dist/persistence/postgresPersistence.js +332 -0
- package/backend/dist/persistence/postgresPersistence.js.map +1 -0
- package/backend/dist/persistence/postgresPluginDefinitionMigration.d.ts +4 -0
- package/backend/dist/persistence/postgresPluginDefinitionMigration.d.ts.map +1 -0
- package/backend/dist/persistence/postgresPluginDefinitionMigration.js +40 -0
- package/backend/dist/persistence/postgresPluginDefinitionMigration.js.map +1 -0
- package/backend/dist/persistence/postgresResourceRepositories.d.ts +7 -0
- package/backend/dist/persistence/postgresResourceRepositories.d.ts.map +1 -0
- package/backend/dist/persistence/postgresResourceRepositories.js +776 -0
- package/backend/dist/persistence/postgresResourceRepositories.js.map +1 -0
- package/backend/dist/persistence/postgresSchemaInspector.d.ts +14 -0
- package/backend/dist/persistence/postgresSchemaInspector.d.ts.map +1 -0
- package/backend/dist/persistence/postgresSchemaInspector.js +817 -0
- package/backend/dist/persistence/postgresSchemaInspector.js.map +1 -0
- package/backend/dist/persistence/resourceTypes.d.ts +207 -0
- package/backend/dist/persistence/resourceTypes.d.ts.map +1 -0
- package/backend/dist/persistence/resourceTypes.js +38 -0
- package/backend/dist/persistence/resourceTypes.js.map +1 -0
- package/backend/dist/persistence/sqliteExtensionRepositories.d.ts +4 -0
- package/backend/dist/persistence/sqliteExtensionRepositories.d.ts.map +1 -0
- package/backend/dist/persistence/sqliteExtensionRepositories.js +494 -0
- package/backend/dist/persistence/sqliteExtensionRepositories.js.map +1 -0
- package/backend/dist/persistence/sqliteMigrations.d.ts +93 -0
- package/backend/dist/persistence/sqliteMigrations.d.ts.map +1 -0
- package/backend/dist/persistence/sqliteMigrations.js +2232 -0
- package/backend/dist/persistence/sqliteMigrations.js.map +1 -0
- package/backend/dist/persistence/sqlitePersistence.d.ts +23 -0
- package/backend/dist/persistence/sqlitePersistence.d.ts.map +1 -0
- package/backend/dist/persistence/sqlitePersistence.js +596 -0
- package/backend/dist/persistence/sqlitePersistence.js.map +1 -0
- package/backend/dist/persistence/sqliteResourceRepositories.d.ts +4 -0
- package/backend/dist/persistence/sqliteResourceRepositories.d.ts.map +1 -0
- package/backend/dist/persistence/sqliteResourceRepositories.js +663 -0
- package/backend/dist/persistence/sqliteResourceRepositories.js.map +1 -0
- package/backend/dist/persistence/sqliteSyncExecutor.d.ts +5 -0
- package/backend/dist/persistence/sqliteSyncExecutor.d.ts.map +1 -0
- package/backend/dist/persistence/sqliteSyncExecutor.js +19 -0
- package/backend/dist/persistence/sqliteSyncExecutor.js.map +1 -0
- package/backend/dist/persistence/sqliteToPostgresMigration.d.ts +80 -0
- package/backend/dist/persistence/sqliteToPostgresMigration.d.ts.map +1 -0
- package/backend/dist/persistence/sqliteToPostgresMigration.js +1543 -0
- package/backend/dist/persistence/sqliteToPostgresMigration.js.map +1 -0
- package/backend/dist/persistence/types.d.ts +131 -0
- package/backend/dist/persistence/types.d.ts.map +1 -0
- package/backend/dist/persistence/types.js +18 -0
- package/backend/dist/persistence/types.js.map +1 -0
- package/backend/dist/persistence/voiceProfileNameLookup.d.ts +9 -0
- package/backend/dist/persistence/voiceProfileNameLookup.d.ts.map +1 -0
- package/backend/dist/persistence/voiceProfileNameLookup.js +15 -0
- package/backend/dist/persistence/voiceProfileNameLookup.js.map +1 -0
- package/backend/dist/platform/coordination/index.d.ts +7 -0
- package/backend/dist/platform/coordination/index.d.ts.map +1 -0
- package/backend/dist/platform/coordination/index.js +24 -0
- package/backend/dist/platform/coordination/index.js.map +1 -0
- package/backend/dist/platform/coordination/localCoordinator.d.ts +49 -0
- package/backend/dist/platform/coordination/localCoordinator.d.ts.map +1 -0
- package/backend/dist/platform/coordination/localCoordinator.js +380 -0
- package/backend/dist/platform/coordination/localCoordinator.js.map +1 -0
- package/backend/dist/platform/coordination/redisCoordinator.d.ts +83 -0
- package/backend/dist/platform/coordination/redisCoordinator.d.ts.map +1 -0
- package/backend/dist/platform/coordination/redisCoordinator.js +726 -0
- package/backend/dist/platform/coordination/redisCoordinator.js.map +1 -0
- package/backend/dist/platform/coordination/service.d.ts +11 -0
- package/backend/dist/platform/coordination/service.d.ts.map +1 -0
- package/backend/dist/platform/coordination/service.js +55 -0
- package/backend/dist/platform/coordination/service.js.map +1 -0
- package/backend/dist/platform/coordination/sharedAdmission.d.ts +53 -0
- package/backend/dist/platform/coordination/sharedAdmission.d.ts.map +1 -0
- package/backend/dist/platform/coordination/sharedAdmission.js +194 -0
- package/backend/dist/platform/coordination/sharedAdmission.js.map +1 -0
- package/backend/dist/platform/coordination/types.d.ts +76 -0
- package/backend/dist/platform/coordination/types.d.ts.map +1 -0
- package/backend/dist/platform/coordination/types.js +32 -0
- package/backend/dist/platform/coordination/types.js.map +1 -0
- package/backend/dist/platform/events/durableEventGateway.d.ts +54 -0
- package/backend/dist/platform/events/durableEventGateway.d.ts.map +1 -0
- package/backend/dist/platform/events/durableEventGateway.js +262 -0
- package/backend/dist/platform/events/durableEventGateway.js.map +1 -0
- package/backend/dist/platform/events/index.d.ts +3 -0
- package/backend/dist/platform/events/index.d.ts.map +1 -0
- package/backend/dist/platform/events/index.js +8 -0
- package/backend/dist/platform/events/index.js.map +1 -0
- package/backend/dist/platform/events/service.d.ts +8 -0
- package/backend/dist/platform/events/service.d.ts.map +1 -0
- package/backend/dist/platform/events/service.js +25 -0
- package/backend/dist/platform/events/service.js.map +1 -0
- package/backend/dist/platform/jobs/chatGenerationEnqueuer.d.ts +3 -0
- package/backend/dist/platform/jobs/chatGenerationEnqueuer.d.ts.map +1 -0
- package/backend/dist/platform/jobs/chatGenerationEnqueuer.js +55 -0
- package/backend/dist/platform/jobs/chatGenerationEnqueuer.js.map +1 -0
- package/backend/dist/platform/jobs/documentIngestionEnqueuer.d.ts +3 -0
- package/backend/dist/platform/jobs/documentIngestionEnqueuer.d.ts.map +1 -0
- package/backend/dist/platform/jobs/documentIngestionEnqueuer.js +38 -0
- package/backend/dist/platform/jobs/documentIngestionEnqueuer.js.map +1 -0
- package/backend/dist/platform/jobs/domainJobContracts.d.ts +30 -0
- package/backend/dist/platform/jobs/domainJobContracts.d.ts.map +1 -0
- package/backend/dist/platform/jobs/domainJobContracts.js +53 -0
- package/backend/dist/platform/jobs/domainJobContracts.js.map +1 -0
- package/backend/dist/platform/jobs/domainJobHandlers.d.ts +11 -0
- package/backend/dist/platform/jobs/domainJobHandlers.d.ts.map +1 -0
- package/backend/dist/platform/jobs/domainJobHandlers.js +617 -0
- package/backend/dist/platform/jobs/domainJobHandlers.js.map +1 -0
- package/backend/dist/platform/jobs/durableEventIdentity.d.ts +8 -0
- package/backend/dist/platform/jobs/durableEventIdentity.d.ts.map +1 -0
- package/backend/dist/platform/jobs/durableEventIdentity.js +33 -0
- package/backend/dist/platform/jobs/durableEventIdentity.js.map +1 -0
- package/backend/dist/platform/jobs/durableJobRuntime.d.ts +57 -0
- package/backend/dist/platform/jobs/durableJobRuntime.d.ts.map +1 -0
- package/backend/dist/platform/jobs/durableJobRuntime.js +131 -0
- package/backend/dist/platform/jobs/durableJobRuntime.js.map +1 -0
- package/backend/dist/platform/jobs/durableJobRuntimeBackend.d.ts +28 -0
- package/backend/dist/platform/jobs/durableJobRuntimeBackend.d.ts.map +1 -0
- package/backend/dist/platform/jobs/durableJobRuntimeBackend.js +62 -0
- package/backend/dist/platform/jobs/durableJobRuntimeBackend.js.map +1 -0
- package/backend/dist/platform/jobs/durableJobService.d.ts +85 -0
- package/backend/dist/platform/jobs/durableJobService.d.ts.map +1 -0
- package/backend/dist/platform/jobs/durableJobService.js +726 -0
- package/backend/dist/platform/jobs/durableJobService.js.map +1 -0
- package/backend/dist/platform/jobs/durableJobTypes.d.ts +195 -0
- package/backend/dist/platform/jobs/durableJobTypes.d.ts.map +1 -0
- package/backend/dist/platform/jobs/durableJobTypes.js +72 -0
- package/backend/dist/platform/jobs/durableJobTypes.js.map +1 -0
- package/backend/dist/platform/jobs/embeddedDurableJobWorker.d.ts +87 -0
- package/backend/dist/platform/jobs/embeddedDurableJobWorker.d.ts.map +1 -0
- package/backend/dist/platform/jobs/embeddedDurableJobWorker.js +429 -0
- package/backend/dist/platform/jobs/embeddedDurableJobWorker.js.map +1 -0
- package/backend/dist/platform/jobs/identityDeletionEnqueuer.d.ts +3 -0
- package/backend/dist/platform/jobs/identityDeletionEnqueuer.d.ts.map +1 -0
- package/backend/dist/platform/jobs/identityDeletionEnqueuer.js +36 -0
- package/backend/dist/platform/jobs/identityDeletionEnqueuer.js.map +1 -0
- package/backend/dist/platform/jobs/index.d.ts +18 -0
- package/backend/dist/platform/jobs/index.d.ts.map +1 -0
- package/backend/dist/platform/jobs/index.js +34 -0
- package/backend/dist/platform/jobs/index.js.map +1 -0
- package/backend/dist/platform/jobs/postgresDurableEventIdempotencyMigration.d.ts +4 -0
- package/backend/dist/platform/jobs/postgresDurableEventIdempotencyMigration.d.ts.map +1 -0
- package/backend/dist/platform/jobs/postgresDurableEventIdempotencyMigration.js +25 -0
- package/backend/dist/platform/jobs/postgresDurableEventIdempotencyMigration.js.map +1 -0
- package/backend/dist/platform/jobs/postgresDurableEventReplayIndexMigration.d.ts +4 -0
- package/backend/dist/platform/jobs/postgresDurableEventReplayIndexMigration.d.ts.map +1 -0
- package/backend/dist/platform/jobs/postgresDurableEventReplayIndexMigration.js +23 -0
- package/backend/dist/platform/jobs/postgresDurableEventReplayIndexMigration.js.map +1 -0
- package/backend/dist/platform/jobs/postgresDurableJobMigration.d.ts +11 -0
- package/backend/dist/platform/jobs/postgresDurableJobMigration.d.ts.map +1 -0
- package/backend/dist/platform/jobs/postgresDurableJobMigration.js +106 -0
- package/backend/dist/platform/jobs/postgresDurableJobMigration.js.map +1 -0
- package/backend/dist/platform/jobs/postgresDurableJobRepository.d.ts +88 -0
- package/backend/dist/platform/jobs/postgresDurableJobRepository.d.ts.map +1 -0
- package/backend/dist/platform/jobs/postgresDurableJobRepository.js +1185 -0
- package/backend/dist/platform/jobs/postgresDurableJobRepository.js.map +1 -0
- package/backend/dist/platform/jobs/postgresDurableJobService.d.ts +86 -0
- package/backend/dist/platform/jobs/postgresDurableJobService.d.ts.map +1 -0
- package/backend/dist/platform/jobs/postgresDurableJobService.js +696 -0
- package/backend/dist/platform/jobs/postgresDurableJobService.js.map +1 -0
- package/backend/dist/platform/jobs/postgresDurableJobWorker.d.ts +53 -0
- package/backend/dist/platform/jobs/postgresDurableJobWorker.d.ts.map +1 -0
- package/backend/dist/platform/jobs/postgresDurableJobWorker.js +393 -0
- package/backend/dist/platform/jobs/postgresDurableJobWorker.js.map +1 -0
- package/backend/dist/platform/jobs/resourceDeletionEnqueuer.d.ts +3 -0
- package/backend/dist/platform/jobs/resourceDeletionEnqueuer.d.ts.map +1 -0
- package/backend/dist/platform/jobs/resourceDeletionEnqueuer.js +43 -0
- package/backend/dist/platform/jobs/resourceDeletionEnqueuer.js.map +1 -0
- package/backend/dist/platform/jobs/sqliteDurableJobRepository.d.ts +166 -0
- package/backend/dist/platform/jobs/sqliteDurableJobRepository.d.ts.map +1 -0
- package/backend/dist/platform/jobs/sqliteDurableJobRepository.js +1008 -0
- package/backend/dist/platform/jobs/sqliteDurableJobRepository.js.map +1 -0
- package/backend/dist/platform/jobs/videoGenerationEnqueuer.d.ts +4 -0
- package/backend/dist/platform/jobs/videoGenerationEnqueuer.d.ts.map +1 -0
- package/backend/dist/platform/jobs/videoGenerationEnqueuer.js +46 -0
- package/backend/dist/platform/jobs/videoGenerationEnqueuer.js.map +1 -0
- package/backend/dist/platform/jobs/workExecutionEnqueuer.d.ts +3 -0
- package/backend/dist/platform/jobs/workExecutionEnqueuer.d.ts.map +1 -0
- package/backend/dist/platform/jobs/workExecutionEnqueuer.js +38 -0
- package/backend/dist/platform/jobs/workExecutionEnqueuer.js.map +1 -0
- package/backend/dist/platform/ollamaRuntimeConfig.d.ts +40 -0
- package/backend/dist/platform/ollamaRuntimeConfig.d.ts.map +1 -0
- package/backend/dist/platform/ollamaRuntimeConfig.js +72 -0
- package/backend/dist/platform/ollamaRuntimeConfig.js.map +1 -0
- package/backend/dist/platform/recovery/backupArchive.d.ts +120 -0
- package/backend/dist/platform/recovery/backupArchive.d.ts.map +1 -0
- package/backend/dist/platform/recovery/backupArchive.js +842 -0
- package/backend/dist/platform/recovery/backupArchive.js.map +1 -0
- package/backend/dist/platform/recovery/index.d.ts +3 -0
- package/backend/dist/platform/recovery/index.d.ts.map +1 -0
- package/backend/dist/platform/recovery/index.js +8 -0
- package/backend/dist/platform/recovery/index.js.map +1 -0
- package/backend/dist/platform/recovery/teamBackupArchive.d.ts +98 -0
- package/backend/dist/platform/recovery/teamBackupArchive.d.ts.map +1 -0
- package/backend/dist/platform/recovery/teamBackupArchive.js +1203 -0
- package/backend/dist/platform/recovery/teamBackupArchive.js.map +1 -0
- package/backend/dist/platform/runtimeConfig.d.ts +70 -0
- package/backend/dist/platform/runtimeConfig.d.ts.map +1 -0
- package/backend/dist/platform/runtimeConfig.js +205 -0
- package/backend/dist/platform/runtimeConfig.js.map +1 -0
- package/backend/dist/platform/storage/aesGcmKeyring.d.ts +26 -0
- package/backend/dist/platform/storage/aesGcmKeyring.d.ts.map +1 -0
- package/backend/dist/platform/storage/aesGcmKeyring.js +135 -0
- package/backend/dist/platform/storage/aesGcmKeyring.js.map +1 -0
- package/backend/dist/platform/storage/blobReferenceRepository.d.ts +36 -0
- package/backend/dist/platform/storage/blobReferenceRepository.d.ts.map +1 -0
- package/backend/dist/platform/storage/blobReferenceRepository.js +117 -0
- package/backend/dist/platform/storage/blobReferenceRepository.js.map +1 -0
- package/backend/dist/platform/storage/blobStore.d.ts +111 -0
- package/backend/dist/platform/storage/blobStore.d.ts.map +1 -0
- package/backend/dist/platform/storage/blobStore.js +46 -0
- package/backend/dist/platform/storage/blobStore.js.map +1 -0
- package/backend/dist/platform/storage/documentVectorIndex.d.ts +44 -0
- package/backend/dist/platform/storage/documentVectorIndex.d.ts.map +1 -0
- package/backend/dist/platform/storage/documentVectorIndex.js +110 -0
- package/backend/dist/platform/storage/documentVectorIndex.js.map +1 -0
- package/backend/dist/platform/storage/durableBlobQuotaPolicy.d.ts +82 -0
- package/backend/dist/platform/storage/durableBlobQuotaPolicy.d.ts.map +1 -0
- package/backend/dist/platform/storage/durableBlobQuotaPolicy.js +583 -0
- package/backend/dist/platform/storage/durableBlobQuotaPolicy.js.map +1 -0
- package/backend/dist/platform/storage/index.d.ts +19 -0
- package/backend/dist/platform/storage/index.d.ts.map +1 -0
- package/backend/dist/platform/storage/index.js +35 -0
- package/backend/dist/platform/storage/index.js.map +1 -0
- package/backend/dist/platform/storage/localEncryptedBlobStore.d.ts +120 -0
- package/backend/dist/platform/storage/localEncryptedBlobStore.d.ts.map +1 -0
- package/backend/dist/platform/storage/localEncryptedBlobStore.js +1205 -0
- package/backend/dist/platform/storage/localEncryptedBlobStore.js.map +1 -0
- package/backend/dist/platform/storage/personaMemoryIndexing.d.ts +12 -0
- package/backend/dist/platform/storage/personaMemoryIndexing.d.ts.map +1 -0
- package/backend/dist/platform/storage/personaMemoryIndexing.js +25 -0
- package/backend/dist/platform/storage/personaMemoryIndexing.js.map +1 -0
- package/backend/dist/platform/storage/pgVectorStore.d.ts +37 -0
- package/backend/dist/platform/storage/pgVectorStore.d.ts.map +1 -0
- package/backend/dist/platform/storage/pgVectorStore.js +493 -0
- package/backend/dist/platform/storage/pgVectorStore.js.map +1 -0
- package/backend/dist/platform/storage/platformDomainRepositories.d.ts +244 -0
- package/backend/dist/platform/storage/platformDomainRepositories.d.ts.map +1 -0
- package/backend/dist/platform/storage/platformDomainRepositories.js +7 -0
- package/backend/dist/platform/storage/platformDomainRepositories.js.map +1 -0
- package/backend/dist/platform/storage/platformStorageRuntime.d.ts +35 -0
- package/backend/dist/platform/storage/platformStorageRuntime.d.ts.map +1 -0
- package/backend/dist/platform/storage/platformStorageRuntime.js +299 -0
- package/backend/dist/platform/storage/platformStorageRuntime.js.map +1 -0
- package/backend/dist/platform/storage/postgresPlatformDomainRepositories.d.ts +4 -0
- package/backend/dist/platform/storage/postgresPlatformDomainRepositories.d.ts.map +1 -0
- package/backend/dist/platform/storage/postgresPlatformDomainRepositories.js +1017 -0
- package/backend/dist/platform/storage/postgresPlatformDomainRepositories.js.map +1 -0
- package/backend/dist/platform/storage/postgresResourceDeletionLifecycleMigration.d.ts +4 -0
- package/backend/dist/platform/storage/postgresResourceDeletionLifecycleMigration.d.ts.map +1 -0
- package/backend/dist/platform/storage/postgresResourceDeletionLifecycleMigration.js +40 -0
- package/backend/dist/platform/storage/postgresResourceDeletionLifecycleMigration.js.map +1 -0
- package/backend/dist/platform/storage/resourceContentCleanup.d.ts +29 -0
- package/backend/dist/platform/storage/resourceContentCleanup.d.ts.map +1 -0
- package/backend/dist/platform/storage/resourceContentCleanup.js +100 -0
- package/backend/dist/platform/storage/resourceContentCleanup.js.map +1 -0
- package/backend/dist/platform/storage/resourceDeletionLifecycle.d.ts +14 -0
- package/backend/dist/platform/storage/resourceDeletionLifecycle.d.ts.map +1 -0
- package/backend/dist/platform/storage/resourceDeletionLifecycle.js +31 -0
- package/backend/dist/platform/storage/resourceDeletionLifecycle.js.map +1 -0
- package/backend/dist/platform/storage/s3EncryptedBlobStore.d.ts +140 -0
- package/backend/dist/platform/storage/s3EncryptedBlobStore.d.ts.map +1 -0
- package/backend/dist/platform/storage/s3EncryptedBlobStore.js +1309 -0
- package/backend/dist/platform/storage/s3EncryptedBlobStore.js.map +1 -0
- package/backend/dist/platform/storage/sqliteEncryptedVectorStore.d.ts +71 -0
- package/backend/dist/platform/storage/sqliteEncryptedVectorStore.d.ts.map +1 -0
- package/backend/dist/platform/storage/sqliteEncryptedVectorStore.js +766 -0
- package/backend/dist/platform/storage/sqliteEncryptedVectorStore.js.map +1 -0
- package/backend/dist/platform/storage/sqlitePlatformDomainRepositories.d.ts +4 -0
- package/backend/dist/platform/storage/sqlitePlatformDomainRepositories.d.ts.map +1 -0
- package/backend/dist/platform/storage/sqlitePlatformDomainRepositories.js +1037 -0
- package/backend/dist/platform/storage/sqlitePlatformDomainRepositories.js.map +1 -0
- package/backend/dist/platform/storage/sqliteToTeamStorageMigration.d.ts +25 -0
- package/backend/dist/platform/storage/sqliteToTeamStorageMigration.d.ts.map +1 -0
- package/backend/dist/platform/storage/sqliteToTeamStorageMigration.js +1292 -0
- package/backend/dist/platform/storage/sqliteToTeamStorageMigration.js.map +1 -0
- package/backend/dist/platform/storage/storageFactory.d.ts +83 -0
- package/backend/dist/platform/storage/storageFactory.d.ts.map +1 -0
- package/backend/dist/platform/storage/storageFactory.js +530 -0
- package/backend/dist/platform/storage/storageFactory.js.map +1 -0
- package/backend/dist/platform/storage/storageSchemaContracts.d.ts +22 -0
- package/backend/dist/platform/storage/storageSchemaContracts.d.ts.map +1 -0
- package/backend/dist/platform/storage/storageSchemaContracts.js +299 -0
- package/backend/dist/platform/storage/storageSchemaContracts.js.map +1 -0
- package/backend/dist/platform/storage/vectorStore.d.ts +117 -0
- package/backend/dist/platform/storage/vectorStore.d.ts.map +1 -0
- package/backend/dist/platform/storage/vectorStore.js +40 -0
- package/backend/dist/platform/storage/vectorStore.js.map +1 -0
- package/backend/dist/platform/workPersistence/index.d.ts +9 -0
- package/backend/dist/platform/workPersistence/index.d.ts.map +1 -0
- package/backend/dist/platform/workPersistence/index.js +14 -0
- package/backend/dist/platform/workPersistence/index.js.map +1 -0
- package/backend/dist/platform/workPersistence/postgresWorkLifecycleMigration.d.ts +9 -0
- package/backend/dist/platform/workPersistence/postgresWorkLifecycleMigration.d.ts.map +1 -0
- package/backend/dist/platform/workPersistence/postgresWorkLifecycleMigration.js +47 -0
- package/backend/dist/platform/workPersistence/postgresWorkLifecycleMigration.js.map +1 -0
- package/backend/dist/platform/workPersistence/postgresWorkMessageContentMigration.d.ts +3 -0
- package/backend/dist/platform/workPersistence/postgresWorkMessageContentMigration.d.ts.map +1 -0
- package/backend/dist/platform/workPersistence/postgresWorkMessageContentMigration.js +28 -0
- package/backend/dist/platform/workPersistence/postgresWorkMessageContentMigration.js.map +1 -0
- package/backend/dist/platform/workPersistence/postgresWorkMigration.d.ts +3 -0
- package/backend/dist/platform/workPersistence/postgresWorkMigration.d.ts.map +1 -0
- package/backend/dist/platform/workPersistence/postgresWorkMigration.js +101 -0
- package/backend/dist/platform/workPersistence/postgresWorkMigration.js.map +1 -0
- package/backend/dist/platform/workPersistence/postgresWorkPersistence.d.ts +79 -0
- package/backend/dist/platform/workPersistence/postgresWorkPersistence.d.ts.map +1 -0
- package/backend/dist/platform/workPersistence/postgresWorkPersistence.js +521 -0
- package/backend/dist/platform/workPersistence/postgresWorkPersistence.js.map +1 -0
- package/backend/dist/platform/workPersistence/service.d.ts +6 -0
- package/backend/dist/platform/workPersistence/service.d.ts.map +1 -0
- package/backend/dist/platform/workPersistence/service.js +27 -0
- package/backend/dist/platform/workPersistence/service.js.map +1 -0
- package/backend/dist/platform/workPersistence/sqliteWorkPersistence.d.ts +77 -0
- package/backend/dist/platform/workPersistence/sqliteWorkPersistence.d.ts.map +1 -0
- package/backend/dist/platform/workPersistence/sqliteWorkPersistence.js +463 -0
- package/backend/dist/platform/workPersistence/sqliteWorkPersistence.js.map +1 -0
- package/backend/dist/platform/workPersistence/types.d.ts +159 -0
- package/backend/dist/platform/workPersistence/types.d.ts.map +1 -0
- package/backend/dist/platform/workPersistence/types.js +13 -0
- package/backend/dist/platform/workPersistence/types.js.map +1 -0
- package/backend/dist/platform/workPersistence/workExecutionTypes.d.ts +13 -0
- package/backend/dist/platform/workPersistence/workExecutionTypes.d.ts.map +1 -0
- package/backend/dist/platform/workPersistence/workExecutionTypes.js +7 -0
- package/backend/dist/platform/workPersistence/workExecutionTypes.js.map +1 -0
- package/backend/dist/platform/workPersistence/workMessageContentCodec.d.ts +8 -0
- package/backend/dist/platform/workPersistence/workMessageContentCodec.d.ts.map +1 -0
- package/backend/dist/platform/workPersistence/workMessageContentCodec.js +25 -0
- package/backend/dist/platform/workPersistence/workMessageContentCodec.js.map +1 -0
- package/backend/dist/platform/workPersistence/workTextSafety.d.ts +3 -0
- package/backend/dist/platform/workPersistence/workTextSafety.d.ts.map +1 -0
- package/backend/dist/platform/workPersistence/workTextSafety.js +8 -0
- package/backend/dist/platform/workPersistence/workTextSafety.js.map +1 -0
- package/backend/dist/routes/agentCli.js +1 -1
- package/backend/dist/routes/agentCli.js.map +1 -1
- package/backend/dist/routes/artifacts.d.ts.map +1 -1
- package/backend/dist/routes/artifacts.js +2 -1
- package/backend/dist/routes/artifacts.js.map +1 -1
- package/backend/dist/routes/auth.d.ts.map +1 -1
- package/backend/dist/routes/auth.js +64 -18
- package/backend/dist/routes/auth.js.map +1 -1
- package/backend/dist/routes/chat.d.ts.map +1 -1
- package/backend/dist/routes/chat.js +519 -85
- package/backend/dist/routes/chat.js.map +1 -1
- package/backend/dist/routes/documents.d.ts.map +1 -1
- package/backend/dist/routes/documents.js +134 -28
- package/backend/dist/routes/documents.js.map +1 -1
- package/backend/dist/routes/embeddings.d.ts.map +1 -1
- package/backend/dist/routes/embeddings.js +2 -1
- package/backend/dist/routes/embeddings.js.map +1 -1
- package/backend/dist/routes/health.d.ts +3 -0
- package/backend/dist/routes/health.d.ts.map +1 -0
- package/backend/dist/routes/health.js +52 -0
- package/backend/dist/routes/health.js.map +1 -0
- package/backend/dist/routes/huggingfaceHub.d.ts.map +1 -1
- package/backend/dist/routes/huggingfaceHub.js +2 -1
- package/backend/dist/routes/huggingfaceHub.js.map +1 -1
- package/backend/dist/routes/imageGen.d.ts.map +1 -1
- package/backend/dist/routes/imageGen.js +42 -10
- package/backend/dist/routes/imageGen.js.map +1 -1
- package/backend/dist/routes/jobs.d.ts +3 -0
- package/backend/dist/routes/jobs.d.ts.map +1 -0
- package/backend/dist/routes/jobs.js +126 -0
- package/backend/dist/routes/jobs.js.map +1 -0
- package/backend/dist/routes/libreClaw.d.ts.map +1 -1
- package/backend/dist/routes/libreClaw.js +10 -7
- package/backend/dist/routes/libreClaw.js.map +1 -1
- package/backend/dist/routes/media.d.ts.map +1 -1
- package/backend/dist/routes/media.js +523 -77
- package/backend/dist/routes/media.js.map +1 -1
- package/backend/dist/routes/notes.d.ts.map +1 -1
- package/backend/dist/routes/notes.js +21 -21
- package/backend/dist/routes/notes.js.map +1 -1
- package/backend/dist/routes/ollama.d.ts.map +1 -1
- package/backend/dist/routes/ollama.js +40 -12
- package/backend/dist/routes/ollama.js.map +1 -1
- package/backend/dist/routes/personas.d.ts.map +1 -1
- package/backend/dist/routes/personas.js +4 -2
- package/backend/dist/routes/personas.js.map +1 -1
- package/backend/dist/routes/plugins.d.ts.map +1 -1
- package/backend/dist/routes/plugins.js +79 -51
- package/backend/dist/routes/plugins.js.map +1 -1
- package/backend/dist/routes/preferences.d.ts.map +1 -1
- package/backend/dist/routes/preferences.js +290 -25
- package/backend/dist/routes/preferences.js.map +1 -1
- package/backend/dist/routes/search.d.ts.map +1 -1
- package/backend/dist/routes/search.js +23 -14
- package/backend/dist/routes/search.js.map +1 -1
- package/backend/dist/routes/stt.d.ts +9 -0
- package/backend/dist/routes/stt.d.ts.map +1 -0
- package/backend/dist/routes/stt.js +217 -0
- package/backend/dist/routes/stt.js.map +1 -0
- package/backend/dist/routes/systemDiagnostics.d.ts.map +1 -1
- package/backend/dist/routes/systemDiagnostics.js +2 -1
- package/backend/dist/routes/systemDiagnostics.js.map +1 -1
- package/backend/dist/routes/tts.d.ts.map +1 -1
- package/backend/dist/routes/tts.js +577 -28
- package/backend/dist/routes/tts.js.map +1 -1
- package/backend/dist/routes/users.d.ts.map +1 -1
- package/backend/dist/routes/users.js +16 -25
- package/backend/dist/routes/users.js.map +1 -1
- package/backend/dist/routes/work.d.ts.map +1 -1
- package/backend/dist/routes/work.js +167 -113
- package/backend/dist/routes/work.js.map +1 -1
- package/backend/dist/services/agentAccessService.d.ts +2 -2
- package/backend/dist/services/agentAccessService.d.ts.map +1 -1
- package/backend/dist/services/agentAccessService.js +5 -14
- package/backend/dist/services/agentAccessService.js.map +1 -1
- package/backend/dist/services/agentCliService.d.ts +3 -2
- package/backend/dist/services/agentCliService.d.ts.map +1 -1
- package/backend/dist/services/agentCliService.js +44 -16
- package/backend/dist/services/agentCliService.js.map +1 -1
- package/backend/dist/services/assistantCompletionService.d.ts +2 -1
- package/backend/dist/services/assistantCompletionService.d.ts.map +1 -1
- package/backend/dist/services/assistantCompletionService.js +7 -3
- package/backend/dist/services/assistantCompletionService.js.map +1 -1
- package/backend/dist/services/authService.d.ts +7 -2
- package/backend/dist/services/authService.d.ts.map +1 -1
- package/backend/dist/services/authService.js +23 -10
- package/backend/dist/services/authService.js.map +1 -1
- package/backend/dist/services/chatGenerationService.d.ts +5 -4
- package/backend/dist/services/chatGenerationService.d.ts.map +1 -1
- package/backend/dist/services/chatGenerationService.js +23 -17
- package/backend/dist/services/chatGenerationService.js.map +1 -1
- package/backend/dist/services/chatRequestService.d.ts +4 -3
- package/backend/dist/services/chatRequestService.d.ts.map +1 -1
- package/backend/dist/services/chatRequestService.js +3 -3
- package/backend/dist/services/chatRequestService.js.map +1 -1
- package/backend/dist/services/chatService.d.ts +66 -16
- package/backend/dist/services/chatService.d.ts.map +1 -1
- package/backend/dist/services/chatService.js +402 -111
- package/backend/dist/services/chatService.js.map +1 -1
- package/backend/dist/services/codexOAuthService.d.ts +2 -2
- package/backend/dist/services/codexOAuthService.d.ts.map +1 -1
- package/backend/dist/services/codexOAuthService.js +63 -7
- package/backend/dist/services/codexOAuthService.js.map +1 -1
- package/backend/dist/services/dataArchiveService.d.ts +88 -0
- package/backend/dist/services/dataArchiveService.d.ts.map +1 -0
- package/backend/dist/services/dataArchiveService.js +1027 -0
- package/backend/dist/services/dataArchiveService.js.map +1 -0
- package/backend/dist/services/documentService.d.ts +67 -14
- package/backend/dist/services/documentService.d.ts.map +1 -1
- package/backend/dist/services/documentService.js +938 -193
- package/backend/dist/services/documentService.js.map +1 -1
- package/backend/dist/services/durableChatCompletion.d.ts +16 -0
- package/backend/dist/services/durableChatCompletion.d.ts.map +1 -0
- package/backend/dist/services/durableChatCompletion.js +34 -0
- package/backend/dist/services/durableChatCompletion.js.map +1 -0
- package/backend/dist/services/durableChatGenerationService.d.ts +19 -0
- package/backend/dist/services/durableChatGenerationService.d.ts.map +1 -0
- package/backend/dist/services/durableChatGenerationService.js +341 -0
- package/backend/dist/services/durableChatGenerationService.js.map +1 -0
- package/backend/dist/services/embeddingService.d.ts +1 -1
- package/backend/dist/services/embeddingService.d.ts.map +1 -1
- package/backend/dist/services/embeddingService.js +16 -13
- package/backend/dist/services/embeddingService.js.map +1 -1
- package/backend/dist/services/encryptionService.d.ts +28 -1
- package/backend/dist/services/encryptionService.d.ts.map +1 -1
- package/backend/dist/services/encryptionService.js +131 -51
- package/backend/dist/services/encryptionService.js.map +1 -1
- package/backend/dist/services/followUpService.d.ts +1 -1
- package/backend/dist/services/followUpService.d.ts.map +1 -1
- package/backend/dist/services/followUpService.js +1 -1
- package/backend/dist/services/followUpService.js.map +1 -1
- package/backend/dist/services/galleryService.d.ts +38 -37
- package/backend/dist/services/galleryService.d.ts.map +1 -1
- package/backend/dist/services/galleryService.js +356 -251
- package/backend/dist/services/galleryService.js.map +1 -1
- package/backend/dist/services/healthService.d.ts +65 -0
- package/backend/dist/services/healthService.d.ts.map +1 -0
- package/backend/dist/services/healthService.js +379 -0
- package/backend/dist/services/healthService.js.map +1 -0
- package/backend/dist/services/legacyCiphertextIntegrity.d.ts +40 -0
- package/backend/dist/services/legacyCiphertextIntegrity.d.ts.map +1 -0
- package/backend/dist/services/legacyCiphertextIntegrity.js +406 -0
- package/backend/dist/services/legacyCiphertextIntegrity.js.map +1 -0
- package/backend/dist/services/mediaGenerationJobService.d.ts +27 -5
- package/backend/dist/services/mediaGenerationJobService.d.ts.map +1 -1
- package/backend/dist/services/mediaGenerationJobService.js +185 -55
- package/backend/dist/services/mediaGenerationJobService.js.map +1 -1
- package/backend/dist/services/memoryService.d.ts +7 -83
- package/backend/dist/services/memoryService.d.ts.map +1 -1
- package/backend/dist/services/memoryService.js +428 -573
- package/backend/dist/services/memoryService.js.map +1 -1
- package/backend/dist/services/memoryUtils.d.ts.map +1 -1
- package/backend/dist/services/memoryUtils.js +8 -1
- package/backend/dist/services/memoryUtils.js.map +1 -1
- package/backend/dist/services/modelAccessService.d.ts +3 -3
- package/backend/dist/services/modelAccessService.d.ts.map +1 -1
- package/backend/dist/services/modelAccessService.js +8 -16
- package/backend/dist/services/modelAccessService.js.map +1 -1
- package/backend/dist/services/mutationEngineService.d.ts +0 -7
- package/backend/dist/services/mutationEngineService.d.ts.map +1 -1
- package/backend/dist/services/mutationEngineService.js +7 -78
- package/backend/dist/services/mutationEngineService.js.map +1 -1
- package/backend/dist/services/ollamaService.d.ts +4 -4
- package/backend/dist/services/ollamaService.d.ts.map +1 -1
- package/backend/dist/services/ollamaService.js +62 -31
- package/backend/dist/services/ollamaService.js.map +1 -1
- package/backend/dist/services/personaService.d.ts.map +1 -1
- package/backend/dist/services/personaService.js +19 -54
- package/backend/dist/services/personaService.js.map +1 -1
- package/backend/dist/services/pluginActivationService.d.ts +6 -5
- package/backend/dist/services/pluginActivationService.d.ts.map +1 -1
- package/backend/dist/services/pluginActivationService.js +36 -76
- package/backend/dist/services/pluginActivationService.js.map +1 -1
- package/backend/dist/services/pluginAudioGenerationService.d.ts +11 -6
- package/backend/dist/services/pluginAudioGenerationService.d.ts.map +1 -1
- package/backend/dist/services/pluginAudioGenerationService.js +74 -16
- package/backend/dist/services/pluginAudioGenerationService.js.map +1 -1
- package/backend/dist/services/pluginCacheInvalidation.d.ts +38 -0
- package/backend/dist/services/pluginCacheInvalidation.d.ts.map +1 -0
- package/backend/dist/services/pluginCacheInvalidation.js +198 -0
- package/backend/dist/services/pluginCacheInvalidation.js.map +1 -0
- package/backend/dist/services/pluginCapabilityRegistryService.d.ts +3 -3
- package/backend/dist/services/pluginCapabilityRegistryService.d.ts.map +1 -1
- package/backend/dist/services/pluginCapabilityRegistryService.js +11 -7
- package/backend/dist/services/pluginCapabilityRegistryService.js.map +1 -1
- package/backend/dist/services/pluginCredentialsService.d.ts +9 -8
- package/backend/dist/services/pluginCredentialsService.d.ts.map +1 -1
- package/backend/dist/services/pluginCredentialsService.js +48 -89
- package/backend/dist/services/pluginCredentialsService.js.map +1 -1
- package/backend/dist/services/pluginEmbeddingService.d.ts +8 -7
- package/backend/dist/services/pluginEmbeddingService.d.ts.map +1 -1
- package/backend/dist/services/pluginEmbeddingService.js +13 -11
- package/backend/dist/services/pluginEmbeddingService.js.map +1 -1
- package/backend/dist/services/pluginImageGenerationService.d.ts +10 -8
- package/backend/dist/services/pluginImageGenerationService.d.ts.map +1 -1
- package/backend/dist/services/pluginImageGenerationService.js +119 -14
- package/backend/dist/services/pluginImageGenerationService.js.map +1 -1
- package/backend/dist/services/pluginSTTService.d.ts +47 -0
- package/backend/dist/services/pluginSTTService.d.ts.map +1 -0
- package/backend/dist/services/pluginSTTService.js +199 -0
- package/backend/dist/services/pluginSTTService.js.map +1 -0
- package/backend/dist/services/pluginService.d.ts +94 -40
- package/backend/dist/services/pluginService.d.ts.map +1 -1
- package/backend/dist/services/pluginService.js +833 -275
- package/backend/dist/services/pluginService.js.map +1 -1
- package/backend/dist/services/pluginTTSService.d.ts +26 -8
- package/backend/dist/services/pluginTTSService.d.ts.map +1 -1
- package/backend/dist/services/pluginTTSService.js +277 -25
- package/backend/dist/services/pluginTTSService.js.map +1 -1
- package/backend/dist/services/pluginUsageService.d.ts +4 -4
- package/backend/dist/services/pluginUsageService.d.ts.map +1 -1
- package/backend/dist/services/pluginUsageService.js +44 -93
- package/backend/dist/services/pluginUsageService.js.map +1 -1
- package/backend/dist/services/pluginVariablesService.d.ts +14 -7
- package/backend/dist/services/pluginVariablesService.d.ts.map +1 -1
- package/backend/dist/services/pluginVariablesService.js +116 -81
- package/backend/dist/services/pluginVariablesService.js.map +1 -1
- package/backend/dist/services/pluginVideoGenerationService.d.ts +19 -8
- package/backend/dist/services/pluginVideoGenerationService.d.ts.map +1 -1
- package/backend/dist/services/pluginVideoGenerationService.js +116 -20
- package/backend/dist/services/pluginVideoGenerationService.js.map +1 -1
- package/backend/dist/services/preferencesService.d.ts +31 -21
- package/backend/dist/services/preferencesService.d.ts.map +1 -1
- package/backend/dist/services/preferencesService.js +104 -102
- package/backend/dist/services/preferencesService.js.map +1 -1
- package/backend/dist/services/recoveryInventoryService.d.ts +244 -0
- package/backend/dist/services/recoveryInventoryService.d.ts.map +1 -0
- package/backend/dist/services/recoveryInventoryService.js +1436 -0
- package/backend/dist/services/recoveryInventoryService.js.map +1 -0
- package/backend/dist/services/simpleGitHubOAuth.js +3 -3
- package/backend/dist/services/simpleGitHubOAuth.js.map +1 -1
- package/backend/dist/services/simpleHuggingFaceOAuth.d.ts.map +1 -1
- package/backend/dist/services/simpleHuggingFaceOAuth.js +3 -3
- package/backend/dist/services/simpleHuggingFaceOAuth.js.map +1 -1
- package/backend/dist/services/systemDiagnosticsService.d.ts.map +1 -1
- package/backend/dist/services/systemDiagnosticsService.js +2 -2
- package/backend/dist/services/systemDiagnosticsService.js.map +1 -1
- package/backend/dist/services/systemSettingsService.d.ts +5 -0
- package/backend/dist/services/systemSettingsService.d.ts.map +1 -0
- package/backend/dist/services/systemSettingsService.js +24 -0
- package/backend/dist/services/systemSettingsService.js.map +1 -0
- package/backend/dist/services/titleGenerationService.d.ts +1 -1
- package/backend/dist/services/titleGenerationService.d.ts.map +1 -1
- package/backend/dist/services/titleGenerationService.js +1 -1
- package/backend/dist/services/titleGenerationService.js.map +1 -1
- package/backend/dist/services/voiceProfileService.d.ts +44 -0
- package/backend/dist/services/voiceProfileService.d.ts.map +1 -0
- package/backend/dist/services/voiceProfileService.js +195 -0
- package/backend/dist/services/voiceProfileService.js.map +1 -0
- package/backend/dist/services/webSearchService.d.ts +7 -7
- package/backend/dist/services/webSearchService.d.ts.map +1 -1
- package/backend/dist/services/webSearchService.js +40 -35
- package/backend/dist/services/webSearchService.js.map +1 -1
- package/backend/dist/services/websocketTicketService.d.ts +39 -0
- package/backend/dist/services/websocketTicketService.d.ts.map +1 -0
- package/backend/dist/services/websocketTicketService.js +183 -0
- package/backend/dist/services/websocketTicketService.js.map +1 -0
- package/backend/dist/services/workAccessService.d.ts +3 -3
- package/backend/dist/services/workAccessService.d.ts.map +1 -1
- package/backend/dist/services/workAccessService.js +8 -16
- package/backend/dist/services/workAccessService.js.map +1 -1
- package/backend/dist/services/workAdminService.d.ts +3 -3
- package/backend/dist/services/workAdminService.d.ts.map +1 -1
- package/backend/dist/services/workAdminService.js +4 -4
- package/backend/dist/services/workAdminService.js.map +1 -1
- package/backend/dist/services/workAgentService.d.ts +25 -1
- package/backend/dist/services/workAgentService.d.ts.map +1 -1
- package/backend/dist/services/workAgentService.js +294 -126
- package/backend/dist/services/workAgentService.js.map +1 -1
- package/backend/dist/services/workEventService.d.ts +15 -2
- package/backend/dist/services/workEventService.d.ts.map +1 -1
- package/backend/dist/services/workEventService.js +201 -3
- package/backend/dist/services/workEventService.js.map +1 -1
- package/backend/dist/services/workKubernetesDriver.d.ts +8 -7
- package/backend/dist/services/workKubernetesDriver.d.ts.map +1 -1
- package/backend/dist/services/workKubernetesDriver.js +65 -21
- package/backend/dist/services/workKubernetesDriver.js.map +1 -1
- package/backend/dist/services/workModelProviderService.d.ts +2 -2
- package/backend/dist/services/workModelProviderService.d.ts.map +1 -1
- package/backend/dist/services/workModelProviderService.js +38 -34
- package/backend/dist/services/workModelProviderService.js.map +1 -1
- package/backend/dist/services/workPolicyService.d.ts +7 -7
- package/backend/dist/services/workPolicyService.d.ts.map +1 -1
- package/backend/dist/services/workPolicyService.js +50 -51
- package/backend/dist/services/workPolicyService.js.map +1 -1
- package/backend/dist/services/workPreviewProxyService.d.ts +8 -8
- package/backend/dist/services/workPreviewProxyService.d.ts.map +1 -1
- package/backend/dist/services/workPreviewProxyService.js +47 -44
- package/backend/dist/services/workPreviewProxyService.js.map +1 -1
- package/backend/dist/services/workRuntimeDriver.d.ts +21 -18
- package/backend/dist/services/workRuntimeDriver.d.ts.map +1 -1
- package/backend/dist/services/workRuntimeDriver.js +69 -20
- package/backend/dist/services/workRuntimeDriver.js.map +1 -1
- package/backend/dist/services/workRuntimeService.d.ts +18 -13
- package/backend/dist/services/workRuntimeService.d.ts.map +1 -1
- package/backend/dist/services/workRuntimeService.js +438 -194
- package/backend/dist/services/workRuntimeService.js.map +1 -1
- package/backend/dist/services/workRuntimeShared.d.ts +2 -0
- package/backend/dist/services/workRuntimeShared.d.ts.map +1 -1
- package/backend/dist/services/workRuntimeShared.js.map +1 -1
- package/backend/dist/services/workTaskService.d.ts +42 -36
- package/backend/dist/services/workTaskService.d.ts.map +1 -1
- package/backend/dist/services/workTaskService.js +445 -350
- package/backend/dist/services/workTaskService.js.map +1 -1
- package/backend/dist/services/workTerminalService.d.ts +1 -1
- package/backend/dist/services/workTerminalService.d.ts.map +1 -1
- package/backend/dist/services/workTerminalService.js +33 -6
- package/backend/dist/services/workTerminalService.js.map +1 -1
- package/backend/dist/storage.d.ts +72 -40
- package/backend/dist/storage.d.ts.map +1 -1
- package/backend/dist/storage.js +312 -660
- package/backend/dist/storage.js.map +1 -1
- package/backend/dist/types/index.d.ts +28 -0
- package/backend/dist/types/index.d.ts.map +1 -1
- package/backend/dist/types/index.js.map +1 -1
- package/backend/dist/types/work.d.ts +7 -2
- package/backend/dist/types/work.d.ts.map +1 -1
- package/backend/dist/utils/chatCancellation.d.ts +48 -0
- package/backend/dist/utils/chatCancellation.d.ts.map +1 -0
- package/backend/dist/utils/chatCancellation.js +152 -0
- package/backend/dist/utils/chatCancellation.js.map +1 -0
- package/backend/dist/utils/chatDocumentContext.d.ts +1 -1
- package/backend/dist/utils/chatDocumentContext.d.ts.map +1 -1
- package/backend/dist/utils/chatDocumentContext.js +11 -5
- package/backend/dist/utils/chatDocumentContext.js.map +1 -1
- package/backend/dist/utils/chatStreamCoalescer.d.ts +15 -0
- package/backend/dist/utils/chatStreamCoalescer.d.ts.map +1 -0
- package/backend/dist/utils/chatStreamCoalescer.js +59 -0
- package/backend/dist/utils/chatStreamCoalescer.js.map +1 -0
- package/backend/dist/utils/dataDirectory.d.ts +49 -0
- package/backend/dist/utils/dataDirectory.d.ts.map +1 -0
- package/backend/dist/utils/dataDirectory.js +291 -0
- package/backend/dist/utils/dataDirectory.js.map +1 -0
- package/backend/dist/utils/generationUtils.d.ts.map +1 -1
- package/backend/dist/utils/generationUtils.js +18 -6
- package/backend/dist/utils/generationUtils.js.map +1 -1
- package/backend/dist/utils/jwt.d.ts.map +1 -1
- package/backend/dist/utils/jwt.js +2 -3
- package/backend/dist/utils/jwt.js.map +1 -1
- package/backend/dist/utils/ollamaModelDefaults.d.ts.map +1 -1
- package/backend/dist/utils/ollamaModelDefaults.js +2 -7
- package/backend/dist/utils/ollamaModelDefaults.js.map +1 -1
- package/backend/dist/utils/ollamaStreaming.d.ts +2 -1
- package/backend/dist/utils/ollamaStreaming.d.ts.map +1 -1
- package/backend/dist/utils/ollamaStreaming.js +49 -11
- package/backend/dist/utils/ollamaStreaming.js.map +1 -1
- package/backend/dist/utils/pluginConnectionVariables.d.ts.map +1 -1
- package/backend/dist/utils/pluginConnectionVariables.js +11 -3
- package/backend/dist/utils/pluginConnectionVariables.js.map +1 -1
- package/backend/dist/utils/pluginDefinitionTrust.d.ts.map +1 -1
- package/backend/dist/utils/pluginDefinitionTrust.js +4 -3
- package/backend/dist/utils/pluginDefinitionTrust.js.map +1 -1
- package/backend/dist/utils/pluginStreaming.d.ts +2 -1
- package/backend/dist/utils/pluginStreaming.d.ts.map +1 -1
- package/backend/dist/utils/pluginStreaming.js +5 -1
- package/backend/dist/utils/pluginStreaming.js.map +1 -1
- package/backend/dist/utils/pluginUpload.d.ts +1 -0
- package/backend/dist/utils/pluginUpload.d.ts.map +1 -1
- package/backend/dist/utils/pluginUpload.js +14 -4
- package/backend/dist/utils/pluginUpload.js.map +1 -1
- package/backend/dist/utils/pluginValidation.d.ts.map +1 -1
- package/backend/dist/utils/pluginValidation.js +29 -1
- package/backend/dist/utils/pluginValidation.js.map +1 -1
- package/backend/dist/utils/sttAudioUpload.d.ts +24 -0
- package/backend/dist/utils/sttAudioUpload.d.ts.map +1 -0
- package/backend/dist/utils/sttAudioUpload.js +500 -0
- package/backend/dist/utils/sttAudioUpload.js.map +1 -0
- package/backend/dist/utils/ttsVoiceCloneUpload.d.ts +34 -0
- package/backend/dist/utils/ttsVoiceCloneUpload.d.ts.map +1 -0
- package/backend/dist/utils/ttsVoiceCloneUpload.js +224 -0
- package/backend/dist/utils/ttsVoiceCloneUpload.js.map +1 -0
- package/backend/dist/utils/websocketMessages.d.ts +2 -1
- package/backend/dist/utils/websocketMessages.d.ts.map +1 -1
- package/backend/dist/utils/websocketMessages.js +16 -2
- package/backend/dist/utils/websocketMessages.js.map +1 -1
- package/backend/dist/websocketServer.d.ts +4 -1
- package/backend/dist/websocketServer.d.ts.map +1 -1
- package/backend/dist/websocketServer.js +290 -44
- package/backend/dist/websocketServer.js.map +1 -1
- package/backend/dist/workTerminalServer.d.ts +9 -0
- package/backend/dist/workTerminalServer.d.ts.map +1 -1
- package/backend/dist/workTerminalServer.js +221 -52
- package/backend/dist/workTerminalServer.js.map +1 -1
- package/backend/dist/worker.d.ts +2 -0
- package/backend/dist/worker.d.ts.map +1 -0
- package/backend/dist/worker.js +250 -0
- package/backend/dist/worker.js.map +1 -0
- package/backend/package.json +19 -9
- package/bin/cli.js +126 -99
- package/bin/runtime-paths.js +108 -0
- package/frontend/dist/artifact-runtime/.build-fingerprint +1 -1
- package/frontend/dist/artifact-runtime/framer-motion.js +5 -5
- package/frontend/dist/artifact-runtime/lucide-react.js +1 -1
- package/frontend/dist/assets/index-Jtx9Amhz.js +16 -0
- package/frontend/dist/assets/index-kxtZQLV6.css +1 -0
- package/frontend/dist/assets/{markdown-math-ClQbWekD.css → markdown-math-ClTedVi7.css} +1 -1
- package/frontend/dist/index.html +18 -18
- package/frontend/dist/js/{ArtifactContainer-Dy2Q0iIL.js → ArtifactContainer-fZegtmva.js} +1 -1
- package/frontend/dist/js/{ArtifactDemoPage-K79dWshB.js → ArtifactDemoPage-BDBXYv9l.js} +1 -1
- package/frontend/dist/js/{ArtifactSandboxFrame-DhqLNUtY.js → ArtifactSandboxFrame-BN16NtKe.js} +3 -3
- package/frontend/dist/js/{ArtifactSlideOutPanel-Cl8JG7bz.js → ArtifactSlideOutPanel-x1fS85Ww.js} +1 -1
- package/frontend/dist/js/{Button-CTXHujOd.js → Button-BV44cTnj.js} +1 -1
- package/frontend/dist/js/ChatPage-C_pXh7WN.js +23 -0
- package/frontend/dist/js/{FirstTimeSetup-kHhRzGJ8.js → FirstTimeSetup-oRrlZnBm.js} +1 -1
- package/frontend/dist/js/GalleryPage-CV_vbE7X.js +1 -0
- package/frontend/dist/js/{HomePage-C1L8WAXL.js → HomePage-P-e7Huco.js} +1 -1
- package/frontend/dist/js/{LibreClawPage-Dyua8IUu.js → LibreClawPage-Cee06SUM.js} +1 -1
- package/frontend/dist/js/{ModelManagerModals-CuMRGUd-.js → ModelManagerModals-D7jIT3v1.js} +1 -1
- package/frontend/dist/js/{ModelSelector-CqHc-Ln4.js → ModelSelector-DXucbvrz.js} +1 -1
- package/frontend/dist/js/ModelsPage-C3_fZpMM.js +2 -0
- package/frontend/dist/js/NotesPage-rEIPWGIb.js +1 -0
- package/frontend/dist/js/{OptimizedSyntaxHighlighter-CWYUn9Oe.js → OptimizedSyntaxHighlighter-XwqZEoTf.js} +1 -1
- package/frontend/dist/js/{PersonasPage-D_6WBCH5.js → PersonasPage-BXtepFuD.js} +2 -2
- package/frontend/dist/js/PluginUsagePage-hhu8cxsu.js +1 -0
- package/frontend/dist/js/RichMessageContent-DkiEvdSg.js +3 -0
- package/frontend/dist/js/SettingsModal-BNxCtJ51.js +1 -0
- package/frontend/dist/js/{SettingsToggle-DLHlCDBl.js → SettingsToggle-WTa0rgvY.js} +1 -1
- package/frontend/dist/js/{SystemPage-BMWEet9e.js → SystemPage-BvvKFuoG.js} +1 -1
- package/frontend/dist/js/UserManagementPage-BccyR7si.js +1 -0
- package/frontend/dist/js/WorkPage-BgxrvY3I.js +6 -0
- package/frontend/dist/js/api-BvPDxsUQ.js +14 -0
- package/frontend/dist/js/appStore-DRSSjaHn.js +2 -0
- package/frontend/dist/js/ar-xTSvTq05.js +2 -0
- package/frontend/dist/js/authStore-BVykIRec.js +4 -0
- package/frontend/dist/js/{babel-CmENXdZw.js → babel-D24oDI9y.js} +1 -1
- package/frontend/dist/js/bn-iYAsohEA.js +2 -0
- package/frontend/dist/js/chatStore-UPp5TV_t.js +3 -0
- package/frontend/dist/js/{config-DkV1ka7I.js → config-BTlPm-cZ.js} +1 -1
- package/frontend/dist/js/cs-YBHN88Hb.js +2 -0
- package/frontend/dist/js/da-D7qlLy_k.js +2 -0
- package/frontend/dist/js/de-DV671k2c.js +2 -0
- package/frontend/dist/js/es-kyBgzNq-.js +2 -0
- package/frontend/dist/js/{estree-D5KP-qbw.js → estree-CfYahF_d.js} +1 -1
- package/frontend/dist/js/fr-Cw1vut7I.js +2 -0
- package/frontend/dist/js/hi-DWEFC024.js +2 -0
- package/frontend/dist/js/{html-Cm9c2akd.js → html-BJsDX1UZ.js} +1 -1
- package/frontend/dist/js/id-DlMHjjy0.js +2 -0
- package/frontend/dist/js/is-B9E_a7dG.js +2 -0
- package/frontend/dist/js/it-DawmVbLC.js +2 -0
- package/frontend/dist/js/ja-DmVvwY3W.js +2 -0
- package/frontend/dist/js/ko-DzOPpkVs.js +2 -0
- package/frontend/dist/js/{markdown-B2u7CnKN.js → markdown-GLyuUNig.js} +1 -1
- package/frontend/dist/js/markdown-core-BmPPZiuD.js +31 -0
- package/frontend/dist/js/{markdown-math-B7FlYsmr.js → markdown-math-mH7AZ_mb.js} +6 -6
- package/frontend/dist/js/{messageCodeStyles-DalG2j6U.js → messageCodeStyles-BHddEFP1.js} +1 -1
- package/frontend/dist/js/ms-DpsaOPht.js +2 -0
- package/frontend/dist/js/nl-B1d8W22n.js +2 -0
- package/frontend/dist/js/pl-nCncRVgt.js +2 -0
- package/frontend/dist/js/{postcss-B5WIGhAY.js → postcss-Bx9CTcIc.js} +1 -1
- package/frontend/dist/js/pt-DHw8fGuu.js +2 -0
- package/frontend/dist/js/{react-vendor-DPNXrO-8.js → react-vendor-C5yShNlM.js} +1 -1
- package/frontend/dist/js/{router-vendor-Ca9zqOqT.js → router-vendor-CbPDks39.js} +1 -1
- package/frontend/dist/js/ru-Derl_YP_.js +2 -0
- package/frontend/dist/js/{standalone-Dwm1daef.js → standalone-Dh56V0YW.js} +1 -1
- package/frontend/dist/js/sv-pJAfBVo0.js +2 -0
- package/frontend/dist/js/{syntax-highlight-Ca9bHsaz.js → syntax-highlight-3EEX6CGL.js} +3 -3
- package/frontend/dist/js/th-C_7fIGnk.js +2 -0
- package/frontend/dist/js/tr-CPqsJvaP.js +2 -0
- package/frontend/dist/js/{typescript-CwieSptM.js → typescript-DRy7A9w4.js} +1 -1
- package/frontend/dist/js/{ui-BnDZpjfc.js → ui-CuY4IifA.js} +2 -2
- package/frontend/dist/js/ui-vendor-D3Ahl1x5.js +177 -0
- package/frontend/dist/js/uk-3o8P_kFi.js +2 -0
- package/frontend/dist/js/{useTranslation-CXY69qNk.js → useTranslation-C3ei3mJq.js} +1 -1
- package/frontend/dist/js/{utils-BM0_0iFj.js → utils-CuC1beTY.js} +1 -1
- package/frontend/dist/js/{utils-vendor-1zob7nK9.js → utils-vendor-BBa8OxtB.js} +1 -1
- package/frontend/dist/js/vi-Dv6N7OVD.js +2 -0
- package/frontend/dist/js/{workApi-BOS7crs9.js → workApi-DHuYNHLf.js} +2 -2
- package/frontend/dist/js/{yaml-QD4znPfZ.js → yaml-DioTxVLA.js} +1 -1
- package/frontend/dist/js/zh-qg5iqtPi.js +2 -0
- package/package.json +16 -5
- package/plugins/huggingface.json +12 -3
- package/plugins/llama-cpp.json +18 -6
- package/plugins/longcat-audiodit.json +114 -0
- package/plugins/openai.json +18 -0
- package/frontend/dist/assets/index-BBpNbfKW.js +0 -16
- package/frontend/dist/assets/index-BLATyFmD.css +0 -1
- package/frontend/dist/js/ChatPage-BBayfMLS.js +0 -16
- package/frontend/dist/js/GalleryPage-By8VI39Q.js +0 -1
- package/frontend/dist/js/ModelsPage-ODeXhDDk.js +0 -2
- package/frontend/dist/js/NotesPage-CApzDjOq.js +0 -1
- package/frontend/dist/js/PluginUsagePage-kutS6SOd.js +0 -1
- package/frontend/dist/js/RichMessageContent-g6WT75Te.js +0 -3
- package/frontend/dist/js/SettingsModal-B7z51BCx.js +0 -1
- package/frontend/dist/js/UserManagementPage-D08lM51c.js +0 -1
- package/frontend/dist/js/WorkPage-DdVLefsK.js +0 -6
- package/frontend/dist/js/api-CLEmGcEh.js +0 -14
- package/frontend/dist/js/appStore-CGdhvp9P.js +0 -2
- package/frontend/dist/js/ar-BTmB2WVm.js +0 -2
- package/frontend/dist/js/authStore-Dh3beEOq.js +0 -4
- package/frontend/dist/js/bn-CQnH7YVT.js +0 -2
- package/frontend/dist/js/chatStore-CDeYWL_q.js +0 -3
- package/frontend/dist/js/cs-oTTZkQXr.js +0 -2
- package/frontend/dist/js/da-Br0gB6J6.js +0 -2
- package/frontend/dist/js/de-DE2iztTF.js +0 -2
- package/frontend/dist/js/es-DgthfVtl.js +0 -2
- package/frontend/dist/js/fr-BjxjFwPh.js +0 -2
- package/frontend/dist/js/hi-D1q7E-9N.js +0 -2
- package/frontend/dist/js/id-CDJZqLTF.js +0 -2
- package/frontend/dist/js/is-BU7Um_Tq.js +0 -2
- package/frontend/dist/js/it-CdAxr8P_.js +0 -2
- package/frontend/dist/js/ja-BLbQwz9u.js +0 -2
- package/frontend/dist/js/ko-CY5lpkAe.js +0 -2
- package/frontend/dist/js/markdown-core-DHnR5Hw8.js +0 -16
- package/frontend/dist/js/ms-tQ8AYXEQ.js +0 -2
- package/frontend/dist/js/nl-CRNi2oWT.js +0 -2
- package/frontend/dist/js/pl-CWtFRS_W.js +0 -2
- package/frontend/dist/js/pt-C7SPoLF8.js +0 -2
- package/frontend/dist/js/ru-Dz4AX8xc.js +0 -2
- package/frontend/dist/js/sv-ETy5-boa.js +0 -2
- package/frontend/dist/js/th-DpuMqvxU.js +0 -2
- package/frontend/dist/js/tr-C-1AYAqg.js +0 -2
- package/frontend/dist/js/ui-vendor-xUzKqAXI.js +0 -177
- package/frontend/dist/js/uk-CyS680gr.js +0 -2
- package/frontend/dist/js/vi-BG8HuiTz.js +0 -2
- package/frontend/dist/js/zh-NCs2mkHj.js +0 -2
|
@@ -15,11 +15,13 @@
|
|
|
15
15
|
* limitations under the License.
|
|
16
16
|
*/
|
|
17
17
|
import { v4 as uuidv4 } from 'uuid';
|
|
18
|
-
import {
|
|
18
|
+
import { getWorkPersistence, replaceWorkTextNul, WorkPersistenceError, } from '../platform/workPersistence/index.js';
|
|
19
|
+
import { transactionalWorkExecutionEnqueuer } from '../platform/jobs/workExecutionEnqueuer.js';
|
|
20
|
+
import { WORK_EXECUTE_IDEMPOTENCY_SCOPE, WORK_EXECUTE_JOB_TYPE, } from '../platform/jobs/domainJobContracts.js';
|
|
21
|
+
import { getDurableJobRuntime } from '../platform/jobs/durableJobRuntime.js';
|
|
19
22
|
import { createLogger } from '../utils/logger.js';
|
|
23
|
+
import { getCoordinator } from '../platform/coordination/service.js';
|
|
20
24
|
const logger = createLogger('services:work-task');
|
|
21
|
-
const ACTIVE_RUN_STATUSES = ['queued', 'preparing', 'running'];
|
|
22
|
-
const ACTIVE_PREVIEW_STATUSES = ['starting', 'running'];
|
|
23
25
|
export const WORK_MESSAGE_PAGE_SIZE = 200;
|
|
24
26
|
export const WORK_MESSAGE_MAX_BYTES = 100000;
|
|
25
27
|
export const WORK_MESSAGE_METADATA_MAX_BYTES = 100000;
|
|
@@ -45,100 +47,284 @@ export class WorkTaskService {
|
|
|
45
47
|
this.retiringTasks = new Set();
|
|
46
48
|
this.networkPolicyChanges = new Set();
|
|
47
49
|
}
|
|
48
|
-
|
|
49
|
-
|
|
50
|
+
async resolveExecutionPublication(expectedTask, expectedRun, expectedMessage, taskMayPreexist = false) {
|
|
51
|
+
try {
|
|
52
|
+
const persistence = getWorkPersistence();
|
|
53
|
+
const [task, run, messages, job] = await Promise.all([
|
|
54
|
+
persistence.findTask(expectedTask.id, expectedTask.user_id),
|
|
55
|
+
persistence.findRun(expectedRun.id),
|
|
56
|
+
persistence.listMessages({ taskId: expectedTask.id, mode: 'all' }),
|
|
57
|
+
getDurableJobRuntime().service.getByIdempotency(expectedTask.user_id, WORK_EXECUTE_IDEMPOTENCY_SCOPE, expectedRun.id),
|
|
58
|
+
]);
|
|
59
|
+
const message = messages.find(row => row.id === expectedMessage.id);
|
|
60
|
+
if (!run && !message && !job && (taskMayPreexist || !task)) {
|
|
61
|
+
return 'absent';
|
|
62
|
+
}
|
|
63
|
+
const exactTask = task?.id === expectedTask.id &&
|
|
64
|
+
task.user_id === expectedTask.user_id &&
|
|
65
|
+
task.title === expectedTask.title &&
|
|
66
|
+
task.model === expectedTask.model &&
|
|
67
|
+
task.provider_type === expectedTask.provider_type &&
|
|
68
|
+
task.provider_id === expectedTask.provider_id &&
|
|
69
|
+
task.network_enabled === expectedTask.network_enabled &&
|
|
70
|
+
task.volume_name === expectedTask.volume_name &&
|
|
71
|
+
task.container_name === expectedTask.container_name &&
|
|
72
|
+
task.host_path === expectedTask.host_path &&
|
|
73
|
+
task.policy_id === expectedTask.policy_id &&
|
|
74
|
+
task.created_at === expectedTask.created_at;
|
|
75
|
+
const exactRun = run?.id === expectedRun.id &&
|
|
76
|
+
run.task_id === expectedRun.task_id &&
|
|
77
|
+
run.model === expectedRun.model &&
|
|
78
|
+
run.provider_type === expectedRun.provider_type &&
|
|
79
|
+
run.provider_id === expectedRun.provider_id &&
|
|
80
|
+
run.created_at === expectedRun.created_at;
|
|
81
|
+
const exactMessage = message?.id === expectedMessage.id &&
|
|
82
|
+
message.task_id === expectedMessage.task_id &&
|
|
83
|
+
message.run_id === expectedMessage.run_id &&
|
|
84
|
+
message.role === expectedMessage.role &&
|
|
85
|
+
message.kind === expectedMessage.kind &&
|
|
86
|
+
message.content === expectedMessage.content &&
|
|
87
|
+
message.metadata === expectedMessage.metadata &&
|
|
88
|
+
message.created_at === expectedMessage.created_at;
|
|
89
|
+
const exactJob = job?.jobType === WORK_EXECUTE_JOB_TYPE &&
|
|
90
|
+
job.actorUserId === expectedTask.user_id;
|
|
91
|
+
return exactTask && exactRun && exactMessage && exactJob
|
|
92
|
+
? 'committed'
|
|
93
|
+
: 'ambiguous';
|
|
94
|
+
}
|
|
95
|
+
catch {
|
|
96
|
+
return 'ambiguous';
|
|
97
|
+
}
|
|
98
|
+
}
|
|
99
|
+
async withUserLifecycleLease(userId, operation) {
|
|
100
|
+
const coordinator = getCoordinator();
|
|
101
|
+
const deadline = Date.now() + 10000;
|
|
102
|
+
let lease = await coordinator.acquireLease(`work-user-lifecycle:${userId}`, 60000);
|
|
103
|
+
while (!lease && Date.now() < deadline) {
|
|
104
|
+
await new Promise(resolve => setTimeout(resolve, 25));
|
|
105
|
+
lease = await coordinator.acquireLease(`work-user-lifecycle:${userId}`, 60000);
|
|
106
|
+
}
|
|
107
|
+
if (!lease) {
|
|
108
|
+
throw new WorkConflictError('This user already has a Work lifecycle operation in progress.');
|
|
109
|
+
}
|
|
110
|
+
let closed = false;
|
|
111
|
+
let leaseLost = false;
|
|
112
|
+
let renewalTimer;
|
|
113
|
+
const leaseLostError = () => new WorkConflictError('The shared Work lifecycle lease was lost.');
|
|
114
|
+
const markLost = () => {
|
|
115
|
+
leaseLost = true;
|
|
116
|
+
};
|
|
117
|
+
const assertHeld = async () => {
|
|
118
|
+
if (closed || leaseLost)
|
|
119
|
+
throw leaseLostError();
|
|
120
|
+
try {
|
|
121
|
+
if (await lease.extend(60000))
|
|
122
|
+
return;
|
|
123
|
+
}
|
|
124
|
+
catch {
|
|
125
|
+
// Report expiry and coordination outages through one safe fence.
|
|
126
|
+
}
|
|
127
|
+
markLost();
|
|
128
|
+
throw leaseLostError();
|
|
129
|
+
};
|
|
130
|
+
const renew = async () => {
|
|
131
|
+
if (closed)
|
|
132
|
+
return;
|
|
133
|
+
try {
|
|
134
|
+
if (!(await lease.extend(60000)))
|
|
135
|
+
markLost();
|
|
136
|
+
}
|
|
137
|
+
catch {
|
|
138
|
+
markLost();
|
|
139
|
+
}
|
|
140
|
+
if (!closed && !leaseLost)
|
|
141
|
+
renewalTimer = setTimeout(renew, 20000);
|
|
142
|
+
};
|
|
143
|
+
renewalTimer = setTimeout(renew, 20000);
|
|
144
|
+
try {
|
|
145
|
+
await assertHeld();
|
|
146
|
+
const result = await operation(assertHeld);
|
|
147
|
+
return result;
|
|
148
|
+
}
|
|
149
|
+
finally {
|
|
150
|
+
closed = true;
|
|
151
|
+
if (renewalTimer)
|
|
152
|
+
clearTimeout(renewalTimer);
|
|
153
|
+
await lease.release().catch(() => false);
|
|
154
|
+
}
|
|
155
|
+
}
|
|
156
|
+
async createTaskWithRun(userId, message, model, networkEnabled, provider = { providerType: 'ollama' }, hostPath, policyId) {
|
|
157
|
+
return this.withUserLifecycleLease(userId, assertHeld => this.createTaskWithRunWithLeaseHeld(userId, message, model, networkEnabled, provider, hostPath, policyId, assertHeld));
|
|
158
|
+
}
|
|
159
|
+
async createTaskWithRunWithLeaseHeld(userId, message, model, networkEnabled, provider, hostPath, policyId, assertHeld = async () => undefined) {
|
|
160
|
+
await this.assertUserIsActive(userId);
|
|
50
161
|
const selectedProvider = normalizeProvider(provider);
|
|
51
|
-
const db = getDatabase();
|
|
52
162
|
const taskId = uuidv4();
|
|
53
163
|
const runId = uuidv4();
|
|
54
164
|
const messageId = uuidv4();
|
|
55
165
|
const compactId = taskId.replace(/-/g, '');
|
|
56
166
|
const now = Date.now();
|
|
57
167
|
const title = deriveTitle(message);
|
|
58
|
-
const
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
168
|
+
const selectedModel = cleanRequired(model);
|
|
169
|
+
const taskRow = {
|
|
170
|
+
id: taskId,
|
|
171
|
+
user_id: userId,
|
|
172
|
+
title,
|
|
173
|
+
model: selectedModel,
|
|
174
|
+
provider_type: selectedProvider.providerType,
|
|
175
|
+
provider_id: selectedProvider.providerId || null,
|
|
176
|
+
status: 'preparing',
|
|
177
|
+
network_enabled: networkEnabled ? 1 : 0,
|
|
178
|
+
volume_name: `libre-work-${compactId}`,
|
|
179
|
+
container_name: `libre-work-${compactId}`,
|
|
180
|
+
host_path: hostPath || null,
|
|
181
|
+
policy_id: policyId || null,
|
|
182
|
+
preview_url: null,
|
|
183
|
+
preview_status: 'stopped',
|
|
184
|
+
preview_upstream_host: null,
|
|
185
|
+
preview_upstream_port: null,
|
|
186
|
+
created_at: now,
|
|
187
|
+
updated_at: now,
|
|
188
|
+
};
|
|
189
|
+
const runRow = {
|
|
190
|
+
id: runId,
|
|
191
|
+
task_id: taskId,
|
|
192
|
+
model: selectedModel,
|
|
193
|
+
provider_type: selectedProvider.providerType,
|
|
194
|
+
provider_id: selectedProvider.providerId || null,
|
|
195
|
+
status: 'queued',
|
|
196
|
+
error: null,
|
|
197
|
+
created_at: now,
|
|
198
|
+
started_at: null,
|
|
199
|
+
finished_at: null,
|
|
200
|
+
};
|
|
201
|
+
const messageRow = {
|
|
202
|
+
id: messageId,
|
|
203
|
+
task_id: taskId,
|
|
204
|
+
run_id: runId,
|
|
205
|
+
role: 'user',
|
|
206
|
+
kind: 'message',
|
|
207
|
+
content: message,
|
|
208
|
+
metadata: null,
|
|
209
|
+
message_index: 0,
|
|
210
|
+
created_at: now,
|
|
211
|
+
};
|
|
212
|
+
try {
|
|
213
|
+
await assertHeld();
|
|
214
|
+
await getWorkPersistence().createTaskWithRun({
|
|
215
|
+
task: taskRow,
|
|
216
|
+
run: runRow,
|
|
217
|
+
message: messageRow,
|
|
218
|
+
limits: workAdmissionLimits,
|
|
219
|
+
}, transactionalWorkExecutionEnqueuer, assertHeld);
|
|
220
|
+
}
|
|
221
|
+
catch (error) {
|
|
222
|
+
const outcome = await this.resolveExecutionPublication(taskRow, runRow, messageRow);
|
|
223
|
+
if (outcome === 'committed') {
|
|
224
|
+
return this.requireTaskDetail(taskId, userId);
|
|
225
|
+
}
|
|
226
|
+
if (outcome === 'ambiguous') {
|
|
227
|
+
throw new WorkConflictError('The Work task publication outcome is ambiguous. Reload before retrying.');
|
|
228
|
+
}
|
|
229
|
+
throw translatePersistenceError(error);
|
|
230
|
+
}
|
|
74
231
|
return this.requireTaskDetail(taskId, userId);
|
|
75
232
|
}
|
|
76
|
-
createRun(taskId, userId, message, model, provider) {
|
|
77
|
-
|
|
78
|
-
|
|
233
|
+
async createRun(taskId, userId, message, model, provider) {
|
|
234
|
+
return this.withUserLifecycleLease(userId, assertHeld => this.createRunWithLeaseHeld(taskId, userId, message, model, provider, assertHeld));
|
|
235
|
+
}
|
|
236
|
+
async createRunWithLeaseHeld(taskId, userId, message, model, provider, assertHeld = async () => undefined) {
|
|
237
|
+
const task = await this.requireMutableTaskRecord(taskId, userId);
|
|
238
|
+
if (await this.getActiveRun(taskId)) {
|
|
79
239
|
throw new WorkConflictError('This Work task already has an active run.');
|
|
80
240
|
}
|
|
81
|
-
const db = getDatabase();
|
|
82
241
|
const runId = uuidv4();
|
|
83
242
|
const messageId = uuidv4();
|
|
84
|
-
const selectedModel = model
|
|
243
|
+
const selectedModel = model === undefined ? task.model : cleanRequired(model);
|
|
85
244
|
const selectedProvider = normalizeProvider(provider || {
|
|
86
245
|
providerType: task.providerType,
|
|
87
246
|
providerId: task.providerId,
|
|
88
247
|
});
|
|
89
248
|
const now = Date.now();
|
|
90
|
-
const
|
|
91
|
-
|
|
92
|
-
|
|
249
|
+
const runRow = {
|
|
250
|
+
id: runId,
|
|
251
|
+
task_id: taskId,
|
|
252
|
+
model: selectedModel,
|
|
253
|
+
provider_type: selectedProvider.providerType,
|
|
254
|
+
provider_id: selectedProvider.providerId || null,
|
|
255
|
+
status: 'queued',
|
|
256
|
+
error: null,
|
|
257
|
+
created_at: now,
|
|
258
|
+
started_at: null,
|
|
259
|
+
finished_at: null,
|
|
260
|
+
};
|
|
261
|
+
const messageRow = {
|
|
262
|
+
id: messageId,
|
|
263
|
+
task_id: taskId,
|
|
264
|
+
run_id: runId,
|
|
265
|
+
role: 'user',
|
|
266
|
+
kind: 'message',
|
|
267
|
+
content: message,
|
|
268
|
+
metadata: null,
|
|
269
|
+
message_index: 0,
|
|
270
|
+
created_at: now,
|
|
271
|
+
};
|
|
272
|
+
try {
|
|
273
|
+
await assertHeld();
|
|
274
|
+
await getWorkPersistence().createRun({
|
|
275
|
+
taskId,
|
|
276
|
+
userId,
|
|
277
|
+
run: runRow,
|
|
278
|
+
message: messageRow,
|
|
279
|
+
limits: workAdmissionLimits,
|
|
280
|
+
}, transactionalWorkExecutionEnqueuer, assertHeld);
|
|
281
|
+
}
|
|
282
|
+
catch (error) {
|
|
283
|
+
const expectedTask = {
|
|
284
|
+
id: task.id,
|
|
285
|
+
user_id: task.userId,
|
|
286
|
+
title: task.title,
|
|
287
|
+
model: selectedModel,
|
|
288
|
+
provider_type: selectedProvider.providerType,
|
|
289
|
+
provider_id: selectedProvider.providerId || null,
|
|
290
|
+
status: 'preparing',
|
|
291
|
+
network_enabled: task.networkEnabled ? 1 : 0,
|
|
292
|
+
volume_name: task.volumeName,
|
|
293
|
+
container_name: task.containerName,
|
|
294
|
+
host_path: task.hostPath || null,
|
|
295
|
+
policy_id: task.policyId || null,
|
|
296
|
+
preview_url: task.previewUrl || null,
|
|
297
|
+
preview_status: task.previewStatus,
|
|
298
|
+
preview_upstream_host: task.previewUpstreamHost || null,
|
|
299
|
+
preview_upstream_port: task.previewUpstreamPort || null,
|
|
300
|
+
created_at: task.createdAt,
|
|
301
|
+
updated_at: task.updatedAt,
|
|
302
|
+
};
|
|
303
|
+
const outcome = await this.resolveExecutionPublication(expectedTask, runRow, messageRow, true);
|
|
304
|
+
if (outcome === 'committed') {
|
|
305
|
+
return this.requireTaskDetail(taskId, userId);
|
|
93
306
|
}
|
|
94
|
-
if (
|
|
95
|
-
throw new WorkConflictError('
|
|
307
|
+
if (outcome === 'ambiguous') {
|
|
308
|
+
throw new WorkConflictError('The Work run publication outcome is ambiguous. Reload before retrying.');
|
|
96
309
|
}
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
db.prepare(`INSERT INTO work_runs (
|
|
100
|
-
id, task_id, model, provider_type, provider_id, status, created_at
|
|
101
|
-
) VALUES (?, ?, ?, ?, ?, 'queued', ?)`).run(runId, taskId, selectedModel, selectedProvider.providerType, selectedProvider.providerId || null, now);
|
|
102
|
-
db.prepare(`INSERT INTO work_messages (
|
|
103
|
-
id, task_id, run_id, role, kind, content, message_index, created_at
|
|
104
|
-
) VALUES (?, ?, ?, 'user', 'message', ?, ?, ?)`).run(messageId, taskId, runId, message, nextIndex, now);
|
|
105
|
-
db.prepare(`UPDATE work_tasks
|
|
106
|
-
SET model = ?, provider_type = ?, provider_id = ?,
|
|
107
|
-
status = 'preparing', updated_at = ?
|
|
108
|
-
WHERE id = ?`).run(selectedModel, selectedProvider.providerType, selectedProvider.providerId || null, now, taskId);
|
|
109
|
-
});
|
|
110
|
-
transaction();
|
|
310
|
+
throw translatePersistenceError(error);
|
|
311
|
+
}
|
|
111
312
|
return this.requireTaskDetail(taskId, userId);
|
|
112
313
|
}
|
|
113
|
-
listTasks(userId) {
|
|
114
|
-
const rows =
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
return rows.map(row => this.summaryFromRow(row));
|
|
120
|
-
}
|
|
121
|
-
listTaskRecords(userId) {
|
|
122
|
-
const rows = getDatabase()
|
|
123
|
-
.prepare(`SELECT * FROM work_tasks
|
|
124
|
-
WHERE user_id = ?
|
|
125
|
-
ORDER BY created_at ASC`)
|
|
126
|
-
.all(userId);
|
|
314
|
+
async listTasks(userId) {
|
|
315
|
+
const rows = await getWorkPersistence().listTasks(userId);
|
|
316
|
+
return Promise.all(rows.map(row => this.summaryFromRow(row)));
|
|
317
|
+
}
|
|
318
|
+
async listTaskRecords(userId) {
|
|
319
|
+
const rows = await getWorkPersistence().listTaskRecords(userId);
|
|
127
320
|
return rows.map(mapTaskRecord);
|
|
128
321
|
}
|
|
129
|
-
listAllTaskRecords() {
|
|
130
|
-
return
|
|
131
|
-
.prepare('SELECT * FROM work_tasks ORDER BY created_at ASC')
|
|
132
|
-
.all().map(mapTaskRecord);
|
|
322
|
+
async listAllTaskRecords() {
|
|
323
|
+
return (await getWorkPersistence().listTaskRecords()).map(mapTaskRecord);
|
|
133
324
|
}
|
|
134
325
|
/** Every task with its owner's username, for the admin overview. */
|
|
135
|
-
listAllTasksWithOwner() {
|
|
136
|
-
const rows =
|
|
137
|
-
.prepare(`SELECT work_tasks.*, users.username AS owner_username
|
|
138
|
-
FROM work_tasks
|
|
139
|
-
JOIN users ON users.id = work_tasks.user_id
|
|
140
|
-
ORDER BY work_tasks.updated_at DESC`)
|
|
141
|
-
.all();
|
|
326
|
+
async listAllTasksWithOwner() {
|
|
327
|
+
const rows = await getWorkPersistence().listTasksWithOwners();
|
|
142
328
|
return rows.map(row => ({
|
|
143
329
|
record: mapTaskRecord(row),
|
|
144
330
|
ownerUsername: row.owner_username,
|
|
@@ -153,11 +339,11 @@ export class WorkTaskService {
|
|
|
153
339
|
releaseUserRetirement(userId) {
|
|
154
340
|
this.retiringUsers.delete(userId);
|
|
155
341
|
}
|
|
156
|
-
beginTaskRetirement(taskId, userId, allowRetiringUser = false) {
|
|
342
|
+
async beginTaskRetirement(taskId, userId, allowRetiringUser = false) {
|
|
157
343
|
if (!allowRetiringUser) {
|
|
158
|
-
this.assertUserIsActive(userId);
|
|
344
|
+
await this.assertUserIsActive(userId);
|
|
159
345
|
}
|
|
160
|
-
const task = this.requireTaskRecord(taskId, userId);
|
|
346
|
+
const task = await this.requireTaskRecord(taskId, userId);
|
|
161
347
|
this.assertNetworkPolicyStable(taskId);
|
|
162
348
|
if (this.retiringTasks.has(taskId)) {
|
|
163
349
|
throw new WorkConflictError('This Work task is already being deleted.');
|
|
@@ -171,24 +357,21 @@ export class WorkTaskService {
|
|
|
171
357
|
finalizeTaskRetirement(taskId) {
|
|
172
358
|
this.retiringTasks.delete(taskId);
|
|
173
359
|
}
|
|
174
|
-
requireMutableTaskRecord(taskId, userId) {
|
|
175
|
-
this.assertUserIsActive(userId);
|
|
176
|
-
const task = this.requireTaskRecord(taskId, userId);
|
|
360
|
+
async requireMutableTaskRecord(taskId, userId) {
|
|
361
|
+
await this.assertUserIsActive(userId);
|
|
362
|
+
const task = await this.requireTaskRecord(taskId, userId);
|
|
177
363
|
this.assertTaskIsActive(taskId);
|
|
178
364
|
this.assertNetworkPolicyStable(taskId);
|
|
179
365
|
return task;
|
|
180
366
|
}
|
|
181
|
-
assertTaskMutationAllowed(taskId, userId) {
|
|
182
|
-
this.requireMutableTaskRecord(taskId, userId);
|
|
367
|
+
async assertTaskMutationAllowed(taskId, userId) {
|
|
368
|
+
await this.requireMutableTaskRecord(taskId, userId);
|
|
183
369
|
}
|
|
184
|
-
assertUserIsActive(userId) {
|
|
370
|
+
async assertUserIsActive(userId) {
|
|
185
371
|
if (this.retiringUsers.has(userId)) {
|
|
186
372
|
throw new WorkConflictError('This user is being deleted.');
|
|
187
373
|
}
|
|
188
|
-
|
|
189
|
-
.prepare('SELECT role FROM users WHERE id = ?')
|
|
190
|
-
.get(userId);
|
|
191
|
-
if (current?.role !== 'admin') {
|
|
374
|
+
if (!(await getWorkPersistence().userCanUseWork(userId))) {
|
|
192
375
|
throw new WorkForbiddenError();
|
|
193
376
|
}
|
|
194
377
|
}
|
|
@@ -202,9 +385,9 @@ export class WorkTaskService {
|
|
|
202
385
|
throw new WorkConflictError('This Work task network policy is being changed.');
|
|
203
386
|
}
|
|
204
387
|
}
|
|
205
|
-
beginNetworkPolicyChange(taskId, userId) {
|
|
206
|
-
const task = this.requireMutableTaskRecord(taskId, userId);
|
|
207
|
-
if (this.getActiveRun(taskId)) {
|
|
388
|
+
async beginNetworkPolicyChange(taskId, userId) {
|
|
389
|
+
const task = await this.requireMutableTaskRecord(taskId, userId);
|
|
390
|
+
if (await this.getActiveRun(taskId)) {
|
|
208
391
|
throw new WorkConflictError('Network access cannot be changed during an active run.');
|
|
209
392
|
}
|
|
210
393
|
this.networkPolicyChanges.add(taskId);
|
|
@@ -213,47 +396,48 @@ export class WorkTaskService {
|
|
|
213
396
|
releaseNetworkPolicyChange(taskId) {
|
|
214
397
|
this.networkPolicyChanges.delete(taskId);
|
|
215
398
|
}
|
|
216
|
-
beginPreview(taskId, userId, allowActiveRun = false) {
|
|
217
|
-
|
|
218
|
-
|
|
219
|
-
|
|
220
|
-
|
|
221
|
-
|
|
222
|
-
|
|
223
|
-
|
|
224
|
-
|
|
225
|
-
|
|
226
|
-
|
|
227
|
-
|
|
228
|
-
|
|
399
|
+
async beginPreview(taskId, userId, allowActiveRun = false) {
|
|
400
|
+
await this.requireMutableTaskRecord(taskId, userId);
|
|
401
|
+
try {
|
|
402
|
+
await getWorkPersistence().beginPreview({
|
|
403
|
+
taskId,
|
|
404
|
+
userId,
|
|
405
|
+
allowActiveRun,
|
|
406
|
+
limits: workAdmissionLimits,
|
|
407
|
+
updatedAt: Date.now(),
|
|
408
|
+
});
|
|
409
|
+
}
|
|
410
|
+
catch (error) {
|
|
411
|
+
throw translatePersistenceError(error, true);
|
|
412
|
+
}
|
|
229
413
|
}
|
|
230
|
-
getTaskDetail(taskId, userId) {
|
|
231
|
-
const row =
|
|
414
|
+
async getTaskDetail(taskId, userId) {
|
|
415
|
+
const row = await getWorkPersistence().findTask(taskId, userId);
|
|
232
416
|
return row ? this.detailFromRow(row) : undefined;
|
|
233
417
|
}
|
|
234
|
-
requireTaskDetail(taskId, userId) {
|
|
235
|
-
const task = this.getTaskDetail(taskId, userId);
|
|
418
|
+
async requireTaskDetail(taskId, userId) {
|
|
419
|
+
const task = await this.getTaskDetail(taskId, userId);
|
|
236
420
|
if (!task) {
|
|
237
421
|
throw new WorkNotFoundError();
|
|
238
422
|
}
|
|
239
423
|
return task;
|
|
240
424
|
}
|
|
241
|
-
getTaskRecord(taskId, userId) {
|
|
242
|
-
const row =
|
|
425
|
+
async getTaskRecord(taskId, userId) {
|
|
426
|
+
const row = await getWorkPersistence().findTask(taskId, userId);
|
|
243
427
|
return row ? mapTaskRecord(row) : undefined;
|
|
244
428
|
}
|
|
245
|
-
requireTaskRecord(taskId, userId) {
|
|
246
|
-
const task = this.getTaskRecord(taskId, userId);
|
|
429
|
+
async requireTaskRecord(taskId, userId) {
|
|
430
|
+
const task = await this.getTaskRecord(taskId, userId);
|
|
247
431
|
if (!task) {
|
|
248
432
|
throw new WorkNotFoundError();
|
|
249
433
|
}
|
|
250
434
|
return task;
|
|
251
435
|
}
|
|
252
|
-
updateTask(taskId, userId, updates) {
|
|
253
|
-
const task = this.requireMutableTaskRecord(taskId, userId);
|
|
436
|
+
async updateTask(taskId, userId, updates) {
|
|
437
|
+
const task = await this.requireMutableTaskRecord(taskId, userId);
|
|
254
438
|
if (updates.networkEnabled !== undefined &&
|
|
255
439
|
updates.networkEnabled !== task.networkEnabled &&
|
|
256
|
-
this.getActiveRun(taskId)) {
|
|
440
|
+
(await this.getActiveRun(taskId))) {
|
|
257
441
|
throw new WorkConflictError('Network access cannot be changed during an active run.');
|
|
258
442
|
}
|
|
259
443
|
const title = updates.title === undefined ? task.title : cleanTitle(updates.title);
|
|
@@ -267,23 +451,32 @@ export class WorkTaskService {
|
|
|
267
451
|
: updates.providerId,
|
|
268
452
|
});
|
|
269
453
|
const networkEnabled = updates.networkEnabled ?? task.networkEnabled;
|
|
270
|
-
|
|
271
|
-
.
|
|
272
|
-
|
|
273
|
-
|
|
274
|
-
|
|
275
|
-
|
|
454
|
+
try {
|
|
455
|
+
await getWorkPersistence().updateTask({
|
|
456
|
+
taskId,
|
|
457
|
+
userId,
|
|
458
|
+
title,
|
|
459
|
+
model,
|
|
460
|
+
providerType: provider.providerType,
|
|
461
|
+
providerId: provider.providerId || null,
|
|
462
|
+
networkEnabled,
|
|
463
|
+
updatedAt: Date.now(),
|
|
464
|
+
});
|
|
465
|
+
}
|
|
466
|
+
catch (error) {
|
|
467
|
+
throw translatePersistenceError(error);
|
|
468
|
+
}
|
|
276
469
|
return this.requireTaskDetail(taskId, userId);
|
|
277
470
|
}
|
|
278
|
-
commitNetworkChange(taskId, userId, updates) {
|
|
279
|
-
this.assertUserIsActive(userId);
|
|
280
|
-
const task = this.requireTaskRecord(taskId, userId);
|
|
471
|
+
async commitNetworkChange(taskId, userId, updates) {
|
|
472
|
+
await this.assertUserIsActive(userId);
|
|
473
|
+
const task = await this.requireTaskRecord(taskId, userId);
|
|
281
474
|
this.assertTaskIsActive(taskId);
|
|
282
475
|
if (!this.networkPolicyChanges.has(taskId)) {
|
|
283
476
|
throw new WorkConflictError('This Work task has no active network policy change.');
|
|
284
477
|
}
|
|
285
478
|
if (updates.networkEnabled !== task.networkEnabled &&
|
|
286
|
-
this.getActiveRun(taskId)) {
|
|
479
|
+
(await this.getActiveRun(taskId))) {
|
|
287
480
|
throw new WorkConflictError('Network access cannot be changed during an active run.');
|
|
288
481
|
}
|
|
289
482
|
const title = updates.title === undefined ? task.title : cleanTitle(updates.title);
|
|
@@ -296,86 +489,45 @@ export class WorkTaskService {
|
|
|
296
489
|
? task.providerId
|
|
297
490
|
: updates.providerId,
|
|
298
491
|
});
|
|
299
|
-
|
|
300
|
-
|
|
301
|
-
|
|
302
|
-
|
|
303
|
-
|
|
304
|
-
|
|
305
|
-
|
|
306
|
-
|
|
307
|
-
|
|
308
|
-
|
|
309
|
-
|
|
310
|
-
|
|
311
|
-
|
|
312
|
-
|
|
313
|
-
|
|
314
|
-
|
|
315
|
-
}
|
|
316
|
-
|
|
317
|
-
const
|
|
318
|
-
|
|
319
|
-
COUNT(*) AS total,
|
|
320
|
-
COALESCE(SUM(CASE WHEN user_id = ? THEN 1 ELSE 0 END), 0) AS per_user
|
|
321
|
-
FROM work_tasks`)
|
|
322
|
-
.get(userId);
|
|
323
|
-
if (counts.per_user >= workAdmissionLimits.maxTasksPerUser) {
|
|
324
|
-
throw new WorkAdmissionError(`This administrator already has the maximum of ${workAdmissionLimits.maxTasksPerUser} Work tasks.`, 'WORK_USER_TASK_LIMIT');
|
|
325
|
-
}
|
|
326
|
-
if (counts.total >= workAdmissionLimits.maxTasksGlobal) {
|
|
327
|
-
throw new WorkAdmissionError(`This Libre WebUI instance already has the maximum of ${workAdmissionLimits.maxTasksGlobal} Work tasks.`, 'WORK_GLOBAL_TASK_LIMIT');
|
|
328
|
-
}
|
|
329
|
-
}
|
|
330
|
-
assertRuntimeAdmission(userId, taskId) {
|
|
331
|
-
const activeRunPlaceholders = ACTIVE_RUN_STATUSES.map(() => '?').join(', ');
|
|
332
|
-
const activePreviewPlaceholders = ACTIVE_PREVIEW_STATUSES.map(() => '?').join(', ');
|
|
333
|
-
const counts = getDatabase()
|
|
334
|
-
.prepare(`WITH active_tasks AS (
|
|
335
|
-
SELECT DISTINCT work_tasks.id AS task_id, work_tasks.user_id
|
|
336
|
-
FROM work_tasks
|
|
337
|
-
JOIN work_runs ON work_runs.task_id = work_tasks.id
|
|
338
|
-
WHERE work_runs.status IN (${activeRunPlaceholders})
|
|
339
|
-
UNION
|
|
340
|
-
SELECT id AS task_id, user_id
|
|
341
|
-
FROM work_tasks
|
|
342
|
-
WHERE preview_status IN (${activePreviewPlaceholders})
|
|
343
|
-
)
|
|
344
|
-
SELECT
|
|
345
|
-
COUNT(*) AS total,
|
|
346
|
-
COALESCE(SUM(CASE WHEN user_id = ? THEN 1 ELSE 0 END), 0) AS per_user
|
|
347
|
-
FROM active_tasks
|
|
348
|
-
WHERE ? IS NULL OR task_id != ?`)
|
|
349
|
-
.get(...ACTIVE_RUN_STATUSES, ...ACTIVE_PREVIEW_STATUSES, userId, taskId || null, taskId || null);
|
|
350
|
-
if (counts.per_user >= workAdmissionLimits.maxActiveRuntimesPerUser) {
|
|
351
|
-
throw new WorkAdmissionError(`This administrator already has ${workAdmissionLimits.maxActiveRuntimesPerUser} active Work runtime(s). Wait for a run or preview to stop.`, 'WORK_USER_RUNTIME_LIMIT');
|
|
352
|
-
}
|
|
353
|
-
if (counts.total >= workAdmissionLimits.maxActiveRuntimesGlobal) {
|
|
354
|
-
throw new WorkAdmissionError(`This Libre WebUI instance already has ${workAdmissionLimits.maxActiveRuntimesGlobal} active Work runtime(s). Wait for a run or preview to stop.`, 'WORK_GLOBAL_RUNTIME_LIMIT');
|
|
355
|
-
}
|
|
356
|
-
}
|
|
357
|
-
deleteTask(taskId, userId) {
|
|
358
|
-
const task = this.requireTaskRecord(taskId, userId);
|
|
359
|
-
const result = getDatabase()
|
|
360
|
-
.prepare('DELETE FROM work_tasks WHERE id = ? AND user_id = ?')
|
|
361
|
-
.run(taskId, userId);
|
|
362
|
-
if (!result.changes) {
|
|
492
|
+
try {
|
|
493
|
+
await getWorkPersistence().updateTask({
|
|
494
|
+
taskId,
|
|
495
|
+
userId,
|
|
496
|
+
title,
|
|
497
|
+
model,
|
|
498
|
+
providerType: provider.providerType,
|
|
499
|
+
providerId: provider.providerId || null,
|
|
500
|
+
networkEnabled: updates.networkEnabled,
|
|
501
|
+
updatedAt: Date.now(),
|
|
502
|
+
requireNetworkChangeLease: true,
|
|
503
|
+
});
|
|
504
|
+
}
|
|
505
|
+
catch (error) {
|
|
506
|
+
throw translatePersistenceError(error);
|
|
507
|
+
}
|
|
508
|
+
}
|
|
509
|
+
async deleteTask(taskId, userId) {
|
|
510
|
+
const task = await this.requireTaskRecord(taskId, userId);
|
|
511
|
+
if (!(await getWorkPersistence().deleteTask(taskId, userId))) {
|
|
363
512
|
throw new WorkNotFoundError();
|
|
364
513
|
}
|
|
365
514
|
return task;
|
|
366
515
|
}
|
|
367
|
-
addMessage(taskId, runId, role, kind, content, metadata) {
|
|
368
|
-
const db = getDatabase();
|
|
516
|
+
async addMessage(taskId, runId, role, kind, content, metadata) {
|
|
369
517
|
const id = uuidv4();
|
|
370
518
|
const createdAt = Date.now();
|
|
371
|
-
const messageIndex = this.nextMessageIndex(taskId);
|
|
372
519
|
const boundedContent = boundUtf8(content, WORK_MESSAGE_MAX_BYTES);
|
|
373
520
|
const serializedMetadata = serializeMetadata(metadata);
|
|
374
|
-
|
|
375
|
-
|
|
376
|
-
|
|
377
|
-
|
|
378
|
-
|
|
521
|
+
const messageIndex = await getWorkPersistence().insertMessage({
|
|
522
|
+
id,
|
|
523
|
+
task_id: taskId,
|
|
524
|
+
run_id: runId || null,
|
|
525
|
+
role,
|
|
526
|
+
kind,
|
|
527
|
+
content: boundedContent,
|
|
528
|
+
metadata: serializedMetadata || null,
|
|
529
|
+
created_at: createdAt,
|
|
530
|
+
});
|
|
379
531
|
return {
|
|
380
532
|
id,
|
|
381
533
|
taskId,
|
|
@@ -388,28 +540,20 @@ export class WorkTaskService {
|
|
|
388
540
|
createdAt,
|
|
389
541
|
};
|
|
390
542
|
}
|
|
391
|
-
getMessages(taskId) {
|
|
392
|
-
const rows =
|
|
393
|
-
|
|
394
|
-
|
|
395
|
-
|
|
396
|
-
WHERE task_id = ? AND kind <> 'provider_state'
|
|
397
|
-
ORDER BY message_index ASC`)
|
|
398
|
-
.all(taskId);
|
|
543
|
+
async getMessages(taskId) {
|
|
544
|
+
const rows = await getWorkPersistence().listMessages({
|
|
545
|
+
taskId,
|
|
546
|
+
mode: 'all',
|
|
547
|
+
});
|
|
399
548
|
return rows.map(mapMessage);
|
|
400
549
|
}
|
|
401
|
-
getRecentConversationMessages(taskId, limit = 30) {
|
|
550
|
+
async getRecentConversationMessages(taskId, limit = 30) {
|
|
402
551
|
const boundedLimit = Math.min(30, Math.max(1, Math.trunc(limit)));
|
|
403
|
-
const rows =
|
|
404
|
-
|
|
405
|
-
|
|
406
|
-
|
|
407
|
-
|
|
408
|
-
AND kind = 'message'
|
|
409
|
-
AND role IN ('user', 'assistant')
|
|
410
|
-
ORDER BY message_index DESC
|
|
411
|
-
LIMIT ?`)
|
|
412
|
-
.all(taskId, boundedLimit);
|
|
552
|
+
const rows = await getWorkPersistence().listMessages({
|
|
553
|
+
taskId,
|
|
554
|
+
mode: 'conversation',
|
|
555
|
+
limit: boundedLimit,
|
|
556
|
+
});
|
|
413
557
|
const selected = [];
|
|
414
558
|
let selectedBytes = 0;
|
|
415
559
|
for (const row of rows) {
|
|
@@ -425,22 +569,14 @@ export class WorkTaskService {
|
|
|
425
569
|
}
|
|
426
570
|
return selected.reverse().map(mapMessage);
|
|
427
571
|
}
|
|
428
|
-
getRecentModelContextMessages(taskId, limit = 30) {
|
|
572
|
+
async getRecentModelContextMessages(taskId, limit = 30) {
|
|
429
573
|
const boundedLimit = Math.min(30, Math.max(1, Math.trunc(limit)));
|
|
430
574
|
const rowLimit = boundedLimit * 6;
|
|
431
|
-
const rows =
|
|
432
|
-
|
|
433
|
-
|
|
434
|
-
|
|
435
|
-
|
|
436
|
-
AND (
|
|
437
|
-
(kind = 'message' AND role IN ('user', 'assistant'))
|
|
438
|
-
OR (kind = 'provider_state' AND role = 'assistant')
|
|
439
|
-
OR (kind = 'tool_result' AND role = 'tool')
|
|
440
|
-
)
|
|
441
|
-
ORDER BY message_index DESC
|
|
442
|
-
LIMIT ?`)
|
|
443
|
-
.all(taskId, rowLimit);
|
|
575
|
+
const rows = await getWorkPersistence().listMessages({
|
|
576
|
+
taskId,
|
|
577
|
+
mode: 'model-context',
|
|
578
|
+
limit: rowLimit,
|
|
579
|
+
});
|
|
444
580
|
const selected = [];
|
|
445
581
|
let selectedBytes = 0;
|
|
446
582
|
for (const row of rows) {
|
|
@@ -461,26 +597,14 @@ export class WorkTaskService {
|
|
|
461
597
|
}
|
|
462
598
|
return chronological.map(mapMessage);
|
|
463
599
|
}
|
|
464
|
-
getMessagePage(taskId, before, limit = WORK_MESSAGE_PAGE_SIZE) {
|
|
600
|
+
async getMessagePage(taskId, before, limit = WORK_MESSAGE_PAGE_SIZE) {
|
|
465
601
|
const pageSize = Math.min(WORK_MESSAGE_PAGE_SIZE, Math.max(1, Math.trunc(limit)));
|
|
466
|
-
const rows = (
|
|
467
|
-
|
|
468
|
-
|
|
469
|
-
|
|
470
|
-
|
|
471
|
-
|
|
472
|
-
ORDER BY message_index DESC
|
|
473
|
-
LIMIT ?`)
|
|
474
|
-
.all(taskId, pageSize + 1)
|
|
475
|
-
: getDatabase()
|
|
476
|
-
.prepare(`SELECT id, task_id, run_id, message_index, role, kind, content,
|
|
477
|
-
metadata, created_at
|
|
478
|
-
FROM work_messages
|
|
479
|
-
WHERE task_id = ? AND message_index < ?
|
|
480
|
-
AND kind <> 'provider_state'
|
|
481
|
-
ORDER BY message_index DESC
|
|
482
|
-
LIMIT ?`)
|
|
483
|
-
.all(taskId, before, pageSize + 1));
|
|
602
|
+
const rows = await getWorkPersistence().listMessages({
|
|
603
|
+
taskId,
|
|
604
|
+
mode: 'page',
|
|
605
|
+
before,
|
|
606
|
+
limit: pageSize + 1,
|
|
607
|
+
});
|
|
484
608
|
const selectedRows = [];
|
|
485
609
|
let selectedBytes = 0;
|
|
486
610
|
let examinedRows = 0;
|
|
@@ -508,57 +632,40 @@ export class WorkTaskService {
|
|
|
508
632
|
hasMore,
|
|
509
633
|
};
|
|
510
634
|
}
|
|
511
|
-
getRun(runId) {
|
|
512
|
-
const row =
|
|
513
|
-
.prepare('SELECT * FROM work_runs WHERE id = ?')
|
|
514
|
-
.get(runId);
|
|
635
|
+
async getRun(runId) {
|
|
636
|
+
const row = await getWorkPersistence().findRun(runId);
|
|
515
637
|
return row ? mapRun(row) : undefined;
|
|
516
638
|
}
|
|
517
|
-
getActiveRun(taskId) {
|
|
518
|
-
const
|
|
519
|
-
const row = getDatabase()
|
|
520
|
-
.prepare(`SELECT * FROM work_runs
|
|
521
|
-
WHERE task_id = ? AND status IN (${placeholders})
|
|
522
|
-
ORDER BY created_at DESC LIMIT 1`)
|
|
523
|
-
.get(taskId, ...ACTIVE_RUN_STATUSES);
|
|
639
|
+
async getActiveRun(taskId) {
|
|
640
|
+
const row = await getWorkPersistence().findActiveRun(taskId);
|
|
524
641
|
return row ? mapRun(row) : undefined;
|
|
525
642
|
}
|
|
526
|
-
updateRun(runId, status, options = {}) {
|
|
643
|
+
async updateRun(runId, status, options = {}) {
|
|
527
644
|
const now = Date.now();
|
|
528
|
-
|
|
529
|
-
|
|
530
|
-
|
|
531
|
-
|
|
532
|
-
|
|
533
|
-
|
|
534
|
-
|
|
535
|
-
|
|
536
|
-
const run = this.getRun(runId);
|
|
645
|
+
await getWorkPersistence().updateRun({
|
|
646
|
+
runId,
|
|
647
|
+
status,
|
|
648
|
+
error: options.error ? replaceWorkTextNul(options.error) : null,
|
|
649
|
+
started: Boolean(options.started),
|
|
650
|
+
finished: Boolean(options.finished),
|
|
651
|
+
now,
|
|
652
|
+
});
|
|
653
|
+
const run = await this.getRun(runId);
|
|
537
654
|
if (!run) {
|
|
538
655
|
throw new WorkNotFoundError('Work run not found.');
|
|
539
656
|
}
|
|
540
657
|
return run;
|
|
541
658
|
}
|
|
542
|
-
updateTaskStatus(taskId, status) {
|
|
543
|
-
|
|
544
|
-
|
|
545
|
-
|
|
546
|
-
|
|
547
|
-
|
|
548
|
-
|
|
549
|
-
|
|
550
|
-
getDatabase()
|
|
551
|
-
.prepare(`UPDATE work_tasks
|
|
552
|
-
SET preview_status = ?, preview_url = ?, updated_at = ?
|
|
553
|
-
WHERE id = ?`)
|
|
554
|
-
.run(status, previewUrl || null, Date.now(), taskId);
|
|
555
|
-
}
|
|
556
|
-
recoverOnStartup() {
|
|
557
|
-
let db;
|
|
558
|
-
let taskRows;
|
|
659
|
+
async updateTaskStatus(taskId, status) {
|
|
660
|
+
await getWorkPersistence().updateTaskStatus(taskId, status, Date.now());
|
|
661
|
+
}
|
|
662
|
+
async updatePreview(taskId, status, previewUrl, upstream) {
|
|
663
|
+
await getWorkPersistence().updatePreview(taskId, status, previewUrl || null, upstream?.host ?? null, upstream?.port ?? null, Date.now());
|
|
664
|
+
}
|
|
665
|
+
async recoverOnStartup() {
|
|
666
|
+
let recovered;
|
|
559
667
|
try {
|
|
560
|
-
|
|
561
|
-
taskRows = db.prepare('SELECT * FROM work_tasks').all();
|
|
668
|
+
recovered = await getWorkPersistence().recoverOnStartup(Date.now());
|
|
562
669
|
}
|
|
563
670
|
catch (error) {
|
|
564
671
|
logger.error('Failed to read Work tasks for startup recovery:', error);
|
|
@@ -567,69 +674,28 @@ export class WorkTaskService {
|
|
|
567
674
|
// startup instead of allowing Work to run without supervision.
|
|
568
675
|
throw error;
|
|
569
676
|
}
|
|
570
|
-
|
|
571
|
-
let activePreviews = 0;
|
|
572
|
-
try {
|
|
573
|
-
interruptedRuns = db
|
|
574
|
-
.prepare(`SELECT COUNT(*) AS count FROM work_runs
|
|
575
|
-
WHERE status IN ('queued', 'preparing', 'running')`)
|
|
576
|
-
.get().count;
|
|
577
|
-
activePreviews = db
|
|
578
|
-
.prepare(`SELECT COUNT(*) AS count FROM work_tasks
|
|
579
|
-
WHERE preview_status IN ('starting', 'running')`)
|
|
580
|
-
.get().count;
|
|
581
|
-
}
|
|
582
|
-
catch (error) {
|
|
583
|
-
logger.error('Failed to count interrupted Work state:', error);
|
|
584
|
-
}
|
|
585
|
-
try {
|
|
586
|
-
const now = Date.now();
|
|
587
|
-
const transaction = db.transaction(() => {
|
|
588
|
-
db.prepare(`UPDATE work_tasks
|
|
589
|
-
SET status = 'failed', updated_at = ?
|
|
590
|
-
WHERE status IN ('preparing', 'running')
|
|
591
|
-
OR id IN (
|
|
592
|
-
SELECT task_id FROM work_runs
|
|
593
|
-
WHERE status IN ('queued', 'preparing', 'running')
|
|
594
|
-
)`).run(now);
|
|
595
|
-
db.prepare(`UPDATE work_tasks
|
|
596
|
-
SET preview_status = 'stopped', preview_url = NULL, updated_at = ?
|
|
597
|
-
WHERE preview_status != 'stopped' OR preview_url IS NOT NULL`).run(now);
|
|
598
|
-
db.prepare(`UPDATE work_runs
|
|
599
|
-
SET status = 'failed',
|
|
600
|
-
error = 'Backend restarted while this run was active.',
|
|
601
|
-
finished_at = ?
|
|
602
|
-
WHERE status IN ('queued', 'preparing', 'running')`).run(now);
|
|
603
|
-
});
|
|
604
|
-
transaction();
|
|
605
|
-
}
|
|
606
|
-
catch (error) {
|
|
677
|
+
if (recovered.persistenceError) {
|
|
607
678
|
// Container teardown is the security-critical half of recovery. Return
|
|
608
679
|
// the rows already read even if SQLite cannot persist terminal states,
|
|
609
680
|
// so startup can still stop every known command and preview process.
|
|
610
|
-
logger.error('Failed to persist recovered Work state on startup:',
|
|
681
|
+
logger.error('Failed to persist recovered Work state on startup:', recovered.persistenceError);
|
|
611
682
|
}
|
|
612
683
|
return {
|
|
613
|
-
tasks:
|
|
614
|
-
interruptedRuns,
|
|
615
|
-
activePreviews,
|
|
684
|
+
tasks: recovered.tasks.map(mapTaskRecord),
|
|
685
|
+
interruptedRuns: recovered.interruptedRuns,
|
|
686
|
+
activePreviews: recovered.activePreviews,
|
|
616
687
|
};
|
|
617
688
|
}
|
|
618
|
-
|
|
619
|
-
|
|
620
|
-
.prepare('SELECT * FROM work_tasks WHERE id = ? AND user_id = ?')
|
|
621
|
-
.get(taskId, userId);
|
|
622
|
-
}
|
|
623
|
-
detailFromRow(row) {
|
|
624
|
-
const messagePage = this.getMessagePage(row.id);
|
|
689
|
+
async detailFromRow(row) {
|
|
690
|
+
const messagePage = await this.getMessagePage(row.id);
|
|
625
691
|
return {
|
|
626
|
-
...this.summaryFromRow(row),
|
|
692
|
+
...(await this.summaryFromRow(row)),
|
|
627
693
|
messages: messagePage.messages,
|
|
628
694
|
messageCursor: messagePage.cursor,
|
|
629
695
|
hasMoreMessages: messagePage.hasMore,
|
|
630
696
|
};
|
|
631
697
|
}
|
|
632
|
-
summaryFromRow(row) {
|
|
698
|
+
async summaryFromRow(row) {
|
|
633
699
|
return {
|
|
634
700
|
id: row.id,
|
|
635
701
|
title: row.title,
|
|
@@ -640,7 +706,7 @@ export class WorkTaskService {
|
|
|
640
706
|
networkEnabled: Boolean(row.network_enabled),
|
|
641
707
|
createdAt: row.created_at,
|
|
642
708
|
updatedAt: row.updated_at,
|
|
643
|
-
activeRun: this.getActiveRun(row.id),
|
|
709
|
+
activeRun: await this.getActiveRun(row.id),
|
|
644
710
|
previewUrl: row.preview_url || undefined,
|
|
645
711
|
previewStatus: row.preview_status,
|
|
646
712
|
workspacePath: '/workspace',
|
|
@@ -648,18 +714,6 @@ export class WorkTaskService {
|
|
|
648
714
|
policyId: row.policy_id || undefined,
|
|
649
715
|
};
|
|
650
716
|
}
|
|
651
|
-
nextMessageIndex(taskId) {
|
|
652
|
-
const row = getDatabase()
|
|
653
|
-
.prepare(`SELECT COALESCE(MAX(message_index), -1) + 1 AS next_index
|
|
654
|
-
FROM work_messages WHERE task_id = ?`)
|
|
655
|
-
.get(taskId);
|
|
656
|
-
return row.next_index;
|
|
657
|
-
}
|
|
658
|
-
touchTask(taskId) {
|
|
659
|
-
getDatabase()
|
|
660
|
-
.prepare('UPDATE work_tasks SET updated_at = ? WHERE id = ?')
|
|
661
|
-
.run(Date.now(), taskId);
|
|
662
|
-
}
|
|
663
717
|
}
|
|
664
718
|
export class WorkNotFoundError extends Error {
|
|
665
719
|
constructor(message = 'Work task not found.') {
|
|
@@ -690,6 +744,39 @@ export class WorkAdmissionError extends Error {
|
|
|
690
744
|
this.code = code;
|
|
691
745
|
}
|
|
692
746
|
}
|
|
747
|
+
export class WorkInputError extends Error {
|
|
748
|
+
constructor(message) {
|
|
749
|
+
super(message);
|
|
750
|
+
this.status = 400;
|
|
751
|
+
this.name = 'WorkInputError';
|
|
752
|
+
}
|
|
753
|
+
}
|
|
754
|
+
const translatePersistenceError = (error, previewContext = false) => {
|
|
755
|
+
if (!(error instanceof WorkPersistenceError))
|
|
756
|
+
return error;
|
|
757
|
+
switch (error.code) {
|
|
758
|
+
case 'WORK_USER_FORBIDDEN':
|
|
759
|
+
return new WorkForbiddenError();
|
|
760
|
+
case 'WORK_USER_TASK_LIMIT':
|
|
761
|
+
return new WorkAdmissionError(`This administrator already has the maximum of ${workAdmissionLimits.maxTasksPerUser} Work tasks.`, error.code);
|
|
762
|
+
case 'WORK_GLOBAL_TASK_LIMIT':
|
|
763
|
+
return new WorkAdmissionError(`This Libre WebUI instance already has the maximum of ${workAdmissionLimits.maxTasksGlobal} Work tasks.`, error.code);
|
|
764
|
+
case 'WORK_USER_RUNTIME_LIMIT':
|
|
765
|
+
return new WorkAdmissionError(`This administrator already has ${workAdmissionLimits.maxActiveRuntimesPerUser} active Work runtime(s). Wait for a run or preview to stop.`, error.code);
|
|
766
|
+
case 'WORK_GLOBAL_RUNTIME_LIMIT':
|
|
767
|
+
return new WorkAdmissionError(`This Libre WebUI instance already has ${workAdmissionLimits.maxActiveRuntimesGlobal} active Work runtime(s). Wait for a run or preview to stop.`, error.code);
|
|
768
|
+
case 'WORK_ACTIVE_RUN':
|
|
769
|
+
return new WorkConflictError(previewContext
|
|
770
|
+
? 'Wait for the active Work run to finish before starting a preview.'
|
|
771
|
+
: 'This Work task already has an active run.');
|
|
772
|
+
case 'WORK_PREVIEW_ACTIVE':
|
|
773
|
+
return new WorkConflictError('Stop this Work task preview before starting another run.');
|
|
774
|
+
case 'WORK_TASK_NOT_FOUND':
|
|
775
|
+
return new WorkNotFoundError();
|
|
776
|
+
default:
|
|
777
|
+
return error;
|
|
778
|
+
}
|
|
779
|
+
};
|
|
693
780
|
const mapTaskRecord = (row) => ({
|
|
694
781
|
id: row.id,
|
|
695
782
|
userId: row.user_id,
|
|
@@ -705,6 +792,8 @@ const mapTaskRecord = (row) => ({
|
|
|
705
792
|
policyId: row.policy_id || undefined,
|
|
706
793
|
previewUrl: row.preview_url || undefined,
|
|
707
794
|
previewStatus: row.preview_status,
|
|
795
|
+
previewUpstreamHost: row.preview_upstream_host || undefined,
|
|
796
|
+
previewUpstreamPort: row.preview_upstream_port || undefined,
|
|
708
797
|
createdAt: row.created_at,
|
|
709
798
|
updatedAt: row.updated_at,
|
|
710
799
|
});
|
|
@@ -774,9 +863,15 @@ const deriveTitle = (message) => {
|
|
|
774
863
|
const firstLine = message.trim().split(/\r?\n/, 1)[0] || 'New Work';
|
|
775
864
|
return cleanTitle(firstLine.slice(0, 80));
|
|
776
865
|
};
|
|
777
|
-
const
|
|
866
|
+
const rejectWorkTextNul = (value, field) => {
|
|
867
|
+
if (value.includes('\u0000')) {
|
|
868
|
+
throw new WorkInputError(`${field} cannot contain U+0000.`);
|
|
869
|
+
}
|
|
870
|
+
return value;
|
|
871
|
+
};
|
|
872
|
+
const cleanTitle = (value) => replaceWorkTextNul(value).trim().slice(0, 120) || 'New Work';
|
|
778
873
|
const cleanRequired = (value) => {
|
|
779
|
-
const cleaned = value.trim();
|
|
874
|
+
const cleaned = rejectWorkTextNul(value, 'Work model').trim();
|
|
780
875
|
if (!cleaned) {
|
|
781
876
|
throw new Error('Model cannot be empty.');
|
|
782
877
|
}
|