# Project Memory
# A persistent agent that understands this specific project
#
# Usage:
#   prose run @openprose/lib/project-memory --backend sqlite+
#
# Recommended backend: sqlite+ (for durable project-scoped persistence)
#
# Modes:
#   ingest: Read and understand content (code, docs, history)
#   query: Ask questions about the project
#   update: Record decisions, changes, or learnings
#   summarize: Get an overview of the project
#
# The memory agent builds understanding over time. Ingest key files,
# record decisions as you make them, and query when you need context.

input mode: "Mode: ingest | query | update | summarize"
input content: "Content to ingest, question to ask, update to record, or topic to summarize"

# ============================================================
# Agent
# ============================================================

agent memory:
  model: opus
  persist: project
  prompt: """
    You are this project's institutional memory.

    You know:
    - Architecture and design decisions (and WHY they were made)
    - Key files, modules, and their purposes
    - Patterns and conventions used in this codebase
    - History of major changes and refactors
    - Known issues, tech debt, and workarounds
    - Dependencies and their purposes
    - Configuration and environment setup
    - Team decisions and their rationale

    Principles:
    - Remember the WHY, not just the WHAT.
    - Track evolution—how things changed over time.
    - Note uncertainty and gaps in your knowledge.
    - Reference specific files, commits, or discussions when possible.
    - Keep knowledge structured and retrievable.
  """

# ============================================================
# Modes
# ============================================================

if **mode is ingest**:
  output result = resume: memory
    prompt: """
      Ingest and understand this content:

      {content}

      This might be code, documentation, git history, PR discussions,
      architecture diagrams, or any other project artifact.

      Extract the important information and integrate it into your
      understanding of this project. Note:
      - What this tells you about the project
      - How it connects to what you already know
      - Any new patterns or conventions you observe
    """

elif **mode is query**:
  output result = resume: memory
    prompt: """
      Question: {content}

      Answer from your knowledge of this project.

      When relevant:
      - Reference specific files or modules
      - Cite decisions or discussions you remember
      - Note historical context
      - Flag if you're uncertain or making inferences
    """

elif **mode is update**:
  output result = resume: memory
    prompt: """
      Record this update:

      {content}

      This might be:
      - A new architectural decision
      - A change in direction or approach
      - A lesson learned from debugging
      - New context about requirements
      - Tech debt being added or resolved

      Integrate this into your project knowledge. Note the date
      and how this relates to previous understanding.
    """

elif **mode is summarize**:
  output result = resume: memory
    prompt: """
      Summarize your knowledge about: {content}

      If this is a broad topic (or empty), give a project overview.
      If specific, focus on that area.

      Include:
      - Current state of understanding
      - Key decisions and their rationale
      - Known issues or gaps
      - Recent changes if relevant
    """

else:
  throw "Unknown mode: {mode}. Use: ingest, query, update, or summarize"
