UNPKG

@sprucelabs/spruce-cli

Version:

Command line interface for building Spruce skills.

72 lines (64 loc) 2.43 kB
import { diskUtil } from '@sprucelabs/spruce-skill-utils' import { DirectoryTemplateCode } from '@sprucelabs/spruce-templates' import { GeneratedFile } from '../../../types/cli.types' import AbstractWriter, { WriteDirectoryTemplateOptions, WriteResults, } from '../../../writers/AbstractWriter' export const NODE_FILES_TO_UPGRADE = [ 'tsconfig.json', 'eslint.config.mjs', '.gitignore', '.nvmrc', ] export default class NodeWriter extends AbstractWriter { public async writeNodeModule( destinationDir: string, options?: Partial<WriteDirectoryTemplateOptions> & { shouldWriteIndex?: boolean } ): Promise<WriteResults> { let files: GeneratedFile[] = [] if (options?.shouldWriteIndex !== false) { const contents = '//exports go here\n' const destination = diskUtil.resolvePath( destinationDir, 'src', 'index.ts' ) diskUtil.writeFile(destination, contents) files.push({ name: 'src/index.ts', description: 'Placeholder entry file!', action: 'generated', path: destination, }) } const directoryTemplateFiles = await this.writeDirectoryTemplate({ destinationDir, code: DirectoryTemplateCode.Skill, filesToWrite: NODE_FILES_TO_UPGRADE, context: { name: 'ignored', description: 'ignored' }, ...options, }) return [...files, ...directoryTemplateFiles] } public async writeAiDevelopmentFiles(destinationDir: string) { const claude = await this.writeFileIfChangedMixinResults( diskUtil.resolvePath(destinationDir, 'CLAUDE.md'), this.templates.claudeMd(), 'Claude AI assistant configuration' ) const agents = await this.writeFileIfChangedMixinResults( diskUtil.resolvePath(destinationDir, 'AGENTS.md'), this.templates.agentsMd(), 'AI agents documentation' ) const project = await this.writeFileIfChangedMixinResults( diskUtil.resolvePath(destinationDir, 'docs', 'PROJECT.md'), this.templates.projectMd(), 'Project documentation for AI-assisted development' ) return [...claude, ...agents, ...project] } }