import { defineTool } from "eve/tools"; import { z } from "zod"; import { blogApiUrl, authHeaders } from "../lib/blog-client.js"; export default defineTool({ description: "Recall the most relevant saved memories for a query using Cosmos DB vector (semantic) search. Use before answering when past context might help.", inputSchema: z.object({ query: z.string().min(1).describe("What to search your memory for."), sessionId: z .string() .optional() .describe("Limit recall to one memory group; omit to search all."), k: z .number() .int() .min(1) .max(20) .default(5) .describe("How many memories to return."), }), async execute({ query, sessionId, k }) { const url = new URL(blogApiUrl("/api/memory")); url.searchParams.set("q", query); url.searchParams.set("k", String(k)); if (sessionId) url.searchParams.set("sessionId", sessionId); const res = await fetch(url, { headers: authHeaders() }); if (!res.ok) { return { ok: false, error: `Recall failed (${res.status})` }; } const { results } = await res.json(); return { ok: true, memories: results }; }, });