@thugdacake/operante
Version:
Cérebro Operante — o núcleo IA que invade e domina assistentes, criando uma mente única com Thug Developer
140 lines (109 loc) • 3.22 kB
JavaScript
const fs = require('fs');
const path = require('path');
const chalk = require('chalk');
class DocCreator {
constructor(outputDir = './docs') {
this.outputDir = outputDir;
this.templates = {
prd: this.prdTemplate,
architecture: this.architectureTemplate,
code: this.codeTemplate
};
}
/**
* Cria um novo documento baseado no template especificado
*/
async createDocument(type, data) {
console.log(chalk.cyan(`\n[📝] Criando documento do tipo: ${type}`));
if (!this.templates[type]) {
throw new Error(`Template não encontrado: ${type}`);
}
const content = await this.templates[type](data);
const filename = this.generateFilename(type, data);
const filepath = path.join(this.outputDir, filename);
// Garante que o diretório existe
if (!fs.existsSync(this.outputDir)) {
fs.mkdirSync(this.outputDir, { recursive: true });
}
// Salva o arquivo
fs.writeFileSync(filepath, content);
console.log(chalk.green(`[✅] Documento criado: ${filepath}`));
return filepath;
}
/**
* Template para PRD (Product Requirements Document)
*/
async prdTemplate(data) {
return `# ${data.title}
## Visão Geral
${data.overview}
## Objetivos
${data.objectives.map(obj => `- ${obj}`).join('\n')}
## Requisitos Funcionais
${data.functionalRequirements.map(req => `- ${req}`).join('\n')}
## Requisitos Não-Funcionais
${data.nonFunctionalRequirements.map(req => `- ${req}`).join('\n')}
## Métricas de Sucesso
${data.successMetrics.map(metric => `- ${metric}`).join('\n')}
## Cronograma
${data.timeline.map(phase => `- ${phase}`).join('\n')}
## Riscos
${data.risks.map(risk => `- ${risk}`).join('\n')}
`;
}
/**
* Template para Documentação de Arquitetura
*/
async architectureTemplate(data) {
return `# Arquitetura: ${data.title}
## Visão Geral
${data.overview}
## Componentes
${data.components.map(comp => `### ${comp.name}
${comp.description}
`).join('\n')}
## Fluxo de Dados
${data.dataFlow}
## Decisões Técnicas
${data.technicalDecisions.map(decision => `- ${decision}`).join('\n')}
## Considerações de Escalabilidade
${data.scalabilityConsiderations}
## Segurança
${data.securityConsiderations}
`;
}
/**
* Template para Documentação de Código
*/
async codeTemplate(data) {
return `# ${data.title}
## Descrição
${data.description}
## Uso
\`\`\`${data.language}
${data.usage}
\`\`\`
## Parâmetros
${data.parameters.map(param => `- \`${param.name}\`: ${param.description}`).join('\n')}
## Retorno
${data.returnValue}
## Exemplos
${data.examples.map(example => `### ${example.title}
\`\`\`${data.language}
${example.code}
\`\`\`
`).join('\n')}
## Notas
${data.notes}
`;
}
/**
* Gera um nome de arquivo baseado no tipo e dados
*/
generateFilename(type, data) {
const timestamp = new Date().toISOString().split('T')[0];
const sanitizedTitle = data.title.toLowerCase().replace(/[^a-z0-9]+/g, '-');
return `${type}-${sanitizedTitle}-${timestamp}.md`;
}
}
module.exports = DocCreator;