fix(memory): close local embedding providers on timeout (#84048)

Summary:
- The branch adds a close lifecycle for local memory embedding providers, scoped memory search/index teardown for one agent, Active Memory timeout cleanup, focused tests, and a changelog entry.
- Reproducibility: yes. The linked issue gives a concrete OpenClaw 2026.5.18 Telegram Active Memory timeout pa ... current-main source inspection confirms there is no timeout cleanup for that local embedding provider path.

Automerge notes:
- PR branch already contained follow-up commit before automerge: fix(memory): close local embedding providers on timeout

Validation:
- ClawSweeper review passed for head 8e2e369b5c.
- Required merge gates passed before the squash merge.

Prepared head SHA: 8e2e369b5c
Review: https://github.com/openclaw/openclaw/pull/84048#issuecomment-4485705481

Co-authored-by: brokemac79 <martin_cleary@yahoo.co.uk>
Co-authored-by: clawsweeper <274271284+clawsweeper[bot]@users.noreply.github.com>
Co-authored-by: clawsweeper[bot] <274271284+clawsweeper[bot]@users.noreply.github.com>
Approved-by: hxy91819
Co-authored-by: hxy91819 <8814856+hxy91819@users.noreply.github.com>
This commit is contained in:
clawsweeper[bot]
2026-05-19 09:19:09 +00:00
committed by GitHub
parent aef93881af
commit 1c1c75df72
25 changed files with 750 additions and 33 deletions

View File

@@ -7,16 +7,30 @@ declare module "node-llama-cpp" {
export type LlamaEmbeddingContext = {
getEmbeddingFor: (text: string) => Promise<LlamaEmbedding>;
dispose?: () => Promise<void> | void;
};
export type LlamaModel = {
createEmbeddingContext: () => Promise<LlamaEmbeddingContext>;
createEmbeddingContext: (options?: {
contextSize?: number | "auto";
createSignal?: AbortSignal;
}) => Promise<LlamaEmbeddingContext>;
dispose?: () => Promise<void> | void;
};
export type ResolveModelFileOptions = {
directory?: string;
signal?: AbortSignal;
};
export type Llama = {
loadModel: (params: { modelPath: string }) => Promise<LlamaModel>;
loadModel: (params: { modelPath: string; loadSignal?: AbortSignal }) => Promise<LlamaModel>;
dispose?: () => Promise<void> | void;
};
export function getLlama(params: { logLevel: LlamaLogLevel }): Promise<Llama>;
export function resolveModelFile(modelPath: string, cacheDir?: string): Promise<string>;
export function resolveModelFile(
modelPath: string,
optionsOrDirectory?: string | ResolveModelFileOptions,
): Promise<string>;
}