<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>better-edit-tools 文档</title><link>https://conglinyizhi.github.io/better-edit-tools-mcp/</link><description>Recent content on better-edit-tools 文档</description><generator>Hugo</generator><language>zh</language><atom:link href="https://conglinyizhi.github.io/better-edit-tools-mcp/index.xml" rel="self" type="application/rss+xml"/><item><title>大模型自配置指南</title><link>https://conglinyizhi.github.io/better-edit-tools-mcp/llm-setup-guide/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://conglinyizhi.github.io/better-edit-tools-mcp/llm-setup-guide/</guid><description>&lt;h1 id="大模型自配置指南"&gt;大模型自配置指南&lt;a class="anchor" href="#%e5%a4%a7%e6%a8%a1%e5%9e%8b%e8%87%aa%e9%85%8d%e7%bd%ae%e6%8c%87%e5%8d%97"&gt;#&lt;/a&gt;&lt;/h1&gt;
&lt;p&gt;本文档面向需要帮用户把 &lt;code&gt;better-edit-tools&lt;/code&gt; 二进制安装到本地的 AI Agent（Kimi Code、Claude Code、Cline 等）。&lt;/p&gt;
&lt;h2 id="目标"&gt;目标&lt;a class="anchor" href="#%e7%9b%ae%e6%a0%87"&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;下载对应系统的 Release 二进制、校验 SHA-256、放置到稳定位置，并把绝对路径返回给用户或交给下一步 MCP 配置逻辑。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;除非用户明确要求，否则不要修改用户的 MCP 客户端配置文件。&lt;/strong&gt; 你的任务只是把二进制安装好并验证可用。&lt;/p&gt;
&lt;h2 id="工作流"&gt;工作流&lt;a class="anchor" href="#%e5%b7%a5%e4%bd%9c%e6%b5%81"&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;检测平台&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;系统：&lt;code&gt;linux&lt;/code&gt;、&lt;code&gt;darwin&lt;/code&gt;（macOS）或 &lt;code&gt;windows&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;架构：&lt;code&gt;amd64&lt;/code&gt; 或 &lt;code&gt;arm64&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;Windows 推荐路径：&lt;code&gt;%LOCALAPPDATA%\better-edit-tools\bin\better-edit-tools.exe&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;Linux/macOS 推荐路径：&lt;code&gt;${HOME}/.local/share/better-edit-tools/bin/better-edit-tools&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;选择 Release URL&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;基础地址：&lt;code&gt;https://github.com/conglinyizhi/better-edit-tools-mcp/releases/latest/download/&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;包名：&lt;code&gt;better-edit-tools-${OS}-${ARCH}.tar.gz&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;校验文件：&lt;code&gt;checksums.txt&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;如需指定版本，把 &lt;code&gt;latest&lt;/code&gt; 替换为 tag，例如 &lt;code&gt;v0.12.0&lt;/code&gt;。&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;下载并校验&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;同时下载包和 &lt;code&gt;checksums.txt&lt;/code&gt;。&lt;/li&gt;
&lt;li&gt;计算包的 SHA-256。&lt;/li&gt;
&lt;li&gt;与 &lt;code&gt;checksums.txt&lt;/code&gt; 中的预期值对比。&lt;/li&gt;
&lt;li&gt;校验不通过时中止，并告知用户。&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;解压并放置&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;如安装目录不存在则创建。&lt;/li&gt;
&lt;li&gt;将包解压到安装目录。&lt;/li&gt;
&lt;li&gt;Linux/macOS 下确保二进制有执行权限（&lt;code&gt;chmod +x&lt;/code&gt;）。&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;报告结果&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;返回二进制的绝对路径。&lt;/li&gt;
&lt;li&gt;提醒 &lt;code&gt;--lang&lt;/code&gt; 参数：如果用户 MCP 客户端需要中文工具描述，在 &lt;code&gt;args&lt;/code&gt; 中加入 &lt;code&gt;&amp;quot;--lang&amp;quot;, &amp;quot;zh&amp;quot;&lt;/code&gt;。&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;h2 id="平台说明"&gt;平台说明&lt;a class="anchor" href="#%e5%b9%b3%e5%8f%b0%e8%af%b4%e6%98%8e"&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;table&gt;
	&lt;thead&gt;
			&lt;tr&gt;
					&lt;th&gt;系统&lt;/th&gt;
					&lt;th&gt;推荐安装目录&lt;/th&gt;
					&lt;th&gt;二进制名&lt;/th&gt;
			&lt;/tr&gt;
	&lt;/thead&gt;
	&lt;tbody&gt;
			&lt;tr&gt;
					&lt;td&gt;Linux&lt;/td&gt;
					&lt;td&gt;&lt;code&gt;${HOME}/.local/share/better-edit-tools/bin&lt;/code&gt;&lt;/td&gt;
					&lt;td&gt;&lt;code&gt;better-edit-tools&lt;/code&gt;&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;macOS&lt;/td&gt;
					&lt;td&gt;&lt;code&gt;${HOME}/.local/share/better-edit-tools/bin&lt;/code&gt;&lt;/td&gt;
					&lt;td&gt;&lt;code&gt;better-edit-tools&lt;/code&gt;&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;Windows&lt;/td&gt;
					&lt;td&gt;&lt;code&gt;%LOCALAPPDATA%\better-edit-tools\bin&lt;/code&gt;&lt;/td&gt;
					&lt;td&gt;&lt;code&gt;better-edit-tools.exe&lt;/code&gt;&lt;/td&gt;
			&lt;/tr&gt;
	&lt;/tbody&gt;
&lt;/table&gt;
&lt;h2 id="自检清单"&gt;自检清单&lt;a class="anchor" href="#%e8%87%aa%e6%a3%80%e6%b8%85%e5%8d%95"&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;input disabled="" type="checkbox"&gt; 二进制存在于报告的绝对路径。&lt;/li&gt;
&lt;li&gt;&lt;input disabled="" type="checkbox"&gt; &lt;code&gt;better-edit-tools --version&lt;/code&gt; 能返回预期版本。&lt;/li&gt;
&lt;li&gt;&lt;input disabled="" type="checkbox"&gt; 如果用户使用中文模型，提醒其在 MCP 参数中加入 &lt;code&gt;--lang zh&lt;/code&gt;。&lt;/li&gt;
&lt;/ul&gt;</description></item><item><title>CLI 使用</title><link>https://conglinyizhi.github.io/better-edit-tools-mcp/cli/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://conglinyizhi.github.io/better-edit-tools-mcp/cli/</guid><description>&lt;h1 id="cli-使用"&gt;CLI 使用&lt;a class="anchor" href="#cli-%e4%bd%bf%e7%94%a8"&gt;#&lt;/a&gt;&lt;/h1&gt;
&lt;p&gt;better-edit-tools 除了作为 MCP server 运行外，还提供 8 个核心编辑工具的 CLI 子命令，适合 shell 脚本、Pi Agent 或偏好命令行调用的场景。&lt;/p&gt;
&lt;h2 id="基本用法"&gt;基本用法&lt;a class="anchor" href="#%e5%9f%ba%e6%9c%ac%e7%94%a8%e6%b3%95"&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;better-edit-tools &amp;lt;command&amp;gt; &lt;span style="color:#f92672"&gt;[&lt;/span&gt;options&lt;span style="color:#f92672"&gt;]&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;不带子命令时启动 MCP server（stdio）。&lt;/p&gt;
&lt;h2 id="子命令"&gt;子命令&lt;a class="anchor" href="#%e5%ad%90%e5%91%bd%e4%bb%a4"&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;h3 id="文件操作"&gt;文件操作&lt;a class="anchor" href="#%e6%96%87%e4%bb%b6%e6%93%8d%e4%bd%9c"&gt;#&lt;/a&gt;&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;read&lt;/code&gt;：读取文件行范围。&lt;/li&gt;
&lt;li&gt;&lt;code&gt;replace&lt;/code&gt;：替换指定行范围。&lt;/li&gt;
&lt;li&gt;&lt;code&gt;insert&lt;/code&gt;：在指定行后插入内容。&lt;/li&gt;
&lt;li&gt;&lt;code&gt;delete&lt;/code&gt;：删除指定行范围。&lt;/li&gt;
&lt;li&gt;&lt;code&gt;write&lt;/code&gt;：写入或覆盖文件。&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id="内容识别"&gt;内容识别&lt;a class="anchor" href="#%e5%86%85%e5%ae%b9%e8%af%86%e5%88%ab"&gt;#&lt;/a&gt;&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;balance&lt;/code&gt;：检查括号、引号、标签成对情况。&lt;/li&gt;
&lt;li&gt;&lt;code&gt;func-range&lt;/code&gt;：检测某行所在的函数或 &lt;code&gt;{}&lt;/code&gt; 块范围。&lt;/li&gt;
&lt;li&gt;&lt;code&gt;tag-range&lt;/code&gt;：检测某行所在的 XML/HTML/Vue 标签范围。&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="常用示例"&gt;常用示例&lt;a class="anchor" href="#%e5%b8%b8%e7%94%a8%e7%a4%ba%e4%be%8b"&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#75715e"&gt;# 读取 1-10 行&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;better-edit-tools read --file main.go --start &lt;span style="color:#ae81ff"&gt;1&lt;/span&gt; --end &lt;span style="color:#ae81ff"&gt;10&lt;/span&gt; --output json
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#75715e"&gt;# 替换指定范围&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;better-edit-tools replace --file main.go --start &lt;span style="color:#ae81ff"&gt;5&lt;/span&gt; --end &lt;span style="color:#ae81ff"&gt;10&lt;/span&gt; --content &lt;span style="color:#e6db74"&gt;&amp;#34;...&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#75715e"&gt;# 在第 4 行后插入&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;better-edit-tools insert --file main.go --after-line &lt;span style="color:#ae81ff"&gt;4&lt;/span&gt; --content &lt;span style="color:#e6db74"&gt;&amp;#34;...&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#75715e"&gt;# 删除指定范围&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;better-edit-tools delete --file main.go --start &lt;span style="color:#ae81ff"&gt;5&lt;/span&gt; --end &lt;span style="color:#ae81ff"&gt;10&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#75715e"&gt;# 写入文件&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;better-edit-tools write --file main.go --content &lt;span style="color:#e6db74"&gt;&amp;#34;package main\n&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#75715e"&gt;# 结构检查 / 范围检测&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;better-edit-tools balance --file main.go
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;better-edit-tools func-range --file main.go --line &lt;span style="color:#ae81ff"&gt;12&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;better-edit-tools tag-range --file index.html --line &lt;span style="color:#ae81ff"&gt;8&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 id="管道与-stdin-支持"&gt;管道与 stdin 支持&lt;a class="anchor" href="#%e7%ae%a1%e9%81%93%e4%b8%8e-stdin-%e6%94%af%e6%8c%81"&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;为了避免 shell 引号转义问题，部分命令支持 &lt;code&gt;--content-file&lt;/code&gt; 和 &lt;code&gt;--old-file&lt;/code&gt;，并把路径设为 &lt;code&gt;-&lt;/code&gt; 表示从 stdin 读取。&lt;/p&gt;</description></item><item><title>Go API 文档</title><link>https://conglinyizhi.github.io/better-edit-tools-mcp/go-api/readme/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://conglinyizhi.github.io/better-edit-tools-mcp/go-api/readme/</guid><description>&lt;h1 id="betools--go-api-文档"&gt;betools — Go API 文档&lt;a class="anchor" href="#betools--go-api-%e6%96%87%e6%a1%a3"&gt;#&lt;/a&gt;&lt;/h1&gt;
&lt;h2 id="包说明"&gt;包说明&lt;a class="anchor" href="#%e5%8c%85%e8%af%b4%e6%98%8e"&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;import &amp;#34;github.com/conglinyizhi/better-edit-tools-mcp/pkg/betools&amp;#34;&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;&lt;code&gt;betools&lt;/code&gt; 是 better-edit-tools 的核心编辑库，可直接嵌入 Go Agent 框架使用。它提供文件读取、内容替换、插入、删除、批量操作、全局写入、函数范围检测等原语，所有写操作都经过原子写入（临时文件 + rename）保护。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;版本要求&lt;/strong&gt;：Go 1.26+&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id="公开函数"&gt;公开函数&lt;a class="anchor" href="#%e5%85%ac%e5%bc%80%e5%87%bd%e6%95%b0"&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;h3 id="文件操作"&gt;文件操作&lt;a class="anchor" href="#%e6%96%87%e4%bb%b6%e6%93%8d%e4%bd%9c"&gt;#&lt;/a&gt;&lt;/h3&gt;
&lt;h4 id="read"&gt;&lt;code&gt;Read&lt;/code&gt;&lt;a class="anchor" href="#read"&gt;#&lt;/a&gt;&lt;/h4&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-go" data-lang="go"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#66d9ef"&gt;func&lt;/span&gt; &lt;span style="color:#a6e22e"&gt;Read&lt;/span&gt;(&lt;span style="color:#a6e22e"&gt;path&lt;/span&gt; &lt;span style="color:#66d9ef"&gt;string&lt;/span&gt;, &lt;span style="color:#a6e22e"&gt;start&lt;/span&gt; &lt;span style="color:#66d9ef"&gt;int&lt;/span&gt;, &lt;span style="color:#a6e22e"&gt;endLine&lt;/span&gt; &lt;span style="color:#66d9ef"&gt;int&lt;/span&gt;, &lt;span style="color:#a6e22e"&gt;brief&lt;/span&gt; &lt;span style="color:#66d9ef"&gt;bool&lt;/span&gt;, &lt;span style="color:#a6e22e"&gt;opts&lt;/span&gt; &lt;span style="color:#f92672"&gt;...&lt;/span&gt;&lt;span style="color:#a6e22e"&gt;Option&lt;/span&gt;) (&lt;span style="color:#a6e22e"&gt;ShowResult&lt;/span&gt;, &lt;span style="color:#66d9ef"&gt;string&lt;/span&gt;, &lt;span style="color:#66d9ef"&gt;error&lt;/span&gt;)&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;读取指定文件的行范围。返回内容包括完整内容和 &lt;code&gt;viewed_code_id&lt;/code&gt;（第二个返回值）。&lt;code&gt;viewed_code_id&lt;/code&gt; 可传给 &lt;code&gt;Replace&lt;/code&gt; 进行行数校验。&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;start&lt;/code&gt;：起始行号（&amp;gt;= 1）&lt;/li&gt;
&lt;li&gt;&lt;code&gt;endLine&lt;/code&gt;：结束行号。传 &lt;code&gt;0&lt;/code&gt; 或负数时自动扩展到所在函数范围（基于 &lt;code&gt;FuncRange&lt;/code&gt;）&lt;/li&gt;
&lt;li&gt;返回 &lt;code&gt;viewed_code_id&lt;/code&gt;：UUID v4，用于后续 &lt;code&gt;Replace&lt;/code&gt; 的 session 校验&lt;/li&gt;
&lt;li&gt;&lt;code&gt;opts&lt;/code&gt;：可选的 &lt;code&gt;WithFileSystem(...)&lt;/code&gt; 注入，用于沙箱或 workspace 受限场景&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;code&gt;Show&lt;/code&gt; 仍然保留为兼容别名。&lt;/p&gt;
&lt;h4 id="replace"&gt;&lt;code&gt;Replace&lt;/code&gt;&lt;a class="anchor" href="#replace"&gt;#&lt;/a&gt;&lt;/h4&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-go" data-lang="go"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#66d9ef"&gt;func&lt;/span&gt; &lt;span style="color:#a6e22e"&gt;Replace&lt;/span&gt;(&lt;span style="color:#a6e22e"&gt;path&lt;/span&gt; &lt;span style="color:#66d9ef"&gt;string&lt;/span&gt;, &lt;span style="color:#a6e22e"&gt;start&lt;/span&gt;, &lt;span style="color:#a6e22e"&gt;end&lt;/span&gt; &lt;span style="color:#66d9ef"&gt;int&lt;/span&gt;, &lt;span style="color:#a6e22e"&gt;old&lt;/span&gt; &lt;span style="color:#f92672"&gt;*&lt;/span&gt;&lt;span style="color:#66d9ef"&gt;string&lt;/span&gt;, &lt;span style="color:#a6e22e"&gt;content&lt;/span&gt; &lt;span style="color:#66d9ef"&gt;string&lt;/span&gt;, &lt;span style="color:#a6e22e"&gt;format&lt;/span&gt; &lt;span style="color:#66d9ef"&gt;string&lt;/span&gt;, &lt;span style="color:#a6e22e"&gt;preview&lt;/span&gt; &lt;span style="color:#66d9ef"&gt;bool&lt;/span&gt;, &lt;span style="color:#a6e22e"&gt;sessionID&lt;/span&gt; &lt;span style="color:#66d9ef"&gt;string&lt;/span&gt;, &lt;span style="color:#a6e22e"&gt;brief&lt;/span&gt; &lt;span style="color:#66d9ef"&gt;bool&lt;/span&gt;, &lt;span style="color:#a6e22e"&gt;opts&lt;/span&gt; &lt;span style="color:#f92672"&gt;...&lt;/span&gt;&lt;span style="color:#a6e22e"&gt;Option&lt;/span&gt;) (&lt;span style="color:#a6e22e"&gt;ReplaceResult&lt;/span&gt;, &lt;span style="color:#66d9ef"&gt;error&lt;/span&gt;)&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;精确替换指定行范围的内容。&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;start&lt;/code&gt;、&lt;code&gt;end&lt;/code&gt;：行范围（闭区间），二者均不可省略&lt;/li&gt;
&lt;li&gt;&lt;code&gt;old&lt;/code&gt;：可选，非 nil 时会校验当前文件内容与 old 是否一致，不一致则返回错误&lt;/li&gt;
&lt;li&gt;&lt;code&gt;content&lt;/code&gt;：替换后的内容&lt;/li&gt;
&lt;li&gt;&lt;code&gt;format&lt;/code&gt;：写入后的格式（&amp;ldquo;trim&amp;rdquo; 或 &amp;ldquo;&amp;quot;）&lt;/li&gt;
&lt;li&gt;&lt;code&gt;preview&lt;/code&gt;：如果为 true，只返回 diff 不写入文件&lt;/li&gt;
&lt;li&gt;&lt;code&gt;sessionID&lt;/code&gt;：可选，传 &lt;code&gt;be-read&lt;/code&gt; 返回的 &lt;code&gt;viewed_code_id&lt;/code&gt; 时校验行数一致性&lt;/li&gt;
&lt;li&gt;&lt;code&gt;brief&lt;/code&gt;：返回精简结果（省略 diff 和 balance）&lt;/li&gt;
&lt;/ul&gt;
&lt;h4 id="insert"&gt;&lt;code&gt;Insert&lt;/code&gt;&lt;a class="anchor" href="#insert"&gt;#&lt;/a&gt;&lt;/h4&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-go" data-lang="go"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#66d9ef"&gt;func&lt;/span&gt; &lt;span style="color:#a6e22e"&gt;Insert&lt;/span&gt;(&lt;span style="color:#a6e22e"&gt;path&lt;/span&gt; &lt;span style="color:#66d9ef"&gt;string&lt;/span&gt;, &lt;span style="color:#a6e22e"&gt;after&lt;/span&gt; &lt;span style="color:#66d9ef"&gt;int&lt;/span&gt;, &lt;span style="color:#a6e22e"&gt;content&lt;/span&gt; &lt;span style="color:#66d9ef"&gt;string&lt;/span&gt;, &lt;span style="color:#a6e22e"&gt;format&lt;/span&gt; &lt;span style="color:#66d9ef"&gt;string&lt;/span&gt;, &lt;span style="color:#a6e22e"&gt;preview&lt;/span&gt; &lt;span style="color:#66d9ef"&gt;bool&lt;/span&gt;, &lt;span style="color:#a6e22e"&gt;brief&lt;/span&gt; &lt;span style="color:#66d9ef"&gt;bool&lt;/span&gt;, &lt;span style="color:#a6e22e"&gt;opts&lt;/span&gt; &lt;span style="color:#f92672"&gt;...&lt;/span&gt;&lt;span style="color:#a6e22e"&gt;Option&lt;/span&gt;) (&lt;span style="color:#a6e22e"&gt;InsertResult&lt;/span&gt;, &lt;span style="color:#66d9ef"&gt;error&lt;/span&gt;)&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;在指定行后插入内容。&lt;/p&gt;</description></item><item><title/><link>https://conglinyizhi.github.io/better-edit-tools-mcp/decisions/chip-design/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://conglinyizhi.github.io/better-edit-tools-mcp/decisions/chip-design/</guid><description>&lt;h1 id="chip-机制设计决策"&gt;Chip 机制设计决策&lt;a class="anchor" href="#chip-%e6%9c%ba%e5%88%b6%e8%ae%be%e8%ae%a1%e5%86%b3%e7%ad%96"&gt;#&lt;/a&gt;&lt;/h1&gt;
&lt;h2 id="1-设计动机"&gt;1. 设计动机&lt;a class="anchor" href="#1-%e8%ae%be%e8%ae%a1%e5%8a%a8%e6%9c%ba"&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;在 MCP（Model Context Protocol）调用链路中，LLM 生成的工具参数常常因为 JSON 转义、字段缺失、格式错乱等原因导致调用失败。一旦失败，原始的参数内容可能只出现在一次性的错误响应里，后续轮次中模型很难精确复现完全相同的内容，尤其是大段代码写入（&lt;code&gt;be-write&lt;/code&gt;）或多行替换时。&lt;/p&gt;
&lt;p&gt;Chip 机制的核心目标是把“失败现场”或“被删除的内容”临时保存下来，作为模型后续恢复操作的可靠数据来源。它相当于在进程内维护了一个轻量级的 FIFO 缓存队列，让 LLM 可以通过专用工具 &lt;code&gt;be-insert-chip&lt;/code&gt; 把之前丢失或删除的内容重新插入到目标文件中，从而降低因一次调用失败而导致整轮任务中断的概率。&lt;/p&gt;
&lt;h2 id="2-何时会创建-chip"&gt;2. 何时会创建 chip&lt;a class="anchor" href="#2-%e4%bd%95%e6%97%b6%e4%bc%9a%e5%88%9b%e5%bb%ba-chip"&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;当前有两种场景会触发 chip 记录：&lt;/p&gt;
&lt;h3 id="21-工具调用失败时自动保存参数"&gt;2.1 工具调用失败时自动保存参数&lt;a class="anchor" href="#21-%e5%b7%a5%e5%85%b7%e8%b0%83%e7%94%a8%e5%a4%b1%e8%b4%a5%e6%97%b6%e8%87%aa%e5%8a%a8%e4%bf%9d%e5%ad%98%e5%8f%82%e6%95%b0"&gt;#&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;当某个工具调用返回错误，且入参序列化后的 JSON 长度大于 50 字节时，服务端会调用 &lt;code&gt;SaveChip(tool, args, errMsg)&lt;/code&gt; 把原始参数保存为 chip。&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-go" data-lang="go"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#66d9ef"&gt;func&lt;/span&gt; &lt;span style="color:#a6e22e"&gt;SaveChip&lt;/span&gt;(&lt;span style="color:#a6e22e"&gt;tool&lt;/span&gt; &lt;span style="color:#66d9ef"&gt;string&lt;/span&gt;, &lt;span style="color:#a6e22e"&gt;args&lt;/span&gt; &lt;span style="color:#66d9ef"&gt;map&lt;/span&gt;[&lt;span style="color:#66d9ef"&gt;string&lt;/span&gt;]&lt;span style="color:#66d9ef"&gt;any&lt;/span&gt;, &lt;span style="color:#a6e22e"&gt;errMsg&lt;/span&gt; &lt;span style="color:#66d9ef"&gt;string&lt;/span&gt;) &lt;span style="color:#66d9ef"&gt;string&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;ul&gt;
&lt;li&gt;参数 JSON 长度 ≤ 50 字节时不保存，避免记录过多无意义的短参数。&lt;/li&gt;
&lt;li&gt;保存成功后返回 chip ID（如 &lt;code&gt;a3f7b2&lt;/code&gt;）；不需要恢复时返回空字符串。&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id="22-删除操作时保存被删除内容"&gt;2.2 删除操作时保存被删除内容&lt;a class="anchor" href="#22-%e5%88%a0%e9%99%a4%e6%93%8d%e4%bd%9c%e6%97%b6%e4%bf%9d%e5%ad%98%e8%a2%ab%e5%88%a0%e9%99%a4%e5%86%85%e5%ae%b9"&gt;#&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;&lt;code&gt;be-delete&lt;/code&gt; 在真正落盘前，会把被删除的非空内容通过 &lt;code&gt;SaveContentChip&lt;/code&gt; 保存为 chip，并在返回的 &lt;code&gt;warnings&lt;/code&gt; 中提示模型：&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-go" data-lang="go"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#a6e22e"&gt;deletedContent&lt;/span&gt; &lt;span style="color:#f92672"&gt;:=&lt;/span&gt; &lt;span style="color:#a6e22e"&gt;strings&lt;/span&gt;.&lt;span style="color:#a6e22e"&gt;Join&lt;/span&gt;(&lt;span style="color:#a6e22e"&gt;fileLines&lt;/span&gt;[&lt;span style="color:#a6e22e"&gt;start&lt;/span&gt;&lt;span style="color:#f92672"&gt;-&lt;/span&gt;&lt;span style="color:#ae81ff"&gt;1&lt;/span&gt;:&lt;span style="color:#a6e22e"&gt;end&lt;/span&gt;], &lt;span style="color:#e6db74"&gt;&amp;#34;&amp;#34;&lt;/span&gt;)
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#66d9ef"&gt;if&lt;/span&gt; &lt;span style="color:#a6e22e"&gt;deletedContent&lt;/span&gt; &lt;span style="color:#f92672"&gt;!=&lt;/span&gt; &lt;span style="color:#e6db74"&gt;&amp;#34;&amp;#34;&lt;/span&gt; {
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#a6e22e"&gt;chipID&lt;/span&gt;, &lt;span style="color:#a6e22e"&gt;chipWarn&lt;/span&gt; &lt;span style="color:#f92672"&gt;:=&lt;/span&gt; &lt;span style="color:#a6e22e"&gt;SaveContentChip&lt;/span&gt;(&lt;span style="color:#e6db74"&gt;&amp;#34;be-delete&amp;#34;&lt;/span&gt;, &lt;span style="color:#a6e22e"&gt;deletedContent&lt;/span&gt;)
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#a6e22e"&gt;warnings&lt;/span&gt; = append(&lt;span style="color:#a6e22e"&gt;warnings&lt;/span&gt;, &lt;span style="color:#a6e22e"&gt;fmt&lt;/span&gt;.&lt;span style="color:#a6e22e"&gt;Sprintf&lt;/span&gt;(&lt;span style="color:#e6db74"&gt;&amp;#34;deleted content saved as chip://%s&amp;#34;&lt;/span&gt;, &lt;span style="color:#a6e22e"&gt;chipID&lt;/span&gt;))
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;}&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;这让误删后可以通过 &lt;code&gt;be-insert-chip&lt;/code&gt; 把内容重新插回文件。&lt;/p&gt;</description></item></channel></rss>