Skip to content

feat(skills): show skill version on detail page - #102

Open
TreeTreeDi wants to merge 2 commits into
DTStack:masterfrom
TreeTreeDi:feat_skill_version
Open

TreeTreeDi wants to merge 2 commits into
DTStack:masterfrom
TreeTreeDi:feat_skill_version

Conversation

@TreeTreeDi

@TreeTreeDi TreeTreeDi commented Oct 30, 2026 •

Copy link
Copy Markdown
Contributor

Closes #101

改了什么

技能详情页左侧「技能目录」标题右侧原本固定显示 - 的位置,现在显示技能版本号(如 v2.0.1),鼠标悬停提示版本来源。

版本按以下优先级取值:

  1. 技能包根目录 metadata.json 的 version
  2. SKILL.md frontmatter 的 metadata.version,其次顶层 version
  3. 以上都没有时,显示发布自增号 v{publish_revision}
  • skills_items 新增 publish_revision(INT,默认 1)。启动时 ensureStorageReady 自动补列,sql/doraemon.sql 同步更新。
  • 自增时机:Web 上传 / 覆盖 zip、编辑时重新上传 zip、CLI 发布且内容有变化,各 +1。只改元信息的编辑,以及 CLI 发布内容未变(fingerprint noop),都不加。新技能从 1 开始。
  • 展示版本在详情接口读取时计算(displayVersion / versionSource),存量技能不需要迁移数据就能显示。
  • dt-skill CLI 安装时不再跳过 metadata.json:installer.ts 的复制逻辑去掉了对它的排除(.git 等目录仍排除),copy 模式和软链失败回退时的安装副本也会保留这个文件。

位置选择:左侧栏「技能目录」右侧

  • 这个组件本来就渲染 version || -,是现有设计预留的版本位。直接填进去,不打乱布局。
  • 头部「分类 / 下载 / 最近更新」是市场统计信息,版本号和它们不同类。
  • 技能包页面不渲染左侧栏,正好对应「包本身没有单一版本」的语义。

权衡

  • 已有的 version 字段(编辑表单「版本号」、CLI --version,默认 0.0.0)不进入展示链。registry resolve / versions 依赖它,语义保持不变。
  • Web 重新上传一模一样的 zip 也会 +1:按「每次上传」计,不做内容比对。CLI 路径沿用已有的 fingerprint noop,不加。
  • 只读取技能根目录下的 metadata.json。
  • frontmatter 现有解析器不支持嵌套 map,所以加了一个只取 metadata.version / version 的小解析器,没有引入 yaml 依赖。

待确认

  1. 旧 version 字段(非默认 0.0.0 时)要不要排在自增兜底前面?编辑表单里的「版本号」输入是否还需要保留?
  2. Web 上传完全相同的 zip 是否也该跳过自增?

验证

  • 本地 dev + MySQL 上造了三个技能,详情页分别显示:metadata.json → v2.0.1(SKILL.md 里同时写了 metadata.version: 9.9.9,确认 metadata.json 优先);frontmatter → v1.2.0;无版本 → 上传、再上传、编辑重传 zip 后显示 v3。tooltip 文案也核对过。
  • 自增:Web 首传 1 → 重传 2 → 编辑重传 zip 3 → 只改元信息仍为 3。CLI 首发 1 → 同内容再发 1(noop)→ 改内容再发 2。
  • npm run lint(0 error)、npm run check-types 通过。node --test test/*.test.js:194 通过;1 个失败是 header-nav-config 的「顶栏样式覆盖更多标题」用例,在 master 上同样失败,与本改动无关。
  • 新增 test/skill-display-version.test.js。另外给两个已有测试的 mock 补了 SkillsFile.findOne / Sequelize.literal。

验收截图

本地 dev 实测,截图来自技能详情页左侧「技能目录」标题右边的版本位。

1. metadata.json 优先:显示 V2.0.1。版本取自 metadata.json;同一个包的 SKILL.md 里还写了 metadata.version: 9.9.9,没有被采用。

metadata.json 来源,显示 V2.0.1

2. SKILL.md frontmatter:显示 V1.2.0,取自 frontmatter 的 metadata.version。

frontmatter metadata.version 来源,显示 V1.2.0

3. 发布自增兜底:显示 V3。这个技能没声明版本,依次经过首次上传、重新上传、编辑时重传 zip,每次 +1,最终为 3。

自增兜底,显示 V3

4. CLI 安装保留 metadata.json:用本地构建的 dt-skill 以 copy 模式安装 ver-test-metadata-json,.claude/skills/ 下的安装副本和 .agents/skills/ 下的 canonical 目录里都有 metadata.json,内容为 version: 2.0.1。

CLI copy 模式安装后保留 metadata.json

需求外发现

  • 已处理:dt-skill CLI 安装时会排除 metadata.json(installer.ts 的 EXCLUDE_FILES),本地安装后的副本里没有这个文件。本 PR 已去掉这项排除,见验收截图 4。
  • 未修:test/header-nav-config.test.js 在 master 上就失败。

Copilot AI balanced review requested due to automatic review settings October 30, 2026 02:20

Copilot AI left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Copilot was unable to review this pull request because the user who requested the review has insufficient remaining quota.

An organization owner can choose the repository organization as the billing source for reviews requested by members with a paid Copilot license. Learn about Copilot code review billing.

@TreeTreeDi
TreeTreeDi marked this pull request as draft October 30, 2026 02:21
@TreeTreeDi
TreeTreeDi marked this pull request as ready for review October 30, 2026 02:23

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.

feat(skills): 技能详情页展示版本号(metadata.json / frontmatter / 发布自增兜底)

2 participants