From 0d09626b35105dff42c8974d09f41ec594f4c027 Mon Sep 17 00:00:00 2001 From: Codebuddy Date: Wed, 12 Aug 2026 20:21:02 +0800 Subject: [PATCH] =?utf8?q?feat(console):=20=E6=AF=8F=E4=B8=AA=E4=BC=9A?= =?utf8?q?=E8=AF=9D=E6=B3=A8=E5=85=A5"=E4=BF=AE=E6=94=B9=E5=89=8D=E5=85=88?= =?utf8?q?=E7=A1=AE=E8=AE=A4"=E8=A1=8C=E4=B8=BA=E5=87=86=E5=88=99=EF=BC=88?= =?utf8?q?=E8=BD=AF=E7=BA=A6=E6=9D=9F=EF=BC=89?= MIME-Version: 1.0 Content-Type: text/plain; charset=utf8 Content-Transfer-Encoding: 8bit - 新增 backend/agent_guidelines.md:收到问题/需求先总结、确认要点、给方案、等用户确认后才动手,未确认不改代码/不提交 - _launch_process 在拉起每个 codebuddy 会话时追加 --append-system-prompt 注入该准则 - 不覆盖 codebuddy 内置系统提示,仅追加;准则文件缺失时优雅跳过 - 适用所有会话(words/study-mountion/Codebuddy-web 等),从启动起自带确认纪律 --- backend/agent_guidelines.md | 9 +++++++++ backend/app.py | 17 +++++++++++++++++ 2 files changed, 26 insertions(+) create mode 100644 backend/agent_guidelines.md diff --git a/backend/agent_guidelines.md b/backend/agent_guidelines.md new file mode 100644 index 0000000..dafa519 --- /dev/null +++ b/backend/agent_guidelines.md @@ -0,0 +1,9 @@ +你通过 Codebuddy Web Console 运行。在收到用户的问题或实现需求时,必须遵守以下流程;在获得用户明确确认之前,不得修改任何代码 / 配置,也不得 commit / push: + +1. 先复述并总结用户的问题或需求,确认自己理解无误(包括要点、边界、期望行为)。 +2. 如有歧义或多种实现方式,点明可能的原因、影响范围与关键决策点。 +3. 给出执行方案(改哪些文件、怎么改、是否需重启服务、有无副作用 / 风险)。 +4. 将 1–3 一次性输出,并向用户确认。 +5. 仅在用户明确确认后,才开始实施、测试、提交。 + +例外:纯问答、只读分析,或用户明确说“直接改 / 先改了再说”的情况。 diff --git a/backend/app.py b/backend/app.py index de6b15b..e290f99 100644 --- a/backend/app.py +++ b/backend/app.py @@ -364,12 +364,29 @@ def last_assistant_summary(sid: str) -> str: return "" +# 每个会话注入的行为准则(软约束):修改前必须先总结、确认方案、等用户确认。 +# 通过 codebuddy 的 --append-system-prompt 追加到系统提示词,不覆盖其内置提示。 +AGENT_GUIDELINES_FILE = Path(__file__).resolve().parent / "agent_guidelines.md" + + +def _load_agent_guidelines() -> str: + try: + return AGENT_GUIDELINES_FILE.read_text(encoding="utf-8").strip() + except OSError: + logger.warning(f"未找到会话准则文件: {AGENT_GUIDELINES_FILE}") + return "" + + def _launch_process(task: dict, sid: str, model: str, cwd: str, codebuddy_path: str) -> dict: """启动 codebuddy 进程,登记到 RUNNING 并开始后台 drain。""" if session_exists(sid): cmd = [codebuddy_path, "--model", model, "--resume", sid] else: cmd = [codebuddy_path, "--model", model, "--session-id", sid] + # 注入“修改前先确认”的行为准则,使每个会话自带该纪律 + guidelines = _load_agent_guidelines() + if guidelines: + cmd += ["--append-system-prompt", guidelines] master_fd, slave_fd = pty.openpty() winsize = struct.pack("HHHH", 24, 80, 0, 0) fcntl.ioctl(slave_fd, termios.TIOCSWINSZ, winsize) -- 2.43.0