@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.
- package/LICENSE +663 -0
- package/README.md +15 -0
- package/dist/__tests__/context-manager.test.d.ts +6 -0
- package/dist/__tests__/context-manager.test.d.ts.map +1 -0
- package/dist/__tests__/context-manager.test.js +220 -0
- package/dist/__tests__/context-manager.test.js.map +1 -0
- package/dist/__tests__/governor.test.d.ts +6 -0
- package/dist/__tests__/governor.test.d.ts.map +1 -0
- package/dist/__tests__/governor.test.js +210 -0
- package/dist/__tests__/governor.test.js.map +1 -0
- package/dist/__tests__/model-router.test.d.ts +6 -0
- package/dist/__tests__/model-router.test.d.ts.map +1 -0
- package/dist/__tests__/model-router.test.js +329 -0
- package/dist/__tests__/model-router.test.js.map +1 -0
- package/dist/agent-logger.d.ts +384 -0
- package/dist/agent-logger.d.ts.map +1 -0
- package/dist/agent-logger.js +820 -0
- package/dist/agent-logger.js.map +1 -0
- package/dist/agent-loop.d.ts +163 -0
- package/dist/agent-loop.d.ts.map +1 -0
- package/dist/agent-loop.js +609 -0
- package/dist/agent-loop.js.map +1 -0
- package/dist/agent-modes.d.ts +85 -0
- package/dist/agent-modes.d.ts.map +1 -0
- package/dist/agent-modes.js +418 -0
- package/dist/agent-modes.js.map +1 -0
- package/dist/approval.d.ts +137 -0
- package/dist/approval.d.ts.map +1 -0
- package/dist/approval.js +299 -0
- package/dist/approval.js.map +1 -0
- package/dist/async-completion-queue.d.ts +56 -0
- package/dist/async-completion-queue.d.ts.map +1 -0
- package/dist/async-completion-queue.js +77 -0
- package/dist/async-completion-queue.js.map +1 -0
- package/dist/auto-fix.d.ts +174 -0
- package/dist/auto-fix.d.ts.map +1 -0
- package/dist/auto-fix.js +319 -0
- package/dist/auto-fix.js.map +1 -0
- package/dist/codebase-context.d.ts +396 -0
- package/dist/codebase-context.d.ts.map +1 -0
- package/dist/codebase-context.js +1260 -0
- package/dist/codebase-context.js.map +1 -0
- package/dist/conflict-resolver.d.ts +191 -0
- package/dist/conflict-resolver.d.ts.map +1 -0
- package/dist/conflict-resolver.js +524 -0
- package/dist/conflict-resolver.js.map +1 -0
- package/dist/constants.d.ts +52 -0
- package/dist/constants.d.ts.map +1 -0
- package/dist/constants.js +141 -0
- package/dist/constants.js.map +1 -0
- package/dist/context-budget.d.ts +435 -0
- package/dist/context-budget.d.ts.map +1 -0
- package/dist/context-budget.js +903 -0
- package/dist/context-budget.js.map +1 -0
- package/dist/context-compressor.d.ts +143 -0
- package/dist/context-compressor.d.ts.map +1 -0
- package/dist/context-compressor.js +511 -0
- package/dist/context-compressor.js.map +1 -0
- package/dist/context-manager.d.ts +112 -0
- package/dist/context-manager.d.ts.map +1 -0
- package/dist/context-manager.js +247 -0
- package/dist/context-manager.js.map +1 -0
- package/dist/continuous-reflection.d.ts +267 -0
- package/dist/continuous-reflection.d.ts.map +1 -0
- package/dist/continuous-reflection.js +338 -0
- package/dist/continuous-reflection.js.map +1 -0
- package/dist/cross-file-refactor.d.ts +352 -0
- package/dist/cross-file-refactor.d.ts.map +1 -0
- package/dist/cross-file-refactor.js +1544 -0
- package/dist/cross-file-refactor.js.map +1 -0
- package/dist/dag-orchestrator.d.ts +138 -0
- package/dist/dag-orchestrator.d.ts.map +1 -0
- package/dist/dag-orchestrator.js +379 -0
- package/dist/dag-orchestrator.js.map +1 -0
- package/dist/debate-orchestrator.d.ts +301 -0
- package/dist/debate-orchestrator.d.ts.map +1 -0
- package/dist/debate-orchestrator.js +719 -0
- package/dist/debate-orchestrator.js.map +1 -0
- package/dist/dependency-analyzer.d.ts +113 -0
- package/dist/dependency-analyzer.d.ts.map +1 -0
- package/dist/dependency-analyzer.js +444 -0
- package/dist/dependency-analyzer.js.map +1 -0
- package/dist/design-loop.d.ts +59 -0
- package/dist/design-loop.d.ts.map +1 -0
- package/dist/design-loop.js +344 -0
- package/dist/design-loop.js.map +1 -0
- package/dist/doc-intelligence.d.ts +383 -0
- package/dist/doc-intelligence.d.ts.map +1 -0
- package/dist/doc-intelligence.js +1307 -0
- package/dist/doc-intelligence.js.map +1 -0
- package/dist/dynamic-role-generator.d.ts +76 -0
- package/dist/dynamic-role-generator.d.ts.map +1 -0
- package/dist/dynamic-role-generator.js +194 -0
- package/dist/dynamic-role-generator.js.map +1 -0
- package/dist/errors.d.ts +69 -0
- package/dist/errors.d.ts.map +1 -0
- package/dist/errors.js +102 -0
- package/dist/errors.js.map +1 -0
- package/dist/event-bus.d.ts +159 -0
- package/dist/event-bus.d.ts.map +1 -0
- package/dist/event-bus.js +305 -0
- package/dist/event-bus.js.map +1 -0
- package/dist/execution-engine.d.ts +425 -0
- package/dist/execution-engine.d.ts.map +1 -0
- package/dist/execution-engine.js +1555 -0
- package/dist/execution-engine.js.map +1 -0
- package/dist/git-intelligence.d.ts +306 -0
- package/dist/git-intelligence.d.ts.map +1 -0
- package/dist/git-intelligence.js +1099 -0
- package/dist/git-intelligence.js.map +1 -0
- package/dist/governor.d.ts +77 -0
- package/dist/governor.d.ts.map +1 -0
- package/dist/governor.js +161 -0
- package/dist/governor.js.map +1 -0
- package/dist/hierarchical-planner.d.ts +313 -0
- package/dist/hierarchical-planner.d.ts.map +1 -0
- package/dist/hierarchical-planner.js +981 -0
- package/dist/hierarchical-planner.js.map +1 -0
- package/dist/index.d.ts +121 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +123 -0
- package/dist/index.js.map +1 -0
- package/dist/intent-inference.d.ts +103 -0
- package/dist/intent-inference.d.ts.map +1 -0
- package/dist/intent-inference.js +605 -0
- package/dist/intent-inference.js.map +1 -0
- package/dist/interrupt-manager.d.ts +143 -0
- package/dist/interrupt-manager.d.ts.map +1 -0
- package/dist/interrupt-manager.js +196 -0
- package/dist/interrupt-manager.js.map +1 -0
- package/dist/kernel.d.ts +564 -0
- package/dist/kernel.d.ts.map +1 -0
- package/dist/kernel.js +1419 -0
- package/dist/kernel.js.map +1 -0
- package/dist/language-support.d.ts +232 -0
- package/dist/language-support.d.ts.map +1 -0
- package/dist/language-support.js +1134 -0
- package/dist/language-support.js.map +1 -0
- package/dist/llm-client.d.ts +82 -0
- package/dist/llm-client.d.ts.map +1 -0
- package/dist/llm-client.js +475 -0
- package/dist/llm-client.js.map +1 -0
- package/dist/mcp-client.d.ts +232 -0
- package/dist/mcp-client.d.ts.map +1 -0
- package/dist/mcp-client.js +718 -0
- package/dist/mcp-client.js.map +1 -0
- package/dist/memory-manager.d.ts +200 -0
- package/dist/memory-manager.d.ts.map +1 -0
- package/dist/memory-manager.js +568 -0
- package/dist/memory-manager.js.map +1 -0
- package/dist/memory.d.ts +87 -0
- package/dist/memory.d.ts.map +1 -0
- package/dist/memory.js +341 -0
- package/dist/memory.js.map +1 -0
- package/dist/model-router.d.ts +245 -0
- package/dist/model-router.d.ts.map +1 -0
- package/dist/model-router.js +632 -0
- package/dist/model-router.js.map +1 -0
- package/dist/parallel-executor.d.ts +125 -0
- package/dist/parallel-executor.d.ts.map +1 -0
- package/dist/parallel-executor.js +201 -0
- package/dist/parallel-executor.js.map +1 -0
- package/dist/perf-optimizer.d.ts +212 -0
- package/dist/perf-optimizer.d.ts.map +1 -0
- package/dist/perf-optimizer.js +721 -0
- package/dist/perf-optimizer.js.map +1 -0
- package/dist/persona.d.ts +305 -0
- package/dist/persona.d.ts.map +1 -0
- package/dist/persona.js +887 -0
- package/dist/persona.js.map +1 -0
- package/dist/planner.d.ts +70 -0
- package/dist/planner.d.ts.map +1 -0
- package/dist/planner.js +264 -0
- package/dist/planner.js.map +1 -0
- package/dist/qa-pipeline.d.ts +365 -0
- package/dist/qa-pipeline.d.ts.map +1 -0
- package/dist/qa-pipeline.js +1352 -0
- package/dist/qa-pipeline.js.map +1 -0
- package/dist/reasoning-adapter.d.ts +116 -0
- package/dist/reasoning-adapter.d.ts.map +1 -0
- package/dist/reasoning-adapter.js +187 -0
- package/dist/reasoning-adapter.js.map +1 -0
- package/dist/role-registry.d.ts +55 -0
- package/dist/role-registry.d.ts.map +1 -0
- package/dist/role-registry.js +192 -0
- package/dist/role-registry.js.map +1 -0
- package/dist/sandbox-tiers.d.ts +327 -0
- package/dist/sandbox-tiers.d.ts.map +1 -0
- package/dist/sandbox-tiers.js +928 -0
- package/dist/sandbox-tiers.js.map +1 -0
- package/dist/security-scanner.d.ts +222 -0
- package/dist/security-scanner.d.ts.map +1 -0
- package/dist/security-scanner.js +1129 -0
- package/dist/security-scanner.js.map +1 -0
- package/dist/security.d.ts +93 -0
- package/dist/security.d.ts.map +1 -0
- package/dist/security.js +393 -0
- package/dist/security.js.map +1 -0
- package/dist/self-reflection.d.ts +397 -0
- package/dist/self-reflection.d.ts.map +1 -0
- package/dist/self-reflection.js +908 -0
- package/dist/self-reflection.js.map +1 -0
- package/dist/session-persistence.d.ts +191 -0
- package/dist/session-persistence.d.ts.map +1 -0
- package/dist/session-persistence.js +395 -0
- package/dist/session-persistence.js.map +1 -0
- package/dist/speculative-executor.d.ts +210 -0
- package/dist/speculative-executor.d.ts.map +1 -0
- package/dist/speculative-executor.js +618 -0
- package/dist/speculative-executor.js.map +1 -0
- package/dist/state-machine.d.ts +289 -0
- package/dist/state-machine.d.ts.map +1 -0
- package/dist/state-machine.js +695 -0
- package/dist/state-machine.js.map +1 -0
- package/dist/sub-agent.d.ts +177 -0
- package/dist/sub-agent.d.ts.map +1 -0
- package/dist/sub-agent.js +303 -0
- package/dist/sub-agent.js.map +1 -0
- package/dist/system-prompt.d.ts +26 -0
- package/dist/system-prompt.d.ts.map +1 -0
- package/dist/system-prompt.js +84 -0
- package/dist/system-prompt.js.map +1 -0
- package/dist/test-intelligence.d.ts +439 -0
- package/dist/test-intelligence.d.ts.map +1 -0
- package/dist/test-intelligence.js +1165 -0
- package/dist/test-intelligence.js.map +1 -0
- package/dist/types.d.ts +632 -0
- package/dist/types.d.ts.map +1 -0
- package/dist/types.js +6 -0
- package/dist/types.js.map +1 -0
- package/dist/vector-index.d.ts +314 -0
- package/dist/vector-index.d.ts.map +1 -0
- package/dist/vector-index.js +618 -0
- package/dist/vector-index.js.map +1 -0
- 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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"}
|