Files
memind/scripts/check-memory-v2-contracts.mjs
2026-07-03 09:46:03 +08:00

81 lines
2.2 KiB
JavaScript

#!/usr/bin/env node
import { createLegacyMemoryBackend } from '../memory-v2.mjs';
import { createMemoryV2PluginBackends } from '../memory-v2-plugin-backends.mjs';
import { createPgvectorMemoryBackend } from '../memory-v2-pgvector.mjs';
import { validateMemoryV2BackendSet } from '../memory-v2-backend-contract.mjs';
function usage() {
return `Usage:
node scripts/check-memory-v2-contracts.mjs [options]
Options:
--include-pgvector-adapter Include the real disabled pgvector adapter instead of its placeholder.
-h, --help Show this help.
`;
}
export function parseMemoryV2ContractArgs(argv = []) {
const options = {
includePgvectorAdapter: false,
help: false,
};
for (const arg of argv) {
if (arg === '--include-pgvector-adapter') {
options.includePgvectorAdapter = true;
} else if (arg === '-h' || arg === '--help') {
options.help = true;
} else {
throw new Error(`Unknown argument: ${arg}`);
}
}
return options;
}
function createSyntheticLegacyMemoryService() {
return {
async listMemories() {
return [];
},
async saveAndAnalyze() {
return { saved: 0, analyzed: 0, memories: 0 };
},
async analyzeUser() {
return { analyzed: 0, memories: 0 };
},
};
}
export async function runMemoryV2ContractCli({
argv = process.argv.slice(2),
stdout = process.stdout,
} = {}) {
const options = parseMemoryV2ContractArgs(argv);
if (options.help) {
stdout.write(usage());
return 0;
}
const backends = [
createLegacyMemoryBackend(createSyntheticLegacyMemoryService()),
];
if (options.includePgvectorAdapter) {
backends.push(createPgvectorMemoryBackend({ enabled: false }));
}
backends.push(...createMemoryV2PluginBackends({
exclude: options.includePgvectorAdapter ? ['pgvector'] : [],
}));
const report = validateMemoryV2BackendSet(backends);
stdout.write(`${JSON.stringify(report, null, 2)}\n`);
return report.ok ? 0 : 1;
}
if (import.meta.url === `file://${process.argv[1]}`) {
runMemoryV2ContractCli().then((code) => {
process.exitCode = code;
}).catch((err) => {
console.error(err instanceof Error ? err.message : err);
process.exitCode = 1;
});
}