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
|
@@ -24,15 +24,82 @@ import { createLogger } from '../utils/logger.js';
|
|
|
24
24
|
import { normalizeChatProviderSelection } from '../utils/chatProviderSelection.js';
|
|
25
25
|
import { sanitizeChatMessageProviderState, selectChatMessagesForContext, } from '../utils/chatContext.js';
|
|
26
26
|
import { MAX_SESSION_FOLDER_NAME_LENGTH, ResourcePolicyError, } from '../utils/resourceLimits.js';
|
|
27
|
+
import { getCoordinator } from '../platform/coordination/service.js';
|
|
28
|
+
import { transactionalChatGenerationEnqueuer } from '../platform/jobs/chatGenerationEnqueuer.js';
|
|
29
|
+
import { CHAT_GENERATE_JOB_TYPE, chatEventStreamId, chatGenerationIdempotencyScope, } from '../platform/jobs/domainJobContracts.js';
|
|
30
|
+
import { getDurableJobRuntime } from '../platform/jobs/durableJobRuntime.js';
|
|
27
31
|
const logger = createLogger('chat-service');
|
|
32
|
+
export class ChatCancellationCompensationError extends Error {
|
|
33
|
+
constructor(cancellationError, compensationError) {
|
|
34
|
+
super('Chat cancellation compensation failed');
|
|
35
|
+
this.cancellationError = cancellationError;
|
|
36
|
+
this.compensationError = compensationError;
|
|
37
|
+
this.name = 'ChatCancellationCompensationError';
|
|
38
|
+
}
|
|
39
|
+
}
|
|
28
40
|
class ChatService {
|
|
29
41
|
constructor() {
|
|
30
42
|
this.sessions = new Map();
|
|
31
|
-
this.loadSessions();
|
|
32
43
|
}
|
|
33
|
-
|
|
44
|
+
async withSessionWriteLease(sessionId, userId, operation) {
|
|
45
|
+
const coordinator = getCoordinator();
|
|
46
|
+
const deadline = Date.now() + 10000;
|
|
47
|
+
let lease = await coordinator.acquireLease(`chat-write:${userId}:${sessionId}`, 30000);
|
|
48
|
+
while (!lease && Date.now() < deadline) {
|
|
49
|
+
await new Promise(resolve => setTimeout(resolve, 20));
|
|
50
|
+
lease = await coordinator.acquireLease(`chat-write:${userId}:${sessionId}`, 30000);
|
|
51
|
+
}
|
|
52
|
+
if (!lease)
|
|
53
|
+
throw new Error('The chat is being updated; retry the request');
|
|
54
|
+
let closed = false;
|
|
55
|
+
let leaseLost = false;
|
|
56
|
+
let renewalTimer;
|
|
57
|
+
const leaseLostError = () => new Error('The shared chat write lease was lost');
|
|
58
|
+
const markLost = () => {
|
|
59
|
+
leaseLost = true;
|
|
60
|
+
};
|
|
61
|
+
const assertHeld = async () => {
|
|
62
|
+
if (closed || leaseLost)
|
|
63
|
+
throw leaseLostError();
|
|
64
|
+
try {
|
|
65
|
+
if (await lease.extend(30000))
|
|
66
|
+
return;
|
|
67
|
+
}
|
|
68
|
+
catch {
|
|
69
|
+
// Report expiry and coordination outages through one safe fence.
|
|
70
|
+
}
|
|
71
|
+
markLost();
|
|
72
|
+
throw leaseLostError();
|
|
73
|
+
};
|
|
74
|
+
const renew = async () => {
|
|
75
|
+
if (closed)
|
|
76
|
+
return;
|
|
77
|
+
try {
|
|
78
|
+
if (!(await lease.extend(30000)))
|
|
79
|
+
markLost();
|
|
80
|
+
}
|
|
81
|
+
catch {
|
|
82
|
+
markLost();
|
|
83
|
+
}
|
|
84
|
+
if (!closed && !leaseLost)
|
|
85
|
+
renewalTimer = setTimeout(renew, 10000);
|
|
86
|
+
};
|
|
87
|
+
renewalTimer = setTimeout(renew, 10000);
|
|
34
88
|
try {
|
|
35
|
-
|
|
89
|
+
await assertHeld();
|
|
90
|
+
const result = await operation(assertHeld);
|
|
91
|
+
return result;
|
|
92
|
+
}
|
|
93
|
+
finally {
|
|
94
|
+
closed = true;
|
|
95
|
+
if (renewalTimer)
|
|
96
|
+
clearTimeout(renewalTimer);
|
|
97
|
+
await lease.release().catch(() => false);
|
|
98
|
+
}
|
|
99
|
+
}
|
|
100
|
+
async loadSessions() {
|
|
101
|
+
try {
|
|
102
|
+
const sessionsArray = await storageService.getAllSessions();
|
|
36
103
|
this.sessions = new Map(sessionsArray.map(session => [session.id, session]));
|
|
37
104
|
logger.debug(`Loaded ${sessionsArray.length} sessions from storage`);
|
|
38
105
|
}
|
|
@@ -40,10 +107,6 @@ class ChatService {
|
|
|
40
107
|
logger.error('Failed to load sessions:', error);
|
|
41
108
|
}
|
|
42
109
|
}
|
|
43
|
-
saveSessions() {
|
|
44
|
-
// This method is kept for compatibility but individual session saving is now handled by storage service
|
|
45
|
-
// The storage service handles both SQLite and JSON fallback
|
|
46
|
-
}
|
|
47
110
|
async createSession(model, title, userId = 'default', personaId, providerSelection) {
|
|
48
111
|
const sessionId = uuidv4();
|
|
49
112
|
const now = Date.now();
|
|
@@ -77,7 +140,7 @@ class ChatService {
|
|
|
77
140
|
}
|
|
78
141
|
// If no persona system prompt, fall back to global preferences
|
|
79
142
|
if (!systemMessage) {
|
|
80
|
-
const globalSystemMessage = preferencesService.getSystemMessage(userId);
|
|
143
|
+
const globalSystemMessage = await preferencesService.getSystemMessage(userId);
|
|
81
144
|
if (globalSystemMessage && globalSystemMessage.trim()) {
|
|
82
145
|
systemMessage = globalSystemMessage.trim();
|
|
83
146
|
}
|
|
@@ -95,34 +158,22 @@ class ChatService {
|
|
|
95
158
|
}
|
|
96
159
|
this.sessions.set(sessionId, session);
|
|
97
160
|
// Save to storage with user ID
|
|
98
|
-
storageService.saveSession(session, userId);
|
|
161
|
+
await storageService.saveSession(session, userId);
|
|
99
162
|
return session;
|
|
100
163
|
}
|
|
101
|
-
getSession(sessionId, userId = 'default') {
|
|
102
|
-
//
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
if (
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
}
|
|
110
|
-
}
|
|
111
|
-
else {
|
|
112
|
-
// If found in cache, we should still verify it belongs to this user
|
|
113
|
-
// by checking the storage service (which has the user verification logic)
|
|
114
|
-
const verifiedSession = storageService.getSession(sessionId, userId);
|
|
115
|
-
if (!verifiedSession) {
|
|
116
|
-
// Session doesn't belong to this user, remove from cache and return undefined
|
|
117
|
-
this.sessions.delete(sessionId);
|
|
118
|
-
return undefined;
|
|
119
|
-
}
|
|
120
|
-
}
|
|
164
|
+
async getSession(sessionId, userId = 'default') {
|
|
165
|
+
// Persistence is authoritative. This prevents another replica's updates or
|
|
166
|
+
// revocations from being hidden behind process-local state.
|
|
167
|
+
const session = await storageService.getSession(sessionId, userId);
|
|
168
|
+
if (session)
|
|
169
|
+
this.sessions.set(sessionId, session);
|
|
170
|
+
else
|
|
171
|
+
this.sessions.delete(sessionId);
|
|
121
172
|
return session;
|
|
122
173
|
}
|
|
123
|
-
getAllSessions(userId = 'default') {
|
|
174
|
+
async getAllSessions(userId = 'default') {
|
|
124
175
|
// Load fresh data from storage to ensure we have the latest
|
|
125
|
-
const sessionsArray = storageService.getAllSessions(userId);
|
|
176
|
+
const sessionsArray = await storageService.getAllSessions(userId);
|
|
126
177
|
// Update memory cache with user-specific sessions
|
|
127
178
|
// Note: We don't clear the entire cache since other users might be using it
|
|
128
179
|
sessionsArray.forEach(session => {
|
|
@@ -131,16 +182,17 @@ class ChatService {
|
|
|
131
182
|
return sessionsArray;
|
|
132
183
|
}
|
|
133
184
|
async updateSession(sessionId, updates, userId = 'default') {
|
|
185
|
+
return this.withSessionWriteLease(sessionId, userId, assertHeld => this.updateSessionWithLeaseHeld(sessionId, updates, userId, assertHeld));
|
|
186
|
+
}
|
|
187
|
+
async updateSessionWithLeaseHeld(sessionId, updates, userId, assertHeld) {
|
|
134
188
|
// First verify the session belongs to the user
|
|
135
|
-
const session = this.getSession(sessionId, userId);
|
|
189
|
+
const session = await this.getSession(sessionId, userId);
|
|
136
190
|
if (!session)
|
|
137
191
|
return undefined;
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
messages: updates.messages.map(sanitizeChatMessageProviderState),
|
|
143
|
-
};
|
|
192
|
+
// Aggregate identity and messages are immutable through the metadata PUT.
|
|
193
|
+
// Accepting a stale client snapshot here can erase a worker response even
|
|
194
|
+
// when every writer takes the same session lease.
|
|
195
|
+
const { id: _ignoredId, messages: _ignoredMessages, createdAt: _ignoredCreatedAt, updatedAt: _ignoredUpdatedAt, ...sanitizedUpdates } = updates;
|
|
144
196
|
const updatedSession = {
|
|
145
197
|
...session,
|
|
146
198
|
...sanitizedUpdates,
|
|
@@ -168,20 +220,31 @@ class ChatService {
|
|
|
168
220
|
else {
|
|
169
221
|
// If switching away from a persona to a regular model, clear personaId and use default system message
|
|
170
222
|
updatedSession.personaId = undefined;
|
|
171
|
-
this.updateSystemMessageToDefault(updatedSession, userId);
|
|
223
|
+
await this.updateSystemMessageToDefault(updatedSession, userId);
|
|
172
224
|
}
|
|
173
225
|
}
|
|
174
226
|
this.sessions.set(sessionId, updatedSession);
|
|
175
|
-
|
|
227
|
+
await assertHeld();
|
|
228
|
+
await storageService.saveSession(updatedSession, userId, assertHeld);
|
|
176
229
|
return updatedSession;
|
|
177
230
|
}
|
|
178
|
-
addMessage(sessionId, message, userId = 'default') {
|
|
231
|
+
async addMessage(sessionId, message, userId = 'default', options = {}) {
|
|
232
|
+
return this.withSessionWriteLease(sessionId, userId, assertHeld => this.addMessageWithLeaseHeld(sessionId, message, userId, {
|
|
233
|
+
...options,
|
|
234
|
+
assertPersistenceAllowed: async () => {
|
|
235
|
+
await options.assertPersistenceAllowed?.();
|
|
236
|
+
await assertHeld();
|
|
237
|
+
},
|
|
238
|
+
}));
|
|
239
|
+
}
|
|
240
|
+
async addMessageWithLeaseHeld(sessionId, message, userId, options) {
|
|
179
241
|
// First verify the session belongs to the user
|
|
180
|
-
const session = this.getSession(sessionId, userId);
|
|
242
|
+
const session = await this.getSession(sessionId, userId);
|
|
181
243
|
if (!session) {
|
|
182
244
|
return undefined;
|
|
183
245
|
}
|
|
184
246
|
const messageId = message.id || uuidv4();
|
|
247
|
+
await options.assertPersistenceAllowed?.();
|
|
185
248
|
// Check if message with this ID already exists to prevent duplicates
|
|
186
249
|
const existingMessage = session.messages.find(msg => msg.id === messageId);
|
|
187
250
|
if (existingMessage) {
|
|
@@ -192,9 +255,18 @@ class ChatService {
|
|
|
192
255
|
id: messageId,
|
|
193
256
|
timestamp: Date.now(),
|
|
194
257
|
});
|
|
258
|
+
const previousSessionUpdatedAt = session.updatedAt;
|
|
259
|
+
const previousActiveMessageId = newMessage.parentId
|
|
260
|
+
? session.messages.find(candidate => (candidate.id === newMessage.parentId ||
|
|
261
|
+
candidate.parentId === newMessage.parentId) &&
|
|
262
|
+
candidate.isActive !== false)?.id
|
|
263
|
+
: undefined;
|
|
195
264
|
// If this is a branch message (has parentId), update sibling messages
|
|
196
265
|
if (newMessage.parentId) {
|
|
197
266
|
const parentId = newMessage.parentId;
|
|
267
|
+
if (newMessage.branchIndex === undefined) {
|
|
268
|
+
newMessage.branchIndex = session.messages.filter(msg => msg.id === parentId || msg.parentId === parentId).length;
|
|
269
|
+
}
|
|
198
270
|
// Mark all sibling messages (including the parent) as inactive
|
|
199
271
|
for (const msg of session.messages) {
|
|
200
272
|
const isSibling = msg.id === parentId || msg.parentId === parentId;
|
|
@@ -211,7 +283,49 @@ class ChatService {
|
|
|
211
283
|
}
|
|
212
284
|
session.messages.push(newMessage);
|
|
213
285
|
session.updatedAt = Date.now();
|
|
214
|
-
|
|
286
|
+
const persistedSessionUpdatedAt = session.updatedAt;
|
|
287
|
+
this.sessions.set(sessionId, session);
|
|
288
|
+
let persistenceError;
|
|
289
|
+
try {
|
|
290
|
+
await options.assertPersistenceAllowed?.();
|
|
291
|
+
await storageService.saveSession(session, userId, options.assertPersistenceAllowed);
|
|
292
|
+
}
|
|
293
|
+
catch (error) {
|
|
294
|
+
persistenceError = error;
|
|
295
|
+
}
|
|
296
|
+
try {
|
|
297
|
+
// This is the critical post-COMMIT fence. A transport may ignore Abort,
|
|
298
|
+
// or a PostgreSQL acknowledgement may arrive after Stop. In either case
|
|
299
|
+
// the assistant response is not allowed to survive as a ghost message.
|
|
300
|
+
await options.assertPersistenceAllowed?.();
|
|
301
|
+
}
|
|
302
|
+
catch (cancellationError) {
|
|
303
|
+
try {
|
|
304
|
+
await storageService.removeSessionMessageIfCurrent({
|
|
305
|
+
sessionId,
|
|
306
|
+
userId,
|
|
307
|
+
messageId: newMessage.id,
|
|
308
|
+
expectedTimestamp: newMessage.timestamp,
|
|
309
|
+
expectedSessionUpdatedAt: persistedSessionUpdatedAt,
|
|
310
|
+
previousSessionUpdatedAt,
|
|
311
|
+
previousActiveMessageId,
|
|
312
|
+
});
|
|
313
|
+
// Persistence is authoritative; discard the mutated process snapshot
|
|
314
|
+
// instead of replacing a possibly newer cross-replica aggregate.
|
|
315
|
+
this.sessions.delete(sessionId);
|
|
316
|
+
}
|
|
317
|
+
catch (compensationError) {
|
|
318
|
+
this.sessions.delete(sessionId);
|
|
319
|
+
// The aggregate's durable state is unknown, so do not pretend this was
|
|
320
|
+
// an ordinary cancellation that callers may silently swallow.
|
|
321
|
+
throw new ChatCancellationCompensationError(cancellationError, compensationError);
|
|
322
|
+
}
|
|
323
|
+
throw cancellationError;
|
|
324
|
+
}
|
|
325
|
+
if (persistenceError)
|
|
326
|
+
throw persistenceError;
|
|
327
|
+
// Persona-derived side effects must not run for a response rolled back by
|
|
328
|
+
// Stop. Start them only after the post-persistence cancellation fence.
|
|
215
329
|
if (session.personaId) {
|
|
216
330
|
if (message.role === 'user') {
|
|
217
331
|
this.processAdvancedPersonaInteraction(session.personaId, userId, message.content, session).catch((error) => logger.error('Advanced persona processing error:', error));
|
|
@@ -220,13 +334,158 @@ class ChatService {
|
|
|
220
334
|
this.processAdvancedPersonaResponse(session.personaId, userId, message.content).catch((error) => logger.error('Advanced persona response processing error:', error));
|
|
221
335
|
}
|
|
222
336
|
}
|
|
223
|
-
this.sessions.set(sessionId, session);
|
|
224
|
-
storageService.saveSession(session, userId);
|
|
225
337
|
return newMessage;
|
|
226
338
|
}
|
|
227
|
-
|
|
339
|
+
/** Atomically persists a user turn and its durable generation job. */
|
|
340
|
+
async queueDurableGeneration(input) {
|
|
341
|
+
return this.withSessionWriteLease(input.sessionId, input.userId, async (assertHeld) => {
|
|
342
|
+
const session = await this.getSession(input.sessionId, input.userId);
|
|
343
|
+
if (!session)
|
|
344
|
+
return undefined;
|
|
345
|
+
const existingJob = await getDurableJobRuntime().service.getByIdempotency(input.userId, chatGenerationIdempotencyScope(input.sessionId), input.assistantMessageId);
|
|
346
|
+
if (input.userMessageId === input.assistantMessageId) {
|
|
347
|
+
throw new Error('Chat message identifiers must be distinct');
|
|
348
|
+
}
|
|
349
|
+
if (!existingJob &&
|
|
350
|
+
session.messages.some(message => message.id === input.assistantMessageId)) {
|
|
351
|
+
throw new Error('The assistant message identity is already in use');
|
|
352
|
+
}
|
|
353
|
+
let userMessage = session.messages.find(message => message.id === input.userMessageId);
|
|
354
|
+
if (existingJob) {
|
|
355
|
+
if (!userMessage) {
|
|
356
|
+
throw new Error('Chat generation idempotency state is inconsistent');
|
|
357
|
+
}
|
|
358
|
+
return { userMessage, jobId: existingJob.id };
|
|
359
|
+
}
|
|
360
|
+
if (input.regenerate) {
|
|
361
|
+
const original = session.messages.find(message => message.id === input.originalMessageId);
|
|
362
|
+
if (!original || original.role !== 'assistant') {
|
|
363
|
+
throw new Error('The assistant message to regenerate was not found');
|
|
364
|
+
}
|
|
365
|
+
if (!userMessage ||
|
|
366
|
+
userMessage.role !== 'user' ||
|
|
367
|
+
userMessage.content !== input.message ||
|
|
368
|
+
JSON.stringify(userMessage.images ?? []) !==
|
|
369
|
+
JSON.stringify(input.images ?? [])) {
|
|
370
|
+
throw new Error('The regeneration source message is inconsistent');
|
|
371
|
+
}
|
|
372
|
+
}
|
|
373
|
+
else if (!userMessage) {
|
|
374
|
+
userMessage = sanitizeChatMessageProviderState({
|
|
375
|
+
id: input.userMessageId,
|
|
376
|
+
role: 'user',
|
|
377
|
+
content: input.message,
|
|
378
|
+
images: input.images,
|
|
379
|
+
timestamp: Date.now(),
|
|
380
|
+
});
|
|
381
|
+
session.messages.push(userMessage);
|
|
382
|
+
session.updatedAt = Date.now();
|
|
383
|
+
}
|
|
384
|
+
else if (userMessage.role !== 'user' ||
|
|
385
|
+
userMessage.content !== input.message ||
|
|
386
|
+
JSON.stringify(userMessage.images ?? []) !==
|
|
387
|
+
JSON.stringify(input.images ?? [])) {
|
|
388
|
+
throw new Error('Chat generation idempotency key was reused');
|
|
389
|
+
}
|
|
390
|
+
const enqueueInput = {
|
|
391
|
+
sessionId: input.sessionId,
|
|
392
|
+
actorUserId: input.userId,
|
|
393
|
+
userMessageId: input.userMessageId,
|
|
394
|
+
assistantMessageId: input.assistantMessageId,
|
|
395
|
+
message: input.message,
|
|
396
|
+
hasImages: (input.images?.length ?? 0) > 0,
|
|
397
|
+
options: input.options ?? {},
|
|
398
|
+
webSearch: input.webSearch === true,
|
|
399
|
+
regenerate: input.regenerate === true,
|
|
400
|
+
...(input.regenerate && input.originalMessageId
|
|
401
|
+
? { originalMessageId: input.originalMessageId }
|
|
402
|
+
: {}),
|
|
403
|
+
};
|
|
404
|
+
const persistAndEnqueue = () => storageService.saveSessionAndEnqueueGeneration(session, input.userId, transactionalChatGenerationEnqueuer, enqueueInput, assertHeld);
|
|
405
|
+
try {
|
|
406
|
+
await assertHeld();
|
|
407
|
+
await persistAndEnqueue();
|
|
408
|
+
}
|
|
409
|
+
catch {
|
|
410
|
+
// This SQL transaction can commit while the client loses only its
|
|
411
|
+
// acknowledgement. Repeating the exact aggregate + durable payload
|
|
412
|
+
// is safe: the durable idempotency fingerprint either returns the
|
|
413
|
+
// committed job or rejects an inconsistent reuse. It also completes
|
|
414
|
+
// a transaction that genuinely rolled back, so the caller never gets
|
|
415
|
+
// a false conflict for a user turn already persisted by PostgreSQL.
|
|
416
|
+
const committedJob = await getDurableJobRuntime().service.getByIdempotency(input.userId, chatGenerationIdempotencyScope(input.sessionId), input.assistantMessageId);
|
|
417
|
+
const committedSession = await storageService.getSession(input.sessionId, input.userId);
|
|
418
|
+
const committedMessage = committedSession?.messages.find(candidate => candidate.id === input.userMessageId);
|
|
419
|
+
if (committedJob?.jobType === CHAT_GENERATE_JOB_TYPE &&
|
|
420
|
+
committedJob.actorUserId === input.userId &&
|
|
421
|
+
committedMessage?.role === 'user' &&
|
|
422
|
+
committedMessage.content === input.message &&
|
|
423
|
+
JSON.stringify(committedMessage.images ?? []) ===
|
|
424
|
+
JSON.stringify(input.images ?? [])) {
|
|
425
|
+
this.sessions.delete(input.sessionId);
|
|
426
|
+
return { userMessage: committedMessage, jobId: committedJob.id };
|
|
427
|
+
}
|
|
428
|
+
await assertHeld();
|
|
429
|
+
await persistAndEnqueue();
|
|
430
|
+
}
|
|
431
|
+
this.sessions.set(input.sessionId, session);
|
|
432
|
+
const job = await getDurableJobRuntime().service.getByIdempotency(input.userId, chatGenerationIdempotencyScope(input.sessionId), input.assistantMessageId);
|
|
433
|
+
if (!job) {
|
|
434
|
+
throw new Error('Chat generation transaction did not publish its job');
|
|
435
|
+
}
|
|
436
|
+
const persistedSession = await storageService.getSession(input.sessionId, input.userId);
|
|
437
|
+
const persistedUserMessage = persistedSession?.messages.find(message => message.id === input.userMessageId);
|
|
438
|
+
if (job.jobType !== CHAT_GENERATE_JOB_TYPE ||
|
|
439
|
+
job.actorUserId !== input.userId ||
|
|
440
|
+
!persistedUserMessage ||
|
|
441
|
+
persistedUserMessage.role !== 'user' ||
|
|
442
|
+
persistedUserMessage.content !== input.message ||
|
|
443
|
+
JSON.stringify(persistedUserMessage.images ?? []) !==
|
|
444
|
+
JSON.stringify(input.images ?? [])) {
|
|
445
|
+
throw new Error('Chat generation transaction outcome is inconsistent');
|
|
446
|
+
}
|
|
447
|
+
if (session.personaId) {
|
|
448
|
+
void this.processAdvancedPersonaInteraction(session.personaId, input.userId, input.message, session).catch(error => logger.error('Advanced persona processing error:', error));
|
|
449
|
+
}
|
|
450
|
+
return { userMessage, jobId: job.id };
|
|
451
|
+
});
|
|
452
|
+
}
|
|
453
|
+
/**
|
|
454
|
+
* Publish the final assistant row while holding the same distributed write
|
|
455
|
+
* lease as ordinary read/modify/replace chat mutations. The SQL operation
|
|
456
|
+
* then applies the durable job fence and commits the row plus terminal event.
|
|
457
|
+
*/
|
|
458
|
+
async publishDurableChatCompletion(input) {
|
|
459
|
+
return this.withSessionWriteLease(input.sessionId, input.userId, async (assertHeld) => {
|
|
460
|
+
const authoritative = await storageService.getSession(input.sessionId, input.userId);
|
|
461
|
+
if (!authoritative) {
|
|
462
|
+
throw new Error('Chat completion session is unavailable');
|
|
463
|
+
}
|
|
464
|
+
if (authoritative.messages.some(message => message.id === input.message.id)) {
|
|
465
|
+
throw new Error('The assistant message identity is already in use');
|
|
466
|
+
}
|
|
467
|
+
if (input.message.parentId &&
|
|
468
|
+
!authoritative.messages.some(message => message.id === input.message.parentId &&
|
|
469
|
+
message.role === 'assistant')) {
|
|
470
|
+
throw new Error('Chat completion branch root is unavailable');
|
|
471
|
+
}
|
|
472
|
+
await assertHeld();
|
|
473
|
+
const cursor = await storageService.publishDurableChatCompletion({
|
|
474
|
+
...input,
|
|
475
|
+
beforeCommit: assertHeld,
|
|
476
|
+
});
|
|
477
|
+
// Force every later mutation on this process to reread the atomically
|
|
478
|
+
// published assistant instead of retaining a pre-publication aggregate.
|
|
479
|
+
this.sessions.delete(input.sessionId);
|
|
480
|
+
return cursor;
|
|
481
|
+
});
|
|
482
|
+
}
|
|
483
|
+
async updateMessage(sessionId, messageId, updates, userId = 'default') {
|
|
484
|
+
return this.withSessionWriteLease(sessionId, userId, assertHeld => this.updateMessageWithLeaseHeld(sessionId, messageId, updates, userId, assertHeld));
|
|
485
|
+
}
|
|
486
|
+
async updateMessageWithLeaseHeld(sessionId, messageId, updates, userId, assertHeld) {
|
|
228
487
|
// First verify the session belongs to the user
|
|
229
|
-
const session = this.getSession(sessionId, userId);
|
|
488
|
+
const session = await this.getSession(sessionId, userId);
|
|
230
489
|
if (!session) {
|
|
231
490
|
logger.error('Session not found or access denied:', sessionId, userId);
|
|
232
491
|
return undefined;
|
|
@@ -251,24 +510,43 @@ class ChatService {
|
|
|
251
510
|
session.updatedAt = Date.now();
|
|
252
511
|
// Save updated session
|
|
253
512
|
this.sessions.set(sessionId, session);
|
|
254
|
-
|
|
513
|
+
await assertHeld();
|
|
514
|
+
await storageService.saveSession(session, userId, assertHeld);
|
|
255
515
|
return updatedMessage;
|
|
256
516
|
}
|
|
257
|
-
deleteSession(sessionId, userId = 'default') {
|
|
517
|
+
async deleteSession(sessionId, userId = 'default') {
|
|
518
|
+
return this.withSessionWriteLease(sessionId, userId, async (assertHeld) => {
|
|
519
|
+
await getDurableJobRuntime().service.cancelAllForActor(userId, 'superseded', {
|
|
520
|
+
jobTypes: [CHAT_GENERATE_JOB_TYPE],
|
|
521
|
+
idempotencyScopes: [chatGenerationIdempotencyScope(sessionId)],
|
|
522
|
+
});
|
|
523
|
+
return this.deleteSessionWithLeaseHeld(sessionId, userId, assertHeld);
|
|
524
|
+
});
|
|
525
|
+
}
|
|
526
|
+
async deleteSessionWithLeaseHeld(sessionId, userId, assertHeld) {
|
|
258
527
|
// First verify the session belongs to the user
|
|
259
|
-
const session = this.getSession(sessionId, userId);
|
|
528
|
+
const session = await this.getSession(sessionId, userId);
|
|
260
529
|
if (!session)
|
|
261
530
|
return false;
|
|
262
|
-
|
|
531
|
+
await assertHeld();
|
|
532
|
+
const deleted = await storageService.deleteSession(sessionId, userId, assertHeld);
|
|
263
533
|
if (deleted) {
|
|
264
534
|
this.sessions.delete(sessionId);
|
|
535
|
+
try {
|
|
536
|
+
// The session is gone; its durable event stream is dead transport.
|
|
537
|
+
// A failure here leaves rows for the retention sweep, not the user.
|
|
538
|
+
await getDurableJobRuntime().service.deleteEventStream(chatEventStreamId(sessionId));
|
|
539
|
+
}
|
|
540
|
+
catch {
|
|
541
|
+
// Retention prunes anything this best-effort cleanup missed.
|
|
542
|
+
}
|
|
265
543
|
}
|
|
266
544
|
return deleted;
|
|
267
545
|
}
|
|
268
|
-
getSessionFolders(userId = 'default') {
|
|
546
|
+
async getSessionFolders(userId = 'default') {
|
|
269
547
|
return storageService.getSessionFolders(userId);
|
|
270
548
|
}
|
|
271
|
-
createSessionFolder(name, userId = 'default') {
|
|
549
|
+
async createSessionFolder(name, userId = 'default') {
|
|
272
550
|
const normalizedName = this.normalizeSessionFolderName(name);
|
|
273
551
|
const now = Date.now();
|
|
274
552
|
const folder = {
|
|
@@ -277,18 +555,16 @@ class ChatService {
|
|
|
277
555
|
createdAt: now,
|
|
278
556
|
updatedAt: now,
|
|
279
557
|
};
|
|
280
|
-
storageService.saveSessionFolder(folder, userId);
|
|
558
|
+
await storageService.saveSessionFolder(folder, userId);
|
|
281
559
|
return folder;
|
|
282
560
|
}
|
|
283
|
-
renameSessionFolder(folderId, name, userId = 'default') {
|
|
561
|
+
async renameSessionFolder(folderId, name, userId = 'default') {
|
|
284
562
|
const normalizedName = this.normalizeSessionFolderName(name);
|
|
285
|
-
const folder = storageService
|
|
286
|
-
.getSessionFolders(userId)
|
|
287
|
-
.find(item => item.id === folderId);
|
|
563
|
+
const folder = (await storageService.getSessionFolders(userId)).find(item => item.id === folderId);
|
|
288
564
|
if (!folder)
|
|
289
565
|
return undefined;
|
|
290
566
|
const updated = { ...folder, name: normalizedName, updatedAt: Date.now() };
|
|
291
|
-
storageService.saveSessionFolder(updated, userId);
|
|
567
|
+
await storageService.saveSessionFolder(updated, userId);
|
|
292
568
|
return updated;
|
|
293
569
|
}
|
|
294
570
|
normalizeSessionFolderName(name) {
|
|
@@ -301,11 +577,11 @@ class ChatService {
|
|
|
301
577
|
}
|
|
302
578
|
return normalizedName;
|
|
303
579
|
}
|
|
304
|
-
deleteSessionFolder(folderId, userId = 'default') {
|
|
305
|
-
const deleted = storageService.deleteSessionFolder(folderId, userId);
|
|
580
|
+
async deleteSessionFolder(folderId, userId = 'default') {
|
|
581
|
+
const deleted = await storageService.deleteSessionFolder(folderId, userId);
|
|
306
582
|
if (deleted) {
|
|
307
583
|
// Keep the in-memory cache consistent with the cleared folder links.
|
|
308
|
-
for (const session of this.getAllSessions(userId)) {
|
|
584
|
+
for (const session of await this.getAllSessions(userId)) {
|
|
309
585
|
if (session.folderId === folderId) {
|
|
310
586
|
this.sessions.set(session.id, { ...session, folderId: undefined });
|
|
311
587
|
}
|
|
@@ -313,20 +589,24 @@ class ChatService {
|
|
|
313
589
|
}
|
|
314
590
|
return deleted;
|
|
315
591
|
}
|
|
316
|
-
clearAllSessions(userId = 'default') {
|
|
317
|
-
|
|
318
|
-
const userSessions = this.getAllSessions(userId);
|
|
319
|
-
|
|
320
|
-
|
|
321
|
-
|
|
322
|
-
|
|
323
|
-
|
|
324
|
-
|
|
325
|
-
|
|
326
|
-
|
|
592
|
+
async clearAllSessions(userId = 'default') {
|
|
593
|
+
await getDurableJobRuntime().service.cancelAllForActor(userId, 'superseded', { jobTypes: [CHAT_GENERATE_JOB_TYPE] });
|
|
594
|
+
const userSessions = await this.getAllSessions(userId);
|
|
595
|
+
for (const session of userSessions) {
|
|
596
|
+
await this.withSessionWriteLease(session.id, userId, async (assertHeld) => {
|
|
597
|
+
// A generation may have committed after the actor-wide cancellation
|
|
598
|
+
// but before this session lease was acquired. Cancel the exact scope
|
|
599
|
+
// under the same serialization boundary immediately before deletion.
|
|
600
|
+
await getDurableJobRuntime().service.cancelAllForActor(userId, 'superseded', {
|
|
601
|
+
jobTypes: [CHAT_GENERATE_JOB_TYPE],
|
|
602
|
+
idempotencyScopes: [chatGenerationIdempotencyScope(session.id)],
|
|
603
|
+
});
|
|
604
|
+
await this.deleteSessionWithLeaseHeld(session.id, userId, assertHeld);
|
|
605
|
+
});
|
|
606
|
+
}
|
|
327
607
|
}
|
|
328
|
-
getMessagesForContext(sessionId, maxMessages = 10) {
|
|
329
|
-
const session = this.
|
|
608
|
+
async getMessagesForContext(sessionId, userId, maxMessages = 10) {
|
|
609
|
+
const session = await this.getSession(sessionId, userId);
|
|
330
610
|
if (!session)
|
|
331
611
|
return [];
|
|
332
612
|
return selectChatMessagesForContext(session.messages, maxMessages).map(sanitizeChatMessageProviderState);
|
|
@@ -342,17 +622,17 @@ class ChatService {
|
|
|
342
622
|
}
|
|
343
623
|
else {
|
|
344
624
|
// Fallback to default system message
|
|
345
|
-
this.updateSystemMessageToDefault(session, userId);
|
|
625
|
+
await this.updateSystemMessageToDefault(session, userId);
|
|
346
626
|
}
|
|
347
627
|
}
|
|
348
628
|
catch (error) {
|
|
349
629
|
logger.error(`updateSystemMessageForPersona: Error getting persona %s:`, personaId, error);
|
|
350
630
|
// Fallback to default system message
|
|
351
|
-
this.updateSystemMessageToDefault(session, userId);
|
|
631
|
+
await this.updateSystemMessageToDefault(session, userId);
|
|
352
632
|
}
|
|
353
633
|
}
|
|
354
|
-
updateSystemMessageToDefault(session, userId) {
|
|
355
|
-
const defaultSystemMessage = preferencesService.getSystemMessage(userId);
|
|
634
|
+
async updateSystemMessageToDefault(session, userId) {
|
|
635
|
+
const defaultSystemMessage = await preferencesService.getSystemMessage(userId);
|
|
356
636
|
this.replaceSystemMessage(session, defaultSystemMessage);
|
|
357
637
|
}
|
|
358
638
|
replaceSystemMessage(session, newSystemMessage) {
|
|
@@ -394,7 +674,7 @@ class ChatService {
|
|
|
394
674
|
}
|
|
395
675
|
// Get advanced settings
|
|
396
676
|
const embeddingModel = persona.embedding_model ||
|
|
397
|
-
preferencesService.getDefaultEmbeddingModel(userId);
|
|
677
|
+
(await preferencesService.getDefaultEmbeddingModel(userId));
|
|
398
678
|
// 1. Store the user message as a memory
|
|
399
679
|
await memoryService.storeMemory(userId, personaId, userMessage, embeddingModel, undefined, // context
|
|
400
680
|
0.7 // importance score
|
|
@@ -475,28 +755,31 @@ Guidelines:
|
|
|
475
755
|
- Don't explicitly mention having "memories" - integrate knowledge seamlessly
|
|
476
756
|
- If memories conflict with current information, prioritize the most recent
|
|
477
757
|
[END MEMORY CONTEXT]`;
|
|
478
|
-
|
|
479
|
-
|
|
480
|
-
|
|
481
|
-
|
|
482
|
-
|
|
483
|
-
|
|
484
|
-
|
|
485
|
-
|
|
486
|
-
|
|
487
|
-
|
|
488
|
-
|
|
489
|
-
|
|
490
|
-
|
|
491
|
-
|
|
492
|
-
|
|
493
|
-
|
|
494
|
-
|
|
495
|
-
|
|
496
|
-
|
|
497
|
-
|
|
498
|
-
|
|
499
|
-
|
|
758
|
+
await this.withSessionWriteLease(session.id, userId, async (assertHeld) => {
|
|
759
|
+
const authoritative = await this.getSession(session.id, userId);
|
|
760
|
+
if (!authoritative)
|
|
761
|
+
return;
|
|
762
|
+
const systemMessageIndex = authoritative.messages.findIndex(msg => msg.role === 'system');
|
|
763
|
+
if (systemMessageIndex !== -1) {
|
|
764
|
+
authoritative.messages[systemMessageIndex] = {
|
|
765
|
+
...authoritative.messages[systemMessageIndex],
|
|
766
|
+
content: enhancedSystemPrompt,
|
|
767
|
+
timestamp: Date.now(),
|
|
768
|
+
};
|
|
769
|
+
}
|
|
770
|
+
else {
|
|
771
|
+
authoritative.messages.unshift({
|
|
772
|
+
id: uuidv4(),
|
|
773
|
+
role: 'system',
|
|
774
|
+
content: enhancedSystemPrompt,
|
|
775
|
+
timestamp: Date.now(),
|
|
776
|
+
});
|
|
777
|
+
}
|
|
778
|
+
authoritative.updatedAt = Date.now();
|
|
779
|
+
this.sessions.set(authoritative.id, authoritative);
|
|
780
|
+
await assertHeld();
|
|
781
|
+
await storageService.saveSession(authoritative, userId, assertHeld);
|
|
782
|
+
});
|
|
500
783
|
}
|
|
501
784
|
catch (error) {
|
|
502
785
|
logger.error(`Error updating system message with memories:`, error);
|
|
@@ -518,7 +801,7 @@ Guidelines:
|
|
|
518
801
|
}
|
|
519
802
|
// Get advanced settings
|
|
520
803
|
const embeddingModel = persona.embedding_model ||
|
|
521
|
-
preferencesService.getDefaultEmbeddingModel(userId);
|
|
804
|
+
(await preferencesService.getDefaultEmbeddingModel(userId));
|
|
522
805
|
// Store the assistant response as a memory for future context
|
|
523
806
|
await memoryService.storeMemory(userId, personaId, `Assistant response: ${assistantMessage}`, embeddingModel, undefined, // context
|
|
524
807
|
0.6 // slightly lower importance than user messages
|
|
@@ -532,8 +815,11 @@ Guidelines:
|
|
|
532
815
|
* Create a new branch for a message (used for regeneration)
|
|
533
816
|
* This marks the original message as inactive and creates a new active variant
|
|
534
817
|
*/
|
|
535
|
-
createMessageBranch(sessionId, originalMessageId, newMessage, userId = 'default') {
|
|
536
|
-
|
|
818
|
+
async createMessageBranch(sessionId, originalMessageId, newMessage, userId = 'default') {
|
|
819
|
+
return this.withSessionWriteLease(sessionId, userId, assertHeld => this.createMessageBranchWithLeaseHeld(sessionId, originalMessageId, newMessage, userId, assertHeld));
|
|
820
|
+
}
|
|
821
|
+
async createMessageBranchWithLeaseHeld(sessionId, originalMessageId, newMessage, userId, assertHeld) {
|
|
822
|
+
const session = await this.getSession(sessionId, userId);
|
|
537
823
|
if (!session)
|
|
538
824
|
return undefined;
|
|
539
825
|
const originalMessage = session.messages.find(msg => msg.id === originalMessageId);
|
|
@@ -565,14 +851,18 @@ Guidelines:
|
|
|
565
851
|
session.messages.push(newBranchMessage);
|
|
566
852
|
session.updatedAt = Date.now();
|
|
567
853
|
this.sessions.set(sessionId, session);
|
|
568
|
-
|
|
854
|
+
await assertHeld();
|
|
855
|
+
await storageService.saveSession(session, userId, assertHeld);
|
|
569
856
|
return newBranchMessage;
|
|
570
857
|
}
|
|
571
858
|
/**
|
|
572
859
|
* Switch to a different branch of a message
|
|
573
860
|
*/
|
|
574
|
-
switchMessageBranch(sessionId, messageId, targetBranchIndex, userId = 'default') {
|
|
575
|
-
|
|
861
|
+
async switchMessageBranch(sessionId, messageId, targetBranchIndex, userId = 'default') {
|
|
862
|
+
return this.withSessionWriteLease(sessionId, userId, assertHeld => this.switchMessageBranchWithLeaseHeld(sessionId, messageId, targetBranchIndex, userId, assertHeld));
|
|
863
|
+
}
|
|
864
|
+
async switchMessageBranchWithLeaseHeld(sessionId, messageId, targetBranchIndex, userId, assertHeld) {
|
|
865
|
+
const session = await this.getSession(sessionId, userId);
|
|
576
866
|
if (!session)
|
|
577
867
|
return undefined;
|
|
578
868
|
// Find the target message directly by ID
|
|
@@ -590,14 +880,15 @@ Guidelines:
|
|
|
590
880
|
targetMessage.isActive = true;
|
|
591
881
|
session.updatedAt = Date.now();
|
|
592
882
|
this.sessions.set(sessionId, session);
|
|
593
|
-
|
|
883
|
+
await assertHeld();
|
|
884
|
+
await storageService.saveSession(session, userId, assertHeld);
|
|
594
885
|
return targetMessage;
|
|
595
886
|
}
|
|
596
887
|
/**
|
|
597
888
|
* Get all branches for a message
|
|
598
889
|
*/
|
|
599
|
-
getMessageBranches(sessionId, messageId, userId = 'default') {
|
|
600
|
-
const session = this.getSession(sessionId, userId);
|
|
890
|
+
async getMessageBranches(sessionId, messageId, userId = 'default') {
|
|
891
|
+
const session = await this.getSession(sessionId, userId);
|
|
601
892
|
if (!session)
|
|
602
893
|
return [];
|
|
603
894
|
const message = session.messages.find(msg => msg.id === messageId);
|