refactor(cli): centralize memory manager setup wiring

This commit is contained in:
Peter Steinberger
2026-02-19 06:43:26 +00:00
parent fa31f1cad2
commit 858286aecb

View File

@@ -28,6 +28,7 @@ type MemoryCommandOptions = {
};
type MemoryManager = NonNullable<MemorySearchManagerResult["manager"]>;
type MemoryManagerPurpose = Parameters<typeof getMemorySearchManager>[0]["purpose"];
type MemorySourceName = "memory" | "sessions";
@@ -82,6 +83,31 @@ function formatExtraPaths(workspaceDir: string, extraPaths: string[]): string[]
return normalizeExtraMemoryPaths(workspaceDir, extraPaths).map((entry) => shortenHomePath(entry));
}
async function withMemoryManagerForAgent(params: {
cfg: ReturnType<typeof loadConfig>;
agentId: string;
purpose?: MemoryManagerPurpose;
run: (manager: MemoryManager) => Promise<void>;
}): Promise<void> {
const managerParams: Parameters<typeof getMemorySearchManager>[0] = {
cfg: params.cfg,
agentId: params.agentId,
};
if (params.purpose) {
managerParams.purpose = params.purpose;
}
await withManager<MemoryManager>({
getManager: () => getMemorySearchManager(managerParams),
onMissing: (error) => defaultRuntime.log(error ?? "Memory search disabled."),
onCloseError: (err) =>
defaultRuntime.error(`Memory manager close failed: ${formatErrorMessage(err)}`),
close: async (manager) => {
await manager.close?.();
},
run: params.run,
});
}
async function checkReadableFile(pathname: string): Promise<{ exists: boolean; issue?: string }> {
try {
await fs.access(pathname, fsSync.constants.R_OK);
@@ -283,14 +309,10 @@ export async function runMemoryStatus(opts: MemoryCommandOptions) {
for (const agentId of agentIds) {
const managerPurpose = opts.index ? "default" : "status";
await withManager<MemoryManager>({
getManager: () => getMemorySearchManager({ cfg, agentId, purpose: managerPurpose }),
onMissing: (error) => defaultRuntime.log(error ?? "Memory search disabled."),
onCloseError: (err) =>
defaultRuntime.error(`Memory manager close failed: ${formatErrorMessage(err)}`),
close: async (manager) => {
await manager.close?.();
},
await withMemoryManagerForAgent({
cfg,
agentId,
purpose: managerPurpose,
run: async (manager) => {
const deep = Boolean(opts.deep || opts.index);
let embeddingProbe:
@@ -551,14 +573,9 @@ export function registerMemoryCli(program: Command) {
const cfg = loadConfig();
const agentIds = resolveAgentIds(cfg, opts.agent);
for (const agentId of agentIds) {
await withManager<MemoryManager>({
getManager: () => getMemorySearchManager({ cfg, agentId }),
onMissing: (error) => defaultRuntime.log(error ?? "Memory search disabled."),
onCloseError: (err) =>
defaultRuntime.error(`Memory manager close failed: ${formatErrorMessage(err)}`),
close: async (manager) => {
await manager.close?.();
},
await withMemoryManagerForAgent({
cfg,
agentId,
run: async (manager) => {
try {
const syncFn = manager.sync ? manager.sync.bind(manager) : undefined;
@@ -700,14 +717,9 @@ export function registerMemoryCli(program: Command) {
) => {
const cfg = loadConfig();
const agentId = resolveAgent(cfg, opts.agent);
await withManager<MemoryManager>({
getManager: () => getMemorySearchManager({ cfg, agentId }),
onMissing: (error) => defaultRuntime.log(error ?? "Memory search disabled."),
onCloseError: (err) =>
defaultRuntime.error(`Memory manager close failed: ${formatErrorMessage(err)}`),
close: async (manager) => {
await manager.close?.();
},
await withMemoryManagerForAgent({
cfg,
agentId,
run: async (manager) => {
let results: Awaited<ReturnType<typeof manager.search>>;
try {