OpenClaw从入门到应用——工具(Tools):插件

张开发
2026/5/17 10:55:49 15 分钟阅读

分享文章

OpenClaw从入门到应用——工具(Tools):插件
通过OpenClaw实现副业收入《OpenClaw赚钱实录从“养龙虾“到可持续变现的实践指南》快速入门插件只是一个小型代码模块通过额外的功能命令、工具和网关 RPC扩展 OpenClaw。大多数情况下当您需要的功能尚未内置到 OpenClaw 核心中或您希望将可选功能排除在主安装之外时您会使用插件。快速路径查看已加载的插件openclaw plugins list安装一个官方插件例如语音通话openclaw pluginsinstallopenclaw/voice-callNpm 规格是仅限注册表的包名 可选的确切版本或分发标签。Git/URL/文件规格和 semver 范围将被拒绝。裸规格和latest保持在稳定轨道上。如果 npm 将这些解析为预发布版本OpenClaw 将停止并要求您使用预发布标签如beta/rc或确切的预发布版本显式选择加入。重启网关然后在plugins.entries.id.config下进行配置。参见 语音通话 获取一个具体的插件示例。寻找第三方列表请参阅 社区插件。架构OpenClaw 的插件系统有四个层次清单 发现OpenClaw 从配置的路径、工作区根目录、全局扩展根目录和捆绑扩展中发现候选插件。发现过程首先读取openclaw.plugin.json和包元数据。启用 验证核心决定发现的插件是否启用、禁用、阻止或选定用于独占槽位如 memory。运行时加载已启用的插件通过 jiti 在进程内加载并将功能注册到中央注册表中。表层使用OpenClaw 的其余部分读取注册表以公开工具、通道、提供商设置、钩子、HTTP 路由、CLI 命令和服务。重要的设计边界发现 配置验证应通过清单/模式元数据工作无需执行插件代码。运行时行为来自插件模块的register(api)路径。这种分离使 OpenClaw 能够在完整的运行时激活之前验证配置、解释缺失/禁用的插件并构建 UI/模式提示。执行模型插件与网关在进程中运行。它们不受沙箱限制。加载的插件拥有与核心代码相同的进程级信任边界。含义插件可以注册工具、网络处理程序、钩子和服务。插件错误可能导致网关崩溃或不稳定。恶意插件等同于在 OpenClaw 进程内执行任意代码。对非捆绑插件使用允许列表和显式安装/加载路径。将工作区插件视为开发时代码而非生产默认设置。重要信任说明plugins.allow信任的是插件 ID而非来源出处。当工作区插件启用/被允许时与捆绑插件具有相同 ID 的工作区插件会有意地遮盖捆绑副本。这对于本地开发、补丁测试和热修复是正常且有用的。可用插件官方自 2026.1.15 起Microsoft Teams 仅为插件形式如果您使用 Teams请安装openclaw/msteams。Memory (Core) — 捆绑的记忆搜索插件通过plugins.slots.memory默认启用。Memory (LanceDB) — 捆绑的长期记忆插件自动召回/捕获设置plugins.slots.memory memory-lancedb。语音通话 —openclaw/voice-callZalo 个人版 —openclaw/zalouserMatrix —openclaw/matrixNostr —openclaw/nostrZalo —openclaw/zaloMicrosoft Teams —openclaw/msteamsGoogle Antigravity OAuth提供商认证— 捆绑为google-antigravity-auth默认禁用Gemini CLI OAuth提供商认证— 捆绑为google-gemini-cli-auth默认禁用Qwen OAuth提供商认证— 捆绑为qwen-portal-auth默认禁用Copilot Proxy提供商认证— 本地 VS Code Copilot 代理桥与内置的github-copilot设备登录不同捆绑默认禁用OpenClaw 插件是TypeScript 模块在运行时通过 jiti 加载。配置验证不执行插件代码而是使用插件清单和 JSON 模式。请参阅 插件清单。插件可以注册网关 RPC 方法网关 HTTP 路由代理工具CLI 命令后台服务上下文引擎可选的配置验证技能通过在插件清单中列出skills目录自动回复命令无需调用 AI 代理即可执行插件与网关在进程中运行因此请将其视为受信任的代码。工具编写指南插件代理工具。加载管道启动时OpenClaw 大致执行以下操作发现候选插件根目录。读取openclaw.plugin.json和包元数据。拒绝不安全的候选插件。规范化插件配置plugins.enabled、allow、deny、entries、slots、load.paths。决定每个候选插件的启用状态。通过 jiti 加载已启用的模块。调用register(api)并将注册信息收集到插件注册表中。向命令/运行时表层公开注册表。安全关卡在运行时执行之前发生。当入口点逃逸出插件根目录、路径为全局可写或者对于非捆绑插件来说路径所有权可疑时候选插件将被阻止。清单优先行为清单是控制面的真实来源。OpenClaw 使用清单来识别插件。发现声明的通道/技能/配置模式。验证plugins.entries.id.config。增强控制 UI 的标签/占位符。显示安装/目录元数据。运行时模块是数据面部分。它注册实际行为如钩子、工具、命令或提供商流程。加载器缓存了什么OpenClaw 为以下内容保留短期进程内缓存发现结果。清单注册表数据。已加载的插件注册信息。这些缓存减少了突发启动和重复命令的开销。可以安全地将它们视为短期性能缓存而不是持久化存储。运行时辅助功能插件可以通过api.runtime访问选定的核心辅助功能。对于电话 TTSconstresultawaitapi.runtime.tts.textToSpeechTelephony({text:来自 OpenClaw 的问候,cfg:api.config,});注意使用核心messages.tts配置OpenAI 或 ElevenLabs。返回 PCM 音频缓冲区 采样率。插件必须为提供商重新采样/编码。电话不支持 Edge TTS。对于 STT/转录插件可以调用const{text}awaitapi.runtime.stt.transcribeAudioFile({filePath:/tmp/inbound-audio.ogg,cfg:api.config,// 当 MIME 无法可靠推断时的可选参数mime:audio/ogg,});注意使用核心媒体理解音频配置tools.media.audio和提供商回退顺序。当没有生成转录输出例如跳过/不支持的输入时返回{ text: undefined }。网关 HTTP 路由插件可以使用api.registerHttpRoute(...)公开 HTTP 端点。api.registerHttpRoute({path:/acme/webhook,auth:plugin,match:exact,handler:async(_req,res){res.statusCode200;res.end(ok);returntrue;},});路由字段path网关 HTTP 服务器下的路由路径。auth必需。使用gateway要求正常的网关认证或使用plugin进行插件管理的认证/webhook 验证。match可选。exact默认或prefix。replaceExisting可选。允许同一插件替换其自己的现有路由注册。handler当路由处理了请求时返回true。注意api.registerHttpHandler(...)已过时。请使用api.registerHttpRoute(...)。插件路由必须显式声明auth。确切的path match冲突会被拒绝除非replaceExisting: true并且一个插件不能替换另一个插件的路由。具有不同auth级别的重叠路由将被拒绝。仅在相同的auth级别上保留exact/prefix的回落链。插件 SDK 导入路径在编写插件时请使用 SDK 子路径而不是单一的openclaw/plugin-sdk导入openclaw/plugin-sdk/core用于通用插件 API、提供商认证类型和共享辅助功能。openclaw/plugin-sdk/compat用于需要比core更广泛的共享运行时辅助功能的捆绑/内部插件代码。openclaw/plugin-sdk/telegram用于 Telegram 通道插件。openclaw/plugin-sdk/discord用于 Discord 通道插件。openclaw/plugin-sdk/slack用于 Slack 通道插件。openclaw/plugin-sdk/signal用于 Signal 通道插件。openclaw/plugin-sdk/imessage用于 iMessage 通道插件。openclaw/plugin-sdk/whatsapp用于 WhatsApp 通道插件。openclaw/plugin-sdk/line用于 LINE 通道插件。openclaw/plugin-sdk/msteams用于捆绑的 Microsoft Teams 插件表层。捆绑的特定于扩展的子路径也可用openclaw/plugin-sdk/acpx、openclaw/plugin-sdk/bluebubbles、openclaw/plugin-sdk/copilot-proxy、openclaw/plugin-sdk/device-pair、openclaw/plugin-sdk/diagnostics-otel、openclaw/plugin-sdk/diffs、openclaw/plugin-sdk/feishu、openclaw/plugin-sdk/google-gemini-cli-auth、openclaw/plugin-sdk/googlechat、openclaw/plugin-sdk/irc、openclaw/plugin-sdk/llm-task、openclaw/plugin-sdk/lobster、openclaw/plugin-sdk/matrix、openclaw/plugin-sdk/mattermost、openclaw/plugin-sdk/memory-core、openclaw/plugin-sdk/memory-lancedb、openclaw/plugin-sdk/minimax-portal-auth、openclaw/plugin-sdk/nextcloud-talk、openclaw/plugin-sdk/nostr、openclaw/plugin-sdk/open-prose、openclaw/plugin-sdk/phone-control、openclaw/plugin-sdk/qwen-portal-auth、openclaw/plugin-sdk/synology-chat、openclaw/plugin-sdk/talk-voice、openclaw/plugin-sdk/test-utils、openclaw/plugin-sdk/thread-ownership、openclaw/plugin-sdk/tlon、openclaw/plugin-sdk/twitch、openclaw/plugin-sdk/voice-call、openclaw/plugin-sdk/zalo和openclaw/plugin-sdk/zalouser。兼容性说明openclaw/plugin-sdk仍然支持现有的外部插件。新的和已迁移的捆绑插件应使用通道或特定于扩展的子路径对于通用表层使用core仅在需要更广泛的共享辅助功能时使用compat。只读通道检查如果您的插件注册了一个通道最好在实现resolveAccount(...)的同时实现plugin.config.inspectAccount(cfg, accountId)。为什么resolveAccount(...)是运行时路径。允许它假定凭证已完全实体化并在缺少所需密钥时快速失败。只读命令路径如openclaw status、openclaw status --all、openclaw channels status、openclaw channels resolve以及 doctor/config 修复流程不需要仅为了描述配置而去实体化运行时凭证。推荐的inspectAccount(...)行为仅返回描述性账户状态。保留enabled和configured。在相关时包含凭证来源/状态字段例如tokenSource、tokenStatusbotTokenSource、botTokenStatusappTokenSource、appTokenStatussigningSecretSource、signingSecretStatus您不需要仅为了报告只读可用性而返回原始令牌值。对于状态风格的命令返回tokenStatus: available以及匹配的来源字段就足够了。当凭证通过 SecretRef 配置但在当前命令路径中不可用时使用configured_unavailable。这使得只读命令可以报告“已配置但在该命令路径中不可用”而不是崩溃或错误地报告账户未配置。性能说明插件发现和清单元数据使用短期进程内缓存以减少突发启动/重新加载的工作量。设置OPENCLAW_DISABLE_PLUGIN_DISCOVERY_CACHE1或OPENCLAW_DISABLE_PLUGIN_MANIFEST_CACHE1以禁用这些缓存。使用OPENCLAW_PLUGIN_DISCOVERY_CACHE_MS和OPENCLAW_PLUGIN_MANIFEST_CACHE_MS调整缓存窗口。发现和优先级OpenClaw 按顺序扫描配置路径plugins.load.paths文件或目录工作区扩展workspace/.openclaw/extensions/*.tsworkspace/.openclaw/extensions/*/index.ts全局扩展~/.openclaw/extensions/*.ts~/.openclaw/extensions/*/index.ts捆绑扩展随 OpenClaw 提供默认情况下大多禁用openclaw/extensions/*大多数捆绑插件必须通过plugins.entries.id.enabled或openclaw plugins enable id显式启用。默认启用的捆绑插件例外device-pairphone-controltalk-voice活动的 memory 槽位插件默认槽位memory-core已安装的插件默认启用但可以以相同方式禁用。工作区插件默认禁用除非您显式启用它们或将它们加入允许列表。这是有意为之检出的仓库不应悄无声息地成为生产环境网关代码。加固说明如果plugins.allow为空且可发现非捆绑插件OpenClaw 会在启动时记录一个警告包含插件 ID 和来源。在发现许可之前会对候选路径进行安全检查。OpenClaw 在以下情况阻止候选插件扩展入口点解析到插件根目录之外包括符号链接/路径遍历逃逸插件根/源路径为全局可写对于非捆绑插件路径所有权可疑POSIX 所有者既不是当前 uid 也不是 root。对于没有安装/加载路径出处的已加载的非捆绑插件会发出警告以便您可以锁定信任plugins.allow或安装跟踪plugins.installs。每个插件必须在其根目录中包含一个openclaw.plugin.json文件。如果路径指向一个文件则插件根目录是该文件的目录并且必须包含清单。如果多个插件解析为相同的 ID则上述顺序中的第一个匹配项获胜较低优先级的副本将被忽略。这意味着工作区插件有意遮盖具有相同 ID 的捆绑插件。plugins.allow: [foo]通过 ID 授权活动的foo插件即使活动副本来自工作区而不是捆绑扩展根目录。如果您需要更严格的出处控制请在启用前使用显式安装/加载路径并检查已解析的插件源。启用规则启用状态在发现后解析plugins.enabled: false禁用所有插件。plugins.deny始终胜出。plugins.entries.id.enabled: false禁用该插件。工作区来源的插件默认禁用。当plugins.allow非空时允许列表限制活动集合。允许列表是基于 ID的而非基于来源。捆绑插件默认禁用除非捆绑 ID 在内置的默认启用集合中或您显式启用它或通道配置隐式启用了捆绑的通道插件。独占槽位可以强制为该槽位启用选定的插件。在当前核心中捆绑的默认启用 ID 包括本地/提供商辅助程序如ollama、sglang、vllm以及device-pair、phone-control和talk-voice。包组插件目录可以包含一个带有openclaw.extensions的package.json{name:my-pack,openclaw:{extensions:[./src/safety.ts,./src/tools.ts]}}每个入口都成为一个插件。如果包组列出了多个扩展则插件 ID 变为name/fileBase。如果您的插件导入 npm 依赖项请在该目录中安装它们以便node_modules可用npm install/pnpm install。安全护栏每个openclaw.extensions条目在符号链接解析后必须保持在插件目录内。逃逸出包目录的条目将被拒绝。安全说明openclaw plugins install使用npm install --ignore-scripts无生命周期脚本安装插件依赖项。保持插件依赖树为“纯 JS/TS”并避免需要postinstall构建的包。通道目录元数据通道插件可以通过openclaw.channel公告引导元数据并通过openclaw.install公告安装提示。这使得核心目录保持无数据状态。示例{name:openclaw/nextcloud-talk,openclaw:{extensions:[./index.ts],channel:{id:nextcloud-talk,label:Nextcloud Talk,selectionLabel:Nextcloud Talk (自托管),docsPath:/channels/nextcloud-talk,docsLabel:nextcloud-talk,blurb:通过 Nextcloud Talk webhook 机器人实现的自托管聊天。,order:65,aliases:[nc-talk,nc]},install:{npmSpec:openclaw/nextcloud-talk,localPath:extensions/nextcloud-talk,defaultChoice:npm}}}OpenClaw 也可以合并外部通道目录例如MPM 注册表导出。将 JSON 文件放置在以下位置之一~/.openclaw/mpm/plugins.json~/.openclaw/mpm/catalog.json~/.openclaw/plugins/catalog.json或者将OPENCLAW_PLUGIN_CATALOG_PATHS或OPENCLAW_MPM_CATALOG_PATHS指向一个或多个 JSON 文件以逗号/分号/PATH分隔。每个文件应包含{ entries: [ { name: scope/pkg, openclaw: { channel: {...}, install: {...} } } ] }。插件 ID默认插件 ID包组package.json的name独立文件文件基名~/.../voice-call.ts→voice-call如果插件导出了idOpenClaw 会使用它但当它与配置的 ID 不匹配时会发出警告。注册表模型加载的插件不会直接修改随机的核心全局变量。它们注册到一个中央插件注册表中。注册表跟踪插件记录身份、来源、出处、状态、诊断信息工具旧版钩子和类型化钩子通道提供商网关 RPC 处理程序HTTP 路由CLI 注册器后台服务插件拥有的命令然后核心功能从该注册表中读取而不是直接与插件模块对话。这保持了加载的单向性插件模块 - 注册表注册核心运行时 - 注册表使用这种分离对于可维护性很重要。这意味着大多数核心表层只需要一个集成点“读取注册表”而不是“为每个插件模块设置特殊情况”。配置{ plugins: { enabled: true, allow: [voice-call], deny: [untrusted-plugin], load: { paths: [~/Projects/oss/voice-call-extension] }, entries: { voice-call: { enabled: true, config: { provider: twilio } }, }, }, }字段enabled主开关默认true。allow允许列表可选。deny拒绝列表可选deny 胜出。load.paths额外的插件文件/目录。slots独占槽位选择器如memory和contextEngine。entries.id每个插件的开关 配置。配置更改需要重启网关。验证规则严格entries、allow、deny或slots中未知的插件 ID 属于错误。未知的channels.id键属于错误除非插件清单声明了该通道 ID。插件配置使用嵌入在openclaw.plugin.jsonconfigSchema中的 JSON Schema 进行验证。如果插件被禁用其配置将被保留并发出警告。禁用 vs 缺失 vs 无效这些状态是有意区分的disabled插件存在但启用规则将其关闭。missing配置引用了一个发现过程未找到的插件 ID。invalid插件存在但其配置与声明的模式不匹配。OpenClaw 为已禁用的插件保留配置因此重新启用它们不是破坏性的。插件槽位独占类别某些插件类别是独占的一次只能有一个处于活动状态。使用plugins.slots选择哪个插件拥有该槽位{ plugins: { slots: { memory: memory-core, // 或 none 以禁用 memory 插件 contextEngine: legacy, // 或插件 ID如 lossless-claw }, }, }支持的独占槽位memory活动的 memory 插件none禁用 memory 插件。contextEngine活动的上下文引擎插件legacy是内置默认值。如果多个插件声明了kind: memory或kind: context-engine则只有选定的插件会为该槽位加载。其他插件将被禁用并附带诊断信息。上下文引擎插件上下文引擎插件拥有用于摄取、组装和压缩的会话上下文编排。使用api.registerContextEngine(id, factory)从您的插件注册它们然后使用plugins.slots.contextEngine选择活动引擎。当您的插件需要替换或扩展默认上下文管道而不仅仅是添加 memory 搜索或钩子时请使用此功能。控制 UI模式 标签控制 UI 使用config.schemaJSON Schema uiHints来渲染更好的表单。OpenClaw 在运行时根据发现的插件来增强uiHints为plugins.entries.id/.enabled/.config添加每个插件的标签。合并在plugins.entries.id.config.field下可选插件提供的配置字段提示。如果您希望插件的配置字段显示良好的标签/占位符并将机密标记为敏感请在插件清单中随 JSON Schema 一起提供uiHints。示例{id:my-plugin,configSchema:{type:object,additionalProperties:false,properties:{apiKey:{type:string},region:{type:string}}},uiHints:{apiKey:{label:API 密钥,sensitive:true},region:{label:区域,placeholder:us-east-1}}}CLIopenclaw plugins list openclaw plugins infoidopenclaw pluginsinstallpath# 将本地文件/目录复制到 ~/.openclaw/extensions/idopenclaw pluginsinstall./extensions/voice-call# 相对路径可以openclaw pluginsinstall./plugin.tgz# 从本地 tarball 安装openclaw pluginsinstall./plugin.zip# 从本地 zip 安装openclaw pluginsinstall-l./extensions/voice-call# 用于开发链接不复制openclaw pluginsinstallopenclaw/voice-call# 从 npm 安装openclaw pluginsinstallopenclaw/voice-call--pin# 存储确切解析的 nameversionopenclaw plugins updateidopenclaw plugins update--allopenclaw pluginsenableidopenclaw plugins disableidopenclaw plugins doctorplugins update仅适用于在plugins.installs下跟踪的 npm 安装。如果在更新之间存储的完整性元数据发生变化OpenClaw 会警告并请求确认使用全局--yes绕过提示。插件也可以注册自己的顶级命令例如openclaw voicecall。插件 API概述插件导出以下两者之一一个函数(api) { ... }一个对象{ id, name, configSchema, register(api) { ... } }register(api)是插件附加行为的地方。常见的注册包括registerToolregisterHookon(...)用于类型化生命周期钩子registerChannelregisterProviderregisterHttpRouteregisterCommandregisterCliregisterContextEngineregisterService上下文引擎插件也可以注册一个运行时拥有的上下文管理器exportdefaultfunction(api){api.registerContextEngine(lossless-claw,()({info:{id:lossless-claw,name:Lossless Claw,ownsCompaction:true},asyncingest(){return{ingested:true};},asyncassemble({messages}){return{messages,estimatedTokens:0};},asynccompact(){return{ok:true,compacted:false};},}));}然后在配置中启用它{ plugins: { slots: { contextEngine: lossless-claw, }, }, }插件钩子插件可以在运行时注册钩子。这使得插件可以捆绑事件驱动的自动化而无需单独的钩子包安装。示例exportdefaultfunctionregister(api){api.registerHook(command:new,async(){// 钩子逻辑在此。},{name:my-plugin.command-new,description:当调用 /new 时运行,},);}注意通过api.registerHook(...)显式注册钩子。钩子资格规则仍然适用OS/bins/env/config 要求。插件管理的钩子在openclaw hooks list中显示为plugin:id。您不能通过openclaw hooks启用/禁用插件管理的钩子请改为启用/禁用插件。代理生命周期钩子 (api.on)对于类型化的运行时生命周期钩子请使用api.on(...)exportdefaultfunctionregister(api){api.on(before_prompt_build,(event,ctx){return{prependSystemContext:遵循公司风格指南。,};},{priority:10},);}用于提示构建的重要钩子before_model_resolve在会话加载之前运行messages不可用。使用此钩子确定性地覆盖modelOverride或providerOverride。before_prompt_build在会话加载之后运行messages可用。使用此钩子来塑造提示输入。before_agent_start旧版兼容性钩子。优先使用上述两个显式钩子。核心强制执行的钩子策略操作员可以通过plugins.entries.id.hooks.allowPromptInjection: false对每个插件禁用提示变异钩子。当禁用时OpenClaw 会阻止before_prompt_build并忽略从旧版before_agent_start返回的提示变异字段同时保留旧版的modelOverride和providerOverride。before_prompt_build结果字段prependContext为本次运行在用户提示前添加文本。最适合特定于轮次的或动态内容。systemPrompt完整的系统提示覆盖。prependSystemContext在当前系统提示前添加文本。appendSystemContext在当前系统提示后附加文本。嵌入式运行时中的提示构建顺序将prependContext应用于用户提示。在提供时应用systemPrompt覆盖。应用prependSystemContext 当前系统提示 appendSystemContext。合并和优先级说明钩子处理程序按优先级较高者优先运行。对于合并的上下文字段值按执行顺序连接。before_prompt_build的值在旧版before_agent_start回退值之前应用。迁移指南将静态指导从prependContext移动到prependSystemContext或appendSystemContext以便提供商可以缓存稳定的系统前缀内容。保留prependContext用于应保持与用户消息关联的每轮动态上下文。提供商插件模型认证插件可以注册模型提供商以便用户可以在 OpenClaw 内部运行 OAuth 或 API 密钥设置在引导/模型选择器中显示提供商设置并贡献隐式提供商发现。提供商插件是模型提供商设置的模块化扩展接口。它们不再仅仅是“OAuth 助手”。提供商插件生命周期提供商插件可以参与五个不同的阶段认证auth[].run(ctx)执行 OAuth、API 密钥捕获、设备代码或自定义设置并返回认证配置文件以及可选的配置补丁。非交互式设置auth[].runNonInteractive(ctx)处理openclaw onboard --non-interactive而不提示。当提供商需要超出内置简单 API 密钥路径的自定义无头设置时请使用此功能。向导集成wizard.onboarding向openclaw onboard添加一个条目。wizard.modelPicker向模型选择器添加一个设置条目。隐式发现discovery.run(ctx)可以在模型解析/列表期间自动贡献提供商配置。选择后跟进onModelSelected(ctx)在选择模型后运行。用于特定于提供商的工作例如下载本地模型。这是推荐的分割方式因为这些阶段有不同的生命周期要求认证是交互式的并写入凭证/配置。非交互式设置由标志/环境驱动并且不得提示。向导元数据是静态的面向 UI。发现应是安全、快速且容忍失败的。选择后钩子是与所选模型相关的副作用。提供商认证契约auth[].run(ctx)返回profiles要写入的认证配置文件。configPatch可选的openclaw.json更改。defaultModel可选的provider/model引用。notes可选的面向用户的说明。然后核心会写入返回的认证配置文件。应用认证配置文件配置连接。合并配置补丁。可选地应用默认模型。在适当时运行提供商的onModelSelected钩子。这意味着提供商插件拥有特定于提供商的设置逻辑而核心拥有通用的持久化和配置合并路径。提供商非交互式契约auth[].runNonInteractive(ctx)是可选的。当提供商需要的无头设置无法通过内置的通用 API 密钥流程表达时请实现它。非交互式上下文包括当前和基本配置。解析的引导 CLI 选项。运行时日志/错误辅助功能。代理/工作区目录。resolveApiKey(...)从标志、环境或现有认证配置文件中读取提供商密钥同时遵守--secret-input-mode。toApiKeyCredential(...)将已解析的密钥转换为具有正确明文与 secret

更多文章