zengxzh/buer

GitHub: zengxzh/buer

BUER是一款AI编码代理的本地可靠性双向护栏层,用于捕捉代码修改中的潜在风险。

Stars: 0 | Forks: 1

# BUER (不二) *一个意图,无分。BUER.* [![License: BSL 1.1](https://img.shields.io/badge/License-BSL%201.1-blue.svg)](LICENSE) [![Protocol: MCP](https://img.shields.io/badge/Protocol-MCP-orange.svg)](https://modelcontextprotocol.io) BUER 是 AI 编码代理的 **本地可靠性双向护栏层**。 与传统 LLM 可观测性工具不同,这些工具监控代理 *说了什么*(跟踪、令牌、提示),BUER 冷静地监控代理 **实际上对你的代码做了什么**(AST 修改、依赖图、git 状态和测试结果)。 BUER 作为本地结构监控器,通过双向循环工作: * **警报(反应式):** 当代理循环、越界或作弊(例如,篡改测试以隐藏损坏的代码)时,停止代理。 * **协助(主动性):** 在编辑发生之前,直接将结构事实(爆炸半径、依赖简报、安全网警告)注入代理的上下文中。 **一切都是 100% 自动推导的。** BUER 从代理已经产生的客观代码事实中读取(文件修改、git 状态、测试输出)。从不要求代理声明其意图或合作。即使与混乱的代理和 vibe 编码者一起工作,它也能完美运行。 BUER 的测试-定义关联从启发式名称匹配(始终可用,无需设置)开始,并在使用 `--cov-context=test` 运行 pytest 时升级到 **精确层** — 有关详细信息,请参阅 [docs/SETUP.md](docs/SETUP.md#precise-testdefine-association-opt-in)。 ## ⚡ 为什么选择 BUER?(代理可观测性差距) 当 AI 代理卡住或开始破坏事物时,传统的 MLOps 工具(Langfuse、Braintrust、Phoenix)只能看到一系列“成功的 200ms LLM API 响应”。他们对代码层视而不见。 BUER 通过直接在通过 `tree-sitter` 维护的本地有向无环图 ($\mathcal{G}_D$) 上操作来弥合这一差距。 | AI 代理盲点 | BUER 如何解决它(100% 自动推导) | | :--- | :--- | | **P1:无限循环和 churn** | `stuck_region` / `define_loop` / `token_waste` — 检测代码状态无法结构性地收敛 | | **P2:“修复一个,破坏十个”** | `regression` — 通过调用图将测试失败链接回结构编辑;当 pytest `--cov-context=test` 存在时,升级到精确的测试↔定义映射 | | **P3:作弊 / 伪造成功** | `test_tampering` — 如果代理突变测试断言以绕过失败,则立即升级到人类 | | **P4:范围漂移 / 胡乱运行** | `boundary_breach` + `task_scope_breach` — 严格的本地护栏 | | **P5:在恢复时丢失上下文** | `BUER Recap` — 上一次会话的更改和未解决问题的简单语言摘要 | | **P6:对附带损害视而不见** | `influence cone` — 将预编辑爆炸半径预览注入代理的上下文中 | | **P7:未受保护的代码库** | `safety-net warning` / `add-tests assist` / `commit assist` — 标记风险并提供具体的下一步行动 | 以上每个信号都建立在 **客观代码事实锚点**(版本链、测试结果、文件路径、调用图)之上。BUER 不推断意图,也不对代理的输出进行评分 — 它报告代码中可观察到的真实情况。 ## ☸️ 来源:非二法门 BUER 的名字来自 **不二法门** (*bù èr fǎ mén*),这是 *维摩诘经* 的核心教义。**不二** ("not-two") 代表非二性 — 超越现实的对立矛盾(损坏/工作,这个/那个)。当菩萨试图用语言来定义这个非二法门时,维摩诘以绝对的沉默回答。最真实的法门是那个不再分割的法门。 BUER 将这种哲学带入 AI 软件工程。它基于 **结构决定理论 (SDT)**。BUER 维护的依赖图 — $\mathcal{G}_D$ — 是一个有向无环图,其节点是 *决定*(每个定义的当前结构状态)和其边将生产者映射到消费者。 通过分析这个客观图及其历史,BUER 使代理锚定于一个单一、连贯、无分割的意图,而不是陷入自我矛盾。 参考:Zeng, Xiaozhou (2026). *结构决定理论:现实、时间、不可逆性和空间的单一公理框架.* PhilArchive. ## 🛠️ 如何工作:双向循环 BUER 作为与 Claude Code 等执行环境并行的本地后台服务器运行。它通过在相关代理操作后触发的轻量级 `POST` 端点挂钩到工作流程: ``` ┌──────────────────────────────┐ │ AI Agent (Claude Code) │ └──────────────┬───────────────┘ │ 1. Hooks (post-edit, etc.) │ 2. Proactive Context Triggered Automatically │ (Blast Radius, Briefings) ▼ ┌──────────────────────────────┐ │ BUER Server │ │ (AST / Git / Test Monitor) │ └──────────────────────────────┘ ``` ### 端点 * `/buer/session-start` — 在会话初始化或恢复时触发 * `/buer/post-edit` — 在编辑、写入或多编辑后拦截文件差异 * `/buer/post-read` — 捕获读取活动以跟踪上下文使用 * `/buer/post-bash` — 捕获终端执行,解析测试输出和堆栈跟踪 * `/buer/stop` — 当代理完成其回合时触发 * `/v1/metrics` — 通过 `/v1/metrics` 桥接 OpenTelemetry 成本/令牌指标(可选) ### 1. 警报(防御) 当信号触发时,BUER 采用 **两步升级**:它首先通过注入上下文静默地推动代理自我纠正。如果问题持续存在,则升级到您那里。**完整性违规(如 `test_tampering` 或边界越界)绕过推动并立即升级到您那里。** * `stuck_region` — 代理不断敲打相同的代码块,无法收敛 * `define_loop` — 代理将定义回结构上等效的早期状态 * `test_tampering` — 代理更改断言以通过测试,而不是修复功能代码 ### 2. 协助(进攻) BUER 故意构建了三个不同的通道(*警报、健康提示、内联协助*),在错误发生之前帮助塑造代理的工作: * `structural_briefing` — 预编辑上下文:谁依赖于这段代码,它依赖于什么? * `debug_range` — 将调试缩小到与崩溃堆栈相交的最近更改 * `safety-net` — 如果代理修改具有巨大爆炸半径的定义,则警告代理 ## 💰 成本与节省跟踪(可选) BUER 具有诚实的、基于遥测的财务编译器。通过在 `/v1/metrics` 处桥接 Claude Code 的 OpenTelemetry 指标(这些指标传输原始令牌计数,但 *排除* 会话内容或代码有效负载),BUER 计算您的实际支出与估计的干预节省之间的差异,分为三个透明的层级: * **层 1(遥测支持):** 实际测量的 API 成本与计算出的干预节省相匹配 * **层 2(模型估计):** 从本地编辑轮次估算,乘以 LLM 列价 * **层 3(代理指标):** 严格的工程指标(churn 计数器、迭代循环)没有财务数字 ## ⚙️ 安装与设置 BUER 需要 **Python ≥ 3.10**。它通过嵌入的 `tree-sitter` 语法本地解析 Python、JavaScript 和 TypeScript — 不需要重型外部编译器工具链即可实现其核心功能。 ``` git clone https://github.com/zengxzh/buer.git cd buer pip install -e . ``` ### 运行服务器 在本地启动监控器: ``` buer-server --host 127.0.0.1 --port 7777 --db .buer/store.sqlite ``` 要配置您的代理环境以将挂钩发送到 BUER,或连接到 systemd 服务持久运行时,请参阅 [docs/SETUP.md](docs/SETUP.md). ### 必需:`.buer/` 数据保护 BUER 将其所有状态存储在项目根目录的本地 `.buer/` 目录中(WAL 模式下的 SQLite 数据库)。为了保护这些数据,**BUER 在第一次在 git 仓库中运行时自动将 `.buer/` 添加到您的项目 `.gitignore` 中** — 如果不存在,则创建 `.gitignore`,否则将其附加到其中(您的现有条目永远不会被修改)。 BUER 还 **监控 `.gitignore`**:如果条目被删除或文件被删除,BUER 在下一次编辑或会话中重新添加 `.buer/`。这是故意的并且 **必需的** — 没有它,常规的 git 操作会破坏 BUER 的数据: - `git clean -fd` 会完全删除 `.buer/` 目录。 - `git checkout` / `git reset --hard` 会回滚数据库(或者,如果 WAL 文件部分回滚,会损坏它)— 丢失所有累积的结构历史。 如果您故意想跟踪 `.buer/` 在 git 中,请将显式的 `!.buer/` 行添加到您的 `.gitignore` 中;BUER 尊重它,不会覆盖它。 ## 🔒 安全性与隐私 BUER 为本地优先、尊重隐私的开发而构建。**BUER 100% 在您的本地机器上运行。** 它永远不会上传您的源代码、文件结构、提示或凭据到任何第三方云服务器。 ## 状态 Alpha — 核心实现完成(图、信号、协调、协助、摘要);正在进行积极开发和内部测试。 ## 📄 许可证 本项目根据 **商业源代码许可证 1.1 (BSL-1.1)** 许可。 * **权限:** 评估、开发、个人或内部商业使用免费 — 包括监控您或您组织的 AI 编码代理。 * **限制:** 不能作为商业托管或管理服务部署给第三方,也不能作为主要价值来自 BUER 的商业产品,除非获得单独的商业许可证。 * 在 **2030-06-02**(变更日期),许可证转换为 **Apache 许可证,版本 2.0**。 有关完整条款,请参阅 [LICENSE](LICENSE)。 ## 作者 Xiaozhou Zeng
标签:AI 可观测性, AI 编码代理, AST 分析, Git 状态, MLOps, Vibe 编码, 主动性辅助, 代码事实, 代码可靠性, 代码安全, 代码审查, 代码监控, 依赖图, 双向防护, 反应式警报, 启发式名称匹配, 本地守护, 模型上下文协议, 测试定义关联, 测试结果, 混沌代理, 漏洞枚举, 精确层级, 结构监控, 自动推导, 逆向工具