[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"skill:01M6GK59PDCBRZQ6D03BGXM8XM":3,"skill-same:01M6GK59PDCBRZQ6D03BGXM8XM":72},{"skillNo":4,"name":5,"nameZh":6,"description":7,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":6,"repositoryNo":12,"starsCount":13,"licenseSpdxId":14,"licenseFileUrl":6,"sourceHtmlUrl":15,"categories":16,"keywords":22,"publishedAt":41,"linkOnly":42,"markdownContent":43,"markdownBody":44,"frontMatter":45,"refName":46,"commitSha":47,"skillDirectory":48,"forksCount":13,"repositoryHtmlUrl":49,"repositoryHomepageUrl":6,"ownerHtmlUrl":50,"ownerBlogUrl":6,"ownerDescription":6,"updatedAt":51,"install":52,"resources":65},"01M6GK59PDCBRZQ6D03BGXM8XM","mcp-lsp-project-config",null,"配置、安装、检查、修复或迁移项目级 mcp-lsp stdio MCP，覆盖 Codex、Claude Code 和 Google Antigravity，以及 Windows 原生、WSL 原生和 Windows 宿主通过 wsl.exe 桥接 Linux sidecar 的自动选型。用户提到项目 MCP、LSP MCP、.codex\u002Fconfig.toml、.mcp.json、.agents\u002Fmcp_config.json、Codex 中 LSP 工具有时直接暴露有时只在延迟工具目录、ALL_TOOLS 过滤为空、工具已显示但调用报 client is closing、EOF、Transport closed，或希望三个客户端共用仓库内 mcp-lsp 时使用。","lihah111222333-cloud\u002FSuper-Dolphin-Agent-Cockpit","lihah111222333-cloud","https:\u002F\u002Favatars.githubusercontent.com\u002Fu\u002F254297992?v=4","01M6GJZ7ZK31PVRBS5XQWS56ET","01M6GJZ84Q0ANFYMPVK56PYSNW",0,"Apache-2.0","https:\u002F\u002Fgithub.com\u002Flihah111222333-cloud\u002FSuper-Dolphin-Agent-Cockpit\u002Fblob\u002Fmain\u002Fbin\u002FLSP\u002Fmcp-lsp-project-config-skill\u002FSKILL.md",[17],{"categoryNo":18,"categoryName":19,"taxonomyType":20,"taxonomyTypeDesc":21},"01JBSEEDCAT000000000000023","Skill与智能体开发","SCENARIO","使用场景",[23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40],"mcp lsp project config","config","mcp lsp","project","MCP","lsp","json","closing","工具","client","toml","Tools","code","windows","codex","antigravity","linux","google","2026-11-10 10:12:30",false,"---\nname: mcp-lsp-project-config\ndescription: 配置、安装、检查、修复或迁移项目级 mcp-lsp stdio MCP，覆盖 Codex、Claude Code 和 Google Antigravity，以及 Windows 原生、WSL 原生和 Windows 宿主通过 wsl.exe 桥接 Linux sidecar 的自动选型。用户提到项目 MCP、LSP MCP、.codex\u002Fconfig.toml、.mcp.json、.agents\u002Fmcp_config.json、工具已显示但调用报 client is closing、EOF、Transport closed，或希望三个客户端共用仓库内 mcp-lsp 时使用。\ndescription: 配置、安装、检查、修复或迁移项目级 mcp-lsp stdio MCP，覆盖 Codex、Claude Code 和 Google Antigravity，以及 Windows 原生、WSL 原生和 Windows 宿主通过 wsl.exe 桥接 Linux sidecar 的自动选型。用户提到项目 MCP、LSP MCP、.codex\u002Fconfig.toml、.mcp.json、.agents\u002Fmcp_config.json、Codex 中 LSP 工具有时直接暴露有时只在延迟工具目录、ALL_TOOLS 过滤为空、工具已显示但调用报 client is closing、EOF、Transport closed，或希望三个客户端共用仓库内 mcp-lsp 时使用。\n---\n\n# 项目级 mcp-lsp 配置\n\n根据目标项目、当前主机和已安装客户端的真实状态，选择 bin\u002FLSP 中正确的 mcp-lsp，并精确合并项目级配置。不要写用户级或全局配置。\n\n本技能提供判断方法和配置契约，不提供固定生成脚本。Agent 必须自行检查和编辑；不得为了单次配置默认创建新的生成器、wrapper 或安装脚本，除非用户明确要求。\n\n## 读取顺序\n\n1. 完整读取本技能。\n2. 读取 references\u002Fprovider-configs.md，掌握三家项目级文件、字段差异和刷新方式。\n3. 确认项目根、Git 状态、已有配置、将启动 MCP 的客户端运行环境、当前操作系统和 CPU；Windows 必须区分原生进程与 WSL 进程。\n4. 解析项目根及其上一级目录，按“确认可信 cwd 与 workspace root”向用户提问并等待明确选择；未确认不得写配置。\n5. 检查目标客户端当前版本、CLI help 或官方文档。已有参考与当前客户端冲突时，以当前官方格式和本机可验证行为为准，并同步修订参考。\n6. 读取所有将被修改的配置，建立现有 server 和设置清单后再编辑。\n\n## 同步客户端规范文件\n\n配置 MCP 之前，必须让对应客户端加载 LSP 工作规范：\n\n1. 完整读取 bin\u002FLSP\u002FAGENTS.md。\n2. 配置 Codex 或 Antigravity 时，目标是项目根 AGENTS.md。\n3. 配置 Claude Code 时，目标是项目根 CLAUDE.md。\n4. 配置三家时，同时同步 AGENTS.md 和 CLAUDE.md；不要假设一个客户端会读取另一个客户端的规范文件。\n5. 样板中的受管范围由 mcp-lsp-project-rules:start 和 mcp-lsp-project-rules:end 标记。目标已有同一标记时更新该范围，不得再次追加。\n6. 目标没有标记但已经有等价规则时，做语义对照；只补缺失项，可为本次纳入的规则添加一组标记，禁止制造重复章节。\n7. AGENTS.md 不存在时可以使用完整样板创建；CLAUDE.md 不存在时创建 CLAUDE.md，并只追加样板受管标记之间的规则，不要把 AGENTS.md 标题复制成 CLAUDE.md 标题。\n8. 已有目标文件时保留原内容和更强规则，只追加缺失的 LSP 规范，不得整份覆盖。\n\n同步后必须确认本次客户端对应的规范文件至少包含：\n\n- file、inspect、xref、grep、structure、patch_edit、completion 七个短工具名。\n- 定位、定义理解、引用或调用层级、精读、diagnostics 的证据链。\n- file(action=diagnostics) 是诊断入口，patch_edit 是编辑入口。\n- LSP 失败时先收窄重试，仍失败则记录 blocker，不得静默降级。\n- diagnostics 的 Error、Warning、Information、Hint 都要处理。\n- 修改后运行匹配的构建与测试，异常和缺配置 fail-fast。\n\n对应规范文件同步未完成或无法确认作用域时，不得继续声称 MCP 已按规范配置。MCP 配置让客户端发现工具，AGENTS.md 或 CLAUDE.md 让对应 Agent 按项目规则使用工具，两者缺一不可。\n\n## 选择并验证二进制\n\n| 当前主机 | 使用文件 | 预期 Go 目标 |\n|---|---|---|\n| macOS Intel | bin\u002FLSP\u002Fmcp-lsp-mac-x86 | darwin\u002Famd64 |\n| macOS Apple Silicon | bin\u002FLSP\u002Fmcp-lsp-mac-arm | darwin\u002Farm64 |\n| Linux\u002FWSL x86-64 | bin\u002FLSP\u002Fmcp-lsp-linux-x86 | linux\u002Famd64 |\n| Linux\u002FWSL ARM64 | bin\u002FLSP\u002Fmcp-lsp-linux-arm | linux\u002Farm64 |\n| Windows x64 | bin\u002FLSP\u002Fmcp-lsp-windows-x64.exe | windows\u002Famd64 |\n| Windows ARM64 | bin\u002FLSP\u002Fmcp-lsp-windows-arm64.exe | windows\u002Farm64 |\n| Windows x86 | bin\u002FLSP\u002Fmcp-lsp-windows-x86.exe | windows\u002F386 |\n\n上表中的 `mcp-lsp-windows-{x64,arm64,x86}.exe` 是发布包的 canonical 文件名及 `windows\u002F{amd64,arm64,386}` 架构映射，供打包、分发和配置示例选择；它们不是运行时 basename 白名单。运行时接受受信交付布局内的其他 `.exe` 名称（例如重命名或版本化名称），但仍强制校验受信 `bin`\u002F`bin\u002FLSP` 安装根、包内 `lsp` bundle、`lsp-manifest.json` 位置与摘要及可执行文件身份；改名不能绕过这些校验。Windows 资产和依赖仍只由 `NativeArch` 选择，`ProcessArch` 不得替代。\n\n不能只按文件名判断。优先用 go version -m 读取 Go 构建元数据并确认 GOOS\u002FGOARCH；macOS\u002FLinux 可用 file 交叉验证 Mach-O\u002FELF，Windows 可检查 PE Machine。若无法验证实际目标，记录 blocker，不要写配置。\n\nWindows 必须分别记录系统版本\u002Fbuild、操作系统原生架构和当前进程架构。二进制按原生架构选择；仿真进程的架构只用于审计，不能覆盖原生架构。mcp-lsp 安装器会用 Windows API 再次检测这三项并按目录最低版本\u002Fbuild fail-fast；Agent 不得用 `PROCESSOR_ARCHITECTURE` 或当前 shell 位数替代该判断。\n\n同时确认文件存在、非空；macOS\u002FLinux 还要确认可执行权限。不得把 Intel、ARM 或其他操作系统的文件配置给当前主机。\n\n### Windows 原生、WSL 原生与 Windows→WSL 桥接\n\n不要求用户填写额外平台开关。Agent 必须分别确认 MCP host 和 sidecar 的目标运行环境，不能把两者压缩成一个“当前平台”判断：\n\n1. **Windows 原生直连（Windows EXE 主线）**：Windows host 默认直接启动对应原生架构的 `windows\u002F*` EXE；`command`、`cwd`、resources 和 roots 全部使用 Windows drive\u002FUNC 路径。\n2. **WSL 原生直连**：WSL 内的 CLI\u002FIDE host 直接启动 `linux\u002F*` 二进制；所有路径使用 `\u002Fmnt\u002F...` 或其他 Linux 绝对路径。\n3. **Windows host 通过 `wsl.exe` 桥接 WSL sidecar**：只有用户明确要求 sidecar 在 WSL 运行、且实际 MCP host 是 Windows Codex Desktop\u002FIDE\u002FPowerShell 时使用。`wsl.exe` 是 Windows EXE 的启动\u002F桥接边界，不是替代 Windows EXE 的 Linux-only 旁路。Windows 不能直接 `CreateProcess` `\u002Fmnt\u002F...\u002Fmcp-lsp-linux-*`；`command` 必须是绝对 Windows `wsl.exe`，host 的 `cwd` 是 Windows 项目根，而 `args` 必须通过 `--cd \u003CWSL项目根> env KEY=VALUE... .\u002Fbin\u002FLSP\u002Fmcp-lsp-linux-*` 在 WSL 内设置 Linux resources\u002Froots 并启动 ELF。\n4. 当前编辑 shell 不等于 MCP host，也不等于 sidecar。必须分别记录 host、bridge（如有）和 sidecar 三层证据。无法确认任一层时先报告 blocker。\n5. 用 `go version -m` 和 `file` 复核 Linux ELF 的 GOOS\u002FGOARCH；用实际 `wsl.exe` command+args 完成 MCP initialize 和至少一次 tools\u002Fcall。`mcp-lsp` 本身不负责 Windows\u002FWSL 路径转换。\n6. Windows host 启动 `wsl.exe env ...` 时不得假设 WSL 用户的登录 PATH 已加载。先在目标发行版内分别用 `command -v` 定位 `go`、`gopls`、`node`、`typescript-language-server` 及项目需要的其他语言服务器，再把覆盖这些绝对目录的 Linux PATH 显式放进 args 的 `env` 段。缺少任一必需语言服务器时 fail-fast；不得用一个未经探测的通用 PATH 掩盖缺依赖。\n\n桥接模式禁止以下错误配置：\n\n- Windows host 的 `command` 直接写 `\u002Fmnt\u002Fc\u002F...\u002Fmcp-lsp-linux-x86`。\n- `command=wsl.exe`，却只在 `[mcp_servers.\u003Cname>.env]` 写 Linux 路径并假设 WSL 会可靠转换或继承这些值。\n- 依赖 Windows Codex 继承的 PATH 或 WSL 非登录进程的偶然 PATH，导致用户级 `\u002Fhome\u002F\u003Cuser>\u002F.local\u002Fbin` 中的 `gopls`、`typescript-language-server` 等不可见。\n- 把 Windows `cwd` 与 Linux `GO_AGENT_LSP_ROOT` 直接做字符串相等断言。\n- 在桥接链中改用 Windows `.exe`，却继续传 `\u002Fmnt\u002F...` roots。\n\nCodex Windows→WSL 的规范模板位于 `bin\u002FLSP\u002Fcodex-windows-wsl-lsp-config.example.toml`。\n\n当前 shell 就是目标客户端环境时，先记录自动探测证据：\n\n~~~powershell\n$isNativeWindows = ($PSVersionTable.PSEdition -eq \"Desktop\") -or ($IsWindows -eq $true)\n$isWSL = ($IsLinux -eq $true) -and (($null -ne $env:WSL_INTEROP) -or ($null -ne $env:WSL_DISTRO_NAME))\n[PSCustomObject]@{\n  OSVersion = [Environment]::OSVersion.Version.ToString()\n  OSArchitecture = [Runtime.InteropServices.RuntimeInformation]::OSArchitecture.ToString()\n  ProcessArchitecture = [Runtime.InteropServices.RuntimeInformation]::ProcessArchitecture.ToString()\n  ProcessorArchitectureEnv = $env:PROCESSOR_ARCHITECTURE\n}\n~~~\n\n~~~bash\nis_wsl=0\nif [ -n \"${WSL_INTEROP:-}${WSL_DISTRO_NAME:-}\" ] || grep -qi microsoft \u002Fproc\u002Fsys\u002Fkernel\u002Fosrelease 2>\u002Fdev\u002Fnull; then is_wsl=1; fi\nprintf 'is_wsl=%s arch=%s\\n' \"$is_wsl\" \"$(uname -m)\"\n~~~\n\n`$isWSL=true` 或 `is_wsl=1` 且 MCP host 本身位于 WSL 时选择 Linux 直连。`$isNativeWindows=true` 时先确认 sidecar 目标：原生目标选择 Windows `.exe`；用户明确要求 WSL sidecar 时选择 `wsl.exe` 桥接 Linux ELF。Windows 的 `OSArchitecture` 为 Arm64、X64、X86 时分别选择 `mcp-lsp-windows-arm64.exe`、`mcp-lsp-windows-x64.exe`、`mcp-lsp-windows-x86.exe`；`ProcessArchitecture` 不一致表示当前进程处于仿真层，不得据此降级。若当前 shell 只是在编辑另一个环境的配置，不能用编辑 shell 的结果覆盖 host\u002Fsidecar 判定，仍以目标客户端进程为准。\n\n### Windows NativeArch、ProcessArch 与官方依赖边界\n\n配置、安装和审计时把 `OSArchitecture` 记为 `NativeArch`，把 `ProcessArchitecture` 记为 `ProcessArch`。`NativeArch` 是唯一的 Windows 交付物\u002F依赖选择键；`ProcessArch` 仅是仿真诊断字段，不能让 ARM64 host 降级到 x64，也不能让 x64\u002Fx86 host 借用另一架构资产。Windows EXE、EmmyLua、Swift、Node 和 VCLibs 都必须对同一 `NativeArch` 做 fail-fast 选择和完整身份复验。\n\n必须把下列官方锁定事实当作配置审查边界（完整 URL\u002FSHA 清单见本目录的 `references\u002Fprovider-configs.md`）：\n\n- EmmyLua 固定为官方 `EmmyLuaLs\u002Femmylua-analyzer-rust` `0.25.1` `emmylua_ls-win32-arm64.zip`；归档和其中 `emmylua_ls.exe` 的 SHA-256、PE ARM64 必须复验，且只允许 Windows `NativeArch=ARM64`。\n- Swift\u002Fsourcekit-lsp 固定为 Swift `6.3.3` 官方 Windows ARM64 installer；`windows.msi`、`windows.cab` 和 `a22`–`a28`（ARM64\u002Fx64\u002Fx86 及 experimental sibling CAB）必须由同一 installer 提取并放在同一目录，不能删掉 sibling CAB 或跨版本混用；`sourcekit-lsp.exe` 必须为 ARM64。\n- Node 固定官方 `22.22.0` 的 `win-arm64`、`win-x64`、`win-x86` ZIP；VCLibs 固定微软 `Microsoft.VCLibs.140.00.UWPDesktop` `14.0.33321.0` 的 `arm64`、`x64`、`x86` Appx。每个架构分别锁定 URL\u002FSHA\u002F版本\u002F身份，不读 PATH、不跨架构回退。\n- Windows 私有 Terraform CLI companion 固定 `1.15.6`：ARM64 `https:\u002F\u002Freleases.hashicorp.com\u002Fterraform\u002F1.15.6\u002Fterraform_1.15.6_windows_arm64.zip`（`02820bcae3725c9c4e91deb6656e9b96ca8af9f395fc5faccc0820dd3295d6e0`）、x64 `..._windows_amd64.zip`（`56b4d3a157e346f8fc1e94254d0a944e6fec81f58ddd43eb274b8e0ebb56e334`）、x86 `..._windows_386.zip`（`00d51ccf53664f68bd6fb7dfa7edbc7bbff4032ff048787c096d23ece2dcc092`）。\n- Windows 私有 rustfmt companion 固定 Rust `1.96.0` `rustfmt-preview` MSVC 归档：ARM64 `https:\u002F\u002Fstatic.rust-lang.org\u002Fdist\u002F2026-05-28\u002Frustfmt-1.96.0-aarch64-pc-windows-msvc.tar.xz`（`d9e403d778e0ad95d814275b1265057478d4cde463d8bf620846056a7f00a59d`）、x64 `...-x86_64-pc-windows-msvc.tar.xz`（`7ae6d141dfb844355c4756a41f39ed45b74ff9295fff86bd0bf9b559a83c5d5d`）、x86 `...-i686-pc-windows-msvc.tar.xz`（`75a69f518db96b5c46fa4b98d169688e7670c8bff29b7f1831f6dcfdfc6311ab`）。\n- 两类 companion 均须验证归档\u002F解包摘要、PE Machine、产品根 ACL 与 reparse；只向 product-owned `terraform-ls`\u002F`rust-analyzer` 子进程注入同一 NativeArch 的 PATH。非 Windows 与外部配置不变，禁止 PATH、用户缓存和跨架构 fallback。下载\u002F安装 proof 与 correctness E2E 分离：本地锁定包存在时 correctness 必须 `cache_only=true`、`HTTP=0`，setup\u002Fimport receipt 不能冒充自动下载证明。此处中文说明是公共配置语义，实际平台选择仍只在 Windows 生产实现中执行。\n\n8.3 short path 只允许作为 Swift\u002FNode installer 或子进程的临时进程边界，用来规避 `MAX_PATH`；canonical long path 才是缓存、manifest、receipt、日志、roots 和安全身份，不能持久化短名或用短名作授权\u002F身份比较。TOML、PowerShell 和本文中的注释只解释配置与安全边界，不能授予 ACL、改变架构选择或执行提权。Windows Win32 `5`\u002F`1314` 必须保留为结构化 `authorization_required`；无宿主授权桥时报告 blocker，不改 ACL、不换目录、不吞错。以上规则仅作用于 Windows 原生；非 Windows 行为保持不变，macOS\u002FLinux\u002FWSL 原生行为和既有 Mach-O\u002FELF 依赖选择保持不变。\n\nKotlin\u002FIntelliJ 的 Windows ARM64 进程边界必须使用产品私有、物理扁平且经过 ACL、reparse、架构和摘要校验的 short root；`subst`、8.3、junction 和系统公共目录都不是合规替代。canonical root 仍用于缓存、manifest、receipt 和授权身份。容量预检或受控解包遇到空间不足时必须 fail-fast，receipt 分类为 `disk_space_exhausted`\u002F`runtime_failure`，不得伪装成合法空结果或能力不支持。\n\n当前远程 6b7 工具协议只认 content 纯文本行（`OK`\u002F`ERROR`\u002F`ATTR`\u002F`ROW`\u002F`HINT`\u002F`WARNING`）。`StructuredContent` 应为空且不可作为 fallback；验收只能依据 content 和动作合同分类 success、legal_empty、capability_unsupported 或 runtime_failure。\n\n## 确认可信 cwd 与 workspace root\n\n写入任何客户端配置前，必须先解析并向用户展示两个真实绝对路径，然后询问本次 LSP 的可信 cwd 选择：\n\n1. **本仓库**：`\u003Crepo-root>`。只允许 LSP 工具访问本仓库及其子目录，适合单仓库开发，也是最小权限选项。\n2. **仓库上一级**：`\u003Cparent-of-repo-root>`。允许 LSP 工具访问该上级目录及其全部子目录，适合顶层目录下多个相关 Git 微服务需要互相导航的场景。\n\n必须等待用户明确选择“本仓库”或“仓库上一级”；不得根据当前 shell cwd、配置文件位置、聊天截图或多仓库布局自行扩大范围。用户未确认、回答含糊、项目根无法唯一解析或项目根已经是文件系统根时，立即阻断并说明原因。除非用户另行明确指定并授权其他绝对路径，否则只提供上述两个候选。\n\n将用户选中的绝对路径记为 `\u003Ctrusted-cwd>`，并保持以下绑定：\n\n- 直连模式下，支持 `cwd` 字段的客户端 server 配置必须写 `cwd = \u003Ctrusted-cwd>`；不支持该字段的客户端不得发明字段。\n- `GO_AGENT_LSP_ROOT=\u003Ctrusted-cwd>`。\n- `GO_AGENT_LSP_ROOTS` 必须由 JSON encoder 生成，当前选择只写一个元素：`[\u003Ctrusted-cwd>]`。\n- 项目级配置文件以及 AGENTS.md\u002FCLAUDE.md 仍写在原项目根；选择仓库上一级不等于把配置迁移到上一级。\n- `SUPER_DOLPHIN_RUNTIME_RESOURCES_DIR` 仍指向已验证的分发包资源根或 source checkout 根，不跟随 `\u003Ctrusted-cwd>` 扩大。\n\nWindows→WSL 桥接是路径表示上的明确例外，不是扩大权限：host `cwd` 写 Windows 项目根；`wsl.exe --cd`、resources 和两个 roots 写同一目录的 WSL 绝对路径。必须分别解析两侧真实路径，并用 `wslpath` 或 `readlink -f` 证明它们映射到同一目录；不得用字符串相等代替映射验证。\n\n这里控制的是 mcp-lsp 的 workspace containment。可信目录之外的路径会返回 `path_outside_workspace`；扩大 LSP workspace 不等于自动扩大客户端自身的文件系统沙箱或写权限。\n\n## 必需 sidecar 启动契约\n\n每一个本地 stdio server 的 `env` 必须显式包含：\n\n~~~text\nSUPER_DOLPHIN_RUNTIME_MODE=dev\nSUPER_DOLPHIN_RUNTIME_RESOURCES_DIR=\u003C分发包资源根；源码构建则为 checkout 根，必须是绝对路径>\nSUPER_DOLPHIN_DEPENDENCY_PROFILE=production\nGO_AGENT_LSP_ROOT=\u003C用户确认的 trusted-cwd 绝对路径>\nGO_AGENT_LSP_ROOTS=\u003C由 JSON encoder 生成、仅含 trusted-cwd 的绝对路径数组>\n~~~\n\n前三项是 sidecar 启动所需契约，后两项绑定可信 LSP workspace。独立 `mcp-lsp` 使用 `production`；`desktop_host` 只用于桌面 owner 的开发启动器，不能复制到三家独立 MCP 配置。不得依赖 shell 中偶然继承的值，不得在二进制中添加隐式默认值。\n\n原生 Windows 使用共享 gopls 时，当前 server 的 `env` 还必须显式包含：\n\n~~~text\nSUPER_DOLPHIN_LSP_BUNDLE_DIR=\u003Cbin\u002FLSP\u002Flsp 的绝对路径>\nSUPER_DOLPHIN_LSP_MANIFEST=\u003Cbin\u002FLSP\u002Flsp\u002Flsp-manifest.json 的绝对路径>\n~~~\n\n这两个字段只证明包内 gopls 的路径与摘要，不改变可信 workspace；不得把它们与 `GO_AGENT_LSP_ROOT(S)` 混用。bundle、manifest 或原生 `gopls.exe` 缺失时 fail-fast，不得退回 PATH gopls。把 bundle 仅视为命中 adapter 的受信二进制覆盖，禁止据此裁剪通用语言注册；manifest 未包含的其他已支持语言仍须进入自动发现或按需安装链路。\n\n`SUPER_DOLPHIN_RUNTIME_RESOURCES_DIR` 在本 dev 分发布局中是随 `bin\u002FLSP` 交付的资源根；从源码构建时是 source checkout 根。它不是目标源码文件目录，也不是凭二进制位置临时猜出的值。若用户采用其他资源布局，必须先核对真实资源根，再显式配置。\n\nWindows 的 `GO_AGENT_LSP_ROOTS` 必须由 JSON encoder 生成；不要手工拼接 `C:\\...`。直连模式的 command、cwd、runtime resources 与 roots 必须属于同一种路径体系。Windows→WSL 桥接模式则必须严格分层：Windows `command\u002Fcwd` 属于 host，`args` 中 `--cd`、resources、roots 和 Linux binary 属于 WSL sidecar；不得跨层混写。\n\n桥接模式必须把五个必需变量和经目标 WSL 实机探测的 Linux `PATH` 作为 `wsl.exe` 参数中 `env KEY=VALUE...` 的一部分显式注入 Linux 进程。可以在 Codex server 的 `env` 表中同步保留 sidecar 字段用于配置审计，但不能依赖 Windows host 环境自动成为正确的 Linux sidecar 环境。PATH 中的 home 目录必须先解析为绝对 Linux 路径；不要把不会经 shell 展开的字面 `$HOME` 写入 TOML args。\n\n正式构建的 LSP 空闲生命周期默认且最低为 15 分钟。不要在项目配置中写小于 `15m` 的 `MCP_LSP_IDLE_TIMEOUT` 或旧别名；正式二进制会 fail-fast。带 `mcp_lsp_short_idle_precheck` build tag 的短周期二进制只用于快速预检，不能交付，也不能替代“14 分钟仍存活、15 分钟后回收、精确进程身份零残留”的真实生命周期证据。\n\nWindows Win32 `5` 或 `1314` 权限错误必须保留为结构化 `authorization_required`。桌面宿主必须通过 `ApprovalRequester` 发布真实授权提示；只有用户明确批准后，才允许对同一个已固定 peer 精确重试一次。拒绝、无决定、无审批 UI 或单次重试仍失败时都保持 blocker，禁止循环重试、改 ACL、换备用目录或吞错。独立 stdio sidecar 没有宿主授权桥，不能自行提权，也不能声称已经弹窗或取得权限。\n\n原生 Windows 且 `SUPER_DOLPHIN_DEPENDENCY_PROFILE=production` 时，语义工具可见性还可由带 Windows build tag 的生产自动安装器提供：空 PATH、无额外 bundle 的 `tools\u002Flist` 也必须精确包含七个工具族，并在 sidecar 日志中标明 `source=windows_production_auto_installer`。这不是语言级 PASS；随后必须实际调用目标语言并验证安装、语义结果和生命周期。非 Windows\u002FWSL 不读取这条 Windows 策略，仍按自己的 bundle\u002FPATH 事实判断。\n\n语言级验收必须逐一执行精确 36 键闭包，分布固定为 `file\u002Finspect\u002Fxref\u002Fgrep\u002Fstructure\u002Fpatch_edit\u002Fcompletion = 8\u002F5\u002F7\u002F6\u002F5\u002F4\u002F1`：`file` 为 `open_file`、五种 `read_file-*` 动作（`single\u002Ffull\u002Fbatch\u002Flines\u002Ffunction`）及 `diagnostics`、`diagnostics-batch`；`inspect` 为 `hover\u002Fdefinition\u002Fimplementation\u002Ftype_definition\u002Fsignature_help`；`xref` 为 `references`、`references-no-declaration`、三种 `call_hierarchy-*` 与两种 `type_hierarchy-*`；`grep` 为 `text_search`、`text_search-regex`、`text_search-paths`、`text_search-file_paths`、`text_search-glob`、`ast_search`；`structure` 为 `document_symbol`、两种 `workspace_symbol-*`、`folding_range`、`semantic_tokens`；`patch_edit` 为 `replace_range\u002Frename\u002Fcode_action\u002Fformat`；`completion` 为 `completion`。精确键以 `bin\u002FLSP\u002FREADME.md` 的“36 个小动作的精确验收合同”为可读清单，以 E2E 的 `realMCPExpectedActionKeys` 为可执行守卫。结果必须区分 `success`、`legal_empty_success`、能力快照明确允许的 `capability_unsupported` 和 `runtime_failure\u002FNON_PASS`；不得用工具可见性或合法空结果掩盖运行失败。\n\n## 根据客户端配置\n\n只处理用户要求的客户端；用户要求 all 或三家共用时才处理全部。\n\n### Codex\n\n- 项目文件：.codex\u002Fconfig.toml。\n- 只在项目受信任时生效。\n- stdio server 使用 mcp_servers.\u003Cname> 表、command、args、cwd 和 env。\n- env 必须包含三个 sidecar 启动字段与两个 `GO_AGENT_LSP_ROOT(S)` workspace 字段；原生 Windows 还必须包含两个受信 LSP bundle 字段。\n- Windows Desktop\u002FIDE 桥接 WSL 时，使用 `wsl.exe` 模板，并在 args 的 `env` 段显式传入五个 Linux sidecar 字段与实机探测的 Linux PATH；不得让 Windows 直接执行 Linux ELF，也不得依赖登录 shell 才存在的 PATH 修改。\n- 需要强制 LSP 时设置 `enabled = true` 和 `required = true`；初始化失败必须阻断，不能静默省略后继续任务。\n- 保留其他 MCP server、features、hooks、model 和逐工具审批设置。\n\n#### Codex 工具延迟暴露\n\nCodex 可能已发现并启动 `lsp`，但首层工具列表不直接显示 `mcp__lsp__*`，只把它们放入 code mode 的延迟工具目录。先用 `codex features list` 检查 `tool_search_always_defer_mcp_tools`：若该项显示 `removed` 且有效值为 `true`，不要写 `features.tool_search_always_defer_mcp_tools = false`；该旧开关不会改变有效状态。\n\n要让 LSP 命名空间作为直接工具暴露，逐字段合并以下项目级配置，不得覆盖已有 `[features]` 内容：\n\n~~~toml\n[features.code_mode]\nenabled = true\ndirect_only_tool_namespaces = [\"mcp__lsp\"]\n~~~\n\n`mcp__lsp` 是命名空间，不是具体工具名。该设置控制工具 schema 的直接暴露方式，不承诺 sidecar 零耗时启动；同时保留 `[mcp_servers.lsp] required = true`，让初始化失败 fail-fast。修改后必须完整重启 Codex 宿主并新建任务；旧任务已经生成的工具 schema 不能作为新配置生效证据。\n\n重启后同时验证三项，缺一不可：\n\n1. 当前任务的顶层直接工具声明出现 `mcp__lsp`，并包含 `file`、`inspect`、`xref`、`grep`、`structure`、`patch_edit`、`completion`。\n2. 不经过 `functions.exec`，直接调用至少一个 `mcp__lsp.\u003Ctool>` 成功。\n3. 在 `functions.exec` 内执行 `ALL_TOOLS.filter(({ name }) => name.startsWith(\"mcp__lsp__\"))`，结果应为 `[]`。`ALL_TOOLS` 是 code mode 的嵌套\u002F延迟工具目录；direct-only 生效后 LSP 从这里移除，因此空数组是成功证据，不是未注册。只有“顶层直接工具不存在或直接调用失败”时，空数组才表示 LSP 两边都不可用。\n\n最后确认 `codex features list` 中 `code_mode` 为 `true`，并用 `\u002Fmcp` 检查 `lsp` 已连接。不要把 `ALL_TOOLS` 非空、仅 `\u002Fmcp` enabled 或仅有 sidecar 进程当成直接暴露成功。\n\n### Claude Code\n\n- 项目文件：项目根 .mcp.json。\n- 使用 mcpServers 对象中的项目 server；这是 project scope。\n- 本地 stdio server 使用 command、args 和 env。\n- env 必须包含三个 sidecar 启动字段与两个 `GO_AGENT_LSP_ROOT(S)` workspace 字段；原生 Windows 还必须包含两个受信 LSP bundle 字段。\n- 首次加载项目 server 时需要 workspace trust 和用户批准。\n- 不得误写默认 local scope 或用户级 ~\u002F.claude.json。\n\n### Google Antigravity\n\n- 项目文件：.agents\u002Fmcp_config.json。\n- 使用 mcpServers 对象中的 workspace-local server。\n- 本地 stdio server 使用 command、args、cwd 和 env。\n- env 必须包含三个 sidecar 启动字段与两个 `GO_AGENT_LSP_ROOT(S)` workspace 字段；原生 Windows 还必须包含两个受信 LSP bundle 字段。\n- 不得写全局 ~\u002F.gemini\u002Fconfig\u002Fmcp_config.json。\n- 远程 MCP 才使用 serverUrl；本地 mcp-lsp 不使用 url、httpUrl 或 serverUrl。\n\n#### Antigravity 同名配置冲突排查\n\n工具已经显示但首次或后续 `tools\u002Fcall` 报 `client is closing: EOF`、`Transport closed` 或 sidecar 很快退出时，不要只检查 `.agents\u002Fmcp_config.json`，也不要先归因于 Antigravity。先在当前 workspace 内完整盘点：\n\n1. 规范入口 `\u003Cworkspace>\u002F.agents\u002Fmcp_config.json`。\n2. 自动加载的 `\u003Cworkspace>\u002F.agents\u002Fplugins\u002F*\u002Fmcp_config.json`。\n3. 旧安装或误写的 `\u003Cworkspace>\u002F.gemini\u002Fconfig\u002Fmcp_config.json`。\n4. 全局 `~\u002F.gemini\u002Fconfig\u002Fmcp_config.json` 中是否还有同名 server；只读检查，未经用户明确授权不得修改全局配置。\n\n同名 `lsp` 出现在规范入口和插件或旧副本中不是冗余备份：不同 `cwd`、roots、command 或 env 可能让客户端发现工具后启动另一份 server，造成调用时路径解析、进程 owner 和 stdio 生命周期不一致。以用户确认的正确配置为基准逐字段比较；确认插件只用于重复注册同一 server、没有其他能力后，获得删除授权再删除整个插件目录。不要保留空 `plugin.json`、wrapper 或 stale 配置。\n\n必须从 `~\u002F.super-dolphin\u002Flog\u002Fmcp-lsp\u002Fmcp-lsp-*.log` 核对实际生效值和时序：\n\n- `tools\u002Fcall begin\u002Fdone` 之后才出现 `mcp stdio: read failed EOF`，说明二进制完成过调用，EOF 是 stdin 被关闭后的结果，不是二进制崩溃证据。\n- `resolve parent path: lstat \u003Ctrusted-cwd>\u002F...` 说明请求相对路径按实际 trusted root 解析；用日志中的 root 和请求 path 重建最终路径。\n- `sidecar requires SUPER_DOLPHIN_RUNTIME_MODE...` 只证明该次进程缺少启动 env。若它来自 Agent 用 shell 裸跑二进制的探测，不得据此断言正式 MCP server 配置漏传 env。\n- `context canceled` 可能是上游 cascade 取消后的收敛结果；必须向前找到第一个工具错误或 stdin EOF，不能把最后一行当首因。\n\n选择“仓库上一级”为 `\u003Ctrusted-cwd>` 时，相对工具路径也以该上一级为基准。读取 `\u003Ctrusted-cwd>\u002Frepo-a\u002Fcmd\u002Fmain.go` 必须传 `repo-a\u002Fcmd\u002Fmain.go`，不能传 `cmd\u002Fmain.go`；否则会错误解析为 `\u003Ctrusted-cwd>\u002Fcmd\u002Fmain.go`。验证时必须覆盖这种带仓库目录前缀的真实调用。\n\n删除重复配置或修改 server 后，必须完整退出并重启 Antigravity 宿主，再在 MCP Servers 页面 Refresh。仅 Refresh、新建 Agent 会话、重新加载窗口、覆盖配置或替换二进制都不能保证旧 stdio client 被销毁；已经 closing 的 client 不能原地复活。\n\n## 修改配置后必须重启宿主\n\n修改任何本地 stdio MCP 的 command、args、cwd、env、server 名、启用状态或配置来源后，必须完整停止并重新启动实际拥有 stdio 管道的宿主进程，然后再验证。该规则适用于 Codex、Claude Code、Antigravity 以及其他 MCP host：\n\n- Codex Desktop\u002FIDE：完整退出并重新打开宿主应用；Codex CLI：结束当前 CLI 进程并重新启动。\n- Claude Code：结束当前 Claude Code\u002FCLI 或承载其 MCP client 的 IDE host，再重新启动。\n- Antigravity IDE\u002FDesktop：完整退出并重新打开 Antigravity；Antigravity CLI：结束当前 CLI 进程并重新启动。\n\n不得把 Refresh、Reload Window、重新打开项目、新建聊天或手工杀掉\u002F重启 `mcp-lsp` 当作宿主重启。stdio 管道和 MCP client 由宿主拥有；宿主未重启时，旧进程、旧 env、旧配置快照或 closing client 都可能继续被复用。无法重启宿主时，把在线验证记为 `BLOCKED_HOST_RESTART_REQUIRED`，不得声称配置已经生效。\n\n## Agent 自适配\n\nAgent 可以根据事实调整 server 名、路径、环境变量、timeout、审批设置及客户端专属字段，也可以修改本技能和 references\u002Fprovider-configs.md，使其匹配已验证的新版本行为。\n\n自适配必须保留这些不变量：\n\n1. 只写项目级配置。\n2. 先按客户端同步项目根 AGENTS.md、CLAUDE.md 或两者，并保证重复执行不会重复追加。\n3. 写入前严格读取并解析现有 JSON\u002FTOML；未知结构立即阻断。\n4. 逐字段合并，保留其他 server 和非 MCP 设置，不得整份覆盖。\n5. 同名 server 内容不同时先展示差异并判断 owner；不得静默替换。\n6. 直连模式的 command、cwd 和 roots 使用 sidecar 平台的一致路径。Windows→WSL 桥接模式的 command\u002Fcwd 使用 Windows 路径，args 内的 `--cd`、resources、roots 和 Linux ELF 使用经验证映射到同一可信目录的 WSL 路径；不得把桥接所需的分层路径误判为混用。\n7. 不写密钥、令牌、账号、OAuth secret 或其他凭据。\n8. 缺文件、错误架构、解析失败、schema 不明或客户端不受支持时 fail-fast。\n9. 三个 sidecar 必需字段必须显式写在 server env 中；原生 Windows 的两个受信 LSP bundle 字段同样必须显式提供。不为一次性差异增加默认值、兼容分支或隐式 fallback。\n10. 保留用户已有 `GOTOOLCHAIN` 策略。`auto` 或 `\u003Cname>+auto` 由 Go 在模块\u002Fgo.work 目录中执行真实选择；不得为某个项目硬编码通用 Go 补丁版本。\n\n如果目标项目的布局与 bin\u002FLSP 不同，Agent 应直接按实际路径配置并更新说明，而不是强行搬运目录。移动项目或换机器后，要重新确认绝对路径和二进制架构。\n\n## 编辑方法\n\n1. 先输出拟修改文件、已有 server、目标 server 和字段差异。\n2. 使用精确补丁或结构化编辑完成最小变更。\n3. JSON 必须重新解析；TOML 必须通过当前客户端或可靠 TOML parser 重新解析。\n4. 检查 diff，确认未删除或重排无关设置。\n5. 配置含本机绝对路径时，明确说明是否适合提交；不得把本机配置冒充跨机器通用配置。\n\n## 验证\n\n1. 重新验证直连 command 或桥接链中的 `wsl.exe` 与 Linux binary 均存在、非空、架构正确；桥接模式必须确认 Linux binary 是 ELF 且 GOOS\u002FGOARCH 匹配 WSL。\n2. 直连模式确认 cwd、`GO_AGENT_LSP_ROOT` 和解码后的 `GO_AGENT_LSP_ROOTS` 与 `\u003Ctrusted-cwd>` 完全一致。桥接模式分别验证 Windows cwd 和 WSL roots，并证明两者映射到同一用户确认的可信目录；不得做错误的跨平台字符串相等断言。\n3. 重新读取本次客户端对应的 AGENTS.md、CLAUDE.md 或两者，确认受管规则存在一次且必需语义完整。\n4. 重新解析所有修改后的 JSON\u002FTOML。\n5. Codex：完整退出并重启 Codex Desktop\u002FIDE 宿主或 CLI 进程；信任项目后用 \u002Fmcp 或 codex mcp list 检查。\n6. Claude Code：完整结束并重启 Claude Code\u002FCLI 或承载 MCP client 的 IDE host；完成 workspace trust 和项目 MCP 批准后，用 \u002Fmcp、claude mcp list 或 claude mcp get 检查。\n7. Antigravity：完整退出并重启 Antigravity IDE\u002FDesktop 或 CLI 进程；宿主重启后再在 MCP Servers 页面 Refresh，或在 CLI 用 \u002Fmcp 检查。\n8. 至少实际调用 file、structure、inspect、xref、diagnostics 中的一项；列表显示 enabled 不是运行证据。\n9. 对含中文、空格或字面 `%` 的项目路径，至少用 `file(action=diagnostics)` 验证一次 file URI 能回到 workspace 内本机路径；`path_outside_workspace` 不能记为 PASS。\n10. 对选择“仓库上一级”的配置，必须实际读取或导航一个位于上一级内、但不在本仓库内的已知文件；若没有可安全验证的相邻文件，明确记为未验证，不得扩大到其他目录取证。\n11. 对 Go 项目保留并验证用户的 `GOTOOLCHAIN=auto`\u002F`\u003Cname>+auto` 策略；版本探测应在已解析的 module 或 go.work 目录执行。\n12. 若配置修改需要第二次复核，重复读取配置，确认没有重复规则、重复 server、stale 路径或旧字段。\n13. Antigravity 必须再次扫描 `.agents\u002Fplugins\u002F*\u002Fmcp_config.json` 和 workspace 内 `.gemini\u002Fconfig\u002Fmcp_config.json`，确认没有同名 `lsp` 副本；`initialize`、`tools\u002Flist` 和 UI enabled 不能替代至少一次真实 `tools\u002Fcall`。\n14. Windows→WSL 桥接必须使用配置中的完整 `command + args` 做启动验证；仅在 WSL shell 中裸跑 Linux binary 不能证明 Windows host 可以创建该 MCP 进程。\n15. 桥接验证必须检查 `tools\u002Flist` 精确包含 `file`、`inspect`、`xref`、`grep`、`structure`、`patch_edit`、`completion` 七个工具。只出现 `file`、`grep` 时，优先用同一 command+args 执行 `command -v gopls` 和 `command -v typescript-language-server` 核对实际 PATH；不得把“server 已启动”写成 PASS。\n16. 原生 Windows production 验证必须同时核对七族清单和可见性来源日志；PATH\u002Fbundle 为空时应命中 `windows_production_auto_installer`。只出现 `file`、`grep` 时先检查三个 `SUPER_DOLPHIN_*` 字段、实际 Windows EXE\u002FNativeArch 和 installer 注册错误，不得照搬 WSL 的 PATH 修复或把两工具状态写成 PASS。\n\n报告二进制目标、修改的项目级文件、保留的既有设置、解析结果、客户端发现状态和实际工具调用证据。未启动对应客户端时，把在线连接明确标为未验证。\n","# 项目级 mcp-lsp 配置\n\n根据目标项目、当前主机和已安装客户端的真实状态，选择 bin\u002FLSP 中正确的 mcp-lsp，并精确合并项目级配置。不要写用户级或全局配置。\n\n本技能提供判断方法和配置契约，不提供固定生成脚本。Agent 必须自行检查和编辑；不得为了单次配置默认创建新的生成器、wrapper 或安装脚本，除非用户明确要求。\n\n## 读取顺序\n\n1. 完整读取本技能。\n2. 读取 references\u002Fprovider-configs.md，掌握三家项目级文件、字段差异和刷新方式。\n3. 确认项目根、Git 状态、已有配置、将启动 MCP 的客户端运行环境、当前操作系统和 CPU；Windows 必须区分原生进程与 WSL 进程。\n4. 解析项目根及其上一级目录，按“确认可信 cwd 与 workspace root”向用户提问并等待明确选择；未确认不得写配置。\n5. 检查目标客户端当前版本、CLI help 或官方文档。已有参考与当前客户端冲突时，以当前官方格式和本机可验证行为为准，并同步修订参考。\n6. 读取所有将被修改的配置，建立现有 server 和设置清单后再编辑。\n\n## 同步客户端规范文件\n\n配置 MCP 之前，必须让对应客户端加载 LSP 工作规范：\n\n1. 完整读取 bin\u002FLSP\u002FAGENTS.md。\n2. 配置 Codex 或 Antigravity 时，目标是项目根 AGENTS.md。\n3. 配置 Claude Code 时，目标是项目根 CLAUDE.md。\n4. 配置三家时，同时同步 AGENTS.md 和 CLAUDE.md；不要假设一个客户端会读取另一个客户端的规范文件。\n5. 样板中的受管范围由 mcp-lsp-project-rules:start 和 mcp-lsp-project-rules:end 标记。目标已有同一标记时更新该范围，不得再次追加。\n6. 目标没有标记但已经有等价规则时，做语义对照；只补缺失项，可为本次纳入的规则添加一组标记，禁止制造重复章节。\n7. AGENTS.md 不存在时可以使用完整样板创建；CLAUDE.md 不存在时创建 CLAUDE.md，并只追加样板受管标记之间的规则，不要把 AGENTS.md 标题复制成 CLAUDE.md 标题。\n8. 已有目标文件时保留原内容和更强规则，只追加缺失的 LSP 规范，不得整份覆盖。\n\n同步后必须确认本次客户端对应的规范文件至少包含：\n\n- file、inspect、xref、grep、structure、patch_edit、completion 七个短工具名。\n- 定位、定义理解、引用或调用层级、精读、diagnostics 的证据链。\n- file(action=diagnostics) 是诊断入口，patch_edit 是编辑入口。\n- LSP 失败时先收窄重试，仍失败则记录 blocker，不得静默降级。\n- diagnostics 的 Error、Warning、Information、Hint 都要处理。\n- 修改后运行匹配的构建与测试，异常和缺配置 fail-fast。\n\n对应规范文件同步未完成或无法确认作用域时，不得继续声称 MCP 已按规范配置。MCP 配置让客户端发现工具，AGENTS.md 或 CLAUDE.md 让对应 Agent 按项目规则使用工具，两者缺一不可。\n\n## 选择并验证二进制\n\n| 当前主机 | 使用文件 | 预期 Go 目标 |\n|---|---|---|\n| macOS Intel | bin\u002FLSP\u002Fmcp-lsp-mac-x86 | darwin\u002Famd64 |\n| macOS Apple Silicon | bin\u002FLSP\u002Fmcp-lsp-mac-arm | darwin\u002Farm64 |\n| Linux\u002FWSL x86-64 | bin\u002FLSP\u002Fmcp-lsp-linux-x86 | linux\u002Famd64 |\n| Linux\u002FWSL ARM64 | bin\u002FLSP\u002Fmcp-lsp-linux-arm | linux\u002Farm64 |\n| Windows x64 | bin\u002FLSP\u002Fmcp-lsp-windows-x64.exe | windows\u002Famd64 |\n| Windows ARM64 | bin\u002FLSP\u002Fmcp-lsp-windows-arm64.exe | windows\u002Farm64 |\n| Windows x86 | bin\u002FLSP\u002Fmcp-lsp-windows-x86.exe | windows\u002F386 |\n\n上表中的 `mcp-lsp-windows-{x64,arm64,x86}.exe` 是发布包的 canonical 文件名及 `windows\u002F{amd64,arm64,386}` 架构映射，供打包、分发和配置示例选择；它们不是运行时 basename 白名单。运行时接受受信交付布局内的其他 `.exe` 名称（例如重命名或版本化名称），但仍强制校验受信 `bin`\u002F`bin\u002FLSP` 安装根、包内 `lsp` bundle、`lsp-manifest.json` 位置与摘要及可执行文件身份；改名不能绕过这些校验。Windows 资产和依赖仍只由 `NativeArch` 选择，`ProcessArch` 不得替代。\n\n不能只按文件名判断。优先用 go version -m 读取 Go 构建元数据并确认 GOOS\u002FGOARCH；macOS\u002FLinux 可用 file 交叉验证 Mach-O\u002FELF，Windows 可检查 PE Machine。若无法验证实际目标，记录 blocker，不要写配置。\n\nWindows 必须分别记录系统版本\u002Fbuild、操作系统原生架构和当前进程架构。二进制按原生架构选择；仿真进程的架构只用于审计，不能覆盖原生架构。mcp-lsp 安装器会用 Windows API 再次检测这三项并按目录最低版本\u002Fbuild fail-fast；Agent 不得用 `PROCESSOR_ARCHITECTURE` 或当前 shell 位数替代该判断。\n\n同时确认文件存在、非空；macOS\u002FLinux 还要确认可执行权限。不得把 Intel、ARM 或其他操作系统的文件配置给当前主机。\n\n### Windows 原生、WSL 原生与 Windows→WSL 桥接\n\n不要求用户填写额外平台开关。Agent 必须分别确认 MCP host 和 sidecar 的目标运行环境，不能把两者压缩成一个“当前平台”判断：\n\n1. **Windows 原生直连（Windows EXE 主线）**：Windows host 默认直接启动对应原生架构的 `windows\u002F*` EXE；`command`、`cwd`、resources 和 roots 全部使用 Windows drive\u002FUNC 路径。\n2. **WSL 原生直连**：WSL 内的 CLI\u002FIDE host 直接启动 `linux\u002F*` 二进制；所有路径使用 `\u002Fmnt\u002F...` 或其他 Linux 绝对路径。\n3. **Windows host 通过 `wsl.exe` 桥接 WSL sidecar**：只有用户明确要求 sidecar 在 WSL 运行、且实际 MCP host 是 Windows Codex Desktop\u002FIDE\u002FPowerShell 时使用。`wsl.exe` 是 Windows EXE 的启动\u002F桥接边界，不是替代 Windows EXE 的 Linux-only 旁路。Windows 不能直接 `CreateProcess` `\u002Fmnt\u002F...\u002Fmcp-lsp-linux-*`；`command` 必须是绝对 Windows `wsl.exe`，host 的 `cwd` 是 Windows 项目根，而 `args` 必须通过 `--cd \u003CWSL项目根> env KEY=VALUE... .\u002Fbin\u002FLSP\u002Fmcp-lsp-linux-*` 在 WSL 内设置 Linux resources\u002Froots 并启动 ELF。\n4. 当前编辑 shell 不等于 MCP host，也不等于 sidecar。必须分别记录 host、bridge（如有）和 sidecar 三层证据。无法确认任一层时先报告 blocker。\n5. 用 `go version -m` 和 `file` 复核 Linux ELF 的 GOOS\u002FGOARCH；用实际 `wsl.exe` command+args 完成 MCP initialize 和至少一次 tools\u002Fcall。`mcp-lsp` 本身不负责 Windows\u002FWSL 路径转换。\n6. Windows host 启动 `wsl.exe env ...` 时不得假设 WSL 用户的登录 PATH 已加载。先在目标发行版内分别用 `command -v` 定位 `go`、`gopls`、`node`、`typescript-language-server` 及项目需要的其他语言服务器，再把覆盖这些绝对目录的 Linux PATH 显式放进 args 的 `env` 段。缺少任一必需语言服务器时 fail-fast；不得用一个未经探测的通用 PATH 掩盖缺依赖。\n\n桥接模式禁止以下错误配置：\n\n- Windows host 的 `command` 直接写 `\u002Fmnt\u002Fc\u002F...\u002Fmcp-lsp-linux-x86`。\n- `command=wsl.exe`，却只在 `[mcp_servers.\u003Cname>.env]` 写 Linux 路径并假设 WSL 会可靠转换或继承这些值。\n- 依赖 Windows Codex 继承的 PATH 或 WSL 非登录进程的偶然 PATH，导致用户级 `\u002Fhome\u002F\u003Cuser>\u002F.local\u002Fbin` 中的 `gopls`、`typescript-language-server` 等不可见。\n- 把 Windows `cwd` 与 Linux `GO_AGENT_LSP_ROOT` 直接做字符串相等断言。\n- 在桥接链中改用 Windows `.exe`，却继续传 `\u002Fmnt\u002F...` roots。\n\nCodex Windows→WSL 的规范模板位于 `bin\u002FLSP\u002Fcodex-windows-wsl-lsp-config.example.toml`。\n\n当前 shell 就是目标客户端环境时，先记录自动探测证据：\n\n~~~powershell\n$isNativeWindows = ($PSVersionTable.PSEdition -eq \"Desktop\") -or ($IsWindows -eq $true)\n$isWSL = ($IsLinux -eq $true) -and (($null -ne $env:WSL_INTEROP) -or ($null -ne $env:WSL_DISTRO_NAME))\n[PSCustomObject]@{\n  OSVersion = [Environment]::OSVersion.Version.ToString()\n  OSArchitecture = [Runtime.InteropServices.RuntimeInformation]::OSArchitecture.ToString()\n  ProcessArchitecture = [Runtime.InteropServices.RuntimeInformation]::ProcessArchitecture.ToString()\n  ProcessorArchitectureEnv = $env:PROCESSOR_ARCHITECTURE\n}\n~~~\n\n~~~bash\nis_wsl=0\nif [ -n \"${WSL_INTEROP:-}${WSL_DISTRO_NAME:-}\" ] || grep -qi microsoft \u002Fproc\u002Fsys\u002Fkernel\u002Fosrelease 2>\u002Fdev\u002Fnull; then is_wsl=1; fi\nprintf 'is_wsl=%s arch=%s\\n' \"$is_wsl\" \"$(uname -m)\"\n~~~\n\n`$isWSL=true` 或 `is_wsl=1` 且 MCP host 本身位于 WSL 时选择 Linux 直连。`$isNativeWindows=true` 时先确认 sidecar 目标：原生目标选择 Windows `.exe`；用户明确要求 WSL sidecar 时选择 `wsl.exe` 桥接 Linux ELF。Windows 的 `OSArchitecture` 为 Arm64、X64、X86 时分别选择 `mcp-lsp-windows-arm64.exe`、`mcp-lsp-windows-x64.exe`、`mcp-lsp-windows-x86.exe`；`ProcessArchitecture` 不一致表示当前进程处于仿真层，不得据此降级。若当前 shell 只是在编辑另一个环境的配置，不能用编辑 shell 的结果覆盖 host\u002Fsidecar 判定，仍以目标客户端进程为准。\n\n### Windows NativeArch、ProcessArch 与官方依赖边界\n\n配置、安装和审计时把 `OSArchitecture` 记为 `NativeArch`，把 `ProcessArchitecture` 记为 `ProcessArch`。`NativeArch` 是唯一的 Windows 交付物\u002F依赖选择键；`ProcessArch` 仅是仿真诊断字段，不能让 ARM64 host 降级到 x64，也不能让 x64\u002Fx86 host 借用另一架构资产。Windows EXE、EmmyLua、Swift、Node 和 VCLibs 都必须对同一 `NativeArch` 做 fail-fast 选择和完整身份复验。\n\n必须把下列官方锁定事实当作配置审查边界（完整 URL\u002FSHA 清单见本目录的 `references\u002Fprovider-configs.md`）：\n\n- EmmyLua 固定为官方 `EmmyLuaLs\u002Femmylua-analyzer-rust` `0.25.1` `emmylua_ls-win32-arm64.zip`；归档和其中 `emmylua_ls.exe` 的 SHA-256、PE ARM64 必须复验，且只允许 Windows `NativeArch=ARM64`。\n- Swift\u002Fsourcekit-lsp 固定为 Swift `6.3.3` 官方 Windows ARM64 installer；`windows.msi`、`windows.cab` 和 `a22`–`a28`（ARM64\u002Fx64\u002Fx86 及 experimental sibling CAB）必须由同一 installer 提取并放在同一目录，不能删掉 sibling CAB 或跨版本混用；`sourcekit-lsp.exe` 必须为 ARM64。\n- Node 固定官方 `22.22.0` 的 `win-arm64`、`win-x64`、`win-x86` ZIP；VCLibs 固定微软 `Microsoft.VCLibs.140.00.UWPDesktop` `14.0.33321.0` 的 `arm64`、`x64`、`x86` Appx。每个架构分别锁定 URL\u002FSHA\u002F版本\u002F身份，不读 PATH、不跨架构回退。\n- Windows 私有 Terraform CLI companion 固定 `1.15.6`：ARM64 `https:\u002F\u002Freleases.hashicorp.com\u002Fterraform\u002F1.15.6\u002Fterraform_1.15.6_windows_arm64.zip`（`02820bcae3725c9c4e91deb6656e9b96ca8af9f395fc5faccc0820dd3295d6e0`）、x64 `..._windows_amd64.zip`（`56b4d3a157e346f8fc1e94254d0a944e6fec81f58ddd43eb274b8e0ebb56e334`）、x86 `..._windows_386.zip`（`00d51ccf53664f68bd6fb7dfa7edbc7bbff4032ff048787c096d23ece2dcc092`）。\n- Windows 私有 rustfmt companion 固定 Rust `1.96.0` `rustfmt-preview` MSVC 归档：ARM64 `https:\u002F\u002Fstatic.rust-lang.org\u002Fdist\u002F2026-05-28\u002Frustfmt-1.96.0-aarch64-pc-windows-msvc.tar.xz`（`d9e403d778e0ad95d814275b1265057478d4cde463d8bf620846056a7f00a59d`）、x64 `...-x86_64-pc-windows-msvc.tar.xz`（`7ae6d141dfb844355c4756a41f39ed45b74ff9295fff86bd0bf9b559a83c5d5d`）、x86 `...-i686-pc-windows-msvc.tar.xz`（`75a69f518db96b5c46fa4b98d169688e7670c8bff29b7f1831f6dcfdfc6311ab`）。\n- 两类 companion 均须验证归档\u002F解包摘要、PE Machine、产品根 ACL 与 reparse；只向 product-owned `terraform-ls`\u002F`rust-analyzer` 子进程注入同一 NativeArch 的 PATH。非 Windows 与外部配置不变，禁止 PATH、用户缓存和跨架构 fallback。下载\u002F安装 proof 与 correctness E2E 分离：本地锁定包存在时 correctness 必须 `cache_only=true`、`HTTP=0`，setup\u002Fimport receipt 不能冒充自动下载证明。此处中文说明是公共配置语义，实际平台选择仍只在 Windows 生产实现中执行。\n\n8.3 short path 只允许作为 Swift\u002FNode installer 或子进程的临时进程边界，用来规避 `MAX_PATH`；canonical long path 才是缓存、manifest、receipt、日志、roots 和安全身份，不能持久化短名或用短名作授权\u002F身份比较。TOML、PowerShell 和本文中的注释只解释配置与安全边界，不能授予 ACL、改变架构选择或执行提权。Windows Win32 `5`\u002F`1314` 必须保留为结构化 `authorization_required`；无宿主授权桥时报告 blocker，不改 ACL、不换目录、不吞错。以上规则仅作用于 Windows 原生；非 Windows 行为保持不变，macOS\u002FLinux\u002FWSL 原生行为和既有 Mach-O\u002FELF 依赖选择保持不变。\n\nKotlin\u002FIntelliJ 的 Windows ARM64 进程边界必须使用产品私有、物理扁平且经过 ACL、reparse、架构和摘要校验的 short root；`subst`、8.3、junction 和系统公共目录都不是合规替代。canonical root 仍用于缓存、manifest、receipt 和授权身份。容量预检或受控解包遇到空间不足时必须 fail-fast，receipt 分类为 `disk_space_exhausted`\u002F`runtime_failure`，不得伪装成合法空结果或能力不支持。\n\n当前远程 6b7 工具协议只认 content 纯文本行（`OK`\u002F`ERROR`\u002F`ATTR`\u002F`ROW`\u002F`HINT`\u002F`WARNING`）。`StructuredContent` 应为空且不可作为 fallback；验收只能依据 content 和动作合同分类 success、legal_empty、capability_unsupported 或 runtime_failure。\n\n## 确认可信 cwd 与 workspace root\n\n写入任何客户端配置前，必须先解析并向用户展示两个真实绝对路径，然后询问本次 LSP 的可信 cwd 选择：\n\n1. **本仓库**：`\u003Crepo-root>`。只允许 LSP 工具访问本仓库及其子目录，适合单仓库开发，也是最小权限选项。\n2. **仓库上一级**：`\u003Cparent-of-repo-root>`。允许 LSP 工具访问该上级目录及其全部子目录，适合顶层目录下多个相关 Git 微服务需要互相导航的场景。\n\n必须等待用户明确选择“本仓库”或“仓库上一级”；不得根据当前 shell cwd、配置文件位置、聊天截图或多仓库布局自行扩大范围。用户未确认、回答含糊、项目根无法唯一解析或项目根已经是文件系统根时，立即阻断并说明原因。除非用户另行明确指定并授权其他绝对路径，否则只提供上述两个候选。\n\n将用户选中的绝对路径记为 `\u003Ctrusted-cwd>`，并保持以下绑定：\n\n- 直连模式下，支持 `cwd` 字段的客户端 server 配置必须写 `cwd = \u003Ctrusted-cwd>`；不支持该字段的客户端不得发明字段。\n- `GO_AGENT_LSP_ROOT=\u003Ctrusted-cwd>`。\n- `GO_AGENT_LSP_ROOTS` 必须由 JSON encoder 生成，当前选择只写一个元素：`[\u003Ctrusted-cwd>]`。\n- 项目级配置文件以及 AGENTS.md\u002FCLAUDE.md 仍写在原项目根；选择仓库上一级不等于把配置迁移到上一级。\n- `SUPER_DOLPHIN_RUNTIME_RESOURCES_DIR` 仍指向已验证的分发包资源根或 source checkout 根，不跟随 `\u003Ctrusted-cwd>` 扩大。\n\nWindows→WSL 桥接是路径表示上的明确例外，不是扩大权限：host `cwd` 写 Windows 项目根；`wsl.exe --cd`、resources 和两个 roots 写同一目录的 WSL 绝对路径。必须分别解析两侧真实路径，并用 `wslpath` 或 `readlink -f` 证明它们映射到同一目录；不得用字符串相等代替映射验证。\n\n这里控制的是 mcp-lsp 的 workspace containment。可信目录之外的路径会返回 `path_outside_workspace`；扩大 LSP workspace 不等于自动扩大客户端自身的文件系统沙箱或写权限。\n\n## 必需 sidecar 启动契约\n\n每一个本地 stdio server 的 `env` 必须显式包含：\n\n~~~text\nSUPER_DOLPHIN_RUNTIME_MODE=dev\nSUPER_DOLPHIN_RUNTIME_RESOURCES_DIR=\u003C分发包资源根；源码构建则为 checkout 根，必须是绝对路径>\nSUPER_DOLPHIN_DEPENDENCY_PROFILE=production\nGO_AGENT_LSP_ROOT=\u003C用户确认的 trusted-cwd 绝对路径>\nGO_AGENT_LSP_ROOTS=\u003C由 JSON encoder 生成、仅含 trusted-cwd 的绝对路径数组>\n~~~\n\n前三项是 sidecar 启动所需契约，后两项绑定可信 LSP workspace。独立 `mcp-lsp` 使用 `production`；`desktop_host` 只用于桌面 owner 的开发启动器，不能复制到三家独立 MCP 配置。不得依赖 shell 中偶然继承的值，不得在二进制中添加隐式默认值。\n\n原生 Windows 使用共享 gopls 时，当前 server 的 `env` 还必须显式包含：\n\n~~~text\nSUPER_DOLPHIN_LSP_BUNDLE_DIR=\u003Cbin\u002FLSP\u002Flsp 的绝对路径>\nSUPER_DOLPHIN_LSP_MANIFEST=\u003Cbin\u002FLSP\u002Flsp\u002Flsp-manifest.json 的绝对路径>\n~~~\n\n这两个字段只证明包内 gopls 的路径与摘要，不改变可信 workspace；不得把它们与 `GO_AGENT_LSP_ROOT(S)` 混用。bundle、manifest 或原生 `gopls.exe` 缺失时 fail-fast，不得退回 PATH gopls。把 bundle 仅视为命中 adapter 的受信二进制覆盖，禁止据此裁剪通用语言注册；manifest 未包含的其他已支持语言仍须进入自动发现或按需安装链路。\n\n`SUPER_DOLPHIN_RUNTIME_RESOURCES_DIR` 在本 dev 分发布局中是随 `bin\u002FLSP` 交付的资源根；从源码构建时是 source checkout 根。它不是目标源码文件目录，也不是凭二进制位置临时猜出的值。若用户采用其他资源布局，必须先核对真实资源根，再显式配置。\n\nWindows 的 `GO_AGENT_LSP_ROOTS` 必须由 JSON encoder 生成；不要手工拼接 `C:\\...`。直连模式的 command、cwd、runtime resources 与 roots 必须属于同一种路径体系。Windows→WSL 桥接模式则必须严格分层：Windows `command\u002Fcwd` 属于 host，`args` 中 `--cd`、resources、roots 和 Linux binary 属于 WSL sidecar；不得跨层混写。\n\n桥接模式必须把五个必需变量和经目标 WSL 实机探测的 Linux `PATH` 作为 `wsl.exe` 参数中 `env KEY=VALUE...` 的一部分显式注入 Linux 进程。可以在 Codex server 的 `env` 表中同步保留 sidecar 字段用于配置审计，但不能依赖 Windows host 环境自动成为正确的 Linux sidecar 环境。PATH 中的 home 目录必须先解析为绝对 Linux 路径；不要把不会经 shell 展开的字面 `$HOME` 写入 TOML args。\n\n正式构建的 LSP 空闲生命周期默认且最低为 15 分钟。不要在项目配置中写小于 `15m` 的 `MCP_LSP_IDLE_TIMEOUT` 或旧别名；正式二进制会 fail-fast。带 `mcp_lsp_short_idle_precheck` build tag 的短周期二进制只用于快速预检，不能交付，也不能替代“14 分钟仍存活、15 分钟后回收、精确进程身份零残留”的真实生命周期证据。\n\nWindows Win32 `5` 或 `1314` 权限错误必须保留为结构化 `authorization_required`。桌面宿主必须通过 `ApprovalRequester` 发布真实授权提示；只有用户明确批准后，才允许对同一个已固定 peer 精确重试一次。拒绝、无决定、无审批 UI 或单次重试仍失败时都保持 blocker，禁止循环重试、改 ACL、换备用目录或吞错。独立 stdio sidecar 没有宿主授权桥，不能自行提权，也不能声称已经弹窗或取得权限。\n\n原生 Windows 且 `SUPER_DOLPHIN_DEPENDENCY_PROFILE=production` 时，语义工具可见性还可由带 Windows build tag 的生产自动安装器提供：空 PATH、无额外 bundle 的 `tools\u002Flist` 也必须精确包含七个工具族，并在 sidecar 日志中标明 `source=windows_production_auto_installer`。这不是语言级 PASS；随后必须实际调用目标语言并验证安装、语义结果和生命周期。非 Windows\u002FWSL 不读取这条 Windows 策略，仍按自己的 bundle\u002FPATH 事实判断。\n\n语言级验收必须逐一执行精确 36 键闭包，分布固定为 `file\u002Finspect\u002Fxref\u002Fgrep\u002Fstructure\u002Fpatch_edit\u002Fcompletion = 8\u002F5\u002F7\u002F6\u002F5\u002F4\u002F1`：`file` 为 `open_file`、五种 `read_file-*` 动作（`single\u002Ffull\u002Fbatch\u002Flines\u002Ffunction`）及 `diagnostics`、`diagnostics-batch`；`inspect` 为 `hover\u002Fdefinition\u002Fimplementation\u002Ftype_definition\u002Fsignature_help`；`xref` 为 `references`、`references-no-declaration`、三种 `call_hierarchy-*` 与两种 `type_hierarchy-*`；`grep` 为 `text_search`、`text_search-regex`、`text_search-paths`、`text_search-file_paths`、`text_search-glob`、`ast_search`；`structure` 为 `document_symbol`、两种 `workspace_symbol-*`、`folding_range`、`semantic_tokens`；`patch_edit` 为 `replace_range\u002Frename\u002Fcode_action\u002Fformat`；`completion` 为 `completion`。精确键以 `bin\u002FLSP\u002FREADME.md` 的“36 个小动作的精确验收合同”为可读清单，以 E2E 的 `realMCPExpectedActionKeys` 为可执行守卫。结果必须区分 `success`、`legal_empty_success`、能力快照明确允许的 `capability_unsupported` 和 `runtime_failure\u002FNON_PASS`；不得用工具可见性或合法空结果掩盖运行失败。\n\n## 根据客户端配置\n\n只处理用户要求的客户端；用户要求 all 或三家共用时才处理全部。\n\n### Codex\n\n- 项目文件：.codex\u002Fconfig.toml。\n- 只在项目受信任时生效。\n- stdio server 使用 mcp_servers.\u003Cname> 表、command、args、cwd 和 env。\n- env 必须包含三个 sidecar 启动字段与两个 `GO_AGENT_LSP_ROOT(S)` workspace 字段；原生 Windows 还必须包含两个受信 LSP bundle 字段。\n- Windows Desktop\u002FIDE 桥接 WSL 时，使用 `wsl.exe` 模板，并在 args 的 `env` 段显式传入五个 Linux sidecar 字段与实机探测的 Linux PATH；不得让 Windows 直接执行 Linux ELF，也不得依赖登录 shell 才存在的 PATH 修改。\n- 需要强制 LSP 时设置 `enabled = true` 和 `required = true`；初始化失败必须阻断，不能静默省略后继续任务。\n- 保留其他 MCP server、features、hooks、model 和逐工具审批设置。\n\n#### Codex 工具延迟暴露\n\nCodex 可能已发现并启动 `lsp`，但首层工具列表不直接显示 `mcp__lsp__*`，只把它们放入 code mode 的延迟工具目录。先用 `codex features list` 检查 `tool_search_always_defer_mcp_tools`：若该项显示 `removed` 且有效值为 `true`，不要写 `features.tool_search_always_defer_mcp_tools = false`；该旧开关不会改变有效状态。\n\n要让 LSP 命名空间作为直接工具暴露，逐字段合并以下项目级配置，不得覆盖已有 `[features]` 内容：\n\n~~~toml\n[features.code_mode]\nenabled = true\ndirect_only_tool_namespaces = [\"mcp__lsp\"]\n~~~\n\n`mcp__lsp` 是命名空间，不是具体工具名。该设置控制工具 schema 的直接暴露方式，不承诺 sidecar 零耗时启动；同时保留 `[mcp_servers.lsp] required = true`，让初始化失败 fail-fast。修改后必须完整重启 Codex 宿主并新建任务；旧任务已经生成的工具 schema 不能作为新配置生效证据。\n\n重启后同时验证三项，缺一不可：\n\n1. 当前任务的顶层直接工具声明出现 `mcp__lsp`，并包含 `file`、`inspect`、`xref`、`grep`、`structure`、`patch_edit`、`completion`。\n2. 不经过 `functions.exec`，直接调用至少一个 `mcp__lsp.\u003Ctool>` 成功。\n3. 在 `functions.exec` 内执行 `ALL_TOOLS.filter(({ name }) => name.startsWith(\"mcp__lsp__\"))`，结果应为 `[]`。`ALL_TOOLS` 是 code mode 的嵌套\u002F延迟工具目录；direct-only 生效后 LSP 从这里移除，因此空数组是成功证据，不是未注册。只有“顶层直接工具不存在或直接调用失败”时，空数组才表示 LSP 两边都不可用。\n\n最后确认 `codex features list` 中 `code_mode` 为 `true`，并用 `\u002Fmcp` 检查 `lsp` 已连接。不要把 `ALL_TOOLS` 非空、仅 `\u002Fmcp` enabled 或仅有 sidecar 进程当成直接暴露成功。\n\n### Claude Code\n\n- 项目文件：项目根 .mcp.json。\n- 使用 mcpServers 对象中的项目 server；这是 project scope。\n- 本地 stdio server 使用 command、args 和 env。\n- env 必须包含三个 sidecar 启动字段与两个 `GO_AGENT_LSP_ROOT(S)` workspace 字段；原生 Windows 还必须包含两个受信 LSP bundle 字段。\n- 首次加载项目 server 时需要 workspace trust 和用户批准。\n- 不得误写默认 local scope 或用户级 ~\u002F.claude.json。\n\n### Google Antigravity\n\n- 项目文件：.agents\u002Fmcp_config.json。\n- 使用 mcpServers 对象中的 workspace-local server。\n- 本地 stdio server 使用 command、args、cwd 和 env。\n- env 必须包含三个 sidecar 启动字段与两个 `GO_AGENT_LSP_ROOT(S)` workspace 字段；原生 Windows 还必须包含两个受信 LSP bundle 字段。\n- 不得写全局 ~\u002F.gemini\u002Fconfig\u002Fmcp_config.json。\n- 远程 MCP 才使用 serverUrl；本地 mcp-lsp 不使用 url、httpUrl 或 serverUrl。\n\n#### Antigravity 同名配置冲突排查\n\n工具已经显示但首次或后续 `tools\u002Fcall` 报 `client is closing: EOF`、`Transport closed` 或 sidecar 很快退出时，不要只检查 `.agents\u002Fmcp_config.json`，也不要先归因于 Antigravity。先在当前 workspace 内完整盘点：\n\n1. 规范入口 `\u003Cworkspace>\u002F.agents\u002Fmcp_config.json`。\n2. 自动加载的 `\u003Cworkspace>\u002F.agents\u002Fplugins\u002F*\u002Fmcp_config.json`。\n3. 旧安装或误写的 `\u003Cworkspace>\u002F.gemini\u002Fconfig\u002Fmcp_config.json`。\n4. 全局 `~\u002F.gemini\u002Fconfig\u002Fmcp_config.json` 中是否还有同名 server；只读检查，未经用户明确授权不得修改全局配置。\n\n同名 `lsp` 出现在规范入口和插件或旧副本中不是冗余备份：不同 `cwd`、roots、command 或 env 可能让客户端发现工具后启动另一份 server，造成调用时路径解析、进程 owner 和 stdio 生命周期不一致。以用户确认的正确配置为基准逐字段比较；确认插件只用于重复注册同一 server、没有其他能力后，获得删除授权再删除整个插件目录。不要保留空 `plugin.json`、wrapper 或 stale 配置。\n\n必须从 `~\u002F.super-dolphin\u002Flog\u002Fmcp-lsp\u002Fmcp-lsp-*.log` 核对实际生效值和时序：\n\n- `tools\u002Fcall begin\u002Fdone` 之后才出现 `mcp stdio: read failed EOF`，说明二进制完成过调用，EOF 是 stdin 被关闭后的结果，不是二进制崩溃证据。\n- `resolve parent path: lstat \u003Ctrusted-cwd>\u002F...` 说明请求相对路径按实际 trusted root 解析；用日志中的 root 和请求 path 重建最终路径。\n- `sidecar requires SUPER_DOLPHIN_RUNTIME_MODE...` 只证明该次进程缺少启动 env。若它来自 Agent 用 shell 裸跑二进制的探测，不得据此断言正式 MCP server 配置漏传 env。\n- `context canceled` 可能是上游 cascade 取消后的收敛结果；必须向前找到第一个工具错误或 stdin EOF，不能把最后一行当首因。\n\n选择“仓库上一级”为 `\u003Ctrusted-cwd>` 时，相对工具路径也以该上一级为基准。读取 `\u003Ctrusted-cwd>\u002Frepo-a\u002Fcmd\u002Fmain.go` 必须传 `repo-a\u002Fcmd\u002Fmain.go`，不能传 `cmd\u002Fmain.go`；否则会错误解析为 `\u003Ctrusted-cwd>\u002Fcmd\u002Fmain.go`。验证时必须覆盖这种带仓库目录前缀的真实调用。\n\n删除重复配置或修改 server 后，必须完整退出并重启 Antigravity 宿主，再在 MCP Servers 页面 Refresh。仅 Refresh、新建 Agent 会话、重新加载窗口、覆盖配置或替换二进制都不能保证旧 stdio client 被销毁；已经 closing 的 client 不能原地复活。\n\n## 修改配置后必须重启宿主\n\n修改任何本地 stdio MCP 的 command、args、cwd、env、server 名、启用状态或配置来源后，必须完整停止并重新启动实际拥有 stdio 管道的宿主进程，然后再验证。该规则适用于 Codex、Claude Code、Antigravity 以及其他 MCP host：\n\n- Codex Desktop\u002FIDE：完整退出并重新打开宿主应用；Codex CLI：结束当前 CLI 进程并重新启动。\n- Claude Code：结束当前 Claude Code\u002FCLI 或承载其 MCP client 的 IDE host，再重新启动。\n- Antigravity IDE\u002FDesktop：完整退出并重新打开 Antigravity；Antigravity CLI：结束当前 CLI 进程并重新启动。\n\n不得把 Refresh、Reload Window、重新打开项目、新建聊天或手工杀掉\u002F重启 `mcp-lsp` 当作宿主重启。stdio 管道和 MCP client 由宿主拥有；宿主未重启时，旧进程、旧 env、旧配置快照或 closing client 都可能继续被复用。无法重启宿主时，把在线验证记为 `BLOCKED_HOST_RESTART_REQUIRED`，不得声称配置已经生效。\n\n## Agent 自适配\n\nAgent 可以根据事实调整 server 名、路径、环境变量、timeout、审批设置及客户端专属字段，也可以修改本技能和 references\u002Fprovider-configs.md，使其匹配已验证的新版本行为。\n\n自适配必须保留这些不变量：\n\n1. 只写项目级配置。\n2. 先按客户端同步项目根 AGENTS.md、CLAUDE.md 或两者，并保证重复执行不会重复追加。\n3. 写入前严格读取并解析现有 JSON\u002FTOML；未知结构立即阻断。\n4. 逐字段合并，保留其他 server 和非 MCP 设置，不得整份覆盖。\n5. 同名 server 内容不同时先展示差异并判断 owner；不得静默替换。\n6. 直连模式的 command、cwd 和 roots 使用 sidecar 平台的一致路径。Windows→WSL 桥接模式的 command\u002Fcwd 使用 Windows 路径，args 内的 `--cd`、resources、roots 和 Linux ELF 使用经验证映射到同一可信目录的 WSL 路径；不得把桥接所需的分层路径误判为混用。\n7. 不写密钥、令牌、账号、OAuth secret 或其他凭据。\n8. 缺文件、错误架构、解析失败、schema 不明或客户端不受支持时 fail-fast。\n9. 三个 sidecar 必需字段必须显式写在 server env 中；原生 Windows 的两个受信 LSP bundle 字段同样必须显式提供。不为一次性差异增加默认值、兼容分支或隐式 fallback。\n10. 保留用户已有 `GOTOOLCHAIN` 策略。`auto` 或 `\u003Cname>+auto` 由 Go 在模块\u002Fgo.work 目录中执行真实选择；不得为某个项目硬编码通用 Go 补丁版本。\n\n如果目标项目的布局与 bin\u002FLSP 不同，Agent 应直接按实际路径配置并更新说明，而不是强行搬运目录。移动项目或换机器后，要重新确认绝对路径和二进制架构。\n\n## 编辑方法\n\n1. 先输出拟修改文件、已有 server、目标 server 和字段差异。\n2. 使用精确补丁或结构化编辑完成最小变更。\n3. JSON 必须重新解析；TOML 必须通过当前客户端或可靠 TOML parser 重新解析。\n4. 检查 diff，确认未删除或重排无关设置。\n5. 配置含本机绝对路径时，明确说明是否适合提交；不得把本机配置冒充跨机器通用配置。\n\n## 验证\n\n1. 重新验证直连 command 或桥接链中的 `wsl.exe` 与 Linux binary 均存在、非空、架构正确；桥接模式必须确认 Linux binary 是 ELF 且 GOOS\u002FGOARCH 匹配 WSL。\n2. 直连模式确认 cwd、`GO_AGENT_LSP_ROOT` 和解码后的 `GO_AGENT_LSP_ROOTS` 与 `\u003Ctrusted-cwd>` 完全一致。桥接模式分别验证 Windows cwd 和 WSL roots，并证明两者映射到同一用户确认的可信目录；不得做错误的跨平台字符串相等断言。\n3. 重新读取本次客户端对应的 AGENTS.md、CLAUDE.md 或两者，确认受管规则存在一次且必需语义完整。\n4. 重新解析所有修改后的 JSON\u002FTOML。\n5. Codex：完整退出并重启 Codex Desktop\u002FIDE 宿主或 CLI 进程；信任项目后用 \u002Fmcp 或 codex mcp list 检查。\n6. Claude Code：完整结束并重启 Claude Code\u002FCLI 或承载 MCP client 的 IDE host；完成 workspace trust 和项目 MCP 批准后，用 \u002Fmcp、claude mcp list 或 claude mcp get 检查。\n7. Antigravity：完整退出并重启 Antigravity IDE\u002FDesktop 或 CLI 进程；宿主重启后再在 MCP Servers 页面 Refresh，或在 CLI 用 \u002Fmcp 检查。\n8. 至少实际调用 file、structure、inspect、xref、diagnostics 中的一项；列表显示 enabled 不是运行证据。\n9. 对含中文、空格或字面 `%` 的项目路径，至少用 `file(action=diagnostics)` 验证一次 file URI 能回到 workspace 内本机路径；`path_outside_workspace` 不能记为 PASS。\n10. 对选择“仓库上一级”的配置，必须实际读取或导航一个位于上一级内、但不在本仓库内的已知文件；若没有可安全验证的相邻文件，明确记为未验证，不得扩大到其他目录取证。\n11. 对 Go 项目保留并验证用户的 `GOTOOLCHAIN=auto`\u002F`\u003Cname>+auto` 策略；版本探测应在已解析的 module 或 go.work 目录执行。\n12. 若配置修改需要第二次复核，重复读取配置，确认没有重复规则、重复 server、stale 路径或旧字段。\n13. Antigravity 必须再次扫描 `.agents\u002Fplugins\u002F*\u002Fmcp_config.json` 和 workspace 内 `.gemini\u002Fconfig\u002Fmcp_config.json`，确认没有同名 `lsp` 副本；`initialize`、`tools\u002Flist` 和 UI enabled 不能替代至少一次真实 `tools\u002Fcall`。\n14. Windows→WSL 桥接必须使用配置中的完整 `command + args` 做启动验证；仅在 WSL shell 中裸跑 Linux binary 不能证明 Windows host 可以创建该 MCP 进程。\n15. 桥接验证必须检查 `tools\u002Flist` 精确包含 `file`、`inspect`、`xref`、`grep`、`structure`、`patch_edit`、`completion` 七个工具。只出现 `file`、`grep` 时，优先用同一 command+args 执行 `command -v gopls` 和 `command -v typescript-language-server` 核对实际 PATH；不得把“server 已启动”写成 PASS。\n16. 原生 Windows production 验证必须同时核对七族清单和可见性来源日志；PATH\u002Fbundle 为空时应命中 `windows_production_auto_installer`。只出现 `file`、`grep` 时先检查三个 `SUPER_DOLPHIN_*` 字段、实际 Windows EXE\u002FNativeArch 和 installer 注册错误，不得照搬 WSL 的 PATH 修复或把两工具状态写成 PASS。\n\n报告二进制目标、修改的项目级文件、保留的既有设置、解析结果、客户端发现状态和实际工具调用证据。未启动对应客户端时，把在线连接明确标为未验证。\n",{"name":5,"description":7},"main","287849f4ce06aaaa7e8f517126f73b016043d332","bin\u002FLSP\u002Fmcp-lsp-project-config-skill","https:\u002F\u002Fgithub.com\u002Flihah111222333-cloud\u002FSuper-Dolphin-Agent-Cockpit","https:\u002F\u002Fgithub.com\u002Flihah111222333-cloud","2026-10-11 02:13:17",{"source":8,"skillName":5,"commands":53,"prompt":63,"zipAvailable":64},[54,57,60],{"tool":55,"command":56},"npx","npx skills add lihah111222333-cloud\u002FSuper-Dolphin-Agent-Cockpit --skill mcp-lsp-project-config",{"tool":58,"command":59},"bunx","bunx skills add lihah111222333-cloud\u002FSuper-Dolphin-Agent-Cockpit --skill mcp-lsp-project-config",{"tool":61,"command":62},"pnpm","pnpm dlx skills add lihah111222333-cloud\u002FSuper-Dolphin-Agent-Cockpit --skill mcp-lsp-project-config","安装技能，技能地址：https:\u002F\u002Fgithub.com\u002Flihah111222333-cloud\u002FSuper-Dolphin-Agent-Cockpit\u002Fblob\u002Fmain\u002Fbin\u002FLSP\u002Fmcp-lsp-project-config-skill\u002FSKILL.md",true,[66],{"path":67,"resourceType":68,"resourceTypeDesc":69,"sizeBytes":70,"sourceHtmlUrl":71},"references\u002Fprovider-configs.md","REFERENCE","参考文档",30482,"https:\u002F\u002Fgithub.com\u002Flihah111222333-cloud\u002FSuper-Dolphin-Agent-Cockpit\u002Fblob\u002Fmain\u002Fbin\u002FLSP\u002Fmcp-lsp-project-config-skill\u002Freferences\u002Fprovider-configs.md",[73,89,112,128,142,156],{"skillNo":74,"name":75,"nameZh":6,"description":76,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":6,"repositoryNo":12,"starsCount":13,"licenseSpdxId":14,"licenseFileUrl":6,"sourceHtmlUrl":77,"categories":78,"keywords":79,"publishedAt":41},"01M6GK57H2A7XK3QZ00HCV9XM0","注释规范","当在 super-agent-v3 中编写或审查 Go 函数级中文注释、React hooks\u002Fservice\u002Fcontroller 注释，或处理注释守卫失败时使用。","https:\u002F\u002Fgithub.com\u002Flihah111222333-cloud\u002FSuper-Dolphin-Agent-Cockpit\u002Fblob\u002Fmain\u002F.agents\u002Fskills\u002F注释规范\u002FSKILL.md",[],[75,80,81,82,83,84,85,86,87,88],"comments","hooks","go","react hooks","v3","react","controller","service","中文",{"skillNo":90,"name":91,"nameZh":6,"description":92,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":6,"repositoryNo":12,"starsCount":13,"licenseSpdxId":14,"licenseFileUrl":6,"sourceHtmlUrl":93,"categories":94,"keywords":98,"publishedAt":41},"01M6GK545MTTE5X1Q4NF92PNRN","字段守卫","当新增、删除、重命名或跨层传递结构化字段，以及修改 DTO、mapper、schema、API\u002FRPC、事件、配置、store、序列化或前后端契约时自动使用；追踪生产源到全部消费端并建立 fail-fast 字段守卫。","https:\u002F\u002Fgithub.com\u002Flihah111222333-cloud\u002FSuper-Dolphin-Agent-Cockpit\u002Fblob\u002Fmain\u002F.agents\u002Fskills\u002F字段守卫\u002FSKILL.md",[95],{"categoryNo":96,"categoryName":97,"taxonomyType":20,"taxonomyTypeDesc":21},"01JBSEEDCAT000000000000010","后端与接口",[91,99,24,100,101,102,103,104,105,106,107,108,109,110,111],"mapping","rpc","fast","api","guard","消费","schema","payload","drift","contract","store","event","后端",{"skillNo":113,"name":111,"nameZh":6,"description":114,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":6,"repositoryNo":12,"starsCount":13,"licenseSpdxId":14,"licenseFileUrl":6,"sourceHtmlUrl":115,"categories":116,"keywords":119,"publishedAt":41},"01M6GK50VVC89B3MMSTKBG76ZS","在 super-agent-v3 中编写、审查或重构 Go 后端代码时使用。","https:\u002F\u002Fgithub.com\u002Flihah111222333-cloud\u002FSuper-Dolphin-Agent-Cockpit\u002Fblob\u002Fmain\u002F.agents\u002Fskills\u002F后端\u002FSKILL.md",[117,118],{"categoryNo":96,"categoryName":97,"taxonomyType":20,"taxonomyTypeDesc":21},{"categoryNo":18,"categoryName":19,"taxonomyType":20,"taxonomyTypeDesc":21},[111,84,109,27,82,120,121,122,123,124,125,126,127],"golang","cmd","backend","sqlc","runner","platform","module","fx",{"skillNo":129,"name":130,"nameZh":6,"description":131,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":6,"repositoryNo":12,"starsCount":13,"licenseSpdxId":14,"licenseFileUrl":6,"sourceHtmlUrl":132,"categories":133,"keywords":137,"publishedAt":41},"01M6GK4YP5DTSBD02AF8YSRNME","前端","当在 super-agent-v3 中开发、审查或修复当前 React\u002FVite 前端 UI 时使用；前端源码只在 frontend-app。","https:\u002F\u002Fgithub.com\u002Flihah111222333-cloud\u002FSuper-Dolphin-Agent-Cockpit\u002Fblob\u002Fmain\u002F.agents\u002Fskills\u002F前端\u002FSKILL.md",[134],{"categoryNo":135,"categoryName":136,"taxonomyType":20,"taxonomyTypeDesc":21},"01JBSEEDCAT000000000000009","前端开发",[138,84,85,139,140,141],"frontend","ui","vite","app",{"skillNo":143,"name":144,"nameZh":6,"description":145,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":6,"repositoryNo":12,"starsCount":13,"licenseSpdxId":14,"licenseFileUrl":6,"sourceHtmlUrl":146,"categories":147,"keywords":148,"publishedAt":41},"01M6GK4WWB9A6N51VPCZHC3NB1","全量项目地图生成","当在 super-agent-v3 中生成、更新或校验 docs\u002Fdoc\u002Fcodemap 项目地图、AI index 或能力清单时使用。","https:\u002F\u002Fgithub.com\u002Flihah111222333-cloud\u002FSuper-Dolphin-Agent-Cockpit\u002Fblob\u002Fmain\u002F.agents\u002Fskills\u002F全量项目地图生成\u002FSKILL.md",[],[144,149,150,151,152,153,154,155,84],"地图","生成","docs","index","doc","校验","codemap",{"skillNo":157,"name":158,"nameZh":6,"description":159,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":6,"repositoryNo":12,"starsCount":13,"licenseSpdxId":14,"licenseFileUrl":6,"sourceHtmlUrl":160,"categories":161,"keywords":165,"publishedAt":41},"01M6GK4S2RNXHA2FXXM0WXHP4S","代码审查维度","当在 super-agent-v3 仓库做代码审查、生产风险审计、裁决子代理发现或编排修复任务时使用。","https:\u002F\u002Fgithub.com\u002Flihah111222333-cloud\u002FSuper-Dolphin-Agent-Cockpit\u002Fblob\u002Fmain\u002F.agents\u002Fskills\u002F代码审查维度\u002FSKILL.md",[162],{"categoryNo":163,"categoryName":164,"taxonomyType":20,"taxonomyTypeDesc":21},"01JBSEEDCAT000000000000007","代码审查",[166,158,167,168,84],"code review","review","dimensions"]