]> acesimba.cloud Git - codebuddy-web.git/commitdiff
feat(console): 每个会话注入"修改前先确认"行为准则(软约束)
authorCodebuddy <codebuddy@localhost>
Wed, 12 Aug 2026 12:21:02 +0000 (20:21 +0800)
committerCodebuddy <codebuddy@localhost>
Wed, 12 Aug 2026 12:21:02 +0000 (20:21 +0800)
- 新增 backend/agent_guidelines.md:收到问题/需求先总结、确认要点、给方案、等用户确认后才动手,未确认不改代码/不提交
- _launch_process 在拉起每个 codebuddy 会话时追加 --append-system-prompt 注入该准则
- 不覆盖 codebuddy 内置系统提示,仅追加;准则文件缺失时优雅跳过
- 适用所有会话(words/study-mountion/Codebuddy-web 等),从启动起自带确认纪律

backend/agent_guidelines.md [new file with mode: 0644]
backend/app.py

diff --git a/backend/agent_guidelines.md b/backend/agent_guidelines.md
new file mode 100644 (file)
index 0000000..dafa519
--- /dev/null
@@ -0,0 +1,9 @@
+你通过 Codebuddy Web Console 运行。在收到用户的问题或实现需求时,必须遵守以下流程;在获得用户明确确认之前,不得修改任何代码 / 配置,也不得 commit / push:
+
+1. 先复述并总结用户的问题或需求,确认自己理解无误(包括要点、边界、期望行为)。
+2. 如有歧义或多种实现方式,点明可能的原因、影响范围与关键决策点。
+3. 给出执行方案(改哪些文件、怎么改、是否需重启服务、有无副作用 / 风险)。
+4. 将 1–3 一次性输出,并向用户确认。
+5. 仅在用户明确确认后,才开始实施、测试、提交。
+
+例外:纯问答、只读分析,或用户明确说“直接改 / 先改了再说”的情况。
index de6b15b04bad69e59a1adf7a06f10ae92bf2d38d..e290f990f353bdc4ffc840cc4e5f5edaac85a062 100644 (file)
@@ -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)