local-coder-feedback-codegraph-mcp
v1.5.0
Published
A ChatGPT Web local coding runtime with official MCP transports, reviewable patch transactions, CodeGraph, Serena, and a standalone Chinese feedback and approval WebUI.
Maintainers
Readme
Local Coder + CodeGraph + Serena + Interactive Feedback MCP
一个面向 ChatGPT Web 自定义 App / MCP 的本地编码执行后端。ChatGPT 负责模型和工具选择;本项目负责在你的机器上读取项目、修改代码、运行命令、维护长进程、建立代码图、执行 Serena 语义操作,并提供独立的中文 Web 对话、反馈和审批页面。
本项目本身不调用 OpenAI/Codex 模型 API,也不需要模型 API Key。它的目标是让 ChatGPT Web 获得接近本地 Codex 的开发能力,同时增加 CodeGraph、Serena、项目记忆和交互式 Feedback。
非 OpenAI 官方项目。“Codex-inspired”仅表示参考公开的编码代理工具分层与工作流设计。
1.4.5 重点
- stdio 与 HTTP 均使用官方
@modelcontextprotocol/sdk;HTTP 使用纯无状态 Streamable HTTP,每个请求创建独立 transport。 - 新增
workspace_bootstrap,在新对话中一次返回工作区会话、Git 状态、AGENTS 指令、技术栈、重要文件和推荐命令。 - 新增 ChatGPT 内嵌
Local Coder ConsoleMCP UI 资源,用于展示工作区、计划、进程和待审阅事务。 - Feedback 改为第一方独立 WebUI:第一次在 ChatGPT 中启动任务后,后续完整对话、审批和结构化选择可持续在同一网页中进行。
- 新增内部 Durable Session/History:
.local-coder/session/state.json保存有界当前状态,history.jsonl追加完整消息/计划/工具事件;服务重启后恢复 plan、最近对话、工具历史、草稿和待交付用户消息,workspace_bootstrap只注入少量 bounded checkpoint。 - 普通补丁只暴露
apply_patch:工具内部先对整个 patch 完成安全预检,再按本地审批策略原子提交;dry_run=true可只查看 diff。 - Serena 语义写入只暴露
semantic_edit:内部先实际执行 Serena、捕获跨文件 diff 并恢复工作区;dry_run=true可只预览,真实写入经 Feedback 审批后重新校验并原子提交。 - 新增短期
workspace_session_id,用于在启用会话约束时绑定工作区和授权主体。 - 补丁保留 LF/CRLF 和 executable mode,拒绝混合换行及默认拒绝硬链接写入。
smart审批策略改为:明确只读和常见开发命令可自动执行,未知命令必须审批。- 新增显式执行配置:默认
reviewed-host使用环境白名单和 smart 审批;高风险trusted-host默认继承完整环境并跳过内部审批。 - 模型可见输出和本地可重放输出分别限流。
- 语义快照覆盖 hidden/ignored 文件,并识别 mode-only 变化。
- Feedback WebUI 使用安全 DOM Markdown 渲染,支持标题、列表、引用、代码块、链接及常用行内格式,不执行原始 HTML。
- Feedback WebUI 将工具调用作为对话流内联事件展示,类似 Codex/Claude Code:默认保持紧凑,可展开查看脱敏参数、错误、开始时间、动态耗时和有界历史。
exec_command将同步等待上限与进程硬超时分离:有限命令默认等待最多 2 分钟并直接返回完整结果,长期进程可显式后台运行。
架构
ChatGPT Web / other MCP client
|
| official MCP stdio or stateless Streamable HTTP
v
SDK transport + LocalCoderCore
|-- workspace bootstrap / workspace session
|-- safe file reads and searches
|-- validated atomic patch writes
|-- command sessions and replay cursors
|-- embedded @colbymchenry/codegraph 1.4.1
|-- managed Serena 1.5.3 MCP child
|-- ChatGPT Local Coder Console resource
`-- standalone feedback / approval conversation WebUI推荐的 ChatGPT Web 工作流
workspace_bootstrap
-> codegraph_explore / code_symbol / read_file
-> apply_patch for ordinary file edits
or semantic_edit for symbol-aware edits
-> exec_command for checks/tests
-> interactive_feedback before the response ends普通文件修改只走 apply_patch(patch, ...)。无效 hunk、SHA 不匹配、目标冲突等会在任何真实写入前失败;需要只看 diff 时使用 dry_run=true。符号级 rename、完整符号体替换、符号前后插入和安全删除使用 semantic_edit;它同样支持 dry_run=true。request_user_input 仍保留为兼容入口但默认不出现在 tools/list;旧客户端可设置 LCM_EXPOSE_LEGACY_TOOLS=1 重新暴露。
默认工具
单项目工作区默认提供 16 个工具:
workspace_info
workspace_bootstrap
render_local_coder_console
read_file
workspace_search
update_plan
apply_patch
exec_command
write_stdin
codegraph_explore
code_symbol
semantic_edit
project_memory
view_image
interactive_feedback
mcp_gateway存在多个授权项目根时额外提供 set_workspace_root。
| 工具组 | 用途 |
|---|---|
| workspace_bootstrap / workspace_info | 初始化会话;运行状态默认返回 summary,排障时 detail=full |
| read_file / workspace_search | 受工作区边界保护的普通读取和搜索 |
| apply_patch | 普通文件唯一补丁入口;全量预检后写入,支持 dry-run、expected SHA、原子写和 best-effort rollback |
| exec_command / write_stdin | 构建、测试、Git、开发服务器和长进程会话 |
| codegraph_explore | 架构、调用链、影响范围和跨文件上下文 |
| code_symbol | Serena 符号、引用、实现、声明和诊断 |
| semantic_edit | Serena 符号级修改;内部捕获真实跨文件 diff、恢复、审批并原子提交,支持 dry-run |
| project_memory | Serena 项目 Markdown 记忆 |
| render_local_coder_console | ChatGPT 内嵌状态组件 |
| interactive_feedback | 中文反馈、审批和可选 questions 结构化问题 |
| mcp_gateway | 动态第三方 MCP 的稳定目录/调用入口 |
默认工具声明对 ChatGPT 使用 destructiveHint=false,以避免和本项目 Feedback WebUI 形成重复的“破坏性操作”审批层;readOnlyHint 仍按真实读写语义标注,实际写入/危险命令继续由本地 ApprovalController 和 Feedback WebUI 决定。客户端仍可能根据自身权限或上下文要求额外确认,因此该提示不能保证 ChatGPT 永不弹确认页。
workspace_search、code_symbol、project_memory 和 mcp_gateway 使用按 action/mode 分支的 oneOf schema,只向模型展示当前分支相关参数。exec_command 的主 schema 不再暴露兼容参数 yield_time_ms、read_only、risk_level,但运行时仍接受旧客户端直接传入这些字段。
CodeGraph 与 Serena
CodeGraph 作为固定 npm 依赖直接通过进程内 SDK 使用:启动时 init/open,文件提交后自动 sync,只向模型暴露高层 codegraph_explore。
Serena 使用固定版本 serena-agent==1.5.3:
uv run --isolated --python 3.13 --with serena-agent==1.5.3 \
serena start-mcp-server \
--project <workspace> \
--context codex \
--transport stdio \
--enable-web-dashboard false \
--open-web-dashboard false本项目只代理符号查询、语义编辑、诊断和项目记忆;Serena 的普通文件、目录和 shell 工具不暴露给模型。首次启动可能需要联网写入 uv 缓存。
CodeGraph 或 Serena 初始化失败时,MCP 初始化会返回结构化诊断,不静默回退到低质量路径。
补丁写入
普通补丁
apply_patch会先解析整个 patch,并在内存中完成所有路径、hunk、目标冲突、硬链接和可选expected_sha256校验;任何预检失败都发生在真实写入之前。dry_run=true只返回统一 diff 和逐文件摘要,不修改工作区。- 真正写入前按本地 Feedback 策略审批;提交阶段再次校验内容和 mode,使用同目录临时文件 + rename,默认
atomic=true时多文件中途失败会执行 best-effort rollback。 - 成功写入后同步 CodeGraph,结果默认不重复返回 diff。需要传输级幂等时可提供
operation_id;提供expected_sha256时服务也会派生稳定 operation id。
Serena 语义编辑
semantic_edit 会先通过完整工作区快照,在真实工作区中短暂执行 Serena、捕获实际跨文件结果,然后立即恢复原状态。dry_run=true 在恢复后直接返回真实 diff;真实写入则把该 diff 发送到 Feedback 审批,批准后根据捕获内容重新校验原始文件 SHA-256/mode 并原子提交。这个内部事务可审阅、可恢复,但还不是临时 Git worktree/overlay sandbox。运行期间仍应避免其他外部进程同时修改工作区。
命令会话与输出
exec_command.execution_mode="spawn"要求cmd为 argv 数组,直接启动目标程序;execution_mode="shell"要求cmd为字符串,并通过明确指定的powershell、pwsh、cmd、bash、sh、zsh或 Shell 路径解释。省略时保持兼容:数组推断为spawn,字符串推断为shell。spawn不接受shell参数,shell不会隐式拼接 argv。Windows 上.cmd/.bat(包括 npm 包装器)仍需受控cmd.exe包装;结果会通过shell_wrapped明确披露。- 命令结果和会话列表返回
execution_mode、resolved_executable、resolved_argv、resolved_shell,便于确认最终执行语义。 exec_command默认同步等待最多wait_timeout_ms(默认 120 秒);在等待期内结束时直接返回完整输出。只有超过等待上限且仍在运行时才返回需要轮询的session_id。timeout_ms是独立的进程硬超时,默认 10 分钟;达到后终止进程。开发服务器、watcher 等明确的长期进程应设置background=true立即返回会话。- 旧客户端仍可显式传入
yield_time_ms覆盖等待时间;yield_time_ms=0保持立即返回兼容行为。 write_stdin支持poll/write/close/terminate,输出通过cursor/next_cursor非破坏性重放。- 会话状态单调进入
exited、failed、timed_out、cancelled或terminated。 - ChatGPT 单次可见输出默认最多 160 KiB、硬上限 512 KiB;完整可重放输出在本机受独立容量限制。
- stdio cancellation 与 HTTP 请求取消会向下传播到命令、Serena、CodeGraph、Feedback 和搜索任务。
安全边界
文件工具会:
- 接受工作区相对路径,以及 canonicalize 后仍在工作区中的绝对路径;
- 拒绝
..越界和符号链接逃逸; - 使用原子写入并保留换行风格及文件权限;
- 默认拒绝对多硬链接文件执行写入;
- 在审批/预览后再次验证内容哈希和 mode;
- 在多文件失败时执行 best-effort 回滚。
命令工具则仍以服务账户的宿主机权限运行。项目目前不提供 OS 级 sandbox;cwd 位于工作区不代表命令无法访问工作区外路径。
执行配置:
reviewed-host(默认):环境白名单 + 默认smart审批;trusted-host:显式高风险模式,未覆盖时默认完整环境 +never审批。
两种配置都不是 sandbox。建议:
- 使用专用低权限账户、容器或虚拟机;
- 不挂载 Docker socket、SSH key 和不必要的主目录;
- 默认环境变量白名单,不要用
LCM_ENV_MODE=inherit暴露全部凭据; - 对公网使用固定域名、Cloudflare Access 和独立认证 token。
smart 审批只自动允许明确只读或受支持的测试/构建/检查命令,包括保守解析后的 git status/diff/log/show、版本查询、node --test、npm test、npm run check/lint/typecheck 等。Shell 字符串只有在 read_only=true、命令结构简单且命中白名单时才自动执行;重定向、管道、命令连接或未知命令仍会请求 Feedback 审批。read_only=true 和 risk_level=low 不能降低危险命令风险,risk_level=high 会强制进入审批。
工作区会话
workspace_bootstrap 返回 workspace_session_id。启用 workspace-session 强制约束时,后续写操作必须携带它;令牌绑定:
- 当前 canonical workspace;
- 当前 MCP 授权主体(由服务端 token 派生,不依赖具体 HTTP/TCP 连接)。
切换工作区会使旧 review 和 workspace session 失效。当前服务仍只有一个全局活动工作区,因此多 ChatGPT 对话并发操作不同项目时,推荐每个项目启动独立 MCP 实例。
ChatGPT 内嵌组件
render_local_coder_console 关联 ui://local-coder/console.html,可在支持 MCP Apps UI 的客户端中展示:
- 当前 workspace 和 Git 状态;
- CodeGraph / Serena 状态;
- 任务计划;
- 命令会话;
- 待审阅事务;
- 刷新和向 ChatGPT 发送后续消息的控件。
它只负责状态展示。真正的后续对话、反馈和审批由独立 WebUI 承载,不依赖 ChatGPT 内嵌对话框。
Durable Session / History
Durable Session 是内部持久层,不新增 MCP 工具。默认写入当前 workspace 的 .local-coder/session/(建议项目忽略 .local-coder/):
.local-coder/session/
state.json # 有界当前 checkpoint,用于快速重启恢复
history.jsonl # append-only 事件历史:plan / feedback message / tool call / recovery设计原则:
state.json只保存有界恢复状态:当前 plan、working checkpoint、最近消息/工具、少量浏览器草稿和待交付主动用户消息;写入使用临时文件 + rename。history.jsonl保存完整文本事件,包括 plan、working checkpoint、Feedback message、tool call 和恢复事件,不因为 bootstrap 上下文预算而截掉历史正文。workspace_bootstrap.session_history使用 Hybrid Memory,不再固定取最近 N 条:当前 plan 与 working checkpoint 属于 hard state;近期消息和近期工具分别按字符预算装入;传入history_query时,再从完整 JSONL 做本地 BM25 + 中英文/代码标识符相关性召回。relevant_history返回event_id、history_line、score、snippet 和匹配原因。需要原文时可直接对history.jsonl使用read_file(offset=<history_line>, limit=1),而不是把完整历史每次重新灌进上下文。interactive_feedback.checkpoint是可选的模型 consolidation 通道:只有当架构决定、未完成事项、改动文件或验证结论发生实质变化时才写入;它使用当前 ChatGPT 模型,不启动额外 LLM/API。checkpoint 会落盘,因此禁止放 token、密码、密钥和图片 Base64。- Feedback 图片的 Base64 不写入 Durable Session;持久状态只保存图片名称/MIME/近似大小等元数据。图片二进制仍只存在于当前进程的 WebUI 历史中。
- 重启不会复活旧的活动 Feedback/审批 MCP 调用。历史里尚未结束的请求会标为
FEEDBACK_INTERRUPTED_RESTART;主动用户消息则会恢复 pending 队列并继续可靠交付。 - workspace 切换时每个项目读取自己的
.local-coder/session/,plan/history 不跨项目串用。 state.json损坏不会阻止 MCP 启动;运行状态和 bootstrap 会报告load_error,随后从空 checkpoint 继续。原history.jsonl不会因为 state JSON 损坏而被删除。- 如不希望本地持久化会话内容,可设置
LCM_SESSION_HISTORY_ENABLED=0;当前进程内的 plan/Feedback 行为仍正常,只是不写持久文件。
Interactive Feedback
interactive_feedback 必须在每次回答结束前调用,固定超时 172800 秒(48 小时)。模型需要把完整的用户可见回复写入 summary;独立 WebUI 将它追加为下一条助手消息,用户在网页中回复后,当前 MCP 调用结束。该返回值代表一个新的用户回合,模型处理后必须再次调用 interactive_feedback 发回下一条完整回复,不得直接在普通聊天输出中结束。
独立 WebUI 由当前 Node.js 服务直接提供,不再启动或代理 Python feedback 运行时。它提供:
- 多个反馈与审批请求按 FIFO 顺序等待,不再用新请求覆盖旧请求;
- 对话历史通过 Durable Session 跨 WebUI 刷新和服务重启恢复;
- 草稿跨重连/请求持久化,并在服务重启后恢复最近浏览器草稿;
- 批准/拒绝与结构化问题按钮;批准或拒绝时可附加文字备注并返回给调用模型;
- 顶部可在当前服务进程内切换命令审查级别:最严格(所有操作)、严格(所有命令)、标准(未知与高风险)、宽松(仅高风险)或关闭命令审查;
- 显式取消;
- SSE 状态推送。
- 安全 Markdown 渲染。
- 工具调用按时间插入对话流,显示动作、状态和耗时;点击可展开最近历史、错误和脱敏参数,敏感参数及环境变量值会在进入页面前隐藏。
- 新反馈请求到达时可播放一次浏览器提示音,普通反馈、结构化问题和命令审批均适用;顶部“提示音”开关默认开启,并在当前浏览器中持久化。音效由 Web Audio API 本地生成,不加载外部音频文件;浏览器尚未授权音频时会在首次用户操作后解锁。
- 命令审批仍使用结构化
allow/deny决策;审批文本框只作为可选备注,不会混入普通反馈草稿或图片。 - 普通反馈支持通过按钮选择图片或直接按 Ctrl/⌘ + V 连续粘贴截图;页面显示可移除缩略图,允许 PNG、JPEG、WebP 和 GIF,不限制固定张数或单张 3 MB。单次反馈的图片总计默认不超过 32 MB,服务端会再次校验 MIME、Base64、文件签名和总大小;图片随工具结果返回并保留在当前进程的对话历史中,Durable Session 只持久化图片元数据,不保存 Base64 二进制。
- 纯批准/拒绝记录只显示紧凑状态行,不再渲染空白消息气泡。
- 请求区和空闲区使用强制隐藏规则;批准/拒绝提交成功后会立即退出审批模式,并且不会覆盖随后到达的新反馈请求,避免页面残留大块空白或输入框继续保持禁用状态。
- 没有待处理请求时仍显示输入框,并可直接把文字作为主动用户消息发送;如果只是输入而暂未发送,内容会保存为当前浏览器会话草稿。新反馈请求到达时,本地正在编辑的文字优先于可能稍旧的服务端草稿,服务端 draft 更新也会通过 SSE 主动同步,避免请求切换期间覆盖刚输入的内容。
结果区分 FEEDBACK_QUEUED、FEEDBACK_PENDING_NOT_OPENED、FEEDBACK_OPENED、FEEDBACK_SUBMITTED、FEEDBACK_CANCELLED、FEEDBACK_CALLER_CANCELLED 和 FEEDBACK_TIMEOUT。并发写工具也按 FIFO 等待当前写操作及其审批结束,只读工具仍可并行执行。
这仍是一个长时间工具调用,并受 ChatGPT、网关和 Tunnel 的实际请求时限影响。服务重启后 Durable Session 会恢复已结算对话和待交付主动消息,但无法继续已经断开的旧 MCP 长调用。
安装与启动
要求:
- Node.js 22.5+
- npm/npx
uv- Git
- 目标语言的 Serena/LSP 前置条件
本地开发:
npm install
npm run start:tunnel -- --workspace .如果通过另一个目录中的 npm --prefix 启动,本项目会按 --workspace > LCM_WORKSPACE > npm 的 INIT_CWD > process.cwd() 选择默认工作区。因此在目标项目目录中直接运行:
npm run --prefix D:\VScode\local-coder-feedback-codegraph-mcp start:tunnel会默认把执行这条命令时所在的目标项目目录作为 workspace;启动输出中的 工作区: 可用于确认最终路径。仍可显式传 --workspace PATH 覆盖该行为。
Cloudflare 命名 Tunnel + 两个固定域名:
npm run start:tunnel -- \
--tunnel-token 'YOUR_CLOUDFLARE_TUNNEL_TOKEN' \
--mcp-hostname mcp.example.com \
--web-hostname webui.example.com \
--mcp-token 'YOUR_MCP_TOKEN' \
--web-token 'YOUR_WEBUI_TOKEN'Cloudflare Dashboard 中需要把 mcp.example.com 路由到 http://localhost:8787,把 webui.example.com 路由到 http://localhost:8788。启动输出会分别给出 MCP URL 和独立 WebUI URL;首次在 ChatGPT 中发起任务后,保持 WebUI 页面打开即可继续后续对话与审批。
发布包:
npx -y [email protected] --workspace .stdio 示例:
{
"mcpServers": {
"local-coder": {
"command": "npx",
"args": [
"-y",
"[email protected]",
"--workspace",
"/absolute/path/to/project"
],
"env": {
"LCM_APPROVAL_POLICY": "smart"
}
}
}
}HTTP 与 Tunnel
HTTP MCP 默认监听 127.0.0.1,使用官方 SDK 的纯无状态 Streamable HTTP transport,并验证 Origin。每个 POST 请求创建独立 SDK Server/transport;服务器不生成或保存 mcp-session-id。
认证支持:
- 推荐:
Authorization: Bearer <token>; - 兼容:URL 查询参数
?token=...。
查询参数可能进入历史、日志或截图,不适合长期凭据。Quick Tunnel 仅适合测试;ChatGPT Web 长期配置应使用稳定的 Named Tunnel / 固定域名、Cloudflare Access 和可轮换 token。当前版本尚未实现 OAuth 2.1。
关键环境变量
| 变量 | 默认值 | 说明 |
|---|---:|---|
| LCM_WORKSPACE | 当前目录 | 初始工作区 |
| LCM_WORKSPACE_SCOPE_ROOT | 未设置 | 可切换项目的共同父目录 |
| LCM_WORKSPACE_ALLOWED_ROOTS | 未设置 | 额外授权根目录 |
| LCM_EXECUTION_PROFILE | reviewed-host | reviewed-host/trusted-host;后者是显式高风险 opt-in |
| LCM_APPROVAL_POLICY | 由 profile 决定 | always/commands/smart/dangerous/mutations/never;WebUI 可为当前进程动态切换 |
| LCM_REQUIRE_WORKSPACE_SESSION | 0 | 为兼容性单步写工具也强制 workspace session |
| LCM_WORKSPACE_SESSION_TTL_MS | 43200000 | workspace session 空闲续期时间 |
| LCM_WORKSPACE_SESSION_MAX_ENTRIES | 200 | workspace session 上限 |
| LCM_REVIEW_TTL_MS | 1800000 | review token 保留时间 |
| LCM_REVIEW_MAX_ENTRIES | 100 | 待审阅事务上限 |
| LCM_ENV_MODE | 由 profile 决定 | reviewed-host=allowlist,trusted-host=inherit;可显式覆盖 |
| LCM_ENV_PASSTHROUGH | 未设置 | 逗号分隔的额外环境变量名 |
| LCM_ALLOW_HARDLINK_WRITES | 0 | 允许写入多硬链接文件(高风险) |
| LCM_HTTP_JSON_RESPONSE | 0 | 使用 JSON response 而非默认 SSE response |
| LCM_CLOUDFLARED_LOG | summary | quiet/summary/full;默认过滤 cloudflared 常规连接与瞬时重试噪声,所有模式均隐藏日志中的 URL token |
| LCM_SERENA_PACKAGE_SPEC | serena-agent==1.5.3 | Serena 包规格 |
| LCM_SERENA_COMMAND | 自动查找 uv | 自定义 Serena 启动命令 |
| LCM_SERENA_ARGS_JSON | 自动生成 | 自定义 Serena 参数数组 |
| LCM_SERENA_HOME | 用户缓存目录 | Serena 数据和缓存根 |
| LCM_SERENA_TOOL_TIMEOUT_SECONDS | 172800 | Serena 工具超时 |
| LCM_SERENA_START_TIMEOUT_MS | 900000 | Serena 安装和握手超时 |
| LCM_SEMANTIC_SNAPSHOT_MAX_FILES | 10000 | 语义快照文件上限 |
| LCM_SEMANTIC_SNAPSHOT_MAX_BYTES | 268435456 | 语义快照字节上限 |
| LCM_MCP_PORT | 8787 | HTTP MCP 端口 |
| LCM_WEB_PORT | 8788 | 独立 WebUI 端口 |
| LCM_FEEDBACK_HISTORY_MAX_MESSAGES | 400 | 当前进程内最多保留的 WebUI 对话消息数(20-5000) |
| LCM_TOOL_HISTORY_MAX_ENTRIES | 200 | WebUI 最多保留的工具调用历史条目数(20-2000) |
| LCM_SESSION_HISTORY_ENABLED | 1 | 设为 0 禁用 Durable Session 磁盘持久化 |
| LCM_SESSION_HISTORY_PATH | .local-coder/session | Durable Session 当前 workspace 内的存储目录 |
| LCM_SESSION_STATE_MESSAGE_LIMIT | 400 | state.json 最多保留的最近消息数(完整事件仍写入 JSONL) |
| LCM_SESSION_STATE_MESSAGE_CHARS | 20000 | state.json 单条消息的字符上限 |
| LCM_SESSION_BOOTSTRAP_RECENT_CHARS | 10000 | workspace_bootstrap 近期消息上下文字符预算;不是固定消息条数 |
| LCM_SESSION_BOOTSTRAP_RECENT_MESSAGE_MAX_CHARS | 4000 | 单条近期消息进入 bootstrap 时的最大字符数 |
| LCM_SESSION_BOOTSTRAP_TOOL_CHARS | 5000 | 近期工具摘要字符预算;不是固定工具条数 |
| LCM_SESSION_BOOTSTRAP_RELEVANT_CHARS | 8000 | history_query 相关历史 snippets 的总字符预算 |
| LCM_SESSION_RETRIEVAL_SNIPPET_CHARS | 1200 | 单条 relevant history snippet 的最大字符数 |
| LCM_PROCESS_SESSION_TTL_MS | 600000 | 完成会话保留时间 |
| LCM_PROCESS_MAX_SESSIONS | 200 | 命令会话数量上限 |
| LCM_PROCESS_MAX_RETAINED_OUTPUT_BYTES | 8388608 | 单会话本地可重放输出上限 |
| LCM_REQUEST_LEDGER_TTL_MS | 600000 | 幂等结果保留时间 |
| LCM_REQUEST_LEDGER_MAX_ENTRIES | 1000 | 幂等账本上限 |
验证
npm run verify测试覆盖官方 MCP stdio、无状态 HTTP 跨连接调用、取消传播、Widget resource、补丁换行/mode/硬链接、隐藏文件快照、环境变量白名单、workspace session、单一补丁入口、单一语义编辑入口,以及 Hybrid Memory 的跨重启恢复、字符预算窗口、超过 8 条短消息、巨型 turn 截断、纯中文/BM25 标识符召回、checkpoint、损坏 state 降级和 workspace 隔离。
已知限制
- 没有 OS 级文件系统/网络 sandbox。
- 一个服务进程只有一个全局活动 workspace;workspace session 绑定授权主体和工作区,只防止过期或串令牌提交,不提供完全独立的多项目执行上下文。
semantic_edit内部使用“真实工作区短暂编辑 + 快照恢复”,不是临时 worktree。- HTTP 尚未实现 OAuth 2.1;查询 token 仅作为兼容模式。
interactive_feedback仍是固定 48 小时的阻塞式调用,其实际稳定性取决于完整网络链路。- Durable Session 的
history.jsonl当前为 append-only,不做自动语义压缩或归档;长期项目应按磁盘使用情况自行归档。图片二进制不跨服务重启保存。
许可证
本项目使用 MIT License。CodeGraph、Serena、MCP SDK 和 Zod 保留各自许可证及版权;详见 THIRD_PARTY_NOTICES.md。
