Files
memind/server/portal-memory-session-services-bootstrap.mjs
T
2026-07-24 19:18:14 +08:00

153 lines
4.8 KiB
JavaScript

import { createAgentCodeRunAdminConfigService } from '../agent-code-run-admin-config.mjs';
import { createManagedChatIntentRouter } from '../chat-intent-router.mjs';
import { createConversationMemoryService } from '../conversation-memory.mjs';
import { createDirectChatService } from '../direct-chat-service.mjs';
import { createEpisodicMemoryService } from '../episodic-memory.mjs';
import { createMemoryV2AdminConfigService } from '../memory-v2-admin-config.mjs';
import { createManagedMemoryV2Runtime } from '../memory-v2-runtime.mjs';
import { createSessionSnapshotService } from '../session-snapshot.mjs';
import { createSessionStreamStore } from '../session-stream-store.mjs';
import { isSessionStreamReplayEnabled } from '../session-stream.mjs';
import { createSkillRuntimeAdminConfigService } from '../skill-runtime-admin-config.mjs';
import { createSystemDisclosurePolicyService } from '../system-disclosure-policy.mjs';
import { createWechatScheduleLlmConfigService } from '../wechat-schedule-llm-config.mjs';
export async function bootstrapPortalMemorySessionServices({
pool,
h5Root,
env = process.env,
llmProviderService,
userAuth,
sessionAccess,
logger = console,
createMemoryV2AdminConfigServiceFn =
createMemoryV2AdminConfigService,
createSkillRuntimeAdminConfigServiceFn =
createSkillRuntimeAdminConfigService,
createSystemDisclosurePolicyServiceFn =
createSystemDisclosurePolicyService,
createAgentCodeRunAdminConfigServiceFn =
createAgentCodeRunAdminConfigService,
createWechatScheduleLlmConfigServiceFn =
createWechatScheduleLlmConfigService,
createConversationMemoryServiceFn =
createConversationMemoryService,
createManagedMemoryV2RuntimeFn =
createManagedMemoryV2Runtime,
createEpisodicMemoryServiceFn =
createEpisodicMemoryService,
createSessionSnapshotServiceFn =
createSessionSnapshotService,
isSessionStreamReplayEnabledFn =
isSessionStreamReplayEnabled,
createSessionStreamStoreFn =
createSessionStreamStore,
createDirectChatServiceFn = createDirectChatService,
createManagedChatIntentRouterFn =
createManagedChatIntentRouter,
} = {}) {
if (
!pool ||
!h5Root ||
!llmProviderService ||
!userAuth ||
!sessionAccess
) {
throw new Error(
'bootstrapPortalMemorySessionServices requires memory and session dependencies',
);
}
const memoryV2ConfigService =
createMemoryV2AdminConfigServiceFn(pool);
const skillRuntimeConfigService =
createSkillRuntimeAdminConfigServiceFn(pool, {
h5Root,
});
const systemDisclosurePolicyService =
createSystemDisclosurePolicyServiceFn(pool);
await systemDisclosurePolicyService.initialize();
const agentCodeRunPolicyService =
createAgentCodeRunAdminConfigServiceFn(pool, { env });
const wechatScheduleLlmConfigService =
createWechatScheduleLlmConfigServiceFn(pool);
const getEffectiveEnv = async () => {
const state = await memoryV2ConfigService
.getRuntimeState()
.catch(() => null);
return {
...env,
...(state?.overrides ?? {}),
};
};
const conversationMemoryService =
createConversationMemoryServiceFn(pool, {
llmProviderService,
getEffectiveEnv,
});
const memoryV2 =
await createManagedMemoryV2RuntimeFn({
legacyMemoryService: conversationMemoryService,
configService: memoryV2ConfigService,
mysqlPool: pool,
});
const episodicMemoryService =
createEpisodicMemoryServiceFn(pool, {
getEffectiveEnv,
logger,
});
await episodicMemoryService
.ensureSchema()
.catch((error) => {
logger.warn(
'[episodic-memory] schema setup degraded; snapshot fallback remains available:',
error instanceof Error ? error.message : error,
);
});
const sessionSnapshotService =
createSessionSnapshotServiceFn(pool, {
conversationMemoryService,
memoryV2,
episodicMemoryService,
});
const sessionStreamStore =
isSessionStreamReplayEnabledFn()
? createSessionStreamStoreFn({ pool })
: null;
const directChatService = createDirectChatServiceFn({
userAuth,
sessionAccess,
llmProviderService,
sessionSnapshotService,
memoryV2,
conversationMemoryService,
episodicMemoryService,
});
const chatIntentRouter =
createManagedChatIntentRouterFn({
llmProviderService,
memoryV2,
conversationMemoryService,
episodicMemoryService,
configService: memoryV2ConfigService,
});
return {
memoryV2ConfigService,
skillRuntimeConfigService,
systemDisclosurePolicyService,
agentCodeRunPolicyService,
wechatScheduleLlmConfigService,
conversationMemoryService,
memoryV2,
episodicMemoryService,
sessionSnapshotService,
sessionStreamStore,
directChatService,
chatIntentRouter,
getEffectiveEnv,
};
}