Files
openclaw/src/plugins/memory-state.ts
2026-03-27 22:24:54 +00:00

125 lines
3.5 KiB
TypeScript

import type { OpenClawConfig } from "../config/config.js";
import type { MemoryCitationsMode } from "../config/types.memory.js";
import type {
MemoryEmbeddingProbeResult,
MemoryProviderStatus,
MemorySyncProgressUpdate,
} from "../plugin-sdk/memory-core-host-engine-storage.js";
export type MemoryPromptSectionBuilder = (params: {
availableTools: Set<string>;
citationsMode?: MemoryCitationsMode;
}) => string[];
export type MemoryFlushPlan = {
softThresholdTokens: number;
forceFlushTranscriptBytes: number;
reserveTokensFloor: number;
prompt: string;
systemPrompt: string;
relativePath: string;
};
export type MemoryFlushPlanResolver = (params: {
cfg?: OpenClawConfig;
nowMs?: number;
}) => MemoryFlushPlan | null;
export type RegisteredMemorySearchManager = {
status(): MemoryProviderStatus;
probeEmbeddingAvailability(): Promise<MemoryEmbeddingProbeResult>;
probeVectorAvailability(): Promise<boolean>;
sync?(params?: {
reason?: string;
force?: boolean;
sessionFiles?: string[];
progress?: (update: MemorySyncProgressUpdate) => void;
}): Promise<void>;
close?(): Promise<void>;
};
export type MemoryRuntimeBackendConfig = {
backend: "builtin" | "qmd";
qmd?: object;
};
export type MemoryPluginRuntime = {
getMemorySearchManager(params: {
cfg: OpenClawConfig;
agentId: string;
purpose?: "default" | "status";
}): Promise<{
manager: RegisteredMemorySearchManager | null;
error?: string;
}>;
resolveMemoryBackendConfig(params: {
cfg: OpenClawConfig;
agentId: string;
}): MemoryRuntimeBackendConfig;
closeAllMemorySearchManagers?(): Promise<void>;
};
type MemoryPluginState = {
promptBuilder?: MemoryPromptSectionBuilder;
flushPlanResolver?: MemoryFlushPlanResolver;
runtime?: MemoryPluginRuntime;
};
const memoryPluginState: MemoryPluginState = {};
export function registerMemoryPromptSection(builder: MemoryPromptSectionBuilder): void {
memoryPluginState.promptBuilder = builder;
}
export function buildMemoryPromptSection(params: {
availableTools: Set<string>;
citationsMode?: MemoryCitationsMode;
}): string[] {
return memoryPluginState.promptBuilder?.(params) ?? [];
}
export function getMemoryPromptSectionBuilder(): MemoryPromptSectionBuilder | undefined {
return memoryPluginState.promptBuilder;
}
export function registerMemoryFlushPlanResolver(resolver: MemoryFlushPlanResolver): void {
memoryPluginState.flushPlanResolver = resolver;
}
export function resolveMemoryFlushPlan(params: {
cfg?: OpenClawConfig;
nowMs?: number;
}): MemoryFlushPlan | null {
return memoryPluginState.flushPlanResolver?.(params) ?? null;
}
export function getMemoryFlushPlanResolver(): MemoryFlushPlanResolver | undefined {
return memoryPluginState.flushPlanResolver;
}
export function registerMemoryRuntime(runtime: MemoryPluginRuntime): void {
memoryPluginState.runtime = runtime;
}
export function getMemoryRuntime(): MemoryPluginRuntime | undefined {
return memoryPluginState.runtime;
}
export function hasMemoryRuntime(): boolean {
return memoryPluginState.runtime !== undefined;
}
export function restoreMemoryPluginState(state: MemoryPluginState): void {
memoryPluginState.promptBuilder = state.promptBuilder;
memoryPluginState.flushPlanResolver = state.flushPlanResolver;
memoryPluginState.runtime = state.runtime;
}
export function clearMemoryPluginState(): void {
memoryPluginState.promptBuilder = undefined;
memoryPluginState.flushPlanResolver = undefined;
memoryPluginState.runtime = undefined;
}
export const _resetMemoryPluginState = clearMemoryPluginState;