导入与模块布局
应导入哪个 openclaw/plugin-sdk/* 子路径,以及如何组织插件自身的公共 barrel 和内部 barrel。属于 插件 SDK 概览 的一部分。
导入约定¶
对于具有原生 Control UI 的功能,使用 功能插件:
feature-contract 定义共享操作,feature-plugin 注册它们的后端实现,control-ui 暴露浏览器贡献和替换契约。
始终从特定子路径导入:
import { definePluginEntry } from "openclaw/plugin-sdk/plugin-entry";
import { defineChannelPluginEntry } from "openclaw/plugin-sdk/channel-core";
每个子路径都是一个小型、自包含的模块。这有助于保持快速启动并避免循环依赖问题。对于通道特定的入口/构建辅助函数,优先使用 openclaw/plugin-sdk/channel-core;将 openclaw/plugin-sdk/core 保留给更广泛的伞形表面和共享辅助函数,例如 buildChannelConfigSchema。
对于通道配置,通过 openclaw.plugin.json#channelConfigs 发布通道拥有的 JSON Schema。plugin-sdk/channel-config-schema 子路径用于共享的 schema 基元和通用构建器。OpenClaw 的捆绑插件使用 plugin-sdk/bundled-channel-config-schema 来保留捆绑通道 schema。该捆绑 schema 子路径不是新插件应采用的模式。
Warning
不要导入带有 provider 或通道品牌标识的便捷接口(例如
openclaw/plugin-sdk/slack、.../discord、.../signal、.../whatsapp)。
捆绑插件在各自的 api.ts /
runtime-api.ts barrel 中组合通用 SDK 子路径;核心消费者应使用这些插件本地
barrel,或者当需求确实跨通道时,添加一个窄的通用 SDK 契约。
当某些捆绑插件辅助接口存在已跟踪的所有者使用时,它们仍会出现在生成的导出 映射中。它们仅用于捆绑插件维护,不建议作为新的第三方 插件的导入路径。
openclaw/plugin-sdk/discord 和 openclaw/plugin-sdk/telegram-account 也
作为已弃用的兼容 facade 保留,用于已跟踪的所有者使用。它们没有
已发布的移除日期;运行 pnpm plugins:boundary-report 并查看
移除时间表 以了解有移除日期的表面。不要
将这些导入路径复制到新插件中;请改用注入的运行时辅助函数
和通用通道 SDK 子路径。
对于只需要凭据值的 provider 发现,使用
openclaw/plugin-sdk/secret-input 来调用 readProviderEnvValue、
resolveNonEnvSecretRefApiKeyMarker 以及 SecretRef 强制转换/规范化。
这些辅助函数不会加载 profile 存储、provider 传输或 web-search
执行。使用 provider-web-search-config-contract 读取插件拥有的
web-search 配置。将完整的 auth 和搜索运行时导入保留在执行路径中。
子路径参考¶
插件 SDK 以一组按领域分组的窄子路径形式暴露(插件 入口、通道、provider、认证、运行时、能力、内存以及保留的 捆绑插件辅助函数)。要查看完整目录——按组并带链接——请参阅 插件 SDK 子路径。
编译器入口点清单位于
scripts/lib/plugin-sdk-entrypoints.json;类型化公共导出排除
scripts/lib/plugin-sdk-private-local-only-subpaths.json 中列出的内部子路径。该列表中的生产
条目为单独发布的官方插件保留仅 JavaScript 的宿主运行时导出,而仅测试条目保持未导出。运行
pnpm plugin-sdk:surface 以审计公共导出数量。足够旧且未被捆绑扩展生产代码使用的已弃用公共
子路径记录在 scripts/lib/plugin-sdk-deprecated-public-subpaths.json;广泛的
已弃用重新导出 barrel 记录在
scripts/lib/plugin-sdk-deprecated-barrel-subpaths.json。
内部模块约定¶
在插件内部,使用本地 barrel 文件进行内部导入:
my-plugin/
api.ts # Public exports for external consumers
runtime-api.ts # Internal-only runtime exports
index.ts # Plugin entry point
setup-entry.ts # Lightweight setup-only entry (optional)
Warning
不要在生产代码中通过 openclaw/plugin-sdk/<your-plugin>
导入你自己的插件。内部导入应通过 ./api.ts 或
./runtime-api.ts 进行。SDK 路径仅作为外部契约。
通过 facade 加载的捆绑插件公共表面(api.ts、runtime-api.ts、
index.ts、setup-entry.ts 以及类似的公共入口文件)在 OpenClaw 已经运行时优先使用
活动的运行时配置快照。如果尚不存在运行时快照,则回退到磁盘上已解析的配置文件。
打包的捆绑插件 facade 应通过 OpenClaw 的插件
facade 加载器加载;直接从 dist/extensions/... 导入会绕过打包安装用于插件自有代码的
manifest 和运行时 sidecar 检查。
当某个辅助函数有意为 provider 特定,且尚不属于通用 SDK 子路径时,provider 插件可以暴露一个窄的插件本地契约 barrel。捆绑示例:
- Anthropic:用于 Claude
beta-header 和
service_tier流辅助函数的公共api.ts/contract-api.ts接口。 @openclaw/openai-provider:api.ts导出 provider 构建器、 默认模型辅助函数和实时 provider 构建器。@openclaw/openrouter-provider:api.ts导出 provider 构建器 以及入门/配置辅助函数。
Warning
扩展生产代码也应避免 openclaw/plugin-sdk/<other-plugin>
导入。如果某个辅助函数确实共享,应将其提升为中立的 SDK 子路径
例如 openclaw/plugin-sdk/speech、.../provider-model-shared 或其他
面向能力的表面,而不是将两个插件耦合在一起。
本页原文 Markdown:在 AtomGit 查看·内容源自开源项目 cl/openclaw