@vibe-validate/cli 0.10.3 → 0.12.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 (108) hide show
  1. package/README.md +84 -92
  2. package/dist/bin.js +137 -20
  3. package/dist/bin.js.map +1 -1
  4. package/dist/commands/cleanup.d.ts +4 -0
  5. package/dist/commands/cleanup.d.ts.map +1 -1
  6. package/dist/commands/cleanup.js +96 -15
  7. package/dist/commands/cleanup.js.map +1 -1
  8. package/dist/commands/config.d.ts +4 -0
  9. package/dist/commands/config.d.ts.map +1 -1
  10. package/dist/commands/config.js +83 -15
  11. package/dist/commands/config.js.map +1 -1
  12. package/dist/commands/doctor.d.ts +4 -0
  13. package/dist/commands/doctor.d.ts.map +1 -1
  14. package/dist/commands/doctor.js +385 -82
  15. package/dist/commands/doctor.js.map +1 -1
  16. package/dist/commands/generate-workflow.d.ts +6 -2
  17. package/dist/commands/generate-workflow.d.ts.map +1 -1
  18. package/dist/commands/generate-workflow.js +188 -33
  19. package/dist/commands/generate-workflow.js.map +1 -1
  20. package/dist/commands/history.d.ts +13 -0
  21. package/dist/commands/history.d.ts.map +1 -0
  22. package/dist/commands/history.js +415 -0
  23. package/dist/commands/history.js.map +1 -0
  24. package/dist/commands/init.d.ts +4 -0
  25. package/dist/commands/init.d.ts.map +1 -1
  26. package/dist/commands/init.js +252 -109
  27. package/dist/commands/init.js.map +1 -1
  28. package/dist/commands/pre-commit.d.ts +4 -0
  29. package/dist/commands/pre-commit.d.ts.map +1 -1
  30. package/dist/commands/pre-commit.js +158 -7
  31. package/dist/commands/pre-commit.js.map +1 -1
  32. package/dist/commands/state.d.ts +5 -1
  33. package/dist/commands/state.d.ts.map +1 -1
  34. package/dist/commands/state.js +192 -23
  35. package/dist/commands/state.js.map +1 -1
  36. package/dist/commands/sync-check.d.ts +4 -0
  37. package/dist/commands/sync-check.d.ts.map +1 -1
  38. package/dist/commands/sync-check.js +101 -14
  39. package/dist/commands/sync-check.js.map +1 -1
  40. package/dist/commands/validate.d.ts +5 -1
  41. package/dist/commands/validate.d.ts.map +1 -1
  42. package/dist/commands/validate.js +184 -28
  43. package/dist/commands/validate.js.map +1 -1
  44. package/dist/commands/watch-pr.d.ts +10 -0
  45. package/dist/commands/watch-pr.d.ts.map +1 -0
  46. package/dist/commands/watch-pr.js +443 -0
  47. package/dist/commands/watch-pr.js.map +1 -0
  48. package/dist/schemas/watch-pr-schema.d.ts +261 -0
  49. package/dist/schemas/watch-pr-schema.d.ts.map +1 -0
  50. package/dist/schemas/watch-pr-schema.js +58 -0
  51. package/dist/schemas/watch-pr-schema.js.map +1 -0
  52. package/dist/scripts/generate-watch-pr-schema.d.ts +12 -0
  53. package/dist/scripts/generate-watch-pr-schema.d.ts.map +1 -0
  54. package/dist/scripts/generate-watch-pr-schema.js +35 -0
  55. package/dist/scripts/generate-watch-pr-schema.js.map +1 -0
  56. package/dist/services/ci-provider-registry.d.ts +38 -0
  57. package/dist/services/ci-provider-registry.d.ts.map +1 -0
  58. package/dist/services/ci-provider-registry.js +53 -0
  59. package/dist/services/ci-provider-registry.js.map +1 -0
  60. package/dist/services/ci-provider.d.ts +165 -0
  61. package/dist/services/ci-provider.d.ts.map +1 -0
  62. package/dist/services/ci-provider.js +11 -0
  63. package/dist/services/ci-provider.js.map +1 -0
  64. package/dist/services/ci-providers/github-actions.d.ts +41 -0
  65. package/dist/services/ci-providers/github-actions.d.ts.map +1 -0
  66. package/dist/services/ci-providers/github-actions.js +314 -0
  67. package/dist/services/ci-providers/github-actions.js.map +1 -0
  68. package/dist/utils/check-validation.d.ts +7 -4
  69. package/dist/utils/check-validation.d.ts.map +1 -1
  70. package/dist/utils/check-validation.js +129 -48
  71. package/dist/utils/check-validation.js.map +1 -1
  72. package/dist/utils/config-loader.d.ts +15 -3
  73. package/dist/utils/config-loader.d.ts.map +1 -1
  74. package/dist/utils/config-loader.js +61 -17
  75. package/dist/utils/config-loader.js.map +1 -1
  76. package/dist/utils/context-detector.d.ts +1 -1
  77. package/dist/utils/context-detector.js +1 -1
  78. package/dist/utils/normalize-line-endings.d.ts +53 -0
  79. package/dist/utils/normalize-line-endings.d.ts.map +1 -0
  80. package/dist/utils/normalize-line-endings.js +57 -0
  81. package/dist/utils/normalize-line-endings.js.map +1 -0
  82. package/dist/utils/run-validation-with-cache.d.ts +48 -0
  83. package/dist/utils/run-validation-with-cache.d.ts.map +1 -0
  84. package/dist/utils/run-validation-with-cache.js +123 -0
  85. package/dist/utils/run-validation-with-cache.js.map +1 -0
  86. package/dist/utils/runner-adapter.d.ts +1 -0
  87. package/dist/utils/runner-adapter.d.ts.map +1 -1
  88. package/dist/utils/runner-adapter.js +25 -17
  89. package/dist/utils/runner-adapter.js.map +1 -1
  90. package/dist/utils/setup-checks/gitignore-check.d.ts +10 -15
  91. package/dist/utils/setup-checks/gitignore-check.d.ts.map +1 -1
  92. package/dist/utils/setup-checks/gitignore-check.js +20 -138
  93. package/dist/utils/setup-checks/gitignore-check.js.map +1 -1
  94. package/dist/utils/template-discovery.d.ts +40 -0
  95. package/dist/utils/template-discovery.d.ts.map +1 -0
  96. package/dist/utils/template-discovery.js +136 -0
  97. package/dist/utils/template-discovery.js.map +1 -0
  98. package/dist/utils/validate-workflow.d.ts +28 -0
  99. package/dist/utils/validate-workflow.d.ts.map +1 -0
  100. package/dist/utils/validate-workflow.js +247 -0
  101. package/dist/utils/validate-workflow.js.map +1 -0
  102. package/dist/utils/validation-cache.d.ts +30 -0
  103. package/dist/utils/validation-cache.d.ts.map +1 -0
  104. package/dist/utils/validation-cache.js +57 -0
  105. package/dist/utils/validation-cache.js.map +1 -0
  106. package/package.json +19 -16
  107. package/watch-pr-result.schema.json +204 -0
  108. package/LICENSE +0 -21
@@ -6,6 +6,7 @@
6
6
  import { checkBranchSync } from '@vibe-validate/git';
7
7
  import { getRemoteBranch, getMainBranch } from '@vibe-validate/config';
8
8
  import { loadConfig } from '../utils/config-loader.js';
9
+ import { stringify as stringifyYaml } from 'yaml';
9
10
  import chalk from 'chalk';
10
11
  export function syncCheckCommand(program) {
11
12
  program
@@ -13,7 +14,7 @@ export function syncCheckCommand(program) {
13
14
  .description('Check if branch is behind remote main branch')
14
15
  .option('--main-branch <branch>', 'Main branch name (overrides config)')
15
16
  .option('--remote-origin <remote>', 'Remote origin name (overrides config)')
16
- .option('--format <format>', 'Output format (human|yaml|json)', 'human')
17
+ .option('--yaml', 'Output YAML only (no human-friendly display)')
17
18
  .action(async (options) => {
18
19
  try {
19
20
  // Load config to get defaults
@@ -31,19 +32,24 @@ export function syncCheckCommand(program) {
31
32
  const result = await checkBranchSync({
32
33
  remoteBranch,
33
34
  });
34
- // Output based on format
35
- if (options.format === 'json') {
36
- console.log(JSON.stringify(result, null, 2));
37
- }
38
- else if (options.format === 'yaml') {
39
- console.log(`hasRemote: ${result.hasRemote}`);
40
- console.log(`isUpToDate: ${result.isUpToDate}`);
41
- if (result.currentBranch) {
42
- console.log(`currentBranch: ${result.currentBranch}`);
43
- }
44
- if (result.behindBy !== undefined) {
45
- console.log(`behindBy: ${result.behindBy}`);
46
- }
35
+ // Output based on yaml flag
36
+ if (options.yaml) {
37
+ // YAML mode: Output structured result to stdout
38
+ // Small delay to ensure stderr is flushed
39
+ await new Promise(resolve => setTimeout(resolve, 10));
40
+ // RFC 4627 separator
41
+ process.stdout.write('---\n');
42
+ // Write pure YAML
43
+ process.stdout.write(stringifyYaml(result));
44
+ // CRITICAL: Wait for stdout to flush before exiting
45
+ await new Promise(resolve => {
46
+ if (process.stdout.write('')) {
47
+ resolve();
48
+ }
49
+ else {
50
+ process.stdout.once('drain', resolve);
51
+ }
52
+ });
47
53
  }
48
54
  else {
49
55
  // Human-friendly format
@@ -89,4 +95,85 @@ function displayHumanSyncCheck(result, mainBranch) {
89
95
  }
90
96
  console.log(chalk.gray('─'.repeat(50)));
91
97
  }
98
+ /**
99
+ * Show verbose help with detailed documentation
100
+ */
101
+ export function showSyncCheckVerboseHelp() {
102
+ console.log(`# sync-check Command Reference
103
+
104
+ > Check if branch is behind remote main branch
105
+
106
+ ## Overview
107
+
108
+ The \`sync-check\` command verifies that your current branch is up to date with the remote main branch (usually origin/main). It compares local and remote commit histories without making any changes to your repository.
109
+
110
+ ## How It Works
111
+
112
+ 1. Checks if current branch has a remote tracking branch
113
+ 2. Compares local and remote commit histories
114
+ 3. Reports sync status (up to date, behind, or no remote)
115
+
116
+ ## Options
117
+
118
+ - \`--main-branch <branch>\` - Main branch name (overrides config, default: main)
119
+ - \`--remote-origin <remote>\` - Remote origin name (overrides config, default: origin)
120
+ - \`--yaml\` - Output YAML only (no human-friendly display)
121
+
122
+ ## Exit Codes
123
+
124
+ - \`0\` - Up to date or no remote tracking
125
+ - \`1\` - Branch is behind (needs merge)
126
+ - \`2\` - Git command failed
127
+
128
+ ## Examples
129
+
130
+ \`\`\`bash
131
+ # Check sync with default main branch
132
+ vibe-validate sync-check
133
+
134
+ # Check sync with custom main branch
135
+ vibe-validate sync-check --main-branch develop
136
+
137
+ # YAML output only
138
+ vibe-validate sync-check --yaml
139
+ \`\`\`
140
+
141
+ ## Common Workflows
142
+
143
+ ### Before starting work
144
+
145
+ \`\`\`bash
146
+ # Check if your branch is behind
147
+ vibe-validate sync-check
148
+
149
+ # If behind, merge latest
150
+ git merge origin/main
151
+ \`\`\`
152
+
153
+ ### In CI/CD pipeline
154
+
155
+ \`\`\`bash
156
+ # Check sync as YAML for parsing
157
+ vibe-validate sync-check --yaml
158
+ \`\`\`
159
+
160
+ ## Error Recovery
161
+
162
+ ### If branch is behind (exit 1)
163
+
164
+ **Merge the remote branch:**
165
+ \`\`\`bash
166
+ # Fetch latest changes
167
+ git fetch origin
168
+
169
+ # Merge origin/main (or git rebase origin/main)
170
+ git merge origin/main
171
+
172
+ # Resolve conflicts if any
173
+
174
+ # Retry sync check
175
+ vibe-validate sync-check
176
+ \`\`\`
177
+ `);
178
+ }
92
179
  //# sourceMappingURL=sync-check.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"sync-check.js","sourceRoot":"","sources":["../../src/commands/sync-check.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"sync-check.js","sourceRoot":"","sources":["../../src/commands/sync-check.ts"],"names":[],"mappings":"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"}
@@ -1,8 +1,12 @@
1
1
  /**
2
2
  * Validate Command
3
3
  *
4
- * Runs validation phases with git tree hash caching.
4
+ * Runs validation phases with git tree hash caching and history recording.
5
5
  */
6
6
  import type { Command } from 'commander';
7
7
  export declare function validateCommand(program: Command): void;
8
+ /**
9
+ * Show verbose help with detailed documentation
10
+ */
11
+ export declare function showValidateVerboseHelp(): void;
8
12
  //# sourceMappingURL=validate.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"validate.d.ts","sourceRoot":"","sources":["../../src/commands/validate.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAOzC,wBAAgB,eAAe,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CAyDtD"}
1
+ {"version":3,"file":"validate.d.ts","sourceRoot":"","sources":["../../src/commands/validate.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAOzC,wBAAgB,eAAe,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CA6CtD;AAED;;GAEG;AACH,wBAAgB,uBAAuB,IAAI,IAAI,CAiK9C"}
@@ -1,12 +1,11 @@
1
1
  /**
2
2
  * Validate Command
3
3
  *
4
- * Runs validation phases with git tree hash caching.
4
+ * Runs validation phases with git tree hash caching and history recording.
5
5
  */
6
- import { runValidation } from '@vibe-validate/core';
7
6
  import { loadConfig } from '../utils/config-loader.js';
8
- import { createRunnerConfig } from '../utils/runner-adapter.js';
9
7
  import { detectContext } from '../utils/context-detector.js';
8
+ import { runValidateWorkflow } from '../utils/validate-workflow.js';
10
9
  import chalk from 'chalk';
11
10
  export function validateCommand(program) {
12
11
  program
@@ -14,6 +13,7 @@ export function validateCommand(program) {
14
13
  .description('Run validation with git tree hash caching')
15
14
  .option('-f, --force', 'Force validation even if already passed')
16
15
  .option('-v, --verbose', 'Show detailed progress and output')
16
+ .option('-y, --yaml', 'Output validation result as YAML to stdout')
17
17
  .option('-c, --check', 'Check if validation has already passed (do not run)')
18
18
  .action(async (options) => {
19
19
  try {
@@ -23,41 +23,197 @@ export function validateCommand(program) {
23
23
  console.error(chalk.red('❌ No configuration found'));
24
24
  process.exit(1);
25
25
  }
26
- // If --check flag is used, only check validation state without running
27
- if (options.check) {
28
- const { checkValidationStatus } = await import('../utils/check-validation.js');
29
- await checkValidationStatus(config);
30
- return; // Exit handled by checkValidationStatus
31
- }
32
26
  // Detect context (Claude Code, CI, etc.)
33
27
  const context = detectContext();
34
- // Verbose mode is ONLY enabled via explicit --verbose flag
35
- const verbose = options.verbose ?? false;
36
- // Create runner config
37
- const runnerConfig = createRunnerConfig(config, {
28
+ // Run shared validation workflow
29
+ const result = await runValidateWorkflow(config, {
38
30
  force: options.force,
39
- verbose,
31
+ verbose: options.verbose,
32
+ yaml: options.yaml,
33
+ check: options.check,
40
34
  context,
41
35
  });
42
- // Run validation
43
- const result = await runValidation(runnerConfig);
44
- // If validation failed, show agent-friendly error details
45
- if (!result.passed) {
46
- console.error(chalk.blue('\n📋 Error details:'), chalk.white(runnerConfig.stateFilePath || '.vibe-validate-state.yaml'));
47
- if (result.rerunCommand) {
48
- console.error(chalk.blue('🔄 To retry:'), chalk.white(result.rerunCommand));
49
- }
50
- if (result.fullLogFile) {
51
- console.error(chalk.blue('📄 Full log:'), chalk.gray(result.fullLogFile));
52
- }
36
+ // Only call process.exit for non-cached results
37
+ // Cache hits return early without calling process.exit (to support testing)
38
+ const resultWithCache = result;
39
+ if (!resultWithCache._fromCache) {
40
+ process.exit(result.passed ? 0 : 1);
53
41
  }
54
- // Exit with appropriate code
55
- process.exit(result.passed ? 0 : 1);
42
+ // For cache hits, return normally and let Commander exit with code 0
56
43
  }
57
44
  catch (error) {
58
- console.error(chalk.red('❌ Validation failed with error:'), error);
45
+ // Re-throw process.exit errors (for testing)
46
+ if (error instanceof Error && error.message.startsWith('process.exit')) {
47
+ throw error;
48
+ }
49
+ // Error already logged by runValidateWorkflow
59
50
  process.exit(1);
60
51
  }
61
52
  });
62
53
  }
54
+ /**
55
+ * Show verbose help with detailed documentation
56
+ */
57
+ export function showValidateVerboseHelp() {
58
+ console.log(`# validate Command Reference
59
+
60
+ > Run validation with git tree hash caching
61
+
62
+ ## Overview
63
+
64
+ The \`validate\` command is the core of vibe-validate. It executes your validation pipeline (linting, testing, type-checking, etc.) and uses git tree hashes for intelligent caching.
65
+
66
+ ## How It Works
67
+
68
+ 1. **Calculates git tree hash** of working directory (includes all tracked and untracked files)
69
+ 2. **Checks if hash matches cached state** (from previous run)
70
+ 3. **If match:** Exits immediately with cached result (~288ms)
71
+ 4. **If no match:** Runs validation pipeline (~60-90s depending on your project)
72
+ 5. **Caches result** in git notes for next run
73
+ 6. **Records history** for analysis via \`vibe-validate history\`
74
+
75
+ ## Options
76
+
77
+ - \`-f, --force\` - Force validation even if already passed (bypasses cache)
78
+ - \`-v, --verbose\` - Show detailed progress and output
79
+ - \`-y, --yaml\` - Output validation result as YAML to stdout (LLM-friendly)
80
+ - \`-c, --check\` - Check if validation has already passed without running
81
+
82
+ ## Exit Codes
83
+
84
+ - \`0\` - Validation passed (or cached pass)
85
+ - \`1\` - Validation failed
86
+ - \`2\` - Configuration error
87
+
88
+ ## Examples
89
+
90
+ \`\`\`bash
91
+ # Standard usage (uses cache if available)
92
+ vibe-validate validate
93
+
94
+ # Force re-validation (bypass cache)
95
+ vibe-validate validate --force
96
+
97
+ # Check status without running
98
+ vibe-validate validate --check
99
+
100
+ # YAML output for AI agents
101
+ vibe-validate validate --yaml
102
+
103
+ # Verbose output with YAML result
104
+ vibe-validate validate --verbose --yaml
105
+ \`\`\`
106
+
107
+ ## Caching Behavior
108
+
109
+ ### Cache Key
110
+ - Based on **git tree hash** (not commit SHA)
111
+ - Includes **all files** (tracked + untracked)
112
+ - Deterministic: same content = same hash
113
+
114
+ ### Cache Hit
115
+ - Validation result found for current tree hash
116
+ - Exits in ~288ms
117
+ - Shows: "✓ Validation already passed for tree <hash>"
118
+
119
+ ### Cache Miss
120
+ - No result found for current tree hash
121
+ - Runs full validation pipeline
122
+ - Typical duration: 60-90s
123
+
124
+ ### Cache Invalidation
125
+ - ANY file change (content or path)
126
+ - Adding/removing files
127
+ - Modifying .gitignore
128
+
129
+ ## YAML Output Mode
130
+
131
+ When using \`--yaml\`, output is split:
132
+
133
+ **stderr** (human-readable progress):
134
+ \`\`\`
135
+ phase_start: Pre-Qualification
136
+ 🔍 Running Pre-Qualification...
137
+ ✅ TypeScript - PASSED
138
+ phase_complete: Pre-Qualification (passed)
139
+ \`\`\`
140
+
141
+ **stdout** (machine-parseable YAML):
142
+ \`\`\`yaml
143
+ ---
144
+ passed: true
145
+ timestamp: 2025-10-23T14:30:00Z
146
+ treeHash: 2b62c71a3f...
147
+ duration: 62.4
148
+ \`\`\`
149
+
150
+ This design:
151
+ - ✅ Humans see progress in real-time (stderr)
152
+ - ✅ LLMs parse structured result (stdout)
153
+ - ✅ 90% smaller than verbose logs
154
+
155
+ ## Integration with Other Commands
156
+
157
+ - \`vibe-validate state\` - View cached result
158
+ - \`vibe-validate state --verbose\` - See full error details
159
+ - \`vibe-validate history list\` - View validation timeline
160
+ - \`vibe-validate pre-commit\` - Runs sync-check + validate
161
+
162
+ ## Common Workflows
163
+
164
+ ### Development workflow
165
+ \`\`\`bash
166
+ # Make changes
167
+ # ...
168
+
169
+ # Run validation (uses cache if no changes)
170
+ vibe-validate validate
171
+
172
+ # If fails, fix errors and retry
173
+ vibe-validate validate
174
+ \`\`\`
175
+
176
+ ### Debugging workflow
177
+ \`\`\`bash
178
+ # Why did validation fail?
179
+ vibe-validate state --verbose
180
+
181
+ # View history
182
+ vibe-validate history list
183
+
184
+ # Force fresh validation
185
+ vibe-validate validate --force
186
+ \`\`\`
187
+
188
+ ### AI agent workflow
189
+ \`\`\`bash
190
+ # Run validation
191
+ vibe-validate validate --yaml 2>&1 | sed -n '/^---$/,$p' | tail -n +2
192
+
193
+ # Or use state command
194
+ vibe-validate validate
195
+ vibe-validate state --yaml
196
+ \`\`\`
197
+
198
+ ## Performance
199
+
200
+ | Scenario | Duration | Notes |
201
+ |----------|----------|-------|
202
+ | Cache hit | ~288ms | Cached result found |
203
+ | Cache miss | ~60-90s | Full validation run |
204
+ | Force flag | ~60-90s | Cache bypassed |
205
+
206
+ ## Files Created/Modified
207
+
208
+ - \`refs/notes/vibe-validate/runs\` - Validation history (git notes, auto-created)
209
+
210
+ ## Error Recovery
211
+
212
+ If validation fails:
213
+ 1. Check error details: \`vibe-validate state --verbose\`
214
+ 2. Fix errors shown in output
215
+ 3. Re-run: \`vibe-validate validate\`
216
+ 4. Verify: \`vibe-validate state\`
217
+ `);
218
+ }
63
219
  //# sourceMappingURL=validate.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"validate.js","sourceRoot":"","sources":["../../src/commands/validate.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAGH,OAAO,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AACpD,OAAO,EAAE,UAAU,EAAE,MAAM,2BAA2B,CAAC;AACvD,OAAO,EAAE,kBAAkB,EAAE,MAAM,4BAA4B,CAAC;AAChE,OAAO,EAAE,aAAa,EAAE,MAAM,8BAA8B,CAAC;AAC7D,OAAO,KAAK,MAAM,OAAO,CAAC;AAE1B,MAAM,UAAU,eAAe,CAAC,OAAgB;IAC9C,OAAO;SACJ,OAAO,CAAC,UAAU,CAAC;SACnB,WAAW,CAAC,2CAA2C,CAAC;SACxD,MAAM,CAAC,aAAa,EAAE,yCAAyC,CAAC;SAChE,MAAM,CAAC,eAAe,EAAE,mCAAmC,CAAC;SAC5D,MAAM,CAAC,aAAa,EAAE,qDAAqD,CAAC;SAC5E,MAAM,CAAC,KAAK,EAAE,OAAO,EAAE,EAAE;QACxB,IAAI,CAAC;YACH,qBAAqB;YACrB,MAAM,MAAM,GAAG,MAAM,UAAU,EAAE,CAAC;YAClC,IAAI,CAAC,MAAM,EAAE,CAAC;gBACZ,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,0BAA0B,CAAC,CAAC,CAAC;gBACrD,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;YAClB,CAAC;YAED,uEAAuE;YACvE,IAAI,OAAO,CAAC,KAAK,EAAE,CAAC;gBAClB,MAAM,EAAE,qBAAqB,EAAE,GAAG,MAAM,MAAM,CAAC,8BAA8B,CAAC,CAAC;gBAC/E,MAAM,qBAAqB,CAAC,MAAM,CAAC,CAAC;gBACpC,OAAO,CAAC,wCAAwC;YAClD,CAAC;YAED,yCAAyC;YACzC,MAAM,OAAO,GAAG,aAAa,EAAE,CAAC;YAEhC,2DAA2D;YAC3D,MAAM,OAAO,GAAG,OAAO,CAAC,OAAO,IAAI,KAAK,CAAC;YAEzC,uBAAuB;YACvB,MAAM,YAAY,GAAG,kBAAkB,CAAC,MAAM,EAAE;gBAC9C,KAAK,EAAE,OAAO,CAAC,KAAK;gBACpB,OAAO;gBACP,OAAO;aACR,CAAC,CAAC;YAEH,iBAAiB;YACjB,MAAM,MAAM,GAAG,MAAM,aAAa,CAAC,YAAY,CAAC,CAAC;YAEjD,0DAA0D;YAC1D,IAAI,CAAC,MAAM,CAAC,MAAM,EAAE,CAAC;gBACnB,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,IAAI,CAAC,qBAAqB,CAAC,EAAE,KAAK,CAAC,KAAK,CAAC,YAAY,CAAC,aAAa,IAAI,2BAA2B,CAAC,CAAC,CAAC;gBACzH,IAAI,MAAM,CAAC,YAAY,EAAE,CAAC;oBACxB,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,IAAI,CAAC,cAAc,CAAC,EAAE,KAAK,CAAC,KAAK,CAAC,MAAM,CAAC,YAAY,CAAC,CAAC,CAAC;gBAC9E,CAAC;gBACD,IAAI,MAAM,CAAC,WAAW,EAAE,CAAC;oBACvB,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,IAAI,CAAC,cAAc,CAAC,EAAE,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,WAAW,CAAC,CAAC,CAAC;gBAC5E,CAAC;YACH,CAAC;YAED,6BAA6B;YAC7B,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QACtC,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,iCAAiC,CAAC,EAAE,KAAK,CAAC,CAAC;YACnE,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAClB,CAAC;IACH,CAAC,CAAC,CAAC;AACP,CAAC"}
1
+ {"version":3,"file":"validate.js","sourceRoot":"","sources":["../../src/commands/validate.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAIH,OAAO,EAAE,UAAU,EAAE,MAAM,2BAA2B,CAAC;AACvD,OAAO,EAAE,aAAa,EAAE,MAAM,8BAA8B,CAAC;AAC7D,OAAO,EAAE,mBAAmB,EAAE,MAAM,+BAA+B,CAAC;AACpE,OAAO,KAAK,MAAM,OAAO,CAAC;AAE1B,MAAM,UAAU,eAAe,CAAC,OAAgB;IAC9C,OAAO;SACJ,OAAO,CAAC,UAAU,CAAC;SACnB,WAAW,CAAC,2CAA2C,CAAC;SACxD,MAAM,CAAC,aAAa,EAAE,yCAAyC,CAAC;SAChE,MAAM,CAAC,eAAe,EAAE,mCAAmC,CAAC;SAC5D,MAAM,CAAC,YAAY,EAAE,4CAA4C,CAAC;SAClE,MAAM,CAAC,aAAa,EAAE,qDAAqD,CAAC;SAC5E,MAAM,CAAC,KAAK,EAAE,OAAO,EAAE,EAAE;QACxB,IAAI,CAAC;YACH,qBAAqB;YACrB,MAAM,MAAM,GAAG,MAAM,UAAU,EAAE,CAAC;YAClC,IAAI,CAAC,MAAM,EAAE,CAAC;gBACZ,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,0BAA0B,CAAC,CAAC,CAAC;gBACrD,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;YAClB,CAAC;YAED,yCAAyC;YACzC,MAAM,OAAO,GAAG,aAAa,EAAE,CAAC;YAEhC,iCAAiC;YACjC,MAAM,MAAM,GAAG,MAAM,mBAAmB,CAAC,MAAM,EAAE;gBAC/C,KAAK,EAAE,OAAO,CAAC,KAAK;gBACpB,OAAO,EAAE,OAAO,CAAC,OAAO;gBACxB,IAAI,EAAE,OAAO,CAAC,IAAI;gBAClB,KAAK,EAAE,OAAO,CAAC,KAAK;gBACpB,OAAO;aACR,CAAC,CAAC;YAEH,gDAAgD;YAChD,4EAA4E;YAC5E,MAAM,eAAe,GAAG,MAAqD,CAAC;YAC9E,IAAI,CAAC,eAAe,CAAC,UAAU,EAAE,CAAC;gBAChC,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;YACtC,CAAC;YACD,qEAAqE;QACvE,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,6CAA6C;YAC7C,IAAI,KAAK,YAAY,KAAK,IAAI,KAAK,CAAC,OAAO,CAAC,UAAU,CAAC,cAAc,CAAC,EAAE,CAAC;gBACvE,MAAM,KAAK,CAAC;YACd,CAAC;YACD,8CAA8C;YAC9C,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAClB,CAAC;IACH,CAAC,CAAC,CAAC;AACP,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,uBAAuB;IACrC,OAAO,CAAC,GAAG,CAAC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CA+Jb,CAAC,CAAC;AACH,CAAC"}
@@ -0,0 +1,10 @@
1
+ import type { Command } from 'commander';
2
+ /**
3
+ * Register the watch-pr command
4
+ */
5
+ export declare function registerWatchPRCommand(program: Command): void;
6
+ /**
7
+ * Show verbose help with detailed documentation
8
+ */
9
+ export declare function showWatchPRVerboseHelp(): void;
10
+ //# sourceMappingURL=watch-pr.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"watch-pr.d.ts","sourceRoot":"","sources":["../../src/commands/watch-pr.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AA8CzC;;GAEG;AACH,wBAAgB,sBAAsB,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CAgC7D;AAgUD;;GAEG;AACH,wBAAgB,sBAAsB,IAAI,IAAI,CA4I7C"}