API Key 配置与业务读取
已有宿主安全配置或可信运行环境注入时直接复用。首次在桌面填写或更换 Key 时使用随附统一页面,不能用“已支持环境变量”或终端隐藏输入代替页面接入。只为用户选择的外部服务配置;内置能力、离线处理和已有官方登录不要求额外 Key。
首次配置
将当前 SKILL.md 所在绝对目录记为 SKILL_DIR。页面需要 Node.js 22.18+,首次在组件目录安装锁定依赖:
npm --prefix "$SKILL_DIR/scripts/credential-ui" ci --ignore-scripts
node "$SKILL_DIR/scripts/credential-ui/src/profile.ts" status default
node "$SKILL_DIR/scripts/credential-ui/src/profile.ts" setup default先查 status:退出码 0 表示当前业务凭据可读取,2 表示缺失,1 表示配置或系统后端失败。缺失或用户要求更换时才启动 setup,把返回的本机链接展示给用户,由用户亲自填写保存。不要自动操作真实 Key 页面,不让用户贴进聊天。
页面不回填原值;已有项留空保留,替换需要用户确认。只把 saved 当作全部保存成功;partial、超时和中断后先重新查状态,再补未完成项。配置成功仅证明保存和可读取,实际 API 可用性以业务调用为准。
服务与用途绑定
| 配置名 | 业务环境变量 | 系统凭据引用 |
|---|---|---|
| default | DEEPSEEK_API_KEY |
codex-deepseek-subagent/setup/default |
default 是脚本已有默认适配器,并不授权调用收费服务。用户选另一适配器时,同时选择对应配置名与业务参数,不能只换 Key。服务真实名称、接口和数据范围见原有依赖说明;以上变量名保留程序兼容。
一个服务的图片和视频共用同一 Key,不重复创建。多个服务各用独立声明;需要同页填写时用组件的 configure-page 组合所选声明,见组件说明。不要求填写用户没有使用的服务。
运行业务
通过以下入口运行本 Skill 的真实脚本,-- 后保留原业务参数:
node "$SKILL_DIR/scripts/credential-ui/src/profile.ts" run default -- python3 "$SKILL_DIR/scripts/codex_deepseek.py" setup --model deepseek-v4-pro --api-key-env --json环境变量优先;缺失时仅从系统库读取当前配置所需的 Key,并只注入可信业务子进程。参数、普通文件和状态输出都不含 Key。使用页面保存的凭据后,后续云端业务命令同样经 run 入口执行,不能只启动配置页后直接运行一个仍仅读环境变量的程序。--help 示例只检查业务用法,不表示已调用服务。
系统后端分别为 macOS 钥匙串、Windows 凭据管理器、Linux Secret Service。Linux 需要 secret-tool、用户 D-Bus 和已解锁的桌面凭据服务;缺少后端时停止,不自动安装、解锁或降级明文。当前 macOS 组件有原生假凭据验证;Windows/Linux 适配仍需实机验收。CI、容器与远程服务器使用已有 Secret 注入,不把本机页面开放到网络。
原配置不自动迁移或删除;页面保存不代表旧明文文件已经清理。已有程序专用配置、账号或不同凭据引用按其原流程保留,不跨账号覆盖。凭据属于当前系统用户;正常流程不将其传入对话,不代表对同用户任意代码执行的强隔离。
验证
npm --prefix "$SKILL_DIR/scripts/credential-ui" run check
npm --prefix "$SKILL_DIR/scripts/credential-ui" run build
npm --prefix "$SKILL_DIR/scripts/credential-ui" test测试使用假后端覆盖正式页面、同页 HTTP 保存、业务变量读取、部分失败恢复和脱敏;不操作用户真实页面。原生测试 npm run test:native 仅创建随机测试引用并清理,不验证实际服务额度或业务效果。
运行时专用凭据
页面保存的是配置源。setup --api-key-env 只在原生运行时缺少凭据时,将包装器注入的 Key 写入原有运行时凭据记录,继续沿用原事务与回滚。页面项和运行时项是两个记录;页面保存不代表运行时已配置。已有运行时 Key 时继续复用,不自动覆盖;更换运行时 Key 需明确授权后按原卸载/重建流程处理。卸载原生配置不会自动删除页面配置源。