r2pde-ai 0.1.5 → 0.1.7
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/ONBOARDING-QUICKSTART.md +9 -0
- package/README.md +11 -2
- package/dist/src/commands/init.js +14 -2
- package/dist/src/commands/scaffold-create.js +19 -20
- package/dist/templates/scaffold.yaml +26 -0
- package/package.json +2 -1
- package/templates/contract.template.md +13 -0
- package/templates/manifest.template.md +13 -0
- package/templates/requirement.template.md +12 -0
- package/templates/scaffold.yaml +26 -0
package/ONBOARDING-QUICKSTART.md
CHANGED
|
@@ -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-
|
|
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-
|
|
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
|
|
171
|
-
// Corrigir caminho dos templates para dist/templates
|
|
170
|
+
// Step 6 – Copy templates to .r2pde-ai/templates
|
|
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
|
+
// Step 7 – Copy README.md and scaffold-guide.yaml to project root, always overwrite
|
|
180
|
+
const readmeSrc = path.resolve(__dirname, '../../README.md');
|
|
181
|
+
const readmeDest = path.resolve(cwd, 'README.md');
|
|
182
|
+
if (fs.existsSync(readmeSrc)) {
|
|
183
|
+
fs.copyFileSync(readmeSrc, readmeDest);
|
|
184
|
+
logInfo('README.md criado/atualizado na raiz do projeto.');
|
|
185
|
+
}
|
|
186
|
+
const scaffoldGuideSrc = path.resolve(__dirname, '../../scaffold-guide.yaml');
|
|
187
|
+
const scaffoldGuideDest = path.resolve(cwd, 'scaffold-guide.yaml');
|
|
188
|
+
if (fs.existsSync(scaffoldGuideSrc)) {
|
|
189
|
+
fs.copyFileSync(scaffoldGuideSrc, scaffoldGuideDest);
|
|
190
|
+
logInfo('scaffold-guide.yaml criado/atualizado na raiz do projeto.');
|
|
191
|
+
}
|
|
180
192
|
const guideContent = [
|
|
181
193
|
'# r2pde-ai GUIDE',
|
|
182
194
|
'',
|
|
@@ -144,29 +144,28 @@ 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 (
|
|
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
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
150
|
+
const cwd = process.cwd();
|
|
151
|
+
let guidePath = opts.guide ? path.resolve(opts.guide) : path.resolve(cwd, 'scaffold.yaml');
|
|
152
|
+
// Se não existir scaffold.yaml na raiz, copiar do template
|
|
153
|
+
if (!fs.existsSync(guidePath)) {
|
|
154
|
+
// Tenta copiar de dist/templates primeiro, depois de templates
|
|
155
|
+
let templatePath = path.resolve(__dirname, '../../dist/templates/scaffold.yaml');
|
|
156
|
+
if (!fs.existsSync(templatePath)) {
|
|
157
|
+
templatePath = path.resolve(__dirname, '../../templates/scaffold.yaml');
|
|
158
|
+
}
|
|
159
|
+
if (fs.existsSync(templatePath)) {
|
|
160
|
+
fs.copyFileSync(templatePath, guidePath);
|
|
161
|
+
logSuccess('Arquivo scaffold.yaml copiado para a raiz do projeto.');
|
|
162
|
+
}
|
|
163
|
+
else {
|
|
164
|
+
console.error('Arquivo scaffold.yaml não encontrado nem na raiz nem nos templates do pacote.');
|
|
165
|
+
process.exit(1);
|
|
159
166
|
}
|
|
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));
|
|
166
|
-
process.exit(1);
|
|
167
167
|
}
|
|
168
|
-
|
|
169
|
-
scaffoldCreateHandler(opts).catch((err) => {
|
|
168
|
+
scaffoldCreateHandler({ guide: guidePath }).catch((err) => {
|
|
170
169
|
console.error(err);
|
|
171
170
|
process.exit(1);
|
|
172
171
|
});
|
|
@@ -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.
|
|
3
|
+
"version": "0.1.7",
|
|
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,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
|