2013 断言全绿 · 44 MCP 工具 · 10 语言支持

LLM 重新发明 代码操作

码龙·六合工具 —— 一套为 LLM 而非人类设计的代码操作工具链

传统工具假设使用者有手、有眼、有记忆;LLM 三者皆无。 我们围绕这三点缺失,重新设计了从解析到写入的完整基础设施。

98ms
repo_map 响应
588/s
吞吐峰值
65%
Token 节省
128并发
零 OOM
工具链拓扑

每个工具都告诉你下一步该去哪里

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
Philosophy

核心理念

不是给人类程序员用的 IDE 插件,而是给 LLM 用的操作系统原语。

无手

LLM 无法像人类一样点击、拖拽、确认。每一次操作必须是原子化、可撤销、可重试的。

edit_transaction
事务 + rollback + undo journal

无眼

LLM 无法"看到"代码结构。输出必须是结构化、自解释的,JSON 直接消费,错误带修复建议。

// 错误响应自带 next_action
{ "error": "...", "suggestion": "..." }

无记忆

LLM 的上下文有限且不稳定。每次调用必须自包含,带 workspace 锚定,版本乐观并发控制。

read_symbol → write_symbol(base_version)
六级冲突状态机
Performance

性能实测

不是纸面数字,是 512MB Docker 真 cgroup 限制下的实测数据。

1ms
小文件 read P95
50 次实测,预热后
7ms
小文件 write P95
含写后同步重抽
98ms
repo_map 全库
从几十秒优化而来
588/s
吞吐峰值
LLM 需求的 60-600 倍

全指标一览

指标 数值 说明
内存占用 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 无静默覆盖 恰好一胜一冲突
Storm 冲突矩阵通过
32 路读写混合打热点文件 → 零撕裂、integrity_check PASS、95/95 受控冲突
Architecture

四层架构

不是 MCP 壳子,是四层分工的解析/索引/写入基础设施。

JS

Node.js 编排层

MCP 协议、44 工具编排、错误恢复、Semaphore 调度

RS

Rust 解析服务

tree-sitter + tokio + rayon,Unix Socket IPC,catch_unwind 崩溃隔离

DB

SQLite 索引层

WAL 模式、单文件 DB、integrity_check 自愈、按 workspace 隔离

IO

事务级写入层

temp+rename 原子写、六级冲突状态机、undo journal

Node.js MCP 编排 44 Tools · JSON-RPC · Semaphore Rust malong-parse tree-sitter · tokio · rayon · LRU Cache SQLite 索引 WAL · integrity_check · Workspace Isolation Atomic Write + Transaction Unix Socket

为什么 Rust 做解析

  • 零拷贝字符串:&source[byte_range] vs JS slice() 新分配
  • 无 GC 暂停:Node 批量索引 GC 每 50ms 暂停 1-5ms
  • 无 N-API 边界:node-tree-sitter 每次 child() 都跨边界
  • rayon 真并行:批量解析多核并行,worker_threads 有启动开销

崩溃隔离(比性能更硬的卖点)

旧架构
解析崩溃 → kill MCP 进程,平均 2-4h 崩一次
新架构
catch_unwind 兜住 panic → 返回 PARSE_PANIC 错误码,MCP 继续运行
Toolbox

44 个 MCP 工具

从符号读写到质量门禁,覆盖代码操作全链路。全部纯正则/AST,零 LLM 调用。

I/O 原语
read_symbol
write_symbol / write_symbols
符号读写 + 版本锚定 + 冲突状态机
索引与搜索
reindex · symbol_search
code_search · repo_map
98ms 级文件地图,自然语言意图搜索
分析
impact_analysis · call_chain
references · dep_graph · inspect
影响面 + 风险、调用链、常量追踪
编辑
edit_batch · edit_transaction
edit_sandbox · rename_symbol
原子事务 + rollback + 跨文件重命名
质量守门
code_review · security_review
sweep_dead_code · guard_patterns
纯正则/AST、零 LLM、可复现可审计
工程辅助
test_bridge · verify_pipeline
debug_runner · patch_parser
测试编排、管线验证、错误分析
Safety

事务级安全写入

防的不是外部攻击,防的是"自己"——LLM 在并发、崩溃、冲突场景下的不可预测行为。

六级冲突状态机

CLEAN 无冲突,直接写入
FILE_CHANGED_SYMBOL_STABLE 文件变,符号未变
SYMBOL_CHANGED 符号内容变化
SYMBOL_SIGNATURE_CHANGED 签名变化,需审查
SYMBOL_DELETED / AMBIGUOUS 符号已删除 / 无法判定

写入防护管线

1
guardRealPath
symlink 守卫,防止写穿 workspace
2
acquireLock + TOCTOU 检测
锁内 resolve+read+conflict 一体,防竞态
3
createJournal + temp 写入
唯一 tmp 文件名,防 symlink 预置攻击
4
renameRetry 原子提交
Windows EPERM/EBUSY 自动重试
写后同步重抽 + 语法自检
索引保鲜,node --check / py_compile 验证

SIGKILL 半写恢复实测

已通过测试
SIGKILL
模拟进程被强制终止
kill -9 子进程
Journal
undo journal 保留 staged 状态
.malong/journal/ 目录
Auto-rollback
半写事务自动回滚/保留
new_hash 防误判
Self-Hosting

自我进化

30+ 轮「码龙查码龙」——工具集审查并修复自身代码,每一轮都伴随断言增长。

测试矩阵

0
JS 断言总数
81
测试文件
92
Rust 断言
0
失败数
2026-08-13 全链实测通过(v0.4.5)

30+ 轮自我审查

r12-r30
dogfood 端到端
目录 scope 过滤失效修复
注册形态死代码误报修复
常量追踪读取点丢失修复
SQL 参数化治理
每一轮修复都带测试锁定,测试盲区即 bug 潜伏区

确定性保证

全部质量门禁工具 零 LLM 调用:纯正则/AST,同一输入永远同一输出。可复现、可 CI、可审计。

协议 fuzz 300 轮 固定 seed 确定性 crash 注入 golden 89 断言 并发 16/16 无静默覆盖
Multi-Language

10 语言支持

基于 tree-sitter 的符号提取引擎,覆盖主流开发语言。

📜
JavaScript
✓ 符号 ✓ 引用
🔷
TypeScript
✓ 符号 ✓ 引用
⚛️
TSX / JSX
✓ 符号 ✓ 引用
🐍
Python
✓ 符号 ✓ 引用
🐹
Go
✓ 符号 ✓ 引用
⚙️
Rust
✓ 符号 ✓ 引用
impl / trait / enum
🔧
C / C++
✓ 符号 ✓ 引用
含头文件
Java
✓ 符号 ✓ 引用
🐚
Bash
✓ 符号 ✓ 引用
📦
MTS / CTS
✓ 符号 ✓ 引用
Quick Start

10 秒上手

标准安装:git clone + npm ci,30 秒内跑起来。

bash
# 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 断言
离线 / 沙盒环境?用免构建 tar 包

无法 npm ci 时,直接从 下载页 取对应平台的 tar 包解压即跑(sql.js 沙盒后端,启动时有升级提示)。完整版与降级版功能一致,仅后端实现不同。

MCP 客户端配置示例

opencode.json
{
  "mcp": {
    "malong": {
      "type": "local",
      "command": [
        "node",
        "--max-old-space-size=512",
        "malong/mcp-server.js",
        "--workspace", "."
      ],
      "enabled": true
    }
  }
}
Claude Desktop
{
  "mcpServers": {
    "malong": {
      "command": "node",
      "args": [
        "/path/to/malong/mcp-server.js",
        "--workspace",
        "/path/to/project"
      ]
    }
  }
}