@yuaone/core 0.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (235) hide show
  1. package/LICENSE +663 -0
  2. package/README.md +15 -0
  3. package/dist/__tests__/context-manager.test.d.ts +6 -0
  4. package/dist/__tests__/context-manager.test.d.ts.map +1 -0
  5. package/dist/__tests__/context-manager.test.js +220 -0
  6. package/dist/__tests__/context-manager.test.js.map +1 -0
  7. package/dist/__tests__/governor.test.d.ts +6 -0
  8. package/dist/__tests__/governor.test.d.ts.map +1 -0
  9. package/dist/__tests__/governor.test.js +210 -0
  10. package/dist/__tests__/governor.test.js.map +1 -0
  11. package/dist/__tests__/model-router.test.d.ts +6 -0
  12. package/dist/__tests__/model-router.test.d.ts.map +1 -0
  13. package/dist/__tests__/model-router.test.js +329 -0
  14. package/dist/__tests__/model-router.test.js.map +1 -0
  15. package/dist/agent-logger.d.ts +384 -0
  16. package/dist/agent-logger.d.ts.map +1 -0
  17. package/dist/agent-logger.js +820 -0
  18. package/dist/agent-logger.js.map +1 -0
  19. package/dist/agent-loop.d.ts +163 -0
  20. package/dist/agent-loop.d.ts.map +1 -0
  21. package/dist/agent-loop.js +609 -0
  22. package/dist/agent-loop.js.map +1 -0
  23. package/dist/agent-modes.d.ts +85 -0
  24. package/dist/agent-modes.d.ts.map +1 -0
  25. package/dist/agent-modes.js +418 -0
  26. package/dist/agent-modes.js.map +1 -0
  27. package/dist/approval.d.ts +137 -0
  28. package/dist/approval.d.ts.map +1 -0
  29. package/dist/approval.js +299 -0
  30. package/dist/approval.js.map +1 -0
  31. package/dist/async-completion-queue.d.ts +56 -0
  32. package/dist/async-completion-queue.d.ts.map +1 -0
  33. package/dist/async-completion-queue.js +77 -0
  34. package/dist/async-completion-queue.js.map +1 -0
  35. package/dist/auto-fix.d.ts +174 -0
  36. package/dist/auto-fix.d.ts.map +1 -0
  37. package/dist/auto-fix.js +319 -0
  38. package/dist/auto-fix.js.map +1 -0
  39. package/dist/codebase-context.d.ts +396 -0
  40. package/dist/codebase-context.d.ts.map +1 -0
  41. package/dist/codebase-context.js +1260 -0
  42. package/dist/codebase-context.js.map +1 -0
  43. package/dist/conflict-resolver.d.ts +191 -0
  44. package/dist/conflict-resolver.d.ts.map +1 -0
  45. package/dist/conflict-resolver.js +524 -0
  46. package/dist/conflict-resolver.js.map +1 -0
  47. package/dist/constants.d.ts +52 -0
  48. package/dist/constants.d.ts.map +1 -0
  49. package/dist/constants.js +141 -0
  50. package/dist/constants.js.map +1 -0
  51. package/dist/context-budget.d.ts +435 -0
  52. package/dist/context-budget.d.ts.map +1 -0
  53. package/dist/context-budget.js +903 -0
  54. package/dist/context-budget.js.map +1 -0
  55. package/dist/context-compressor.d.ts +143 -0
  56. package/dist/context-compressor.d.ts.map +1 -0
  57. package/dist/context-compressor.js +511 -0
  58. package/dist/context-compressor.js.map +1 -0
  59. package/dist/context-manager.d.ts +112 -0
  60. package/dist/context-manager.d.ts.map +1 -0
  61. package/dist/context-manager.js +247 -0
  62. package/dist/context-manager.js.map +1 -0
  63. package/dist/continuous-reflection.d.ts +267 -0
  64. package/dist/continuous-reflection.d.ts.map +1 -0
  65. package/dist/continuous-reflection.js +338 -0
  66. package/dist/continuous-reflection.js.map +1 -0
  67. package/dist/cross-file-refactor.d.ts +352 -0
  68. package/dist/cross-file-refactor.d.ts.map +1 -0
  69. package/dist/cross-file-refactor.js +1544 -0
  70. package/dist/cross-file-refactor.js.map +1 -0
  71. package/dist/dag-orchestrator.d.ts +138 -0
  72. package/dist/dag-orchestrator.d.ts.map +1 -0
  73. package/dist/dag-orchestrator.js +379 -0
  74. package/dist/dag-orchestrator.js.map +1 -0
  75. package/dist/debate-orchestrator.d.ts +301 -0
  76. package/dist/debate-orchestrator.d.ts.map +1 -0
  77. package/dist/debate-orchestrator.js +719 -0
  78. package/dist/debate-orchestrator.js.map +1 -0
  79. package/dist/dependency-analyzer.d.ts +113 -0
  80. package/dist/dependency-analyzer.d.ts.map +1 -0
  81. package/dist/dependency-analyzer.js +444 -0
  82. package/dist/dependency-analyzer.js.map +1 -0
  83. package/dist/design-loop.d.ts +59 -0
  84. package/dist/design-loop.d.ts.map +1 -0
  85. package/dist/design-loop.js +344 -0
  86. package/dist/design-loop.js.map +1 -0
  87. package/dist/doc-intelligence.d.ts +383 -0
  88. package/dist/doc-intelligence.d.ts.map +1 -0
  89. package/dist/doc-intelligence.js +1307 -0
  90. package/dist/doc-intelligence.js.map +1 -0
  91. package/dist/dynamic-role-generator.d.ts +76 -0
  92. package/dist/dynamic-role-generator.d.ts.map +1 -0
  93. package/dist/dynamic-role-generator.js +194 -0
  94. package/dist/dynamic-role-generator.js.map +1 -0
  95. package/dist/errors.d.ts +69 -0
  96. package/dist/errors.d.ts.map +1 -0
  97. package/dist/errors.js +102 -0
  98. package/dist/errors.js.map +1 -0
  99. package/dist/event-bus.d.ts +159 -0
  100. package/dist/event-bus.d.ts.map +1 -0
  101. package/dist/event-bus.js +305 -0
  102. package/dist/event-bus.js.map +1 -0
  103. package/dist/execution-engine.d.ts +425 -0
  104. package/dist/execution-engine.d.ts.map +1 -0
  105. package/dist/execution-engine.js +1555 -0
  106. package/dist/execution-engine.js.map +1 -0
  107. package/dist/git-intelligence.d.ts +306 -0
  108. package/dist/git-intelligence.d.ts.map +1 -0
  109. package/dist/git-intelligence.js +1099 -0
  110. package/dist/git-intelligence.js.map +1 -0
  111. package/dist/governor.d.ts +77 -0
  112. package/dist/governor.d.ts.map +1 -0
  113. package/dist/governor.js +161 -0
  114. package/dist/governor.js.map +1 -0
  115. package/dist/hierarchical-planner.d.ts +313 -0
  116. package/dist/hierarchical-planner.d.ts.map +1 -0
  117. package/dist/hierarchical-planner.js +981 -0
  118. package/dist/hierarchical-planner.js.map +1 -0
  119. package/dist/index.d.ts +121 -0
  120. package/dist/index.d.ts.map +1 -0
  121. package/dist/index.js +123 -0
  122. package/dist/index.js.map +1 -0
  123. package/dist/intent-inference.d.ts +103 -0
  124. package/dist/intent-inference.d.ts.map +1 -0
  125. package/dist/intent-inference.js +605 -0
  126. package/dist/intent-inference.js.map +1 -0
  127. package/dist/interrupt-manager.d.ts +143 -0
  128. package/dist/interrupt-manager.d.ts.map +1 -0
  129. package/dist/interrupt-manager.js +196 -0
  130. package/dist/interrupt-manager.js.map +1 -0
  131. package/dist/kernel.d.ts +564 -0
  132. package/dist/kernel.d.ts.map +1 -0
  133. package/dist/kernel.js +1419 -0
  134. package/dist/kernel.js.map +1 -0
  135. package/dist/language-support.d.ts +232 -0
  136. package/dist/language-support.d.ts.map +1 -0
  137. package/dist/language-support.js +1134 -0
  138. package/dist/language-support.js.map +1 -0
  139. package/dist/llm-client.d.ts +82 -0
  140. package/dist/llm-client.d.ts.map +1 -0
  141. package/dist/llm-client.js +475 -0
  142. package/dist/llm-client.js.map +1 -0
  143. package/dist/mcp-client.d.ts +232 -0
  144. package/dist/mcp-client.d.ts.map +1 -0
  145. package/dist/mcp-client.js +718 -0
  146. package/dist/mcp-client.js.map +1 -0
  147. package/dist/memory-manager.d.ts +200 -0
  148. package/dist/memory-manager.d.ts.map +1 -0
  149. package/dist/memory-manager.js +568 -0
  150. package/dist/memory-manager.js.map +1 -0
  151. package/dist/memory.d.ts +87 -0
  152. package/dist/memory.d.ts.map +1 -0
  153. package/dist/memory.js +341 -0
  154. package/dist/memory.js.map +1 -0
  155. package/dist/model-router.d.ts +245 -0
  156. package/dist/model-router.d.ts.map +1 -0
  157. package/dist/model-router.js +632 -0
  158. package/dist/model-router.js.map +1 -0
  159. package/dist/parallel-executor.d.ts +125 -0
  160. package/dist/parallel-executor.d.ts.map +1 -0
  161. package/dist/parallel-executor.js +201 -0
  162. package/dist/parallel-executor.js.map +1 -0
  163. package/dist/perf-optimizer.d.ts +212 -0
  164. package/dist/perf-optimizer.d.ts.map +1 -0
  165. package/dist/perf-optimizer.js +721 -0
  166. package/dist/perf-optimizer.js.map +1 -0
  167. package/dist/persona.d.ts +305 -0
  168. package/dist/persona.d.ts.map +1 -0
  169. package/dist/persona.js +887 -0
  170. package/dist/persona.js.map +1 -0
  171. package/dist/planner.d.ts +70 -0
  172. package/dist/planner.d.ts.map +1 -0
  173. package/dist/planner.js +264 -0
  174. package/dist/planner.js.map +1 -0
  175. package/dist/qa-pipeline.d.ts +365 -0
  176. package/dist/qa-pipeline.d.ts.map +1 -0
  177. package/dist/qa-pipeline.js +1352 -0
  178. package/dist/qa-pipeline.js.map +1 -0
  179. package/dist/reasoning-adapter.d.ts +116 -0
  180. package/dist/reasoning-adapter.d.ts.map +1 -0
  181. package/dist/reasoning-adapter.js +187 -0
  182. package/dist/reasoning-adapter.js.map +1 -0
  183. package/dist/role-registry.d.ts +55 -0
  184. package/dist/role-registry.d.ts.map +1 -0
  185. package/dist/role-registry.js +192 -0
  186. package/dist/role-registry.js.map +1 -0
  187. package/dist/sandbox-tiers.d.ts +327 -0
  188. package/dist/sandbox-tiers.d.ts.map +1 -0
  189. package/dist/sandbox-tiers.js +928 -0
  190. package/dist/sandbox-tiers.js.map +1 -0
  191. package/dist/security-scanner.d.ts +222 -0
  192. package/dist/security-scanner.d.ts.map +1 -0
  193. package/dist/security-scanner.js +1129 -0
  194. package/dist/security-scanner.js.map +1 -0
  195. package/dist/security.d.ts +93 -0
  196. package/dist/security.d.ts.map +1 -0
  197. package/dist/security.js +393 -0
  198. package/dist/security.js.map +1 -0
  199. package/dist/self-reflection.d.ts +397 -0
  200. package/dist/self-reflection.d.ts.map +1 -0
  201. package/dist/self-reflection.js +908 -0
  202. package/dist/self-reflection.js.map +1 -0
  203. package/dist/session-persistence.d.ts +191 -0
  204. package/dist/session-persistence.d.ts.map +1 -0
  205. package/dist/session-persistence.js +395 -0
  206. package/dist/session-persistence.js.map +1 -0
  207. package/dist/speculative-executor.d.ts +210 -0
  208. package/dist/speculative-executor.d.ts.map +1 -0
  209. package/dist/speculative-executor.js +618 -0
  210. package/dist/speculative-executor.js.map +1 -0
  211. package/dist/state-machine.d.ts +289 -0
  212. package/dist/state-machine.d.ts.map +1 -0
  213. package/dist/state-machine.js +695 -0
  214. package/dist/state-machine.js.map +1 -0
  215. package/dist/sub-agent.d.ts +177 -0
  216. package/dist/sub-agent.d.ts.map +1 -0
  217. package/dist/sub-agent.js +303 -0
  218. package/dist/sub-agent.js.map +1 -0
  219. package/dist/system-prompt.d.ts +26 -0
  220. package/dist/system-prompt.d.ts.map +1 -0
  221. package/dist/system-prompt.js +84 -0
  222. package/dist/system-prompt.js.map +1 -0
  223. package/dist/test-intelligence.d.ts +439 -0
  224. package/dist/test-intelligence.d.ts.map +1 -0
  225. package/dist/test-intelligence.js +1165 -0
  226. package/dist/test-intelligence.js.map +1 -0
  227. package/dist/types.d.ts +632 -0
  228. package/dist/types.d.ts.map +1 -0
  229. package/dist/types.js +6 -0
  230. package/dist/types.js.map +1 -0
  231. package/dist/vector-index.d.ts +314 -0
  232. package/dist/vector-index.d.ts.map +1 -0
  233. package/dist/vector-index.js +618 -0
  234. package/dist/vector-index.js.map +1 -0
  235. package/package.json +41 -0
@@ -0,0 +1 @@
1
+ {"version":3,"file":"system-prompt.js","sourceRoot":"","sources":["../src/system-prompt.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAiBH;;;;GAIG;AACH,MAAM,UAAU,iBAAiB,CAAC,OAA4B;IAC5D,MAAM,QAAQ,GAAa,EAAE,CAAC;IAE9B,gBAAgB;IAChB,QAAQ,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;IAE1B,eAAe;IACf,IAAI,OAAO,CAAC,gBAAgB,EAAE,CAAC;QAC7B,QAAQ,CAAC,IAAI,CAAC,mBAAmB,CAAC,OAAO,CAAC,gBAAgB,CAAC,CAAC,CAAC;IAC/D,CAAC;IAED,gBAAgB;IAChB,IAAI,OAAO,CAAC,aAAa,EAAE,CAAC;QAC1B,QAAQ,CAAC,IAAI,CACX,kCAAkC,OAAO,CAAC,aAAa,EAAE,CAC1D,CAAC;IACJ,CAAC;IAED,WAAW;IACX,IAAI,OAAO,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QAC7B,QAAQ,CAAC,IAAI,CAAC,iBAAiB,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC;IAClD,CAAC;IAED,QAAQ;IACR,QAAQ,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;IAE3B,WAAW;IACX,IAAI,OAAO,CAAC,eAAe,EAAE,MAAM,EAAE,CAAC;QACpC,QAAQ,CAAC,IAAI,CACX,0BAA0B,OAAO,CAAC,eAAe,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CACpF,CAAC;IACJ,CAAC;IAED,OAAO,QAAQ,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC,IAAI,EAAE,CAAC;AAC7C,CAAC;AAED,0BAA0B;AAE1B,MAAM,UAAU,GAAG;;;;mJAIgI,CAAC;AAEpJ,SAAS,mBAAmB,CAAC,SAA2B;IACtD,OAAO;;kBAES,SAAS,CAAC,eAAe;mBACxB,SAAS,CAAC,SAAS;yBACb,SAAS,CAAC,cAAc;qBAC5B,SAAS,CAAC,UAAU;qBACpB,SAAS,CAAC,SAAS;;;;EAItC,SAAS,CAAC,QAAQ;OACb,CAAC;AACR,CAAC;AAED,SAAS,iBAAiB,CAAC,KAAuB;IAChD,MAAM,gBAAgB,GAAG,KAAK;SAC3B,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE;QACT,MAAM,MAAM,GAAG,CAAC,CAAC,UAAU,CAAC,UAAU;YACpC,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,UAAU,CAAC,UAAqC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC;YAC5E,CAAC,CAAC,MAAM,CAAC;QACX,OAAO,OAAO,CAAC,CAAC,IAAI,MAAM,MAAM,MAAM,CAAC,CAAC,WAAW,EAAE,CAAC;IACxD,CAAC,CAAC;SACD,IAAI,CAAC,IAAI,CAAC,CAAC;IAEd,OAAO;;;;EAIP,gBAAgB;;yEAEuD,CAAC;AAC1E,CAAC;AAED,MAAM,WAAW,GAAG;;;;;;;;;;+DAU2C,CAAC"}
@@ -0,0 +1,439 @@
1
+ /**
2
+ * @module test-intelligence
3
+ * @description Test Intelligence System — discovers test files, maps source-to-test coverage,
4
+ * detects affected tests for changed files, identifies coverage gaps, and generates test suggestions.
5
+ *
6
+ * Uses regex-based analysis (no external test runner dependency). Designed for the YUAN coding agent
7
+ * to intelligently run only relevant tests and suggest missing test coverage.
8
+ */
9
+ /** Represents a discovered test file with its metadata. */
10
+ export interface TestFile {
11
+ /** Absolute file path */
12
+ path: string;
13
+ /** Detected test framework */
14
+ framework: "vitest" | "jest" | "mocha" | "node_test" | "unknown";
15
+ /** Extracted test cases */
16
+ testCases: TestCase[];
17
+ /** Absolute paths of files this test imports */
18
+ imports: string[];
19
+ /** Last known test run result */
20
+ lastRun?: TestRunResult;
21
+ }
22
+ /** A single test case extracted from a test file. */
23
+ export interface TestCase {
24
+ /** Test case description */
25
+ name: string;
26
+ /** Line number (1-based) */
27
+ line: number;
28
+ /** Inferred test type */
29
+ type: "unit" | "integration" | "e2e";
30
+ /** Tags extracted from test name or describe block */
31
+ tags: string[];
32
+ }
33
+ /** Structured result of a test run. */
34
+ export interface TestRunResult {
35
+ /** Test file path */
36
+ file: string;
37
+ /** Number of passed tests */
38
+ passed: number;
39
+ /** Number of failed tests */
40
+ failed: number;
41
+ /** Number of skipped tests */
42
+ skipped: number;
43
+ /** Total duration in milliseconds */
44
+ duration: number;
45
+ /** Errors from failed tests */
46
+ errors: TestError[];
47
+ /** Epoch timestamp of the run */
48
+ timestamp: number;
49
+ }
50
+ /** A single test error with diagnostic info. */
51
+ export interface TestError {
52
+ /** Name of the failing test */
53
+ testName: string;
54
+ /** Error message */
55
+ message: string;
56
+ /** Stack trace */
57
+ stack?: string;
58
+ /** File containing the error */
59
+ file: string;
60
+ /** Line number of the error */
61
+ line?: number;
62
+ /** Expected value (for assertion errors) */
63
+ expected?: string;
64
+ /** Actual value (for assertion errors) */
65
+ actual?: string;
66
+ }
67
+ /** Result of affected test detection. */
68
+ export interface AffectedTestResult {
69
+ /** Files that were changed */
70
+ changedFiles: string[];
71
+ /** Test files that directly import changed files */
72
+ directTests: string[];
73
+ /** Test files that indirectly depend on changed files */
74
+ transitiveTests: string[];
75
+ /** Integration/e2e tests in the same module */
76
+ integrationTests: string[];
77
+ /** Total number of affected tests */
78
+ totalTests: number;
79
+ /** Confidence score (0-1) for completeness */
80
+ confidence: number;
81
+ /** Reasoning for why each test was included */
82
+ reasoning: string[];
83
+ }
84
+ /** A gap in test coverage. */
85
+ export interface CoverageGap {
86
+ /** Source file path */
87
+ file: string;
88
+ /** Untested symbol name */
89
+ symbol: string;
90
+ /** Symbol type (function, class, etc.) */
91
+ symbolType: string;
92
+ /** Line number of the symbol */
93
+ line: number;
94
+ /** Reason for the gap */
95
+ reason: string;
96
+ /** Severity level */
97
+ severity: "high" | "medium" | "low";
98
+ /** Suggested test description */
99
+ suggestion: string;
100
+ }
101
+ /** A suggestion for a new test. */
102
+ export interface TestSuggestion {
103
+ /** Source file to test */
104
+ targetFile: string;
105
+ /** Symbol to test */
106
+ targetSymbol: string;
107
+ /** Where to write the test */
108
+ testFile: string;
109
+ /** Framework to use */
110
+ framework: string;
111
+ /** Suggested test cases */
112
+ testCases: SuggestedTestCase[];
113
+ /** Priority level */
114
+ priority: "high" | "medium" | "low";
115
+ }
116
+ /** A suggested test case with hints for implementation. */
117
+ export interface SuggestedTestCase {
118
+ /** Test description */
119
+ name: string;
120
+ /** Test case type */
121
+ type: "happy_path" | "edge_case" | "error_case" | "boundary" | "null_check";
122
+ /** Human-readable description */
123
+ description: string;
124
+ /** Suggested input hint */
125
+ inputHint: string;
126
+ /** Expected outcome hint */
127
+ expectedHint: string;
128
+ }
129
+ /** Configuration for the Test Intelligence system. */
130
+ export interface TestIntelligenceConfig {
131
+ /** Project root path */
132
+ projectPath: string;
133
+ /** Glob patterns for test files */
134
+ testPatterns?: string[];
135
+ /** Patterns to ignore */
136
+ ignorePatterns?: string[];
137
+ /** Max depth for reverse dependency traversal (default: 3) */
138
+ maxTransitiveDepth?: number;
139
+ /** Whether to include integration tests (default: true) */
140
+ includeIntegrationTests?: boolean;
141
+ }
142
+ /**
143
+ * Test Intelligence System — discovers, maps, and analyzes test coverage.
144
+ *
145
+ * Provides affected test detection, coverage gap analysis, test suggestions,
146
+ * and test command building for the YUAN coding agent.
147
+ */
148
+ export declare class TestIntelligence {
149
+ private config;
150
+ private testFiles;
151
+ private sourceToTests;
152
+ private testHistory;
153
+ constructor(config: TestIntelligenceConfig);
154
+ /**
155
+ * Scan the project for all test files, parse their content,
156
+ * and build the internal test file index.
157
+ *
158
+ * @returns Array of discovered test files
159
+ */
160
+ discoverTests(): Promise<TestFile[]>;
161
+ /**
162
+ * Detect the test framework used in a file based on its content.
163
+ *
164
+ * Detection priority:
165
+ * 1. Vitest (explicit import from 'vitest')
166
+ * 2. Node.js test runner (import from 'node:test')
167
+ * 3. Mocha (chai require)
168
+ * 4. Jest (describe/it/test without vitest import)
169
+ * 5. Unknown (fallback)
170
+ *
171
+ * @param content - File content to analyze
172
+ * @returns Detected framework identifier
173
+ */
174
+ detectFramework(content: string): TestFile["framework"];
175
+ /**
176
+ * Extract test cases from file content.
177
+ *
178
+ * Parses `it()`, `test()`, and `describe()` blocks, infers test type
179
+ * from naming patterns, and extracts tags from the description.
180
+ *
181
+ * @param content - File content to parse
182
+ * @param _framework - Framework identifier (reserved for future framework-specific parsing)
183
+ * @returns Array of extracted test cases
184
+ */
185
+ parseTestCases(content: string, _framework: string): TestCase[];
186
+ /**
187
+ * Build a mapping from source files to their corresponding test files.
188
+ *
189
+ * Uses two strategies:
190
+ * 1. Import-based: checks what each test file imports
191
+ * 2. Convention-based: maps test file names to source files
192
+ *
193
+ * @returns Map from source file path to array of test file paths
194
+ */
195
+ buildTestMap(): Promise<Map<string, string[]>>;
196
+ /**
197
+ * Find all tests affected by a set of changed files.
198
+ *
199
+ * Algorithm:
200
+ * 1. Direct: test files that directly import any changed file
201
+ * 2. Transitive: test files that depend on changed files through intermediaries
202
+ * 3. Integration: integration/e2e tests in the same module directory
203
+ *
204
+ * Confidence scoring:
205
+ * - 1.0 if only direct tests found
206
+ * - 0.8 if transitive depth <= 2
207
+ * - 0.6 if transitive depth > 2
208
+ * - -0.1 for each changed file without any test coverage
209
+ *
210
+ * @param changedFiles - Array of absolute file paths that changed
211
+ * @returns Affected test result with confidence and reasoning
212
+ */
213
+ findAffectedTests(changedFiles: string[]): Promise<AffectedTestResult>;
214
+ /**
215
+ * Quick check: does a source file have any tests?
216
+ *
217
+ * @param sourceFile - Absolute path to the source file
218
+ * @returns True if at least one test file covers this source
219
+ */
220
+ hasTests(sourceFile: string): boolean;
221
+ /**
222
+ * Get test file paths for a source file.
223
+ *
224
+ * @param sourceFile - Absolute path to the source file
225
+ * @returns Array of absolute test file paths
226
+ */
227
+ getTestsFor(sourceFile: string): string[];
228
+ /**
229
+ * Find untested code (coverage gaps).
230
+ *
231
+ * For each source file, checks:
232
+ * 1. Whether a corresponding test file exists
233
+ * 2. Whether exported symbols are referenced in any test
234
+ * 3. Whether error cases are tested
235
+ *
236
+ * @param files - Optional list of files to check (defaults to all source files)
237
+ * @returns Array of coverage gaps
238
+ */
239
+ findCoverageGaps(files?: string[]): Promise<CoverageGap[]>;
240
+ /**
241
+ * Suggest tests for a specific source file.
242
+ *
243
+ * Generates test case suggestions based on exported symbols,
244
+ * their types, parameters, and common testing patterns.
245
+ *
246
+ * @param sourceFile - Absolute path to the source file
247
+ * @param symbols - Optional list of specific symbol names to suggest tests for
248
+ * @returns Array of test suggestions
249
+ */
250
+ suggestTests(sourceFile: string, symbols?: string[]): TestSuggestion[];
251
+ /**
252
+ * Build the shell command to run specific test files with a given framework.
253
+ *
254
+ * @param testFiles - Array of test file paths to run
255
+ * @param framework - Test framework identifier
256
+ * @returns Shell command string
257
+ */
258
+ buildTestCommand(testFiles: string[], framework: string): string;
259
+ /**
260
+ * Parse test runner output into a structured TestRunResult.
261
+ *
262
+ * Supports vitest, jest, mocha, and node:test output formats.
263
+ *
264
+ * @param output - Raw test runner stdout/stderr
265
+ * @param framework - Framework that produced the output
266
+ * @returns Parsed test run result
267
+ */
268
+ parseTestOutput(output: string, framework: string): TestRunResult;
269
+ /**
270
+ * Record a test run result for history tracking.
271
+ *
272
+ * @param result - Test run result to record
273
+ */
274
+ recordResult(result: TestRunResult): void;
275
+ /**
276
+ * Get test run history for a specific test file.
277
+ *
278
+ * @param testFile - Absolute path to the test file
279
+ * @returns Array of test run results, most recent first
280
+ */
281
+ getHistory(testFile: string): TestRunResult[];
282
+ /**
283
+ * Get test coverage statistics for the project.
284
+ *
285
+ * @returns Test coverage summary
286
+ */
287
+ getStats(): {
288
+ totalTestFiles: number;
289
+ totalTestCases: number;
290
+ sourceFilesWithTests: number;
291
+ sourceFilesWithoutTests: number;
292
+ coveragePercent: number;
293
+ frameworkBreakdown: Record<string, number>;
294
+ };
295
+ /**
296
+ * Find test files matching configured patterns.
297
+ * Walks the project directory and filters by test file conventions.
298
+ */
299
+ private findTestFiles;
300
+ /**
301
+ * Check if a file path matches test file conventions.
302
+ *
303
+ * @param filePath - File path to check
304
+ * @returns True if the file is a test file
305
+ */
306
+ private isTestFile;
307
+ /**
308
+ * Find the source file for a test file using naming conventions.
309
+ *
310
+ * Conventions:
311
+ * - `foo.test.ts` → `foo.ts`
312
+ * - `foo.spec.ts` → `foo.ts`
313
+ * - `__tests__/foo.ts` → `../foo.ts`
314
+ *
315
+ * @param testFile - Absolute test file path
316
+ * @returns Absolute source file path, or null if not found
317
+ */
318
+ private findSourceForTest;
319
+ /**
320
+ * Traverse reverse dependency graph to find test files that
321
+ * transitively depend on a given source file.
322
+ *
323
+ * @param file - Starting file path
324
+ * @param depth - Maximum traversal depth
325
+ * @param visited - Set of already-visited paths (cycle prevention)
326
+ * @returns Array of test file paths found via transitive dependencies
327
+ */
328
+ private findTransitiveTestDeps;
329
+ /**
330
+ * Find integration/e2e test files in the same directory or module.
331
+ *
332
+ * @param sourceFile - Source file to find integration tests for
333
+ * @returns Array of integration test file paths
334
+ */
335
+ private findModuleIntegrationTests;
336
+ /**
337
+ * Collect all source (non-test) files in the project.
338
+ */
339
+ private collectSourceFiles;
340
+ /**
341
+ * Read a file's content, returning empty string on failure.
342
+ *
343
+ * @param path - Absolute file path
344
+ * @returns File content or empty string
345
+ */
346
+ private readFile;
347
+ /**
348
+ * Recursively walk a directory, collecting source files.
349
+ * Skips ignored directories (node_modules, dist, etc.).
350
+ */
351
+ private walkDirectory;
352
+ /**
353
+ * Parse import paths from test file content and resolve them to absolute paths.
354
+ */
355
+ private parseTestImports;
356
+ /**
357
+ * Resolve a relative import specifier to an absolute path.
358
+ * Handles .js → .ts resolution for ESM TypeScript projects.
359
+ */
360
+ private resolveImportPath;
361
+ /**
362
+ * Infer the test type from test name and describe block context.
363
+ */
364
+ private inferTestType;
365
+ /**
366
+ * Extract tags from a test name.
367
+ * Tags are inferred from keywords in the test description.
368
+ */
369
+ private extractTags;
370
+ /**
371
+ * Extract exported symbols from file content.
372
+ */
373
+ private extractExportedSymbols;
374
+ /**
375
+ * Infer the expected test file path for a source file.
376
+ */
377
+ private inferTestFilePath;
378
+ /**
379
+ * Escape special regex characters in a string.
380
+ */
381
+ private escapeRegex;
382
+ /**
383
+ * Parse vitest output format.
384
+ *
385
+ * Vitest output example:
386
+ * ```
387
+ * ✓ src/foo.test.ts (3 tests) 45ms
388
+ * ✓ should do X
389
+ * × should do Y
390
+ * Tests 2 passed | 1 failed
391
+ * ```
392
+ */
393
+ private parseVitestOutput;
394
+ /**
395
+ * Parse jest output format.
396
+ *
397
+ * Jest output example:
398
+ * ```
399
+ * Tests: 1 failed, 2 passed, 3 total
400
+ * Time: 1.234 s
401
+ * ```
402
+ */
403
+ private parseJestOutput;
404
+ /**
405
+ * Parse node:test output format (TAP-like).
406
+ *
407
+ * Node test output example:
408
+ * ```
409
+ * TAP version 13
410
+ * ok 1 - should work
411
+ * not ok 2 - should fail
412
+ * 1..2
413
+ * # tests 2
414
+ * # pass 1
415
+ * # fail 1
416
+ * ```
417
+ */
418
+ private parseNodeTestOutput;
419
+ /**
420
+ * Parse mocha output format.
421
+ *
422
+ * Mocha output example:
423
+ * ```
424
+ * 2 passing (45ms)
425
+ * 1 failing
426
+ * ```
427
+ */
428
+ private parseMochaOutput;
429
+ /**
430
+ * Generic output parser — tries common patterns.
431
+ */
432
+ private parseGenericOutput;
433
+ /**
434
+ * Extract failure blocks from test output.
435
+ * Looks for common failure patterns across frameworks.
436
+ */
437
+ private extractFailureBlocks;
438
+ }
439
+ //# sourceMappingURL=test-intelligence.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"test-intelligence.d.ts","sourceRoot":"","sources":["../src/test-intelligence.ts"],"names":[],"mappings":"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"}