@vibe-validate/cli 0.11.0 ā 0.12.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.
- package/README.md +14 -4
- package/dist/bin.js +88 -13
- package/dist/bin.js.map +1 -1
- package/dist/commands/cleanup.d.ts +4 -0
- package/dist/commands/cleanup.d.ts.map +1 -1
- package/dist/commands/cleanup.js +94 -2
- package/dist/commands/cleanup.js.map +1 -1
- package/dist/commands/config.d.ts +4 -0
- package/dist/commands/config.d.ts.map +1 -1
- package/dist/commands/config.js +83 -0
- package/dist/commands/config.js.map +1 -1
- package/dist/commands/doctor.d.ts +4 -0
- package/dist/commands/doctor.d.ts.map +1 -1
- package/dist/commands/doctor.js +306 -28
- package/dist/commands/doctor.js.map +1 -1
- package/dist/commands/generate-workflow.d.ts +4 -0
- package/dist/commands/generate-workflow.d.ts.map +1 -1
- package/dist/commands/generate-workflow.js +157 -48
- package/dist/commands/generate-workflow.js.map +1 -1
- package/dist/commands/history.d.ts +13 -0
- package/dist/commands/history.d.ts.map +1 -0
- package/dist/commands/history.js +415 -0
- package/dist/commands/history.js.map +1 -0
- package/dist/commands/init.d.ts +4 -0
- package/dist/commands/init.d.ts.map +1 -1
- package/dist/commands/init.js +181 -0
- package/dist/commands/init.js.map +1 -1
- package/dist/commands/pre-commit.d.ts +4 -0
- package/dist/commands/pre-commit.d.ts.map +1 -1
- package/dist/commands/pre-commit.js +158 -7
- package/dist/commands/pre-commit.js.map +1 -1
- package/dist/commands/state.d.ts +5 -1
- package/dist/commands/state.d.ts.map +1 -1
- package/dist/commands/state.js +192 -18
- package/dist/commands/state.js.map +1 -1
- package/dist/commands/sync-check.d.ts +4 -0
- package/dist/commands/sync-check.d.ts.map +1 -1
- package/dist/commands/sync-check.js +98 -2
- package/dist/commands/sync-check.js.map +1 -1
- package/dist/commands/validate.d.ts +5 -1
- package/dist/commands/validate.d.ts.map +1 -1
- package/dist/commands/validate.js +184 -28
- package/dist/commands/validate.js.map +1 -1
- package/dist/commands/watch-pr.d.ts +4 -0
- package/dist/commands/watch-pr.d.ts.map +1 -1
- package/dist/commands/watch-pr.js +175 -14
- package/dist/commands/watch-pr.js.map +1 -1
- package/dist/schemas/watch-pr-schema.d.ts +40 -40
- package/dist/schemas/watch-pr-schema.js +1 -1
- package/dist/schemas/watch-pr-schema.js.map +1 -1
- package/dist/services/ci-provider.d.ts +13 -8
- package/dist/services/ci-provider.d.ts.map +1 -1
- package/dist/services/ci-providers/github-actions.d.ts +5 -4
- package/dist/services/ci-providers/github-actions.d.ts.map +1 -1
- package/dist/services/ci-providers/github-actions.js +36 -27
- package/dist/services/ci-providers/github-actions.js.map +1 -1
- package/dist/utils/check-validation.d.ts +7 -4
- package/dist/utils/check-validation.d.ts.map +1 -1
- package/dist/utils/check-validation.js +129 -48
- package/dist/utils/check-validation.js.map +1 -1
- package/dist/utils/run-validation-with-cache.d.ts +48 -0
- package/dist/utils/run-validation-with-cache.d.ts.map +1 -0
- package/dist/utils/run-validation-with-cache.js +123 -0
- package/dist/utils/run-validation-with-cache.js.map +1 -0
- package/dist/utils/runner-adapter.d.ts +1 -0
- package/dist/utils/runner-adapter.d.ts.map +1 -1
- package/dist/utils/runner-adapter.js +25 -17
- package/dist/utils/runner-adapter.js.map +1 -1
- package/dist/utils/setup-checks/gitignore-check.d.ts +10 -15
- package/dist/utils/setup-checks/gitignore-check.d.ts.map +1 -1
- package/dist/utils/setup-checks/gitignore-check.js +20 -137
- package/dist/utils/setup-checks/gitignore-check.js.map +1 -1
- package/dist/utils/validate-workflow.d.ts +28 -0
- package/dist/utils/validate-workflow.d.ts.map +1 -0
- package/dist/utils/validate-workflow.js +247 -0
- package/dist/utils/validate-workflow.js.map +1 -0
- package/dist/utils/validation-cache.d.ts +30 -0
- package/dist/utils/validation-cache.d.ts.map +1 -0
- package/dist/utils/validation-cache.js +57 -0
- package/dist/utils/validation-cache.js.map +1 -0
- package/package.json +6 -4
- package/watch-pr-result.schema.json +1 -1
|
@@ -2,76 +2,157 @@
|
|
|
2
2
|
* Validation Status Checker
|
|
3
3
|
*
|
|
4
4
|
* Provides programmatic interface to check if validation has already passed
|
|
5
|
-
* for the current working tree state
|
|
5
|
+
* for the current working tree state using git notes.
|
|
6
6
|
*/
|
|
7
|
-
import { existsSync, readFileSync } from 'fs';
|
|
8
7
|
import { getGitTreeHash } from '@vibe-validate/git';
|
|
8
|
+
import { readHistoryNote } from '@vibe-validate/history';
|
|
9
9
|
import chalk from 'chalk';
|
|
10
|
-
import
|
|
10
|
+
import { stringify as yamlStringify } from 'yaml';
|
|
11
11
|
/**
|
|
12
12
|
* Check validation status for current working tree
|
|
13
13
|
*
|
|
14
14
|
* Exit codes:
|
|
15
15
|
* 0 = Validation already passed (skip validation)
|
|
16
16
|
* 1 = Validation not passed or needed (run validation)
|
|
17
|
-
* 2 =
|
|
18
|
-
* 3 = Git tree hash
|
|
17
|
+
* 2 = No history found (run validation)
|
|
18
|
+
* 3 = Git tree hash changed (run validation)
|
|
19
|
+
*
|
|
20
|
+
* @param _config - vibe-validate configuration (unused, kept for API compatibility)
|
|
21
|
+
* @param yaml - If true, output YAML to stdout instead of human-readable text
|
|
19
22
|
*/
|
|
20
|
-
export async function checkValidationStatus(_config) {
|
|
21
|
-
const stateFilePath = '.vibe-validate-state.yaml';
|
|
22
|
-
// Check if state file exists
|
|
23
|
-
if (!existsSync(stateFilePath)) {
|
|
24
|
-
console.log(chalk.yellow('ā ļø Validation state file not found'));
|
|
25
|
-
console.log(chalk.gray(` Expected: ${stateFilePath}`));
|
|
26
|
-
console.log(chalk.blue('\nš” Run validation:'), chalk.white('npx vibe-validate validate'));
|
|
27
|
-
process.exit(2);
|
|
28
|
-
}
|
|
23
|
+
export async function checkValidationStatus(_config, yaml = false) {
|
|
29
24
|
// Get current tree hash
|
|
30
|
-
|
|
31
|
-
// Read state file
|
|
32
|
-
let state;
|
|
25
|
+
let currentTreeHash;
|
|
33
26
|
try {
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
27
|
+
currentTreeHash = await getGitTreeHash();
|
|
28
|
+
}
|
|
29
|
+
catch (_error) {
|
|
30
|
+
if (yaml) {
|
|
31
|
+
// YAML mode: Output structured error
|
|
32
|
+
const errorOutput = {
|
|
33
|
+
exists: false,
|
|
34
|
+
error: 'Not in git repository',
|
|
35
|
+
};
|
|
36
|
+
process.stdout.write('---\n');
|
|
37
|
+
process.stdout.write(yamlStringify(errorOutput));
|
|
38
38
|
}
|
|
39
|
-
|
|
40
|
-
|
|
39
|
+
else {
|
|
40
|
+
// Human mode: Colored output
|
|
41
|
+
console.log(chalk.yellow('ā ļø Not in git repository'));
|
|
42
|
+
console.log(chalk.blue('\nš” Run validation:'), chalk.white('npx vibe-validate validate'));
|
|
41
43
|
}
|
|
44
|
+
process.exit(2);
|
|
45
|
+
}
|
|
46
|
+
// Check git notes for validation history
|
|
47
|
+
let historyNote;
|
|
48
|
+
try {
|
|
49
|
+
historyNote = await readHistoryNote(currentTreeHash);
|
|
42
50
|
}
|
|
43
|
-
catch (
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
51
|
+
catch (_error) {
|
|
52
|
+
if (yaml) {
|
|
53
|
+
// YAML mode: Output structured error
|
|
54
|
+
const errorOutput = {
|
|
55
|
+
exists: false,
|
|
56
|
+
treeHash: currentTreeHash,
|
|
57
|
+
error: 'Failed to read validation history',
|
|
58
|
+
};
|
|
59
|
+
process.stdout.write('---\n');
|
|
60
|
+
process.stdout.write(yamlStringify(errorOutput));
|
|
61
|
+
}
|
|
62
|
+
else {
|
|
63
|
+
// Human mode: Colored output
|
|
64
|
+
console.log(chalk.yellow('ā ļø Failed to read validation history'));
|
|
65
|
+
console.log(chalk.blue('\nš” Run validation:'), chalk.white('npx vibe-validate validate'));
|
|
66
|
+
}
|
|
47
67
|
process.exit(2);
|
|
48
68
|
}
|
|
49
|
-
// Check if
|
|
50
|
-
if (
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
69
|
+
// Check if history exists
|
|
70
|
+
if (!historyNote || historyNote.runs.length === 0) {
|
|
71
|
+
if (yaml) {
|
|
72
|
+
// YAML mode: Output structured no-history response
|
|
73
|
+
const noHistoryOutput = {
|
|
74
|
+
exists: false,
|
|
75
|
+
treeHash: currentTreeHash,
|
|
76
|
+
};
|
|
77
|
+
process.stdout.write('---\n');
|
|
78
|
+
process.stdout.write(yamlStringify(noHistoryOutput));
|
|
79
|
+
}
|
|
80
|
+
else {
|
|
81
|
+
// Human mode: Colored output
|
|
82
|
+
console.log(chalk.yellow('ā ļø No validation history for current working tree'));
|
|
83
|
+
console.log(chalk.gray(` Tree hash: ${currentTreeHash.substring(0, 12)}...`));
|
|
84
|
+
console.log(chalk.blue('\nš” Run validation:'), chalk.white('npx vibe-validate validate'));
|
|
85
|
+
}
|
|
86
|
+
process.exit(2);
|
|
56
87
|
}
|
|
57
|
-
//
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
if (
|
|
63
|
-
|
|
88
|
+
// Find most recent passing run
|
|
89
|
+
const passingRun = [...historyNote.runs].reverse().find(run => run.passed);
|
|
90
|
+
if (!passingRun) {
|
|
91
|
+
// Last validation failed - show error details (same as fresh failure)
|
|
92
|
+
const mostRecent = historyNote.runs[historyNote.runs.length - 1];
|
|
93
|
+
if (yaml) {
|
|
94
|
+
// YAML mode: Output failed result as YAML to stdout
|
|
95
|
+
process.stdout.write('---\n');
|
|
96
|
+
process.stdout.write(yamlStringify(mostRecent.result));
|
|
97
|
+
// Wait for stdout to flush before exiting
|
|
98
|
+
await new Promise(resolve => {
|
|
99
|
+
if (process.stdout.write('')) {
|
|
100
|
+
resolve();
|
|
101
|
+
}
|
|
102
|
+
else {
|
|
103
|
+
process.stdout.once('drain', resolve);
|
|
104
|
+
}
|
|
105
|
+
});
|
|
106
|
+
}
|
|
107
|
+
else {
|
|
108
|
+
// Human-readable mode: Display failure details
|
|
109
|
+
console.log(chalk.red('ā Last validation failed for current working tree'));
|
|
110
|
+
console.log(chalk.gray(` Tree hash: ${currentTreeHash.substring(0, 12)}...`));
|
|
111
|
+
console.log(chalk.gray(` Last validated: ${mostRecent.timestamp}`));
|
|
112
|
+
console.log(chalk.gray(` Branch: ${mostRecent.branch}`));
|
|
113
|
+
// Show which phase/step failed (actionable info)
|
|
114
|
+
if (mostRecent.result?.phases) {
|
|
115
|
+
const failedPhase = mostRecent.result.phases.find(p => !p.passed);
|
|
116
|
+
if (failedPhase) {
|
|
117
|
+
console.log(chalk.red(`\n Failed phase: ${failedPhase.name}`));
|
|
118
|
+
const failedStep = failedPhase.steps?.find(s => !s.passed);
|
|
119
|
+
if (failedStep) {
|
|
120
|
+
console.log(chalk.red(` Failed step: ${failedStep.name}`));
|
|
121
|
+
}
|
|
122
|
+
}
|
|
123
|
+
}
|
|
124
|
+
console.log(chalk.blue('\nš View full error details:'), chalk.white('vibe-validate state'));
|
|
125
|
+
console.log(chalk.blue('š” Fix errors and run validation:'), chalk.white('npx vibe-validate validate'));
|
|
64
126
|
}
|
|
65
|
-
console.log(chalk.blue('\nš” Fix errors and run validation:'), chalk.white('npx vibe-validate validate'));
|
|
66
127
|
process.exit(1);
|
|
67
128
|
}
|
|
68
129
|
// Validation passed!
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
130
|
+
if (yaml) {
|
|
131
|
+
// YAML mode: Output validation result as YAML to stdout
|
|
132
|
+
process.stdout.write('---\n');
|
|
133
|
+
process.stdout.write(yamlStringify(passingRun.result));
|
|
134
|
+
// Wait for stdout to flush before exiting
|
|
135
|
+
await new Promise(resolve => {
|
|
136
|
+
if (process.stdout.write('')) {
|
|
137
|
+
resolve();
|
|
138
|
+
}
|
|
139
|
+
else {
|
|
140
|
+
process.stdout.once('drain', resolve);
|
|
141
|
+
}
|
|
142
|
+
});
|
|
143
|
+
}
|
|
144
|
+
else {
|
|
145
|
+
// Human-readable mode: Display status message
|
|
146
|
+
const durationSecs = (passingRun.duration / 1000).toFixed(1);
|
|
147
|
+
console.log(chalk.green('ā
Validation already passed for current working tree'));
|
|
148
|
+
console.log(chalk.gray(` Tree hash: ${currentTreeHash.substring(0, 12)}...`));
|
|
149
|
+
console.log(chalk.gray(` Last validated: ${passingRun.timestamp}`));
|
|
150
|
+
console.log(chalk.gray(` Duration: ${durationSecs}s`));
|
|
151
|
+
console.log(chalk.gray(` Branch: ${passingRun.branch}`));
|
|
152
|
+
if (passingRun.result?.phases) {
|
|
153
|
+
const totalSteps = passingRun.result.phases.reduce((sum, phase) => sum + (phase.steps?.length || 0), 0);
|
|
154
|
+
console.log(chalk.gray(` Phases: ${passingRun.result.phases.length}, Steps: ${totalSteps}`));
|
|
155
|
+
}
|
|
75
156
|
}
|
|
76
157
|
process.exit(0);
|
|
77
158
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"check-validation.js","sourceRoot":"","sources":["../../src/utils/check-validation.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"check-validation.js","sourceRoot":"","sources":["../../src/utils/check-validation.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAE,cAAc,EAAE,MAAM,oBAAoB,CAAC;AACpD,OAAO,EAAE,eAAe,EAAE,MAAM,wBAAwB,CAAC;AAEzD,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,EAAE,SAAS,IAAI,aAAa,EAAE,MAAM,MAAM,CAAC;AAElD;;;;;;;;;;;GAWG;AACH,MAAM,CAAC,KAAK,UAAU,qBAAqB,CAAC,OAA2B,EAAE,IAAI,GAAG,KAAK;IACnF,wBAAwB;IACxB,IAAI,eAAuB,CAAC;IAC5B,IAAI,CAAC;QACH,eAAe,GAAG,MAAM,cAAc,EAAE,CAAC;IAC3C,CAAC;IAAC,OAAO,MAAM,EAAE,CAAC;QAChB,IAAI,IAAI,EAAE,CAAC;YACT,qCAAqC;YACrC,MAAM,WAAW,GAAG;gBAClB,MAAM,EAAE,KAAK;gBACb,KAAK,EAAE,uBAAuB;aAC/B,CAAC;YACF,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;YAC9B,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,aAAa,CAAC,WAAW,CAAC,CAAC,CAAC;QACnD,CAAC;aAAM,CAAC;YACN,6BAA6B;YAC7B,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,MAAM,CAAC,2BAA2B,CAAC,CAAC,CAAC;YACvD,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,sBAAsB,CAAC,EAAE,KAAK,CAAC,KAAK,CAAC,4BAA4B,CAAC,CAAC,CAAC;QAC7F,CAAC;QACD,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;IAED,yCAAyC;IACzC,IAAI,WAAW,CAAC;IAChB,IAAI,CAAC;QACH,WAAW,GAAG,MAAM,eAAe,CAAC,eAAe,CAAC,CAAC;IACvD,CAAC;IAAC,OAAO,MAAM,EAAE,CAAC;QAChB,IAAI,IAAI,EAAE,CAAC;YACT,qCAAqC;YACrC,MAAM,WAAW,GAAG;gBAClB,MAAM,EAAE,KAAK;gBACb,QAAQ,EAAE,eAAe;gBACzB,KAAK,EAAE,mCAAmC;aAC3C,CAAC;YACF,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;YAC9B,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,aAAa,CAAC,WAAW,CAAC,CAAC,CAAC;QACnD,CAAC;aAAM,CAAC;YACN,6BAA6B;YAC7B,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,MAAM,CAAC,uCAAuC,CAAC,CAAC,CAAC;YACnE,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,sBAAsB,CAAC,EAAE,KAAK,CAAC,KAAK,CAAC,4BAA4B,CAAC,CAAC,CAAC;QAC7F,CAAC;QACD,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;IAED,0BAA0B;IAC1B,IAAI,CAAC,WAAW,IAAI,WAAW,CAAC,IAAI,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QAClD,IAAI,IAAI,EAAE,CAAC;YACT,mDAAmD;YACnD,MAAM,eAAe,GAAG;gBACtB,MAAM,EAAE,KAAK;gBACb,QAAQ,EAAE,eAAe;aAC1B,CAAC;YACF,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;YAC9B,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,aAAa,CAAC,eAAe,CAAC,CAAC,CAAC;QACvD,CAAC;aAAM,CAAC;YACN,6BAA6B;YAC7B,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,MAAM,CAAC,oDAAoD,CAAC,CAAC,CAAC;YAChF,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,iBAAiB,eAAe,CAAC,SAAS,CAAC,CAAC,EAAE,EAAE,CAAC,KAAK,CAAC,CAAC,CAAC;YAChF,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,sBAAsB,CAAC,EAAE,KAAK,CAAC,KAAK,CAAC,4BAA4B,CAAC,CAAC,CAAC;QAC7F,CAAC;QACD,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;IAED,+BAA+B;IAC/B,MAAM,UAAU,GAAG,CAAC,GAAG,WAAW,CAAC,IAAI,CAAC,CAAC,OAAO,EAAE,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;IAE3E,IAAI,CAAC,UAAU,EAAE,CAAC;QAChB,sEAAsE;QACtE,MAAM,UAAU,GAAG,WAAW,CAAC,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;QAEjE,IAAI,IAAI,EAAE,CAAC;YACT,oDAAoD;YACpD,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;YAC9B,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,aAAa,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC,CAAC;YAEvD,0CAA0C;YAC1C,MAAM,IAAI,OAAO,CAAO,OAAO,CAAC,EAAE;gBAChC,IAAI,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC,EAAE,CAAC;oBAC7B,OAAO,EAAE,CAAC;gBACZ,CAAC;qBAAM,CAAC;oBACN,OAAO,CAAC,MAAM,CAAC,IAAI,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;gBACxC,CAAC;YACH,CAAC,CAAC,CAAC;QACL,CAAC;aAAM,CAAC;YACN,+CAA+C;YAC/C,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,mDAAmD,CAAC,CAAC,CAAC;YAC5E,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,iBAAiB,eAAe,CAAC,SAAS,CAAC,CAAC,EAAE,EAAE,CAAC,KAAK,CAAC,CAAC,CAAC;YAChF,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,sBAAsB,UAAU,CAAC,SAAS,EAAE,CAAC,CAAC,CAAC;YACtE,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,cAAc,UAAU,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC;YAE3D,iDAAiD;YACjD,IAAI,UAAU,CAAC,MAAM,EAAE,MAAM,EAAE,CAAC;gBAC9B,MAAM,WAAW,GAAG,UAAU,CAAC,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC;gBAClE,IAAI,WAAW,EAAE,CAAC;oBAChB,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,sBAAsB,WAAW,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC;oBACjE,MAAM,UAAU,GAAG,WAAW,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC;oBAC3D,IAAI,UAAU,EAAE,CAAC;wBACf,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,mBAAmB,UAAU,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC;oBAC/D,CAAC;gBACH,CAAC;YACH,CAAC;YAED,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,+BAA+B,CAAC,EAAE,KAAK,CAAC,KAAK,CAAC,qBAAqB,CAAC,CAAC,CAAC;YAC7F,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,mCAAmC,CAAC,EAAE,KAAK,CAAC,KAAK,CAAC,4BAA4B,CAAC,CAAC,CAAC;QAC1G,CAAC;QAED,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;IAED,qBAAqB;IACrB,IAAI,IAAI,EAAE,CAAC;QACT,wDAAwD;QACxD,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;QAC9B,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,aAAa,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC,CAAC;QAEvD,0CAA0C;QAC1C,MAAM,IAAI,OAAO,CAAO,OAAO,CAAC,EAAE;YAChC,IAAI,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC,EAAE,CAAC;gBAC7B,OAAO,EAAE,CAAC;YACZ,CAAC;iBAAM,CAAC;gBACN,OAAO,CAAC,MAAM,CAAC,IAAI,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;YACxC,CAAC;QACH,CAAC,CAAC,CAAC;IACL,CAAC;SAAM,CAAC;QACN,8CAA8C;QAC9C,MAAM,YAAY,GAAG,CAAC,UAAU,CAAC,QAAQ,GAAG,IAAI,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;QAC7D,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,sDAAsD,CAAC,CAAC,CAAC;QACjF,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,iBAAiB,eAAe,CAAC,SAAS,CAAC,CAAC,EAAE,EAAE,CAAC,KAAK,CAAC,CAAC,CAAC;QAChF,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,sBAAsB,UAAU,CAAC,SAAS,EAAE,CAAC,CAAC,CAAC;QACtE,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,gBAAgB,YAAY,GAAG,CAAC,CAAC,CAAC;QACzD,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,cAAc,UAAU,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC;QAE3D,IAAI,UAAU,CAAC,MAAM,EAAE,MAAM,EAAE,CAAC;YAC9B,MAAM,UAAU,GAAG,UAAU,CAAC,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,KAAK,EAAE,EAAE,CAAC,GAAG,GAAG,CAAC,KAAK,CAAC,KAAK,EAAE,MAAM,IAAI,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;YACxG,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,cAAc,UAAU,CAAC,MAAM,CAAC,MAAM,CAAC,MAAM,YAAY,UAAU,EAAE,CAAC,CAAC,CAAC;QACjG,CAAC;IACH,CAAC;IAED,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AAClB,CAAC"}
|
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Run Validation with Caching
|
|
3
|
+
*
|
|
4
|
+
* Shared workflow for running validation with git tree hash caching.
|
|
5
|
+
* Used by both validate and pre-commit commands to ensure consistent behavior.
|
|
6
|
+
*/
|
|
7
|
+
import type { ValidationResult, ValidationConfig } from '@vibe-validate/core';
|
|
8
|
+
export interface ValidationWorkflowOptions {
|
|
9
|
+
/** Runner configuration for validation */
|
|
10
|
+
runnerConfig: ValidationConfig;
|
|
11
|
+
/** Force validation even if cached */
|
|
12
|
+
force?: boolean;
|
|
13
|
+
/** Show verbose output */
|
|
14
|
+
verbose?: boolean;
|
|
15
|
+
/** Callback for displaying cache hit information */
|
|
16
|
+
onCacheHit?: (info: {
|
|
17
|
+
treeHash: string;
|
|
18
|
+
timestamp: string;
|
|
19
|
+
duration: number;
|
|
20
|
+
branch: string;
|
|
21
|
+
result: ValidationResult;
|
|
22
|
+
}) => void;
|
|
23
|
+
}
|
|
24
|
+
export interface ValidationWorkflowResult {
|
|
25
|
+
/** Validation result */
|
|
26
|
+
result: ValidationResult;
|
|
27
|
+
/** Whether result was from cache */
|
|
28
|
+
fromCache: boolean;
|
|
29
|
+
/** Git tree hash (if in git repo) */
|
|
30
|
+
treeHash: string | null;
|
|
31
|
+
}
|
|
32
|
+
/**
|
|
33
|
+
* Run validation with full git tree hash caching workflow.
|
|
34
|
+
*
|
|
35
|
+
* This is the complete workflow used by both validate and pre-commit commands:
|
|
36
|
+
* 1. Get git tree hash
|
|
37
|
+
* 2. Check cache (git notes)
|
|
38
|
+
* 3. If cache hit: return cached result
|
|
39
|
+
* 4. If cache miss: run validation
|
|
40
|
+
* 5. Record result to git notes
|
|
41
|
+
* 6. Check worktree stability
|
|
42
|
+
* 7. Run health checks
|
|
43
|
+
*
|
|
44
|
+
* @param options - Validation workflow options
|
|
45
|
+
* @returns Validation workflow result
|
|
46
|
+
*/
|
|
47
|
+
export declare function runValidationWithCache(options: ValidationWorkflowOptions): Promise<ValidationWorkflowResult>;
|
|
48
|
+
//# sourceMappingURL=run-validation-with-cache.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"run-validation-with-cache.d.ts","sourceRoot":"","sources":["../../src/utils/run-validation-with-cache.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAUH,OAAO,KAAK,EAAE,gBAAgB,EAAE,gBAAgB,EAAE,MAAM,qBAAqB,CAAC;AAG9E,MAAM,WAAW,yBAAyB;IACxC,0CAA0C;IAC1C,YAAY,EAAE,gBAAgB,CAAC;IAE/B,sCAAsC;IACtC,KAAK,CAAC,EAAE,OAAO,CAAC;IAEhB,0BAA0B;IAC1B,OAAO,CAAC,EAAE,OAAO,CAAC;IAElB,oDAAoD;IACpD,UAAU,CAAC,EAAE,CAAC,IAAI,EAAE;QAClB,QAAQ,EAAE,MAAM,CAAC;QACjB,SAAS,EAAE,MAAM,CAAC;QAClB,QAAQ,EAAE,MAAM,CAAC;QACjB,MAAM,EAAE,MAAM,CAAC;QACf,MAAM,EAAE,gBAAgB,CAAC;KAC1B,KAAK,IAAI,CAAC;CACZ;AAED,MAAM,WAAW,wBAAwB;IACvC,wBAAwB;IACxB,MAAM,EAAE,gBAAgB,CAAC;IAEzB,oCAAoC;IACpC,SAAS,EAAE,OAAO,CAAC;IAEnB,qCAAqC;IACrC,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAC;CACzB;AAED;;;;;;;;;;;;;;GAcG;AACH,wBAAsB,sBAAsB,CAC1C,OAAO,EAAE,yBAAyB,GACjC,OAAO,CAAC,wBAAwB,CAAC,CAqGnC"}
|
|
@@ -0,0 +1,123 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Run Validation with Caching
|
|
3
|
+
*
|
|
4
|
+
* Shared workflow for running validation with git tree hash caching.
|
|
5
|
+
* Used by both validate and pre-commit commands to ensure consistent behavior.
|
|
6
|
+
*/
|
|
7
|
+
import { runValidation } from '@vibe-validate/core';
|
|
8
|
+
import { getGitTreeHash } from '@vibe-validate/git';
|
|
9
|
+
import { recordValidationHistory, checkWorktreeStability, checkHistoryHealth, readHistoryNote, } from '@vibe-validate/history';
|
|
10
|
+
import chalk from 'chalk';
|
|
11
|
+
/**
|
|
12
|
+
* Run validation with full git tree hash caching workflow.
|
|
13
|
+
*
|
|
14
|
+
* This is the complete workflow used by both validate and pre-commit commands:
|
|
15
|
+
* 1. Get git tree hash
|
|
16
|
+
* 2. Check cache (git notes)
|
|
17
|
+
* 3. If cache hit: return cached result
|
|
18
|
+
* 4. If cache miss: run validation
|
|
19
|
+
* 5. Record result to git notes
|
|
20
|
+
* 6. Check worktree stability
|
|
21
|
+
* 7. Run health checks
|
|
22
|
+
*
|
|
23
|
+
* @param options - Validation workflow options
|
|
24
|
+
* @returns Validation workflow result
|
|
25
|
+
*/
|
|
26
|
+
export async function runValidationWithCache(options) {
|
|
27
|
+
const { runnerConfig, force = false, verbose = false, onCacheHit } = options;
|
|
28
|
+
// Get tree hash BEFORE validation (for caching and stability check)
|
|
29
|
+
let treeHashBefore = null;
|
|
30
|
+
try {
|
|
31
|
+
treeHashBefore = await getGitTreeHash();
|
|
32
|
+
}
|
|
33
|
+
catch (_error) {
|
|
34
|
+
// Not in git repo or git command failed - continue without history
|
|
35
|
+
if (verbose) {
|
|
36
|
+
console.warn(chalk.yellow('ā ļø Could not get git tree hash - history recording disabled'));
|
|
37
|
+
}
|
|
38
|
+
}
|
|
39
|
+
// Check cache: if validation already passed for this tree hash, skip re-running
|
|
40
|
+
if (treeHashBefore && !force) {
|
|
41
|
+
try {
|
|
42
|
+
const historyNote = await readHistoryNote(treeHashBefore);
|
|
43
|
+
if (historyNote && historyNote.runs.length > 0) {
|
|
44
|
+
// Find most recent passing run
|
|
45
|
+
const passingRun = [...historyNote.runs]
|
|
46
|
+
.reverse()
|
|
47
|
+
.find(run => run.passed);
|
|
48
|
+
if (passingRun && passingRun.result) {
|
|
49
|
+
// Cache hit! Call callback if provided
|
|
50
|
+
if (onCacheHit) {
|
|
51
|
+
onCacheHit({
|
|
52
|
+
treeHash: treeHashBefore,
|
|
53
|
+
timestamp: passingRun.timestamp,
|
|
54
|
+
duration: passingRun.duration,
|
|
55
|
+
branch: passingRun.branch,
|
|
56
|
+
result: passingRun.result,
|
|
57
|
+
});
|
|
58
|
+
}
|
|
59
|
+
return {
|
|
60
|
+
result: passingRun.result,
|
|
61
|
+
fromCache: true,
|
|
62
|
+
treeHash: treeHashBefore,
|
|
63
|
+
};
|
|
64
|
+
}
|
|
65
|
+
}
|
|
66
|
+
}
|
|
67
|
+
catch (_error) {
|
|
68
|
+
// Cache check failed - proceed with validation
|
|
69
|
+
// This is expected for first-time validation
|
|
70
|
+
}
|
|
71
|
+
}
|
|
72
|
+
// Cache miss - run validation
|
|
73
|
+
const result = await runValidation(runnerConfig);
|
|
74
|
+
// Record validation history (if in git repo and stability check passes)
|
|
75
|
+
if (treeHashBefore) {
|
|
76
|
+
try {
|
|
77
|
+
// Check if worktree changed during validation
|
|
78
|
+
const stability = await checkWorktreeStability(treeHashBefore);
|
|
79
|
+
if (!stability.stable) {
|
|
80
|
+
console.warn(chalk.yellow('\nā ļø Worktree changed during validation'));
|
|
81
|
+
console.warn(chalk.yellow(` Before: ${stability.treeHashBefore.slice(0, 12)}...`));
|
|
82
|
+
console.warn(chalk.yellow(` After: ${stability.treeHashAfter.slice(0, 12)}...`));
|
|
83
|
+
console.warn(chalk.yellow(' Results valid but history not recorded (unstable state)'));
|
|
84
|
+
}
|
|
85
|
+
else {
|
|
86
|
+
// Record to git notes
|
|
87
|
+
const recordResult = await recordValidationHistory(treeHashBefore, result);
|
|
88
|
+
if (recordResult.recorded) {
|
|
89
|
+
if (verbose) {
|
|
90
|
+
console.log(chalk.gray(`\nš History recorded (tree: ${treeHashBefore.slice(0, 12)})`));
|
|
91
|
+
}
|
|
92
|
+
}
|
|
93
|
+
else if (verbose) {
|
|
94
|
+
console.warn(chalk.yellow(`ā ļø History recording failed: ${recordResult.reason}`));
|
|
95
|
+
}
|
|
96
|
+
}
|
|
97
|
+
}
|
|
98
|
+
catch (error) {
|
|
99
|
+
// Silent failure - don't block validation
|
|
100
|
+
if (verbose) {
|
|
101
|
+
const errorMessage = error instanceof Error ? error.message : String(error);
|
|
102
|
+
console.warn(chalk.yellow(`ā ļø History recording error: ${errorMessage}`));
|
|
103
|
+
}
|
|
104
|
+
}
|
|
105
|
+
}
|
|
106
|
+
// Proactive health check (non-blocking)
|
|
107
|
+
try {
|
|
108
|
+
const health = await checkHistoryHealth();
|
|
109
|
+
if (health.shouldWarn) {
|
|
110
|
+
console.log('');
|
|
111
|
+
console.log(chalk.blue(health.warningMessage));
|
|
112
|
+
}
|
|
113
|
+
}
|
|
114
|
+
catch {
|
|
115
|
+
// Silent failure - don't block validation
|
|
116
|
+
}
|
|
117
|
+
return {
|
|
118
|
+
result,
|
|
119
|
+
fromCache: false,
|
|
120
|
+
treeHash: treeHashBefore,
|
|
121
|
+
};
|
|
122
|
+
}
|
|
123
|
+
//# sourceMappingURL=run-validation-with-cache.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"run-validation-with-cache.js","sourceRoot":"","sources":["../../src/utils/run-validation-with-cache.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"runner-adapter.d.ts","sourceRoot":"","sources":["../../src/utils/runner-adapter.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,uBAAuB,CAAC;AAChE,OAAO,KAAK,EAAE,gBAAgB,EAA4D,MAAM,qBAAqB,CAAC;AACtH,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,uBAAuB,CAAC;AAG1D,MAAM,WAAW,aAAa;IAC5B,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,OAAO,EAAE,OAAO,CAAC;IACjB,OAAO,EAAE,YAAY,CAAC;CACvB;AAED;;;;;;GAMG;AACH,wBAAgB,kBAAkB,CAChC,MAAM,EAAE,kBAAkB,EAC1B,OAAO,EAAE,aAAa,GACrB,gBAAgB,CAuBlB"}
|
|
1
|
+
{"version":3,"file":"runner-adapter.d.ts","sourceRoot":"","sources":["../../src/utils/runner-adapter.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,uBAAuB,CAAC;AAChE,OAAO,KAAK,EAAE,gBAAgB,EAA4D,MAAM,qBAAqB,CAAC;AACtH,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,uBAAuB,CAAC;AAG1D,MAAM,WAAW,aAAa;IAC5B,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,OAAO,EAAE,OAAO,CAAC;IACjB,IAAI,CAAC,EAAE,OAAO,CAAC;IACf,OAAO,EAAE,YAAY,CAAC;CACvB;AAED;;;;;;GAMG;AACH,wBAAgB,kBAAkB,CAChC,MAAM,EAAE,kBAAkB,EAC1B,OAAO,EAAE,aAAa,GACrB,gBAAgB,CAuBlB"}
|
|
@@ -21,45 +21,49 @@ export function createRunnerConfig(config, options) {
|
|
|
21
21
|
}
|
|
22
22
|
// Choose callbacks based on verbosity
|
|
23
23
|
const callbacks = options.verbose
|
|
24
|
-
? createVerboseCallbacks()
|
|
25
|
-
: createMinimalCallbacks();
|
|
24
|
+
? createVerboseCallbacks(options.yaml)
|
|
25
|
+
: createMinimalCallbacks(options.yaml);
|
|
26
26
|
return {
|
|
27
27
|
phases: config.validation?.phases || [],
|
|
28
28
|
enableFailFast: true, // Default to fail-fast (individual phases can override)
|
|
29
|
-
forceRun: options.force, // Pass force flag to runner
|
|
30
29
|
verbose: options.verbose, // Pass verbose flag to runner for output streaming
|
|
30
|
+
yaml: options.yaml, // Pass yaml flag to runner for stdout/stderr routing
|
|
31
|
+
developerFeedback: config.developerFeedback ?? false, // Enable extraction quality alerts for dogfooding
|
|
31
32
|
env: envVars,
|
|
32
|
-
stateFilePath: '.vibe-validate-state.yaml',
|
|
33
33
|
...callbacks,
|
|
34
34
|
};
|
|
35
35
|
}
|
|
36
36
|
/**
|
|
37
37
|
* Create verbose console callbacks (colorful, detailed progress)
|
|
38
38
|
*/
|
|
39
|
-
function createVerboseCallbacks() {
|
|
39
|
+
function createVerboseCallbacks(yaml = false) {
|
|
40
|
+
// When yaml mode is on, write to stderr to keep stdout clean for YAML data
|
|
41
|
+
const log = yaml ?
|
|
42
|
+
(msg) => process.stderr.write(msg + '\n') :
|
|
43
|
+
(msg) => console.log(msg);
|
|
40
44
|
return {
|
|
41
45
|
onPhaseStart: (phase) => {
|
|
42
|
-
|
|
46
|
+
log(chalk.blue(`\nš Running phase: ${phase.name}`));
|
|
43
47
|
},
|
|
44
48
|
onPhaseComplete: (phase, result) => {
|
|
45
49
|
if (result.passed) {
|
|
46
|
-
|
|
50
|
+
log(chalk.green(`ā
Phase ${phase.name} completed successfully`));
|
|
47
51
|
}
|
|
48
52
|
else {
|
|
49
|
-
|
|
53
|
+
log(chalk.red(`ā Phase ${phase.name} failed`));
|
|
50
54
|
}
|
|
51
55
|
},
|
|
52
56
|
onStepStart: (step) => {
|
|
53
|
-
|
|
57
|
+
log(chalk.gray(` ā³ ${step.name}...`));
|
|
54
58
|
},
|
|
55
59
|
onStepComplete: (step, result) => {
|
|
56
60
|
if (result.passed) {
|
|
57
|
-
|
|
61
|
+
log(chalk.green(` ā
${step.name} (${result.durationSecs}s)`));
|
|
58
62
|
}
|
|
59
63
|
else {
|
|
60
|
-
|
|
64
|
+
log(chalk.red(` ā ${step.name} failed (${result.durationSecs}s)`));
|
|
61
65
|
if (result.output) {
|
|
62
|
-
|
|
66
|
+
log(chalk.red(` Error: ${result.output}`));
|
|
63
67
|
}
|
|
64
68
|
}
|
|
65
69
|
},
|
|
@@ -68,20 +72,24 @@ function createVerboseCallbacks() {
|
|
|
68
72
|
/**
|
|
69
73
|
* Create minimal callbacks (agent-friendly YAML output)
|
|
70
74
|
*/
|
|
71
|
-
function createMinimalCallbacks() {
|
|
75
|
+
function createMinimalCallbacks(yaml = false) {
|
|
72
76
|
// Minimal YAML-structured progress output
|
|
77
|
+
// When yaml mode is on, write to stderr to keep stdout clean for YAML data
|
|
78
|
+
const log = yaml ?
|
|
79
|
+
(msg) => process.stderr.write(msg + '\n') :
|
|
80
|
+
(msg) => console.log(msg);
|
|
73
81
|
return {
|
|
74
82
|
onPhaseStart: (phase) => {
|
|
75
|
-
|
|
83
|
+
log(`phase_start: ${phase.name}`);
|
|
76
84
|
},
|
|
77
85
|
onPhaseComplete: (phase, result) => {
|
|
78
|
-
|
|
86
|
+
log(`phase_complete: ${phase.name} (${result.passed ? 'passed' : 'failed'})`);
|
|
79
87
|
},
|
|
80
88
|
onStepStart: (step) => {
|
|
81
|
-
|
|
89
|
+
log(` step_start: ${step.name}`);
|
|
82
90
|
},
|
|
83
91
|
onStepComplete: (step, result) => {
|
|
84
|
-
|
|
92
|
+
log(` step_complete: ${step.name} (${result.passed ? 'passed' : 'failed'}, ${result.durationSecs}s)`);
|
|
85
93
|
},
|
|
86
94
|
};
|
|
87
95
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"runner-adapter.js","sourceRoot":"","sources":["../../src/utils/runner-adapter.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAKH,OAAO,KAAK,MAAM,OAAO,CAAC;
|
|
1
|
+
{"version":3,"file":"runner-adapter.js","sourceRoot":"","sources":["../../src/utils/runner-adapter.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,23 +1,18 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* Gitignore Setup Check
|
|
2
|
+
* Gitignore Setup Check (DEPRECATED)
|
|
3
3
|
*
|
|
4
|
-
*
|
|
5
|
-
*
|
|
4
|
+
* @deprecated Since v0.12.0 - State file (.vibe-validate-state.yaml) is deprecated.
|
|
5
|
+
* Validation history is now stored in git notes instead of a state file.
|
|
6
|
+
* This check always passes and does not modify .gitignore.
|
|
7
|
+
*
|
|
8
|
+
* Use `vibe-validate doctor` to detect and remove deprecated state file entries.
|
|
6
9
|
*/
|
|
7
10
|
import type { SetupCheck, CheckResult, FixResult, PreviewResult, FixOptions } from '../setup-engine.js';
|
|
8
11
|
export declare class GitignoreSetupCheck implements SetupCheck {
|
|
9
12
|
readonly id = "gitignore";
|
|
10
|
-
readonly name = "Gitignore Setup";
|
|
11
|
-
check(
|
|
12
|
-
preview(
|
|
13
|
-
fix(
|
|
14
|
-
/**
|
|
15
|
-
* Generate content for a new .gitignore file
|
|
16
|
-
*/
|
|
17
|
-
private generateNewGitignoreContent;
|
|
18
|
-
/**
|
|
19
|
-
* Add state file entry to existing .gitignore content
|
|
20
|
-
*/
|
|
21
|
-
private addEntryToGitignore;
|
|
13
|
+
readonly name = "Gitignore Setup (deprecated)";
|
|
14
|
+
check(_options?: FixOptions): Promise<CheckResult>;
|
|
15
|
+
preview(_options?: FixOptions): Promise<PreviewResult>;
|
|
16
|
+
fix(_options?: FixOptions): Promise<FixResult>;
|
|
22
17
|
}
|
|
23
18
|
//# sourceMappingURL=gitignore-check.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"gitignore-check.d.ts","sourceRoot":"","sources":["../../../src/utils/setup-checks/gitignore-check.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"gitignore-check.d.ts","sourceRoot":"","sources":["../../../src/utils/setup-checks/gitignore-check.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,KAAK,EACV,UAAU,EACV,WAAW,EACX,SAAS,EACT,aAAa,EACb,UAAU,EACX,MAAM,oBAAoB,CAAC;AAE5B,qBAAa,mBAAoB,YAAW,UAAU;IACpD,QAAQ,CAAC,EAAE,eAAe;IAC1B,QAAQ,CAAC,IAAI,kCAAkC;IAEzC,KAAK,CAAC,QAAQ,CAAC,EAAE,UAAU,GAAG,OAAO,CAAC,WAAW,CAAC;IASlD,OAAO,CAAC,QAAQ,CAAC,EAAE,UAAU,GAAG,OAAO,CAAC,aAAa,CAAC;IAStD,GAAG,CAAC,QAAQ,CAAC,EAAE,UAAU,GAAG,OAAO,CAAC,SAAS,CAAC;CAQrD"}
|