Files
workbuddy_skills/oil-motion/references/api-key-setup.md
T
admin 237a09a5b0 修:draw-ui / oil-motion 原被当子模块指针收录 ⇒ 改为正常文件入库(两份内容原先对别人是空的)
一、问题(本轮实测)
`draw-ui` 与 `oil-motion` 目录里**各自带一个内嵌 `.git`** ⇒ 上一次提交把它们记成了 **gitlink(子模块指针)**
⇒ 仓库里只存了一个不属于任何远端的 commit id,**别人克隆下来这两份是空的** ✗(`git status` 显示 ` m draw-ui` / ` m oil-motion` = 子模块内容有改动)。

二、处置(可回退)
· 把两处的 `.git` **挪走**(⛔ 不是删除)⇒ `归档/内嵌git-20261008/{draw-ui,oil-motion}.git`;
· `git rm --cached` 掉那两个 gitlink,再 `git add` 两个目录 ⇒ **按正常文件入库**(内容才真的进仓库)。

三、副作用(如实记)
挪走 `.git` 后,这两个技能**不能再原地 `git pull` 取上游更新**(要更新得重新拉一份覆盖);
如需恢复其本地仓库,把 `归档/内嵌git-20261008/` 里的 `.git` 挪回原处即可。
2026-10-08 22:29:52 +08:00

3.7 KiB

API Key 配置与业务读取

生成关键帧和视频需要 ZenMux 的 API Key;处理已有素材不需要。运行环境已经可信地注入了 ZENMUX_API_KEY(例如 CI 或宿主的密钥配置)时直接复用。本机第一次填写或更换 Key 时,使用随附的本机配置页,不让用户把 Key 贴进聊天,也不改用终端输入。

首次配置

页面需要 Node.js 22.18+。第一次使用时在组件目录安装锁定依赖,然后查状态:

npm --prefix "$OIL_MOTION/scripts/credential-ui" ci --ignore-scripts
node "$OIL_MOTION/scripts/credential-ui/src/profile.ts" status default
node "$OIL_MOTION/scripts/credential-ui/src/profile.ts" setup default

status 的退出码:0 表示可以读取,2 表示还没配置,1 表示配置或系统凭据服务出错。只有缺失或用户要求更换时才运行 setup,把返回的本机链接交给用户亲自填写。不要自动操作真实的 Key 页面,也不截图。

页面不会回填已保存的值:已有项留空表示保留,替换前需要用户确认。只有返回 saved 才算全部保存成功;遇到 partial、超时或中断,先重新查状态,再补填未完成的项。保存成功只说明 Key 已存好、能读到,Key 是否有效以第一次生成调用的结果为准。

服务与用途绑定

配置名 业务环境变量 系统凭据引用
default ZENMUX_API_KEY oil-motion/zenmux/default

图片和视频共用这一个 Key。配置好 Key 不代表可以随意调用收费接口:每次生成仍按主流程先做 Pilot,批量生成前让用户确认。

以后接入其他服务时,每个服务各写一份独立声明;需要在同一页填写时,用组件的 configure-page 组合,见组件说明。不要求用户填写用不到的服务。

运行业务

image_job.py 与 video_job.py 都通过 profile.ts run default -- 运行,-- 后面照原样写业务参数。完整命令只维护在提示词与提交,不要在别处复制,也不要省略 Pilot、production 等必要参数。

环境变量优先;没有时,run 入口只从系统凭据库读取这个配置需要的 Key,并只注入给它启动的业务进程。命令参数、普通文件和状态输出里都不会出现 Key。页面保存的 Key 只能经 run 入口读到:直接运行生成脚本会报“读取不到 ZenMux API Key”,这时改用 run 入口,不要让用户重新填写。

平台与安全边界

系统凭据库分别是 macOS 钥匙串、Windows 凭据管理器和 Linux Secret Service。Linux 还需要 secret-tool、用户 D-Bus 和已解锁的桌面凭据服务。缺少后端时直接停止,不自动安装、解锁,也不改存明文。目前只在 macOS 上做过原生验证,Windows 和 Linux 还需要实机验收。CI、容器和远程服务器使用已有的密钥注入,不要把本机配置页开放到网络上。

旧版 ~/.config/oil-motion/config.json 里的明文 Key 仍能被脚本读到,但不会被自动迁移或删除;用户在页面重新保存后,可以自己删掉旧文件。Key 属于当前系统用户,正常流程不会让它进入对话,但这不等于能防住同一用户下运行的任意程序。

验证

修改凭据组件后运行:

npm --prefix "$OIL_MOTION/scripts/credential-ui" run check
npm --prefix "$OIL_MOTION/scripts/credential-ui" run build
npm --prefix "$OIL_MOTION/scripts/credential-ui" test

测试用假后端覆盖页面、同页保存、业务变量读取、部分失败恢复和脱敏,不操作用户真实的 Key。原生测试 npm run test:native 只创建随机的测试条目并在结束后清理,不验证服务额度或生成效果。