@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,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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"}