payskill-publisher
将一个免费 Skill 的 zip 包自动发布为 SKILLHUB 上的 PaySkill,全流程除"定价"和"最终提交"外全部自动执行。
输入(由用户在调用时以参数或自然语言给出)
slug:必填。Skill 的唯一标识符,例如invoice-scanner-launch。name(可选):展示用中文名,例如发票连续扫码导出Excel。work_dir(可选):工作目录,默认F:\shd\SKJN\2026-09-07-09-57-24。脚本期望在<work_dir>\已改造\<slug>_*_payskill_*.zip找到改造后的 zip。version(可选,默认1.0.0)。changelog(可选,默认升级为 PaySkill,集成支付宝 AI 按量付费通道。)。
流程(已实测的 6 个阶段,停在第 6 步完成定价页之前)
- 启动 / 接管 Edge:Edge 必须以
--remote-debugging-port=9222 --user-data-dir=<work_dir>\\_edge_profile运行;脚本通过fetch('http://127.0.0.1:9222/json/list')取得唯一 page tab。 - 登录 SKILLHUB:访问
https://skillhub.cn/,若未登录(页面同时存在"登录"按钮)则点击登录并自动等待用户手机扫码(已登录则跳过此步)。 - 进入发布页:导航到
https://skillhub.cn/dashboard/publish(注意:不要去/dashboard/skills,该路径返回 404)。 - 选择 PaySkill:点击页面底部的
发布 Pay Skill(需支付改造)卡片。 - 第 1 步 改造说明:直接点击
下一步:上传 Skill。 - 第 2 步 基本信息(自动化重点):
- 通过 DataTransfer 注入上传 zip 包(详见references/cdp-quirks.md:CDP 原生DOM.setFileInputFiles对 SKILLHUB 隐藏文件输入不生效,必须用new DataTransfer()+File+files属性赋值的方式)。
- 自动填入skill-slug、skill-displayName、skill-version、skill-changelog(使用Object.getOwnPropertyDescriptor的setter.set.call触发 React 受控组件的 onChange)。
- 点击页面上的使用此描述让 SKILL.md 中的描述自动回填。
- 点击下一步:完善计费。 - 第 3 步 单次调用价格(STOP):脚本到此处停止,光标聚焦到
channel-price输入框,截图保存到<work_dir>\\_run2\FINAL_pricing.png,把控制权交给用户填价 + 点发布 Skill。
已踩的坑(详见 references/cdp-quirks.md)
DOM.setFileInputFiles对 SKILLHUB 隐藏 file input 失效 → 用 DataTransfer/File 注入。/dashboard/skills路径返回page not found→ 改用/dashboard/publish。- 受控组件需通过 prototype setter 设值才触发
onChange,普通.value =不行。 - Edge 进程在沙箱环境会被 SIGTERM → 必须用
run_in_background启动 + 自定义 profile 目录,否则配置丢失。 Page.captureScreenshot在频繁调用时偶尔挂住(>12s 超时) → 不要每步都截图,仅在 STOP 阶段截一张即可。
脚本
scripts/publish_payskill.mjs:主流程脚本,使用 Node 内置WebSocket(无需ws包)+ 内置fetch。
前置:拉起 Edge 调试模式
发布前请先在 Windows 里拉起一个带远程调试端口的 Edge:
start "" "C:\Program Files (x86)\Microsoft\Edge\Application\msedge.exe" ^
--remote-debugging-port=9222 ^
--user-data-dir="<work_dir>\_edge_profile" ^
--no-first-run --no-default-browser-check --start-maximized ^
https://skillhub.cn
或把下面内容保存为 D:\_tools\start_edge_9222.bat(放在技能包外,因为 SkillHub 不允许 .bat 在 skill zip 里):
@echo off
if not exist "%USERPROFILE%\edge_payskill_profile" mkdir "%USERPROFILE%\edge_payskill_profile"
start "" "C:\Program Files (x86)\Microsoft\Edge\Application\msedge.exe" ^
--remote-debugging-port=9222 ^
--user-data-dir="%USERPROFILE%\edge_payskill_profile" ^
--no-first-run --no-default-browser-check --start-maximized ^
https://skillhub.cn
确认 9222 端口已监听再运行发布脚本:netstat -ano | findstr ":9222"。详见 references/cdp-quirks.md。
调用示例
# 全自动发 invoice-scanner-launch
node "C:\Users\admin\.workbuddy\skills\payskill-publisher\scripts\publish_payskill.mjs" \
--slug "invoice-scanner-launch" \
--name "发票连续扫码导出Excel" \
--work-dir "F:\shd\SKJN\2026-09-07-09-57-24"
输出
- 截图:
<work_dir>\_run2\FINAL_pricing.png(STOP 时拍照) - 过程日志:
<work_dir>\_run2\publish_log.txt - 用户继续在 Edge 当前页面填价 + 点发布。
后续动作(如需下架原免费版)
可调用同一脚本传 --skip-publish 或单独 scripts/takedown_skill.mjs(尚未实现,可作为下个迭代加进来)。
支付宝付费改造契约(PAYSKILL)
本技能为付费技能(PAYSKILL)。调用遵循支付宝 AI 生意画像契约,由平台调度层执行 probe → pay → complete → ack 流程:
- probe(探测):平台调用前先探测是否已持有本技能的支付宝有效订阅 / 付费凭证。已付费则直接放行。
- 402 Payment-Needed:未付费时,脚本向标准输出返回 HTTP 状态
402与Payment-Needed标记,提示用户通过支付宝完成付费(pay),平台据此唤起付费页。 - complete(扣费确认):用户在支付宝完成扣费后,平台下发
Payment-Proof(付费凭证)。 - ack(验签放行):平台携带
Payment-Proof重试本次调用;scripts/payment_gate.py验签该凭证,确认有效后放行主流程。
订阅持久化与幂等:
- 付费状态缓存在本地
.pay_cache/state.json,避免每次调用重复付费(订阅持久化)。 - 同一
Payment-Proof在 24h 幂等窗口内仅生效一次,避免重复扣费。
现金流改造后的调用套路:
用户调用 → 平台 probe →
未付费:下发 402 Payment-Needed → 支付宝 pay → complete → 下发 Payment-Proof
已付费/携带 Proof:脚本 ack 验签 → 放行主流程
> 本契约由 SkillHUB 平台调度层解析,脚本本地仅处理 402 / 验签 / 持久化 三环节;付费本体交给支付宝。