AkurAI Build
Menu

popagent

public

Latest change bbbda111dae473952af172e96453b5ddc06a1e43 - Replace Hindsight with native memory tools by Ólafur Búi Ólafsson

import { afterAll, describe, expect, test } from "bun:test";
import { RequestContext } from "@mastra/core/request-context";
import { longTermMemory } from "../long-term-memory";
import { editMemory, recallMemory, reflectMemory, retainMemory } from "./memory";

const resourceId = `memory-tools-${crypto.randomUUID()}`;
const requestContext = new RequestContext();
requestContext.set("popagent.resourceId", resourceId);
requestContext.set("popagent.sessionId", "memory-tool-session");

afterAll(() => longTermMemory.storage.db.none(
  "DELETE FROM popagent_memories WHERE resource_id = $1",
  [resourceId],
));

describe("memory tools", () => {
  test("retain, recall, reflect, update, and forget durable memories", async () => {
    expect(await retainMemory.execute?.(
      { key: "user.editor", fact: "The user prefers Helix for quick edits.", importance: 0.9 },
      { requestContext } as never,
    )).toEqual({ remembered: true });

    const recalled = await recallMemory.execute?.(
      { query: "preferred editor", limit: 5 },
      { requestContext } as never,
    ) as { memories: Array<{ id: string; content: string }> };
    expect(recalled.memories[0]?.content).toContain("Helix");

    const reflected = await reflectMemory.execute?.(
      { query: "What editing workflow does the user prefer?", limit: 10 },
      { requestContext } as never,
    ) as { evidence: Array<{ id: string }> };
    expect(reflected.evidence).toContainEqual(expect.objectContaining({ id: recalled.memories[0]!.id }));

    expect(await editMemory.execute?.(
      { id: recalled.memories[0]!.id, action: "update", content: "The user prefers Neovim for quick edits.", key: "user.editor", importance: 0.95 },
      { requestContext } as never,
    )).toEqual(expect.objectContaining({ updated: true }));
    expect((await longTermMemory.recall({ resourceId, query: "Neovim" }))[0]?.content).toContain("Neovim");

    expect(await editMemory.execute?.(
      { id: recalled.memories[0]!.id, action: "forget" },
      { requestContext } as never,
    )).toEqual({ forgotten: true });
  });
});