specifica-br 1.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -0,0 +1,85 @@
1
+ # PRODUCT REQUIREMENTS DOCUMENT (PRD)
2
+
3
+ | Metadata | Details |
4
+ | :--- | :--- |
5
+ | **Status** | Draft |
6
+ | **Data** | {{DATA_ATUAL}} |
7
+ | **Feature** | [nome-da-funcionalidade] |
8
+ <!-- Status: DRAFT → IN_PROGRESS → APPROVED -->
9
+
10
+ ---
11
+
12
+ ## 1. Contexto e Problema
13
+ **O Problema (Estado Atual):**
14
+ * [Situação observável e mensurável]
15
+
16
+ **Causa Raiz (Hipótese):**
17
+ * [Por que o problema ocorre]
18
+
19
+ **O Objetivo (Estado Futuro):**
20
+ * [Mudança observável após a feature]
21
+
22
+ ---
23
+
24
+ ## 2. Escopo
25
+
26
+ ### 2.1. O que Faremos (In-Scope)
27
+ * [ ] Item de escopo 1
28
+
29
+ ### 2.2. O que NÃO Faremos (Out-of-Scope)
30
+ * [ ] Funcionalidade futura X
31
+ * [ ] Definições de arquitetura técnica (ex: Schema de Banco, Endpoints de API)
32
+
33
+ ** Regra de Escopo**: Qualquer item não listado explicitamente em "O que Faremos" deve ser considerado fora do escopo.
34
+
35
+ ---
36
+
37
+ ## 3. Personas e User Stories
38
+
39
+ | [UserStoryID] | **[Persona]** | [Ação] | [Benefício] |
40
+ | :--- | :--- | :--- | :--- |
41
+ |US-001 | Contador | Lançamento de Débito| Seja cadastrado com sucesso |
42
+
43
+ **Cada User Story deve resultar em pelo menos um Requisito Funcional.**
44
+
45
+ ---
46
+
47
+ ## 4. Requisitos Funcionais e Regras de Negócio
48
+ ### 4.1. Regras Principais (Happy Path)
49
+ * **[RF-001] Nome do Requisito:**
50
+ * **Comportamento:** [Descrição detalhada do comportamento esperado]
51
+ * **Critério:** [Regra de negócio explícita]
52
+ * **Fonte:** [US-001, US-002]
53
+
54
+ ### 4.2. Validações e Restrições
55
+ * **[RF-003] Validação de Input:**
56
+ * O sistema deve rejeitar entradas que... [Descreva a regra]
57
+
58
+ ---
59
+
60
+ ## 5. Fluxos de Exceção e Tratamento de Erros (Unhappy Path)
61
+ | Cenário de Erro | Severidade | Comportamento do Sistema | Mensagem |
62
+ | :--- | :--- | :--- |
63
+ | **[Ex: Input Inválido]** | [Bloquear envio] | ["O campo X é obrigatório"] |
64
+
65
+ ---
66
+
67
+ ## 6. Requisitos Não-Funcionais (Qualidade)
68
+ * **[RNF-001] Performance:** [Ex: O carregamento não deve exceder 2 segundos]
69
+ **Apenas Requisitos Não-Funcionais explicitamente listados aqui devem ser considerados.**
70
+
71
+ ---
72
+
73
+ ## 7. Itens em Aberto e Dúvidas (TBD)
74
+ | ID | Questão / Dúvida | Quem deve responder? | Impacto |
75
+ | :--- | :--- | :--- | :--- |
76
+ | **[TBD-001]** | [Ex: Qual o texto final da mensagem de erro?] | [Marketing/Legal] | [Baixo - Apenas Copywriting] |
77
+
78
+ ---
79
+
80
+ ## 8. Critérios de Aceite (Definition of Done)
81
+ Para considerar esta feature concluída, o sistema deve:
82
+ 1. [ ] Cumprir todos os Requisitos Funcionais listados.
83
+ 2. [ ] Tratar graciosamente todos os Fluxos de Exceção listados.
84
+ 3. [ ] Não haver Itens em Aberto (TBD) com impacto "Alto" ou "Bloqueante".
85
+ ** A feature só pode ser considerada concluída se todos os RF-XXX e RNF-XXX associados estiverem marcados como atendidos. **
@@ -0,0 +1,123 @@
1
+ # Task: {{TASK_ID}} - {{TASK_TITLE}}
2
+
3
+ | Metadata | Details |
4
+ | :--- | :--- |
5
+ | **Status** | [TODO | IN_PROGRESS | DONE] |
6
+ | **Data** | {{DATA_ATUAL}} |
7
+ | **Task** | {{TASK_TITLE}} |
8
+ | **Feature** | [nome-da-funcionalidade] |
9
+ | **Referência PRD** | [Link PRD](@specs/features/[nome-da-funcionalidade]/prd.md) |]
10
+ | **Referência Tech Spec** | [Link PRD](@specs/features/[nome-da-funcionalidade]/techspec.md) |
11
+ <!-- Status: TODO → IN_PROGRESS → DONE -->
12
+
13
+
14
+ ## 1. Contexto e Objetivo
15
+ {{CONTEXT_CONTENT}}
16
+ <!--
17
+ Regras:
18
+ - Não reinterpretar requisitos
19
+ - Não adicionar objetivos não explicitados no PRD
20
+ - Usar este contexto apenas como orientação de execução
21
+ -->
22
+
23
+ ---
24
+
25
+ ## 2. Requisitos da Tarefa
26
+ ### 2.1 Funcionais (Comportamento)
27
+ <!-- Cada requisito DEVE mapear 1:1 com o PRD -->
28
+ - [ ] (PRD-REQ-01) ...
29
+ - [ ] (PRD-REQ-02) ...
30
+
31
+ ### 2.2 Técnicos (Implementação)
32
+ - [ ] Seguir APENAS os padrões definidos na seção {{ITEM_REF}} do techspec.md
33
+ - [ ] Utilizar exclusivamente as bibliotecas listadas abaixo:
34
+ {{LIBS_LIST}}
35
+ <!-- Proibido adicionar novas dependências -->
36
+ - [ ] Tratamento de erros conforme padrão do projeto.
37
+
38
+ ---
39
+
40
+ ## 3. Plano de Execução (Sub-tarefas)
41
+ <!-- Regras de Execução:
42
+ - Os passos DEVEM ser executados em ordem
43
+ - Um passo só pode ser marcado como concluído se os arquivos-alvo forem alterados
44
+ - Não avançar para o próximo passo se houver erro
45
+ -->
46
+
47
+ - [ ] **Passo 1: Estruturas de Dados e Contratos**
48
+ - *Ação:* Criar interfaces, DTOs, Enums ou Tabelas.
49
+ - *Arquivos Alvo:* `{{TARGET_FILES_STEP_1}}`
50
+ - *Critério de Saída:* Código compilável + tipos acessíveis pelos passos seguintes
51
+
52
+ - [ ] **Passo 2: Implementação da Lógica de Negócio**
53
+ - *Ação:* Implementar o algoritmo, regra de negócio ou fluxo principal.
54
+ - *Arquivos Alvo:* `{{TARGET_FILES_STEP_2}}`
55
+ - *Critério de Saída:* Código compilável + tipos acessíveis pelos passos seguintes
56
+
57
+ - [ ] **Passo 3: Integração e Exposição**
58
+ - *Ação:* Conectar a lógica a APIs, UI, CLI ou Banco de Dados.
59
+ - *Arquivos Alvo:* `{{TARGET_FILES_STEP_3}}`
60
+ - *Critério de Saída:* Código compilável + tipos acessíveis pelos passos seguintes
61
+
62
+ - [ ] **Passo 4: Testes e Validação**
63
+ - *Ação:* Criar testes unitários ou de integração para garantir o funcionamento.
64
+ - *Arquivos Alvo:* `{{TARGET_FILES_STEP_4}}`
65
+ - *Critério de Saída:* Código compilável + tipos acessíveis pelos passos seguintes
66
+
67
+ ---
68
+
69
+ ## 4. Detalhes de Implementação & Snippets
70
+ <!--
71
+ Os exemplos abaixo são CONTRATOS.
72
+ A implementação final DEVE respeitar forma e assinatura.
73
+ -->
74
+
75
+ * **Nomenclatura Esperada:** `{{NAMING_CONVENTION}}`
76
+ * **Estrutura de Input (Exemplo):**
77
+ ```json
78
+ {{INPUT_EXAMPLE}}
79
+ ```
80
+ * **Assinaturas/Interfaces Chave:**
81
+ ```csharp
82
+ {{CODE_SIGNATURE_EXAMPLE}}
83
+ ```
84
+ * **Restrições:**
85
+ - Não alterar assinaturas públicas
86
+ - Não introduzir parâmetros opcionais não documentados
87
+
88
+ ---
89
+
90
+ ## 5. Contexto de Arquivos (File Context)
91
+ <!-- O modelo está AUTORIZADO a ler SOMENTE os arquivos listados abaixo -->
92
+ ### 5.1 Arquivos de Leitura (Referência/Exemplos)
93
+ - `@spec/features/[nome-da-funcionalidade]/prd.md`
94
+ - `@spec/features/[nome-da-funcionalidade]/techspec.md`
95
+ - `{{EXAMPLE_FILE_PATH}}` (Exemplo de código existente similar)
96
+
97
+ ### 5.2 Arquivos Permitidos para Escrita (Alvos)
98
+ - `{{TARGET_FILE_A}}`
99
+ - `{{TARGET_FILE_B}}`
100
+ - `{{TARGET_FILE_C}}`
101
+
102
+ ---
103
+
104
+ ## 6. Critérios de Aceite (Definition of Done)
105
+ - [ ] O código compila/executa sem erros de sintaxe.
106
+ - [ ] Todos os requisitos funcionais da seção 2.1 foram atendidos.
107
+ - [ ] Os testes (Passo 4) foram criados e estão passando.
108
+ - [ ] Não há trechos de código comentados ou "TODOs" residuais.
109
+ - [ ] A implementação respeita a arquitetura descrita no `@spec/features/[nome-da-funcionalidade]/techspec.md`.
110
+ - [ ] Todos os passos da seção 3 estão marcados como concluídos
111
+ - [ ] Esta task foi marcada como DONE no arquivo `./spec/features/[nome-da-funcionalidade]/tasks.md` <!-- O modelo DEVE atualizar este arquivo -->
112
+
113
+ ### 6.1 Efeitos Colaterais Obrigatórios
114
+ - [ ] Status da task atualizado para DONE
115
+ - [ ] `./spec/features/[nome-da-funcionalidade]/tasks.md` atualizado corretamente
116
+
117
+ ---
118
+
119
+ ## 7. Arquivos Relevantes (Obrigatório)
120
+ [Listar os arquivos relatantes (arquivos da aplicação, documentações, etc) para a execução da tarefa]
121
+
122
+ ## 8. Notas de Execução (Scratchpad)
123
+ [Uso para decisões técnicas relevantes. Não repetir informações já documentadas]
@@ -0,0 +1,7 @@
1
+ # Lista de tarefas da funcionalidade [nome-da-funcionalidade]
2
+
3
+ ## Tarefas
4
+ [ ] 1.0 - Título da Tarefa Principal
5
+ [ ] 2.0 - Título da Tarefa Principal
6
+ [ ] 3.0 - Título da Tarefa Principal
7
+ ...
@@ -0,0 +1,168 @@
1
+ # Technical Specification: {{FEATURE_NAME}}
2
+ **Scope:** Esta especificação cobre APENAS a feature {{FEATURE_NAME}} conforme descrita no PRD.
3
+ Qualquer comportamento fora deste escopo deve ser explicitamente rejeitado.
4
+
5
+ | Metadata | Details |
6
+ | :--- | :--- |
7
+ | **Status** | Draft |
8
+ | **Data** | {{DATA_ATUAL}} |
9
+ | **Referência PRD** | [Link PRD](@specs/features/[nome-da-funcionalidade]/prd.md) |
10
+ <!-- Status: DRAFT → IN_PROGRESS → APPROVED -->
11
+
12
+ ---
13
+
14
+ ## 1. Introdução e contexto
15
+ **Exemplo de Estilo:**
16
+ "Esta feature implementará o fluxo de checkout utilizando o padrão Saga para orquestração. Utilizaremos uma fila (RabbitMQ) para processamento assíncrono de pagamentos para garantir resiliência, e o estado do pedido será persistido no PostgreSQL."
17
+
18
+ {{INTRODUCTION_CONTENT}}
19
+
20
+ - **Objetivo de Negócio:** ...
21
+ - **Impacto no Usuário:** ...
22
+ - **Non Goals:** ...
23
+ - **Pressupostos:** ...
24
+
25
+ ---
26
+
27
+ ## 2. High-Level Architecture [Obrigatório]
28
+ ### 2.1 Context Diagram
29
+ **Exemplo:**
30
+ :::mermaid
31
+ graph LR
32
+ User -->|HTTP Request| API
33
+ API -->|Publish Event| MessageBroker
34
+ Worker -->|Consume| MessageBroker
35
+ Worker -->|Write| Database
36
+ :::
37
+ <!--
38
+ Regras:
39
+ - O diagrama deve refletir APENAS os componentes mencionados no PRD.
40
+ - Serviços especulativos não são permitidos.
41
+ - Prefira menos nós à completude.
42
+ -->
43
+
44
+ {{CONTEXT_DIAGRAM_CONTENT}}
45
+
46
+ ### 2.3 Design de Componentes (Alinhado com a Arquitetura da Aplicação) [Obrigatório]
47
+
48
+ **Regras:**
49
+ - Todo componente **DEVE** estar em conformidade com a arquitetura declarada.
50
+ - Todo componente **DEVE** pertencer a **exatamente uma** camada arquitetural.
51
+ - Nenhum componente **PODE** violar a direção das dependências.
52
+
53
+ **Formato Obrigatório:**
54
+ - **Nome:**
55
+ - **Camada:** Domain | Application | Infrastructure | Interface
56
+ - **Tipo:** Controller | UseCase | DomainService | Repository | Adapter | Worker
57
+ - **Responsabilidade:**
58
+ - **Dependências (Apenas Permitidas):**
59
+
60
+ {{COMPONENT_DESIGN_CONTENT}}
61
+
62
+ ---
63
+
64
+ ## 3. Design e Persistência de Dados [Se aplicável]
65
+ ### 3.1 Modelos de dados / Schema [Se aplicável]
66
+ **Exemplo (Formato Esperado):**
67
+ **Entity: Order**
68
+ - `id` (UUID, PK): Identificador único.
69
+ - `customer_id` (String, Indexed): Referência ao usuário.
70
+ - `total_amount` (Decimal, Not Null): Valor final.
71
+ - `status` (Enum): [PENDING, PAID, FAILED].
72
+
73
+ {{DATA_MODELS_CONTENT}}
74
+
75
+ ### 3.2 Estratégia de armazenamento [Se aplicável]
76
+ {{STORAGE_STRATEGY_CONTENT}}
77
+
78
+ ---
79
+
80
+ ## 4. Especificações da interface (Contracts) [Se aplicável]
81
+ ### 4.1 Public Interfaces
82
+ **Exemplo (API REST):**
83
+ **POST /api/v1/orders**
84
+ - **Input:** `{ "items": [{"id": "xyz", "qty": 1}] }`
85
+ - **Output (201):** `{ "orderId": "abc-123", "status": "PENDING" }`
86
+ - **Error (422):** `{ "code": "INVALID_STOCK", "message": "Item xyz out of stock" }`
87
+
88
+ {{PUBLIC_INTERFACES_CONTENT}}
89
+
90
+ ### 4.2 Interações internas (Events/Messages) [Se aplicável]
91
+ **Exemplo (Evento):**
92
+ **Event: OrderCreated**
93
+ - **Source:** OrderService
94
+ - **Payload:** `{ "orderId": "...", "timestamp": "..." }`
95
+
96
+ {{INTERNAL_INTERACTIONS_CONTENT}}
97
+
98
+ ---
99
+
100
+ ## 5. Lógica de negócios e algoritmos principais [Obrigatório]
101
+ ### 5.1 Fluxo principal [Obrigatório]
102
+ **Exemplo:**
103
+ 1. Receber requisição de cadastro.
104
+ 2. **Validação:** Verificar se e-mail já existe no Repositório (Unique Constraint).
105
+ - *Se existir:* Retornar Erro `UserAlreadyExists`.
106
+ 3. Hash da senha usando algoritmo definido (ex: Argon2).
107
+ 4. Salvar usuário no banco com status `ACTIVE`.
108
+ 5. Publicar evento `UserRegistered` no barramento.
109
+
110
+ {{MAIN_FLOW_CONTENT}}
111
+
112
+ ### 5.2 Casos extremos [Obrigatório]
113
+ **Exemplo:**
114
+ - **Regra:** Se o valor for > 10.000, exigir aprovação manual (status `REVIEW`).
115
+ - **Retry:** Se o serviço de terceiro falhar (5xx), tentar 3 vezes com backoff exponencial.
116
+
117
+ {{EDGE_CASES_CONTENT}}
118
+
119
+ ---
120
+
121
+ ## 6. Observability & Operational Readiness [Se aplicável]
122
+ ### 6.1 Logging & Tracing
123
+ **Exemplo:**
124
+ - **Level:** ERROR
125
+ - **When:** Falha na validação de cartão.
126
+ - **Context:** Logar `orderId`, `userId` e `errorCode` do gateway. (NUNCA logar o número do cartão).
127
+ <!--
128
+ Regra:
129
+ - Todas as métricas/registros definidos aqui DEVEM ser implementados durante a execução da tarefa.
130
+ -->.
131
+
132
+ {{LOGGING_CONTENT}}
133
+
134
+ ### 6.2 Métricas (KPIs) [Se aplicável]
135
+ **Exemplo:**
136
+ - `payment_gateway_latency_seconds` (Histogram): Tempo de resposta do parceiro.
137
+ - `orders_created_total` (Counter): Volume de vendas.
138
+
139
+ {{METRICS_CONTENT}}
140
+
141
+ ---
142
+
143
+ ## 7. Segurança & Compliance [Se aplicável]
144
+ **Exemplo:**
145
+ - **Auth:** Endpoint requer token Bearer com role `admin`.
146
+ - **Data Privacy:** O campo `cpf` deve ser criptografado em repouso (At Rest).
147
+ - **Sanitization:** Todos os inputs de texto devem ser sanitizados para evitar XSS/Injection.
148
+ - **Criticidade:** ...
149
+ - **Recomendação:** ...
150
+ - **Fora do escopo:** ...
151
+
152
+ {{SECURITY_CONTENT}}
153
+
154
+ ---
155
+
156
+ ## 8. Plano de Implementação [Obrigatório]
157
+ **Exemplo:**
158
+ 1. Criar migration da tabela `orders`.
159
+ 2. Implementar `OrderRepository` e testes de integração.
160
+ 3. Implementar Caso de Uso `CreateOrder` (Lógica).
161
+ 4. Criar Endpoint na API e DTOs.
162
+ 5. Configurar instrumentação de métricas.
163
+ <!--
164
+ Regra:
165
+ - Não mais que 10 passos
166
+ -->
167
+
168
+ {{IMPLEMENTATION_PLAN_CONTENT}}
@@ -0,0 +1,5 @@
1
+ import { Command } from 'commander';
2
+ /**
3
+ * Exporta o comando help configurado para uso no Commander.js.
4
+ */
5
+ export declare const helpCommand: Command;
@@ -0,0 +1,76 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.helpCommand = void 0;
7
+ const commander_1 = require("commander");
8
+ const chalk_1 = __importDefault(require("chalk"));
9
+ /**
10
+ * Exibe o workflow completo de Spec Driven Development (SDD).
11
+ * Mostra o fluxo detalhado desde a inicialização até a execução de tarefas.
12
+ */
13
+ function showCompleteHelp() {
14
+ console.log('');
15
+ console.log(chalk_1.default.cyan.bold('Workflow Completo de Spec Driven Development (SDD)'));
16
+ console.log('');
17
+ console.log(chalk_1.default.yellow('1. Inicialização:'));
18
+ console.log(chalk_1.default.white(' $ specifica init'));
19
+ console.log(chalk_1.default.gray(' Cria estrutura de diretórios e templates no projeto.'));
20
+ console.log('');
21
+ console.log(chalk_1.default.yellow('2. Geração de PRD:'));
22
+ console.log(chalk_1.default.white(' /gerar-prd [sua ideia]'));
23
+ console.log(chalk_1.default.gray(' Define requisitos funcionais e regras de negócio da feature.'));
24
+ console.log('');
25
+ console.log(chalk_1.default.yellow('3. Geração de Tech Spec:'));
26
+ console.log(chalk_1.default.white(' /gerar-techspec [caminho do prd]'));
27
+ console.log(chalk_1.default.gray(' Define arquitetura técnica, componentes e plano de implementação.'));
28
+ console.log('');
29
+ console.log(chalk_1.default.yellow('4. Geração de Tarefas:'));
30
+ console.log(chalk_1.default.white(' /gerar-tasks [caminho do prd] [caminho do tech spec]'));
31
+ console.log(chalk_1.default.gray(' Decompõe o plano técnico em tarefas executáveis.'));
32
+ console.log('');
33
+ console.log(chalk_1.default.yellow('5. Execução de Tarefas:'));
34
+ console.log(chalk_1.default.white(' /executar-task [caminho da task] [prd] [tech spec]'));
35
+ console.log(chalk_1.default.gray(' Implementa cada tarefa individualmente seguindo a especificação.'));
36
+ console.log('');
37
+ console.log(chalk_1.default.cyan.bold('Benefícios do SDD:'));
38
+ console.log('');
39
+ console.log(chalk_1.default.white(' • Documentação antes do código'));
40
+ console.log(chalk_1.default.white(' • Redução de retrabalho'));
41
+ console.log(chalk_1.default.white(' • Comunicação alinhada entre times'));
42
+ console.log('');
43
+ }
44
+ /**
45
+ * Função principal do comando help.
46
+ * Exibe ajuda simplificada ou completa baseada na flag --completo.
47
+ */
48
+ function runHelpCommand(options) {
49
+ if (options.completo) {
50
+ showCompleteHelp();
51
+ }
52
+ else {
53
+ console.log('');
54
+ console.log(chalk_1.default.cyan.bold('Usage:'));
55
+ console.log(chalk_1.default.white(' specifica-br [options] [command]'));
56
+ console.log('');
57
+ console.log(chalk_1.default.cyan.bold('Options:'));
58
+ console.log(chalk_1.default.white(' -V, --version output the version number'));
59
+ console.log(chalk_1.default.white(' -h, --help display help for command'));
60
+ console.log('');
61
+ console.log(chalk_1.default.cyan.bold('Commands:'));
62
+ console.log(chalk_1.default.white(' init Inicializa estrutura SDD no projeto atual'));
63
+ console.log(chalk_1.default.white(' help [command] display help for command'));
64
+ console.log(chalk_1.default.white(' upgrade Atualiza templates e comandos (em breve)'));
65
+ console.log('');
66
+ console.log(chalk_1.default.gray('Para ajuda detalhada, use: specifica-br help --completo'));
67
+ console.log('');
68
+ }
69
+ }
70
+ /**
71
+ * Exporta o comando help configurado para uso no Commander.js.
72
+ */
73
+ exports.helpCommand = new commander_1.Command('help')
74
+ .description('Exibe ajuda dos comandos disponíveis')
75
+ .option('--completo', 'Exibe ajuda detalhada com workflow completo')
76
+ .action(runHelpCommand);
@@ -0,0 +1,2 @@
1
+ import { Command } from 'commander';
2
+ export declare const initCommand: Command;
@@ -0,0 +1,70 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.initCommand = void 0;
7
+ const commander_1 = require("commander");
8
+ const prompts_1 = __importDefault(require("prompts"));
9
+ const file_service_1 = require("../utils/file-service");
10
+ const message_formatter_1 = require("../utils/message-formatter");
11
+ async function runInitCommand() {
12
+ console.log('');
13
+ console.log('Inicializando estrutura Spec Driven Development...');
14
+ console.log('');
15
+ try {
16
+ const toolResponse = await (0, prompts_1.default)({
17
+ type: 'select',
18
+ name: 'tool',
19
+ message: 'Selecione a ferramenta de IA:',
20
+ choices: [
21
+ { title: 'OpenCode', value: 'opencode' }
22
+ ],
23
+ initial: 0
24
+ });
25
+ if (!toolResponse.tool) {
26
+ (0, message_formatter_1.showErrorMessage)('Operação cancelada pelo usuário.');
27
+ process.exit(1);
28
+ }
29
+ const modelResponse = await (0, prompts_1.default)({
30
+ type: 'select',
31
+ name: 'model',
32
+ message: 'Selecione o modelo de IA:',
33
+ choices: [
34
+ { title: 'GLM 4.7', value: 'glm-4.7' }
35
+ ],
36
+ initial: 0
37
+ });
38
+ if (!modelResponse.model) {
39
+ (0, message_formatter_1.showErrorMessage)('Operação cancelada pelo usuário.');
40
+ process.exit(1);
41
+ }
42
+ const answers = {
43
+ tool: toolResponse.tool,
44
+ model: modelResponse.model
45
+ };
46
+ console.log('');
47
+ (0, message_formatter_1.showInfoMessage)(`Ferramenta: ${answers.tool} | Modelo: ${answers.model}`);
48
+ console.log('');
49
+ (0, message_formatter_1.showInfoMessage)('Criando estrutura de diretórios...');
50
+ (0, file_service_1.createDirectories)();
51
+ console.log('');
52
+ (0, message_formatter_1.showInfoMessage)('Copiando arquivos de templates...');
53
+ (0, file_service_1.copyTemplates)();
54
+ (0, message_formatter_1.showSuccessMessage)();
55
+ (0, message_formatter_1.showMissionMessage)();
56
+ process.exit(0);
57
+ }
58
+ catch (error) {
59
+ if (error instanceof Error) {
60
+ (0, message_formatter_1.showErrorMessage)(error.message);
61
+ }
62
+ else {
63
+ (0, message_formatter_1.showErrorMessage)('Erro desconhecido ao executar comando init.');
64
+ }
65
+ process.exit(1);
66
+ }
67
+ }
68
+ exports.initCommand = new commander_1.Command('init')
69
+ .description('Inicializa estrutura SDD no projeto atual')
70
+ .action(runInitCommand);
@@ -0,0 +1,5 @@
1
+ import { Command } from 'commander';
2
+ /**
3
+ * Exporta o comando upgrade configurado para uso no Commander.js.
4
+ */
5
+ export declare const upgradeCommand: Command;
@@ -0,0 +1,24 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.upgradeCommand = void 0;
7
+ const commander_1 = require("commander");
8
+ const chalk_1 = __importDefault(require("chalk"));
9
+ /**
10
+ * Função principal do comando upgrade.
11
+ * Exibe mensagem informativa sobre o comando em desenvolvimento.
12
+ */
13
+ function runUpgradeCommand() {
14
+ console.log('');
15
+ console.log(chalk_1.default.yellow('Comando em desenvolvimento.'));
16
+ console.log(chalk_1.default.gray('Em breve você poderá atualizar templates e comandos automaticamente.'));
17
+ console.log('');
18
+ }
19
+ /**
20
+ * Exporta o comando upgrade configurado para uso no Commander.js.
21
+ */
22
+ exports.upgradeCommand = new commander_1.Command('upgrade')
23
+ .description('Atualiza templates e comandos (em breve)')
24
+ .action(runUpgradeCommand);
@@ -0,0 +1,2 @@
1
+ #!/usr/bin/env node
2
+ export {};
package/dist/index.js ADDED
@@ -0,0 +1,16 @@
1
+ #!/usr/bin/env node
2
+ "use strict";
3
+ Object.defineProperty(exports, "__esModule", { value: true });
4
+ const commander_1 = require("commander");
5
+ const init_1 = require("./commands/init");
6
+ const help_1 = require("./commands/help");
7
+ const upgrade_1 = require("./commands/upgrade");
8
+ const program = new commander_1.Command();
9
+ program
10
+ .name('specifica-br')
11
+ .description('Ferramenta de automação para desenvolvimento guiado por especificações (Spec Driven Development - SDD) com IA. Otimizado para o ecossistema brasileiro.')
12
+ .version('1.0.0');
13
+ program.addCommand(init_1.initCommand);
14
+ program.addCommand(help_1.helpCommand);
15
+ program.addCommand(upgrade_1.upgradeCommand);
16
+ program.parse(process.argv);
@@ -0,0 +1,19 @@
1
+ /**
2
+ * Interface para as respostas do comando init.
3
+ * Representa as escolhas do usuário durante o fluxo interativo.
4
+ */
5
+ export interface InitAnswers {
6
+ tool: string;
7
+ model: string;
8
+ }
9
+ /**
10
+ * Interface para configuração de templates.
11
+ * Mapeia ferramentas e modelos para os paths de arquivos de comando.
12
+ */
13
+ export interface TemplateConfig {
14
+ [key: string]: {
15
+ tool: string;
16
+ model: string;
17
+ opencodeCommands: string[];
18
+ };
19
+ }
@@ -0,0 +1,2 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
@@ -0,0 +1,2 @@
1
+ export declare function createDirectories(): void;
2
+ export declare function copyTemplates(): void;