@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,365 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @module qa-pipeline
|
|
3
|
+
* @description 5-Stage QA Agent Pipeline — 코드 변경 후 자동 품질 검증.
|
|
4
|
+
*
|
|
5
|
+
* Stages:
|
|
6
|
+
* 1. Structural — TypeScript 컴파일, ESLint, 순환 import, export 검증
|
|
7
|
+
* 2. Semantic — 유닛/통합 테스트 실행
|
|
8
|
+
* 3. Quality — 복잡도, 함수/파일 길이, TODO, 디버그 문, 보안 스캔
|
|
9
|
+
* 4. Review — LLM 기반 코드 리뷰 (thorough 모드 전용)
|
|
10
|
+
* 5. Decision — 전체 결과 기반 자동 판정 (approve / fix_and_retry / escalate)
|
|
11
|
+
*
|
|
12
|
+
* QALevel 프리셋:
|
|
13
|
+
* - quick: structural only
|
|
14
|
+
* - standard: structural + semantic + quality
|
|
15
|
+
* - thorough: all 5 stages
|
|
16
|
+
*/
|
|
17
|
+
import { EventEmitter } from "node:events";
|
|
18
|
+
/** QA 파이프라인 단계 */
|
|
19
|
+
export type QAStage = "structural" | "semantic" | "quality" | "review" | "decision";
|
|
20
|
+
/** QA 실행 레벨 */
|
|
21
|
+
export type QALevel = "quick" | "standard" | "thorough";
|
|
22
|
+
/** QA 파이프라인 설정 */
|
|
23
|
+
export interface QAPipelineConfig {
|
|
24
|
+
/** 프로젝트 루트 경로 */
|
|
25
|
+
projectPath: string;
|
|
26
|
+
/** 실행 레벨 (어떤 stage를 돌릴지 결정) */
|
|
27
|
+
level: QALevel;
|
|
28
|
+
/** 구조 검증 활성화 (기본: true) */
|
|
29
|
+
enableStructural: boolean;
|
|
30
|
+
/** 시맨틱 검증 활성화 (기본: true) */
|
|
31
|
+
enableSemantic: boolean;
|
|
32
|
+
/** 품질 게이트 활성화 (기본: true) */
|
|
33
|
+
enableQuality: boolean;
|
|
34
|
+
/** LLM 리뷰 활성화 (기본: thorough만 true) */
|
|
35
|
+
enableReview: boolean;
|
|
36
|
+
/** 판정 활성화 (기본: true) */
|
|
37
|
+
enableDecision: boolean;
|
|
38
|
+
/** 자동 수정 활성화 (기본: true) */
|
|
39
|
+
autoFix: boolean;
|
|
40
|
+
/** 최대 수정 시도 횟수 (기본: 3) */
|
|
41
|
+
maxFixAttempts: number;
|
|
42
|
+
/** 자동 수정 가능한 카테고리 */
|
|
43
|
+
fixableCategories: string[];
|
|
44
|
+
/** 품질 게이트 임계값 */
|
|
45
|
+
qualityGates: QualityGates;
|
|
46
|
+
/** 빌드 타임아웃 (ms, 기본: 60000) */
|
|
47
|
+
buildTimeout: number;
|
|
48
|
+
/** 테스트 타임아웃 (ms, 기본: 120000) */
|
|
49
|
+
testTimeout: number;
|
|
50
|
+
}
|
|
51
|
+
/** 품질 게이트 임계값 */
|
|
52
|
+
export interface QualityGates {
|
|
53
|
+
/** 최대 순환 복잡도 (기본: 15) */
|
|
54
|
+
maxCyclomaticComplexity: number;
|
|
55
|
+
/** 최대 함수 길이 (기본: 50 lines) */
|
|
56
|
+
maxFunctionLength: number;
|
|
57
|
+
/** 최대 파일 길이 (기본: 500 lines) */
|
|
58
|
+
maxFileLength: number;
|
|
59
|
+
/** 최소 테스트 커버리지 (기본: 0, 미적용) */
|
|
60
|
+
minTestCoverage: number;
|
|
61
|
+
/** 최대 TODO 수 (기본: -1, 미적용) */
|
|
62
|
+
maxTodoCount: number;
|
|
63
|
+
/** 새로운 경고 금지 (기본: true) */
|
|
64
|
+
noNewWarnings: boolean;
|
|
65
|
+
}
|
|
66
|
+
/** 개별 stage 실행 결과 */
|
|
67
|
+
export interface StageResult {
|
|
68
|
+
/** 단계 이름 */
|
|
69
|
+
stage: QAStage;
|
|
70
|
+
/** 단계 상태 */
|
|
71
|
+
status: "pass" | "warn" | "fail" | "skip";
|
|
72
|
+
/** 소요 시간 (ms) */
|
|
73
|
+
duration: number;
|
|
74
|
+
/** 개별 검사 결과 목록 */
|
|
75
|
+
checks: CheckResult[];
|
|
76
|
+
/** 자동 수정 시도 기록 */
|
|
77
|
+
autoFixed: QAFixAttempt[];
|
|
78
|
+
/** 요약 메시지 */
|
|
79
|
+
summary: string;
|
|
80
|
+
}
|
|
81
|
+
/** 개별 검사 결과 */
|
|
82
|
+
export interface CheckResult {
|
|
83
|
+
/** 검사 이름 (예: "TypeScript Compilation", "ESLint") */
|
|
84
|
+
name: string;
|
|
85
|
+
/** 검사 상태 */
|
|
86
|
+
status: "pass" | "warn" | "fail";
|
|
87
|
+
/** 결과 메시지 */
|
|
88
|
+
message: string;
|
|
89
|
+
/** 상세 내용 */
|
|
90
|
+
details?: string[];
|
|
91
|
+
/** 관련 파일 경로 */
|
|
92
|
+
file?: string;
|
|
93
|
+
/** 관련 라인 번호 */
|
|
94
|
+
line?: number;
|
|
95
|
+
/** 자동 수정 가능 여부 */
|
|
96
|
+
fixable: boolean;
|
|
97
|
+
/** 심각도 */
|
|
98
|
+
severity: "critical" | "high" | "medium" | "low" | "info";
|
|
99
|
+
}
|
|
100
|
+
/** 자동 수정 시도 기록 */
|
|
101
|
+
export interface QAFixAttempt {
|
|
102
|
+
/** 수정 대상 검사 이름 */
|
|
103
|
+
check: string;
|
|
104
|
+
/** 시도 번호 (1-based) */
|
|
105
|
+
attempt: number;
|
|
106
|
+
/** 성공 여부 */
|
|
107
|
+
success: boolean;
|
|
108
|
+
/** 수정 내용 설명 */
|
|
109
|
+
description: string;
|
|
110
|
+
}
|
|
111
|
+
/** 파이프라인 전체 결과 */
|
|
112
|
+
export interface QAPipelineResult {
|
|
113
|
+
/** 전체 판정 */
|
|
114
|
+
overall: "pass" | "warn" | "fail";
|
|
115
|
+
/** 각 stage 결과 */
|
|
116
|
+
stages: StageResult[];
|
|
117
|
+
/** 총 검사 수 */
|
|
118
|
+
totalChecks: number;
|
|
119
|
+
/** 통과 수 */
|
|
120
|
+
passed: number;
|
|
121
|
+
/** 경고 수 */
|
|
122
|
+
warnings: number;
|
|
123
|
+
/** 실패 수 */
|
|
124
|
+
failures: number;
|
|
125
|
+
/** 자동 수정 수 */
|
|
126
|
+
autoFixed: number;
|
|
127
|
+
/** 총 소요 시간 (ms) */
|
|
128
|
+
totalDuration: number;
|
|
129
|
+
/** 게이트 결과 */
|
|
130
|
+
gateResults: GateResult[];
|
|
131
|
+
/** 최종 판정 */
|
|
132
|
+
decision: QADecision;
|
|
133
|
+
}
|
|
134
|
+
/** 품질 게이트 결과 */
|
|
135
|
+
export interface GateResult {
|
|
136
|
+
/** 게이트 이름 */
|
|
137
|
+
gate: string;
|
|
138
|
+
/** 임계값 */
|
|
139
|
+
threshold: number;
|
|
140
|
+
/** 실제 값 */
|
|
141
|
+
actual: number;
|
|
142
|
+
/** 통과 여부 */
|
|
143
|
+
passed: boolean;
|
|
144
|
+
}
|
|
145
|
+
/** QA 최종 판정 */
|
|
146
|
+
export interface QADecision {
|
|
147
|
+
/** 권장 액션 */
|
|
148
|
+
action: "approve" | "fix_and_retry" | "escalate";
|
|
149
|
+
/** 판정 이유 */
|
|
150
|
+
reason: string;
|
|
151
|
+
/** 치명적 이슈 목록 */
|
|
152
|
+
criticalIssues: CheckResult[];
|
|
153
|
+
/** 제안 사항 */
|
|
154
|
+
suggestions: string[];
|
|
155
|
+
}
|
|
156
|
+
/** QA 파이프라인 이벤트 맵 */
|
|
157
|
+
export interface QAPipelineEvents {
|
|
158
|
+
"stage:start": (stage: QAStage) => void;
|
|
159
|
+
"stage:complete": (result: StageResult) => void;
|
|
160
|
+
"check:run": (name: string) => void;
|
|
161
|
+
"check:result": (result: CheckResult) => void;
|
|
162
|
+
"fix:attempt": (attempt: QAFixAttempt) => void;
|
|
163
|
+
"pipeline:complete": (result: QAPipelineResult) => void;
|
|
164
|
+
}
|
|
165
|
+
/** 파일 메트릭 분석 결과 */
|
|
166
|
+
interface FileMetrics {
|
|
167
|
+
cyclomatic: number;
|
|
168
|
+
cognitive: number;
|
|
169
|
+
loc: number;
|
|
170
|
+
functions: {
|
|
171
|
+
name: string;
|
|
172
|
+
length: number;
|
|
173
|
+
complexity: number;
|
|
174
|
+
}[];
|
|
175
|
+
}
|
|
176
|
+
/**
|
|
177
|
+
* QAPipeline — 5단계 자동 품질 검증 파이프라인.
|
|
178
|
+
*
|
|
179
|
+
* @example
|
|
180
|
+
* ```typescript
|
|
181
|
+
* const qa = new QAPipeline({ projectPath: "/project", level: "standard" });
|
|
182
|
+
*
|
|
183
|
+
* qa.on("stage:complete", (result) => console.log(result.stage, result.status));
|
|
184
|
+
*
|
|
185
|
+
* const result = await qa.run(["src/foo.ts", "src/bar.ts"]);
|
|
186
|
+
* if (result.decision.action === "approve") {
|
|
187
|
+
* console.log("All checks passed!");
|
|
188
|
+
* }
|
|
189
|
+
* ```
|
|
190
|
+
*/
|
|
191
|
+
export declare class QAPipeline extends EventEmitter {
|
|
192
|
+
private readonly config;
|
|
193
|
+
constructor(config: Partial<QAPipelineConfig> & {
|
|
194
|
+
projectPath: string;
|
|
195
|
+
});
|
|
196
|
+
/**
|
|
197
|
+
* 전체 파이프라인 실행.
|
|
198
|
+
*
|
|
199
|
+
* @param changedFiles 변경된 파일 경로 목록 (없으면 전체 검사)
|
|
200
|
+
* @param reviewFn LLM 리뷰 함수 (review stage 활성화 시 필요)
|
|
201
|
+
* @returns 파이프라인 전체 결과
|
|
202
|
+
*/
|
|
203
|
+
run(changedFiles?: string[], reviewFn?: (prompt: string) => Promise<string>): Promise<QAPipelineResult>;
|
|
204
|
+
/**
|
|
205
|
+
* 특정 stage만 단독 실행.
|
|
206
|
+
*
|
|
207
|
+
* @param stage 실행할 stage
|
|
208
|
+
* @param changedFiles 변경된 파일 목록
|
|
209
|
+
* @param reviewFn LLM 리뷰 함수 (review stage 시 필요)
|
|
210
|
+
*/
|
|
211
|
+
runStage(stage: QAStage, changedFiles?: string[], reviewFn?: (prompt: string) => Promise<string>): Promise<StageResult>;
|
|
212
|
+
/**
|
|
213
|
+
* Stage 1 — 구조 검증: TypeScript 컴파일, ESLint, 순환 import, export 검사.
|
|
214
|
+
*/
|
|
215
|
+
runStructural(): Promise<StageResult>;
|
|
216
|
+
/**
|
|
217
|
+
* TypeScript 타입 검사 (tsc --noEmit).
|
|
218
|
+
*/
|
|
219
|
+
private checkTypeScript;
|
|
220
|
+
/**
|
|
221
|
+
* ESLint 검사.
|
|
222
|
+
*/
|
|
223
|
+
private checkLint;
|
|
224
|
+
/**
|
|
225
|
+
* 순환 import 검사.
|
|
226
|
+
* 간이 검사: import 그래프를 구축하여 사이클 탐지.
|
|
227
|
+
*/
|
|
228
|
+
private checkCircularImports;
|
|
229
|
+
/**
|
|
230
|
+
* Export 검사 — src/ 내 .ts 파일이 아무것도 export하지 않으면 경고.
|
|
231
|
+
*/
|
|
232
|
+
private checkExports;
|
|
233
|
+
/**
|
|
234
|
+
* Stage 2 — 시맨틱 검증: 테스트 실행.
|
|
235
|
+
*
|
|
236
|
+
* @param changedFiles 변경된 파일 목록 (있으면 관련 테스트만 실행)
|
|
237
|
+
*/
|
|
238
|
+
runSemantic(changedFiles?: string[]): Promise<StageResult>;
|
|
239
|
+
/**
|
|
240
|
+
* 변경된 파일에 대응하는 테스트만 실행.
|
|
241
|
+
*/
|
|
242
|
+
private runAffectedTests;
|
|
243
|
+
/**
|
|
244
|
+
* 전체 테스트 스위트 실행.
|
|
245
|
+
*/
|
|
246
|
+
private runAllTests;
|
|
247
|
+
/**
|
|
248
|
+
* 테스트 러너 존재 여부 확인.
|
|
249
|
+
*/
|
|
250
|
+
private detectTestRunner;
|
|
251
|
+
/**
|
|
252
|
+
* 테스트 실행 결과 파싱.
|
|
253
|
+
*/
|
|
254
|
+
private parseTestResult;
|
|
255
|
+
/**
|
|
256
|
+
* Stage 3 — 품질 게이트: 복잡도, 길이, TODO, 디버그 문, 보안 스캔.
|
|
257
|
+
*
|
|
258
|
+
* @param changedFiles 변경된 파일 목록 (없으면 전체 소스)
|
|
259
|
+
*/
|
|
260
|
+
runQuality(changedFiles?: string[]): Promise<StageResult>;
|
|
261
|
+
/**
|
|
262
|
+
* 순환 복잡도 검사.
|
|
263
|
+
*/
|
|
264
|
+
private checkComplexity;
|
|
265
|
+
/**
|
|
266
|
+
* 함수/파일 길이 검사.
|
|
267
|
+
*/
|
|
268
|
+
private checkLengths;
|
|
269
|
+
/**
|
|
270
|
+
* TODO/FIXME/HACK 검사.
|
|
271
|
+
*/
|
|
272
|
+
private checkTodos;
|
|
273
|
+
/**
|
|
274
|
+
* 디버그 문 검사 (console.log 등, 테스트 파일 제외).
|
|
275
|
+
*/
|
|
276
|
+
private checkDebugStatements;
|
|
277
|
+
/**
|
|
278
|
+
* 보안 퀵 스캔 — 하드코딩된 시크릿, eval, SQL 인젝션 등.
|
|
279
|
+
*/
|
|
280
|
+
private checkSecurity;
|
|
281
|
+
/**
|
|
282
|
+
* Stage 4 — LLM 기반 코드 리뷰 (thorough 모드 전용).
|
|
283
|
+
*
|
|
284
|
+
* @param changedFiles 변경된 파일 목록
|
|
285
|
+
* @param reviewFn 리뷰를 수행할 LLM 함수
|
|
286
|
+
*/
|
|
287
|
+
runReview(changedFiles: string[], reviewFn: (prompt: string) => Promise<string>): Promise<StageResult>;
|
|
288
|
+
/**
|
|
289
|
+
* 리뷰 프롬프트 생성.
|
|
290
|
+
*/
|
|
291
|
+
private buildReviewPrompt;
|
|
292
|
+
/**
|
|
293
|
+
* LLM 리뷰 응답 파싱.
|
|
294
|
+
*/
|
|
295
|
+
private parseReviewResponse;
|
|
296
|
+
/**
|
|
297
|
+
* Stage 5 — 전체 결과 기반 자동 판정.
|
|
298
|
+
*
|
|
299
|
+
* - Critical failure → "escalate"
|
|
300
|
+
* - Only fixable failures → "fix_and_retry"
|
|
301
|
+
* - All pass or only warnings → "approve"
|
|
302
|
+
*/
|
|
303
|
+
makeDecision(stages: StageResult[]): QADecision;
|
|
304
|
+
/**
|
|
305
|
+
* 실패한 검사를 자동 수정 시도.
|
|
306
|
+
*
|
|
307
|
+
* @param check 실패한 검사 결과
|
|
308
|
+
* @param attempt 시도 번호 (1-based)
|
|
309
|
+
*/
|
|
310
|
+
private attemptFix;
|
|
311
|
+
/**
|
|
312
|
+
* ESLint --fix 실행.
|
|
313
|
+
*/
|
|
314
|
+
private fixLint;
|
|
315
|
+
/**
|
|
316
|
+
* Import 에러 수정 시도 (간이: 미사용 import 제거).
|
|
317
|
+
*/
|
|
318
|
+
private fixImports;
|
|
319
|
+
/**
|
|
320
|
+
* 셸 명령 실행 (타임아웃 포함).
|
|
321
|
+
*/
|
|
322
|
+
private exec;
|
|
323
|
+
/**
|
|
324
|
+
* 파일 목록을 읽어 Map<경로, 내용>으로 반환.
|
|
325
|
+
*/
|
|
326
|
+
private readFiles;
|
|
327
|
+
/**
|
|
328
|
+
* src/ 디렉토리 내 모든 .ts/.tsx 소스 파일 수집.
|
|
329
|
+
*/
|
|
330
|
+
private collectSourceFiles;
|
|
331
|
+
/**
|
|
332
|
+
* 디렉토리 재귀 탐색.
|
|
333
|
+
*/
|
|
334
|
+
private walkDir;
|
|
335
|
+
/**
|
|
336
|
+
* 파일 메트릭 분석 — 순환 복잡도, 인지 복잡도, LOC, 함수 목록.
|
|
337
|
+
*/
|
|
338
|
+
analyzeFileMetrics(content: string): FileMetrics;
|
|
339
|
+
/**
|
|
340
|
+
* stage 결과 생성 헬퍼.
|
|
341
|
+
*/
|
|
342
|
+
private buildStageResult;
|
|
343
|
+
/**
|
|
344
|
+
* 전체 판정 결정.
|
|
345
|
+
*/
|
|
346
|
+
private determineOverall;
|
|
347
|
+
/**
|
|
348
|
+
* Critical failure 존재 여부 확인.
|
|
349
|
+
*/
|
|
350
|
+
private hasCriticalFailure;
|
|
351
|
+
/**
|
|
352
|
+
* Quality stage 결과에서 GateResult 추출.
|
|
353
|
+
*/
|
|
354
|
+
private collectGateResults;
|
|
355
|
+
/**
|
|
356
|
+
* Import 경로 해석 (상대 경로 → 절대 경로).
|
|
357
|
+
*/
|
|
358
|
+
private resolveImportPath;
|
|
359
|
+
/**
|
|
360
|
+
* 파일 존재 확인.
|
|
361
|
+
*/
|
|
362
|
+
private fileExists;
|
|
363
|
+
}
|
|
364
|
+
export {};
|
|
365
|
+
//# sourceMappingURL=qa-pipeline.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"qa-pipeline.d.ts","sourceRoot":"","sources":["../src/qa-pipeline.ts"],"names":[],"mappings":"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"}
|