libre-webui 0.21.3 → 0.22.0
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 +612 -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 +81 -0
- package/backend/dist/platform/storage/storageFactory.d.ts.map +1 -0
- package/backend/dist/platform/storage/storageFactory.js +518 -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 +117 -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 +799 -274
- 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 +9 -2
- 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-CUhEG7E2.js +33 -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-BTEDhBnv.js} +1 -1
- package/frontend/dist/js/{ArtifactDemoPage-K79dWshB.js → ArtifactDemoPage-B0gN3YTl.js} +1 -1
- package/frontend/dist/js/{ArtifactSandboxFrame-DhqLNUtY.js → ArtifactSandboxFrame-CLBXQkZs.js} +3 -3
- package/frontend/dist/js/{ArtifactSlideOutPanel-Cl8JG7bz.js → ArtifactSlideOutPanel-CfqHPFdE.js} +1 -1
- package/frontend/dist/js/{Button-CTXHujOd.js → Button-BV44cTnj.js} +1 -1
- package/frontend/dist/js/ChatPage-DIkAXZWA.js +23 -0
- package/frontend/dist/js/{FirstTimeSetup-kHhRzGJ8.js → FirstTimeSetup-B8phXGNA.js} +1 -1
- package/frontend/dist/js/GalleryPage-W4uI043I.js +1 -0
- package/frontend/dist/js/{HomePage-C1L8WAXL.js → HomePage-DlxehbyO.js} +1 -1
- package/frontend/dist/js/{LibreClawPage-Dyua8IUu.js → LibreClawPage-CgD0_G_F.js} +1 -1
- package/frontend/dist/js/{ModelManagerModals-CuMRGUd-.js → ModelManagerModals-D7jIT3v1.js} +1 -1
- package/frontend/dist/js/{ModelSelector-CqHc-Ln4.js → ModelSelector-BYxJU1UV.js} +1 -1
- package/frontend/dist/js/ModelsPage-C4XdCKP5.js +2 -0
- package/frontend/dist/js/NotesPage-CDECOl4V.js +1 -0
- package/frontend/dist/js/{OptimizedSyntaxHighlighter-CWYUn9Oe.js → OptimizedSyntaxHighlighter-XwqZEoTf.js} +1 -1
- package/frontend/dist/js/{PersonasPage-D_6WBCH5.js → PersonasPage-CjSLPrgS.js} +2 -2
- package/frontend/dist/js/PluginUsagePage-DJOXJuH4.js +1 -0
- package/frontend/dist/js/RichMessageContent-Debeh6bi.js +3 -0
- package/frontend/dist/js/SettingsModal-cUqAeYUP.js +1 -0
- package/frontend/dist/js/{SettingsToggle-DLHlCDBl.js → SettingsToggle-WTa0rgvY.js} +1 -1
- package/frontend/dist/js/{SystemPage-BMWEet9e.js → SystemPage-DxPw0GS7.js} +1 -1
- package/frontend/dist/js/UserManagementPage-CEdYFe_Z.js +1 -0
- package/frontend/dist/js/WorkPage-DDVeuG_9.js +6 -0
- package/frontend/dist/js/api-IzobHGND.js +14 -0
- package/frontend/dist/js/appStore-DKwC2vgn.js +2 -0
- package/frontend/dist/js/ar-xTSvTq05.js +2 -0
- package/frontend/dist/js/authStore-OaTuapL7.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-DXGUVLXD.js +3 -0
- package/frontend/dist/js/{config-DkV1ka7I.js → config-DPEEuTAe.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-ChwJsD2w.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-DFrVjciF.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-FLLx7b67.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-CBkkZY4n.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-i8-5bg5p.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-CQ3x-Uni.js} +1 -1
- package/frontend/dist/js/{ui-BnDZpjfc.js → ui-BHhR3Vok.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-Czu69yWS.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
|
@@ -1,28 +1,85 @@
|
|
|
1
1
|
/*
|
|
2
2
|
* Libre WebUI
|
|
3
3
|
* Copyright (C) 2025 Kroonen AI, Inc.
|
|
4
|
-
*
|
|
5
4
|
* Licensed under the Apache License, Version 2.0 (the "License");
|
|
6
|
-
* you may not use this file except in compliance with the License.
|
|
7
|
-
* You may obtain a copy of the License at:
|
|
8
|
-
*
|
|
9
|
-
* http://www.apache.org/licenses/LICENSE-2.0
|
|
10
|
-
*
|
|
11
|
-
* Unless required by applicable law or agreed to in writing, software
|
|
12
|
-
* distributed under the License is distributed on an "AS IS" BASIS,
|
|
13
|
-
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
14
|
-
* See the License for the specific language governing permissions and
|
|
15
|
-
* limitations under the License.
|
|
16
5
|
*/
|
|
17
|
-
import
|
|
18
|
-
import embeddingService from './embeddingService.js';
|
|
6
|
+
import crypto from 'node:crypto';
|
|
19
7
|
import { v4 as uuidv4 } from 'uuid';
|
|
8
|
+
import { getPlatformStorageRuntime } from '../platform/storage/index.js';
|
|
9
|
+
import { assertPersonaMemoryStillReferenced } from '../platform/storage/personaMemoryIndexing.js';
|
|
20
10
|
import { createLogger } from '../utils/logger.js';
|
|
21
|
-
import
|
|
11
|
+
import embeddingService from './embeddingService.js';
|
|
12
|
+
import { applyMemoryDecay, calculateEnhancedImportance, classifyMemoryType, createConsolidatedContent, } from './memoryUtils.js';
|
|
22
13
|
const logger = createLogger('memory');
|
|
14
|
+
const MEMORY_VECTOR_NAMESPACE = 'persona-memory';
|
|
15
|
+
const MEMORY_VECTOR_VERSION = 'v1';
|
|
16
|
+
const entryFromRecord = (record) => ({
|
|
17
|
+
id: record.id,
|
|
18
|
+
user_id: record.userId,
|
|
19
|
+
persona_id: record.personaId,
|
|
20
|
+
content: record.content,
|
|
21
|
+
timestamp: record.timestamp,
|
|
22
|
+
...(record.context ? { context: record.context } : {}),
|
|
23
|
+
importance_score: record.importanceScore,
|
|
24
|
+
memory_type: record.memoryType,
|
|
25
|
+
access_count: record.accessCount,
|
|
26
|
+
...(record.lastAccessed ? { last_accessed: record.lastAccessed } : {}),
|
|
27
|
+
decay_factor: record.decayFactor,
|
|
28
|
+
...(record.consolidatedFrom
|
|
29
|
+
? { consolidated_from: record.consolidatedFrom }
|
|
30
|
+
: {}),
|
|
31
|
+
});
|
|
32
|
+
const sourceRevision = (content) => crypto.createHash('sha256').update(content, 'utf8').digest('hex');
|
|
33
|
+
const deterministicMemoryId = (input) => {
|
|
34
|
+
const digest = crypto
|
|
35
|
+
.createHash('sha256')
|
|
36
|
+
.update(JSON.stringify([
|
|
37
|
+
'libre-persona-memory-v1',
|
|
38
|
+
input.userId,
|
|
39
|
+
input.personaId,
|
|
40
|
+
input.content,
|
|
41
|
+
input.context ?? null,
|
|
42
|
+
input.importanceScore,
|
|
43
|
+
input.memoryType,
|
|
44
|
+
]), 'utf8')
|
|
45
|
+
.digest()
|
|
46
|
+
.subarray(0, 16);
|
|
47
|
+
// RFC 9562 UUIDv8 reserves this version for application-defined hashes.
|
|
48
|
+
digest[6] = (digest[6] & 0x0f) | 0x80;
|
|
49
|
+
digest[8] = (digest[8] & 0x3f) | 0x80;
|
|
50
|
+
const hex = digest.toString('hex');
|
|
51
|
+
return `${hex.slice(0, 8)}-${hex.slice(8, 12)}-${hex.slice(12, 16)}-${hex.slice(16, 20)}-${hex.slice(20)}`;
|
|
52
|
+
};
|
|
53
|
+
const sameMemoryIntent = (persisted, requested) => persisted.id === requested.id &&
|
|
54
|
+
persisted.userId === requested.userId &&
|
|
55
|
+
persisted.personaId === requested.personaId &&
|
|
56
|
+
persisted.content === requested.content &&
|
|
57
|
+
persisted.context === requested.context &&
|
|
58
|
+
persisted.memoryType === requested.memoryType;
|
|
59
|
+
const retainedOutcomeError = (message, cause) => {
|
|
60
|
+
const error = new Error(message);
|
|
61
|
+
Object.defineProperty(error, 'cause', {
|
|
62
|
+
value: cause,
|
|
63
|
+
enumerable: false,
|
|
64
|
+
});
|
|
65
|
+
return error;
|
|
66
|
+
};
|
|
67
|
+
const combinedOutcomeCause = (message, cause, relatedError) => {
|
|
68
|
+
const error = retainedOutcomeError(message, cause);
|
|
69
|
+
Object.defineProperty(error, 'relatedError', {
|
|
70
|
+
value: relatedError,
|
|
71
|
+
enumerable: false,
|
|
72
|
+
});
|
|
73
|
+
return error;
|
|
74
|
+
};
|
|
75
|
+
const validateImportance = (value) => {
|
|
76
|
+
if (!Number.isFinite(value) || value < 0 || value > 1) {
|
|
77
|
+
throw new Error('Memory importance must be between 0 and 1');
|
|
78
|
+
}
|
|
79
|
+
return value;
|
|
80
|
+
};
|
|
23
81
|
export class MemoryService {
|
|
24
82
|
constructor() {
|
|
25
|
-
this.db = getDatabaseSafe();
|
|
26
83
|
this.embeddingModels = [
|
|
27
84
|
{
|
|
28
85
|
id: 'nomic-embed-text',
|
|
@@ -48,7 +105,7 @@ export class MemoryService {
|
|
|
48
105
|
{
|
|
49
106
|
id: 'text-embedding-3-small',
|
|
50
107
|
name: 'OpenAI Text Embedding 3 Small',
|
|
51
|
-
description: "OpenAI's smaller, faster
|
|
108
|
+
description: "OpenAI's smaller, faster embedding model",
|
|
52
109
|
provider: 'openai',
|
|
53
110
|
dimensions: 1536,
|
|
54
111
|
},
|
|
@@ -60,127 +117,22 @@ export class MemoryService {
|
|
|
60
117
|
dimensions: 1024,
|
|
61
118
|
},
|
|
62
119
|
];
|
|
63
|
-
this.initializeTables();
|
|
64
|
-
}
|
|
65
|
-
/**
|
|
66
|
-
* Ensure database is available
|
|
67
|
-
*/
|
|
68
|
-
ensureDatabase() {
|
|
69
|
-
if (!this.db) {
|
|
70
|
-
throw new Error('Database not available');
|
|
71
|
-
}
|
|
72
|
-
return this.db;
|
|
73
120
|
}
|
|
74
|
-
initializeTables() {
|
|
75
|
-
if (!this.db) {
|
|
76
|
-
logger.warn('MemoryService: Database not available, skipping table initialization');
|
|
77
|
-
return;
|
|
78
|
-
}
|
|
79
|
-
// Persona memories table - create with basic schema first
|
|
80
|
-
this.db.exec(`
|
|
81
|
-
CREATE TABLE IF NOT EXISTS persona_memories (
|
|
82
|
-
id TEXT PRIMARY KEY,
|
|
83
|
-
user_id TEXT NOT NULL,
|
|
84
|
-
persona_id TEXT NOT NULL,
|
|
85
|
-
content TEXT NOT NULL,
|
|
86
|
-
embedding BLOB, -- Stored as binary for efficiency
|
|
87
|
-
timestamp INTEGER NOT NULL,
|
|
88
|
-
context TEXT,
|
|
89
|
-
importance_score REAL DEFAULT 0.5,
|
|
90
|
-
FOREIGN KEY (user_id) REFERENCES users(id) ON DELETE CASCADE,
|
|
91
|
-
FOREIGN KEY (persona_id) REFERENCES personas(id) ON DELETE CASCADE
|
|
92
|
-
)
|
|
93
|
-
`);
|
|
94
|
-
// Create basic indexes first (on columns that always exist)
|
|
95
|
-
this.db.exec(`
|
|
96
|
-
CREATE INDEX IF NOT EXISTS idx_persona_memories_user_persona ON persona_memories(user_id, persona_id);
|
|
97
|
-
CREATE INDEX IF NOT EXISTS idx_persona_memories_timestamp ON persona_memories(timestamp);
|
|
98
|
-
CREATE INDEX IF NOT EXISTS idx_persona_memories_importance ON persona_memories(importance_score);
|
|
99
|
-
`);
|
|
100
|
-
// Add new columns if they don't exist (migration for existing databases)
|
|
101
|
-
// This MUST happen before creating indexes on new columns
|
|
102
|
-
this.migrateDatabase();
|
|
103
|
-
// Now create indexes on the new columns (after migration ensures they exist)
|
|
104
|
-
try {
|
|
105
|
-
this.db.exec(`
|
|
106
|
-
CREATE INDEX IF NOT EXISTS idx_persona_memories_type ON persona_memories(memory_type);
|
|
107
|
-
CREATE INDEX IF NOT EXISTS idx_persona_memories_last_accessed ON persona_memories(last_accessed);
|
|
108
|
-
`);
|
|
109
|
-
}
|
|
110
|
-
catch (error) {
|
|
111
|
-
// Indexes may already exist, ignore
|
|
112
|
-
logger.warn('[MemoryService] Index creation:', error);
|
|
113
|
-
}
|
|
114
|
-
}
|
|
115
|
-
/**
|
|
116
|
-
* Migrate database to add new columns for existing tables
|
|
117
|
-
*/
|
|
118
|
-
migrateDatabase() {
|
|
119
|
-
if (!this.db)
|
|
120
|
-
return;
|
|
121
|
-
try {
|
|
122
|
-
// Check if new columns exist and add them if not
|
|
123
|
-
const columns = [
|
|
124
|
-
'memory_type',
|
|
125
|
-
'access_count',
|
|
126
|
-
'last_accessed',
|
|
127
|
-
'decay_factor',
|
|
128
|
-
'consolidated_from',
|
|
129
|
-
];
|
|
130
|
-
const defaults = {
|
|
131
|
-
memory_type: "'general'",
|
|
132
|
-
access_count: '0',
|
|
133
|
-
last_accessed: 'NULL',
|
|
134
|
-
decay_factor: '1.0',
|
|
135
|
-
consolidated_from: 'NULL',
|
|
136
|
-
};
|
|
137
|
-
for (const column of columns) {
|
|
138
|
-
try {
|
|
139
|
-
this.db.exec(`ALTER TABLE persona_memories ADD COLUMN ${column} ${getMemoryColumnType(column)} DEFAULT ${defaults[column]}`);
|
|
140
|
-
logger.debug(`[MemoryService] Added column ${column} to persona_memories`);
|
|
141
|
-
}
|
|
142
|
-
catch {
|
|
143
|
-
// Column likely already exists, ignore
|
|
144
|
-
}
|
|
145
|
-
}
|
|
146
|
-
}
|
|
147
|
-
catch (error) {
|
|
148
|
-
logger.warn('[MemoryService] Migration check:', error);
|
|
149
|
-
}
|
|
150
|
-
}
|
|
151
|
-
/**
|
|
152
|
-
* Classify memory content into a type
|
|
153
|
-
*/
|
|
154
121
|
classifyMemoryType(content) {
|
|
155
122
|
return classifyMemoryType(content);
|
|
156
123
|
}
|
|
157
|
-
/**
|
|
158
|
-
* Calculate enhanced importance score based on multiple factors
|
|
159
|
-
*/
|
|
160
124
|
calculateEnhancedImportance(content, memoryType, _context) {
|
|
161
125
|
return calculateEnhancedImportance(content, memoryType);
|
|
162
126
|
}
|
|
163
|
-
/**
|
|
164
|
-
* Apply time-based decay to importance score
|
|
165
|
-
*/
|
|
166
127
|
applyDecay(originalImportance, timestamp, accessCount = 0, lastAccessed) {
|
|
167
128
|
return applyMemoryDecay(originalImportance, timestamp, accessCount, lastAccessed);
|
|
168
129
|
}
|
|
169
|
-
/**
|
|
170
|
-
* Get available embedding models
|
|
171
|
-
*/
|
|
172
130
|
getEmbeddingModels() {
|
|
173
|
-
return this.embeddingModels;
|
|
131
|
+
return [...this.embeddingModels];
|
|
174
132
|
}
|
|
175
|
-
/**
|
|
176
|
-
* Generate embedding for text using specified model
|
|
177
|
-
*/
|
|
178
133
|
async generateEmbedding(text, model, userId) {
|
|
179
134
|
try {
|
|
180
|
-
const response = await embeddingService.generateEmbeddings({
|
|
181
|
-
model,
|
|
182
|
-
input: text,
|
|
183
|
-
}, userId);
|
|
135
|
+
const response = await embeddingService.generateEmbeddings({ model, input: text }, userId);
|
|
184
136
|
return response.embeddings[0] || null;
|
|
185
137
|
}
|
|
186
138
|
catch (error) {
|
|
@@ -188,513 +140,416 @@ export class MemoryService {
|
|
|
188
140
|
return null;
|
|
189
141
|
}
|
|
190
142
|
}
|
|
191
|
-
|
|
192
|
-
|
|
193
|
-
|
|
143
|
+
async indexRecord(record, embeddingModel, embedding) {
|
|
144
|
+
if (!embedding?.length)
|
|
145
|
+
return;
|
|
146
|
+
const platform = getPlatformStorageRuntime();
|
|
147
|
+
await platform.vectorStore.upsert({
|
|
148
|
+
actor: { userId: record.userId },
|
|
149
|
+
records: [
|
|
150
|
+
{
|
|
151
|
+
namespace: MEMORY_VECTOR_NAMESPACE,
|
|
152
|
+
id: record.id,
|
|
153
|
+
ownerUserId: record.userId,
|
|
154
|
+
resourceId: record.personaId,
|
|
155
|
+
model: embeddingModel,
|
|
156
|
+
dimensions: embedding.length,
|
|
157
|
+
version: MEMORY_VECTOR_VERSION,
|
|
158
|
+
sourceRevision: sourceRevision(record.content),
|
|
159
|
+
embedding,
|
|
160
|
+
attributes: { memoryType: record.memoryType },
|
|
161
|
+
},
|
|
162
|
+
],
|
|
163
|
+
});
|
|
164
|
+
// Relational persona deletion and vector persistence cannot share one
|
|
165
|
+
// transaction. Recheck the authoritative memory row after the upsert so a
|
|
166
|
+
// delete that wins either side of that boundary cannot leave (or recreate)
|
|
167
|
+
// an orphan vector after resource.delete.v1 has already cleaned the
|
|
168
|
+
// persona namespace.
|
|
169
|
+
await assertPersonaMemoryStillReferenced(platform, record, MEMORY_VECTOR_NAMESPACE);
|
|
170
|
+
}
|
|
171
|
+
async hasAuthoritativeVector(record, embeddingModel, embedding) {
|
|
172
|
+
const hits = await getPlatformStorageRuntime().vectorStore.query({
|
|
173
|
+
actor: { userId: record.userId },
|
|
174
|
+
namespace: MEMORY_VECTOR_NAMESPACE,
|
|
175
|
+
model: embeddingModel,
|
|
176
|
+
dimensions: embedding.length,
|
|
177
|
+
version: MEMORY_VECTOR_VERSION,
|
|
178
|
+
embedding,
|
|
179
|
+
limit: 100,
|
|
180
|
+
minScore: 1 - 1e-6,
|
|
181
|
+
resourceIds: [record.personaId],
|
|
182
|
+
attributes: { memoryType: record.memoryType },
|
|
183
|
+
});
|
|
184
|
+
const expectedRevision = sourceRevision(record.content);
|
|
185
|
+
return hits.some(hit => hit.id === record.id &&
|
|
186
|
+
hit.ownerUserId === record.userId &&
|
|
187
|
+
hit.resourceId === record.personaId &&
|
|
188
|
+
hit.model === embeddingModel &&
|
|
189
|
+
hit.dimensions === embedding.length &&
|
|
190
|
+
hit.version === MEMORY_VECTOR_VERSION &&
|
|
191
|
+
hit.sourceRevision === expectedRevision &&
|
|
192
|
+
hit.attributes.memoryType === record.memoryType);
|
|
193
|
+
}
|
|
194
|
+
async backfillLegacy(records, embeddingModel) {
|
|
195
|
+
for (const record of records) {
|
|
196
|
+
if (!record.legacyEmbedding?.length)
|
|
197
|
+
continue;
|
|
198
|
+
await this.indexRecord(record, embeddingModel, record.legacyEmbedding);
|
|
199
|
+
}
|
|
200
|
+
}
|
|
194
201
|
async storeMemory(userId, personaId, content, embeddingModel, context, importanceScore, memoryType) {
|
|
195
|
-
const id = uuidv4();
|
|
196
|
-
const timestamp = Date.now();
|
|
197
|
-
// Auto-classify memory type if not provided
|
|
198
202
|
const classifiedType = memoryType || this.classifyMemoryType(content);
|
|
199
|
-
|
|
200
|
-
|
|
201
|
-
|
|
202
|
-
: this.calculateEnhancedImportance(content, classifiedType, context);
|
|
203
|
-
// Check for similar existing memories before storing
|
|
204
|
-
const existingSimilar = await this.findSimilarMemories(userId, personaId, content, embeddingModel, 0.85 // High similarity threshold for deduplication
|
|
205
|
-
);
|
|
206
|
-
// If very similar memory exists, reinforce it instead of creating new
|
|
207
|
-
if (existingSimilar.length > 0) {
|
|
208
|
-
const mostSimilar = existingSimilar[0];
|
|
209
|
-
logger.debug(`[MEMORY] Found similar memory (${(mostSimilar.similarity_score * 100).toFixed(1)}% similar), reinforcing instead of creating new`);
|
|
210
|
-
await this.reinforceMemory(mostSimilar.entry.id);
|
|
211
|
-
return mostSimilar.entry;
|
|
212
|
-
}
|
|
213
|
-
// Generate embedding
|
|
203
|
+
const calculatedImportance = validateImportance(importanceScore ??
|
|
204
|
+
this.calculateEnhancedImportance(content, classifiedType, context));
|
|
205
|
+
const normalizedContext = context || undefined;
|
|
214
206
|
const embedding = await this.generateEmbedding(content, embeddingModel, userId);
|
|
215
|
-
|
|
216
|
-
|
|
217
|
-
|
|
218
|
-
|
|
219
|
-
|
|
220
|
-
|
|
221
|
-
|
|
222
|
-
|
|
223
|
-
|
|
224
|
-
|
|
225
|
-
|
|
226
|
-
|
|
227
|
-
|
|
228
|
-
|
|
229
|
-
|
|
230
|
-
|
|
207
|
+
if (embedding) {
|
|
208
|
+
const existing = await this.findSimilarMemories(userId, personaId, embedding, embeddingModel, 0.85);
|
|
209
|
+
if (existing[0]) {
|
|
210
|
+
await this.reinforceMemory(existing[0].entry.id, userId, personaId);
|
|
211
|
+
return existing[0].entry;
|
|
212
|
+
}
|
|
213
|
+
}
|
|
214
|
+
const requestedRecord = {
|
|
215
|
+
id: deterministicMemoryId({
|
|
216
|
+
userId,
|
|
217
|
+
personaId,
|
|
218
|
+
content,
|
|
219
|
+
...(normalizedContext ? { context: normalizedContext } : {}),
|
|
220
|
+
importanceScore: calculatedImportance,
|
|
221
|
+
memoryType: classifiedType,
|
|
222
|
+
}),
|
|
223
|
+
userId,
|
|
224
|
+
personaId,
|
|
231
225
|
content,
|
|
232
|
-
|
|
233
|
-
|
|
234
|
-
|
|
235
|
-
|
|
236
|
-
|
|
237
|
-
|
|
238
|
-
decay_factor: 1.0,
|
|
226
|
+
timestamp: Date.now(),
|
|
227
|
+
...(normalizedContext ? { context: normalizedContext } : {}),
|
|
228
|
+
importanceScore: calculatedImportance,
|
|
229
|
+
memoryType: classifiedType,
|
|
230
|
+
accessCount: 0,
|
|
231
|
+
decayFactor: 1,
|
|
239
232
|
};
|
|
240
|
-
|
|
241
|
-
|
|
242
|
-
|
|
243
|
-
|
|
244
|
-
|
|
245
|
-
|
|
246
|
-
|
|
247
|
-
|
|
248
|
-
|
|
249
|
-
|
|
250
|
-
|
|
251
|
-
|
|
252
|
-
|
|
253
|
-
|
|
254
|
-
|
|
255
|
-
|
|
256
|
-
|
|
257
|
-
|
|
258
|
-
|
|
259
|
-
|
|
260
|
-
|
|
261
|
-
|
|
262
|
-
|
|
263
|
-
|
|
264
|
-
|
|
265
|
-
|
|
266
|
-
|
|
267
|
-
|
|
268
|
-
|
|
269
|
-
|
|
270
|
-
|
|
271
|
-
|
|
272
|
-
|
|
273
|
-
|
|
274
|
-
|
|
275
|
-
|
|
276
|
-
|
|
277
|
-
|
|
278
|
-
|
|
233
|
+
const repository = getPlatformStorageRuntime().domains.memories;
|
|
234
|
+
let record = requestedRecord;
|
|
235
|
+
try {
|
|
236
|
+
await repository.insert(requestedRecord);
|
|
237
|
+
}
|
|
238
|
+
catch (insertError) {
|
|
239
|
+
let persisted;
|
|
240
|
+
try {
|
|
241
|
+
persisted = await repository.findByOwner(requestedRecord.id, userId, personaId);
|
|
242
|
+
}
|
|
243
|
+
catch (resolutionError) {
|
|
244
|
+
throw retainedOutcomeError('Could not resolve the persona memory insert outcome; retry with the same payload', combinedOutcomeCause('Persona memory insert and outcome resolution both failed', insertError, resolutionError));
|
|
245
|
+
}
|
|
246
|
+
if (!persisted)
|
|
247
|
+
throw insertError;
|
|
248
|
+
if (!sameMemoryIntent(persisted, requestedRecord)) {
|
|
249
|
+
throw retainedOutcomeError('The deterministic persona memory identifier belongs to another payload', insertError);
|
|
250
|
+
}
|
|
251
|
+
record = persisted;
|
|
252
|
+
}
|
|
253
|
+
if (embedding?.length) {
|
|
254
|
+
try {
|
|
255
|
+
await this.indexRecord(record, embeddingModel, embedding);
|
|
256
|
+
}
|
|
257
|
+
catch (indexError) {
|
|
258
|
+
let persisted;
|
|
259
|
+
try {
|
|
260
|
+
persisted = await repository.findByOwner(record.id, userId, personaId);
|
|
261
|
+
}
|
|
262
|
+
catch (resolutionError) {
|
|
263
|
+
throw retainedOutcomeError('Could not resolve the persona memory vector outcome; the relational memory was retained for idempotent retry', combinedOutcomeCause('Persona memory vector publication and outcome resolution both failed', indexError, resolutionError));
|
|
264
|
+
}
|
|
265
|
+
if (!persisted) {
|
|
266
|
+
try {
|
|
267
|
+
await getPlatformStorageRuntime().vectorStore.delete({
|
|
268
|
+
actor: { userId },
|
|
269
|
+
namespace: MEMORY_VECTOR_NAMESPACE,
|
|
270
|
+
ids: [record.id],
|
|
271
|
+
});
|
|
272
|
+
}
|
|
273
|
+
catch (cleanupError) {
|
|
274
|
+
throw retainedOutcomeError('Persona memory disappeared during indexing and vector cleanup failed', combinedOutcomeCause('Persona memory vector publication and cleanup both failed', indexError, cleanupError));
|
|
275
|
+
}
|
|
276
|
+
throw indexError;
|
|
277
|
+
}
|
|
278
|
+
if (!sameMemoryIntent(persisted, requestedRecord)) {
|
|
279
|
+
throw retainedOutcomeError('The persona memory changed while its vector outcome was being resolved', indexError);
|
|
280
|
+
}
|
|
281
|
+
let committed = false;
|
|
282
|
+
try {
|
|
283
|
+
committed = await this.hasAuthoritativeVector(persisted, embeddingModel, embedding);
|
|
284
|
+
}
|
|
285
|
+
catch (resolutionError) {
|
|
286
|
+
throw retainedOutcomeError('Could not resolve the persona memory vector outcome; the relational memory was retained for idempotent retry', combinedOutcomeCause('Persona memory vector publication and outcome resolution both failed', indexError, resolutionError));
|
|
287
|
+
}
|
|
288
|
+
if (!committed) {
|
|
289
|
+
throw retainedOutcomeError('Persona memory vector publication was not confirmed; the relational memory was retained for idempotent retry', indexError);
|
|
290
|
+
}
|
|
291
|
+
// The vector may have committed after its acknowledgement was lost.
|
|
292
|
+
// Recheck the SQL row once more so a concurrent persona deletion still
|
|
293
|
+
// wins and compensates the vector before this call reports success.
|
|
294
|
+
await assertPersonaMemoryStillReferenced(getPlatformStorageRuntime(), persisted, MEMORY_VECTOR_NAMESPACE);
|
|
295
|
+
record = persisted;
|
|
279
296
|
}
|
|
280
297
|
}
|
|
281
|
-
return
|
|
298
|
+
return entryFromRecord(record);
|
|
282
299
|
}
|
|
283
|
-
|
|
284
|
-
|
|
285
|
-
|
|
286
|
-
|
|
287
|
-
|
|
288
|
-
|
|
289
|
-
|
|
290
|
-
|
|
291
|
-
|
|
292
|
-
|
|
293
|
-
|
|
294
|
-
|
|
295
|
-
|
|
296
|
-
|
|
300
|
+
async findSimilarMemories(userId, personaId, embedding, embeddingModel, minSimilarity) {
|
|
301
|
+
const repository = getPlatformStorageRuntime().domains.memories;
|
|
302
|
+
const records = await repository.listByOwner(userId, personaId, {
|
|
303
|
+
limit: 100,
|
|
304
|
+
});
|
|
305
|
+
await this.backfillLegacy(records, embeddingModel);
|
|
306
|
+
const byId = new Map(records.map(record => [record.id, record]));
|
|
307
|
+
const hits = await getPlatformStorageRuntime().vectorStore.query({
|
|
308
|
+
actor: { userId },
|
|
309
|
+
namespace: MEMORY_VECTOR_NAMESPACE,
|
|
310
|
+
model: embeddingModel,
|
|
311
|
+
dimensions: embedding.length,
|
|
312
|
+
version: MEMORY_VECTOR_VERSION,
|
|
313
|
+
embedding,
|
|
314
|
+
limit: 50,
|
|
315
|
+
minScore: minSimilarity,
|
|
316
|
+
resourceIds: [personaId],
|
|
317
|
+
});
|
|
318
|
+
return hits.flatMap((hit, index) => {
|
|
319
|
+
const record = byId.get(hit.id);
|
|
320
|
+
return record
|
|
321
|
+
? [
|
|
322
|
+
{
|
|
323
|
+
entry: entryFromRecord(record),
|
|
324
|
+
similarity_score: hit.score,
|
|
325
|
+
relevance_rank: index + 1,
|
|
326
|
+
},
|
|
327
|
+
]
|
|
328
|
+
: [];
|
|
329
|
+
});
|
|
330
|
+
}
|
|
331
|
+
async reinforceMemory(memoryId, userId, personaId) {
|
|
332
|
+
return getPlatformStorageRuntime().domains.memories.reinforce(memoryId, userId, personaId, Date.now());
|
|
297
333
|
}
|
|
298
|
-
|
|
299
|
-
|
|
300
|
-
|
|
301
|
-
|
|
302
|
-
|
|
303
|
-
// Generate embedding for query
|
|
304
|
-
const queryEmbedding = await this.generateEmbedding(query, embeddingModel, userId);
|
|
305
|
-
if (!queryEmbedding) {
|
|
334
|
+
async searchMemories(userId, personaId, query, embeddingModel, topK = 5, minSimilarity = 0.3, memoryTypes) {
|
|
335
|
+
const requestedTopK = Number.isFinite(topK) ? Math.trunc(topK) : 5;
|
|
336
|
+
const normalizedTopK = Math.min(Math.max(requestedTopK, 1), 100);
|
|
337
|
+
const embedding = await this.generateEmbedding(query, embeddingModel, userId);
|
|
338
|
+
if (!embedding)
|
|
306
339
|
return [];
|
|
307
|
-
|
|
308
|
-
|
|
309
|
-
|
|
310
|
-
let sql = `
|
|
311
|
-
SELECT id, user_id, persona_id, content, embedding, timestamp, context, importance_score,
|
|
312
|
-
memory_type, access_count, last_accessed, decay_factor
|
|
313
|
-
FROM persona_memories
|
|
314
|
-
WHERE user_id = ? AND persona_id = ? AND embedding IS NOT NULL
|
|
315
|
-
`;
|
|
316
|
-
// Add memory type filter if specified
|
|
317
|
-
if (memoryTypes && memoryTypes.length > 0) {
|
|
318
|
-
sql += ` AND memory_type IN (${memoryTypes.map(() => '?').join(',')})`;
|
|
319
|
-
}
|
|
320
|
-
sql += ` ORDER BY timestamp DESC`;
|
|
321
|
-
const stmt = db.prepare(sql);
|
|
322
|
-
const params = memoryTypes
|
|
323
|
-
? [userId, personaId, ...memoryTypes]
|
|
324
|
-
: [userId, personaId];
|
|
325
|
-
const memories = stmt.all(...params);
|
|
326
|
-
// Calculate enhanced relevance scores
|
|
327
|
-
const results = [];
|
|
328
|
-
for (const memory of memories) {
|
|
329
|
-
// Convert buffer back to float array
|
|
330
|
-
if (!memory.embedding)
|
|
331
|
-
continue;
|
|
332
|
-
const embeddingArray = embeddingBufferToArray(memory.embedding);
|
|
333
|
-
const similarity = cosineSimilarity(queryEmbedding, embeddingArray);
|
|
334
|
-
if (similarity >= minSimilarity) {
|
|
335
|
-
// Calculate decayed importance
|
|
336
|
-
const decayedImportance = this.applyDecay(memory.importance_score, memory.timestamp, memory.access_count || 0, memory.last_accessed || undefined);
|
|
337
|
-
results.push({
|
|
338
|
-
entry: {
|
|
339
|
-
id: memory.id,
|
|
340
|
-
user_id: memory.user_id,
|
|
341
|
-
persona_id: memory.persona_id,
|
|
342
|
-
content: memory.content,
|
|
343
|
-
embedding: embeddingArray,
|
|
344
|
-
timestamp: memory.timestamp,
|
|
345
|
-
context: memory.context || undefined,
|
|
346
|
-
importance_score: decayedImportance,
|
|
347
|
-
},
|
|
348
|
-
similarity_score: similarity,
|
|
349
|
-
relevance_rank: 0, // Will be set after sorting
|
|
350
|
-
});
|
|
351
|
-
}
|
|
352
|
-
}
|
|
353
|
-
// Sort by composite relevance score
|
|
354
|
-
results.sort((a, b) => {
|
|
355
|
-
const now = Date.now();
|
|
356
|
-
const ageA = (now - a.entry.timestamp) / (1000 * 60 * 60);
|
|
357
|
-
const ageB = (now - b.entry.timestamp) / (1000 * 60 * 60);
|
|
358
|
-
const recencyA = ageA < 24 ? 0.1 : ageA < 168 ? 0.05 : 0;
|
|
359
|
-
const recencyB = ageB < 24 ? 0.1 : ageB < 168 ? 0.05 : 0;
|
|
360
|
-
const scoreA = a.similarity_score * 0.5 +
|
|
361
|
-
(a.entry.importance_score || 0.5) * 0.25 +
|
|
362
|
-
recencyA;
|
|
363
|
-
const scoreB = b.similarity_score * 0.5 +
|
|
364
|
-
(b.entry.importance_score || 0.5) * 0.25 +
|
|
365
|
-
recencyB;
|
|
366
|
-
return scoreB - scoreA;
|
|
340
|
+
const records = await getPlatformStorageRuntime().domains.memories.listByOwner(userId, personaId, {
|
|
341
|
+
limit: 10000,
|
|
342
|
+
...(memoryTypes?.length ? { types: memoryTypes } : {}),
|
|
367
343
|
});
|
|
368
|
-
|
|
369
|
-
const
|
|
370
|
-
|
|
371
|
-
|
|
372
|
-
|
|
373
|
-
|
|
374
|
-
|
|
344
|
+
await this.backfillLegacy(records, embeddingModel);
|
|
345
|
+
const byId = new Map(records.map(record => [record.id, record]));
|
|
346
|
+
const hits = await getPlatformStorageRuntime().vectorStore.query({
|
|
347
|
+
actor: { userId },
|
|
348
|
+
namespace: MEMORY_VECTOR_NAMESPACE,
|
|
349
|
+
model: embeddingModel,
|
|
350
|
+
dimensions: embedding.length,
|
|
351
|
+
version: MEMORY_VECTOR_VERSION,
|
|
352
|
+
embedding,
|
|
353
|
+
limit: Math.min(normalizedTopK * 10, 100),
|
|
354
|
+
minScore: minSimilarity,
|
|
355
|
+
resourceIds: [personaId],
|
|
356
|
+
});
|
|
357
|
+
const now = Date.now();
|
|
358
|
+
const results = hits.flatMap(hit => {
|
|
359
|
+
const record = byId.get(hit.id);
|
|
360
|
+
if (!record)
|
|
361
|
+
return [];
|
|
362
|
+
const decayed = this.applyDecay(record.importanceScore, record.timestamp, record.accessCount, record.lastAccessed);
|
|
363
|
+
const ageHours = (now - record.timestamp) / (1000 * 60 * 60);
|
|
364
|
+
const recency = ageHours < 24 ? 0.1 : ageHours < 168 ? 0.05 : 0;
|
|
365
|
+
return [
|
|
366
|
+
{
|
|
367
|
+
entry: { ...entryFromRecord(record), importance_score: decayed },
|
|
368
|
+
similarity_score: hit.score,
|
|
369
|
+
relevance_rank: 0,
|
|
370
|
+
composite: hit.score * 0.5 + decayed * 0.25 + recency,
|
|
371
|
+
},
|
|
372
|
+
];
|
|
373
|
+
});
|
|
374
|
+
results.sort((left, right) => right.composite - left.composite);
|
|
375
|
+
const top = results.slice(0, normalizedTopK);
|
|
376
|
+
await getPlatformStorageRuntime().domains.memories.markAccessed(top.map(item => item.entry.id), userId, personaId, now);
|
|
377
|
+
return top.map(({ composite: _composite, ...result }, index) => ({
|
|
375
378
|
...result,
|
|
376
379
|
relevance_rank: index + 1,
|
|
377
380
|
}));
|
|
378
381
|
}
|
|
379
|
-
/**
|
|
380
|
-
* Update memory access tracking
|
|
381
|
-
*/
|
|
382
|
-
async updateMemoryAccess(memoryId) {
|
|
383
|
-
try {
|
|
384
|
-
const db = this.ensureDatabase();
|
|
385
|
-
const stmt = db.prepare(`
|
|
386
|
-
UPDATE persona_memories
|
|
387
|
-
SET access_count = COALESCE(access_count, 0) + 1,
|
|
388
|
-
last_accessed = ?
|
|
389
|
-
WHERE id = ?
|
|
390
|
-
`);
|
|
391
|
-
stmt.run(Date.now(), memoryId);
|
|
392
|
-
}
|
|
393
|
-
catch (error) {
|
|
394
|
-
logger.warn('[MemoryService] Failed to update memory access:', error);
|
|
395
|
-
}
|
|
396
|
-
}
|
|
397
|
-
/**
|
|
398
|
-
* Get all memories for a persona
|
|
399
|
-
*/
|
|
400
382
|
async getMemories(userId, personaId, limit = 100, offset = 0) {
|
|
401
|
-
const
|
|
402
|
-
|
|
403
|
-
SELECT id, user_id, persona_id, content, embedding, timestamp, context, importance_score
|
|
404
|
-
FROM persona_memories
|
|
405
|
-
WHERE user_id = ? AND persona_id = ?
|
|
406
|
-
ORDER BY timestamp DESC
|
|
407
|
-
LIMIT ? OFFSET ?
|
|
408
|
-
`);
|
|
409
|
-
const memories = stmt.all(userId, personaId, limit, offset);
|
|
410
|
-
return memories.map(toPersonaMemoryEntry);
|
|
383
|
+
const records = await getPlatformStorageRuntime().domains.memories.listByOwner(userId, personaId, { limit, offset });
|
|
384
|
+
return records.map(entryFromRecord);
|
|
411
385
|
}
|
|
412
|
-
/**
|
|
413
|
-
* Get memory count for a persona
|
|
414
|
-
*/
|
|
415
386
|
async getMemoryCount(userId, personaId) {
|
|
416
|
-
|
|
417
|
-
const stmt = db.prepare(`
|
|
418
|
-
SELECT COUNT(*) as count
|
|
419
|
-
FROM persona_memories
|
|
420
|
-
WHERE user_id = ? AND persona_id = ?
|
|
421
|
-
`);
|
|
422
|
-
const result = stmt.get(userId, personaId);
|
|
423
|
-
return result.count;
|
|
387
|
+
return getPlatformStorageRuntime().domains.memories.countByOwner(userId, personaId);
|
|
424
388
|
}
|
|
425
|
-
/**
|
|
426
|
-
* Get memory status for a persona
|
|
427
|
-
*/
|
|
428
389
|
async getMemoryStatus(userId, personaId) {
|
|
429
|
-
|
|
430
|
-
|
|
431
|
-
|
|
432
|
-
|
|
433
|
-
|
|
434
|
-
|
|
435
|
-
memory_count: memoryCount,
|
|
436
|
-
last_backup: undefined, // Could be implemented later
|
|
437
|
-
size_mb: Math.round(sizeMb * 100) / 100, // Round to 2 decimal places
|
|
438
|
-
};
|
|
439
|
-
}
|
|
440
|
-
catch (error) {
|
|
441
|
-
logger.error('Error getting memory status:', error);
|
|
442
|
-
throw new Error('Failed to get memory status');
|
|
443
|
-
}
|
|
390
|
+
const count = await this.getMemoryCount(userId, personaId);
|
|
391
|
+
return {
|
|
392
|
+
memory_count: count,
|
|
393
|
+
last_backup: undefined,
|
|
394
|
+
size_mb: Math.round(((count * 1024) / (1024 * 1024)) * 100) / 100,
|
|
395
|
+
};
|
|
444
396
|
}
|
|
445
|
-
/**
|
|
446
|
-
* Delete all memories for a persona (wipe)
|
|
447
|
-
*/
|
|
448
397
|
async wipeMemories(userId, personaId) {
|
|
449
|
-
|
|
450
|
-
|
|
451
|
-
|
|
452
|
-
|
|
453
|
-
|
|
454
|
-
|
|
455
|
-
return result.changes;
|
|
398
|
+
await getPlatformStorageRuntime().vectorStore.delete({
|
|
399
|
+
actor: { userId },
|
|
400
|
+
namespace: MEMORY_VECTOR_NAMESPACE,
|
|
401
|
+
resourceId: personaId,
|
|
402
|
+
});
|
|
403
|
+
return getPlatformStorageRuntime().domains.memories.deleteAllByOwner(userId, personaId);
|
|
456
404
|
}
|
|
457
|
-
/**
|
|
458
|
-
* Export memories for backup
|
|
459
|
-
*/
|
|
460
405
|
async exportMemories(userId, personaId) {
|
|
461
|
-
return this.getMemories(userId, personaId, 10000);
|
|
406
|
+
return this.getMemories(userId, personaId, 10000, 0);
|
|
462
407
|
}
|
|
463
|
-
/**
|
|
464
|
-
* Import memories from backup
|
|
465
|
-
*/
|
|
466
408
|
async importMemories(memories, targetUserId) {
|
|
467
409
|
let imported = 0;
|
|
468
|
-
const
|
|
469
|
-
const stmt = db.prepare(`
|
|
470
|
-
INSERT INTO persona_memories (
|
|
471
|
-
id, user_id, persona_id, content, embedding, timestamp, context, importance_score
|
|
472
|
-
) VALUES (?, ?, ?, ?, ?, ?, ?, ?)
|
|
473
|
-
`);
|
|
410
|
+
const repository = getPlatformStorageRuntime().domains.memories;
|
|
474
411
|
for (const memory of memories) {
|
|
412
|
+
const record = {
|
|
413
|
+
id: memory.id,
|
|
414
|
+
userId: targetUserId,
|
|
415
|
+
personaId: memory.persona_id,
|
|
416
|
+
content: memory.content,
|
|
417
|
+
timestamp: memory.timestamp,
|
|
418
|
+
...(memory.context ? { context: memory.context } : {}),
|
|
419
|
+
importanceScore: validateImportance(memory.importance_score ?? 0.5),
|
|
420
|
+
memoryType: classifyMemoryType(memory.content),
|
|
421
|
+
accessCount: 0,
|
|
422
|
+
decayFactor: 1,
|
|
423
|
+
};
|
|
475
424
|
try {
|
|
476
|
-
|
|
477
|
-
|
|
478
|
-
|
|
425
|
+
await repository.insert(record);
|
|
426
|
+
if (memory.embedding?.length) {
|
|
427
|
+
await this.indexRecord(record, 'legacy-import', memory.embedding);
|
|
428
|
+
}
|
|
429
|
+
imported += 1;
|
|
479
430
|
}
|
|
480
431
|
catch (error) {
|
|
481
432
|
logger.error('Failed to import memory:', error);
|
|
482
|
-
// Continue with next memory
|
|
483
433
|
}
|
|
484
434
|
}
|
|
485
435
|
return imported;
|
|
486
436
|
}
|
|
487
|
-
|
|
488
|
-
|
|
489
|
-
*/
|
|
490
|
-
async updateMemoryImportance(memoryId, importanceScore) {
|
|
491
|
-
const db = this.ensureDatabase();
|
|
492
|
-
const stmt = db.prepare(`
|
|
493
|
-
UPDATE persona_memories
|
|
494
|
-
SET importance_score = ?
|
|
495
|
-
WHERE id = ?
|
|
496
|
-
`);
|
|
497
|
-
const result = stmt.run(importanceScore, memoryId);
|
|
498
|
-
return result.changes > 0;
|
|
437
|
+
async updateMemoryImportance(memoryId, userId, personaId, importanceScore) {
|
|
438
|
+
return getPlatformStorageRuntime().domains.memories.updateImportance(memoryId, userId, personaId, validateImportance(importanceScore));
|
|
499
439
|
}
|
|
500
|
-
/**
|
|
501
|
-
* Delete old memories based on retention policy
|
|
502
|
-
*/
|
|
503
440
|
async cleanupOldMemories(userId, personaId, retentionDays) {
|
|
504
|
-
const
|
|
505
|
-
const
|
|
506
|
-
|
|
507
|
-
|
|
508
|
-
|
|
509
|
-
|
|
510
|
-
|
|
511
|
-
|
|
512
|
-
|
|
441
|
+
const repository = getPlatformStorageRuntime().domains.memories;
|
|
442
|
+
const ids = await repository.findOldLowImportanceIds(userId, personaId, Date.now() - retentionDays * 24 * 60 * 60 * 1000, 0.7);
|
|
443
|
+
if (ids.length) {
|
|
444
|
+
await getPlatformStorageRuntime().vectorStore.delete({
|
|
445
|
+
actor: { userId },
|
|
446
|
+
namespace: MEMORY_VECTOR_NAMESPACE,
|
|
447
|
+
ids,
|
|
448
|
+
});
|
|
449
|
+
await repository.deleteIds(ids, userId, personaId);
|
|
450
|
+
}
|
|
451
|
+
return ids.length;
|
|
513
452
|
}
|
|
514
|
-
/**
|
|
515
|
-
* Consolidate similar memories to reduce redundancy and save space
|
|
516
|
-
* This merges memories with high similarity into a single, more comprehensive memory
|
|
517
|
-
*/
|
|
518
453
|
async consolidateMemories(userId, personaId, embeddingModel, similarityThreshold = 0.8) {
|
|
519
|
-
const
|
|
454
|
+
const repository = getPlatformStorageRuntime().domains.memories;
|
|
455
|
+
const records = await repository.listByOwner(userId, personaId, {
|
|
456
|
+
limit: 10000,
|
|
457
|
+
});
|
|
458
|
+
const remaining = new Map(records.map(record => [record.id, record]));
|
|
520
459
|
let consolidated = 0;
|
|
521
460
|
let deleted = 0;
|
|
522
|
-
|
|
523
|
-
|
|
524
|
-
|
|
525
|
-
|
|
526
|
-
|
|
527
|
-
|
|
528
|
-
|
|
529
|
-
|
|
530
|
-
const
|
|
531
|
-
|
|
532
|
-
|
|
533
|
-
|
|
534
|
-
|
|
535
|
-
|
|
536
|
-
|
|
537
|
-
|
|
538
|
-
|
|
539
|
-
|
|
540
|
-
|
|
541
|
-
|
|
542
|
-
|
|
543
|
-
|
|
544
|
-
|
|
545
|
-
|
|
546
|
-
|
|
547
|
-
|
|
548
|
-
|
|
549
|
-
|
|
550
|
-
|
|
551
|
-
|
|
552
|
-
|
|
553
|
-
|
|
554
|
-
|
|
555
|
-
|
|
556
|
-
|
|
557
|
-
...similarMemories.map(m => m.content),
|
|
558
|
-
];
|
|
559
|
-
const consolidatedContent = createConsolidatedContent(allContent);
|
|
560
|
-
// Calculate combined importance (weighted average with boost)
|
|
561
|
-
const allImportances = [
|
|
562
|
-
memory.importance_score,
|
|
563
|
-
...similarMemories.map(m => m.importance_score),
|
|
564
|
-
];
|
|
565
|
-
const avgImportance = allImportances.reduce((a, b) => a + b, 0) / allImportances.length;
|
|
566
|
-
const consolidatedImportance = Math.min(1.0, avgImportance * 1.1); // 10% boost for consolidation
|
|
567
|
-
// Use the most common memory type
|
|
568
|
-
const types = [
|
|
569
|
-
memory.memory_type,
|
|
570
|
-
...similarMemories.map(m => m.memory_type),
|
|
571
|
-
].filter(Boolean);
|
|
572
|
-
const typeCount = {};
|
|
573
|
-
types.forEach(t => {
|
|
574
|
-
if (t)
|
|
575
|
-
typeCount[t] = (typeCount[t] || 0) + 1;
|
|
576
|
-
});
|
|
577
|
-
const consolidatedType = Object.entries(typeCount).sort((a, b) => b[1] - a[1])[0]?.[0] ||
|
|
578
|
-
'general';
|
|
579
|
-
// Generate new embedding for consolidated content
|
|
580
|
-
const newEmbedding = await this.generateEmbedding(consolidatedContent, embeddingModel, userId);
|
|
581
|
-
// Store consolidated memory
|
|
582
|
-
const consolidatedFromIds = [
|
|
583
|
-
memory.id,
|
|
584
|
-
...similarMemories.map(m => m.id),
|
|
585
|
-
];
|
|
586
|
-
const insertStmt = db.prepare(`
|
|
587
|
-
INSERT INTO persona_memories (
|
|
588
|
-
id, user_id, persona_id, content, embedding, timestamp, context, importance_score,
|
|
589
|
-
memory_type, access_count, last_accessed, decay_factor, consolidated_from
|
|
590
|
-
) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)
|
|
591
|
-
`);
|
|
592
|
-
insertStmt.run(uuidv4(), userId, personaId, consolidatedContent, newEmbedding ? embeddingArrayToBuffer(newEmbedding) : null, Date.now(), `Consolidated from ${consolidatedFromIds.length} memories`, consolidatedImportance, consolidatedType, similarMemories.reduce((sum, m) => sum + (m.access_count || 0), memory.access_count || 0), Date.now(), 1.0, JSON.stringify(consolidatedFromIds));
|
|
593
|
-
// Mark original memories for deletion
|
|
594
|
-
toDelete.push(...consolidatedFromIds);
|
|
595
|
-
consolidated++;
|
|
596
|
-
}
|
|
461
|
+
for (const record of records) {
|
|
462
|
+
if (!remaining.has(record.id))
|
|
463
|
+
continue;
|
|
464
|
+
const embedding = await this.generateEmbedding(record.content, embeddingModel, userId);
|
|
465
|
+
if (!embedding)
|
|
466
|
+
continue;
|
|
467
|
+
await this.indexRecord(record, embeddingModel, embedding);
|
|
468
|
+
const similar = await this.findSimilarMemories(userId, personaId, embedding, embeddingModel, similarityThreshold);
|
|
469
|
+
const matches = similar
|
|
470
|
+
.map(item => remaining.get(item.entry.id))
|
|
471
|
+
.filter((item) => Boolean(item && item.id !== record.id));
|
|
472
|
+
if (matches.length === 0)
|
|
473
|
+
continue;
|
|
474
|
+
const group = [record, ...matches];
|
|
475
|
+
const content = createConsolidatedContent(group.map(item => item.content));
|
|
476
|
+
const importance = Math.min(1, (group.reduce((sum, item) => sum + item.importanceScore, 0) /
|
|
477
|
+
group.length) *
|
|
478
|
+
1.1);
|
|
479
|
+
const combinedEmbedding = await this.generateEmbedding(content, embeddingModel, userId);
|
|
480
|
+
const combinedRecord = {
|
|
481
|
+
id: uuidv4(),
|
|
482
|
+
userId,
|
|
483
|
+
personaId,
|
|
484
|
+
content,
|
|
485
|
+
timestamp: Date.now(),
|
|
486
|
+
context: `Consolidated from ${group.length} memories`,
|
|
487
|
+
importanceScore: importance,
|
|
488
|
+
memoryType: record.memoryType,
|
|
489
|
+
accessCount: 0,
|
|
490
|
+
decayFactor: 1,
|
|
491
|
+
consolidatedFrom: group.map(item => item.id),
|
|
492
|
+
};
|
|
493
|
+
await repository.insert(combinedRecord);
|
|
494
|
+
try {
|
|
495
|
+
await this.indexRecord(combinedRecord, embeddingModel, combinedEmbedding || undefined);
|
|
597
496
|
}
|
|
598
|
-
|
|
599
|
-
|
|
600
|
-
|
|
601
|
-
DELETE FROM persona_memories WHERE id IN (${toDelete.map(() => '?').join(',')})
|
|
602
|
-
`);
|
|
603
|
-
deleteStmt.run(...toDelete);
|
|
604
|
-
deleted = toDelete.length;
|
|
497
|
+
catch (error) {
|
|
498
|
+
await repository.deleteIds([combinedRecord.id], userId, personaId);
|
|
499
|
+
throw error;
|
|
605
500
|
}
|
|
606
|
-
|
|
607
|
-
|
|
608
|
-
|
|
609
|
-
|
|
501
|
+
const ids = group.map(item => item.id);
|
|
502
|
+
await getPlatformStorageRuntime().vectorStore.delete({
|
|
503
|
+
actor: { userId },
|
|
504
|
+
namespace: MEMORY_VECTOR_NAMESPACE,
|
|
505
|
+
ids,
|
|
506
|
+
});
|
|
507
|
+
await repository.deleteIds(ids, userId, personaId);
|
|
508
|
+
for (const id of ids)
|
|
509
|
+
remaining.delete(id);
|
|
510
|
+
remaining.set(combinedRecord.id, combinedRecord);
|
|
511
|
+
consolidated += 1;
|
|
512
|
+
deleted += ids.length;
|
|
610
513
|
}
|
|
611
514
|
return { consolidated, deleted };
|
|
612
515
|
}
|
|
613
|
-
/**
|
|
614
|
-
* Get memory statistics for a persona
|
|
615
|
-
*/
|
|
616
516
|
async getMemoryStats(userId, personaId) {
|
|
617
|
-
const
|
|
618
|
-
// Get counts by type
|
|
619
|
-
const typeStmt = db.prepare(`
|
|
620
|
-
SELECT memory_type, COUNT(*) as count
|
|
621
|
-
FROM persona_memories
|
|
622
|
-
WHERE user_id = ? AND persona_id = ?
|
|
623
|
-
GROUP BY memory_type
|
|
624
|
-
`);
|
|
625
|
-
const typeCounts = typeStmt.all(userId, personaId);
|
|
626
|
-
// Get aggregate stats
|
|
627
|
-
const statsStmt = db.prepare(`
|
|
628
|
-
SELECT
|
|
629
|
-
COUNT(*) as total_count,
|
|
630
|
-
AVG(importance_score) as avg_importance,
|
|
631
|
-
MIN(timestamp) as oldest_memory,
|
|
632
|
-
MAX(timestamp) as newest_memory,
|
|
633
|
-
SUM(COALESCE(access_count, 0)) as total_accesses
|
|
634
|
-
FROM persona_memories
|
|
635
|
-
WHERE user_id = ? AND persona_id = ?
|
|
636
|
-
`);
|
|
637
|
-
const stats = statsStmt.get(userId, personaId);
|
|
638
|
-
const byType = {};
|
|
639
|
-
typeCounts.forEach(({ memory_type, count }) => {
|
|
640
|
-
byType[memory_type || 'general'] = count;
|
|
641
|
-
});
|
|
517
|
+
const stats = await getPlatformStorageRuntime().domains.memories.statistics(userId, personaId);
|
|
642
518
|
return {
|
|
643
|
-
total_count: stats.
|
|
644
|
-
by_type: byType,
|
|
645
|
-
avg_importance: stats.
|
|
646
|
-
oldest_memory: stats.
|
|
647
|
-
newest_memory: stats.
|
|
648
|
-
total_accesses: stats.
|
|
519
|
+
total_count: stats.totalCount,
|
|
520
|
+
by_type: stats.byType,
|
|
521
|
+
avg_importance: stats.averageImportance,
|
|
522
|
+
oldest_memory: stats.oldestMemory,
|
|
523
|
+
newest_memory: stats.newestMemory,
|
|
524
|
+
total_accesses: stats.totalAccesses,
|
|
649
525
|
};
|
|
650
526
|
}
|
|
651
|
-
/**
|
|
652
|
-
* Apply decay to all memories (should be called periodically)
|
|
653
|
-
*/
|
|
654
527
|
async applyGlobalDecay(userId, personaId) {
|
|
655
|
-
const
|
|
656
|
-
|
|
657
|
-
|
|
658
|
-
|
|
659
|
-
FROM persona_memories
|
|
660
|
-
WHERE user_id = ? AND persona_id = ?
|
|
661
|
-
`);
|
|
662
|
-
const memories = selectStmt.all(userId, personaId);
|
|
528
|
+
const repository = getPlatformStorageRuntime().domains.memories;
|
|
529
|
+
const records = await repository.listByOwner(userId, personaId, {
|
|
530
|
+
limit: 10000,
|
|
531
|
+
});
|
|
663
532
|
let updated = 0;
|
|
664
|
-
const
|
|
665
|
-
|
|
666
|
-
|
|
667
|
-
|
|
668
|
-
|
|
669
|
-
|
|
670
|
-
const newImportance = this.applyDecay(memory.importance_score, memory.timestamp, memory.access_count || 0, memory.last_accessed || undefined);
|
|
671
|
-
// Only update if importance changed significantly
|
|
672
|
-
if (Math.abs(newImportance - memory.importance_score) > 0.01) {
|
|
673
|
-
const decayFactor = newImportance / memory.importance_score;
|
|
674
|
-
updateStmt.run(newImportance, decayFactor, memory.id);
|
|
675
|
-
updated++;
|
|
676
|
-
}
|
|
533
|
+
for (const record of records) {
|
|
534
|
+
const importance = this.applyDecay(record.importanceScore, record.timestamp, record.accessCount, record.lastAccessed);
|
|
535
|
+
if (Math.abs(importance - record.importanceScore) <= 0.01)
|
|
536
|
+
continue;
|
|
537
|
+
await repository.updateImportance(record.id, userId, personaId, importance, record.importanceScore === 0 ? 1 : importance / record.importanceScore);
|
|
538
|
+
updated += 1;
|
|
677
539
|
}
|
|
678
|
-
logger.debug(`[MEMORY] Applied decay to ${updated} memories`);
|
|
679
540
|
return updated;
|
|
680
541
|
}
|
|
681
|
-
/**
|
|
682
|
-
* Get important memories (facts, preferences, instructions) that should always be included
|
|
683
|
-
*/
|
|
684
542
|
async getCoreMemories(userId, personaId, limit = 5) {
|
|
685
|
-
const
|
|
686
|
-
|
|
687
|
-
|
|
688
|
-
|
|
689
|
-
|
|
690
|
-
|
|
691
|
-
|
|
692
|
-
|
|
693
|
-
|
|
694
|
-
|
|
695
|
-
`);
|
|
696
|
-
const memories = stmt.all(userId, personaId, limit);
|
|
697
|
-
return memories.map(toPersonaMemoryEntry);
|
|
543
|
+
const records = await getPlatformStorageRuntime().domains.memories.listByOwner(userId, personaId, {
|
|
544
|
+
limit: Math.min(Math.max(limit, 1), 100),
|
|
545
|
+
types: ['fact', 'preference', 'instruction'],
|
|
546
|
+
minimumImportance: 0.7,
|
|
547
|
+
});
|
|
548
|
+
return records
|
|
549
|
+
.sort((left, right) => right.importanceScore - left.importanceScore ||
|
|
550
|
+
right.accessCount - left.accessCount)
|
|
551
|
+
.slice(0, limit)
|
|
552
|
+
.map(entryFromRecord);
|
|
698
553
|
}
|
|
699
554
|
}
|
|
700
555
|
export const memoryService = new MemoryService();
|