[需求] 提供接口动态获取所有已加载的插件列表,消除下游系统的硬编码依赖
业务背景
目前,第三方管理面板(如 ClawPanel)在判断内置/核心插件(如 memory-core, anthropic, ollama 等)的安装状态时存在极大的局限性。
由于 OpenClaw 当前未提供可直接拉取“当前已加载插件完整列表”的结构化接口,下游应用只能采用脆弱的静态推断方案:
- 物理扫描
~/.openclaw/extensions/ 目录寻找外部插件包。
- 读取
openclaw.json 中的 plugins.entries,并与代码中硬编码的“已知内置插件白名单”进行比对。
存在的问题
当 OpenClaw 引擎引入新的核心组件(例如通过 Slot 默认加载的 memory-core)时,这些组件无需外部 NPM 包,也不强制在配置文件中显式声明 enabled: true。
这导致面板的静态推断逻辑失效。即便 memory-core 在引擎中运行完全正常,GUI 也会因为白名单缺失而将其错误标记为“未安装”。
如果继续维持现状,上游每增加或调整一个内置组件,所有下游管理系统都必须被迫跟随发版更新硬编码列表,维护成本极高。
解决方案探讨
为了将插件状态的解释权收敛至引擎自身,建议由 OpenClaw 提供一层动态状态暴露机制。以下是几种可能的实现路径供社区探讨:
方案一:扩充现有 CLI 命令(成本最低)
在现有的 openclaw status --json 输出中,直接补充完整的 active_plugins 或 plugins 数组节点。
方案二:新增专用的 CLI 查询指令(职责最清晰)
新增类似 openclaw plugins list --json 的命令,专注返回标准化的插件状态结构,例如:
{
"plugins": [
{
"id": "memory-core",
"builtin": true,
"enabled": true,
"source": "slot-default"
},
{
"id": "feishu",
"builtin": false,
"enabled": false,
"version": "1.0.0"
}
]
}
方案三:RPC / WebSocket API 直接查询(交互体验最佳)
在 Gateway 暴露一个获取系统状态的 RPC 方法或 HTTP Endpoint(例如 GET /api/system/plugins),供 Panel 或其他外部应用实时调用。这样彻底摆脱了通过子进程拉起 CLI 查状态的性能损耗,是最长远的架构解法。
架构价值
无论采用上述哪种方式,其核心都在于由引擎统一收敛状态的解释权。这将彻底消除下游生态的文件目录扫描和硬编码依赖,确保在未来的版本迭代中,上下游系统能够解耦并天然保持兼容。
[需求] 提供接口动态获取所有已加载的插件列表,消除下游系统的硬编码依赖
业务背景
目前,第三方管理面板(如 ClawPanel)在判断内置/核心插件(如
memory-core,anthropic,ollama等)的安装状态时存在极大的局限性。由于 OpenClaw 当前未提供可直接拉取“当前已加载插件完整列表”的结构化接口,下游应用只能采用脆弱的静态推断方案:
~/.openclaw/extensions/目录寻找外部插件包。openclaw.json中的plugins.entries,并与代码中硬编码的“已知内置插件白名单”进行比对。存在的问题
当 OpenClaw 引擎引入新的核心组件(例如通过 Slot 默认加载的
memory-core)时,这些组件无需外部 NPM 包,也不强制在配置文件中显式声明enabled: true。这导致面板的静态推断逻辑失效。即便
memory-core在引擎中运行完全正常,GUI 也会因为白名单缺失而将其错误标记为“未安装”。如果继续维持现状,上游每增加或调整一个内置组件,所有下游管理系统都必须被迫跟随发版更新硬编码列表,维护成本极高。
解决方案探讨
为了将插件状态的解释权收敛至引擎自身,建议由 OpenClaw 提供一层动态状态暴露机制。以下是几种可能的实现路径供社区探讨:
方案一:扩充现有 CLI 命令(成本最低)
在现有的
openclaw status --json输出中,直接补充完整的active_plugins或plugins数组节点。方案二:新增专用的 CLI 查询指令(职责最清晰)
新增类似
openclaw plugins list --json的命令,专注返回标准化的插件状态结构,例如:{ "plugins": [ { "id": "memory-core", "builtin": true, "enabled": true, "source": "slot-default" }, { "id": "feishu", "builtin": false, "enabled": false, "version": "1.0.0" } ] }方案三:RPC / WebSocket API 直接查询(交互体验最佳)
在 Gateway 暴露一个获取系统状态的 RPC 方法或 HTTP Endpoint(例如
GET /api/system/plugins),供 Panel 或其他外部应用实时调用。这样彻底摆脱了通过子进程拉起 CLI 查状态的性能损耗,是最长远的架构解法。架构价值
无论采用上述哪种方式,其核心都在于由引擎统一收敛状态的解释权。这将彻底消除下游生态的文件目录扫描和硬编码依赖,确保在未来的版本迭代中,上下游系统能够解耦并天然保持兼容。