You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
52 lines
1.4 KiB
52 lines
1.4 KiB
"""Runtime context injection for agent operation.
|
|
|
|
Filesystem primitives for managing agent accumulated knowledge.
|
|
"""
|
|
|
|
from __future__ import annotations
|
|
|
|
import logging
|
|
import os
|
|
from datetime import datetime
|
|
from typing import List
|
|
|
|
logger = logging.getLogger(__name__)
|
|
|
|
|
|
def list_recent_reports() -> List[str]:
|
|
"""List recently generated reports."""
|
|
try:
|
|
reports_dir = "reports"
|
|
if not os.path.exists(reports_dir):
|
|
return []
|
|
files = sorted(
|
|
(f for f in os.listdir(reports_dir) if f.endswith(".md")),
|
|
key=lambda f: os.path.getmtime(os.path.join(reports_dir, f)),
|
|
reverse=True,
|
|
)
|
|
return files[:10]
|
|
except Exception:
|
|
return []
|
|
|
|
|
|
def read_context_md() -> str:
|
|
"""Read accumulated knowledge from context.md."""
|
|
try:
|
|
path = os.path.join("agent_tools", "context.md")
|
|
if os.path.exists(path):
|
|
with open(path, "r", encoding="utf-8") as f:
|
|
return f.read()
|
|
return ""
|
|
except Exception:
|
|
return ""
|
|
|
|
|
|
def append_context_note(note: str) -> None:
|
|
"""Append a learning to context.md."""
|
|
try:
|
|
path = os.path.join("agent_tools", "context.md")
|
|
timestamp = datetime.now().isoformat()
|
|
with open(path, "a", encoding="utf-8") as f:
|
|
f.write(f"\n## {timestamp}\n\n{note}\n")
|
|
except Exception:
|
|
logger.exception("Failed to append context note")
|
|
|