Merge Memory V2 runtime facade

This commit is contained in:
john
2026-07-03 09:46:03 +08:00
parent 7005c2a834
commit 20116b161f
69 changed files with 11869 additions and 27 deletions
+33 -8
View File
@@ -164,6 +164,8 @@ import { startScheduleReminderWorker } from './schedule-reminder-worker.mjs';
import { createLlmProviderService, RELAY_BOOTSTRAP } from './llm-providers.mjs';
import { createSessionSnapshotService } from './session-snapshot.mjs';
import { createConversationMemoryService } from './conversation-memory.mjs';
import { createManagedMemoryV2Runtime } from './memory-v2-runtime.mjs';
import { createMemoryV2AdminConfigService } from './memory-v2-admin-config.mjs';
import { createExperienceService } from './experience-service.mjs';
import { attachAsrRoutes } from './asr-proxy.mjs';
import { isNativeH5ApiPath } from './policies.mjs';
@@ -283,6 +285,8 @@ let agentRunGateway = null;
let toolGateway = null;
let sessionSnapshotService = null;
let conversationMemoryService = null;
let memoryV2 = null;
let memoryV2ConfigService = null;
let mindSpace = null;
let mindSpaceAssets = null;
let mindSpaceAudit = null;
@@ -516,6 +520,11 @@ async function bootstrapUserAuth() {
console.warn('LLM provider boot sync skipped:', err instanceof Error ? err.message : err);
});
conversationMemoryService = createConversationMemoryService(pool);
memoryV2ConfigService = createMemoryV2AdminConfigService(pool);
memoryV2 = await createManagedMemoryV2Runtime({
legacyMemoryService: conversationMemoryService,
configService: memoryV2ConfigService,
});
sessionSnapshotService = createSessionSnapshotService(pool, {
conversationMemoryService,
});
@@ -528,6 +537,7 @@ async function bootstrapUserAuth() {
subscriptionService,
sessionSnapshotService,
conversationMemoryService,
memoryV2,
localFetchAsset: mindSpaceAssets
? async (userId, assetId) => {
const { asset, path: assetPath } = await mindSpaceAssets.readAsset(userId, assetId);
@@ -1866,7 +1876,8 @@ async function syncUserMemoriesIntoSession(userId, sessionId) {
}
api.post('/user-memory/v1/remember-recent', async (req, res) => {
if (!conversationMemoryService?.isEnabled?.()) {
const memoryStatus = await memoryV2?.getStatus?.().catch(() => null);
if (!memoryStatus?.enabled) {
return res.status(503).json({ message: '长期记忆功能未启用' });
}
if (!tkmindProxy) {
@@ -1886,13 +1897,18 @@ api.post('/user-memory/v1/remember-recent', async (req, res) => {
try {
const messages = await loadUserVisibleConversation(sessionId);
const result = await conversationMemoryService.saveAndAnalyze(
const result = await memoryV2.write({
userId: req.currentUser.id,
sessionId,
req.currentUser.id,
messages,
);
});
const syncedToSession = await syncUserMemoriesIntoSession(req.currentUser.id, sessionId);
const memories = await conversationMemoryService.listMemories(req.currentUser.id, { limit: 200 });
const resolved = await memoryV2.resolve({
userId: req.currentUser.id,
sessionId,
limit: 200,
});
const memories = Array.isArray(resolved?.memories) ? resolved.memories : [];
return res.json({
ok: true,
analyzed: result.analyzed ?? 0,
@@ -1906,7 +1922,8 @@ api.post('/user-memory/v1/remember-recent', async (req, res) => {
});
api.post('/user-memory/v1/sync', async (req, res) => {
if (!conversationMemoryService?.isEnabled?.()) {
const memoryStatus = await memoryV2?.getStatus?.().catch(() => null);
if (!memoryStatus?.enabled) {
return res.status(503).json({ message: '长期记忆功能未启用' });
}
const capabilityState = await ensureUserMemoryCapability(req, res);
@@ -1922,9 +1939,17 @@ api.post('/user-memory/v1/sync', async (req, res) => {
}
try {
const result = await conversationMemoryService.analyzeUser(req.currentUser.id);
const result = await memoryV2.compact({
userId: req.currentUser.id,
sessionId,
});
const syncedToSession = await syncUserMemoriesIntoSession(req.currentUser.id, sessionId);
const memories = await conversationMemoryService.listMemories(req.currentUser.id, { limit: 200 });
const resolved = await memoryV2.resolve({
userId: req.currentUser.id,
sessionId,
limit: 200,
});
const memories = Array.isArray(resolved?.memories) ? resolved.memories : [];
return res.json({
ok: true,
analyzed: result.analyzed ?? 0,