r2pde-ai 0.1.5 → 0.1.6

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.
@@ -1,3 +1,12 @@
1
+ # Scaffold
2
+
3
+ O comando `scaffold-create` exige o parâmetro `--guide <yaml>`, que deve apontar para um arquivo YAML na raiz do projeto. O comando `init` copia automaticamente um `scaffold.yaml` de exemplo para a raiz do projeto.
4
+
5
+ Exemplo:
6
+
7
+ ```sh
8
+ r2pde-ai scaffold-create --guide ./scaffold.yaml
9
+ ```
1
10
  # Corporate Agenda Quickstart Guide
2
11
 
3
12
  > **Build a Professional Corporate Agenda App with User Management and Calendar Sync (Outlook & Google) using r2pde-ai**
package/README.md CHANGED
@@ -401,13 +401,22 @@ See [LICENSE](./LICENSE) for full terms.
401
401
  Você pode gerar automaticamente um projeto de exemplo baseado no arquivo de guia (por padrão ONBOARDING-QUICKSTART.md) usando:
402
402
 
403
403
  ```bash
404
- r2pde-ai scaffold-from-guide
404
+ r2pde-ai scaffold-create --guide ./scaffold.yaml
405
405
  ```
406
406
 
407
407
  Ou especificar um guia e pasta de destino personalizados:
408
408
 
409
409
  ```bash
410
- r2pde-ai scaffold-from-guide --guide ./meu-guia.md --dest ./meu-projeto-exemplo
410
+ r2pde-ai scaffold-create --guide ./meu-guia.yaml
411
+ ## Scaffold
412
+
413
+ O comando `scaffold-create` agora exige explicitamente o parâmetro `--guide <yaml>`, que deve apontar para um arquivo YAML na raiz do projeto. O comando `init` copia automaticamente um `scaffold.yaml` de exemplo para a raiz do projeto. Edite esse arquivo conforme necessário para gerar scaffolds customizados.
414
+
415
+ Exemplo de uso:
416
+
417
+ ```sh
418
+ r2pde-ai scaffold-create --guide ./scaffold.yaml
419
+ ```
411
420
  ```
412
421
 
413
422
  Isso executa todos os comandos do guia, preenchendo automaticamente os prompts, e gera uma estrutura pronta para testes, onboarding ou demonstração.
@@ -167,8 +167,7 @@ export async function initCommand() {
167
167
  - r2pde-ai: 0.1.0
168
168
  `;
169
169
  fs.writeFileSync(paths.index, indexContent, { encoding: 'utf8' });
170
- // Step 6 Copy templates
171
- // Corrigir caminho dos templates para dist/templates
170
+ // Step 6 Copy templates and scaffold.yaml to project root
172
171
  const templateFiles = [
173
172
  { src: path.resolve(__dirname, '../../templates/manifest.template.md'), dest: path.resolve(paths.templates, 'manifest.template.md') },
174
173
  { src: path.resolve(__dirname, '../../templates/contract.template.md'), dest: path.resolve(paths.templates, 'contract.template.md') },
@@ -177,6 +176,19 @@ export async function initCommand() {
177
176
  for (const { src, dest } of templateFiles) {
178
177
  fs.copyFileSync(src, dest);
179
178
  }
179
+ // Copy scaffold.yaml from dist/templates (if built) or templates (dev) to project root
180
+ let scaffoldSrc = path.resolve(__dirname, '../../dist/templates/scaffold.yaml');
181
+ if (!fs.existsSync(scaffoldSrc)) {
182
+ scaffoldSrc = path.resolve(__dirname, '../../templates/scaffold.yaml');
183
+ }
184
+ const scaffoldDest = path.resolve(cwd, 'scaffold.yaml');
185
+ if (!fs.existsSync(scaffoldDest)) {
186
+ fs.copyFileSync(scaffoldSrc, scaffoldDest);
187
+ logInfo('Arquivo scaffold.yaml copiado para a raiz do projeto. Edite conforme necessário para usar o scaffold-create.');
188
+ }
189
+ else {
190
+ logWarn('Arquivo scaffold.yaml já existe na raiz do projeto. Não sobrescrito.');
191
+ }
180
192
  const guideContent = [
181
193
  '# r2pde-ai GUIDE',
182
194
  '',
@@ -144,29 +144,15 @@ function copyFolderRecursiveSync(source, target) {
144
144
  }
145
145
  }
146
146
  export const scaffoldCreateCommand = new Command('scaffold-create')
147
- .description('Gera um projeto de exemplo a partir de um arquivo de guia YAML')
148
- .option('--guide <yaml>', 'Caminho para o arquivo de guia YAML (busca automática se não especificado)')
147
+ .description('Gera um projeto de exemplo a partir de um arquivo de guia YAML. Se --guide não for informado, será usado ./scaffold.yaml da raiz do projeto.')
148
+ .option('--guide <yaml>', 'Caminho para o arquivo de guia YAML (opcional, padrão: ./scaffold.yaml na raiz do projeto)')
149
149
  .action((opts) => {
150
- const candidates = [];
151
- if (opts.guide) {
152
- candidates.push(path.resolve(opts.guide));
153
- }
154
- else {
155
- // Caminho relativo ao CLI instalado globalmente
156
- let cliDir = path.dirname(new URL(import.meta.url).pathname);
157
- if (process.platform === 'win32' && cliDir.startsWith('/')) {
158
- cliDir = cliDir.slice(1);
159
- }
160
- candidates.push(path.resolve(process.cwd(), 'scaffold-guide.yaml'), path.resolve(cliDir, '../../scaffold-guide.yaml'), path.resolve(cliDir, '../scaffold-guide.yaml'));
161
- }
162
- const foundPath = candidates.find(f => f && fs.existsSync(f));
163
- if (!foundPath) {
164
- console.error('Arquivo scaffold-guide.yaml não encontrado em nenhum local padrão. Caminhos testados:');
165
- candidates.forEach(f => console.error(' - ' + f));
150
+ let guidePath = opts.guide ? path.resolve(opts.guide) : path.resolve(process.cwd(), 'scaffold.yaml');
151
+ if (!fs.existsSync(guidePath)) {
152
+ console.error('Arquivo YAML não encontrado: ' + guidePath + '\nInforme --guide <yaml> ou rode o comando init para gerar um scaffold.yaml de exemplo.');
166
153
  process.exit(1);
167
154
  }
168
- opts.guide = foundPath;
169
- scaffoldCreateHandler(opts).catch((err) => {
155
+ scaffoldCreateHandler({ guide: guidePath }).catch((err) => {
170
156
  console.error(err);
171
157
  process.exit(1);
172
158
  });
@@ -0,0 +1,26 @@
1
+ project:
2
+ name: Example Project
3
+ root: scaffold_done
4
+ description: |
5
+ Example YAML for r2pde-ai scaffold. Replace with your project details.
6
+ steps:
7
+ - type: mkdir
8
+ path: .r2pde-ai
9
+ comment: Create config folder.
10
+ - type: cli
11
+ command: npm init -y
12
+ comment: Initialize npm.
13
+ - type: git-init
14
+ comment: Initialize git repo.
15
+ - type: cli
16
+ command: npx r2pde-ai init
17
+ answers:
18
+ - Example Project
19
+ - Micro SaaS
20
+ - Monolith
21
+ - Clean Code
22
+ - MVP
23
+ - English
24
+ comment: Run r2pde-ai init with defaults.
25
+ files:
26
+ - README.md
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "r2pde-ai",
3
- "version": "0.1.5",
3
+ "version": "0.1.6",
4
4
  "description": "Pilot Driven Engineering — A CLI framework that bridges the gap between architectural intent and AI-generated code.",
5
5
  "license": "MIT",
6
6
  "main": "dist/index.js",
@@ -44,6 +44,7 @@
44
44
  },
45
45
  "files": [
46
46
  "dist",
47
+ "templates",
47
48
  "README.md",
48
49
  "LICENSE",
49
50
  "CHANGELOG.md",
@@ -0,0 +1,13 @@
1
+ # Contract: {{name}}
2
+
3
+ ## Description
4
+ {{description}}
5
+
6
+ ## Details
7
+ - Owner: {{owner}}
8
+ - Date: {{date}}
9
+
10
+ ---
11
+
12
+ ## Terms
13
+ {{terms}}
@@ -0,0 +1,13 @@
1
+ # Manifest: {{name}}
2
+
3
+ ## Purpose
4
+ {{purpose}}
5
+
6
+ ## Scope
7
+ {{scope}}
8
+
9
+ ---
10
+
11
+ ## Metadata
12
+ - Created: {{date}}
13
+ - Author: {{author}}
@@ -0,0 +1,12 @@
1
+ # Requirement: {{name}}
2
+
3
+ ## Description
4
+ {{description}}
5
+
6
+ ## Acceptance Criteria
7
+ - [ ] {{criteria}}
8
+
9
+ ---
10
+
11
+ ## Notes
12
+ {{notes}}
@@ -0,0 +1,26 @@
1
+ project:
2
+ name: Example Project
3
+ root: scaffold_done
4
+ description: |
5
+ Example YAML for r2pde-ai scaffold. Replace with your project details.
6
+ steps:
7
+ - type: mkdir
8
+ path: .r2pde-ai
9
+ comment: Create config folder.
10
+ - type: cli
11
+ command: npm init -y
12
+ comment: Initialize npm.
13
+ - type: git-init
14
+ comment: Initialize git repo.
15
+ - type: cli
16
+ command: npx r2pde-ai init
17
+ answers:
18
+ - Example Project
19
+ - Micro SaaS
20
+ - Monolith
21
+ - Clean Code
22
+ - MVP
23
+ - English
24
+ comment: Run r2pde-ai init with defaults.
25
+ files:
26
+ - README.md