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 }
}