skill-files.js 984 Bytes
/**
 * 公开说明文件:`/skill.md`、`/heartbeat.md` 以仓库内文件为准,启动时读入并算 sha256;
 * `/skill.json` 给出版本号与各文件哈希。版本号取自 skill.md 的 frontmatter,与 `/home.skill_version` 同源。
 */
import { createHash } from 'node:crypto'
import { readFileSync } from 'node:fs'

const FILES = Object.freeze(['skill.md', 'heartbeat.md'])

/**
 * @returns {{ version: string, files: Record<string, { body: string, sha256: string }> }}
 */
export function loadSkillFiles() {
  const files = Object.fromEntries(FILES.map((name) => {
    const body = readFileSync(new URL(`../../public/${name}`, import.meta.url), 'utf8')
    return [name, { body, sha256: createHash('sha256').update(body).digest('hex') }]
  }))
  const version = /^version: (\d+\.\d+\.\d+)$/m.exec(files['skill.md'].body)
  if (version === null) throw new Error('public/skill.md: frontmatter must contain "version: x.y.z"')
  return { version: version[1], files }
}