Initial commit
This commit is contained in:
@@ -0,0 +1,76 @@
|
||||
from __future__ import annotations
|
||||
|
||||
import contextlib
|
||||
import shutil
|
||||
import unittest
|
||||
import uuid
|
||||
from pathlib import Path
|
||||
|
||||
from opc.core.models import Task
|
||||
from opc.database.store import OPCStore
|
||||
from opc.layer1_perception.context_assembler import ContextAssembler
|
||||
from opc.layer5_memory.memory_manager import MemoryManager
|
||||
|
||||
|
||||
@contextlib.contextmanager
|
||||
def _workspace_tempdir() -> Path:
|
||||
base = Path.cwd() / ".tmp-test" / f"focused-memory-{uuid.uuid4().hex}"
|
||||
base.mkdir(parents=True, exist_ok=True)
|
||||
try:
|
||||
yield base
|
||||
finally:
|
||||
shutil.rmtree(base, ignore_errors=True)
|
||||
|
||||
|
||||
class FocusedMemoryContextTests(unittest.IsolatedAsyncioTestCase):
|
||||
async def test_focused_memory_context_prefers_relevant_sections(self) -> None:
|
||||
with _workspace_tempdir() as root:
|
||||
store = OPCStore(root / "tasks.db")
|
||||
await store.initialize()
|
||||
memory = MemoryManager(root, "proj1", store=store)
|
||||
memory.save_memory(
|
||||
"# Global\n\n"
|
||||
"## Rust Build\n"
|
||||
"- Use cargo build for Rust projects.\n\n"
|
||||
"## Database Migrations\n"
|
||||
"- Always use migrations for schema changes.\n",
|
||||
project=False,
|
||||
)
|
||||
memory.save_memory(
|
||||
"# Project\n\n"
|
||||
"## Search Tooling\n"
|
||||
"- Prefer rg for code search.\n\n"
|
||||
"## Browser Checks\n"
|
||||
"- Use Playwright for browser verification.\n",
|
||||
project=True,
|
||||
)
|
||||
session_id = "session-focus"
|
||||
await memory.ensure_session(session_id, project_id="proj1")
|
||||
await memory.update_session_summary(session_id, "Remember the current runtime summary.")
|
||||
|
||||
focused = await memory.build_focused_memory_context(
|
||||
query="improve code search with rg",
|
||||
project_id="proj1",
|
||||
session_id=session_id,
|
||||
)
|
||||
self.assertIn("Focused Project Memory", focused)
|
||||
self.assertIn("Search Tooling", focused)
|
||||
self.assertNotIn("Browser Checks", focused)
|
||||
self.assertIn("## Session Memory", focused)
|
||||
|
||||
assembler = ContextAssembler(memory)
|
||||
core = await assembler.build_core_context(
|
||||
Task(
|
||||
title="Search fix",
|
||||
description="Use rg to inspect the repository",
|
||||
project_id="proj1",
|
||||
session_id=session_id,
|
||||
)
|
||||
)
|
||||
self.assertIn("Search Tooling", core)
|
||||
self.assertNotIn("Browser Checks", core)
|
||||
await store.close()
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
unittest.main()
|
||||
Reference in New Issue
Block a user