"""載入 .claude/agents/*.md 並解析 system prompt(ADR-095) 2026-04-24 Claude Sonnet 4.6 (WS4 Hermes NL) 2026-05-04 Claude Sonnet 4.6 (Task 1.2): 移除本機絕對路徑,改用 AGENTS_DIR 環境變數 """ from __future__ import annotations import os import pathlib from functools import lru_cache # 本機預設: /Users/ogt/awoooi/.claude/agents(由 AGENTS_DIR 覆蓋) # K8s 容器預設: /app/.claude/agents(Dockerfile COPY .claude/agents/ ./.claude/agents/) _AGENTS_DIR = pathlib.Path(os.getenv("AGENTS_DIR", "/app/.claude/agents")) def _parse_agent_md(path: pathlib.Path) -> str: """去除 YAML frontmatter,回傳 body 作為 system prompt""" text = path.read_text(encoding="utf-8") # --- frontmatter --- if text.startswith("---"): end = text.find("---", 3) if end != -1: return text[end + 3:].strip() return text.strip() @lru_cache(maxsize=None) def get_agent_system_prompt(agent_name: str) -> str | None: """ 回傳指定 agent 的 system prompt。 若 .md 不存在回傳 None(caller 決定是否 fallback)。 """ path = _AGENTS_DIR / f"{agent_name}.md" if not path.exists(): return None return _parse_agent_md(path) def list_available_agents() -> list[str]: """回傳目前存在的 agent 名稱列表(無副檔名)""" return [p.stem for p in sorted(_AGENTS_DIR.glob("*.md"))]