@vibe-validate/extractors 0.16.1 → 0.17.0-rc.11

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 (167) hide show
  1. package/dist/extractor-registry.d.ts +103 -0
  2. package/dist/extractor-registry.d.ts.map +1 -0
  3. package/dist/extractor-registry.js +278 -0
  4. package/dist/extractor-registry.js.map +1 -0
  5. package/dist/extractors/ava/index.d.ts +23 -0
  6. package/dist/extractors/ava/index.d.ts.map +1 -0
  7. package/dist/extractors/ava/index.js +507 -0
  8. package/dist/extractors/ava/index.js.map +1 -0
  9. package/dist/extractors/ava/index.test.d.ts +7 -0
  10. package/dist/extractors/ava/index.test.d.ts.map +1 -0
  11. package/dist/extractors/ava/index.test.js +408 -0
  12. package/dist/extractors/ava/index.test.js.map +1 -0
  13. package/dist/extractors/eslint/index.d.ts +18 -0
  14. package/dist/extractors/eslint/index.d.ts.map +1 -0
  15. package/dist/extractors/eslint/index.js +206 -0
  16. package/dist/extractors/eslint/index.js.map +1 -0
  17. package/dist/extractors/eslint/index.test.d.ts +9 -0
  18. package/dist/extractors/eslint/index.test.d.ts.map +1 -0
  19. package/dist/extractors/eslint/index.test.js +191 -0
  20. package/dist/extractors/eslint/index.test.js.map +1 -0
  21. package/dist/extractors/generic/index.d.ts +30 -0
  22. package/dist/extractors/generic/index.d.ts.map +1 -0
  23. package/dist/extractors/generic/index.js +140 -0
  24. package/dist/extractors/generic/index.js.map +1 -0
  25. package/dist/extractors/generic/index.test.d.ts +7 -0
  26. package/dist/extractors/generic/index.test.d.ts.map +1 -0
  27. package/dist/extractors/generic/index.test.js +61 -0
  28. package/dist/extractors/generic/index.test.js.map +1 -0
  29. package/dist/extractors/jasmine/index.d.ts +17 -0
  30. package/dist/extractors/jasmine/index.d.ts.map +1 -0
  31. package/dist/extractors/jasmine/index.js +254 -0
  32. package/dist/extractors/jasmine/index.js.map +1 -0
  33. package/dist/extractors/jasmine/index.test.d.ts +7 -0
  34. package/dist/extractors/jasmine/index.test.d.ts.map +1 -0
  35. package/dist/extractors/jasmine/index.test.js +345 -0
  36. package/dist/extractors/jasmine/index.test.js.map +1 -0
  37. package/dist/extractors/jest/index.d.ts +17 -0
  38. package/dist/extractors/jest/index.d.ts.map +1 -0
  39. package/dist/extractors/jest/index.js +278 -0
  40. package/dist/extractors/jest/index.js.map +1 -0
  41. package/dist/extractors/jest/index.test.d.ts +9 -0
  42. package/dist/extractors/jest/index.test.d.ts.map +1 -0
  43. package/dist/extractors/jest/index.test.js +353 -0
  44. package/dist/extractors/jest/index.test.js.map +1 -0
  45. package/dist/extractors/junit/index.d.ts +18 -0
  46. package/dist/extractors/junit/index.d.ts.map +1 -0
  47. package/dist/extractors/junit/index.js +259 -0
  48. package/dist/extractors/junit/index.js.map +1 -0
  49. package/dist/extractors/junit/index.test.d.ts +7 -0
  50. package/dist/extractors/junit/index.test.d.ts.map +1 -0
  51. package/dist/extractors/junit/index.test.js +341 -0
  52. package/dist/extractors/junit/index.test.js.map +1 -0
  53. package/dist/extractors/maven-checkstyle/index.d.ts +23 -0
  54. package/dist/extractors/maven-checkstyle/index.d.ts.map +1 -0
  55. package/dist/extractors/maven-checkstyle/index.js +263 -0
  56. package/dist/extractors/maven-checkstyle/index.js.map +1 -0
  57. package/dist/extractors/maven-checkstyle/index.test.d.ts +2 -0
  58. package/dist/extractors/maven-checkstyle/index.test.d.ts.map +1 -0
  59. package/dist/extractors/maven-checkstyle/index.test.js +197 -0
  60. package/dist/extractors/maven-checkstyle/index.test.js.map +1 -0
  61. package/dist/extractors/maven-compiler/index.d.ts +23 -0
  62. package/dist/extractors/maven-compiler/index.d.ts.map +1 -0
  63. package/dist/extractors/maven-compiler/index.js +271 -0
  64. package/dist/extractors/maven-compiler/index.js.map +1 -0
  65. package/dist/extractors/maven-compiler/index.test.d.ts +2 -0
  66. package/dist/extractors/maven-compiler/index.test.d.ts.map +1 -0
  67. package/dist/extractors/maven-compiler/index.test.js +189 -0
  68. package/dist/extractors/maven-compiler/index.test.js.map +1 -0
  69. package/dist/extractors/maven-surefire/index.d.ts +23 -0
  70. package/dist/extractors/maven-surefire/index.d.ts.map +1 -0
  71. package/dist/extractors/maven-surefire/index.js +292 -0
  72. package/dist/extractors/maven-surefire/index.js.map +1 -0
  73. package/dist/extractors/maven-surefire/index.test.d.ts +2 -0
  74. package/dist/extractors/maven-surefire/index.test.d.ts.map +1 -0
  75. package/dist/extractors/maven-surefire/index.test.js +169 -0
  76. package/dist/extractors/maven-surefire/index.test.js.map +1 -0
  77. package/dist/extractors/mocha/index.d.ts +17 -0
  78. package/dist/extractors/mocha/index.d.ts.map +1 -0
  79. package/dist/extractors/mocha/index.js +241 -0
  80. package/dist/extractors/mocha/index.js.map +1 -0
  81. package/dist/extractors/mocha/index.test.d.ts +7 -0
  82. package/dist/extractors/mocha/index.test.d.ts.map +1 -0
  83. package/dist/extractors/mocha/index.test.js +300 -0
  84. package/dist/extractors/mocha/index.test.js.map +1 -0
  85. package/dist/extractors/playwright/index.d.ts +17 -0
  86. package/dist/extractors/playwright/index.d.ts.map +1 -0
  87. package/dist/extractors/playwright/index.js +320 -0
  88. package/dist/extractors/playwright/index.js.map +1 -0
  89. package/dist/extractors/playwright/index.test.d.ts +7 -0
  90. package/dist/extractors/playwright/index.test.d.ts.map +1 -0
  91. package/dist/extractors/playwright/index.test.js +274 -0
  92. package/dist/extractors/playwright/index.test.js.map +1 -0
  93. package/dist/extractors/tap/index.d.ts +23 -0
  94. package/dist/extractors/tap/index.d.ts.map +1 -0
  95. package/dist/extractors/tap/index.js +352 -0
  96. package/dist/extractors/tap/index.js.map +1 -0
  97. package/dist/extractors/tap/index.test.d.ts +7 -0
  98. package/dist/extractors/tap/index.test.d.ts.map +1 -0
  99. package/dist/extractors/tap/index.test.js +100 -0
  100. package/dist/extractors/tap/index.test.js.map +1 -0
  101. package/dist/extractors/typescript/index.d.ts +17 -0
  102. package/dist/extractors/typescript/index.d.ts.map +1 -0
  103. package/dist/extractors/typescript/index.js +150 -0
  104. package/dist/extractors/typescript/index.js.map +1 -0
  105. package/dist/extractors/typescript/index.test.d.ts +9 -0
  106. package/dist/extractors/typescript/index.test.d.ts.map +1 -0
  107. package/dist/extractors/typescript/index.test.js +177 -0
  108. package/dist/extractors/typescript/index.test.js.map +1 -0
  109. package/dist/extractors/vitest/index.d.ts +17 -0
  110. package/dist/extractors/vitest/index.d.ts.map +1 -0
  111. package/dist/extractors/vitest/index.js +564 -0
  112. package/dist/extractors/vitest/index.js.map +1 -0
  113. package/dist/extractors/vitest/index.test.d.ts +9 -0
  114. package/dist/extractors/vitest/index.test.d.ts.map +1 -0
  115. package/dist/extractors/vitest/index.test.js +373 -0
  116. package/dist/extractors/vitest/index.test.js.map +1 -0
  117. package/dist/index.d.ts +27 -11
  118. package/dist/index.d.ts.map +1 -1
  119. package/dist/index.js +27 -11
  120. package/dist/index.js.map +1 -1
  121. package/dist/maven-checkstyle-extractor.d.ts +20 -0
  122. package/dist/maven-checkstyle-extractor.d.ts.map +1 -0
  123. package/dist/maven-checkstyle-extractor.js +208 -0
  124. package/dist/maven-checkstyle-extractor.js.map +1 -0
  125. package/dist/maven-compiler-extractor.d.ts +20 -0
  126. package/dist/maven-compiler-extractor.d.ts.map +1 -0
  127. package/dist/maven-compiler-extractor.js +218 -0
  128. package/dist/maven-compiler-extractor.js.map +1 -0
  129. package/dist/maven-surefire-extractor.d.ts +20 -0
  130. package/dist/maven-surefire-extractor.d.ts.map +1 -0
  131. package/dist/maven-surefire-extractor.js +228 -0
  132. package/dist/maven-surefire-extractor.js.map +1 -0
  133. package/dist/maven-utils.d.ts +24 -0
  134. package/dist/maven-utils.d.ts.map +1 -0
  135. package/dist/maven-utils.js +36 -0
  136. package/dist/maven-utils.js.map +1 -0
  137. package/dist/plugin-loader.d.ts +82 -0
  138. package/dist/plugin-loader.d.ts.map +1 -0
  139. package/dist/plugin-loader.js +201 -0
  140. package/dist/plugin-loader.js.map +1 -0
  141. package/dist/result-schema.d.ts +59 -9
  142. package/dist/result-schema.d.ts.map +1 -1
  143. package/dist/result-schema.js +3 -19
  144. package/dist/result-schema.js.map +1 -1
  145. package/dist/sandbox.d.ts +161 -0
  146. package/dist/sandbox.d.ts.map +1 -0
  147. package/dist/sandbox.js +254 -0
  148. package/dist/sandbox.js.map +1 -0
  149. package/dist/sandbox.test.d.ts +8 -0
  150. package/dist/sandbox.test.d.ts.map +1 -0
  151. package/dist/sandbox.test.js +395 -0
  152. package/dist/sandbox.test.js.map +1 -0
  153. package/dist/sandboxed-extractor.d.ts +46 -0
  154. package/dist/sandboxed-extractor.d.ts.map +1 -0
  155. package/dist/sandboxed-extractor.js +172 -0
  156. package/dist/sandboxed-extractor.js.map +1 -0
  157. package/dist/sandboxed-extractor.test.d.ts +5 -0
  158. package/dist/sandboxed-extractor.test.d.ts.map +1 -0
  159. package/dist/sandboxed-extractor.test.js +346 -0
  160. package/dist/sandboxed-extractor.test.js.map +1 -0
  161. package/dist/smart-extractor.d.ts +22 -10
  162. package/dist/smart-extractor.d.ts.map +1 -1
  163. package/dist/smart-extractor.js +116 -163
  164. package/dist/smart-extractor.js.map +1 -1
  165. package/dist/types.d.ts +94 -0
  166. package/dist/types.d.ts.map +1 -1
  167. package/package.json +3 -2
@@ -0,0 +1,103 @@
1
+ /**
2
+ * Extractor Registry
3
+ *
4
+ * Centralized registry of all error extractors with detection logic.
5
+ * All extractors now use the plugin structure with co-located tests and documentation.
6
+ *
7
+ * **Trust Levels** (Phase 2B):
8
+ * - All built-in extractors have `trust: 'full'` (run directly, no sandbox)
9
+ * - External plugins will have `trust: 'sandbox'` (run in isolated-vm)
10
+ * - Use `getSandboxedExtractor()` to get wrapped extract function
11
+ *
12
+ * @package @vibe-validate/extractors
13
+ */
14
+ import type { ErrorExtractorResult, DetectionResult } from './types.js';
15
+ /**
16
+ * Trust level for extractor execution
17
+ * - 'full': Run with full Node.js access (built-in trusted code, no sandbox)
18
+ * - 'sandbox': Run in isolated V8 context (external plugins, secure)
19
+ */
20
+ export type ExtractorTrustLevel = 'full' | 'sandbox';
21
+ /**
22
+ * Extractor descriptor with detection and extraction logic
23
+ */
24
+ export interface ExtractorDescriptor {
25
+ /** Unique name identifying this extractor */
26
+ name: string;
27
+ /** Detection function that analyzes output and returns confidence */
28
+ detect: (_output: string) => DetectionResult;
29
+ /** Extraction function that parses errors from output */
30
+ extract: (_output: string) => ErrorExtractorResult;
31
+ /** Priority for detection order (higher = check first) */
32
+ priority: number;
33
+ /** Trust level for execution (default: 'full' for built-ins) */
34
+ trust: ExtractorTrustLevel;
35
+ /** Optional hints for fast pre-filtering (Phase 2B) */
36
+ hints?: {
37
+ required?: string[];
38
+ anyOf?: string[];
39
+ forbidden?: string[];
40
+ };
41
+ }
42
+ /**
43
+ * Registry of all available extractors
44
+ *
45
+ * All extractors now use the ExtractorPlugin structure with:
46
+ * - Co-located tests (*.test.ts)
47
+ * - Documentation (README.md + CLAUDE.md)
48
+ * - Sample test cases
49
+ * - Fast filtering hints
50
+ * - Structured metadata
51
+ *
52
+ * Extractors are sorted by priority (highest first):
53
+ * 1. Vitest (Priority 100) - "RUN v" header is unmistakable
54
+ * 2. JUnit (Priority 100) - XML format is unique
55
+ * 3. TypeScript (Priority 95) - Very specific error codes
56
+ * 4. Playwright (Priority 95) - .spec.ts files with › separator
57
+ * 5. Jest (Priority 90) - Must check before Mocha
58
+ * 6. Vitest (Priority 90) - Secondary fallback patterns
59
+ * 7. ESLint (Priority 85) - Distinctive format
60
+ * 8. Jasmine (Priority 85) - Distinctive "Failures:" header
61
+ * 9. Ava (Priority 82) - Ava v6+ format with ✘ markers
62
+ * 10. Mocha (Priority 80) - Generic "passing/failing" patterns
63
+ * 11. TAP (Priority 78) - TAP version 13 protocol
64
+ * 12. Maven Compiler (Priority 70) - Compilation error patterns
65
+ * 13. Maven Checkstyle (Priority 60) - Checkstyle-specific patterns
66
+ * 14. Maven Surefire (Priority 65) - Test plugin patterns
67
+ * 15. Generic (Priority 10) - Fallback for unknown formats
68
+ */
69
+ export declare const EXTRACTOR_REGISTRY: ExtractorDescriptor[];
70
+ /**
71
+ * Get an extractor descriptor by name
72
+ *
73
+ * @param name - The extractor name to find
74
+ * @returns The extractor descriptor, or undefined if not found
75
+ */
76
+ export declare function getExtractorByName(name: string): ExtractorDescriptor | undefined;
77
+ /**
78
+ * Register external plugins to the extractor registry
79
+ *
80
+ * This function is called at runtime to add dynamically loaded plugins from:
81
+ * - Local plugin directories (vibe-validate-local-plugins/)
82
+ * - npm packages
83
+ * - Explicit config paths
84
+ *
85
+ * Plugins are inserted in priority order to maintain registry sorting.
86
+ *
87
+ * @param plugins - Array of ExtractorPlugins to register
88
+ * @param trustLevel - Trust level for execution ('sandbox' for external plugins)
89
+ */
90
+ export declare function registerPlugins(plugins: Array<{
91
+ metadata: {
92
+ name: string;
93
+ };
94
+ priority: number;
95
+ hints?: {
96
+ required?: string[];
97
+ anyOf?: string[];
98
+ forbidden?: string[];
99
+ };
100
+ detect: (_output: string) => DetectionResult;
101
+ extract: (_output: string) => ErrorExtractorResult;
102
+ }>, trustLevel?: ExtractorTrustLevel): void;
103
+ //# sourceMappingURL=extractor-registry.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"extractor-registry.d.ts","sourceRoot":"","sources":["../src/extractor-registry.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAEH,OAAO,KAAK,EAAE,oBAAoB,EAAE,eAAe,EAAE,MAAM,YAAY,CAAC;AAkBxE;;;;GAIG;AACH,MAAM,MAAM,mBAAmB,GAAG,MAAM,GAAG,SAAS,CAAC;AAErD;;GAEG;AACH,MAAM,WAAW,mBAAmB;IAClC,6CAA6C;IAC7C,IAAI,EAAE,MAAM,CAAC;IACb,qEAAqE;IACrE,MAAM,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,eAAe,CAAC;IAC7C,yDAAyD;IACzD,OAAO,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,oBAAoB,CAAC;IACnD,0DAA0D;IAC1D,QAAQ,EAAE,MAAM,CAAC;IACjB,gEAAgE;IAChE,KAAK,EAAE,mBAAmB,CAAC;IAC3B,uDAAuD;IACvD,KAAK,CAAC,EAAE;QACN,QAAQ,CAAC,EAAE,MAAM,EAAE,CAAC;QACpB,KAAK,CAAC,EAAE,MAAM,EAAE,CAAC;QACjB,SAAS,CAAC,EAAE,MAAM,EAAE,CAAC;KACtB,CAAC;CACH;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;GA0BG;AACH,eAAO,MAAM,kBAAkB,EAAE,mBAAmB,EAqLnD,CAAC;AAEF;;;;;GAKG;AACH,wBAAgB,kBAAkB,CAAC,IAAI,EAAE,MAAM,GAAG,mBAAmB,GAAG,SAAS,CAEhF;AAED;;;;;;;;;;;;GAYG;AACH,wBAAgB,eAAe,CAC7B,OAAO,EAAE,KAAK,CAAC;IAAE,QAAQ,EAAE;QAAE,IAAI,EAAE,MAAM,CAAA;KAAE,CAAC;IAAC,QAAQ,EAAE,MAAM,CAAC;IAAC,KAAK,CAAC,EAAE;QAAE,QAAQ,CAAC,EAAE,MAAM,EAAE,CAAC;QAAC,KAAK,CAAC,EAAE,MAAM,EAAE,CAAC;QAAC,SAAS,CAAC,EAAE,MAAM,EAAE,CAAA;KAAE,CAAC;IAAC,MAAM,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,eAAe,CAAC;IAAC,OAAO,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,oBAAoB,CAAA;CAAE,CAAC,EAC3O,UAAU,GAAE,mBAA+B,GAC1C,IAAI,CAsBN"}
@@ -0,0 +1,278 @@
1
+ /**
2
+ * Extractor Registry
3
+ *
4
+ * Centralized registry of all error extractors with detection logic.
5
+ * All extractors now use the plugin structure with co-located tests and documentation.
6
+ *
7
+ * **Trust Levels** (Phase 2B):
8
+ * - All built-in extractors have `trust: 'full'` (run directly, no sandbox)
9
+ * - External plugins will have `trust: 'sandbox'` (run in isolated-vm)
10
+ * - Use `getSandboxedExtractor()` to get wrapped extract function
11
+ *
12
+ * @package @vibe-validate/extractors
13
+ */
14
+ // Import all extractor plugins
15
+ import typescriptPlugin from './extractors/typescript/index.js';
16
+ import eslintPlugin from './extractors/eslint/index.js';
17
+ import vitestPlugin from './extractors/vitest/index.js';
18
+ import jestPlugin from './extractors/jest/index.js';
19
+ import mochaPlugin from './extractors/mocha/index.js';
20
+ import jasminePlugin from './extractors/jasmine/index.js';
21
+ import playwrightPlugin from './extractors/playwright/index.js';
22
+ import junitPlugin from './extractors/junit/index.js';
23
+ import mavenCheckstylePlugin from './extractors/maven-checkstyle/index.js';
24
+ import mavenSurefirePlugin from './extractors/maven-surefire/index.js';
25
+ import mavenCompilerPlugin from './extractors/maven-compiler/index.js';
26
+ import avaPlugin from './extractors/ava/index.js';
27
+ import tapPlugin from './extractors/tap/index.js';
28
+ import genericPlugin from './extractors/generic/index.js';
29
+ /**
30
+ * Registry of all available extractors
31
+ *
32
+ * All extractors now use the ExtractorPlugin structure with:
33
+ * - Co-located tests (*.test.ts)
34
+ * - Documentation (README.md + CLAUDE.md)
35
+ * - Sample test cases
36
+ * - Fast filtering hints
37
+ * - Structured metadata
38
+ *
39
+ * Extractors are sorted by priority (highest first):
40
+ * 1. Vitest (Priority 100) - "RUN v" header is unmistakable
41
+ * 2. JUnit (Priority 100) - XML format is unique
42
+ * 3. TypeScript (Priority 95) - Very specific error codes
43
+ * 4. Playwright (Priority 95) - .spec.ts files with › separator
44
+ * 5. Jest (Priority 90) - Must check before Mocha
45
+ * 6. Vitest (Priority 90) - Secondary fallback patterns
46
+ * 7. ESLint (Priority 85) - Distinctive format
47
+ * 8. Jasmine (Priority 85) - Distinctive "Failures:" header
48
+ * 9. Ava (Priority 82) - Ava v6+ format with ✘ markers
49
+ * 10. Mocha (Priority 80) - Generic "passing/failing" patterns
50
+ * 11. TAP (Priority 78) - TAP version 13 protocol
51
+ * 12. Maven Compiler (Priority 70) - Compilation error patterns
52
+ * 13. Maven Checkstyle (Priority 60) - Checkstyle-specific patterns
53
+ * 14. Maven Surefire (Priority 65) - Test plugin patterns
54
+ * 15. Generic (Priority 10) - Fallback for unknown formats
55
+ */
56
+ export const EXTRACTOR_REGISTRY = [
57
+ // Vitest (Priority Check) - "RUN v" header is 100% unique to Vitest
58
+ // Must check BEFORE other test frameworks to prevent false positives
59
+ {
60
+ name: vitestPlugin.metadata.name,
61
+ priority: 100, // Explicit priority for RUN v header check
62
+ trust: 'full', // Built-in trusted code
63
+ detect: (output) => {
64
+ // eslint-disable-next-line sonarjs/slow-regex -- False positive: regex is anchored and has limited repetition
65
+ if (/^\s*RUN\s+v\d+\.\d+\.\d+/m.test(output)) {
66
+ const patterns = ['RUN v#### version header'];
67
+ if (output.includes('×'))
68
+ patterns.push('× symbol (U+00D7)');
69
+ if (output.includes('❌'))
70
+ patterns.push('❌ cross mark');
71
+ if (output.includes(' ❯ '))
72
+ patterns.push('❯ arrow marker');
73
+ if (output.includes('Test Files'))
74
+ patterns.push('Test Files summary');
75
+ if (output.includes('.test.ts'))
76
+ patterns.push('.test.ts files');
77
+ if (/FAIL\s+\d+\s+test\s+(file|case)/i.exec(output))
78
+ patterns.push('FAIL N test files/cases pattern');
79
+ return {
80
+ confidence: 100,
81
+ patterns,
82
+ reason: 'Vitest test output format detected (RUN v#### header)',
83
+ };
84
+ }
85
+ return { confidence: 0, patterns: [], reason: '' };
86
+ },
87
+ extract: vitestPlugin.extract,
88
+ },
89
+ // JUnit XML - Unique XML format
90
+ {
91
+ name: junitPlugin.metadata.name,
92
+ priority: junitPlugin.priority,
93
+ trust: 'full', // Built-in trusted code
94
+ detect: junitPlugin.detect,
95
+ extract: junitPlugin.extract,
96
+ },
97
+ // TypeScript - Very distinctive error codes (TS####)
98
+ {
99
+ name: typescriptPlugin.metadata.name,
100
+ priority: typescriptPlugin.priority,
101
+ trust: 'full', // Built-in trusted code
102
+ detect: typescriptPlugin.detect,
103
+ extract: typescriptPlugin.extract,
104
+ },
105
+ // Playwright - .spec.ts files with › separator
106
+ {
107
+ name: playwrightPlugin.metadata.name,
108
+ priority: playwrightPlugin.priority,
109
+ trust: 'full', // Built-in trusted code
110
+ detect: playwrightPlugin.detect,
111
+ extract: playwrightPlugin.extract,
112
+ },
113
+ // Jest - Must check BEFORE Mocha to avoid false positives
114
+ {
115
+ name: jestPlugin.metadata.name,
116
+ priority: jestPlugin.priority,
117
+ trust: 'full', // Built-in trusted code
118
+ detect: jestPlugin.detect,
119
+ extract: jestPlugin.extract,
120
+ },
121
+ // Vitest (Secondary) - Fallback patterns if "RUN v" not found
122
+ {
123
+ name: vitestPlugin.metadata.name,
124
+ priority: 90, // Secondary check with fallback patterns
125
+ trust: 'full', // Built-in trusted code
126
+ detect: (output) => {
127
+ // Require MULTIPLE patterns together to avoid false positives:
128
+ // - "Test Files" keyword (unique to Vitest) OR
129
+ // - (× OR ❯ OR ❌) AND (FAIL pattern OR .test.ts files)
130
+ const hasVitestErrorMarkers = output.includes('×') || output.includes(' ❯ ') || output.includes('❌');
131
+ const hasTestFilesKeyword = output.includes('Test Files');
132
+ const hasFailPattern = /FAIL\s+\d+\s+test\s+(file|case)/i.exec(output);
133
+ const hasTestTsFiles = output.includes('.test.ts');
134
+ // Option 1: "Test Files" keyword is very distinctive (Vitest-specific)
135
+ // Option 2: Error markers + test file patterns
136
+ const hasVitestMarkers = hasTestFilesKeyword || (hasVitestErrorMarkers && (hasFailPattern ?? hasTestTsFiles));
137
+ if (hasVitestMarkers) {
138
+ const patterns = [];
139
+ if (output.includes('×'))
140
+ patterns.push('× symbol (U+00D7)');
141
+ if (output.includes('❌'))
142
+ patterns.push('❌ cross mark');
143
+ if (output.includes(' ❯ '))
144
+ patterns.push('❯ arrow marker');
145
+ if (hasTestFilesKeyword)
146
+ patterns.push('Test Files summary');
147
+ if (hasTestTsFiles)
148
+ patterns.push('.test.ts files');
149
+ if (hasFailPattern)
150
+ patterns.push('FAIL N test files/cases pattern');
151
+ return {
152
+ confidence: 90,
153
+ patterns,
154
+ reason: 'Vitest test output format detected',
155
+ };
156
+ }
157
+ return { confidence: 0, patterns: [], reason: '' };
158
+ },
159
+ extract: vitestPlugin.extract,
160
+ },
161
+ // ESLint - Distinctive problem summary and line:col format
162
+ {
163
+ name: eslintPlugin.metadata.name,
164
+ priority: eslintPlugin.priority,
165
+ trust: 'full', // Built-in trusted code
166
+ detect: eslintPlugin.detect,
167
+ extract: eslintPlugin.extract,
168
+ },
169
+ // Jasmine - Distinctive "Failures:" header
170
+ {
171
+ name: jasminePlugin.metadata.name,
172
+ priority: jasminePlugin.priority,
173
+ trust: 'full', // Built-in trusted code
174
+ detect: jasminePlugin.detect,
175
+ extract: jasminePlugin.extract,
176
+ },
177
+ // Ava - Ava v6+ format with ✘ markers
178
+ {
179
+ name: avaPlugin.metadata.name,
180
+ priority: avaPlugin.priority,
181
+ trust: 'full', // Built-in trusted code
182
+ detect: avaPlugin.detect,
183
+ extract: avaPlugin.extract,
184
+ },
185
+ // Mocha - Generic patterns, checked AFTER Jest and Jasmine
186
+ {
187
+ name: mochaPlugin.metadata.name,
188
+ priority: mochaPlugin.priority,
189
+ trust: 'full', // Built-in trusted code
190
+ detect: mochaPlugin.detect,
191
+ extract: mochaPlugin.extract,
192
+ },
193
+ // TAP - TAP version 13 protocol
194
+ {
195
+ name: tapPlugin.metadata.name,
196
+ priority: tapPlugin.priority,
197
+ trust: 'full', // Built-in trusted code
198
+ detect: tapPlugin.detect,
199
+ extract: tapPlugin.extract,
200
+ },
201
+ // Maven Compiler - Compilation error markers
202
+ {
203
+ name: mavenCompilerPlugin.metadata.name,
204
+ priority: mavenCompilerPlugin.priority,
205
+ trust: 'full', // Built-in trusted code
206
+ detect: mavenCompilerPlugin.detect,
207
+ extract: mavenCompilerPlugin.extract,
208
+ },
209
+ // Maven Surefire - Test plugin patterns
210
+ {
211
+ name: mavenSurefirePlugin.metadata.name,
212
+ priority: mavenSurefirePlugin.priority,
213
+ trust: 'full', // Built-in trusted code
214
+ detect: mavenSurefirePlugin.detect,
215
+ extract: mavenSurefirePlugin.extract,
216
+ },
217
+ // Maven Checkstyle - Checkstyle plugin markers
218
+ {
219
+ name: mavenCheckstylePlugin.metadata.name,
220
+ priority: mavenCheckstylePlugin.priority,
221
+ trust: 'full', // Built-in trusted code
222
+ detect: mavenCheckstylePlugin.detect,
223
+ extract: mavenCheckstylePlugin.extract,
224
+ },
225
+ // Generic - Fallback extractor (lowest priority)
226
+ {
227
+ name: genericPlugin.metadata.name,
228
+ priority: genericPlugin.priority,
229
+ trust: 'full', // Built-in trusted code
230
+ detect: genericPlugin.detect,
231
+ extract: genericPlugin.extract,
232
+ },
233
+ ];
234
+ /**
235
+ * Get an extractor descriptor by name
236
+ *
237
+ * @param name - The extractor name to find
238
+ * @returns The extractor descriptor, or undefined if not found
239
+ */
240
+ export function getExtractorByName(name) {
241
+ return EXTRACTOR_REGISTRY.find(descriptor => descriptor.name === name);
242
+ }
243
+ /**
244
+ * Register external plugins to the extractor registry
245
+ *
246
+ * This function is called at runtime to add dynamically loaded plugins from:
247
+ * - Local plugin directories (vibe-validate-local-plugins/)
248
+ * - npm packages
249
+ * - Explicit config paths
250
+ *
251
+ * Plugins are inserted in priority order to maintain registry sorting.
252
+ *
253
+ * @param plugins - Array of ExtractorPlugins to register
254
+ * @param trustLevel - Trust level for execution ('sandbox' for external plugins)
255
+ */
256
+ export function registerPlugins(plugins, trustLevel = 'sandbox') {
257
+ for (const plugin of plugins) {
258
+ const descriptor = {
259
+ name: plugin.metadata.name,
260
+ priority: plugin.priority,
261
+ trust: trustLevel,
262
+ detect: plugin.detect,
263
+ extract: plugin.extract,
264
+ ...(plugin.hints && { hints: plugin.hints }),
265
+ };
266
+ // Find correct insertion point to maintain priority order (highest first)
267
+ const insertIndex = EXTRACTOR_REGISTRY.findIndex(ext => ext.priority < plugin.priority);
268
+ if (insertIndex === -1) {
269
+ // Plugin has lowest priority, add to end
270
+ EXTRACTOR_REGISTRY.push(descriptor);
271
+ }
272
+ else {
273
+ // Insert at correct priority position
274
+ EXTRACTOR_REGISTRY.splice(insertIndex, 0, descriptor);
275
+ }
276
+ }
277
+ }
278
+ //# sourceMappingURL=extractor-registry.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"extractor-registry.js","sourceRoot":"","sources":["../src/extractor-registry.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,23 @@
1
+ /**
2
+ * Ava Error Extractor Plugin
3
+ *
4
+ * Parses Ava test output and formats failures for LLM consumption.
5
+ * Supports Ava v6+ output format with Unicode symbols and clean error formatting.
6
+ *
7
+ * @package @vibe-validate/extractors
8
+ */
9
+ import type { ExtractorPlugin, DetectionResult, ErrorExtractorResult } from '../../types.js';
10
+ /**
11
+ * Detects if output is from Ava test framework
12
+ */
13
+ export declare function detectAva(output: string): DetectionResult;
14
+ /**
15
+ * Extract errors from Ava test output
16
+ */
17
+ export declare function extractAva(output: string, _command?: string): ErrorExtractorResult;
18
+ /**
19
+ * Ava Extractor Plugin
20
+ */
21
+ declare const avaExtractor: ExtractorPlugin;
22
+ export default avaExtractor;
23
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/extractors/ava/index.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,KAAK,EACV,eAAe,EACf,eAAe,EACf,oBAAoB,EAGrB,MAAM,gBAAgB,CAAC;AAkCxB;;GAEG;AAEH,wBAAgB,SAAS,CAAC,MAAM,EAAE,MAAM,GAAG,eAAe,CAqEzD;AAED;;GAEG;AACH,wBAAgB,UAAU,CAAC,MAAM,EAAE,MAAM,EAAE,QAAQ,CAAC,EAAE,MAAM,GAAG,oBAAoB,CAqGlF;AAgTD;;GAEG;AACH,QAAA,MAAM,YAAY,EAAE,eA+DnB,CAAC;AAEF,eAAe,YAAY,CAAC"}