@vibe-validate/cli 0.10.2 → 0.11.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.
Files changed (71) hide show
  1. package/README.md +70 -88
  2. package/dist/bin.js +318 -13
  3. package/dist/bin.js.map +1 -1
  4. package/dist/commands/cleanup.d.ts.map +1 -1
  5. package/dist/commands/cleanup.js +5 -16
  6. package/dist/commands/cleanup.js.map +1 -1
  7. package/dist/commands/config.js +0 -15
  8. package/dist/commands/config.js.map +1 -1
  9. package/dist/commands/doctor.d.ts.map +1 -1
  10. package/dist/commands/doctor.js +83 -58
  11. package/dist/commands/doctor.js.map +1 -1
  12. package/dist/commands/generate-workflow.d.ts +2 -2
  13. package/dist/commands/generate-workflow.d.ts.map +1 -1
  14. package/dist/commands/generate-workflow.js +67 -21
  15. package/dist/commands/generate-workflow.js.map +1 -1
  16. package/dist/commands/init.d.ts.map +1 -1
  17. package/dist/commands/init.js +71 -109
  18. package/dist/commands/init.js.map +1 -1
  19. package/dist/commands/state.d.ts.map +1 -1
  20. package/dist/commands/state.js +0 -5
  21. package/dist/commands/state.js.map +1 -1
  22. package/dist/commands/sync-check.d.ts.map +1 -1
  23. package/dist/commands/sync-check.js +5 -14
  24. package/dist/commands/sync-check.js.map +1 -1
  25. package/dist/commands/watch-pr.d.ts +6 -0
  26. package/dist/commands/watch-pr.d.ts.map +1 -0
  27. package/dist/commands/watch-pr.js +282 -0
  28. package/dist/commands/watch-pr.js.map +1 -0
  29. package/dist/schemas/watch-pr-schema.d.ts +261 -0
  30. package/dist/schemas/watch-pr-schema.d.ts.map +1 -0
  31. package/dist/schemas/watch-pr-schema.js +58 -0
  32. package/dist/schemas/watch-pr-schema.js.map +1 -0
  33. package/dist/scripts/generate-watch-pr-schema.d.ts +12 -0
  34. package/dist/scripts/generate-watch-pr-schema.d.ts.map +1 -0
  35. package/dist/scripts/generate-watch-pr-schema.js +35 -0
  36. package/dist/scripts/generate-watch-pr-schema.js.map +1 -0
  37. package/dist/services/ci-provider-registry.d.ts +38 -0
  38. package/dist/services/ci-provider-registry.d.ts.map +1 -0
  39. package/dist/services/ci-provider-registry.js +53 -0
  40. package/dist/services/ci-provider-registry.js.map +1 -0
  41. package/dist/services/ci-provider.d.ts +160 -0
  42. package/dist/services/ci-provider.d.ts.map +1 -0
  43. package/dist/services/ci-provider.js +11 -0
  44. package/dist/services/ci-provider.js.map +1 -0
  45. package/dist/services/ci-providers/github-actions.d.ts +40 -0
  46. package/dist/services/ci-providers/github-actions.d.ts.map +1 -0
  47. package/dist/services/ci-providers/github-actions.js +305 -0
  48. package/dist/services/ci-providers/github-actions.js.map +1 -0
  49. package/dist/utils/check-validation.d.ts +1 -1
  50. package/dist/utils/check-validation.d.ts.map +1 -1
  51. package/dist/utils/check-validation.js +2 -2
  52. package/dist/utils/check-validation.js.map +1 -1
  53. package/dist/utils/config-loader.d.ts +15 -3
  54. package/dist/utils/config-loader.d.ts.map +1 -1
  55. package/dist/utils/config-loader.js +61 -17
  56. package/dist/utils/config-loader.js.map +1 -1
  57. package/dist/utils/context-detector.d.ts +1 -1
  58. package/dist/utils/context-detector.js +1 -1
  59. package/dist/utils/normalize-line-endings.d.ts +53 -0
  60. package/dist/utils/normalize-line-endings.d.ts.map +1 -0
  61. package/dist/utils/normalize-line-endings.js +57 -0
  62. package/dist/utils/normalize-line-endings.js.map +1 -0
  63. package/dist/utils/setup-checks/gitignore-check.d.ts.map +1 -1
  64. package/dist/utils/setup-checks/gitignore-check.js +3 -4
  65. package/dist/utils/setup-checks/gitignore-check.js.map +1 -1
  66. package/dist/utils/template-discovery.d.ts +40 -0
  67. package/dist/utils/template-discovery.d.ts.map +1 -0
  68. package/dist/utils/template-discovery.js +136 -0
  69. package/dist/utils/template-discovery.js.map +1 -0
  70. package/package.json +9 -8
  71. package/watch-pr-result.schema.json +204 -0
package/README.md CHANGED
@@ -30,16 +30,14 @@ npx @vibe-validate/cli validate
30
30
 
31
31
  ## Quick Start
32
32
 
33
- 1. **Create configuration file** (`vibe-validate.config.mjs`):
33
+ 1. **Create configuration file**:
34
34
 
35
- ```javascript
36
- import { defineConfig, preset } from '@vibe-validate/config';
37
-
38
- export default defineConfig({
39
- preset: preset('typescript-nodejs'),
40
- });
35
+ ```bash
36
+ npx vibe-validate init --template typescript-nodejs
41
37
  ```
42
38
 
39
+ This creates `vibe-validate.config.yaml` with sensible defaults.
40
+
43
41
  2. **Run validation**:
44
42
 
45
43
  ```bash
@@ -66,7 +64,7 @@ npx vibe-validate validate [options]
66
64
  - `--force` - Bypass cache and force re-validation
67
65
  - `--no-cache` - Disable caching for this run
68
66
  - `-v, --verbose` - Show detailed progress and output
69
- - `--config <path>` - Path to config file (default: `vibe-validate.config.mjs`)
67
+ - `--config <path>` - Path to config file (default: `vibe-validate.config.yaml`)
70
68
 
71
69
  **Examples:**
72
70
 
@@ -81,7 +79,7 @@ npx vibe-validate validate --force
81
79
  npx vibe-validate validate --verbose
82
80
 
83
81
  # Custom config file
84
- npx vibe-validate validate --config ./custom-config.mjs
82
+ npx vibe-validate validate --config ./custom-config.yaml
85
83
  ```
86
84
 
87
85
  **Exit Codes:**
@@ -145,8 +143,8 @@ npx vibe-validate config --verbose
145
143
 
146
144
  **Use cases:**
147
145
  - Verify configuration is loaded correctly
148
- - Debug preset behavior
149
- - Inspect default values
146
+ - Debug configuration behavior
147
+ - Inspect settings
150
148
 
151
149
  ---
152
150
 
@@ -185,7 +183,7 @@ npx vibe-validate sync-check [options]
185
183
  **Options:**
186
184
  - `--main-branch <branch>` - Main branch name (overrides config, default: `main`)
187
185
  - `--remote-origin <remote>` - Remote origin name (overrides config, default: `origin`)
188
- - `--format <format>` - Output format (human/yaml/json/auto)
186
+ - `--yaml` - Suppress human-friendly output, output YAML only
189
187
 
190
188
  **Exit Codes:**
191
189
  - `0` - Up to date or no remote
@@ -207,31 +205,28 @@ npx vibe-validate sync-check --main-branch develop --remote-origin upstream
207
205
 
208
206
  **Configuration:**
209
207
 
210
- Set defaults in `vibe-validate.config.mjs`:
208
+ Set defaults in `vibe-validate.config.yaml`:
211
209
 
212
- ```javascript
213
- export default defineConfig({
214
- git: {
215
- mainBranch: 'main', // Default: 'main'
216
- remoteOrigin: 'origin', // Default: 'origin'
217
- },
218
- });
210
+ <!-- config:partial -->
211
+ ```yaml
212
+ git:
213
+ mainBranch: main # Default: 'main'
214
+ remoteOrigin: origin # Default: 'origin'
219
215
  ```
220
216
 
221
217
  **Common scenarios:**
222
218
 
223
- ```javascript
224
- // Forked repository - sync with upstream
225
- git: {
226
- mainBranch: 'main',
227
- remoteOrigin: 'upstream',
228
- }
219
+ <!-- config:partial -->
220
+ ```yaml
221
+ # Forked repository - sync with upstream
222
+ git:
223
+ mainBranch: main
224
+ remoteOrigin: upstream
229
225
 
230
- // Legacy project - use master branch
231
- git: {
232
- mainBranch: 'master',
233
- remoteOrigin: 'origin',
234
- }
226
+ # Legacy project - use master branch
227
+ git:
228
+ mainBranch: master
229
+ remoteOrigin: origin
235
230
  ```
236
231
 
237
232
  ---
@@ -361,61 +356,48 @@ npx vibe-validate doctor
361
356
 
362
357
  ## Configuration
363
358
 
364
- Create `vibe-validate.config.mjs` in your project root:
365
-
366
- ```javascript
367
- import { defineConfig } from '@vibe-validate/config';
368
-
369
- export default defineConfig({
370
- validation: {
371
- phases: [
372
- {
373
- name: 'Pre-Qualification',
374
- parallel: true,
375
- steps: [
376
- { name: 'TypeScript', command: 'pnpm typecheck' },
377
- { name: 'ESLint', command: 'pnpm lint' },
378
- ],
379
- },
380
- {
381
- name: 'Testing',
382
- steps: [
383
- { name: 'Unit Tests', command: 'pnpm test' },
384
- ],
385
- },
386
- ],
387
- caching: {
388
- strategy: 'git-tree-hash',
389
- enabled: true,
390
- },
391
- },
392
- git: {
393
- mainBranch: 'main',
394
- remoteOrigin: 'origin',
395
- warnIfBehind: true,
396
- },
397
- output: {
398
- format: 'auto',
399
- showProgress: true,
400
- },
401
- });
402
- ```
403
-
404
- **Or use presets:**
405
-
406
- ```javascript
407
- import { defineConfig, preset } from '@vibe-validate/config';
408
-
409
- export default defineConfig({
410
- preset: preset('typescript-nodejs'),
411
- });
412
- ```
413
-
414
- **Available presets:**
359
+ Create `vibe-validate.config.yaml` in your project root:
360
+
361
+ <!-- config:example -->
362
+ ```yaml
363
+ # JSON Schema for IDE autocomplete
364
+ $schema: https://unpkg.com/@vibe-validate/config/vibe-validate.schema.json
365
+
366
+ git:
367
+ mainBranch: main
368
+ remoteOrigin: origin
369
+ warnIfBehind: true
370
+
371
+ validation:
372
+ phases:
373
+ - name: Pre-Qualification
374
+ parallel: true
375
+ steps:
376
+ - name: TypeScript
377
+ command: pnpm typecheck
378
+ - name: ESLint
379
+ command: pnpm lint
380
+
381
+ - name: Testing
382
+ steps:
383
+ - name: Unit Tests
384
+ command: pnpm test
385
+ ```
386
+
387
+ **Or use a config template:**
388
+
389
+ ```bash
390
+ npx vibe-validate init --template typescript-nodejs
391
+ ```
392
+
393
+ **Available templates:**
394
+ - `minimal` - Bare-bones starting point
415
395
  - `typescript-library` - TypeScript library (no runtime)
416
396
  - `typescript-nodejs` - Node.js application with TypeScript
417
397
  - `typescript-react` - React application with TypeScript
418
398
 
399
+ All templates available at: https://github.com/jdutton/vibe-validate/tree/main/config-templates
400
+
419
401
  ## Caching
420
402
 
421
403
  vibe-validate uses **git tree hash-based caching** for deterministic, content-based validation:
@@ -464,6 +446,7 @@ npx vibe-validate state
464
446
 
465
447
  **Output:**
466
448
 
449
+ <!-- validation-result:example -->
467
450
  ```yaml
468
451
  passed: false
469
452
  timestamp: 2025-10-16T20:00:00.000Z
@@ -562,12 +545,11 @@ vv config
562
545
 
563
546
  ## Links
564
547
 
565
- - [Full Documentation](https://github.com/jeffrdutton/vibe-validate#readme)
566
- - [Configuration Guide](https://github.com/jeffrdutton/vibe-validate/blob/main/docs/configuration.md)
567
- - [Presets Reference](https://github.com/jeffrdutton/vibe-validate/blob/main/docs/presets.md)
568
- - [API Reference](https://github.com/jeffrdutton/vibe-validate/blob/main/docs/api/)
569
- - [Examples](https://github.com/jeffrdutton/vibe-validate/tree/main/examples)
548
+ - [Full Documentation](https://github.com/jdutton/vibe-validate#readme)
549
+ - [Configuration Reference](https://github.com/jdutton/vibe-validate/blob/main/docs/configuration-reference.md)
550
+ - [Config Templates Guide](https://github.com/jdutton/vibe-validate/blob/main/config-templates/README.md)
551
+ - [Getting Started](https://github.com/jdutton/vibe-validate/blob/main/docs/getting-started.md)
570
552
 
571
553
  ## License
572
554
 
573
- MIT © [Jeff Dutton](https://github.com/jeffrdutton)
555
+ MIT © [Jeff Dutton](https://github.com/jdutton)
package/dist/bin.js CHANGED
@@ -17,6 +17,7 @@ import { cleanupCommand } from './commands/cleanup.js';
17
17
  import { configCommand } from './commands/config.js';
18
18
  import { generateWorkflowCommand } from './commands/generate-workflow.js';
19
19
  import { doctorCommand } from './commands/doctor.js';
20
+ import { registerWatchPRCommand } from './commands/watch-pr.js';
20
21
  // Read version from package.json at runtime
21
22
  // This approach works with ESM and survives TypeScript compilation
22
23
  const __filename = fileURLToPath(import.meta.url);
@@ -47,6 +48,7 @@ cleanupCommand(program); // vibe-validate cleanup
47
48
  configCommand(program); // vibe-validate config
48
49
  generateWorkflowCommand(program); // vibe-validate generate-workflow
49
50
  doctorCommand(program); // vibe-validate doctor
51
+ registerWatchPRCommand(program); // vibe-validate watch-pr
50
52
  // Custom help handler: --help --verbose shows all subcommand options
51
53
  const args = process.argv;
52
54
  const hasHelp = args.includes('--help') || args.includes('-h');
@@ -60,27 +62,330 @@ program.parse();
60
62
  /**
61
63
  * Show comprehensive help with all subcommand options
62
64
  * For AI assistants: Use `vibe-validate --help --verbose`
65
+ *
66
+ * Outputs in Markdown format for better LLM parsing and perfect docs sync
63
67
  */
64
68
  function showComprehensiveHelp(program) {
65
- console.log('vibe-validate - Agent-friendly validation framework with git tree hash caching\n');
66
- console.log('Commands:\n');
69
+ console.log('# vibe-validate CLI Reference\n');
70
+ console.log('> Agent-friendly validation framework with git tree hash caching\n');
71
+ console.log('## Usage\n');
72
+ console.log('```bash');
73
+ console.log('vibe-validate <command> [options]');
74
+ console.log('```\n');
75
+ console.log('## Commands\n');
76
+ // Detailed command descriptions with exit codes, examples, etc.
77
+ const commandDetails = {
78
+ validate: {
79
+ whatItDoes: [
80
+ '1. Calculates git tree hash of working directory',
81
+ '2. Checks if hash matches cached state',
82
+ '3. If match: exits immediately (~288ms)',
83
+ '4. If no match: runs validation pipeline (~60-90s)',
84
+ '5. Caches result for next run'
85
+ ],
86
+ exitCodes: {
87
+ 0: 'Validation passed (or cached pass)',
88
+ 1: 'Validation failed',
89
+ 2: 'Configuration error'
90
+ },
91
+ creates: ['.vibe-validate-state.yaml (auto-created)'],
92
+ examples: [
93
+ 'vibe-validate validate # Use cache if available',
94
+ 'vibe-validate validate --force # Always run validation',
95
+ 'vibe-validate validate --check # Just check if already passed'
96
+ ]
97
+ },
98
+ init: {
99
+ whatItDoes: [
100
+ 'Creates vibe-validate.config.yaml in project root',
101
+ 'Optionally sets up pre-commit hooks',
102
+ 'Optionally creates GitHub Actions workflow',
103
+ 'Optionally updates .gitignore'
104
+ ],
105
+ exitCodes: {
106
+ 0: 'Configuration created successfully',
107
+ 1: 'Failed (config exists without --force, or invalid template)'
108
+ },
109
+ creates: [
110
+ 'vibe-validate.config.yaml (always)',
111
+ '.husky/pre-commit (with --setup-hooks)',
112
+ '.github/workflows/validate.yml (with --setup-workflow)',
113
+ 'Updates .gitignore (with --fix-gitignore)'
114
+ ],
115
+ examples: [
116
+ 'vibe-validate init # Uses minimal template',
117
+ 'vibe-validate init --template typescript-nodejs',
118
+ 'vibe-validate init --template typescript-nodejs --setup-workflow --setup-hooks',
119
+ 'vibe-validate init --force --template typescript-react # Overwrite existing'
120
+ ]
121
+ },
122
+ 'pre-commit': {
123
+ whatItDoes: [
124
+ '1. Runs sync-check (fails if branch behind origin/main)',
125
+ '2. Runs validate (with caching)',
126
+ '3. Reports git status (warns about unstaged files)'
127
+ ],
128
+ exitCodes: {
129
+ 0: 'Sync OK and validation passed',
130
+ 1: 'Sync failed OR validation failed'
131
+ },
132
+ whenToUse: 'Run before every commit to ensure code is synced and validated',
133
+ errorGuidance: {
134
+ 'sync failed': ['git fetch origin', 'git merge origin/main', 'Resolve conflicts if any', 'vibe-validate pre-commit # Retry'],
135
+ 'validation failed': ['Fix errors shown in output', 'vibe-validate pre-commit # Retry']
136
+ },
137
+ examples: [
138
+ 'vibe-validate pre-commit # Standard pre-commit workflow',
139
+ 'vibe-validate pre-commit --skip-sync # Skip sync check (not recommended)'
140
+ ]
141
+ },
142
+ state: {
143
+ whatItDoes: [
144
+ 'Shows validation pass/fail status',
145
+ 'Shows git tree hash (cache key)',
146
+ 'Shows timestamp of last validation',
147
+ 'Shows error summary (if failed)'
148
+ ],
149
+ exitCodes: {
150
+ 0: 'State file found and read successfully',
151
+ 1: 'State file not found or invalid'
152
+ },
153
+ whenToUse: 'Debug why validation is cached/not cached, or see errors without re-running',
154
+ examples: [
155
+ 'vibe-validate state # Show current state',
156
+ 'vibe-validate state --verbose # Show full error output'
157
+ ]
158
+ },
159
+ 'sync-check': {
160
+ whatItDoes: [
161
+ 'Checks if current branch is behind remote main',
162
+ 'Compares local and remote commit histories',
163
+ 'Reports sync status'
164
+ ],
165
+ exitCodes: {
166
+ 0: 'Up to date or no remote tracking',
167
+ 1: 'Branch is behind (needs merge)',
168
+ 2: 'Git command failed'
169
+ },
170
+ errorGuidance: {
171
+ 'branch behind (exit 1)': ['git fetch origin', 'git merge origin/main # or git rebase origin/main', 'Resolve conflicts if any', 'vibe-validate pre-commit # Retry']
172
+ },
173
+ examples: [
174
+ 'vibe-validate sync-check',
175
+ 'vibe-validate sync-check --yaml # YAML output only'
176
+ ]
177
+ },
178
+ cleanup: {
179
+ whatItDoes: [
180
+ '1. Switches to main branch',
181
+ '2. Pulls latest from origin/main',
182
+ '3. Identifies merged branches (via git log)',
183
+ '4. Deletes confirmed-merged branches',
184
+ '5. Reports cleanup summary'
185
+ ],
186
+ exitCodes: {
187
+ 0: 'Cleanup successful',
188
+ 1: 'Failed (not on deletable branch, git errors)'
189
+ },
190
+ whenToUse: 'After PR merge to clean up local branches',
191
+ examples: [
192
+ 'vibe-validate cleanup --dry-run # Preview',
193
+ 'vibe-validate cleanup # Execute'
194
+ ]
195
+ },
196
+ config: {
197
+ whatItDoes: [
198
+ 'Shows resolved configuration',
199
+ 'Validates configuration structure',
200
+ 'Displays all configuration settings'
201
+ ],
202
+ exitCodes: {
203
+ 0: 'Configuration valid',
204
+ 1: 'Configuration invalid or not found'
205
+ },
206
+ examples: [
207
+ 'vibe-validate config # Show config',
208
+ 'vibe-validate config --validate # Validate only'
209
+ ]
210
+ },
211
+ 'generate-workflow': {
212
+ whatItDoes: [
213
+ 'Generates .github/workflows/validate.yml from config',
214
+ 'Supports matrix mode (multiple Node/OS versions)',
215
+ 'Supports non-matrix mode (separate jobs per phase)',
216
+ 'Can check if workflow is in sync with config'
217
+ ],
218
+ exitCodes: {
219
+ 0: 'Workflow generated (or in sync with --check)',
220
+ 1: 'Generation failed (or out of sync with --check)'
221
+ },
222
+ creates: ['.github/workflows/validate.yml'],
223
+ examples: [
224
+ 'vibe-validate generate-workflow',
225
+ 'vibe-validate generate-workflow --node-versions 20,22 --os ubuntu-latest,macos-latest',
226
+ 'vibe-validate generate-workflow --check # Verify workflow is up to date'
227
+ ]
228
+ },
229
+ doctor: {
230
+ whatItDoes: [
231
+ 'Checks Node.js version (20+)',
232
+ 'Verifies git repository exists',
233
+ 'Checks package manager availability',
234
+ 'Validates configuration file',
235
+ 'Checks pre-commit hook setup',
236
+ 'Verifies GitHub Actions workflow'
237
+ ],
238
+ exitCodes: {
239
+ 0: 'All critical checks passed',
240
+ 1: 'One or more critical checks failed'
241
+ },
242
+ whenToUse: 'Diagnose setup issues or verify environment before using vibe-validate',
243
+ examples: [
244
+ 'vibe-validate doctor # Run diagnostics',
245
+ 'vibe-validate doctor --yaml # YAML output only'
246
+ ]
247
+ },
248
+ 'watch-pr': {
249
+ whatItDoes: [
250
+ '1. Detects PR from current branch (or uses provided PR number)',
251
+ '2. Polls CI provider (GitHub Actions) for check status',
252
+ '3. Shows real-time progress of all matrix jobs',
253
+ '4. On failure: fetches logs and extracts vibe-validate state file',
254
+ '5. Provides actionable recovery commands',
255
+ '6. Exits when all checks complete or timeout reached'
256
+ ],
257
+ exitCodes: {
258
+ 0: 'All checks passed',
259
+ 1: 'One or more checks failed',
260
+ 2: 'Timeout reached before completion'
261
+ },
262
+ whenToUse: 'Monitor CI checks in real-time after pushing to PR, especially useful for AI agents',
263
+ examples: [
264
+ 'git push origin my-branch',
265
+ 'vibe-validate watch-pr # Auto-detect PR',
266
+ 'vibe-validate watch-pr 42 # Watch specific PR',
267
+ 'vibe-validate watch-pr --yaml # YAML output only',
268
+ 'vibe-validate watch-pr --fail-fast # Exit on first failure',
269
+ 'vibe-validate watch-pr --timeout 600 # 10 minute timeout'
270
+ ],
271
+ errorGuidance: {
272
+ 'check fails': [
273
+ '# View error from state file in YAML output',
274
+ 'vibe-validate watch-pr 42 --yaml | yq \'.failures[0].stateFile\'',
275
+ '',
276
+ '# Re-run failed check',
277
+ 'gh run rerun <run-id> --failed'
278
+ ],
279
+ 'no PR found': [
280
+ '# Create PR first',
281
+ 'gh pr create',
282
+ '',
283
+ '# Or specify PR number explicitly',
284
+ 'vibe-validate watch-pr 42'
285
+ ]
286
+ }
287
+ }
288
+ };
67
289
  program.commands.forEach((cmd) => {
68
- console.log(` ${cmd.name()} ${cmd.usage()}`);
69
- console.log(` ${cmd.description()}`);
290
+ const cmdName = cmd.name();
291
+ const details = commandDetails[cmdName];
292
+ console.log(`### \`${cmd.name()}\`\n`);
293
+ console.log(`${cmd.description()}\n`);
294
+ if (details?.whatItDoes) {
295
+ console.log('**What it does:**\n');
296
+ details.whatItDoes.forEach(step => console.log(`${step}`));
297
+ console.log('');
298
+ }
299
+ if (details?.exitCodes) {
300
+ console.log('**Exit codes:**\n');
301
+ Object.entries(details.exitCodes).forEach(([code, desc]) => {
302
+ console.log(`- \`${code}\` - ${desc}`);
303
+ });
304
+ console.log('');
305
+ }
306
+ if (details?.creates) {
307
+ console.log('**Creates/modifies:**\n');
308
+ details.creates.forEach(file => console.log(`- ${file}`));
309
+ console.log('');
310
+ }
311
+ if (details?.whenToUse) {
312
+ console.log(`**When to use:** ${details.whenToUse}\n`);
313
+ }
70
314
  const options = cmd.options.filter(opt => !opt.flags.includes('--help'));
71
315
  if (options.length > 0) {
72
- console.log(' Options:');
316
+ console.log('**Options:**\n');
73
317
  options.forEach((opt) => {
74
- const flags = opt.flags.padEnd(30);
75
- console.log(` ${flags} ${opt.description}`);
318
+ console.log(`- \`${opt.flags}\` - ${opt.description}`);
76
319
  });
320
+ console.log('');
321
+ }
322
+ if (details?.errorGuidance) {
323
+ console.log('**Error recovery:**\n');
324
+ Object.entries(details.errorGuidance).forEach(([scenario, steps]) => {
325
+ console.log(`If **${scenario}**:`);
326
+ console.log('```bash');
327
+ steps.forEach(step => console.log(step));
328
+ console.log('```\n');
329
+ });
330
+ }
331
+ if (details?.examples) {
332
+ console.log('**Examples:**\n');
333
+ console.log('```bash');
334
+ details.examples.forEach(ex => console.log(ex));
335
+ console.log('```\n');
77
336
  }
78
- console.log('');
337
+ console.log('---\n');
79
338
  });
80
- console.log('Global Options:');
81
- console.log(' -V, --version output the version number');
82
- console.log(' --verbose Show detailed output (use with --help for comprehensive help)');
83
- console.log(' -h, --help display help for command\n');
84
- console.log('💡 Tip: For specific command help, run: vibe-validate <command> --help');
339
+ console.log('## Global Options\n');
340
+ console.log('- `-V, --version` - Show vibe-validate version');
341
+ console.log('- `-v, --verbose` - Show detailed output (use with --help for this output)');
342
+ console.log('- `-h, --help` - Show help for command\n');
343
+ console.log('## Files\n');
344
+ console.log('| File | Purpose |');
345
+ console.log('|------|---------|');
346
+ console.log('| `vibe-validate.config.yaml` | Configuration (required) |');
347
+ console.log('| `.vibe-validate-state.yaml` | Validation state (auto-created, add to .gitignore) |');
348
+ console.log('| `.github/workflows/validate.yml` | CI workflow (optional, generated) |');
349
+ console.log('| `.husky/pre-commit` | Pre-commit hook (optional, setup via init) |\n');
350
+ console.log('## Common Workflows\n');
351
+ console.log('### First-time setup\n');
352
+ console.log('```bash');
353
+ console.log('vibe-validate init --template typescript-nodejs --setup-workflow');
354
+ console.log('git add vibe-validate.config.yaml .github/workflows/validate.yml');
355
+ console.log('git commit -m "feat: add vibe-validate"');
356
+ console.log('```\n');
357
+ console.log('### Before every commit (recommended)\n');
358
+ console.log('```bash');
359
+ console.log('vibe-validate pre-commit');
360
+ console.log('# If fails: fix errors and retry');
361
+ console.log('```\n');
362
+ console.log('### After PR merge\n');
363
+ console.log('```bash');
364
+ console.log('vibe-validate cleanup');
365
+ console.log('# Cleans up merged branches');
366
+ console.log('```\n');
367
+ console.log('### Check validation state\n');
368
+ console.log('```bash');
369
+ console.log('vibe-validate state --verbose');
370
+ console.log('# Debug why validation failed');
371
+ console.log('```\n');
372
+ console.log('### Force re-validation\n');
373
+ console.log('```bash');
374
+ console.log('vibe-validate validate --force');
375
+ console.log('# Bypass cache, always run');
376
+ console.log('```\n');
377
+ console.log('## Exit Codes\n');
378
+ console.log('| Code | Meaning |');
379
+ console.log('|------|---------|');
380
+ console.log('| `0` | Success |');
381
+ console.log('| `1` | Failure (validation failed, sync check failed, invalid config) |');
382
+ console.log('| `2` | Error (git command failed, file system error) |\n');
383
+ console.log('## Caching\n');
384
+ console.log('- **Cache key**: Git tree hash of working directory (includes untracked files)');
385
+ console.log('- **Cache hit**: Validation skipped (~288ms)');
386
+ console.log('- **Cache miss**: Full validation runs (~60-90s)');
387
+ console.log('- **Invalidation**: Any file change (tracked or untracked)\n');
388
+ console.log('---\n');
389
+ console.log('For more details: https://github.com/jdutton/vibe-validate');
85
390
  }
86
391
  //# sourceMappingURL=bin.js.map
package/dist/bin.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"bin.js","sourceRoot":"","sources":["../src/bin.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"bin.js","sourceRoot":"","sources":["../src/bin.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"cleanup.d.ts","sourceRoot":"","sources":["../../src/commands/cleanup.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAIzC,wBAAgB,cAAc,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CAyCrD"}
1
+ {"version":3,"file":"cleanup.d.ts","sourceRoot":"","sources":["../../src/commands/cleanup.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAKzC,wBAAgB,cAAc,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CA8BrD"}
@@ -4,6 +4,7 @@
4
4
  * Post-merge branch cleanup - switches to main and deletes merged branches.
5
5
  */
6
6
  import { cleanupMergedBranches } from '@vibe-validate/git';
7
+ import { stringify as stringifyYaml } from 'yaml';
7
8
  import chalk from 'chalk';
8
9
  export function cleanupCommand(program) {
9
10
  program
@@ -11,7 +12,7 @@ export function cleanupCommand(program) {
11
12
  .description('Post-merge cleanup (switch to main, delete merged branches)')
12
13
  .option('--main-branch <branch>', 'Main branch name', 'main')
13
14
  .option('--dry-run', 'Show what would be deleted without actually deleting')
14
- .option('--format <format>', 'Output format (human|yaml|json)', 'human')
15
+ .option('--yaml', 'Output YAML only (no human-friendly display)')
15
16
  .action(async (options) => {
16
17
  try {
17
18
  // Run post-merge cleanup
@@ -19,21 +20,9 @@ export function cleanupCommand(program) {
19
20
  mainBranch: options.mainBranch,
20
21
  dryRun: options.dryRun,
21
22
  });
22
- // Output based on format
23
- if (options.format === 'json') {
24
- console.log(JSON.stringify(result, null, 2));
25
- }
26
- else if (options.format === 'yaml') {
27
- console.log(`success: ${result.success}`);
28
- console.log(`currentBranch: ${result.currentBranch}`);
29
- console.log(`mainSynced: ${result.mainSynced}`);
30
- console.log(`branchesDeleted:`);
31
- result.branchesDeleted.forEach((branch) => {
32
- console.log(` - ${branch}`);
33
- });
34
- if ('error' in result && result.error) {
35
- console.log(`error: ${result.error}`);
36
- }
23
+ // Output based on quiet flag
24
+ if (options.yaml) {
25
+ console.log(stringifyYaml(result));
37
26
  }
38
27
  else {
39
28
  // Human-friendly format