UNPKG

@godrix/flow

Version:

Context-Driven Development CLI: Create structured task contexts with AI-optimized templates for efficient software development workflow

1,333 lines (1,236 loc) 131 kB
#!/usr/bin/env node import { Server } from '@modelcontextprotocol/sdk/server/index.js'; import { StdioServerTransport } from '@modelcontextprotocol/sdk/server/stdio.js'; import { CallToolRequestSchema, ListToolsRequestSchema, } from '@modelcontextprotocol/sdk/types.js'; import { createTaskContext } from './services/taskService.js'; import fs from 'fs-extra'; import path from 'path'; const server = new Server({ name: 'flow-mcp-server', version: '1.10.0', }, { capabilities: { tools: {}, }, }); // Define available tools const tools = [ { name: 'create_task', description: 'Create a new task with structured templates and auto-generated content', inputSchema: { type: 'object', properties: { taskName: { type: 'string', description: 'Name of the task (e.g., task-1234, FEATURE_AUTH)', }, taskType: { type: 'string', enum: ['feature', 'bug', 'improvement', 'research'], description: 'Type of task to create', default: 'feature', }, workingDirectory: { type: 'string', description: 'Working directory where the task should be created (defaults to current directory)', }, description: { type: 'string', description: 'Description of the task for auto-generating content', }, autoGenerate: { type: 'boolean', description: 'Whether to auto-generate BUSINESS_CONTEXT.md and APPROACH.md content (default: true)', }, }, required: ['taskName'], }, }, { name: 'list_tasks', description: 'List all existing tasks in the current project', inputSchema: { type: 'object', properties: { workingDirectory: { type: 'string', description: 'Working directory to list tasks from (defaults to current directory)', }, }, }, }, { name: 'validate_task', description: 'Validate the structure of a specific task', inputSchema: { type: 'object', properties: { taskName: { type: 'string', description: 'Name of the task to validate', }, workingDirectory: { type: 'string', description: 'Working directory to validate task from (defaults to current directory)', }, }, required: ['taskName'], }, }, { name: 'get_task_info', description: 'Get detailed information about a specific task', inputSchema: { type: 'object', properties: { taskName: { type: 'string', description: 'Name of the task to get information about', }, workingDirectory: { type: 'string', description: 'Working directory to get task info from (defaults to current directory)', }, }, required: ['taskName'], }, }, { name: 'get_project_status', description: 'Get overall project status and statistics', inputSchema: { type: 'object', properties: { workingDirectory: { type: 'string', description: 'Working directory to get project status from (defaults to current directory)', }, }, }, }, { name: 'generate_business_context', description: 'Generate BUSINESS_CONTEXT.md content based on task description', inputSchema: { type: 'object', properties: { taskName: { type: 'string', description: 'Name of the task', }, description: { type: 'string', description: 'Detailed description of what needs to be implemented', }, // Tag-specific parameters context: { type: 'string', description: 'Context description to fill the <context> tag', }, businessValue: { type: 'string', description: 'Business value to fill the <business_value> tag', }, validationRules: { type: 'string', description: 'Validation rules to fill the <validation_rules> tag', }, businessLogic: { type: 'string', description: 'Business logic to fill the <business_logic> tag', }, dataConstraints: { type: 'string', description: 'Data constraints to fill the <data_constraints> tag', }, positiveScenario: { type: 'string', description: 'Positive scenario to fill the <positive_scenario> tag', }, negativeScenario: { type: 'string', description: 'Negative scenario to fill the <negative_scenario> tag', }, edgeCaseScenario: { type: 'string', description: 'Edge case scenario to fill the <edge_case_scenario> tag', }, functionalCriteria: { type: 'string', description: 'Functional criteria to fill the <functional_criteria> tag', }, nonFunctionalCriteria: { type: 'string', description: 'Non-functional criteria to fill the <non_functional_criteria> tag', }, apiEndpoints: { type: 'string', description: 'API endpoints to fill the <api_endpoints> tag', }, externalServices: { type: 'string', description: 'External services to fill the <external_services> tag', }, loggingRequirements: { type: 'string', description: 'Logging requirements to fill the <logging_requirements> tag', }, analyticsRequirements: { type: 'string', description: 'Analytics requirements to fill the <analytics_requirements> tag', }, // Generic parameters priority: { type: 'string', description: 'Task priority', }, estimate: { type: 'string', description: 'Task estimate', }, stakeholder: { type: 'string', description: 'Task stakeholder', }, deadline: { type: 'string', description: 'Task deadline', }, responsible: { type: 'string', description: 'Task responsible', }, taskType: { type: 'string', enum: ['feature', 'bug', 'improvement', 'research'], description: 'Type of task', default: 'feature', }, }, required: ['taskName', 'description'], }, }, { name: 'generate_approach', description: 'Generate APPROACH.md content based on business context and codebase analysis', inputSchema: { type: 'object', properties: { taskName: { type: 'string', description: 'Name of the task', }, businessContext: { type: 'string', description: 'Business context content to base the approach on', }, techStack: { type: 'array', items: { type: 'string' }, description: 'Technologies used in the project', }, architecture: { type: 'string', description: 'Current architecture description', }, }, required: ['taskName', 'businessContext'], }, }, { name: 'generate_completion_report', description: 'Generate COMPLETION_REPORT.md content based on work done', inputSchema: { type: 'object', properties: { taskName: { type: 'string', description: 'Name of the task', }, workDone: { type: 'array', items: { type: 'string' }, description: 'List of work items completed', }, issuesFound: { type: 'array', items: { type: 'string' }, description: 'Issues or bugs found during implementation', }, deviations: { type: 'array', items: { type: 'string' }, description: 'Deviations from original plan', }, metrics: { type: 'object', properties: { duration: { type: 'string' }, filesChanged: { type: 'number' }, linesAdded: { type: 'number' }, linesRemoved: { type: 'number' }, testCoverage: { type: 'number' }, }, description: 'Implementation metrics', }, }, required: ['taskName', 'workDone'], }, }, { name: 'analyze_codebase', description: 'Analyze the current codebase to understand structure and dependencies', inputSchema: { type: 'object', properties: { path: { type: 'string', description: 'Path to analyze (defaults to current directory)', default: '.', }, includePatterns: { type: 'array', items: { type: 'string' }, description: 'File patterns to include in analysis', default: ['**/*.ts', '**/*.js', '**/*.tsx', '**/*.jsx', '**/*.py', '**/*.java', '**/*.go'], }, excludePatterns: { type: 'array', items: { type: 'string' }, description: 'File patterns to exclude from analysis', default: ['node_modules/**', 'dist/**', 'build/**', '.git/**'], }, workingDirectory: { type: 'string', description: 'Working directory to analyze from (defaults to current directory)', }, }, }, }, { name: 'update_project_context', description: 'Update PROJECT_CONTEXT.md with new information or create it if it does not exist', inputSchema: { type: 'object', properties: { mission: { type: 'string', description: 'Updated mission statement', }, goals: { type: 'array', items: { type: 'string' }, description: 'Updated long-term goals', }, techStack: { type: 'array', items: { type: 'object', properties: { category: { type: 'string' }, technology: { type: 'string' }, version: { type: 'string' }, justification: { type: 'string' } }, required: ['category', 'technology'] }, description: 'Updated technology stack', }, architecture: { type: 'object', properties: { principles: { type: 'array', items: { type: 'string' } }, patterns: { type: 'object' }, guidelines: { type: 'array', items: { type: 'string' } } }, description: 'Updated architectural principles and patterns', }, standards: { type: 'object', properties: { coding: { type: 'array', items: { type: 'string' } }, quality: { type: 'array', items: { type: 'string' } }, git: { type: 'array', items: { type: 'string' } } }, description: 'Updated development standards', }, tools: { type: 'object', properties: { development: { type: 'array', items: { type: 'string' } }, monitoring: { type: 'array', items: { type: 'string' } }, ci_cd: { type: 'array', items: { type: 'string' } } }, description: 'Updated tools and configurations', }, metrics: { type: 'object', properties: { technical: { type: 'object' }, business: { type: 'object' } }, description: 'Updated success metrics', }, notes: { type: 'string', description: 'Additional notes or context about the project', }, workingDirectory: { type: 'string', description: 'Working directory to update project context in (defaults to current directory)', }, }, }, }, { name: 'add_tech_instruction', description: 'Add custom technical instruction to AGENTS.md development section', inputSchema: { type: 'object', properties: { instruction: { type: 'string', description: 'Technical instruction to add (e.g., specific commands, tools, or practices)', }, section: { type: 'string', description: 'Section to add instruction to: development, pr, or both (default: development)', enum: ['development', 'pr', 'both'], }, workingDirectory: { type: 'string', description: 'Working directory containing AGENTS.md (defaults to current directory)', }, }, required: ['instruction'], }, }, { name: 'update_agents_template', description: 'Intelligently update AGENTS.md template while preserving user customizations', inputSchema: { type: 'object', properties: { workingDirectory: { type: 'string', description: 'Working directory where the AGENTS.md file is located', }, forceUpdate: { type: 'boolean', description: 'Force update even if no version changes detected (default: false)', default: false, }, preserveCustomizations: { type: 'boolean', description: 'Preserve user customizations in development and PR sections (default: true)', default: true, }, backupOriginal: { type: 'boolean', description: 'Create backup of original file before updating (default: true)', default: true, }, }, }, }, { name: 'check_agents_update', description: 'Check if AGENTS.md template has updates available without applying them', inputSchema: { type: 'object', properties: { workingDirectory: { type: 'string', description: 'Working directory where the AGENTS.md file is located', }, showDetails: { type: 'boolean', description: 'Show detailed comparison between current and template versions (default: false)', default: false, }, }, }, }, { name: 'init_flow_project', description: 'Initialize a new Flow project with .flow directory, PROJECT_CONTEXT.md, and AGENTS.md', inputSchema: { type: 'object', properties: { projectName: { type: 'string', description: 'Name of the project', }, mission: { type: 'string', description: 'Project mission statement', }, goals: { type: 'array', items: { type: 'string' }, description: 'Long-term project goals', }, techStack: { type: 'array', items: { type: 'object', properties: { category: { type: 'string' }, technology: { type: 'string' }, version: { type: 'string' }, justification: { type: 'string' } }, required: ['category', 'technology'] }, description: 'Technology stack for the project', }, architecture: { type: 'object', properties: { principles: { type: 'array', items: { type: 'string' } }, patterns: { type: 'object' }, guidelines: { type: 'array', items: { type: 'string' } } }, description: 'Architectural principles and patterns', }, standards: { type: 'object', properties: { coding: { type: 'array', items: { type: 'string' } }, quality: { type: 'array', items: { type: 'string' } }, git: { type: 'array', items: { type: 'string' } } }, description: 'Development standards', }, tools: { type: 'object', properties: { development: { type: 'array', items: { type: 'string' } }, monitoring: { type: 'array', items: { type: 'string' } }, ci_cd: { type: 'array', items: { type: 'string' } } }, description: 'Tools and configurations', }, metrics: { type: 'object', properties: { technical: { type: 'object' }, business: { type: 'object' } }, description: 'Success metrics', }, notes: { type: 'string', description: 'Additional project notes', }, workingDirectory: { type: 'string', description: 'Working directory where the project should be initialized (defaults to current directory)', }, agentsScoped: { type: 'boolean', description: 'If true, creates AGENTS.md inside .flow directory (legacy behavior). If false or not provided, creates AGENTS.md in project root (default)', }, }, }, }, ]; // List tools handler server.setRequestHandler(ListToolsRequestSchema, async () => { return { tools }; }); // Helper functions for auto-generating content function generateBusinessContextContent(taskName, description, taskType) { const typeConfig = { feature: { icon: '✨', category: 'Feature', priority: 'Alta' }, bug: { icon: '🐛', category: 'Bug Fix', priority: 'Crítica' }, improvement: { icon: '🔧', category: 'Improvement', priority: 'Média' }, research: { icon: '🔬', category: 'Research', priority: 'Baixa' } }; const config = typeConfig[taskType] || typeConfig.feature; // Generate more specific content based on task name and description const specificScenarios = generateSpecificScenarios(taskName, description, taskType); const specificAcceptanceCriteria = generateSpecificAcceptanceCriteria(taskName, description, taskType); const specificBusinessValue = generateSpecificBusinessValue(taskName, description, taskType); return `# Contexto de Negócio: ${taskName} ## 🎯 Visão Geral da Feature ### User Story Principal **Como** usuário do sistema **Eu quero** ${description.toLowerCase()} **Para que** possa ter uma melhor experiência e eficiência ### Descrição da Feature ${description} ### Valor de Negócio ${specificBusinessValue} - **Prioridade**: ${config.priority} - ${config.category} ## 📋 Especificações Comportamentais (Gherkin) ${specificScenarios} ## ✅ Critérios de Aceitação ${specificAcceptanceCriteria} ## 📊 Métricas de Sucesso ### Técnicas - **Performance**: Tempo de resposta < 2 segundos - **Disponibilidade**: 99.9% de uptime - **Taxa de Erro**: < 0.1% ### Negócio - **Adoção**: 80% dos usuários utilizam a funcionalidade - **Satisfação**: Score > 4.0/5.0 - **Eficiência**: Redução de 20% no tempo de execução ## 🔗 Dependências e Integrações ### Dependências Internas - Sistema de autenticação - Base de dados principal - Sistema de logs ### Dependências Externas - APIs de terceiros (se aplicável) - Serviços de notificação (se aplicável) ## 📝 Notas Adicionais ### Considerações Especiais - Esta funcionalidade deve ser compatível com versões anteriores - Deve seguir os padrões de design estabelecidos - Deve ser testada em ambiente de staging antes do deploy ### Riscos Identificados - **Risco**: Possível impacto na performance - **Mitigação**: Implementar cache e otimizações adequadas --- **Última Atualização**: ${new Date().toISOString().split('T')[0]} **Responsável**: A definir **Status**: Em desenvolvimento`; } function generateSpecificScenarios(taskName, description, taskType) { const scenarios = []; if (taskType === 'bug') { scenarios.push(`### Cenário 1: Reprodução do Bug *Cenário que reproduz o problema* **Given** o usuário está no sistema **And** tem as condições que causam o bug **When** executa a ação que desencadeia o problema **Then** o sistema deve apresentar o comportamento correto **And** não deve mais ocorrer o erro reportado`); } else if (taskType === 'feature') { scenarios.push(`### Cenário 1: Funcionalidade Principal *Cenário de sucesso principal* **Given** o usuário está no sistema **And** tem as permissões necessárias **When** executa a ação principal **Then** deve receber o resultado esperado **And** o sistema deve registrar a ação`); } else if (taskType === 'improvement') { scenarios.push(`### Cenário 1: Melhoria Implementada *Cenário com a melhoria aplicada* **Given** o usuário está no sistema **And** tem acesso à funcionalidade melhorada **When** utiliza a funcionalidade **Then** deve ter uma experiência melhorada **And** deve notar a diferença na performance/usabilidade`); } else { scenarios.push(`### Cenário 1: Investigação Principal *Cenário de pesquisa principal* **Given** o pesquisador está no sistema **And** tem acesso às ferramentas de análise **When** executa a investigação **Then** deve obter dados relevantes **And** deve poder documentar os achados`); } scenarios.push(`### Cenário 2: Caso de Erro *Cenário quando algo dá errado* **Given** o usuário está no sistema **And** não tem as permissões necessárias **When** tenta executar a ação **Then** deve receber uma mensagem de erro clara **And** a ação não deve ser executada`); scenarios.push(`### Cenário 3: Validação de Dados *Cenário de validação de entrada* **Given** o usuário está no sistema **And** tem dados inválidos **When** tenta executar a ação **Then** deve receber feedback sobre os dados inválidos **And** deve poder corrigir os dados`); return scenarios.join('\n\n'); } function generateSpecificAcceptanceCriteria(taskName, description, taskType) { const criteria = []; if (taskType === 'bug') { criteria.push(`### Correção do Bug - [ ] O bug reportado foi corrigido - [ ] Não há regressões em funcionalidades relacionadas - [ ] O comportamento está conforme especificado - [ ] Testes de regressão passaram`); } else if (taskType === 'feature') { criteria.push(`### Funcionalidade Principal - [ ] A funcionalidade executa conforme especificado - [ ] Retorna resultado esperado em tempo adequado - [ ] Registra logs apropriados - [ ] Funciona em diferentes navegadores/dispositivos`); } else if (taskType === 'improvement') { criteria.push(`### Melhoria Implementada - [ ] A melhoria está funcionando conforme esperado - [ ] Performance/usabilidade foi melhorada - [ ] Não há impacto negativo em funcionalidades existentes - [ ] Métricas de melhoria foram atingidas`); } else { criteria.push(`### Investigação Completa - [ ] Pesquisa foi conduzida conforme metodologia - [ ] Dados foram coletados e analisados - [ ] Conclusões foram documentadas - [ ] Recomendações foram formuladas`); } criteria.push(`### Segurança e Validação - [ ] Valida permissões do usuário - [ ] Sanitiza dados de entrada - [ ] Trata erros graciosamente - [ ] Segue padrões de segurança estabelecidos`); criteria.push(`### Performance e Usabilidade - [ ] Responde em menos de 2 segundos - [ ] Tem interface intuitiva - [ ] Fornece feedback visual adequado - [ ] É acessível conforme padrões WCAG`); return criteria.join('\n\n'); } function generateSpecificBusinessValue(taskName, description, taskType) { if (taskType === 'bug') { return `- **Impacto**: Correção deste bug melhora a estabilidade do sistema e a confiança dos usuários - **Métricas**: Redução de tickets de suporte relacionados e aumento na satisfação do usuário - **Urgência**: Bug crítico que afeta funcionalidade principal`; } else if (taskType === 'feature') { return `- **Impacto**: Esta funcionalidade melhora a experiência do usuário e aumenta a eficiência do sistema - **Métricas**: Esperamos ver uma melhoria na satisfação do usuário e redução no tempo de execução - **ROI**: Funcionalidade estratégica que agrega valor ao produto`; } else if (taskType === 'improvement') { return `- **Impacto**: Esta melhoria otimiza processos existentes e aumenta a produtividade - **Métricas**: Melhoria na performance, redução de tempo de execução e aumento na satisfação - **Benefício**: Otimização incremental que gera valor contínuo`; } else { return `- **Impacto**: Esta pesquisa fornece insights valiosos para tomada de decisões estratégicas - **Métricas**: Qualidade dos dados coletados e relevância das conclusões obtidas - **Valor**: Conhecimento que pode ser aplicado em futuras implementações`; } } function generateApproachContent(taskName, businessContext, taskType) { // Extract key information from business context const hasGherkin = businessContext.includes('Given') && businessContext.includes('When') && businessContext.includes('Then'); const hasAcceptanceCriteria = businessContext.includes('Critérios de Aceitação'); const typeConfig = { feature: { icon: '✨', focus: 'Nova funcionalidade', complexity: 'Média' }, bug: { icon: '🐛', focus: 'Correção de problema', complexity: 'Baixa' }, improvement: { icon: '🔧', focus: 'Melhoria existente', complexity: 'Média' }, research: { icon: '🔬', focus: 'Investigação', complexity: 'Alta' } }; const config = typeConfig[taskType] || typeConfig.feature; // Generate specific technical approach based on task type const specificImplementation = generateSpecificImplementation(taskName, taskType); const specificTesting = generateSpecificTesting(taskName, taskType); const specificArchitecture = generateSpecificArchitecture(taskName, taskType); return `# Abordagem Técnica: ${taskName} ## 🎯 Visão Geral da Solução ### Objetivo Técnico ${config.focus} para ${taskName.toLowerCase()} ### Complexidade Estimada - **Nível**: ${config.complexity} - **Tempo Estimado**: ${taskType === 'bug' ? '2-4 horas' : taskType === 'feature' ? '1-2 dias' : taskType === 'improvement' ? '4-8 horas' : '1-3 dias'} - **Risco**: ${taskType === 'bug' ? 'Baixo' : 'Médio'} ## 🏗️ Arquitetura da Solução ${specificArchitecture} ## 🔧 Implementação Técnica ${specificImplementation} ## 🧪 Estratégia de Testes ${specificTesting} ## 📋 Checklist de Implementação ### Preparação - [ ] Analisar requisitos detalhadamente - [ ] Revisar arquitetura existente - [ ] Identificar dependências - [ ] Planejar estrutura de dados ### Desenvolvimento - [ ] Implementar estrutura base - [ ] Desenvolver lógica principal - [ ] Implementar validações - [ ] Adicionar tratamento de erros ### Testes - [ ] Escrever testes unitários - [ ] Executar testes de integração - [ ] Validar cenários de aceitação - [ ] Testar performance ### Deploy - [ ] Revisar código - [ ] Executar testes em staging - [ ] Preparar documentação - [ ] Deploy em produção ## 🔍 Validação e Qualidade ### Code Review - [ ] Revisar lógica de implementação - [ ] Verificar padrões de código - [ ] Validar tratamento de erros - [ ] Confirmar testes adequados ### Performance - [ ] Medir tempo de resposta - [ ] Verificar uso de memória - [ ] Otimizar consultas se necessário - [ ] Implementar cache se aplicável ### Segurança - [ ] Validar entrada de dados - [ ] Verificar permissões - [ ] Implementar logging de auditoria - [ ] Revisar vulnerabilidades ## 📚 Documentação ### Técnica - [ ] Documentar APIs - [ ] Explicar algoritmos complexos - [ ] Criar diagramas de arquitetura - [ ] Atualizar README se necessário ### Usuário - [ ] Criar guia de uso - [ ] Documentar funcionalidades - [ ] Preparar exemplos práticos - [ ] Atualizar documentação existente ## ⚠️ Riscos e Mitigações ### Riscos Técnicos - **Risco**: Impacto na performance - **Mitigação**: Implementar otimizações e monitoramento - **Risco**: Quebra de funcionalidades existentes - **Mitigação**: Testes extensivos e deploy gradual ### Riscos de Negócio - **Risco**: Não atender expectativas do usuário - **Mitigação**: Validação contínua e feedback ## 📈 Métricas de Sucesso ### Técnicas - **Cobertura de Testes**: > 80% - **Performance**: Tempo de resposta < 2s - **Disponibilidade**: 99.9% uptime ### Qualidade - **Bugs em Produção**: 0 bugs críticos - **Code Review**: Aprovação de 2+ revisores - **Documentação**: 100% das APIs documentadas --- **Última Atualização**: ${new Date().toISOString().split('T')[0]} **Responsável**: A definir **Status**: Em desenvolvimento`; } function generateSpecificArchitecture(taskName, taskType) { if (taskType === 'bug') { return `### Componentes Afetados 1. **Root Cause**: Identificar componente que causa o bug 2. **Impact Analysis**: Analisar componentes relacionados 3. **Fix Implementation**: Implementar correção mínima 4. **Regression Testing**: Validar que não quebrou outras funcionalidades ### Fluxo de Correção \`\`\` 1. Reproduzir o bug 2. Identificar causa raiz 3. Implementar correção 4. Testar cenários afetados 5. Validar regressões 6. Deploy da correção \`\`\``; } else if (taskType === 'feature') { return `### Componentes Principais 1. **Controller/Handler**: Gerencia requisições e validações 2. **Service Layer**: Contém lógica de negócio 3. **Repository/DAO**: Gerencia acesso a dados 4. **Model/Entity**: Representa estruturas de dados ### Fluxo de Execução \`\`\` 1. Validação de entrada 2. Verificação de permissões 3. Processamento da lógica de negócio 4. Persistência de dados 5. Retorno de resposta 6. Logging de auditoria \`\`\``; } else if (taskType === 'improvement') { return `### Componentes a Otimizar 1. **Performance Layer**: Otimizar consultas e algoritmos 2. **UI/UX Layer**: Melhorar interface e experiência 3. **Data Layer**: Otimizar estrutura de dados 4. **Integration Layer**: Melhorar integrações ### Fluxo de Melhoria \`\`\` 1. Baseline de performance atual 2. Identificar gargalos 3. Implementar otimizações 4. Medir melhorias 5. Validar impacto 6. Deploy das melhorias \`\`\``; } else { return `### Componentes de Pesquisa 1. **Data Collection**: Coleta de dados relevantes 2. **Analysis Layer**: Análise e processamento 3. **Reporting Layer**: Documentação de achados 4. **Recommendation Engine**: Geração de recomendações ### Fluxo de Investigação \`\`\` 1. Definição de hipóteses 2. Coleta de dados 3. Análise estatística 4. Interpretação de resultados 5. Documentação de achados 6. Formulação de recomendações \`\`\``; } } function generateSpecificImplementation(taskName, taskType) { if (taskType === 'bug') { return `### 1. Análise do Problema - **Reprodução**: Documentar passos para reproduzir o bug - **Causa Raiz**: Identificar componente responsável - **Impacto**: Avaliar funcionalidades afetadas - **Priorização**: Definir urgência da correção ### 2. Correção Mínima - **Fix**: Implementar correção com menor impacto - **Validação**: Verificar que corrige o problema - **Regressão**: Garantir que não quebra outras funcionalidades - **Documentação**: Documentar a correção aplicada ### 3. Testes de Validação - **Unit Tests**: Testar componente corrigido - **Integration Tests**: Validar integração - **Regression Tests**: Executar bateria de testes - **Manual Testing**: Validação manual do cenário`; } else if (taskType === 'feature') { return `### 1. Estrutura de Dados - **Entidades**: Definir modelos de dados necessários - **Validações**: Implementar regras de validação - **Relacionamentos**: Estabelecer conexões entre entidades ### 2. API/Interface - **Endpoints**: Definir rotas e métodos HTTP - **Parâmetros**: Especificar entrada e saída - **Respostas**: Padronizar formato de retorno - **Tratamento de Erros**: Implementar códigos de status apropriados ### 3. Lógica de Negócio - **Algoritmos**: Implementar processamento principal - **Validações**: Verificar regras de negócio - **Transformações**: Converter dados conforme necessário - **Integrações**: Conectar com serviços externos ### 4. Persistência - **Database**: Estruturar tabelas/coleções - **Queries**: Otimizar consultas de dados - **Transações**: Garantir consistência - **Backup**: Implementar estratégias de backup`; } else if (taskType === 'improvement') { return `### 1. Análise de Performance - **Baseline**: Medir performance atual - **Profiling**: Identificar gargalos - **Bottlenecks**: Localizar pontos de melhoria - **Targets**: Definir metas de melhoria ### 2. Otimizações - **Algoritmos**: Otimizar lógica de processamento - **Queries**: Melhorar consultas de banco - **Cache**: Implementar estratégias de cache - **UI/UX**: Melhorar experiência do usuário ### 3. Validação de Melhorias - **Métricas**: Medir impacto das otimizações - **Comparação**: Comparar antes/depois - **A/B Testing**: Validar melhorias com usuários - **Monitoring**: Implementar monitoramento contínuo`; } else { return `### 1. Metodologia de Pesquisa - **Hipóteses**: Definir hipóteses a testar - **Metodologia**: Escolher abordagem de pesquisa - **Dados**: Identificar fontes de dados - **Análise**: Definir métodos de análise ### 2. Coleta de Dados - **Instrumentos**: Desenvolver ferramentas de coleta - **Amostragem**: Definir estratégia de amostragem - **Qualidade**: Garantir qualidade dos dados - **Ética**: Seguir princípios éticos ### 3. Análise e Interpretação - **Estatística**: Aplicar métodos estatísticos - **Visualização**: Criar visualizações dos dados - **Interpretação**: Interpretar resultados - **Validação**: Validar conclusões`; } } function generateSpecificTesting(taskName, taskType) { if (taskType === 'bug') { return `### Testes de Correção - [ ] Testar cenário que reproduz o bug - [ ] Validar que o bug foi corrigido - [ ] Executar testes de regressão - [ ] Verificar funcionalidades relacionadas ### Testes de Validação - [ ] Testar casos extremos - [ ] Validar diferentes cenários de entrada - [ ] Verificar performance após correção - [ ] Confirmar que não há regressões`; } else if (taskType === 'feature') { return `### Testes Unitários - [ ] Testar funções individuais - [ ] Validar lógica de negócio - [ ] Verificar tratamento de erros - [ ] Cobrir casos extremos ### Testes de Integração - [ ] Testar comunicação entre componentes - [ ] Validar fluxo completo - [ ] Verificar integrações externas - [ ] Testar cenários de falha ### Testes de Aceitação - [ ] Implementar cenários Gherkin definidos - [ ] Validar comportamento esperado - [ ] Verificar interface do usuário - [ ] Testar performance`; } else if (taskType === 'improvement') { return `### Testes de Performance - [ ] Medir baseline de performance - [ ] Testar melhorias implementadas - [ ] Comparar métricas antes/depois - [ ] Validar metas de melhoria ### Testes de Regressão - [ ] Executar bateria completa de testes - [ ] Verificar funcionalidades existentes - [ ] Validar integrações - [ ] Confirmar estabilidade`; } else { return `### Testes de Validação - [ ] Validar metodologia de pesquisa - [ ] Verificar qualidade dos dados - [ ] Testar instrumentos de coleta - [ ] Confirmar análise estatística ### Testes de Confiabilidade - [ ] Repetir experimentos - [ ] Validar resultados - [ ] Verificar consistência - [ ] Confirmar reprodutibilidade`; } } function generateCompletionReportContent(taskName, taskType) { const typeConfig = { feature: { icon: '✨', status: 'Em Desenvolvimento', phase: 'Implementação' }, bug: { icon: '🐛', status: 'Em Correção', phase: 'Debug' }, improvement: { icon: '🔧', status: 'Em Otimização', phase: 'Melhoria' }, research: { icon: '🔬', status: 'Em Investigação', phase: 'Pesquisa' } }; const config = typeConfig[taskType] || typeConfig.feature; const currentDate = new Date().toISOString().split('T')[0]; return `# Relatório de Progresso: ${taskName} ## 📊 Status Atual **Status**: ${config.status} **Fase**: ${config.phase} **Iniciado em**: ${currentDate} **Última Atualização**: ${currentDate} **Responsável**: A definir ## 🎯 Objetivos da Task ### Objetivo Principal ${taskType === 'bug' ? 'Corrigir o bug reportado e garantir que não há regressões' : taskType === 'feature' ? 'Implementar nova funcionalidade conforme especificações' : taskType === 'improvement' ? 'Otimizar funcionalidade existente para melhor performance' : 'Conduzir investigação e documentar achados'} ### Critérios de Sucesso - [ ] Funcionalidade implementada/testada conforme especificações - [ ] Todos os testes passando - [ ] Documentação atualizada - [ ] Code review aprovado - [ ] Deploy realizado com sucesso ## 📋 Log de Atividades ### ${currentDate} - Início da Task - [x] Task criada e contexto inicializado - [x] Arquivos de documentação gerados - [ ] Análise detalhada dos requisitos - [ ] Planejamento técnico detalhado - [ ] Início da implementação ### Próximas Atividades - [ ] Implementar funcionalidade principal - [ ] Escrever testes unitários - [ ] Executar testes de integração - [ ] Revisar código - [ ] Preparar documentação - [ ] Deploy em ambiente de staging - [ ] Validação final - [ ] Deploy em produção ## 🔍 Checkpoints de Qualidade ### Análise e Planejamento - [ ] Requisitos claramente definidos - [ ] Arquitetura planejada - [ ] Dependências identificadas - [ ] Riscos mapeados ### Desenvolvimento - [ ] Código seguindo padrões estabelecidos - [ ] Testes unitários implementados - [ ] Tratamento de erros adequado - [ ] Logs de auditoria implementados ### Testes - [ ] Testes unitários passando - [ ] Testes de integração executados - [ ] Testes de aceitação validados - [ ] Performance testada ### Deploy - [ ] Ambiente de staging validado - [ ] Documentação atualizada - [ ] Rollback plan preparado - [ ] Monitoramento configurado ## 📈 Métricas de Progresso ### Desenvolvimento - **Progresso**: 0% (Iniciado) - **Linhas de Código**: 0 - **Testes Escritos**: 0 - **Bugs Encontrados**: 0 ### Qualidade - **Cobertura de Testes**: 0% - **Code Review**: Pendente - **Performance**: A ser medida - **Segurança**: A ser validada ## ⚠️ Riscos e Bloqueadores ### Riscos Identificados - **Risco**: Complexidade técnica maior que esperada - **Mitigação**: Revisar arquitetura e considerar simplificações - **Risco**: Dependências externas não disponíveis - **Mitigação**: Implementar mocks e fallbacks ### Bloqueadores Atuais - Nenhum bloqueador identificado no momento ## 📝 Notas e Observações ### Decisões Técnicas - A definir durante o desenvolvimento ### Lições Aprendidas - A ser documentado durante o progresso ### Próximos Passos 1. Revisar documentação de requisitos 2. Implementar funcionalidade base 3. Escrever testes 4. Validar com stakeholders 5. Preparar para deploy --- **Template gerado automaticamente em**: ${currentDate} **Versão do Flow**: 1.4.0 **Próxima revisão**: A definir`; } function fillTemplateTags(templateContent, tagValues) { let filledContent = templateContent; // Substituir valores específicos das tags for (const [tagName, value] of Object.entries(tagValues)) { if (value && value.trim()) { // Procurar pela tag específica e substituir o conteúdo const tagRegex = new RegExp(`<${tagName}>[\\s\\S]*?</${tagName}>`, 'g'); const replacement = `<${tagName}>\n${value.trim()}\n</${tagName}>`; filledContent = filledContent.replace(tagRegex, replacement); } } // Substituir placeholders genéricos filledContent = filledContent.replace(/\{\{TASK_NAME\}\}/g, tagValues.taskName || '{{TASK_NAME}}'); filledContent = filledContent.replace(/\{\{PRIORITY\}\}/g, tagValues.priority || '{{PRIORITY}}'); filledContent = filledContent.replace(/\{\{ESTIMATE\}\}/g, tagValues.estimate || '{{ESTIMATE}}'); filledContent = filledContent.replace(/\{\{STAKEHOLDER\}\}/g, tagValues.stakeholder || '{{STAKEHOLDER}}'); filledContent = filledContent.replace(/\{\{DEADLINE\}\}/g, tagValues.deadline || '{{DEADLINE}}'); filledContent = filledContent.replace(/\{\{LAST_UPDATE\}\}/g, new Date().toISOString().split('T')[0]); filledContent = filledContent.replace(/\{\{RESPONSIBLE\}\}/g, tagValues.responsible || '{{RESPONSIBLE}}'); return filledContent; } // Call tool handler server.setRequestHandler(CallToolRequestSchema, async (request) => { const { name, arguments: args } = request.params; try { switch (name) { case 'create_task': { const { taskName, taskType = 'feature', workingDirectory, description, autoGenerate = true } = args; const currentDir = workingDirectory ? path.resolve(workingDirectory) : process.cwd(); const result = await createTaskContext(taskName, currentDir, taskType); if (result.success) { // Se autoGenerate está habilitado, gerar conteúdo automático if (autoGenerate && result.taskPath) { try { // Gerar BUSINESS_CONTEXT.md automaticamente const businessContextPath = path.join(result.taskPath, 'BUSINESS_CONTEXT.md'); const businessContextContent = generateBusinessContextContent(taskName, description || taskName, taskType); await fs.writeFile(businessContextPath, businessContextContent); // Gerar APPROACH.md automaticamente const approachPath = path.join(result.taskPath, 'APPROACH.md'); const approachContent = generateApproachContent(taskName, businessContextContent, taskType); await fs.writeFile(approachPath, approachContent); return { content: [ { type: 'text', text: `✅ Task "${taskName}" created successfully with auto-generated content!\n` + `📁 Location: ${result.taskPath}\n` + `📄 Files created: ${result.filesCreated?.join(', ') || 'none'}\n` + `🏷️ Type: ${taskType}\n` + `🤖 Auto-generated: BUSINESS_CONTEXT.md, APPROACH.md\n` + `📝 Description: ${description || taskName}`, }, ], }; } catch (error) { return { content: [ { type: 'text', text: `✅ Task "${taskName}" created successfully!\n` + `📁 Location: ${result.taskPath}\n` + `📄 Files created: ${result.filesCreated?.join(', ') || 'none'}\n` + `🏷️ Type: ${taskType}\n` + `⚠️ Auto-generation failed: ${error instanceof Error ? error.message : 'Unknown error'}`, }, ], }; } } return { content: [ { type: 'text', text: `✅ Task "${taskName}" created successfully!\n` + `📁 Location: ${result.taskPath}\n` + `📄 Files created: ${result.filesCreated?.join(', ') || 'none'}\n` + `🏷️ Type: ${taskType}`, }, ], }; } else { return { content: [ { type: 'text', text: `❌ Error creating task: ${result.error}`, }, ], isError: true, }; } } case 'list_tasks': { const { workingDirectory } = args; const currentDir = workingDirectory ? path.resolve(workingDirectory) : process.cwd(); const flowDir = path.join(currentDir, '.flow'); if (!(await fs.pathExists(flowDir))) { return { content: [ { type: 'text', text: '⚠️ No .flow directory found. Run "create_task" to initialize.', }, ], }; } const items = await fs.readdir(flowDir); const taskDirs = items.filter(item => { return fs.statSync(path.join(flowDir, item)).isDirectory() && /^\d{2}_/.test(item); }); if (taskDirs.length === 0) { return { content: [ { type: 'text', text: '📝 No tasks found. Create your first task with "create_task".', }, ], }; }