44 个工具构成一张路由网络——每个结果都携带 next_step: 成功该去哪里、出错该去哪里。六层结构、六条回路线。
flowchart TB
classDef layer fill:#141419,stroke:#e8b86e,color:#f9ecd6,font-size:14px,font-weight:600;
classDef loop fill:none,stroke:#6d6d6d,color:#b0b0b0,font-size:11px,stroke-dasharray:6 4;
L1["① 定位与理解
查找、读取、勾画符号"]:::layer
L2["② 影响与改前评估
爆炸半径 · 冲突检查"]:::layer
L3["③ 编辑与写入
事务化编辑 · 改名"]:::layer
L4["④ 验证与测试
diff_facts → test_bridge"]:::layer
L5["⑤ 质量与净化
审核 · 安全 · 死代码"]:::layer
L6["⑥ 提交与运维
git_worktree · health · feedback"]:::layer
L1 -->|完成 → 符号定位| L2
L2 -->|完成 → 可安全修改| L3
L3 -->|完成 → 已提交| L4
L4 -->|完成 → 0 失败| L5
L5 -->|完成 → 干净| L6
L4 -. "A · 失败 → debug_runner → 修复" .-> L3
L4 -. "B · 提交 → diff_facts" .-> L4
L5 -. "C · 问题 → ③修复 → ④验证" .-> L3
L2 -. "E · 高风险 → sandbox_validate" .-> L3
L2 -. "F · 冲突 → 重读" .-> L3
L1 -. "D · 环 → fix_imports (⑤)" .-> L5
不是给人类程序员用的 IDE 插件,而是给 LLM 用的操作系统原语。
LLM 无法像人类一样点击、拖拽、确认。每一次操作必须是原子化、可撤销、可重试的。
LLM 无法"看到"代码结构。输出必须是结构化、自解释的,JSON 直接消费,错误带修复建议。
LLM 的上下文有限且不稳定。每次调用必须自包含,带 workspace 锚定,版本乐观并发控制。
不是纸面数字,是 512MB Docker 真 cgroup 限制下的实测数据。
| 指标 | 数值 | 说明 |
|---|---|---|
| 内存占用 | RSS 134MB / 26% | docker --memory=512m 真 cgroup 限制 |
| 并发能力 | 128 并发 / 256 在途 | 零 OOM,零撕裂 |
| Token 节省 | ↓65.3% | 原语化同任务 7673 → 2662 est |
| 调用次数 | ↓50.0% | 旧六步 6 次 → 新原语 3 次 |
| 索引吞吐 | 538 文件 / 7s | 缩 scope reindex 实测 |
| dry_run 一致性 | 47/47 100% | 三语言 golden hash 对比 |
| 并发写同符号 | 16/16 无静默覆盖 | 恰好一胜一冲突 |
不是 MCP 壳子,是四层分工的解析/索引/写入基础设施。
MCP 协议、44 工具编排、错误恢复、Semaphore 调度
tree-sitter + tokio + rayon,Unix Socket IPC,catch_unwind 崩溃隔离
WAL 模式、单文件 DB、integrity_check 自愈、按 workspace 隔离
temp+rename 原子写、六级冲突状态机、undo journal
从符号读写到质量门禁,覆盖代码操作全链路。全部纯正则/AST,零 LLM 调用。
防的不是外部攻击,防的是"自己"——LLM 在并发、崩溃、冲突场景下的不可预测行为。
30+ 轮「码龙查码龙」——工具集审查并修复自身代码,每一轮都伴随断言增长。
全部质量门禁工具 零 LLM 调用:纯正则/AST,同一输入永远同一输出。可复现、可 CI、可审计。
基于 tree-sitter 的符号提取引擎,覆盖主流开发语言。
标准安装:git clone + npm ci,30 秒内跑起来。
# 1) 克隆并安装依赖(better-sqlite3 完整后端) git clone <repo-url> liuhe && cd liuhe/malong npm ci # 安装完整后端(含 Rust 解析二进制) # 2) 启动 MCP 服务器 node mcp-server.js --workspace /path/to/project # 3) 自检(30 秒) node tests/test-mcp-server.js # 25 断言
无法 npm ci 时,直接从
下载页
取对应平台的 tar 包解压即跑(sql.js 沙盒后端,启动时有升级提示)。完整版与降级版功能一致,仅后端实现不同。
{
"mcp": {
"malong": {
"type": "local",
"command": [
"node",
"--max-old-space-size=512",
"malong/mcp-server.js",
"--workspace", "."
],
"enabled": true
}
}
}
{
"mcpServers": {
"malong": {
"command": "node",
"args": [
"/path/to/malong/mcp-server.js",
"--workspace",
"/path/to/project"
]
}
}
}