skill-publish-yashu

v2026.09.24

把私有技能按白名单复制到公开技能目录。激活条件:用户消息须包含以下关键词之一:`发布技能`、`把技能公开`、`复制技能到公开目录`、`发布私有技能`。

GitHub
安装命令
npx skhub add steelan9199/skill-publish-yashu
Markdown
SKILL.md

发布技能到公开目录

功能概述

本 Skill 用于把私有技能目录中的技能,按白名单规则复制一份到公开技能目录,确保只发布应当公开的文件,私密文件(license-key、备份、测试用例、临时文件等)绝不外泄。采用"白名单为主 + 每技能可覆写 + 硬黑名单兜底"三层防护机制。

适用场景:把开发完成的私有技能发布到公开技能库;私有技能更新后同步到公开技能库。每次只发布一个技能,不支持批量或全部发布。

环境说明

  • 操作系统:Windows/Linux/macOS
  • Node.js:>= 18.20.8
  • Shell:PowerShell 5 / bash / zsh
  • 本 Skill 运行命令时采用条件执行(前一条成功才执行下一条),跨平台规则如下:
    • bash/zsh:cmd1 && cmd2
    • PowerShell 5:cmd1; if ($?) { cmd2 }(PowerShell 5 不支持 &&)
    • 禁止单 &
  • $SKILL_DIR 仅为文档占位符,不是环境变量,执行命令时必须替换为本 Skill 的实际绝对路径

路径与配置

配置项位置说明
源目录(私有技能目录)$SKILL_DIR/scripts/config.json 的 sourceDir待发布的私有技能所在目录
目标目录(公开技能目录)$SKILL_DIR/scripts/config.json 的 targetDir发布目标目录
全局白名单$SKILL_DIR/scripts/config.json 的 globalWhitelist允许复制的顶层条目清单
硬黑名单$SKILL_DIR/scripts/config.json 的 hardBlacklist任意层级命中即排除的条目

AI 执行脚本前必须将 $SKILL_DIR 替换为实际绝对路径,再 cd 到 $SKILL_DIR/scripts 运行命令。配置字段详细说明见 发布流程与配置参考。

三层过滤机制

层级作用配置位置
第一层:全局白名单顶层条目必须在白名单中才复制config.json 的 globalWhitelist
第二层:每技能覆写单个技能可声明额外要包含的顶层条目技能目录下的 .publish-include 文件
第三层:硬黑名单任意层级命中即排除,防御性兜底config.json 的 hardBlacklist

判定顺序:硬黑名单 > 白名单/覆写。即先排除黑名单,再判断白名单。node_modules 在任意层级都排除(它可能出现在 scripts/ 等白名单文件夹内部,体积巨大)。

为什么用白名单:发布是安全边界,要排除的私密文件名字发散且不可预知(测试用例、备份、缓存、笔记),而要保留的结构标准化(SKILL.md、scripts、references)。白名单"默认安全",漏项表现为"少发"(很快发现且可挽回),黑名单漏项表现为"泄露"(难发现且不可挽回)。

执行步骤

步骤执行动作具体命令/操作
1确认配置读取 $SKILL_DIR/scripts/config.json,确认 sourceDir、targetDir 指向正确
2确定发布范围用户指定单个技能名 -> 发布该技能(每次只能发布一个技能,不支持 all/批量)
3执行发布运行 cd $SKILL_DIR/scripts; if ($?) { node publish.js <技能名> }
4查看报告脚本输出该技能的"已复制/已跳过"清单,检查跳过项是否有误伤的合法文件
5补救误伤若有合法文件被跳过(原因"不在白名单"),在该技能目录下创建 .publish-include 文件登记额外条目,重新发布

参数说明

node publish.js <技能名>     # 发布单个技能(每次只能发布一个)
node publish.js              # 不带参数时打印用法并列出可用技能

输出格式

脚本对每个技能输出结构化报告:

== 技能: coze-low-code-caller-yashu ==
源目录: <sourceDir>/coze-low-code-caller-yashu
目标目录: <targetDir>/coze-low-code-caller-yashu

已复制 (12):
  + SKILL.md
  + scripts/check_status.js
  + references/bot-api.md

已跳过 (5):
  - scripts-backup            [原因: 硬黑名单]
  - license-key.txt           [原因: 硬黑名单]
  - 测试用例.md               [原因: 不在白名单]
  - temp                      [原因: 不在白名单]
  - scripts/node_modules      [原因: 硬黑名单(任意层级)]

结果: 成功

.publish-include 文件格式与完整示例见 发布流程与配置参考。

全业务脚本索引清单

脚本功能
$SKILL_DIR/scripts/publish.js按白名单+硬黑名单规则把技能从源目录复制到目标目录,输出已复制/已跳过清单

跨功能公共规则

  • 执行脚本前必须 cd 到 $SKILL_DIR/scripts 目录
  • 脚本通过 console.error 输出日志
  • 目标技能目录若已存在,脚本终止发布并提示"技能文件夹已存在",需用户手动删除后才能重新发布
  • .publish-include 文件本身不会被复制到目标目录(在硬黑名单中)
  • config.json(含用户私有路径)不在全局白名单中,不会被发布;只发布 config.default.json 模板

错误处理

错误场景错误表现处理方式
config.json 不存在脚本报错找不到配置从 config.default.json 复制一份为 config.json,填写 sourceDir、targetDir
源技能不存在脚本报错找不到技能目录检查技能名拼写,不带参数运行脚本可列出可用技能
目标技能目录已存在脚本提示"技能文件夹已存在"确认是否需要覆盖;如需重新发布,请先手动删除目标目录下该技能的文件夹
目标目录不可写脚本报错权限不足检查目标目录权限,关闭占用该目录的程序
源目录等于目标目录脚本拒绝执行提示源目录不能与目标目录相同
合法文件被误跳过报告中显示"不在白名单"在该技能目录下创建 .publish-include 登记该条目,重新发布
发现
标签

此技能尚未发布标签。

版本
最新版本元数据

版本

v2026.09.24

发布时间

2026年9月24日

分类

未分类

许可证

未指定

源路径

skills/skill-publish-yashu

默认分支

main

最新提交

03b646a

Tree SHA

e79e9ee