fix: adding login and fixing the plugin to follow the openclaw plugin standards (#4686)

This commit is contained in:
Kartik
2026-04-03 20:59:23 +05:30
committed by GitHub
parent 66230b3f1f
commit cfb3f58e4a
33 changed files with 5254 additions and 1376 deletions
+39 -15
View File
@@ -8,7 +8,12 @@
* 4. Format by category with importance scores
*/
import type { Mem0Provider, MemoryItem, SkillsConfig, SearchOptions } from "./types.ts";
import type {
Mem0Provider,
MemoryItem,
SkillsConfig,
SearchOptions,
} from "./types.ts";
// ============================================================================
// Defaults
@@ -51,7 +56,10 @@ interface RecallResult {
function getMemoryCategory(memory: MemoryItem): string {
// Check metadata first (skill-stored memories have explicit category)
if (memory.metadata?.category && typeof memory.metadata.category === "string") {
if (
memory.metadata?.category &&
typeof memory.metadata.category === "string"
) {
return memory.metadata.category;
}
// Check categories array (mem0-extracted memories)
@@ -62,7 +70,10 @@ function getMemoryCategory(memory: MemoryItem): string {
}
function getMemoryImportance(memory: MemoryItem): number {
if (memory.metadata?.importance && typeof memory.metadata.importance === "number") {
if (
memory.metadata?.importance &&
typeof memory.metadata.importance === "number"
) {
return memory.metadata.importance;
}
// Default importance by category
@@ -70,15 +81,15 @@ function getMemoryImportance(memory: MemoryItem): number {
const defaults: Record<string, number> = {
identity: 0.95,
configuration: 0.95,
rule: 0.90,
rule: 0.9,
preference: 0.85,
decision: 0.80,
technical: 0.80,
decision: 0.8,
technical: 0.8,
relationship: 0.75,
project: 0.75,
operational: 0.60,
operational: 0.6,
};
return defaults[cat] ?? 0.50;
return defaults[cat] ?? 0.5;
}
// ============================================================================
@@ -135,8 +146,9 @@ function budgetMemories(
if (selected.length >= maxMemories) break;
const memTokens = estimateTokens(memory.memory);
const isIdentity = getMemoryCategory(memory) === "identity" ||
getMemoryCategory(memory) === "configuration";
const isIdentity =
getMemoryCategory(memory) === "identity" ||
getMemoryCategory(memory) === "configuration";
// Identity/config always included if flag is set
if (identityAlwaysInclude && isIdentity) {
@@ -188,7 +200,9 @@ function formatRecalledMemories(
lines.push(`${label}:`);
for (const mem of mems) {
const imp = getMemoryImportance(mem);
const cats = mem.categories?.length ? ` [${mem.categories.join(", ")}]` : "";
const cats = mem.categories?.length
? ` [${mem.categories.join(", ")}]`
: "";
lines.push(`- ${mem.memory}${cats} (${Math.round(imp * 100)}%)`);
}
lines.push("");
@@ -209,7 +223,10 @@ function formatRecalledMemories(
* via the skill protocol (the agent formulates search queries with context).
*/
export function sanitizeQuery(raw: string): string {
let cleaned = raw.replace(/Sender\s*\(untrusted metadata\):\s*```json[\s\S]*?```\s*/gi, "");
let cleaned = raw.replace(
/Sender\s*\(untrusted metadata\):\s*```json[\s\S]*?```\s*/gi,
"",
);
cleaned = cleaned.replace(/^\[.*?\]\s*/g, "");
cleaned = cleaned.trim();
return cleaned || raw;
@@ -257,7 +274,10 @@ export async function recall(
longTermMemories = await provider.search(cleanQuery, searchOpts);
} catch (err) {
// Graceful degradation — recall failure shouldn't block the agent
console.warn("[mem0] Recall search failed:", err instanceof Error ? err.message : err);
console.warn(
"[mem0] Recall search failed:",
err instanceof Error ? err.message : err,
);
}
// Search session memories if we have a session
@@ -281,7 +301,12 @@ export async function recall(
// Combine and rank
const allMemories = [...longTermMemories, ...uniqueSession];
const ranked = rankMemories(allMemories, categoryOrder);
const budgeted = budgetMemories(ranked, tokenBudget, maxMemories, identityAlwaysInclude);
const budgeted = budgetMemories(
ranked,
tokenBudget,
maxMemories,
identityAlwaysInclude,
);
// Format for injection
const context = formatRecalledMemories(budgeted, userId);
@@ -289,4 +314,3 @@ export async function recall(
return { context, memories: budgeted, tokenEstimate };
}