@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.
- package/README.md +84 -92
- package/dist/bin.js +137 -20
- 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 +96 -15
- 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 -15
- 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 +385 -82
- package/dist/commands/doctor.js.map +1 -1
- package/dist/commands/generate-workflow.d.ts +6 -2
- package/dist/commands/generate-workflow.d.ts.map +1 -1
- package/dist/commands/generate-workflow.js +188 -33
- 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 +252 -109
- 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 -23
- 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 +101 -14
- 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 +10 -0
- package/dist/commands/watch-pr.d.ts.map +1 -0
- package/dist/commands/watch-pr.js +443 -0
- package/dist/commands/watch-pr.js.map +1 -0
- package/dist/schemas/watch-pr-schema.d.ts +261 -0
- package/dist/schemas/watch-pr-schema.d.ts.map +1 -0
- package/dist/schemas/watch-pr-schema.js +58 -0
- package/dist/schemas/watch-pr-schema.js.map +1 -0
- package/dist/scripts/generate-watch-pr-schema.d.ts +12 -0
- package/dist/scripts/generate-watch-pr-schema.d.ts.map +1 -0
- package/dist/scripts/generate-watch-pr-schema.js +35 -0
- package/dist/scripts/generate-watch-pr-schema.js.map +1 -0
- package/dist/services/ci-provider-registry.d.ts +38 -0
- package/dist/services/ci-provider-registry.d.ts.map +1 -0
- package/dist/services/ci-provider-registry.js +53 -0
- package/dist/services/ci-provider-registry.js.map +1 -0
- package/dist/services/ci-provider.d.ts +165 -0
- package/dist/services/ci-provider.d.ts.map +1 -0
- package/dist/services/ci-provider.js +11 -0
- package/dist/services/ci-provider.js.map +1 -0
- package/dist/services/ci-providers/github-actions.d.ts +41 -0
- package/dist/services/ci-providers/github-actions.d.ts.map +1 -0
- package/dist/services/ci-providers/github-actions.js +314 -0
- package/dist/services/ci-providers/github-actions.js.map +1 -0
- 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/config-loader.d.ts +15 -3
- package/dist/utils/config-loader.d.ts.map +1 -1
- package/dist/utils/config-loader.js +61 -17
- package/dist/utils/config-loader.js.map +1 -1
- package/dist/utils/context-detector.d.ts +1 -1
- package/dist/utils/context-detector.js +1 -1
- package/dist/utils/normalize-line-endings.d.ts +53 -0
- package/dist/utils/normalize-line-endings.d.ts.map +1 -0
- package/dist/utils/normalize-line-endings.js +57 -0
- package/dist/utils/normalize-line-endings.js.map +1 -0
- 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 -138
- package/dist/utils/setup-checks/gitignore-check.js.map +1 -1
- package/dist/utils/template-discovery.d.ts +40 -0
- package/dist/utils/template-discovery.d.ts.map +1 -0
- package/dist/utils/template-discovery.js +136 -0
- package/dist/utils/template-discovery.js.map +1 -0
- 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 +19 -16
- package/watch-pr-result.schema.json +204 -0
- package/LICENSE +0 -21
|
@@ -7,9 +7,7 @@ import type { VibeValidateConfig } from '@vibe-validate/config';
|
|
|
7
7
|
/**
|
|
8
8
|
* Load vibe-validate configuration from project root
|
|
9
9
|
*
|
|
10
|
-
* Searches for
|
|
11
|
-
* - vibe-validate.config.yaml (primary format)
|
|
12
|
-
* - vibe-validate.config.mjs (deprecated, legacy support only)
|
|
10
|
+
* Searches for vibe-validate.config.yaml in the current directory.
|
|
13
11
|
*
|
|
14
12
|
* @param cwd Current working directory (defaults to process.cwd())
|
|
15
13
|
* @returns Configuration object or null if not found
|
|
@@ -29,4 +27,18 @@ export declare function configExists(cwd?: string): boolean;
|
|
|
29
27
|
* @returns Config file path or null if not found
|
|
30
28
|
*/
|
|
31
29
|
export declare function findConfigPath(cwd?: string): string | null;
|
|
30
|
+
/**
|
|
31
|
+
* Load configuration with detailed validation errors
|
|
32
|
+
*
|
|
33
|
+
* When config loading fails, this function attempts to parse the file
|
|
34
|
+
* and validate it to provide specific error messages.
|
|
35
|
+
*
|
|
36
|
+
* @param cwd Current working directory (defaults to process.cwd())
|
|
37
|
+
* @returns Object with config, errors, and file path
|
|
38
|
+
*/
|
|
39
|
+
export declare function loadConfigWithErrors(cwd?: string): Promise<{
|
|
40
|
+
config: VibeValidateConfig | null;
|
|
41
|
+
errors: string[] | null;
|
|
42
|
+
filePath: string | null;
|
|
43
|
+
}>;
|
|
32
44
|
//# sourceMappingURL=config-loader.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"config-loader.d.ts","sourceRoot":"","sources":["../../src/utils/config-loader.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAKH,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,uBAAuB,CAAC;AAGhE
|
|
1
|
+
{"version":3,"file":"config-loader.d.ts","sourceRoot":"","sources":["../../src/utils/config-loader.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAKH,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,uBAAuB,CAAC;AAGhE;;;;;;;GAOG;AACH,wBAAsB,UAAU,CAAC,GAAG,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,kBAAkB,GAAG,IAAI,CAAC,CAajF;AAED;;;;;GAKG;AACH,wBAAgB,YAAY,CAAC,GAAG,CAAC,EAAE,MAAM,GAAG,OAAO,CAKlD;AAED;;;;;GAKG;AACH,wBAAgB,cAAc,CAAC,GAAG,CAAC,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAM1D;AAED;;;;;;;;GAQG;AACH,wBAAsB,oBAAoB,CAAC,GAAG,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC;IAChE,MAAM,EAAE,kBAAkB,GAAG,IAAI,CAAC;IAClC,MAAM,EAAE,MAAM,EAAE,GAAG,IAAI,CAAC;IACxB,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAC;CACzB,CAAC,CAoDD"}
|
|
@@ -10,9 +10,7 @@ import chalk from 'chalk';
|
|
|
10
10
|
/**
|
|
11
11
|
* Load vibe-validate configuration from project root
|
|
12
12
|
*
|
|
13
|
-
* Searches for
|
|
14
|
-
* - vibe-validate.config.yaml (primary format)
|
|
15
|
-
* - vibe-validate.config.mjs (deprecated, legacy support only)
|
|
13
|
+
* Searches for vibe-validate.config.yaml in the current directory.
|
|
16
14
|
*
|
|
17
15
|
* @param cwd Current working directory (defaults to process.cwd())
|
|
18
16
|
* @returns Configuration object or null if not found
|
|
@@ -39,11 +37,8 @@ export async function loadConfig(cwd) {
|
|
|
39
37
|
*/
|
|
40
38
|
export function configExists(cwd) {
|
|
41
39
|
const searchDir = cwd ?? process.cwd();
|
|
42
|
-
const
|
|
43
|
-
|
|
44
|
-
'vibe-validate.config.mjs', // Legacy (deprecated)
|
|
45
|
-
];
|
|
46
|
-
return configPaths.some(path => existsSync(join(searchDir, path)));
|
|
40
|
+
const configPath = 'vibe-validate.config.yaml';
|
|
41
|
+
return existsSync(join(searchDir, configPath));
|
|
47
42
|
}
|
|
48
43
|
/**
|
|
49
44
|
* Find config file path if it exists
|
|
@@ -53,16 +48,65 @@ export function configExists(cwd) {
|
|
|
53
48
|
*/
|
|
54
49
|
export function findConfigPath(cwd) {
|
|
55
50
|
const searchDir = cwd ?? process.cwd();
|
|
56
|
-
const
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
51
|
+
const configPath = 'vibe-validate.config.yaml';
|
|
52
|
+
const fullPath = join(searchDir, configPath);
|
|
53
|
+
return existsSync(fullPath) ? fullPath : null;
|
|
54
|
+
}
|
|
55
|
+
/**
|
|
56
|
+
* Load configuration with detailed validation errors
|
|
57
|
+
*
|
|
58
|
+
* When config loading fails, this function attempts to parse the file
|
|
59
|
+
* and validate it to provide specific error messages.
|
|
60
|
+
*
|
|
61
|
+
* @param cwd Current working directory (defaults to process.cwd())
|
|
62
|
+
* @returns Object with config, errors, and file path
|
|
63
|
+
*/
|
|
64
|
+
export async function loadConfigWithErrors(cwd) {
|
|
65
|
+
const searchDir = cwd ?? process.cwd();
|
|
66
|
+
const configPath = findConfigPath(searchDir);
|
|
67
|
+
if (!configPath) {
|
|
68
|
+
return { config: null, errors: null, filePath: null };
|
|
69
|
+
}
|
|
70
|
+
// Always parse and validate to get detailed errors
|
|
71
|
+
try {
|
|
72
|
+
const { readFileSync } = await import('fs');
|
|
73
|
+
const { parse: parseYaml } = await import('yaml');
|
|
74
|
+
const { safeValidateConfig } = await import('@vibe-validate/config');
|
|
75
|
+
const content = readFileSync(configPath, 'utf-8');
|
|
76
|
+
const raw = parseYaml(content);
|
|
77
|
+
// Remove $schema property if present (used for IDE support only)
|
|
78
|
+
if (raw && typeof raw === 'object' && '$schema' in raw) {
|
|
79
|
+
delete raw['$schema'];
|
|
80
|
+
}
|
|
81
|
+
const validation = safeValidateConfig(raw);
|
|
82
|
+
if (!validation.success) {
|
|
83
|
+
return {
|
|
84
|
+
config: null,
|
|
85
|
+
errors: validation.errors || ['Unknown validation error'],
|
|
86
|
+
filePath: configPath
|
|
87
|
+
};
|
|
88
|
+
}
|
|
89
|
+
// Validation succeeded
|
|
90
|
+
return {
|
|
91
|
+
config: validation.data || null,
|
|
92
|
+
errors: null,
|
|
93
|
+
filePath: configPath
|
|
94
|
+
};
|
|
95
|
+
}
|
|
96
|
+
catch (parseError) {
|
|
97
|
+
// YAML parsing failed
|
|
98
|
+
if (parseError instanceof Error) {
|
|
99
|
+
return {
|
|
100
|
+
config: null,
|
|
101
|
+
errors: [`YAML syntax error: ${parseError.message}`],
|
|
102
|
+
filePath: configPath
|
|
103
|
+
};
|
|
64
104
|
}
|
|
105
|
+
return {
|
|
106
|
+
config: null,
|
|
107
|
+
errors: ['YAML syntax error - check for missing colons, indentation, or invalid characters'],
|
|
108
|
+
filePath: configPath
|
|
109
|
+
};
|
|
65
110
|
}
|
|
66
|
-
return null;
|
|
67
111
|
}
|
|
68
112
|
//# sourceMappingURL=config-loader.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"config-loader.js","sourceRoot":"","sources":["../../src/utils/config-loader.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,IAAI,EAAE,MAAM,MAAM,CAAC;AAC5B,OAAO,EAAE,UAAU,EAAE,MAAM,IAAI,CAAC;AAChC,OAAO,EAAE,iBAAiB,EAAE,MAAM,uBAAuB,CAAC;AAE1D,OAAO,KAAK,MAAM,OAAO,CAAC;AAE1B
|
|
1
|
+
{"version":3,"file":"config-loader.js","sourceRoot":"","sources":["../../src/utils/config-loader.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,IAAI,EAAE,MAAM,MAAM,CAAC;AAC5B,OAAO,EAAE,UAAU,EAAE,MAAM,IAAI,CAAC;AAChC,OAAO,EAAE,iBAAiB,EAAE,MAAM,uBAAuB,CAAC;AAE1D,OAAO,KAAK,MAAM,OAAO,CAAC;AAE1B;;;;;;;GAOG;AACH,MAAM,CAAC,KAAK,UAAU,UAAU,CAAC,GAAY;IAC3C,MAAM,SAAS,GAAG,GAAG,IAAI,OAAO,CAAC,GAAG,EAAE,CAAC;IAEvC,IAAI,CAAC;QACH,mFAAmF;QACnF,MAAM,MAAM,GAAG,MAAM,iBAAiB,CAAC,SAAS,CAAC,CAAC;QAClD,OAAO,MAAM,IAAI,IAAI,CAAC;IACxB,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,IAAI,KAAK,YAAY,KAAK,EAAE,CAAC;YAC3B,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,mCAAmC,KAAK,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC;QAC/E,CAAC;QACD,OAAO,IAAI,CAAC;IACd,CAAC;AACH,CAAC;AAED;;;;;GAKG;AACH,MAAM,UAAU,YAAY,CAAC,GAAY;IACvC,MAAM,SAAS,GAAG,GAAG,IAAI,OAAO,CAAC,GAAG,EAAE,CAAC;IACvC,MAAM,UAAU,GAAG,2BAA2B,CAAC;IAE/C,OAAO,UAAU,CAAC,IAAI,CAAC,SAAS,EAAE,UAAU,CAAC,CAAC,CAAC;AACjD,CAAC;AAED;;;;;GAKG;AACH,MAAM,UAAU,cAAc,CAAC,GAAY;IACzC,MAAM,SAAS,GAAG,GAAG,IAAI,OAAO,CAAC,GAAG,EAAE,CAAC;IACvC,MAAM,UAAU,GAAG,2BAA2B,CAAC;IAC/C,MAAM,QAAQ,GAAG,IAAI,CAAC,SAAS,EAAE,UAAU,CAAC,CAAC;IAE7C,OAAO,UAAU,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC;AAChD,CAAC;AAED;;;;;;;;GAQG;AACH,MAAM,CAAC,KAAK,UAAU,oBAAoB,CAAC,GAAY;IAKrD,MAAM,SAAS,GAAG,GAAG,IAAI,OAAO,CAAC,GAAG,EAAE,CAAC;IACvC,MAAM,UAAU,GAAG,cAAc,CAAC,SAAS,CAAC,CAAC;IAE7C,IAAI,CAAC,UAAU,EAAE,CAAC;QAChB,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC;IACxD,CAAC;IAED,mDAAmD;IACnD,IAAI,CAAC;QACH,MAAM,EAAE,YAAY,EAAE,GAAG,MAAM,MAAM,CAAC,IAAI,CAAC,CAAC;QAC5C,MAAM,EAAE,KAAK,EAAE,SAAS,EAAE,GAAG,MAAM,MAAM,CAAC,MAAM,CAAC,CAAC;QAClD,MAAM,EAAE,kBAAkB,EAAE,GAAG,MAAM,MAAM,CAAC,uBAAuB,CAAC,CAAC;QAErE,MAAM,OAAO,GAAG,YAAY,CAAC,UAAU,EAAE,OAAO,CAAC,CAAC;QAClD,MAAM,GAAG,GAAG,SAAS,CAAC,OAAO,CAAC,CAAC;QAE/B,iEAAiE;QACjE,IAAI,GAAG,IAAI,OAAO,GAAG,KAAK,QAAQ,IAAI,SAAS,IAAI,GAAG,EAAE,CAAC;YACvD,OAAQ,GAA+B,CAAC,SAAS,CAAC,CAAC;QACrD,CAAC;QAED,MAAM,UAAU,GAAG,kBAAkB,CAAC,GAAG,CAAC,CAAC;QAC3C,IAAI,CAAC,UAAU,CAAC,OAAO,EAAE,CAAC;YACxB,OAAO;gBACL,MAAM,EAAE,IAAI;gBACZ,MAAM,EAAE,UAAU,CAAC,MAAM,IAAI,CAAC,0BAA0B,CAAC;gBACzD,QAAQ,EAAE,UAAU;aACrB,CAAC;QACJ,CAAC;QAED,uBAAuB;QACvB,OAAO;YACL,MAAM,EAAE,UAAU,CAAC,IAAI,IAAI,IAAI;YAC/B,MAAM,EAAE,IAAI;YACZ,QAAQ,EAAE,UAAU;SACrB,CAAC;IACJ,CAAC;IAAC,OAAO,UAAU,EAAE,CAAC;QACpB,sBAAsB;QACtB,IAAI,UAAU,YAAY,KAAK,EAAE,CAAC;YAChC,OAAO;gBACL,MAAM,EAAE,IAAI;gBACZ,MAAM,EAAE,CAAC,sBAAsB,UAAU,CAAC,OAAO,EAAE,CAAC;gBACpD,QAAQ,EAAE,UAAU;aACrB,CAAC;QACJ,CAAC;QACD,OAAO;YACL,MAAM,EAAE,IAAI;YACZ,MAAM,EAAE,CAAC,kFAAkF,CAAC;YAC5F,QAAQ,EAAE,UAAU;SACrB,CAAC;IACJ,CAAC;AACH,CAAC"}
|
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
* Agent Context Detection
|
|
3
3
|
*
|
|
4
4
|
* Detects if running in an agent context (Claude Code, Cursor, CI, etc.)
|
|
5
|
-
* and adapts output
|
|
5
|
+
* and adapts output verbosity accordingly (minimal for agents, verbose for interactive).
|
|
6
6
|
*/
|
|
7
7
|
export interface AgentContext {
|
|
8
8
|
isAgent: boolean;
|
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
* Agent Context Detection
|
|
3
3
|
*
|
|
4
4
|
* Detects if running in an agent context (Claude Code, Cursor, CI, etc.)
|
|
5
|
-
* and adapts output
|
|
5
|
+
* and adapts output verbosity accordingly (minimal for agents, verbose for interactive).
|
|
6
6
|
*/
|
|
7
7
|
/**
|
|
8
8
|
* Detect the current execution context
|
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Cross-Platform Line Ending Normalization
|
|
3
|
+
*
|
|
4
|
+
* Provides utilities for handling line endings across different platforms.
|
|
5
|
+
* Windows uses CRLF (\r\n), Unix/macOS uses LF (\n).
|
|
6
|
+
*
|
|
7
|
+
* @packageDocumentation
|
|
8
|
+
*/
|
|
9
|
+
/**
|
|
10
|
+
* Normalize line endings to LF (\n)
|
|
11
|
+
*
|
|
12
|
+
* Converts Windows CRLF (\r\n) to Unix LF (\n) for consistent string processing.
|
|
13
|
+
* This is critical for:
|
|
14
|
+
* - Cross-platform string comparisons
|
|
15
|
+
* - File content parsing (split by '\n')
|
|
16
|
+
* - Test assertions that compare strings
|
|
17
|
+
*
|
|
18
|
+
* @param content - String with potentially mixed line endings
|
|
19
|
+
* @returns String with normalized LF line endings
|
|
20
|
+
*
|
|
21
|
+
* @example
|
|
22
|
+
* ```typescript
|
|
23
|
+
* const windowsText = "line1\r\nline2\r\nline3";
|
|
24
|
+
* const normalized = normalizeLineEndings(windowsText);
|
|
25
|
+
* // Result: "line1\nline2\nline3"
|
|
26
|
+
*
|
|
27
|
+
* const lines = normalized.split('\n');
|
|
28
|
+
* // Works correctly on all platforms
|
|
29
|
+
* ```
|
|
30
|
+
*
|
|
31
|
+
* @public
|
|
32
|
+
*/
|
|
33
|
+
export declare function normalizeLineEndings(content: string): string;
|
|
34
|
+
/**
|
|
35
|
+
* Split content by lines (cross-platform)
|
|
36
|
+
*
|
|
37
|
+
* Splits string by line breaks, handling both Windows (CRLF) and Unix (LF)
|
|
38
|
+
* line endings automatically.
|
|
39
|
+
*
|
|
40
|
+
* @param content - String to split into lines
|
|
41
|
+
* @returns Array of lines
|
|
42
|
+
*
|
|
43
|
+
* @example
|
|
44
|
+
* ```typescript
|
|
45
|
+
* // Works on all platforms
|
|
46
|
+
* const lines = splitLines("line1\r\nline2\nline3");
|
|
47
|
+
* // Result: ["line1", "line2", "line3"]
|
|
48
|
+
* ```
|
|
49
|
+
*
|
|
50
|
+
* @public
|
|
51
|
+
*/
|
|
52
|
+
export declare function splitLines(content: string): string[];
|
|
53
|
+
//# sourceMappingURL=normalize-line-endings.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"normalize-line-endings.d.ts","sourceRoot":"","sources":["../../src/utils/normalize-line-endings.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH;;;;;;;;;;;;;;;;;;;;;;;GAuBG;AACH,wBAAgB,oBAAoB,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,CAE5D;AAED;;;;;;;;;;;;;;;;;GAiBG;AACH,wBAAgB,UAAU,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,EAAE,CAEpD"}
|
|
@@ -0,0 +1,57 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Cross-Platform Line Ending Normalization
|
|
3
|
+
*
|
|
4
|
+
* Provides utilities for handling line endings across different platforms.
|
|
5
|
+
* Windows uses CRLF (\r\n), Unix/macOS uses LF (\n).
|
|
6
|
+
*
|
|
7
|
+
* @packageDocumentation
|
|
8
|
+
*/
|
|
9
|
+
/**
|
|
10
|
+
* Normalize line endings to LF (\n)
|
|
11
|
+
*
|
|
12
|
+
* Converts Windows CRLF (\r\n) to Unix LF (\n) for consistent string processing.
|
|
13
|
+
* This is critical for:
|
|
14
|
+
* - Cross-platform string comparisons
|
|
15
|
+
* - File content parsing (split by '\n')
|
|
16
|
+
* - Test assertions that compare strings
|
|
17
|
+
*
|
|
18
|
+
* @param content - String with potentially mixed line endings
|
|
19
|
+
* @returns String with normalized LF line endings
|
|
20
|
+
*
|
|
21
|
+
* @example
|
|
22
|
+
* ```typescript
|
|
23
|
+
* const windowsText = "line1\r\nline2\r\nline3";
|
|
24
|
+
* const normalized = normalizeLineEndings(windowsText);
|
|
25
|
+
* // Result: "line1\nline2\nline3"
|
|
26
|
+
*
|
|
27
|
+
* const lines = normalized.split('\n');
|
|
28
|
+
* // Works correctly on all platforms
|
|
29
|
+
* ```
|
|
30
|
+
*
|
|
31
|
+
* @public
|
|
32
|
+
*/
|
|
33
|
+
export function normalizeLineEndings(content) {
|
|
34
|
+
return content.replace(/\r\n/g, '\n');
|
|
35
|
+
}
|
|
36
|
+
/**
|
|
37
|
+
* Split content by lines (cross-platform)
|
|
38
|
+
*
|
|
39
|
+
* Splits string by line breaks, handling both Windows (CRLF) and Unix (LF)
|
|
40
|
+
* line endings automatically.
|
|
41
|
+
*
|
|
42
|
+
* @param content - String to split into lines
|
|
43
|
+
* @returns Array of lines
|
|
44
|
+
*
|
|
45
|
+
* @example
|
|
46
|
+
* ```typescript
|
|
47
|
+
* // Works on all platforms
|
|
48
|
+
* const lines = splitLines("line1\r\nline2\nline3");
|
|
49
|
+
* // Result: ["line1", "line2", "line3"]
|
|
50
|
+
* ```
|
|
51
|
+
*
|
|
52
|
+
* @public
|
|
53
|
+
*/
|
|
54
|
+
export function splitLines(content) {
|
|
55
|
+
return normalizeLineEndings(content).split('\n');
|
|
56
|
+
}
|
|
57
|
+
//# sourceMappingURL=normalize-line-endings.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"normalize-line-endings.js","sourceRoot":"","sources":["../../src/utils/normalize-line-endings.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH;;;;;;;;;;;;;;;;;;;;;;;GAuBG;AACH,MAAM,UAAU,oBAAoB,CAAC,OAAe;IAClD,OAAO,OAAO,CAAC,OAAO,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC;AACxC,CAAC;AAED;;;;;;;;;;;;;;;;;GAiBG;AACH,MAAM,UAAU,UAAU,CAAC,OAAe;IACxC,OAAO,oBAAoB,CAAC,OAAO,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;AACnD,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"}
|