Files
OpenMesh/coworker/project.py
zhaolei 6f402ffcee
Some checks failed
CI / pytest (push) Has been cancelled
CI / gui-unit (push) Has been cancelled
CI / gui-e2e (push) Has been cancelled
feat: OpenMesh 基础平台与 MD/PDF 转换技能
- 后端: coworker 智能体框架, WS API, 文件上传, 附件处理
- 前端: Open WebUI, 文件全量走 upload API (含 MD/TXT/JSON 等文本类)
- 技能: md-to-office (pandoc + wkhtmltopdf)
- 修复: 上传文件路径丢失, Agent 搜索浪费, 输出文件跑到 uploads/
- 打包: PyInstaller one-dir, 预打包 pandoc/wkhtmltopdf/chromium
2026-09-13 23:41:04 +08:00

41 lines
1.2 KiB
Python

"""Project context — AGENTS.md ingestion (root + global) into the system prompt."""
from __future__ import annotations
from pathlib import Path
from typing import Optional
from .secrets import state_dir
def default_global_agents_path() -> Path:
return state_dir() / "AGENTS.md"
def load_agents_md(
workspace: str | Path, *, global_path: Optional[str | Path] = None
) -> str:
"""Return a system-prompt block from the global and project AGENTS.md files.
v1 loads global (`<state-dir>/AGENTS.md`) + project-root `AGENTS.md` only;
nested discovery is a fast-follow.
"""
parts: list[tuple[str, str]] = []
g = Path(global_path) if global_path is not None else default_global_agents_path()
if g.is_file():
parts.append(("global", g.read_text(encoding="utf-8")))
root = Path(workspace).expanduser().resolve() / "AGENTS.md"
if root.is_file():
parts.append(("project", root.read_text(encoding="utf-8")))
if not parts:
return ""
blocks = [
f"<{label} AGENTS.md>\n{text.strip()}\n</{label} AGENTS.md>"
for label, text in parts
]
return "Project conventions:\n" + "\n\n".join(blocks)