@vibe-validate/cli 0.14.3 → 0.15.0-rc.1

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 (83) hide show
  1. package/README.md +26 -6
  2. package/bin/vibe-validate +131 -0
  3. package/config-templates/minimal.yaml +1 -1
  4. package/config-templates/typescript-library.yaml +1 -1
  5. package/config-templates/typescript-nodejs.yaml +1 -1
  6. package/config-templates/typescript-react.yaml +1 -1
  7. package/dist/bin.js +18 -4
  8. package/dist/bin.js.map +1 -1
  9. package/dist/commands/cleanup.d.ts +1 -1
  10. package/dist/commands/cleanup.d.ts.map +1 -1
  11. package/dist/commands/cleanup.js +108 -2
  12. package/dist/commands/cleanup.js.map +1 -1
  13. package/dist/commands/config.js +1 -1
  14. package/dist/commands/doctor.d.ts.map +1 -1
  15. package/dist/commands/doctor.js +45 -6
  16. package/dist/commands/doctor.js.map +1 -1
  17. package/dist/commands/generate-workflow.d.ts.map +1 -1
  18. package/dist/commands/generate-workflow.js +3 -11
  19. package/dist/commands/generate-workflow.js.map +1 -1
  20. package/dist/commands/history.d.ts.map +1 -1
  21. package/dist/commands/history.js +263 -68
  22. package/dist/commands/history.js.map +1 -1
  23. package/dist/commands/init.d.ts.map +1 -1
  24. package/dist/commands/init.js +7 -0
  25. package/dist/commands/init.js.map +1 -1
  26. package/dist/commands/pre-commit.d.ts.map +1 -1
  27. package/dist/commands/pre-commit.js +6 -2
  28. package/dist/commands/pre-commit.js.map +1 -1
  29. package/dist/commands/run.d.ts.map +1 -1
  30. package/dist/commands/run.js +618 -214
  31. package/dist/commands/run.js.map +1 -1
  32. package/dist/commands/state.d.ts.map +1 -1
  33. package/dist/commands/state.js +4 -7
  34. package/dist/commands/state.js.map +1 -1
  35. package/dist/commands/validate.d.ts.map +1 -1
  36. package/dist/commands/validate.js +5 -6
  37. package/dist/commands/validate.js.map +1 -1
  38. package/dist/commands/watch-pr.d.ts.map +1 -1
  39. package/dist/commands/watch-pr.js +33 -16
  40. package/dist/commands/watch-pr.js.map +1 -1
  41. package/dist/schemas/run-result-schema-export.d.ts +32 -0
  42. package/dist/schemas/run-result-schema-export.d.ts.map +1 -0
  43. package/dist/schemas/run-result-schema-export.js +40 -0
  44. package/dist/schemas/run-result-schema-export.js.map +1 -0
  45. package/dist/schemas/run-result-schema.d.ts +850 -0
  46. package/dist/schemas/run-result-schema.d.ts.map +1 -0
  47. package/dist/schemas/run-result-schema.js +67 -0
  48. package/dist/schemas/run-result-schema.js.map +1 -0
  49. package/dist/schemas/watch-pr-schema.d.ts +420 -22
  50. package/dist/schemas/watch-pr-schema.d.ts.map +1 -1
  51. package/dist/schemas/watch-pr-schema.js +2 -2
  52. package/dist/schemas/watch-pr-schema.js.map +1 -1
  53. package/dist/scripts/generate-run-result-schema.d.ts +10 -0
  54. package/dist/scripts/generate-run-result-schema.d.ts.map +1 -0
  55. package/dist/scripts/generate-run-result-schema.js +20 -0
  56. package/dist/scripts/generate-run-result-schema.js.map +1 -0
  57. package/dist/services/ci-provider.d.ts +21 -6
  58. package/dist/services/ci-provider.d.ts.map +1 -1
  59. package/dist/services/ci-providers/github-actions.d.ts +1 -5
  60. package/dist/services/ci-providers/github-actions.d.ts.map +1 -1
  61. package/dist/services/ci-providers/github-actions.js +9 -30
  62. package/dist/services/ci-providers/github-actions.js.map +1 -1
  63. package/dist/utils/config-error-reporter.js +1 -1
  64. package/dist/utils/config-error-reporter.js.map +1 -1
  65. package/dist/utils/pid-lock.d.ts.map +1 -1
  66. package/dist/utils/pid-lock.js +3 -6
  67. package/dist/utils/pid-lock.js.map +1 -1
  68. package/dist/utils/project-id.d.ts.map +1 -1
  69. package/dist/utils/project-id.js +3 -4
  70. package/dist/utils/project-id.js.map +1 -1
  71. package/dist/utils/runner-adapter.js +3 -2
  72. package/dist/utils/runner-adapter.js.map +1 -1
  73. package/dist/utils/temp-files.d.ts +67 -0
  74. package/dist/utils/temp-files.d.ts.map +1 -0
  75. package/dist/utils/temp-files.js +202 -0
  76. package/dist/utils/temp-files.js.map +1 -0
  77. package/dist/utils/validate-workflow.d.ts.map +1 -1
  78. package/dist/utils/validate-workflow.js +17 -12
  79. package/dist/utils/validate-workflow.js.map +1 -1
  80. package/dist/vibe-validate +131 -0
  81. package/package.json +11 -9
  82. package/run-result.schema.json +186 -0
  83. package/watch-pr-result.schema.json +128 -6
@@ -0,0 +1,202 @@
1
+ /**
2
+ * Temporary file management utilities
3
+ *
4
+ * Provides organized temp directory structure for vibe-validate output files:
5
+ * - /tmp/vibe-validate/runs/{YYYY-MM-DD}/{shortHash-HH-mm-ss}/
6
+ * - Cleanup utilities for old temp files
7
+ * - Storage size calculation
8
+ */
9
+ import { mkdir, readdir, rm, stat } from 'node:fs/promises';
10
+ import { tmpdir } from 'node:os';
11
+ import { join } from 'node:path';
12
+ /**
13
+ * Get the root temporary directory for vibe-validate
14
+ * @returns Path to /tmp/vibe-validate (or OS equivalent)
15
+ */
16
+ export function getVibeValidateTempDir() {
17
+ return join(tmpdir(), 'vibe-validate');
18
+ }
19
+ /**
20
+ * Get the organized output directory for a specific run
21
+ * @param treeHash - Git tree hash or identifier
22
+ * @returns Path like /tmp/vibe-validate/runs/2025-11-05/abc123-17-30-45/
23
+ */
24
+ export function getRunOutputDir(treeHash) {
25
+ const now = new Date();
26
+ // Date folder: YYYY-MM-DD
27
+ const dateFolder = now.toISOString().split('T')[0];
28
+ // Short hash: first 6 chars
29
+ const shortHash = treeHash.substring(0, 6);
30
+ // Time suffix: HH-mm-ss
31
+ const timeSuffix = now.toISOString().split('T')[1].substring(0, 8).replace(/:/g, '-');
32
+ // Combined: abc123-17-30-45
33
+ const runFolder = `${shortHash}-${timeSuffix}`;
34
+ return join(getVibeValidateTempDir(), 'runs', dateFolder, runFolder);
35
+ }
36
+ /**
37
+ * Ensure a directory exists (create if needed)
38
+ */
39
+ export async function ensureDir(dirPath) {
40
+ try {
41
+ await mkdir(dirPath, { recursive: true });
42
+ }
43
+ catch (err) {
44
+ // Ignore if directory already exists
45
+ if (err && typeof err === 'object' && 'code' in err && err.code !== 'EEXIST') {
46
+ throw err;
47
+ }
48
+ }
49
+ }
50
+ /**
51
+ * Get the size of a directory recursively (in bytes)
52
+ */
53
+ async function getDirectorySize(dirPath) {
54
+ let totalSize = 0;
55
+ try {
56
+ const entries = await readdir(dirPath, { withFileTypes: true });
57
+ for (const entry of entries) {
58
+ const fullPath = join(dirPath, entry.name);
59
+ if (entry.isDirectory()) {
60
+ totalSize += await getDirectorySize(fullPath);
61
+ }
62
+ else if (entry.isFile()) {
63
+ const stats = await stat(fullPath);
64
+ totalSize += stats.size;
65
+ }
66
+ }
67
+ }
68
+ catch (err) {
69
+ // Ignore errors (directory might not exist or be inaccessible)
70
+ if (err && typeof err === 'object' && 'code' in err && err.code !== 'ENOENT') {
71
+ // Log unexpected errors but don't throw
72
+ console.warn(`Warning: Could not read directory ${dirPath}:`, err);
73
+ }
74
+ }
75
+ return totalSize;
76
+ }
77
+ /**
78
+ * Count the number of run directories
79
+ */
80
+ async function countRunDirectories(runsDir) {
81
+ let count = 0;
82
+ try {
83
+ const dateDirs = await readdir(runsDir, { withFileTypes: true });
84
+ for (const dateDir of dateDirs) {
85
+ if (dateDir.isDirectory()) {
86
+ const dateDirPath = join(runsDir, dateDir.name);
87
+ const runDirs = await readdir(dateDirPath, { withFileTypes: true });
88
+ count += runDirs.filter(d => d.isDirectory()).length;
89
+ }
90
+ }
91
+ }
92
+ catch (err) {
93
+ // Ignore errors (directory might not exist)
94
+ if (err && typeof err === 'object' && 'code' in err && err.code !== 'ENOENT') {
95
+ console.warn(`Warning: Could not count run directories:`, err);
96
+ }
97
+ }
98
+ return count;
99
+ }
100
+ /**
101
+ * Get temp file storage information
102
+ */
103
+ export async function getTempStorageInfo() {
104
+ const tempDir = getVibeValidateTempDir();
105
+ const runsDir = join(tempDir, 'runs');
106
+ const [sizeBytes, runCount] = await Promise.all([
107
+ getDirectorySize(runsDir),
108
+ countRunDirectories(runsDir),
109
+ ]);
110
+ return {
111
+ sizeBytes,
112
+ runCount,
113
+ path: runsDir,
114
+ };
115
+ }
116
+ /**
117
+ * Format bytes as human-readable size
118
+ */
119
+ export function formatBytes(bytes) {
120
+ if (bytes === 0)
121
+ return '0 B';
122
+ const k = 1024;
123
+ const sizes = ['B', 'KB', 'MB', 'GB'];
124
+ const i = Math.floor(Math.log(bytes) / Math.log(k));
125
+ return `${(bytes / Math.pow(k, i)).toFixed(1)} ${sizes[i]}`;
126
+ }
127
+ /**
128
+ * Clean up old temporary files
129
+ */
130
+ // eslint-disable-next-line sonarjs/cognitive-complexity -- Cleanup logic requires nested loops and error handling for directory traversal
131
+ export async function cleanupOldTempFiles(options = {}) {
132
+ const { olderThanDays = 7, dryRun = false, deleteAll = false, } = options;
133
+ const result = {
134
+ deletedCount: 0,
135
+ freedBytes: 0,
136
+ deletedPaths: [],
137
+ errors: [],
138
+ };
139
+ const tempDir = getVibeValidateTempDir();
140
+ const runsDir = join(tempDir, 'runs');
141
+ try {
142
+ const dateDirs = await readdir(runsDir, { withFileTypes: true });
143
+ const cutoffDate = new Date();
144
+ cutoffDate.setDate(cutoffDate.getDate() - olderThanDays);
145
+ for (const dateDir of dateDirs) {
146
+ if (!dateDir.isDirectory())
147
+ continue;
148
+ const dateDirPath = join(runsDir, dateDir.name);
149
+ try {
150
+ const runDirs = await readdir(dateDirPath, { withFileTypes: true });
151
+ for (const runDir of runDirs) {
152
+ if (!runDir.isDirectory())
153
+ continue;
154
+ const runDirPath = join(dateDirPath, runDir.name);
155
+ try {
156
+ const stats = await stat(runDirPath);
157
+ const shouldDelete = deleteAll || stats.mtime < cutoffDate;
158
+ if (shouldDelete) {
159
+ const dirSize = await getDirectorySize(runDirPath);
160
+ if (!dryRun) {
161
+ await rm(runDirPath, { recursive: true, force: true });
162
+ }
163
+ result.deletedCount++;
164
+ result.freedBytes += dirSize;
165
+ result.deletedPaths.push(runDirPath);
166
+ }
167
+ }
168
+ catch (err) {
169
+ const errorMsg = err instanceof Error ? err.message : String(err);
170
+ result.errors.push({ path: runDirPath, error: errorMsg });
171
+ }
172
+ }
173
+ // Try to remove empty date directories
174
+ if (!dryRun) {
175
+ try {
176
+ const remaining = await readdir(dateDirPath);
177
+ if (remaining.length === 0) {
178
+ await rm(dateDirPath, { recursive: true });
179
+ }
180
+ }
181
+ catch {
182
+ // Ignore errors when cleaning up empty directories
183
+ }
184
+ }
185
+ }
186
+ catch (err) {
187
+ const errorMsg = err instanceof Error ? err.message : String(err);
188
+ result.errors.push({ path: dateDirPath, error: errorMsg });
189
+ }
190
+ }
191
+ }
192
+ catch (err) {
193
+ if (err && typeof err === 'object' && 'code' in err && err.code === 'ENOENT') {
194
+ // Runs directory doesn't exist - nothing to clean up
195
+ return result;
196
+ }
197
+ const errorMsg = err instanceof Error ? err.message : String(err);
198
+ result.errors.push({ path: runsDir, error: errorMsg });
199
+ }
200
+ return result;
201
+ }
202
+ //# sourceMappingURL=temp-files.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"temp-files.js","sourceRoot":"","sources":["../../src/utils/temp-files.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,EAAE,KAAK,EAAE,OAAO,EAAE,EAAE,EAAE,IAAI,EAAE,MAAM,kBAAkB,CAAC;AAC5D,OAAO,EAAE,MAAM,EAAE,MAAM,SAAS,CAAC;AACjC,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AAEjC;;;GAGG;AACH,MAAM,UAAU,sBAAsB;IACpC,OAAO,IAAI,CAAC,MAAM,EAAE,EAAE,eAAe,CAAC,CAAC;AACzC,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,eAAe,CAAC,QAAgB;IAC9C,MAAM,GAAG,GAAG,IAAI,IAAI,EAAE,CAAC;IAEvB,0BAA0B;IAC1B,MAAM,UAAU,GAAG,GAAG,CAAC,WAAW,EAAE,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;IAEnD,4BAA4B;IAC5B,MAAM,SAAS,GAAG,QAAQ,CAAC,SAAS,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;IAE3C,wBAAwB;IACxB,MAAM,UAAU,GAAG,GAAG,CAAC,WAAW,EAAE,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC;IAEtF,4BAA4B;IAC5B,MAAM,SAAS,GAAG,GAAG,SAAS,IAAI,UAAU,EAAE,CAAC;IAE/C,OAAO,IAAI,CAAC,sBAAsB,EAAE,EAAE,MAAM,EAAE,UAAU,EAAE,SAAS,CAAC,CAAC;AACvE,CAAC;AAED;;GAEG;AACH,MAAM,CAAC,KAAK,UAAU,SAAS,CAAC,OAAe;IAC7C,IAAI,CAAC;QACH,MAAM,KAAK,CAAC,OAAO,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IAC5C,CAAC;IAAC,OAAO,GAAY,EAAE,CAAC;QACtB,qCAAqC;QACrC,IAAI,GAAG,IAAI,OAAO,GAAG,KAAK,QAAQ,IAAI,MAAM,IAAI,GAAG,IAAI,GAAG,CAAC,IAAI,KAAK,QAAQ,EAAE,CAAC;YAC7E,MAAM,GAAG,CAAC;QACZ,CAAC;IACH,CAAC;AACH,CAAC;AAED;;GAEG;AACH,KAAK,UAAU,gBAAgB,CAAC,OAAe;IAC7C,IAAI,SAAS,GAAG,CAAC,CAAC;IAElB,IAAI,CAAC;QACH,MAAM,OAAO,GAAG,MAAM,OAAO,CAAC,OAAO,EAAE,EAAE,aAAa,EAAE,IAAI,EAAE,CAAC,CAAC;QAEhE,KAAK,MAAM,KAAK,IAAI,OAAO,EAAE,CAAC;YAC5B,MAAM,QAAQ,GAAG,IAAI,CAAC,OAAO,EAAE,KAAK,CAAC,IAAI,CAAC,CAAC;YAE3C,IAAI,KAAK,CAAC,WAAW,EAAE,EAAE,CAAC;gBACxB,SAAS,IAAI,MAAM,gBAAgB,CAAC,QAAQ,CAAC,CAAC;YAChD,CAAC;iBAAM,IAAI,KAAK,CAAC,MAAM,EAAE,EAAE,CAAC;gBAC1B,MAAM,KAAK,GAAG,MAAM,IAAI,CAAC,QAAQ,CAAC,CAAC;gBACnC,SAAS,IAAI,KAAK,CAAC,IAAI,CAAC;YAC1B,CAAC;QACH,CAAC;IACH,CAAC;IAAC,OAAO,GAAY,EAAE,CAAC;QACtB,+DAA+D;QAC/D,IAAI,GAAG,IAAI,OAAO,GAAG,KAAK,QAAQ,IAAI,MAAM,IAAI,GAAG,IAAI,GAAG,CAAC,IAAI,KAAK,QAAQ,EAAE,CAAC;YAC7E,wCAAwC;YACxC,OAAO,CAAC,IAAI,CAAC,qCAAqC,OAAO,GAAG,EAAE,GAAG,CAAC,CAAC;QACrE,CAAC;IACH,CAAC;IAED,OAAO,SAAS,CAAC;AACnB,CAAC;AAED;;GAEG;AACH,KAAK,UAAU,mBAAmB,CAAC,OAAe;IAChD,IAAI,KAAK,GAAG,CAAC,CAAC;IAEd,IAAI,CAAC;QACH,MAAM,QAAQ,GAAG,MAAM,OAAO,CAAC,OAAO,EAAE,EAAE,aAAa,EAAE,IAAI,EAAE,CAAC,CAAC;QAEjE,KAAK,MAAM,OAAO,IAAI,QAAQ,EAAE,CAAC;YAC/B,IAAI,OAAO,CAAC,WAAW,EAAE,EAAE,CAAC;gBAC1B,MAAM,WAAW,GAAG,IAAI,CAAC,OAAO,EAAE,OAAO,CAAC,IAAI,CAAC,CAAC;gBAChD,MAAM,OAAO,GAAG,MAAM,OAAO,CAAC,WAAW,EAAE,EAAE,aAAa,EAAE,IAAI,EAAE,CAAC,CAAC;gBACpE,KAAK,IAAI,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,WAAW,EAAE,CAAC,CAAC,MAAM,CAAC;YACvD,CAAC;QACH,CAAC;IACH,CAAC;IAAC,OAAO,GAAY,EAAE,CAAC;QACtB,4CAA4C;QAC5C,IAAI,GAAG,IAAI,OAAO,GAAG,KAAK,QAAQ,IAAI,MAAM,IAAI,GAAG,IAAI,GAAG,CAAC,IAAI,KAAK,QAAQ,EAAE,CAAC;YAC7E,OAAO,CAAC,IAAI,CAAC,2CAA2C,EAAE,GAAG,CAAC,CAAC;QACjE,CAAC;IACH,CAAC;IAED,OAAO,KAAK,CAAC;AACf,CAAC;AAED;;GAEG;AACH,MAAM,CAAC,KAAK,UAAU,kBAAkB;IAKtC,MAAM,OAAO,GAAG,sBAAsB,EAAE,CAAC;IACzC,MAAM,OAAO,GAAG,IAAI,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC;IAEtC,MAAM,CAAC,SAAS,EAAE,QAAQ,CAAC,GAAG,MAAM,OAAO,CAAC,GAAG,CAAC;QAC9C,gBAAgB,CAAC,OAAO,CAAC;QACzB,mBAAmB,CAAC,OAAO,CAAC;KAC7B,CAAC,CAAC;IAEH,OAAO;QACL,SAAS;QACT,QAAQ;QACR,IAAI,EAAE,OAAO;KACd,CAAC;AACJ,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,WAAW,CAAC,KAAa;IACvC,IAAI,KAAK,KAAK,CAAC;QAAE,OAAO,KAAK,CAAC;IAE9B,MAAM,CAAC,GAAG,IAAI,CAAC;IACf,MAAM,KAAK,GAAG,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,CAAC;IACtC,MAAM,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;IAEpD,OAAO,GAAG,CAAC,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC;AAC9D,CAAC;AA4BD;;GAEG;AACH,0IAA0I;AAC1I,MAAM,CAAC,KAAK,UAAU,mBAAmB,CACvC,UAA0B,EAAE;IAE5B,MAAM,EACJ,aAAa,GAAG,CAAC,EACjB,MAAM,GAAG,KAAK,EACd,SAAS,GAAG,KAAK,GAClB,GAAG,OAAO,CAAC;IAEZ,MAAM,MAAM,GAAkB;QAC5B,YAAY,EAAE,CAAC;QACf,UAAU,EAAE,CAAC;QACb,YAAY,EAAE,EAAE;QAChB,MAAM,EAAE,EAAE;KACX,CAAC;IAEF,MAAM,OAAO,GAAG,sBAAsB,EAAE,CAAC;IACzC,MAAM,OAAO,GAAG,IAAI,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC;IAEtC,IAAI,CAAC;QACH,MAAM,QAAQ,GAAG,MAAM,OAAO,CAAC,OAAO,EAAE,EAAE,aAAa,EAAE,IAAI,EAAE,CAAC,CAAC;QACjE,MAAM,UAAU,GAAG,IAAI,IAAI,EAAE,CAAC;QAC9B,UAAU,CAAC,OAAO,CAAC,UAAU,CAAC,OAAO,EAAE,GAAG,aAAa,CAAC,CAAC;QAEzD,KAAK,MAAM,OAAO,IAAI,QAAQ,EAAE,CAAC;YAC/B,IAAI,CAAC,OAAO,CAAC,WAAW,EAAE;gBAAE,SAAS;YAErC,MAAM,WAAW,GAAG,IAAI,CAAC,OAAO,EAAE,OAAO,CAAC,IAAI,CAAC,CAAC;YAEhD,IAAI,CAAC;gBACH,MAAM,OAAO,GAAG,MAAM,OAAO,CAAC,WAAW,EAAE,EAAE,aAAa,EAAE,IAAI,EAAE,CAAC,CAAC;gBAEpE,KAAK,MAAM,MAAM,IAAI,OAAO,EAAE,CAAC;oBAC7B,IAAI,CAAC,MAAM,CAAC,WAAW,EAAE;wBAAE,SAAS;oBAEpC,MAAM,UAAU,GAAG,IAAI,CAAC,WAAW,EAAE,MAAM,CAAC,IAAI,CAAC,CAAC;oBAElD,IAAI,CAAC;wBACH,MAAM,KAAK,GAAG,MAAM,IAAI,CAAC,UAAU,CAAC,CAAC;wBACrC,MAAM,YAAY,GAAG,SAAS,IAAI,KAAK,CAAC,KAAK,GAAG,UAAU,CAAC;wBAE3D,IAAI,YAAY,EAAE,CAAC;4BACjB,MAAM,OAAO,GAAG,MAAM,gBAAgB,CAAC,UAAU,CAAC,CAAC;4BAEnD,IAAI,CAAC,MAAM,EAAE,CAAC;gCACZ,MAAM,EAAE,CAAC,UAAU,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC;4BACzD,CAAC;4BAED,MAAM,CAAC,YAAY,EAAE,CAAC;4BACtB,MAAM,CAAC,UAAU,IAAI,OAAO,CAAC;4BAC7B,MAAM,CAAC,YAAY,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;wBACvC,CAAC;oBACH,CAAC;oBAAC,OAAO,GAAY,EAAE,CAAC;wBACtB,MAAM,QAAQ,GAAG,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;wBAClE,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,UAAU,EAAE,KAAK,EAAE,QAAQ,EAAE,CAAC,CAAC;oBAC5D,CAAC;gBACH,CAAC;gBAED,uCAAuC;gBACvC,IAAI,CAAC,MAAM,EAAE,CAAC;oBACZ,IAAI,CAAC;wBACH,MAAM,SAAS,GAAG,MAAM,OAAO,CAAC,WAAW,CAAC,CAAC;wBAC7C,IAAI,SAAS,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;4BAC3B,MAAM,EAAE,CAAC,WAAW,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;wBAC7C,CAAC;oBACH,CAAC;oBAAC,MAAM,CAAC;wBACP,mDAAmD;oBACrD,CAAC;gBACH,CAAC;YACH,CAAC;YAAC,OAAO,GAAY,EAAE,CAAC;gBACtB,MAAM,QAAQ,GAAG,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;gBAClE,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,WAAW,EAAE,KAAK,EAAE,QAAQ,EAAE,CAAC,CAAC;YAC7D,CAAC;QACH,CAAC;IACH,CAAC;IAAC,OAAO,GAAY,EAAE,CAAC;QACtB,IAAI,GAAG,IAAI,OAAO,GAAG,KAAK,QAAQ,IAAI,MAAM,IAAI,GAAG,IAAI,GAAG,CAAC,IAAI,KAAK,QAAQ,EAAE,CAAC;YAC7E,qDAAqD;YACrD,OAAO,MAAM,CAAC;QAChB,CAAC;QAED,MAAM,QAAQ,GAAG,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;QAClE,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,OAAO,EAAE,KAAK,EAAE,QAAQ,EAAE,CAAC,CAAC;IACzD,CAAC;IAED,OAAO,MAAM,CAAC;AAChB,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"validate-workflow.d.ts","sourceRoot":"","sources":["../../src/utils/validate-workflow.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,uBAAuB,CAAC;AAChE,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,qBAAqB,CAAC;AAS5D,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,uBAAuB,CAAC;AAK1D,MAAM,WAAW,uBAAuB;IACtC,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,IAAI,CAAC,EAAE,OAAO,CAAC;IACf,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,OAAO,EAAE,YAAY,CAAC;CACvB;AA2KD;;;;;;;;;GASG;AAEH,wBAAsB,mBAAmB,CACvC,MAAM,EAAE,kBAAkB,EAC1B,OAAO,EAAE,uBAAuB,GAC/B,OAAO,CAAC,gBAAgB,CAAC,CAgG3B"}
1
+ {"version":3,"file":"validate-workflow.d.ts","sourceRoot":"","sources":["../../src/utils/validate-workflow.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,uBAAuB,CAAC;AAChE,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,qBAAqB,CAAC;AAS5D,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,uBAAuB,CAAC;AAK1D,MAAM,WAAW,uBAAuB;IACtC,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,IAAI,CAAC,EAAE,OAAO,CAAC;IACf,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,OAAO,EAAE,YAAY,CAAC;CACvB;AAmLD;;;;;;;;;GASG;AAEH,wBAAsB,mBAAmB,CACvC,MAAM,EAAE,kBAAkB,EAC1B,OAAO,EAAE,uBAAuB,GAC/B,OAAO,CAAC,gBAAgB,CAAC,CAgG3B"}
@@ -59,8 +59,11 @@ async function checkCache(treeHash, yaml) {
59
59
  .reverse()
60
60
  .find(run => run.passed);
61
61
  if (passingRun) {
62
+ // Mark result as from cache (v0.15.0+ schema field)
63
+ const result = passingRun.result;
64
+ result.isCachedResult = true;
62
65
  if (yaml) {
63
- await outputYaml(passingRun.result);
66
+ await outputYaml(result);
64
67
  }
65
68
  else {
66
69
  const durationSecs = (passingRun.duration / 1000).toFixed(1);
@@ -74,16 +77,12 @@ async function checkCache(treeHash, yaml) {
74
77
  console.log(chalk.gray(` Phases: ${passingRun.result.phases.length}, Steps: ${totalSteps}`));
75
78
  }
76
79
  }
77
- // Mark result as from cache
78
- const result = passingRun.result;
79
- result._fromCache = true;
80
80
  return result;
81
81
  }
82
82
  }
83
83
  }
84
- catch (error) {
84
+ catch {
85
85
  // Cache check failed - proceed with validation
86
- console.debug(`Cache check failed: ${error instanceof Error ? error.message : String(error)}`);
87
86
  }
88
87
  return null;
89
88
  }
@@ -135,8 +134,12 @@ async function recordHistory(treeHashBefore, result, verbose) {
135
134
  */
136
135
  function displayFailureInfo(result, config) {
137
136
  console.error(chalk.blue('\n📋 View error details:'), chalk.white('vibe-validate state'));
138
- if (result.rerunCommand) {
139
- console.error(chalk.blue('🔄 To retry:'), chalk.white(result.rerunCommand));
137
+ // Find the failed step's command (v0.15.0+: rerunCommand removed, use step.command)
138
+ const failedStep = result.phases
139
+ ?.flatMap(phase => phase.steps)
140
+ .find(step => step.name === result.failedStep);
141
+ if (failedStep?.command) {
142
+ console.error(chalk.blue('🔄 To retry:'), chalk.white(failedStep.command));
140
143
  }
141
144
  if (result.fullLogFile) {
142
145
  console.error(chalk.blue('📄 Full log:'), chalk.gray(result.fullLogFile));
@@ -145,13 +148,15 @@ function displayFailureInfo(result, config) {
145
148
  if (config.developerFeedback) {
146
149
  const poorExtractionSteps = result.phases
147
150
  ?.flatMap(phase => phase.steps)
148
- .filter(step => !step.passed && step.extractionQuality && step.extractionQuality.score < 50);
151
+ .filter(step => !step.passed && step.extraction?.metadata && step.extraction.metadata.confidence < 50);
149
152
  if (poorExtractionSteps && poorExtractionSteps.length > 0) {
150
- const isDogfooding = process.cwd().includes('vibe-validate');
153
+ // VV_CONTEXT is set by the smart wrapper (vibe-validate/vv)
154
+ // 'dev' = developer mode (working on vibe-validate itself)
155
+ const isDevMode = process.env.VV_CONTEXT === 'dev';
151
156
  console.error('');
152
157
  console.error(chalk.yellow('⚠️ Poor extraction quality detected'));
153
- if (isDogfooding) {
154
- console.error(chalk.yellow(' 💡 vibe-validate improvement opportunity: Improve extractors in packages/extractors/'));
158
+ if (isDevMode) {
159
+ console.error(chalk.yellow(' 💡 Developer mode: Improve extractors in packages/extractors/'));
155
160
  console.error(chalk.gray(' See packages/extractors/test/samples/ for how to add test cases'));
156
161
  }
157
162
  else {
@@ -1 +1 @@
1
- {"version":3,"file":"validate-workflow.js","sourceRoot":"","sources":["../../src/utils/validate-workflow.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"validate-workflow.js","sourceRoot":"","sources":["../../src/utils/validate-workflow.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,131 @@
1
+ #!/usr/bin/env node
2
+ /**
3
+ * Smart vibe-validate wrapper with context-aware execution
4
+ *
5
+ * Automatically detects execution context and delegates to appropriate binary:
6
+ * - Developer mode: Inside vibe-validate repo → packages/cli/dist/bin.js (unpackaged dev build)
7
+ * - Local install: Project has vibe-validate → node_modules version (packaged)
8
+ * - Global install: Fallback → globally installed version (packaged)
9
+ *
10
+ * Works in both git and non-git directories. Non-git directories don't get
11
+ * caching but still get error extraction.
12
+ */
13
+
14
+ import { existsSync } from 'fs';
15
+ import { dirname, join } from 'path';
16
+ import { spawnSync } from 'child_process';
17
+ import { fileURLToPath } from 'url';
18
+
19
+ const __filename = fileURLToPath(import.meta.url);
20
+ const __dirname = dirname(__filename);
21
+
22
+ /**
23
+ * Find project root by walking up to .git directory
24
+ * Falls back to startDir if no git repo found
25
+ */
26
+ function findProjectRoot(startDir) {
27
+ let current = startDir;
28
+
29
+ while (true) {
30
+ const gitDir = join(current, '.git');
31
+ if (existsSync(gitDir)) {
32
+ return current; // Found git repo
33
+ }
34
+
35
+ const parent = dirname(current);
36
+ if (parent === current) {
37
+ // Reached filesystem root, no git found
38
+ return startDir;
39
+ }
40
+ current = parent;
41
+ }
42
+ }
43
+
44
+ /**
45
+ * Check if we're in vibe-validate repo (developer mode)
46
+ * Simple detection: both dist/vibe-validate and dist/bin.js must exist
47
+ */
48
+ function getDevModeBinary(projectRoot) {
49
+ const wrapperPath = join(projectRoot, 'packages/cli/dist/vibe-validate');
50
+ const binPath = join(projectRoot, 'packages/cli/dist/bin.js');
51
+
52
+ // Both files must exist to confirm we're in vibe-validate repo
53
+ if (existsSync(wrapperPath) && existsSync(binPath)) {
54
+ return binPath;
55
+ }
56
+
57
+ return null;
58
+ }
59
+
60
+ /**
61
+ * Find local vibe-validate installation in node_modules
62
+ * Walks up directory tree from project root
63
+ */
64
+ function findLocalInstall(projectRoot) {
65
+ let current = projectRoot;
66
+
67
+ while (true) {
68
+ const localBin = join(current, 'node_modules/@vibe-validate/cli/dist/bin.js');
69
+ if (existsSync(localBin)) {
70
+ return localBin;
71
+ }
72
+
73
+ const parent = dirname(current);
74
+ if (parent === current) {
75
+ // Reached filesystem root
76
+ break;
77
+ }
78
+ current = parent;
79
+ }
80
+
81
+ return null;
82
+ }
83
+
84
+ /**
85
+ * Main entry point - detects context and executes appropriate binary
86
+ */
87
+ function main() {
88
+ const cwd = process.cwd();
89
+ const args = process.argv.slice(2);
90
+
91
+ // Find project root (where .git is, or cwd if no git)
92
+ const projectRoot = findProjectRoot(cwd);
93
+
94
+ let binPath;
95
+ let context;
96
+
97
+ // Priority 1: Check for developer mode (inside vibe-validate repo)
98
+ const devBin = getDevModeBinary(projectRoot);
99
+ if (devBin) {
100
+ binPath = devBin;
101
+ context = 'dev';
102
+ }
103
+ // Priority 2: Check for local install (node_modules)
104
+ else {
105
+ const localBin = findLocalInstall(projectRoot);
106
+ if (localBin) {
107
+ binPath = localBin;
108
+ context = 'local';
109
+ }
110
+ // Priority 3: Use global install (this script's location)
111
+ else {
112
+ binPath = join(__dirname, '../dist/bin.js');
113
+ context = 'global';
114
+ }
115
+ }
116
+
117
+ // Execute the binary with all arguments
118
+ const result = spawnSync(process.execPath, [binPath, ...args], {
119
+ stdio: 'inherit',
120
+ env: {
121
+ ...process.env,
122
+ VV_CONTEXT: context, // Pass context for debugging (optional)
123
+ }
124
+ });
125
+
126
+ // Exit with same code as child process
127
+ process.exit(result.status ?? 1);
128
+ }
129
+
130
+ // Run main function
131
+ main();
package/package.json CHANGED
@@ -1,13 +1,13 @@
1
1
  {
2
2
  "name": "@vibe-validate/cli",
3
- "version": "0.14.3",
3
+ "version": "0.15.0-rc.1",
4
4
  "description": "Command-line interface for vibe-validate validation framework",
5
5
  "type": "module",
6
6
  "main": "./dist/index.js",
7
7
  "types": "./dist/index.d.ts",
8
8
  "bin": {
9
- "vibe-validate": "./dist/bin.js",
10
- "vv": "./dist/bin.js"
9
+ "vibe-validate": "./bin/vibe-validate",
10
+ "vv": "./bin/vv"
11
11
  },
12
12
  "exports": {
13
13
  ".": {
@@ -17,8 +17,10 @@
17
17
  },
18
18
  "files": [
19
19
  "dist",
20
+ "bin",
20
21
  "config-templates",
21
22
  "watch-pr-result.schema.json",
23
+ "run-result.schema.json",
22
24
  "README.md"
23
25
  ],
24
26
  "keywords": [
@@ -60,11 +62,11 @@
60
62
  "yaml": "^2.6.1",
61
63
  "zod": "^3.24.1",
62
64
  "zod-to-json-schema": "^3.24.6",
63
- "@vibe-validate/config": "0.14.3",
64
- "@vibe-validate/core": "0.14.3",
65
- "@vibe-validate/extractors": "0.14.3",
66
- "@vibe-validate/git": "0.14.3",
67
- "@vibe-validate/history": "0.14.3"
65
+ "@vibe-validate/core": "0.15.0-rc.1",
66
+ "@vibe-validate/git": "0.15.0-rc.1",
67
+ "@vibe-validate/extractors": "0.15.0-rc.1",
68
+ "@vibe-validate/config": "0.15.0-rc.1",
69
+ "@vibe-validate/history": "0.15.0-rc.1"
68
70
  },
69
71
  "devDependencies": {
70
72
  "@types/node": "^20.14.8",
@@ -72,7 +74,7 @@
72
74
  "vitest": "^2.0.5"
73
75
  },
74
76
  "scripts": {
75
- "build": "tsc && node dist/scripts/generate-watch-pr-schema.js",
77
+ "build": "tsc && cp bin/vibe-validate dist/vibe-validate && node dist/scripts/generate-watch-pr-schema.js && node dist/scripts/generate-run-result-schema.js",
76
78
  "test": "vitest run",
77
79
  "test:watch": "vitest",
78
80
  "test:coverage": "vitest run --coverage",