Skip to content

feat(shared): add wechat-article-fetch skill package - #43

Draft
2217173240 wants to merge 1 commit into
freestylefly:mainfrom
2217173240:feat/skill-wechat-article-fetch
Draft

2217173240 wants to merge 1 commit into
freestylefly:mainfrom
2217173240:feat/skill-wechat-article-fetch

Conversation

@2217173240

Copy link
Copy Markdown

这个 PR 做什么

新增一个官方技能包 wechat-article-fetch(公众号正文抓取):拿 mp.weixin.qq.com 链接把正文、图片和元信息抓下来,整理成 Markdown。

为什么

wechat-article-extract 的契约是只整理聊天记录里已经存在的内容——链接对应的正文不在附件里时,它按约定标注「仅有链接,无法读取正文」,这是对的,不该改。但这也意味着「聊天记录里只有链接」这个最常见的形态,目前没有任何技能能把正文补上。

顺带一个观察,供维护者判断:USAGE.zh-CN.md:66 / USAGE_EN.md:65 现在写的是「带上『公众号文章提取』技能,Agent 会先抓取正文再输出摘要」——本 PR 让这句话在「只有链接」的场景下真的能成立。要不要顺手改这两行文档,听你的;本 PR 保持单一主题,没有动文档。

改动

文件 说明
shared/Skills/wechat-article-fetch/SKILL.md 新增。按现有两个官方包的体例写「输入 / 步骤 / 输出 / 注意」,含缺少 Node 时的降级写法
shared/Skills/wechat-article-fetch/scripts/wechat-article.ts 新增,vendored 副本
shared/Skills/wechat-article-fetch/scripts/README.md 新增,记录上游来源、许可证、文件摘要和同步方式
shared/Skills/catalog.json 新增 wechat-article-fetch@1.0.0
shared/Skills/README.md 「两个官方包」→「三个」;补充 scripts/ 的运行时前提
macos/Tests/WeChatBridgeCoreTests/SkillTests.swift 新增 testSyncCopiesNestedPackageFilesAndKeepsTheDigestStable

这也是 shared/Skills 里第一个带 scripts/ 的包,所以顺手把这条路径用测试固定下来:syncOfficial 必须整树复制(SkillPackage.packageDigest 覆盖每个文件,只复制 SKILL.md 会让状态变成 conflict 而不是 ready),改动脚本要被判为外部修改、不静默覆盖。

关于运行时依赖(请重点看这条)

脚本来自 https://github.com/2217173240/wechat-article-scraping-skill(MIT,同一作者),单文件、零 npm 依赖、不需要浏览器,但需要目标机器上有 Node ≥ 22.18(靠 Node 原生 type stripping 直接运行 .ts)。

shared/Skills/README.md 写明「不会自动安装 Homebrew、pip 等外部依赖」,所以 SKILL.md 里没有让它去装任何东西:

  • 第一步就是 node --version 探测;
  • 缺 Node 或版本过低时走「降级」小节:照旧输出「仅有链接,未含正文」,不编造正文,也不让整条流程失败;
  • 明确禁止让 Agent 去安装 Node / Homebrew / npm 包。

如果你的判断是「官方包不应该要求目标机器上有额外运行时」,这个 PR 可以改成只作为用户 ZIP 导入的技能、不进 catalog.json——我按这个方向改。

验证

本地已经做过的:

  • bash macos/Scripts/check-release-config.sh → 通过(它用 json.tool 校验 catalog.json,并检查每个 package 目录都有非空 SKILL.md、shared/Skills 无符号链接);
  • 技能 ID 合规:wechat-article-fetch 满足 ^[a-z0-9]+(-[a-z0-9]+)*$,且目录名 / frontmatter name / catalog.json 的 id 三处一致;
  • 脚本在新位置实跑:node shared/Skills/wechat-article-fetch/scripts/wechat-article.ts --help 退出码 0;对无效链接返回「链接参数错误或已失效」、退出码 1,与 SKILL.md 里写的退出码约定一致;
  • 打包路径确认不需要改构建:macOS 侧 make-app.sh 用 ditto "$SHARED/Skills" 整目录复制,Windows 侧 .csproj 用 shared\Skills\** + %(RecursiveDir) 链接,新包的 scripts/ 会自动跟着走。

没能本地跑到的:swift test。开发机只装了 Command Line Tools、没有 Xcode,XCTest 模块不可用(no such module 'XCTest'),所以新增的那条测试我这边跑不起来。我做到的是:语法解析通过(swiftc -frontend -parse),并逐个核对了用到的 API 签名和同文件里相邻测试的写法。如果 CI 挂了,我立刻修。

Checklist

  • 技能 ID 符合 Agent Skills 命名规范,且与目录名、SKILL.md 的 name、catalog.json 的 id 一致
  • 新增包目录含非空 SKILL.md
  • 未引入符号链接
  • 未改动现有两个官方包的行为
  • 补充了带 scripts/ 的包的回归测试
  • 是否补充 USAGE / PRODUCT_CAPABILITIES 文档,按维护者意见决定

聊天记录里常常只有 mp.weixin.qq.com 链接而没有正文,现有的
wechat-article-extract 只能整理附件里已有的内容,明确标注「仅有链接,
未含正文」。新技能补上另一半:用链接抓正文。

- SKILL.md:按官方包体例写输入/步骤/输出/注意;含缺少 Node 时的降级
  写法,缺运行时不编造正文,也不让整条流程失败
- scripts/wechat-article.ts:上游 MIT 项目的原样副本(单文件、零依赖、
  无需浏览器),随包分发,新的 scripts/README.md 记录来源与同步方式
- catalog.json:新增 wechat-article-fetch@1.0.0
- shared/Skills/README.md:改为三个官方包,说明 scripts/ 的运行时前提
- SkillStore 测试:覆盖带 scripts/ 的包 sync 时整树复制、摘要保持一致,
  以及改动脚本会被判为 conflict 而不是静默更新

This branch has not been deployed

No deployments
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant