212ff3ff80
Introduce UMS ingest/snapshot pipeline, Context Planner with multi-source recall, runtime context injection, canonical user mapping, and session snapshot loading on auth/me. Co-authored-by: Cursor <cursoragent@cursor.com>
58 lines
1.6 KiB
JavaScript
58 lines
1.6 KiB
JavaScript
import fs from 'node:fs';
|
|
import path from 'node:path';
|
|
import { fileURLToPath } from 'node:url';
|
|
import mysql from 'mysql2/promise';
|
|
|
|
const __dirname = path.dirname(fileURLToPath(import.meta.url));
|
|
|
|
export function isUmsDatabaseConfigured() {
|
|
return Boolean(
|
|
process.env.UMS_DATABASE_URL ||
|
|
(process.env.UMS_MYSQL_HOST && process.env.UMS_MYSQL_DATABASE),
|
|
);
|
|
}
|
|
|
|
function poolOptions() {
|
|
return {
|
|
waitForConnections: true,
|
|
connectionLimit: Math.max(1, Number(process.env.UMS_MYSQL_POOL_SIZE ?? 10)),
|
|
queueLimit: 0,
|
|
timezone: 'Z',
|
|
};
|
|
}
|
|
|
|
export function createUmsPool() {
|
|
if (!isUmsDatabaseConfigured()) {
|
|
throw new Error('UMS MySQL 未配置,请设置 UMS_DATABASE_URL 或 UMS_MYSQL_*');
|
|
}
|
|
if (process.env.UMS_DATABASE_URL) {
|
|
return mysql.createPool({ uri: process.env.UMS_DATABASE_URL, ...poolOptions() });
|
|
}
|
|
return mysql.createPool({
|
|
host: process.env.UMS_MYSQL_HOST ?? 'localhost',
|
|
port: Number(process.env.UMS_MYSQL_PORT ?? 3306),
|
|
user: process.env.UMS_MYSQL_USER ?? 'boot',
|
|
password: process.env.UMS_MYSQL_PASSWORD ?? '',
|
|
database: process.env.UMS_MYSQL_DATABASE ?? 'memind_user_model',
|
|
...poolOptions(),
|
|
});
|
|
}
|
|
|
|
export async function runUmsSchema(pool) {
|
|
const schemaPath = path.join(__dirname, '..', 'schemas', 'memind_user_model-v0.sql');
|
|
const sql = fs.readFileSync(schemaPath, 'utf8');
|
|
const statements = sql
|
|
.split(';')
|
|
.map((statement) =>
|
|
statement
|
|
.split('\n')
|
|
.filter((line) => !line.trim().startsWith('--'))
|
|
.join('\n')
|
|
.trim(),
|
|
)
|
|
.filter(Boolean);
|
|
for (const statement of statements) {
|
|
await pool.query(statement);
|
|
}
|
|
}
|