UNPKG

@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)

60 lines (53 loc) 1.93 kB
import type { TaskPayload, TimerEntry } from "../core/state/types.js"; export interface LocalTimerTaskOptions { entry: TimerEntry; defaultInstanceId: string; now?: number; } export function createLocalTimerTask(options: LocalTimerTaskOptions): TaskPayload { const member = options.entry.member; const now = options.now ?? Date.now(); let taskType: TaskPayload["type"]; let instanceId: string; let sessionId: string; const firstColon = member.indexOf(":"); const prefix = firstColon > 0 ? member.slice(0, firstColon) : member; if (prefix === "offload-l1" || prefix === "offload-l15" || prefix === "offload-l2") { taskType = prefix; const rest = member.slice(firstColon + 1); const instanceEnd = rest.indexOf(":"); if (instanceEnd > 0) { instanceId = rest.slice(0, instanceEnd); sessionId = rest.slice(instanceEnd + 1); } else { instanceId = options.defaultInstanceId; sessionId = rest; } if (prefix === "offload-l2" && sessionId.endsWith(".mmd")) { const lastColon = sessionId.lastIndexOf(":"); if (lastColon > 0) { sessionId = sessionId.slice(0, lastColon); } } } else { const lastColon = member.lastIndexOf(":"); const suffix = lastColon >= 0 ? member.slice(lastColon + 1) : ""; sessionId = lastColon >= 0 ? member.slice(0, lastColon) : member; taskType = suffix === "L2_schedule" ? "L2" : suffix === "L1_idle" ? "L1" : "L3"; instanceId = options.defaultInstanceId; } let targetMmdFile: string | undefined; if (taskType === "offload-l2") { const mmdMatch = member.match(/(\d+-[^:]+\.mmd)$/); if (mmdMatch) targetMmdFile = mmdMatch[1]; } return { id: `${taskType}-${sessionId}-${now}`, type: taskType, instanceId, sessionId, priority: 0, createdAt: now, data: { triggeredBy: "timer_scanner", timerMember: member, instanceId, targetMmdFile }, }; }