scripts/seed-skills.ts

scripts/seed-skills.ts

基本信息

  • 类型: 数据导入脚本 / CLI 工具
  • 路径: ./scripts/seed-skills.ts

功能描述

从 Anthropic Skills 仓库导入 Skill 文件到数据库的脚本。将多文件 Skill 打包为单条 Prompt 记录,支持增量更新。

导出内容

  • 无(CLI 脚本,直接执行)

依赖导入

  • @prisma/client - 数据库 ORM
  • fs - 文件系统操作
  • path - 路径处理

前置要求

# 克隆 Anthropic Skills 仓库
git clone https://github.com/anthropics/skills.git /tmp/anthropic-skills

使用方法

# 查看帮助和可用 Skills
npx tsx scripts/seed-skills.ts

# 导入指定 Skill
npx tsx scripts/seed-skills.ts pdf

# 导入所有 Skills
npx tsx scripts/seed-skills.ts --all

# 列出可用 Skills
npx tsx scripts/seed-skills.ts --list

核心功能

Skill 文件格式

  • SKILL.md: 主文件,包含 YAML Frontmatter
  • 其他文件: 支持任意代码、文档文件

多文件序列化

使用 ASCII 控制字符作为分隔符:

  • \x1F (Unit Separator): 文件开始标记
  • \x1E (Record Separator): 文件结束标记

格式:

[SKILL.md 内容]
\x1FFILE:filename.ts\x1E
[filename.ts 内容]
...

YAML Frontmatter 解析

---
name: Skill 名称
description: Skill 描述
license: MIT
---

核心函数

parseFrontmatter()

解析 SKILL.md 的 YAML 前置元数据。

readSkillFiles()

递归读取 Skill 目录下的所有文件(跳过二进制和隐藏文件)。

serializeSkillFiles()

将多文件打包为单字符串格式。

importSkill()

导入/更新单个 Skill:

  1. 读取并解析文件
  2. 检查数据库中是否已存在
  3. 存在则更新,不存在则创建
  4. 输出操作结果

数据库操作

作者处理

  • 优先使用 ADMIN 角色用户
  • 无管理员时自动创建 system 用户

Prompt 记录

字段
titlemetadata.name
descriptionmetadata.description
content序列化后的多文件内容
type"SKILL"
authorId管理员用户 ID
isPrivatefalse

错误处理

  • Skills 仓库不存在:提示克隆命令
  • Skill 不存在:列出可用选项
  • 导入失败:记录错误继续处理其他

相关文件

  • /tmp/anthropic-skills/skills/ - Skills 仓库本地路径
  • 数据库 Prompt 表(type = SKILL)
← 返回目录