插件
一个包里同时带技能、命令、子代理、MCP 服务器和钩子;安装账本归引擎所有。
插件是打包分发的能力集合,一个插件里可以同时带技能、斜杠命令、子代理、MCP 服务器和钩子。
- 市场档:从插件市场浏览并安装。每行「装了会多出什么」是引擎用真正加载时那套解析器算出来的,所以不会出现「市场页写的和装完实际有的不一样」。
- 更新:市场卡片和已安装列表会显示已装版本、可用版本和「更新到」按钮。刷新市场获取新目录后,更新把新版本交给引擎安装,保留启用状态和插件数据;失败保留当前状态,过期更新会被引擎拒绝。
- 已安装档:启用/禁用开关。注意插件启停是应用级的,没有项目作用域——启用后所有会话可见。
- 已装列表里的「已加载 / 加载失败」是某一条会话的运行时状态,不是全局属性:同一个插件可以在新会话里好的、在旧会话里还是旧状态。
它的安装与生效机制:
- 账本归引擎所有,存在引擎自己的配置文件
~/.klaus/config.toml的[plugins]段里,每条记录带名字、来源、安装路径、安装时间和启用位。这份文件由引擎读写,不要拿第二个写入方去改它的形状——引擎启动时要解它,形状不对会启动不了。已登记的市场目录同样记在这份配置的[marketplaces]段。 - 安装分两段:客户端先把包取到一个暂存目录(本地复制,或 git 拉取——支持仓库地址、
owner/repo简写、以及只拉仓库里某一个子目录),再交给引擎校验、复制进它自己的存储区、写账本。无论成败暂存目录都会被清掉,所以安装失败不会留下半个插件。 - 启停改的是账本里的启用位,装完、启用、停用都不用重启应用,已经开着的会话也能看到新装插件带来的技能。(只有发布失败或需要迁移旧格式这类少数情况,引擎会回报需要换一个连接。)
- 卸载同时删账本行和存储区里的那份副本。内置的那几个(比如浏览器)标为内置来源,可以停用但卸不掉。
- 插件里的技能/命令/子代理/MCP/钩子由引擎自己从账本加载并标上来源,客户端不再重复报一遍(否则插件里的钩子会每个事件触发两次)。