@tencentdb-agent-memory/memory-tencentdb
Version:
Four-layer local memory system plugin for OpenClaw — auto-captures, structures, and profiles conversational knowledge using local LLM + SQLite vector search (L0→L1→L2→L3 pipeline)
40 lines (33 loc) • 1.25 kB
text/typescript
/**
* tdai_read_cos tool — reads memory pipeline artifacts (persona.md,
* scene_blocks/*.md, ...) by relative path via the SDK's `client.readFile`.
*/
import type { MemoryClient } from "@tencentdb-agent-memory/memory-sdk-ts";
interface Logger {
debug?: (msg: string) => void;
warn: (msg: string) => void;
}
export async function handleReadCos(
client: MemoryClient,
params: { path: string },
logger?: Logger,
) {
const { path } = params;
if (!path?.trim()) {
return { content: [{ type: "text" as const, text: "Path cannot be empty." }] };
}
// Security: reject path traversal
if (path.includes("..") || path.startsWith("/")) {
return { content: [{ type: "text" as const, text: `Invalid path: "${path}"` }] };
}
try {
logger?.debug?.(`[read-cos] read: "${path}"`);
const content = await client.readFile(path);
logger?.debug?.(`[read-cos] ✅ "${path}" (${content.length} chars)`);
return { content: [{ type: "text" as const, text: content }] };
} catch (err) {
const msg = err instanceof Error ? err.message : String(err);
logger?.warn(`[read-cos] Failed to read "${path}": ${msg}`);
return { content: [{ type: "text" as const, text: `Failed to read file: ${msg}` }] };
}
}