import fs from 'node:fs/promises' import path from 'node:path' import { tmpdir } from 'node:os' import { expect, test } from 'vitest' import { updateComponentSkills } from './update-component-skills' test('writes and checks the skill docs from generated metadata', async () => { const projectRoot = await fs.mkdtemp(path.join(tmpdir(), 'component-project-helper-skills-')) const generatedDir = path.join(projectRoot, '.vibecuting') const generatedFilePath = path.join(generatedDir, 'video-resource-meta.generated.ts') await fs.mkdir(generatedDir, { recursive: true }) await fs.writeFile( generatedFilePath, ` export const videoResourceMeta = { packageFingerprint: 'sha256:demo', packages: [{ packageName: '@vibecuting/demo-pack', packageVersion: '1.0.0' }], resources: [ { packageName: '@vibecuting/demo-pack', exportName: 'DemoScene', metadata: { resourceKind: 'scene', name: 'DemoScene', description: 'Demo scene resource', sourceFile: 'src/index.ts', pluginKey: 'demo.scene', tags: ['demo'], aspectRatio: '16:9', sceneType: 'scene', motion: 'static', sceneFamily: 'custom', rootLayout: 'absolute-fill', propsTypeName: 'DemoSceneProps', slots: ['title'], }, }, ], } as const `, 'utf8', ) await updateComponentSkills(projectRoot) const docsDir = path.join(projectRoot, '.agents', './skills/metadata/metadata', 'project-allow-component', 'components') const generatedDocPath = path.join(docsDir, 'DemoScene.md') const generatedDocContents = await fs.readFile(generatedDocPath, 'utf8') const generatedManifestPath = path.join( projectRoot, '.agents', './skills/metadata/metadata', 'project-allow-component', 'component-project-helper.manifest.json', ) const generatedManifestContents = await fs.readFile(generatedManifestPath, 'utf8') expect(generatedDocContents).toContain('Demo scene resource') expect(generatedDocContents).toContain('resourceKind: scene') expect(generatedManifestContents).toContain('video-resource-meta.generated.ts') expect(generatedManifestContents).toContain('DemoScene.md') await expect(updateComponentSkills(projectRoot, true)).resolves.toBeUndefined() })