npm package discovery and stats viewer.

Discover Tips

  • General search

    [free text search, go nuts!]

  • Package details

    pkg:[package-name]

  • User packages

    @[username]

Sponsor

Optimize Toolset

I’ve always been into building performant and accessible sites, but lately I’ve been taking it extremely seriously. So much so that I’ve been building a tool to help me optimize and monitor the sites that I build to make sure that I’m making an attempt to offer the best experience to those who visit them. If you’re into performant, accessible and SEO friendly sites, you might like it too! You can check it out at Optimize Toolset.

About

Hi, 👋, I’m Ryan Hefner  and I built this site for me, and you! The goal of this site was to provide an easy way for me to check the stats on my npm packages, both for prioritizing issues and updates, and to give me a little kick in the pants to keep up on stuff.

As I was building it, I realized that I was actually using the tool to build the tool, and figured I might as well put this out there and hopefully others will find it to be a fast and useful way to search and browse npm packages as I have.

If you’re interested in other things I’m working on, follow me on Twitter or check out the open source projects I’ve been publishing on GitHub.

I am also working on a Twitter bot for this site to tweet the most popular, newest, random packages from npm. Please follow that account now and it will start sending out packages soon–ish.

Open Software & Tools

This site wouldn’t be possible without the immense generosity and tireless efforts from the people who make contributions to the world and share their work via open source initiatives. Thank you 🙏

© 2026 – Pkg Stats / Ryan Hefner

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.

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 Console MCP 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=truerequest_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_searchcode_symbolproject_memorymcp_gateway 使用按 action/mode 分支的 oneOf schema,只向模型展示当前分支相关参数。exec_command 的主 schema 不再暴露兼容参数 yield_time_msread_onlyrisk_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 初始化会返回结构化诊断,不静默回退到低质量路径。

补丁写入

普通补丁

  1. apply_patch 会先解析整个 patch,并在内存中完成所有路径、hunk、目标冲突、硬链接和可选 expected_sha256 校验;任何预检失败都发生在真实写入之前。
  2. dry_run=true 只返回统一 diff 和逐文件摘要,不修改工作区。
  3. 真正写入前按本地 Feedback 策略审批;提交阶段再次校验内容和 mode,使用同目录临时文件 + rename,默认 atomic=true 时多文件中途失败会执行 best-effort rollback。
  4. 成功写入后同步 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 为字符串,并通过明确指定的 powershellpwshcmdbashshzsh 或 Shell 路径解释。省略时保持兼容:数组推断为 spawn,字符串推断为 shell
  • spawn 不接受 shell 参数,shell 不会隐式拼接 argv。Windows 上 .cmd / .bat(包括 npm 包装器)仍需受控 cmd.exe 包装;结果会通过 shell_wrapped 明确披露。
  • 命令结果和会话列表返回 execution_moderesolved_executableresolved_argvresolved_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 非破坏性重放。
  • 会话状态单调进入 exitedfailedtimed_outcancelledterminated
  • ChatGPT 单次可见输出默认最多 160 KiB、硬上限 512 KiB;完整可重放输出在本机受独立容量限制。
  • stdio cancellation 与 HTTP 请求取消会向下传播到命令、Serena、CodeGraph、Feedback 和搜索任务。

安全边界

文件工具会:

  • 接受工作区相对路径,以及 canonicalize 后仍在工作区中的绝对路径;
  • 拒绝 .. 越界和符号链接逃逸;
  • 使用原子写入并保留换行风格及文件权限;
  • 默认拒绝对多硬链接文件执行写入;
  • 在审批/预览后再次验证内容哈希和 mode;
  • 在多文件失败时执行 best-effort 回滚。

命令工具则仍以服务账户的宿主机权限运行。项目目前不提供 OS 级 sandboxcwd 位于工作区不代表命令无法访问工作区外路径。

执行配置:

  • 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 --testnpm testnpm run check/lint/typecheck 等。Shell 字符串只有在 read_only=true、命令结构简单且命中白名单时才自动执行;重定向、管道、命令连接或未知命令仍会请求 Feedback 审批。read_only=truerisk_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_idhistory_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_QUEUEDFEEDBACK_PENDING_NOT_OPENEDFEEDBACK_OPENEDFEEDBACK_SUBMITTEDFEEDBACK_CANCELLEDFEEDBACK_CALLER_CANCELLEDFEEDBACK_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