<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:content="http://purl.org/rss/1.0/modules/content/"><channel><title>插件系统 on Last Stand</title><link>https://amatsuzero.github.io/LastStand/tags/%E6%8F%92%E4%BB%B6%E7%B3%BB%E7%BB%9F/</link><description>Recent content in 插件系统 on Last Stand</description><generator>Hugo</generator><language>zh-cn</language><lastBuildDate>Tue, 09 Jun 2026 00:00:00 +0800</lastBuildDate><atom:link href="https://amatsuzero.github.io/LastStand/tags/%E6%8F%92%E4%BB%B6%E7%B3%BB%E7%BB%9F/index.xml" rel="self" type="application/rss+xml"/><item><title>第14章：扩展性架构算法</title><link>https://amatsuzero.github.io/LastStand/posts/aiagentalgorithm/chapter-14/</link><pubDate>Tue, 09 Jun 2026 00:00:00 +0800</pubDate><guid>https://amatsuzero.github.io/LastStand/posts/aiagentalgorithm/chapter-14/</guid><description>&lt;blockquote&gt;
&lt;p&gt;&amp;ldquo;好的架构不是预知未来，而是让未来的变化变得廉价。&amp;rdquo; —— Robert C. Martin&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h2 id="141-问题引入当能力边界需要不断外扩"&gt;14.1 问题引入：当能力边界需要不断外扩&lt;/h2&gt;
&lt;p&gt;一个 Agent 系统在发布后必然面临一个根本性矛盾：用户需求是无限的，而核心代码的变更是昂贵的。每一次向核心代码中添加新功能，都意味着更高的耦合度、更大的回归测试面积、更长的发布周期。&lt;/p&gt;
&lt;p&gt;Claude Code 从第一天起就面对这个问题。它需要支持数十种斜杠命令、允许社区贡献新的技能、让每个用户拥有个性化的&amp;quot;记忆&amp;quot;，还要让企业能通过插件定制整个工作流——所有这些都不应该要求修改一行核心代码。&lt;/p&gt;
&lt;p&gt;这就是&lt;strong&gt;扩展性架构&lt;/strong&gt;要解决的问题。本章我们将剖析 Claude Code 源码中三个核心扩展子系统——&lt;strong&gt;插件系统&lt;/strong&gt;、&lt;strong&gt;技能框架&lt;/strong&gt;和 &lt;strong&gt;Memory 系统&lt;/strong&gt;——背后的算法设计，揭示一个工业级 Agent 是如何在&amp;quot;对扩展开放、对修改封闭&amp;quot;的原则下，实现能力的无限外扩。&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id="142-算法思想"&gt;14.2 算法思想&lt;/h2&gt;
&lt;h3 id="1421-插件发现算法多源汇聚的声明式发现"&gt;14.2.1 插件发现算法：多源汇聚的声明式发现&lt;/h3&gt;
&lt;p&gt;Claude Code 的插件发现不是简单地扫描某个目录。它采用了一种&lt;strong&gt;多源声明式发现&lt;/strong&gt;算法，插件来源按优先级排列：&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;Marketplace 插件&lt;/strong&gt;（&lt;code&gt;plugin@marketplace&lt;/code&gt; 格式声明于 settings 文件）&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;会话插件&lt;/strong&gt;（&lt;code&gt;--plugin-dir&lt;/code&gt; CLI 参数或 SDK 内联注入）&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;内置插件&lt;/strong&gt;（编译进二进制的 builtin plugins）&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;发现算法的核心在 &lt;code&gt;assemblePluginLoadResult&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-gdscript3" data-lang="gdscript3"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;assemblePluginLoadResult(marketplaceLoader):
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#f92672"&gt;//&lt;/span&gt; &lt;span style="color:#960050;background-color:#1e0010"&gt;阶段&lt;/span&gt;&lt;span style="color:#ae81ff"&gt;1&lt;/span&gt;: &lt;span style="color:#960050;background-color:#1e0010"&gt;并行加载各来源&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; [marketplaceResult, sessionResult] &lt;span style="color:#f92672"&gt;=&lt;/span&gt; await Promise&lt;span style="color:#f92672"&gt;.&lt;/span&gt;all([
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; marketplaceLoader(), &lt;span style="color:#f92672"&gt;//&lt;/span&gt; marketplace &lt;span style="color:#960050;background-color:#1e0010"&gt;插件&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; loadSessionOnlyPlugins(inlinePlugins) &lt;span style="color:#f92672"&gt;//&lt;/span&gt; &lt;span style="color:#960050;background-color:#1e0010"&gt;会话插件&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; builtinResult &lt;span style="color:#f92672"&gt;=&lt;/span&gt; getBuiltinPlugins() &lt;span style="color:#f92672"&gt;//&lt;/span&gt; &lt;span style="color:#960050;background-color:#1e0010"&gt;内置插件&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:#f92672"&gt;//&lt;/span&gt; &lt;span style="color:#960050;background-color:#1e0010"&gt;阶段&lt;/span&gt;&lt;span style="color:#ae81ff"&gt;2&lt;/span&gt;: &lt;span style="color:#960050;background-color:#1e0010"&gt;多源合并（冲突解决）&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; allPlugins &lt;span style="color:#f92672"&gt;=&lt;/span&gt; mergePluginSources({
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; session: sessionResult&lt;span style="color:#f92672"&gt;.&lt;/span&gt;plugins,
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; marketplace: marketplaceResult&lt;span style="color:#f92672"&gt;.&lt;/span&gt;plugins,
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; builtin: builtinResult,
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; managedNames: getManagedPluginNames() &lt;span style="color:#f92672"&gt;//&lt;/span&gt; &lt;span style="color:#960050;background-color:#1e0010"&gt;企业策略锁定&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&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#f92672"&gt;//&lt;/span&gt; &lt;span style="color:#960050;background-color:#1e0010"&gt;阶段&lt;/span&gt;&lt;span style="color:#ae81ff"&gt;3&lt;/span&gt;: &lt;span style="color:#960050;background-color:#1e0010"&gt;依赖验证与降级&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; { demoted, errors } &lt;span style="color:#f92672"&gt;=&lt;/span&gt; verifyAndDemote(allPlugins)
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#66d9ef"&gt;for&lt;/span&gt; p &lt;span style="color:#f92672"&gt;in&lt;/span&gt; allPlugins:
&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; demoted&lt;span style="color:#f92672"&gt;.&lt;/span&gt;has(p&lt;span style="color:#f92672"&gt;.&lt;/span&gt;source): p&lt;span style="color:#f92672"&gt;.&lt;/span&gt;enabled &lt;span style="color:#f92672"&gt;=&lt;/span&gt; false
&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:#f92672"&gt;//&lt;/span&gt; &lt;span style="color:#960050;background-color:#1e0010"&gt;阶段&lt;/span&gt;&lt;span style="color:#ae81ff"&gt;4&lt;/span&gt;: &lt;span style="color:#960050;background-color:#1e0010"&gt;缓存插件设置以供同步访问&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; cachePluginSettings(enabledPlugins)
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#66d9ef"&gt;return&lt;/span&gt; { enabled, disabled, errors }
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;这个算法的关键设计决策有三个：&lt;/p&gt;</description></item></channel></rss>