1import * as Fs from "node:fs"
2import * as Glob from "glob"
3import * as Path from "node:path"
4
5const source = "LLMS.md"
6const aiDocsSource = "ai-docs"
7const packageFiles = ["AGENTS.md", "CLAUDE.md", "ai-docs/**/*"]
8
9const includeAiDocs = (source) => {
10 const [root] = Path.relative(aiDocsSource, source).split(Path.sep)
11 return root !== "dist" && root !== "node_modules"
12}
13
14for (const packageJsonPath of Glob.globSync("packages/{*,*/*}/package.json")) {
15 const packageJson = JSON.parse(Fs.readFileSync(packageJsonPath, "utf8"))
16 if (packageJson.private) {
17 continue
18 }
19
20 const packageDirectory = Path.dirname(packageJsonPath)
21 for (const file of packageFiles) {
22 if (!packageJson.files?.includes(file)) {
23 throw new Error(`${packageJsonPath} must include ${file} in its files list`)
24 }
25 }
26
27 Fs.copyFileSync(source, Path.join(packageDirectory, "AGENTS.md"))
28 Fs.copyFileSync(source, Path.join(packageDirectory, "CLAUDE.md"))
29
30 const aiDocsTarget = Path.join(packageDirectory, aiDocsSource)
31 Fs.rmSync(aiDocsTarget, { recursive: true, force: true })
32 Fs.cpSync(aiDocsSource, aiDocsTarget, { recursive: true, filter: includeAiDocs })
33}