@dewtech/dare-cli 0.3.5 → 0.3.8
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.
- package/dist/bin/dare.js +4 -1
- package/dist/bin/dare.js.map +1 -1
- package/dist/utils/project-generator.d.ts.map +1 -1
- package/dist/utils/project-generator.js +143 -72
- package/dist/utils/project-generator.js.map +1 -1
- package/dist/utils/templates.d.ts +1 -1
- package/dist/utils/templates.d.ts.map +1 -1
- package/dist/utils/templates.js +92 -98
- package/dist/utils/templates.js.map +1 -1
- package/package.json +8 -6
- package/templates/backend/node-nestjs/.env.example +9 -0
- package/templates/backend/node-nestjs/nest-cli.json +8 -0
- package/templates/backend/node-nestjs/package.json +50 -0
- package/templates/backend/node-nestjs/src/app.controller.ts +12 -0
- package/templates/backend/node-nestjs/src/app.module.ts +15 -0
- package/templates/backend/node-nestjs/src/app.service.ts +8 -0
- package/templates/backend/node-nestjs/src/main.ts +24 -0
- package/templates/backend/node-nestjs/tsconfig.json +21 -0
- package/templates/backend/php-laravel/.env.example +22 -0
- package/templates/backend/php-laravel/app/Http/Controllers/HealthController.php +15 -0
- package/templates/backend/php-laravel/composer.json +40 -0
- package/templates/backend/python-fastapi/.env.example +4 -0
- package/templates/backend/python-fastapi/app/api/router.py +8 -0
- package/templates/backend/python-fastapi/app/core/config.py +20 -0
- package/templates/backend/python-fastapi/main.py +35 -0
- package/templates/backend/python-fastapi/requirements.txt +13 -0
- package/templates/backend/rust-axum/.env.example +3 -0
- package/templates/backend/rust-axum/Cargo.toml +23 -0
- package/templates/backend/rust-axum/src/errors.rs +30 -0
- package/templates/backend/rust-axum/src/main.rs +32 -0
- package/templates/backend/rust-axum/src/routes.rs +6 -0
- package/templates/frontend/react/index.html +12 -0
- package/templates/frontend/react/package.json +35 -0
- package/templates/frontend/react/src/App.tsx +25 -0
- package/templates/frontend/react/src/main.tsx +9 -0
- package/templates/frontend/vue/package.json +32 -0
- package/templates/frontend/vue/src/App.vue +7 -0
- package/templates/frontend/vue/src/main.ts +10 -0
- package/templates/frontend/vue/src/router/index.ts +14 -0
- package/templates/frontend/vue/src/views/HomeView.vue +6 -0
- package/templates/ide/antigravity/.agents/skills/dare-blueprint/SKILL.md +224 -0
- package/templates/ide/antigravity/.agents/skills/dare-bugfix-design/SKILL.md +76 -0
- package/templates/ide/antigravity/.agents/skills/dare-design/SKILL.md +180 -0
- package/templates/ide/antigravity/.agents/skills/dare-execute/SKILL.md +264 -0
- package/templates/ide/antigravity/.agents/skills/dare-feature-design/SKILL.md +74 -0
- package/templates/ide/antigravity/.agents/skills/dare-tasks/SKILL.md +229 -0
- package/templates/ide/antigravity/templates/BLUEPRINT-template.md +53 -0
- package/templates/ide/antigravity/templates/DESIGN-template.md +34 -0
- package/templates/ide/antigravity/templates/TASK-SPEC-template.md +43 -0
- package/templates/ide/antigravity/templates/TASKS-template.md +26 -0
- package/templates/ide/antigravity/templates/TELEMETRY-template.md +125 -0
- package/templates/ide/cursor/.cursor/commands/execute-task.md +19 -0
- package/templates/ide/cursor/.cursor/commands/generate-blueprint.md +21 -0
- package/templates/ide/cursor/.cursor/commands/generate-bugfix-design.md +64 -0
- package/templates/ide/cursor/.cursor/commands/generate-design.md +18 -0
- package/templates/ide/cursor/.cursor/commands/generate-docker-compose.md +18 -0
- package/templates/ide/cursor/.cursor/commands/generate-dockerfile.md +17 -0
- package/templates/ide/cursor/.cursor/commands/generate-feature-design.md +64 -0
- package/templates/ide/cursor/.cursor/commands/generate-tasks.md +20 -0
- package/templates/ide/cursor/.cursor/commands/telemetry-report.md +42 -0
- package/templates/ide/cursor/.cursor/rules/skill-bugfix-design.mdc +51 -0
- package/templates/ide/cursor/.cursor/rules/skill-docker.mdc +33 -0
- package/templates/ide/cursor/.cursor/rules/skill-feature-design.mdc +43 -0
- package/templates/ide/cursor/.cursor/rules/skill-laravel-api.mdc +44 -0
- package/templates/ide/cursor/.cursor/rules/skill-security.mdc +57 -0
- package/templates/ide/cursor/.cursor/rules/skill-telemetry.mdc +156 -0
- package/templates/ide/cursor/templates/BLUEPRINT-template.md +53 -0
- package/templates/ide/cursor/templates/DESIGN-template.md +34 -0
- package/templates/ide/cursor/templates/TASK-SPEC-template.md +43 -0
- package/templates/ide/cursor/templates/TASKS-template.md +26 -0
- package/templates/ide/cursor/templates/TELEMETRY-template.md +125 -0
- package/templates/shared/docker-compose.yml +41 -0
package/dist/utils/templates.js
CHANGED
|
@@ -53,7 +53,7 @@ You are an AI assistant following the DARE methodology:
|
|
|
53
53
|
## Core Rules
|
|
54
54
|
- Always read DARE/BLUEPRINT.md before implementing any feature
|
|
55
55
|
- Update DARE/TASKS.md status after completing each task
|
|
56
|
-
- Never skip the Ralph Loop (build
|
|
56
|
+
- Never skip the Ralph Loop (build → test → lint) before marking a task as DONE
|
|
57
57
|
- Human approval is required before merging to main branch
|
|
58
58
|
- Context is king: use MCP Server queries instead of re-reading large files
|
|
59
59
|
|
|
@@ -111,7 +111,7 @@ export function generateMcpCursorRules(config) {
|
|
|
111
111
|
const langRules = mcpLanguage === 'python'
|
|
112
112
|
? `## Language: Python
|
|
113
113
|
- Use FastMCP (@mcp.tool, @mcp.resource, @mcp.prompt decorators)
|
|
114
|
-
- Type all arguments
|
|
114
|
+
- Type all arguments — FastMCP builds JSON schema from type hints
|
|
115
115
|
- Use docstrings as tool/resource/prompt descriptions
|
|
116
116
|
- Test: npx @modelcontextprotocol/inspector python main.py
|
|
117
117
|
- Lint: ruff check . && mypy .`
|
|
@@ -122,10 +122,10 @@ export function generateMcpCursorRules(config) {
|
|
|
122
122
|
- Test: npm run inspect (MCP Inspector)
|
|
123
123
|
- Build: npm run build before marking any task DONE`;
|
|
124
124
|
const transportNote = mcpTransport === 'stdio'
|
|
125
|
-
? `- Transport: stdio
|
|
125
|
+
? `- Transport: stdio — server communicates via stdin/stdout, no HTTP port needed`
|
|
126
126
|
: mcpTransport === 'sse'
|
|
127
|
-
? `- Transport: SSE
|
|
128
|
-
: `- Transport: HTTP Stream
|
|
127
|
+
? `- Transport: SSE — server exposes GET /sse and POST /messages endpoints`
|
|
128
|
+
: `- Transport: HTTP Stream — use StreamableHTTPServerTransport`;
|
|
129
129
|
return `# DARE Framework - Cursor Rules (MCP Server Project)
|
|
130
130
|
|
|
131
131
|
## DARE Methodology
|
|
@@ -138,7 +138,7 @@ You are an AI assistant following the DARE methodology:
|
|
|
138
138
|
## Core Rules
|
|
139
139
|
- Always read DARE/BLUEPRINT.md before implementing any tool or resource
|
|
140
140
|
- Update DARE/TASKS.md status after completing each task
|
|
141
|
-
- Never skip the Ralph Loop (build
|
|
141
|
+
- Never skip the Ralph Loop (build → test → inspect) before marking a task as DONE
|
|
142
142
|
- Test every tool with MCP Inspector before marking DONE
|
|
143
143
|
- Validate tool inputSchema matches actual handler logic exactly
|
|
144
144
|
|
|
@@ -175,8 +175,8 @@ You are an autonomous AI agent implementing an MCP server using the DARE methodo
|
|
|
175
175
|
Execute tasks from DARE/dare-dag.yaml in parallel when dependencies allow.
|
|
176
176
|
|
|
177
177
|
## DARE Phases
|
|
178
|
-
- **Design**: Read DARE/DESIGN.md
|
|
179
|
-
- **Architect**: Read DARE/BLUEPRINT.md
|
|
178
|
+
- **Design**: Read DARE/DESIGN.md — what tools/resources/prompts does this MCP server expose?
|
|
179
|
+
- **Architect**: Read DARE/BLUEPRINT.md — tool schemas, transport, auth strategy
|
|
180
180
|
- **Review**: Test each tool with MCP Inspector before marking DONE
|
|
181
181
|
- **Execute**: Implement tasks, update DARE/TASKS.md
|
|
182
182
|
|
|
@@ -186,7 +186,7 @@ Execute tasks from DARE/dare-dag.yaml in parallel when dependencies allow.
|
|
|
186
186
|
- Features: ${mcpFeatures.join(', ')}
|
|
187
187
|
|
|
188
188
|
## Implementation Rules
|
|
189
|
-
- Each tool must have a strict inputSchema
|
|
189
|
+
- Each tool must have a strict inputSchema — Claude uses it to call the tool
|
|
190
190
|
- Test with MCP Inspector after implementing each tool
|
|
191
191
|
- Never skip error handling for unknown tool names
|
|
192
192
|
|
|
@@ -204,7 +204,7 @@ export function generateClaudeCodeRules(config) {
|
|
|
204
204
|
const { backend, frontend, graphrag, mcp } = config;
|
|
205
205
|
const backendRules = {
|
|
206
206
|
'rust-axum': `## Backend: Rust/Axum
|
|
207
|
-
- Use Rust idioms
|
|
207
|
+
- Use Rust idioms — no \`unwrap()\` in production code
|
|
208
208
|
- Prefer async/await with Tokio runtime
|
|
209
209
|
- Use Axum extractors for request handling
|
|
210
210
|
- Handle all errors with \`thiserror\`/\`anyhow\`
|
|
@@ -240,27 +240,27 @@ export function generateClaudeCodeRules(config) {
|
|
|
240
240
|
return `# DARE Framework
|
|
241
241
|
|
|
242
242
|
## Metodologia
|
|
243
|
-
|
|
243
|
+
Você é o Claude Code, assistente de desenvolvimento seguindo o método DARE:
|
|
244
244
|
- **D**esign: Requisitos e objetivos definidos em \`DARE/DESIGN.md\`
|
|
245
|
-
- **A**rchitect: Blueprint
|
|
246
|
-
- **R**eview:
|
|
247
|
-
- **E**xecute:
|
|
245
|
+
- **A**rchitect: Blueprint técnico e grafo de tasks em \`DARE/BLUEPRINT.md\`
|
|
246
|
+
- **R**eview: Validação humana antes de executar
|
|
247
|
+
- **E**xecute: Implementação task a task com Ralph Loop
|
|
248
248
|
|
|
249
249
|
## Regras Fundamentais
|
|
250
250
|
- Sempre leia \`DARE/BLUEPRINT.md\` antes de implementar qualquer feature
|
|
251
251
|
- Atualize o status em \`DARE/TASKS.md\` ao concluir cada task
|
|
252
|
-
- Nunca pule o Ralph Loop (build
|
|
253
|
-
-
|
|
252
|
+
- Nunca pule o Ralph Loop (build → test → lint) antes de marcar uma task como DONE
|
|
253
|
+
- Aprovação humana obrigatória antes de merge para a branch principal
|
|
254
254
|
- Use os slash commands \`/dare-design\`, \`/dare-blueprint\`, \`/dare-execute\`
|
|
255
255
|
|
|
256
256
|
## Estrutura do Projeto
|
|
257
257
|
\`\`\`
|
|
258
258
|
DARE/
|
|
259
|
-
|
|
260
|
-
|
|
261
|
-
|
|
262
|
-
|
|
263
|
-
|
|
259
|
+
├── DESIGN.md ↠Fase D — requisitos (humano define)
|
|
260
|
+
├── BLUEPRINT.md ↠Fase A — arquitetura (IA propõe, humano valida)
|
|
261
|
+
├── TASKS.md ↠rastreamento de tasks
|
|
262
|
+
├── dare-dag.yaml ↠grafo de dependências
|
|
263
|
+
└── EXECUTION/ ↠logs de execução por task
|
|
264
264
|
\`\`\`
|
|
265
265
|
|
|
266
266
|
${backend && backendRules[backend] ? backendRules[backend] : ''}
|
|
@@ -270,13 +270,13 @@ ${frontend && frontendRules[frontend] ? frontendRules[frontend] : ''}
|
|
|
270
270
|
## Contexto (${graphrag})
|
|
271
271
|
${mcp ? `- Consulte o DARE MCP Server em http://localhost:3000 para queries de contexto
|
|
272
272
|
- Use POST /context/query com {"type": "architecture"|"task"|"dependency", "query": "..."}
|
|
273
|
-
- Evite reler arquivos inteiros
|
|
273
|
+
- Evite reler arquivos inteiros — use queries direcionadas` : `- Use DARE/BLUEPRINT.md como fonte única de verdade para contexto`}
|
|
274
274
|
|
|
275
|
-
## Ralph Loop (
|
|
276
|
-
1. Build
|
|
277
|
-
2. Test
|
|
278
|
-
3. Lint
|
|
279
|
-
4.
|
|
275
|
+
## Ralph Loop (obrigatório antes de DONE)
|
|
276
|
+
1. Build — compile e verifique erros
|
|
277
|
+
2. Test — rode a suite de testes completa
|
|
278
|
+
3. Lint — rode o linter/formatter
|
|
279
|
+
4. Só marque DONE se os 3 passos passarem sem erros
|
|
280
280
|
`;
|
|
281
281
|
}
|
|
282
282
|
export function generateMcpClaudeCodeRules(config) {
|
|
@@ -285,31 +285,31 @@ export function generateMcpClaudeCodeRules(config) {
|
|
|
285
285
|
const langRules = mcpLanguage === 'python'
|
|
286
286
|
? `## Linguagem: Python
|
|
287
287
|
- Use FastMCP com decoradores @mcp.tool, @mcp.resource, @mcp.prompt
|
|
288
|
-
- Type hints
|
|
289
|
-
- Use docstrings como
|
|
288
|
+
- Type hints obrigatórios — FastMCP gera o JSON Schema automaticamente
|
|
289
|
+
- Use docstrings como descrição das tools/resources/prompts
|
|
290
290
|
- Ralph Loop: \`python -m py_compile main.py && pytest && ruff check .\`
|
|
291
291
|
- Inspecione com: \`npx @modelcontextprotocol/inspector python main.py\``
|
|
292
292
|
: `## Linguagem: TypeScript
|
|
293
293
|
- Importe de \`@modelcontextprotocol/sdk/server/index.js\`
|
|
294
|
-
- Defina \`inputSchema\` estrito para cada tool
|
|
295
|
-
- Use zod para
|
|
294
|
+
- Defina \`inputSchema\` estrito para cada tool — Claude depende dele para chamadas corretas
|
|
295
|
+
- Use zod para validação em runtime quando necessário
|
|
296
296
|
- Ralph Loop: \`npm run build && npm test\`
|
|
297
297
|
- Inspecione com: \`npm run inspect\``;
|
|
298
298
|
const transportNote = mcpTransport === 'stdio'
|
|
299
|
-
? `- Transport \`stdio\`
|
|
299
|
+
? `- Transport \`stdio\` — comunicação via stdin/stdout, sem porta HTTP`
|
|
300
300
|
: mcpTransport === 'sse'
|
|
301
|
-
? `- Transport \`SSE\`
|
|
302
|
-
: `- Transport \`HTTP Stream\`
|
|
303
|
-
return `# DARE Framework
|
|
301
|
+
? `- Transport \`SSE\` — expõe GET /sse e POST /messages`
|
|
302
|
+
: `- Transport \`HTTP Stream\` — use StreamableHTTPServerTransport`;
|
|
303
|
+
return `# DARE Framework — MCP Server
|
|
304
304
|
|
|
305
305
|
## Metodologia
|
|
306
|
-
|
|
307
|
-
- **D**esign: Quais tools/resources/prompts este servidor
|
|
308
|
-
- **A**rchitect: Schemas das tools,
|
|
306
|
+
Você é o Claude Code implementando um servidor MCP com o método DARE:
|
|
307
|
+
- **D**esign: Quais tools/resources/prompts este servidor expõe?
|
|
308
|
+
- **A**rchitect: Schemas das tools, estratégia de transport e auth
|
|
309
309
|
- **R**eview: Teste cada tool com MCP Inspector antes de marcar DONE
|
|
310
|
-
- **E**xecute:
|
|
310
|
+
- **E**xecute: Implementação task a task com Ralph Loop
|
|
311
311
|
|
|
312
|
-
##
|
|
312
|
+
## Configuração do MCP Server
|
|
313
313
|
- Transport: ${mcpTransport}
|
|
314
314
|
- Features: ${featuresStr}
|
|
315
315
|
${transportNote}
|
|
@@ -323,21 +323,21 @@ ${transportNote}
|
|
|
323
323
|
|
|
324
324
|
${langRules}
|
|
325
325
|
|
|
326
|
-
## Boas
|
|
326
|
+
## Boas Práticas MCP
|
|
327
327
|
- Nomes de tools em snake_case e descritivos
|
|
328
|
-
- Retorne arrays de \`content\`,
|
|
329
|
-
- Trate nomes de tools/resources desconhecidos com erros
|
|
330
|
-
- Nunca exponha secrets via outputs de tools ou
|
|
328
|
+
- Retorne arrays de \`content\`, não strings puras
|
|
329
|
+
- Trate nomes de tools/resources desconhecidos com erros explÃcitos
|
|
330
|
+
- Nunca exponha secrets via outputs de tools ou conteúdo de resources
|
|
331
331
|
- Documente cada argumento no campo \`description\` do inputSchema
|
|
332
332
|
|
|
333
333
|
## Contexto (${graphrag})
|
|
334
334
|
${mcp ? `- Consulte o DARE MCP Server em http://localhost:3000 para contexto do projeto` : `- Use DARE/BLUEPRINT.md como fonte de verdade`}
|
|
335
335
|
|
|
336
|
-
## Ralph Loop (
|
|
336
|
+
## Ralph Loop (obrigatório antes de DONE)
|
|
337
337
|
1. Build (npm run build / python -m py_compile)
|
|
338
338
|
2. Test (npm test / pytest)
|
|
339
|
-
3. Inspect
|
|
340
|
-
4.
|
|
339
|
+
3. Inspect — teste as tools com MCP Inspector
|
|
340
|
+
4. Só marque DONE se os 3 passos passarem
|
|
341
341
|
`;
|
|
342
342
|
}
|
|
343
343
|
export function generateClaudeCommands(structure) {
|
|
@@ -345,20 +345,20 @@ export function generateClaudeCommands(structure) {
|
|
|
345
345
|
return {
|
|
346
346
|
'dare-design.md': `# /dare-design
|
|
347
347
|
|
|
348
|
-
Gera ou atualiza o \`DARE/DESIGN.md\` a partir de uma
|
|
348
|
+
Gera ou atualiza o \`DARE/DESIGN.md\` a partir de uma descrição.
|
|
349
349
|
|
|
350
350
|
## Como usar
|
|
351
|
-
\`/dare-design Quero uma API REST de
|
|
351
|
+
\`/dare-design Quero uma API REST de autenticação com JWT e refresh token\`
|
|
352
352
|
|
|
353
353
|
## O que fazer
|
|
354
354
|
1. Leia o contexto atual do projeto (package.json, estrutura de pastas)
|
|
355
|
-
2. Se \`DARE/DESIGN.md\`
|
|
355
|
+
2. Se \`DARE/DESIGN.md\` já existir, leia-o antes de atualizar
|
|
356
356
|
3. Crie ou atualize \`DARE/DESIGN.md\` com:
|
|
357
|
-
- **
|
|
358
|
-
- **Objetivos** (checkboxes
|
|
359
|
-
- **
|
|
360
|
-
- **
|
|
361
|
-
4. Confirme com o
|
|
357
|
+
- **Descrição** do que será construÃdo
|
|
358
|
+
- **Objetivos** (checkboxes mensuráveis)
|
|
359
|
+
- **Restrições** técnicas e de negócio
|
|
360
|
+
- **Critérios de sucesso** verificáveis
|
|
361
|
+
4. Confirme com o usuário antes de prosseguir para blueprint
|
|
362
362
|
|
|
363
363
|
$ARGUMENTS
|
|
364
364
|
`,
|
|
@@ -370,38 +370,38 @@ Gera o \`DARE/BLUEPRINT.md\`, \`DARE/dare-dag.yaml\` e \`DARE/TASKS.md\` a parti
|
|
|
370
370
|
\`/dare-blueprint\`
|
|
371
371
|
|
|
372
372
|
## O que fazer
|
|
373
|
-
1. Leia \`DARE/DESIGN.md\`
|
|
373
|
+
1. Leia \`DARE/DESIGN.md\` — obrigatório
|
|
374
374
|
2. Gere \`DARE/BLUEPRINT.md\` com:
|
|
375
|
-
- Stack
|
|
376
|
-
-
|
|
375
|
+
- Stack tecnológico detalhado
|
|
376
|
+
- Módulos e responsabilidades
|
|
377
377
|
- Contratos de API (endpoints, schemas)
|
|
378
378
|
- Modelo de dados
|
|
379
|
-
-
|
|
380
|
-
3. Gere \`DARE/dare-dag.yaml\` com tasks em grafo de
|
|
379
|
+
- Decisões arquiteturais justificadas
|
|
380
|
+
3. Gere \`DARE/dare-dag.yaml\` com tasks em grafo de dependências
|
|
381
381
|
4. Gere \`DARE/TASKS.md\` com tabela de status
|
|
382
|
-
5. **Aguarde
|
|
382
|
+
5. **Aguarde aprovação humana antes de executar qualquer task**
|
|
383
383
|
|
|
384
384
|
$ARGUMENTS
|
|
385
385
|
`,
|
|
386
386
|
'dare-execute.md': `# /dare-execute
|
|
387
387
|
|
|
388
|
-
Executa uma task
|
|
388
|
+
Executa uma task especÃfica do \`DARE/dare-dag.yaml\` seguindo o Ralph Loop.
|
|
389
389
|
|
|
390
390
|
## Como usar
|
|
391
391
|
\`/dare-execute task-001\`
|
|
392
392
|
\`/dare-execute task-003 --force\`
|
|
393
393
|
|
|
394
394
|
## O que fazer
|
|
395
|
-
1. Leia \`DARE/BLUEPRINT.md\`
|
|
395
|
+
1. Leia \`DARE/BLUEPRINT.md\` — obrigatório antes de qualquer implementação
|
|
396
396
|
2. Leia a task especificada em \`DARE/dare-dag.yaml\`
|
|
397
|
-
3. Verifique se todas as
|
|
397
|
+
3. Verifique se todas as dependências da task estão com status DONE
|
|
398
398
|
4. Implemente a task
|
|
399
399
|
5. Execute o Ralph Loop:
|
|
400
400
|
- Build: compile sem erros
|
|
401
401
|
- Test: todos os testes passando
|
|
402
402
|
- Lint: sem warnings${isMcp ? '\n - Inspect: teste com MCP Inspector' : ''}
|
|
403
403
|
6. Atualize o status da task em \`DARE/TASKS.md\` para DONE
|
|
404
|
-
7. Informe o
|
|
404
|
+
7. Informe o usuário e sugira a próxima task disponÃvel
|
|
405
405
|
|
|
406
406
|
$ARGUMENTS
|
|
407
407
|
`,
|
|
@@ -415,14 +415,37 @@ Exibe o status atual de todas as tasks do projeto.
|
|
|
415
415
|
|
|
416
416
|
## O que fazer
|
|
417
417
|
1. Leia \`DARE/TASKS.md\` e \`DARE/dare-dag.yaml\`
|
|
418
|
-
2. Exiba uma tabela com: ID,
|
|
419
|
-
3. Destaque as tasks que
|
|
420
|
-
4. Calcule e exiba o progresso geral (%
|
|
418
|
+
2. Exiba uma tabela com: ID, tÃtulo, status, dependências
|
|
419
|
+
3. Destaque as tasks que estão prontas para execução (dependências satisfeitas)
|
|
420
|
+
4. Calcule e exiba o progresso geral (% concluÃdo)
|
|
421
421
|
|
|
422
422
|
$ARGUMENTS
|
|
423
423
|
`,
|
|
424
424
|
};
|
|
425
425
|
}
|
|
426
|
+
export function generateSharedConfig(projectName) {
|
|
427
|
+
return `# ${projectName} — DARE Framework
|
|
428
|
+
|
|
429
|
+
## Design → Architect → Review → Execute
|
|
430
|
+
|
|
431
|
+
### Estrutura
|
|
432
|
+
- \`DARE/\` — documentação de design e execução
|
|
433
|
+
- \`DARE/EXECUTION/\` — tasks executadas e telemetria
|
|
434
|
+
- \`templates/\` — templates de documentação DARE
|
|
435
|
+
|
|
436
|
+
### Ralph Loop
|
|
437
|
+
Antes de marcar qualquer task como DONE:
|
|
438
|
+
1. Build ✅
|
|
439
|
+
2. Test ✅
|
|
440
|
+
3. Lint ✅
|
|
441
|
+
|
|
442
|
+
### Fluxo de Trabalho
|
|
443
|
+
1. \`/generate-design\` — cria DESIGN.md
|
|
444
|
+
2. \`/generate-blueprint\` — cria BLUEPRINT.md
|
|
445
|
+
3. \`/generate-tasks\` — cria TASKS.md
|
|
446
|
+
4. \`/execute-task\` — executa cada task com Ralph Loop
|
|
447
|
+
`;
|
|
448
|
+
}
|
|
426
449
|
export function generateClaudeSettings(stack) {
|
|
427
450
|
const buildCmd = stack.backend === 'rust-axum'
|
|
428
451
|
? 'cargo build'
|
|
@@ -459,7 +482,7 @@ export function generateClaudeSettings(stack) {
|
|
|
459
482
|
hooks: [
|
|
460
483
|
{
|
|
461
484
|
type: 'command',
|
|
462
|
-
command: `echo "
|
|
485
|
+
command: `echo "✅ File saved. Remember to run Ralph Loop: ${buildCmd} && ${testCmd} && ${lintCmd}"`,
|
|
463
486
|
},
|
|
464
487
|
],
|
|
465
488
|
},
|
|
@@ -467,33 +490,4 @@ export function generateClaudeSettings(stack) {
|
|
|
467
490
|
},
|
|
468
491
|
}, null, 2);
|
|
469
492
|
}
|
|
470
|
-
export function generateSharedConfig(projectName) {
|
|
471
|
-
return `# DARE - ${projectName}
|
|
472
|
-
|
|
473
|
-
## Methodology Files
|
|
474
|
-
- **DESIGN.md** - Requirements and goals (Phase D)
|
|
475
|
-
- **BLUEPRINT.md** - Technical architecture (Phase A)
|
|
476
|
-
- **TASKS.md** - Task tracking (Phase E)
|
|
477
|
-
- **dare-dag.yaml** - Task dependency graph (Phase E)
|
|
478
|
-
- **EXECUTION/** - Task execution logs
|
|
479
|
-
|
|
480
|
-
## Quick Start
|
|
481
|
-
\`\`\`bash
|
|
482
|
-
# 1. Define requirements
|
|
483
|
-
dare design "Describe your feature"
|
|
484
|
-
|
|
485
|
-
# 2. Generate blueprint and task graph
|
|
486
|
-
dare blueprint
|
|
487
|
-
|
|
488
|
-
# 3. Execute tasks in parallel
|
|
489
|
-
dare execute --parallel --runner cursor
|
|
490
|
-
\`\`\`
|
|
491
|
-
|
|
492
|
-
## Ralph Loop
|
|
493
|
-
Before marking any task as DONE:
|
|
494
|
-
1. Build ✅
|
|
495
|
-
2. Test ✅
|
|
496
|
-
3. Lint ✅
|
|
497
|
-
`;
|
|
498
|
-
}
|
|
499
493
|
//# sourceMappingURL=templates.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"templates.js","sourceRoot":"","sources":["../../src/utils/templates.ts"],"names":[],"mappings":"AAeA,MAAM,UAAU,mBAAmB,CAAC,MAAsB;IACxD,MAAM,EAAE,OAAO,EAAE,QAAQ,EAAE,QAAQ,EAAE,GAAG,EAAE,GAAG,MAAM,CAAC;IAEpD,MAAM,YAAY,GAA2B;QAC3C,WAAW,EAAE;;;;;;+DAM8C;QAC3D,aAAa,EAAE;;;;;iCAKc;QAC7B,gBAAgB,EAAE;;;;;mCAKa;QAC/B,aAAa,EAAE;;;;;6CAK0B;KAC1C,CAAC;IAEF,MAAM,aAAa,GAA2B;QAC5C,KAAK,EAAE;;;;;uCAK4B;QACnC,GAAG,EAAE;;;;;sCAK6B;KACnC,CAAC;IAEF,OAAO;;;;;;;;;;;;;;;;;;;;EAoBP,OAAO,IAAI,YAAY,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,YAAY,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,EAAE;;EAE7D,QAAQ,IAAI,aAAa,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,aAAa,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,EAAE;;uBAE7C,QAAQ;EAC7B,GAAG,CAAC,CAAC,CAAC;oFAC4E,CAAC,CAAC,CAAC,mEAAmE;;;;;;;CAOzJ,CAAC;AACF,CAAC;AAED,MAAM,UAAU,wBAAwB,CAAC,MAAsB;IAC7D,MAAM,EAAE,OAAO,EAAE,QAAQ,EAAE,QAAQ,EAAE,GAAG,EAAE,GAAG,MAAM,CAAC;IAEpD,OAAO;;;;;;;;;;;;;EAaP,OAAO,CAAC,CAAC,CAAC,cAAc,OAAO,EAAE,CAAC,CAAC,CAAC,EAAE;EACtC,QAAQ,CAAC,CAAC,CAAC,eAAe,QAAQ,EAAE,CAAC,CAAC,CAAC,EAAE;;uBAEpB,QAAQ;EAC7B,GAAG,CAAC,CAAC,CAAC;iDACyC,CAAC,CAAC,CAAC,sCAAsC;;;;;;;CAOzF,CAAC;AACF,CAAC;AAED,MAAM,UAAU,sBAAsB,CAAC,MAAyB;IAC9D,MAAM,EAAE,YAAY,GAAG,OAAO,EAAE,WAAW,GAAG,SAAS,EAAE,WAAW,GAAG,CAAC,OAAO,CAAC,EAAE,QAAQ,EAAE,GAAG,EAAE,GAAG,MAAM,CAAC;IAC3G,MAAM,WAAW,GAAG,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAE3C,MAAM,SAAS,GAAG,WAAW,KAAK,QAAQ;QACxC,CAAC,CAAC;;;;;+BAKyB;QAC3B,CAAC,CAAC;;;;;oDAK8C,CAAC;IAEnD,MAAM,aAAa,GAAG,YAAY,KAAK,OAAO;QAC5C,CAAC,CAAC,
|
|
1
|
+
{"version":3,"file":"templates.js","sourceRoot":"","sources":["../../src/utils/templates.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@dewtech/dare-cli",
|
|
3
|
-
"version": "0.3.
|
|
3
|
+
"version": "0.3.8",
|
|
4
4
|
"description": "DARE Framework CLI - Interactive project setup and task execution",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"main": "./dist/index.js",
|
|
@@ -15,18 +15,19 @@
|
|
|
15
15
|
}
|
|
16
16
|
},
|
|
17
17
|
"files": [
|
|
18
|
-
"dist"
|
|
18
|
+
"dist",
|
|
19
|
+
"templates"
|
|
19
20
|
],
|
|
20
21
|
"dependencies": {
|
|
21
|
-
"@dewtech/dare-core": "^0.3.
|
|
22
|
+
"@dewtech/dare-core": "^0.3.5",
|
|
22
23
|
"chalk": "^5.3.0",
|
|
23
24
|
"commander": "^11.0.0",
|
|
24
25
|
"fs-extra": "^11.1.1",
|
|
25
26
|
"inquirer": "^9.2.0",
|
|
26
27
|
"ora": "^7.0.1",
|
|
27
28
|
"yaml": "^2.3.1",
|
|
28
|
-
"@dewtech/dare-graphrag": "^0.3.
|
|
29
|
-
"@dewtech/dare-mcp-server": "^0.3.
|
|
29
|
+
"@dewtech/dare-graphrag": "^0.3.5",
|
|
30
|
+
"@dewtech/dare-mcp-server": "^0.3.5"
|
|
30
31
|
},
|
|
31
32
|
"devDependencies": {
|
|
32
33
|
"@types/fs-extra": "^11.0.1",
|
|
@@ -57,7 +58,8 @@
|
|
|
57
58
|
"node": ">=18.0.0"
|
|
58
59
|
},
|
|
59
60
|
"scripts": {
|
|
60
|
-
"
|
|
61
|
+
"sync": "tsx scripts/sync-implementations.ts",
|
|
62
|
+
"build": "tsx scripts/sync-implementations.ts && tsc",
|
|
61
63
|
"dev": "tsx watch src/bin/dare.ts",
|
|
62
64
|
"test": "vitest run",
|
|
63
65
|
"lint": "eslint src --ext .ts",
|
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "{{PROJECT_NAME}}",
|
|
3
|
+
"version": "0.1.0",
|
|
4
|
+
"description": "",
|
|
5
|
+
"scripts": {
|
|
6
|
+
"build": "nest build",
|
|
7
|
+
"start": "nest start",
|
|
8
|
+
"start:dev": "nest start --watch",
|
|
9
|
+
"start:prod": "node dist/main",
|
|
10
|
+
"test": "jest",
|
|
11
|
+
"test:watch": "jest --watch",
|
|
12
|
+
"test:cov": "jest --coverage",
|
|
13
|
+
"lint": "eslint \"{src,apps,libs,test}/**/*.ts\" --fix"
|
|
14
|
+
},
|
|
15
|
+
"dependencies": {
|
|
16
|
+
"@nestjs/common": "^11.0.0",
|
|
17
|
+
"@nestjs/core": "^11.0.0",
|
|
18
|
+
"@nestjs/platform-express": "^11.0.0",
|
|
19
|
+
"@nestjs/config": "^3.0.0",
|
|
20
|
+
"@nestjs/typeorm": "^10.0.0",
|
|
21
|
+
"typeorm": "^0.3.0",
|
|
22
|
+
"pg": "^8.11.0",
|
|
23
|
+
"class-validator": "^0.14.0",
|
|
24
|
+
"class-transformer": "^0.5.0",
|
|
25
|
+
"reflect-metadata": "^0.1.13",
|
|
26
|
+
"rxjs": "^7.8.0"
|
|
27
|
+
},
|
|
28
|
+
"devDependencies": {
|
|
29
|
+
"@nestjs/cli": "^11.0.0",
|
|
30
|
+
"@nestjs/schematics": "^11.0.0",
|
|
31
|
+
"@nestjs/testing": "^11.0.0",
|
|
32
|
+
"@types/jest": "^29.0.0",
|
|
33
|
+
"@types/node": "^20.0.0",
|
|
34
|
+
"@typescript-eslint/eslint-plugin": "^6.0.0",
|
|
35
|
+
"@typescript-eslint/parser": "^6.0.0",
|
|
36
|
+
"eslint": "^8.0.0",
|
|
37
|
+
"jest": "^29.0.0",
|
|
38
|
+
"ts-jest": "^29.0.0",
|
|
39
|
+
"typescript": "^5.0.0"
|
|
40
|
+
},
|
|
41
|
+
"jest": {
|
|
42
|
+
"moduleFileExtensions": ["js", "json", "ts"],
|
|
43
|
+
"rootDir": "src",
|
|
44
|
+
"testRegex": ".*\\.spec\\.ts$",
|
|
45
|
+
"transform": { "^.+\\.(t|j)s$": "ts-jest" },
|
|
46
|
+
"collectCoverageFrom": ["**/*.(t|j)s"],
|
|
47
|
+
"coverageDirectory": "../coverage",
|
|
48
|
+
"testEnvironment": "node"
|
|
49
|
+
}
|
|
50
|
+
}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import { Controller, Get } from '@nestjs/common';
|
|
2
|
+
import { AppService } from './app.service';
|
|
3
|
+
|
|
4
|
+
@Controller()
|
|
5
|
+
export class AppController {
|
|
6
|
+
constructor(private readonly appService: AppService) {}
|
|
7
|
+
|
|
8
|
+
@Get('health')
|
|
9
|
+
health(): { status: string } {
|
|
10
|
+
return this.appService.health();
|
|
11
|
+
}
|
|
12
|
+
}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import { Module } from '@nestjs/common';
|
|
2
|
+
import { ConfigModule } from '@nestjs/config';
|
|
3
|
+
import { AppController } from './app.controller';
|
|
4
|
+
import { AppService } from './app.service';
|
|
5
|
+
|
|
6
|
+
@Module({
|
|
7
|
+
imports: [
|
|
8
|
+
ConfigModule.forRoot({
|
|
9
|
+
isGlobal: true,
|
|
10
|
+
}),
|
|
11
|
+
],
|
|
12
|
+
controllers: [AppController],
|
|
13
|
+
providers: [AppService],
|
|
14
|
+
})
|
|
15
|
+
export class AppModule {}
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
import { NestFactory } from '@nestjs/core';
|
|
2
|
+
import { ValidationPipe } from '@nestjs/common';
|
|
3
|
+
import { AppModule } from './app.module';
|
|
4
|
+
|
|
5
|
+
async function bootstrap() {
|
|
6
|
+
const app = await NestFactory.create(AppModule);
|
|
7
|
+
|
|
8
|
+
app.useGlobalPipes(
|
|
9
|
+
new ValidationPipe({
|
|
10
|
+
whitelist: true,
|
|
11
|
+
forbidNonWhitelisted: true,
|
|
12
|
+
transform: true,
|
|
13
|
+
}),
|
|
14
|
+
);
|
|
15
|
+
|
|
16
|
+
app.enableCors();
|
|
17
|
+
app.setGlobalPrefix('api');
|
|
18
|
+
|
|
19
|
+
const port = process.env.PORT ?? 3000;
|
|
20
|
+
await app.listen(port);
|
|
21
|
+
console.log(`Application running on port ${port}`);
|
|
22
|
+
}
|
|
23
|
+
|
|
24
|
+
bootstrap();
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
{
|
|
2
|
+
"compilerOptions": {
|
|
3
|
+
"module": "commonjs",
|
|
4
|
+
"declaration": true,
|
|
5
|
+
"removeComments": true,
|
|
6
|
+
"emitDecoratorMetadata": true,
|
|
7
|
+
"experimentalDecorators": true,
|
|
8
|
+
"allowSyntheticDefaultImports": true,
|
|
9
|
+
"target": "ES2021",
|
|
10
|
+
"sourceMap": true,
|
|
11
|
+
"outDir": "./dist",
|
|
12
|
+
"baseUrl": "./",
|
|
13
|
+
"incremental": true,
|
|
14
|
+
"skipLibCheck": true,
|
|
15
|
+
"strictNullChecks": false,
|
|
16
|
+
"noImplicitAny": false,
|
|
17
|
+
"strictBindCallApply": false,
|
|
18
|
+
"forceConsistentCasingInFileNames": false,
|
|
19
|
+
"noFallthroughCasesInSwitch": false
|
|
20
|
+
}
|
|
21
|
+
}
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
APP_NAME={{PROJECT_NAME}}
|
|
2
|
+
APP_ENV=local
|
|
3
|
+
APP_KEY=
|
|
4
|
+
APP_DEBUG=true
|
|
5
|
+
APP_URL=http://localhost
|
|
6
|
+
|
|
7
|
+
DB_CONNECTION=pgsql
|
|
8
|
+
DB_HOST=127.0.0.1
|
|
9
|
+
DB_PORT=5432
|
|
10
|
+
DB_DATABASE={{PROJECT_NAME}}
|
|
11
|
+
DB_USERNAME=postgres
|
|
12
|
+
DB_PASSWORD=postgres
|
|
13
|
+
|
|
14
|
+
CACHE_STORE=redis
|
|
15
|
+
QUEUE_CONNECTION=redis
|
|
16
|
+
SESSION_DRIVER=redis
|
|
17
|
+
|
|
18
|
+
REDIS_HOST=127.0.0.1
|
|
19
|
+
REDIS_PASSWORD=null
|
|
20
|
+
REDIS_PORT=6379
|
|
21
|
+
|
|
22
|
+
JWT_SECRET=
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
<?php
|
|
2
|
+
|
|
3
|
+
declare(strict_types=1);
|
|
4
|
+
|
|
5
|
+
namespace App\Http\Controllers;
|
|
6
|
+
|
|
7
|
+
use Illuminate\Http\JsonResponse;
|
|
8
|
+
|
|
9
|
+
class HealthController extends Controller
|
|
10
|
+
{
|
|
11
|
+
public function __invoke(): JsonResponse
|
|
12
|
+
{
|
|
13
|
+
return response()->json(['status' => 'ok']);
|
|
14
|
+
}
|
|
15
|
+
}
|