@su-record/vibe 2.8.42 → 2.8.45

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/CLAUDE.md CHANGED
@@ -153,6 +153,7 @@ When the user's context matches a pattern below, suggest the relevant skill **on
153
153
  | UI code review | `/design-audit` | standard | After implementing UI components |
154
154
  | New project setup / CLAUDE.md | `/claude-md-guide` | standard | "new project", "write CLAUDE.md" |
155
155
  | Before shipping UI | `/design-polish` | standard | "ready to deploy", "final check" |
156
+ | External API/SDK code needed | `/chub-usage` | optional | "Stripe 연동", "OpenAI API", SDK/API code request |
156
157
 
157
158
  ## Context Management
158
159
 
@@ -1 +1 @@
1
- {"version":3,"file":"constants.d.ts","sourceRoot":"","sources":["../../../src/cli/postinstall/constants.ts"],"names":[],"mappings":"AAAA;;GAEG;AAIH;;;;;;GAMG;AACH,eAAO,MAAM,kBAAkB,EAAE,aAAa,CAAC,MAAM,CAKpD,CAAC;AAEF,eAAO,MAAM,sBAAsB,EAAE,aAAa,CAAC,MAAM,CAYxD,CAAC;AAEF;8CAC8C;AAC9C,eAAO,MAAM,sBAAsB,EAAE,aAAa,CAAC,MAAM,CAKxD,CAAC;AAEF,2BAA2B;AAC3B,eAAO,MAAM,aAAa,EAAE,aAAa,CAAC,MAAM,CAG/C,CAAC;AAEF,yDAAyD;AACzD,eAAO,MAAM,eAAe,EAAE,MAAM,CAAC,MAAM,EAAE,aAAa,CAAC,MAAM,CAAC,CAgBjE,CAAC;AAEF,8CAA8C;AAC9C,eAAO,MAAM,iBAAiB,EAAE,MAAM,CAAC,MAAM,EAAE,aAAa,CAAC,MAAM,CAAC,CAKnE,CAAC;AAEF,mEAAmE;AACnE,eAAO,MAAM,wBAAwB,EAAE,MAAM,CAAC,MAAM,EAAE,aAAa,CAAC,MAAM,CAAC,CAG1E,CAAC;AAEF,uCAAuC;AACvC,eAAO,MAAM,0BAA0B,EAAE,MAAM,CAAC,MAAM,EAAE,aAAa,CAAC,MAAM,CAAC,CAAM,CAAC;AAEpF,uDAAuD;AACvD,eAAO,MAAM,sBAAsB,EAAE,aAAa,CAAC;IACjD,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,EAAE,MAAM,CAAC;CACd,CAKA,CAAC;AAEF;;GAEG;AACH,wBAAgB,kBAAkB,CAAC,UAAU,EAAE,MAAM,EAAE,EAAE,YAAY,GAAE,MAAM,EAAO,GAAG,MAAM,EAAE,CAuB9F;AAED;;GAEG;AACH,wBAAgB,qBAAqB,CAAC,UAAU,EAAE,MAAM,EAAE,EAAE,YAAY,GAAE,MAAM,EAAO,GAAG,MAAM,EAAE,CAmBjG;AAKD,eAAO,MAAM,sBAAsB,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CA2BzD,CAAC;AAGF,eAAO,MAAM,cAAc,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAwBjD,CAAC;AAMF,eAAO,MAAM,oBAAoB,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAkBvD,CAAC;AAGF,eAAO,MAAM,sBAAsB,UAGlC,CAAC;AAGF,eAAO,MAAM,iBAAiB,UAE7B,CAAC;AAEF,kEAAkE;AAClE,eAAO,MAAM,iBAAiB,EAAE,aAAa,CAAC,MAAM,CAYnD,CAAC;AAKF,eAAO,MAAM,oBAAoB,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CA2DvD,CAAC;AAGF,eAAO,MAAM,kBAAkB,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,EAAE,CAKvD,CAAC;AAGF,eAAO,MAAM,0BAA0B,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CA2D7D,CAAC;AAGF,eAAO,MAAM,4BAA4B,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CA8B/D,CAAC;AAGF,eAAO,MAAM,6BAA6B,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,EAAE,CAalE,CAAC;AAGF,eAAO,MAAM,mBAAmB,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAatD,CAAC"}
1
+ {"version":3,"file":"constants.d.ts","sourceRoot":"","sources":["../../../src/cli/postinstall/constants.ts"],"names":[],"mappings":"AAAA;;GAEG;AAIH;;;;;;GAMG;AACH,eAAO,MAAM,kBAAkB,EAAE,aAAa,CAAC,MAAM,CAKpD,CAAC;AAEF,eAAO,MAAM,sBAAsB,EAAE,aAAa,CAAC,MAAM,CAYxD,CAAC;AAEF;8CAC8C;AAC9C,eAAO,MAAM,sBAAsB,EAAE,aAAa,CAAC,MAAM,CAMxD,CAAC;AAEF,2BAA2B;AAC3B,eAAO,MAAM,aAAa,EAAE,aAAa,CAAC,MAAM,CAG/C,CAAC;AAEF,yDAAyD;AACzD,eAAO,MAAM,eAAe,EAAE,MAAM,CAAC,MAAM,EAAE,aAAa,CAAC,MAAM,CAAC,CAgBjE,CAAC;AAEF,8CAA8C;AAC9C,eAAO,MAAM,iBAAiB,EAAE,MAAM,CAAC,MAAM,EAAE,aAAa,CAAC,MAAM,CAAC,CAKnE,CAAC;AAEF,mEAAmE;AACnE,eAAO,MAAM,wBAAwB,EAAE,MAAM,CAAC,MAAM,EAAE,aAAa,CAAC,MAAM,CAAC,CAG1E,CAAC;AAEF,uCAAuC;AACvC,eAAO,MAAM,0BAA0B,EAAE,MAAM,CAAC,MAAM,EAAE,aAAa,CAAC,MAAM,CAAC,CAAM,CAAC;AAEpF,uDAAuD;AACvD,eAAO,MAAM,sBAAsB,EAAE,aAAa,CAAC;IACjD,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,EAAE,MAAM,CAAC;CACd,CAKA,CAAC;AAEF;;GAEG;AACH,wBAAgB,kBAAkB,CAAC,UAAU,EAAE,MAAM,EAAE,EAAE,YAAY,GAAE,MAAM,EAAO,GAAG,MAAM,EAAE,CAuB9F;AAED;;GAEG;AACH,wBAAgB,qBAAqB,CAAC,UAAU,EAAE,MAAM,EAAE,EAAE,YAAY,GAAE,MAAM,EAAO,GAAG,MAAM,EAAE,CAmBjG;AAKD,eAAO,MAAM,sBAAsB,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CA2BzD,CAAC;AAGF,eAAO,MAAM,cAAc,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAwBjD,CAAC;AAMF,eAAO,MAAM,oBAAoB,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAkBvD,CAAC;AAGF,eAAO,MAAM,sBAAsB,UAGlC,CAAC;AAGF,eAAO,MAAM,iBAAiB,UAE7B,CAAC;AAEF,kEAAkE;AAClE,eAAO,MAAM,iBAAiB,EAAE,aAAa,CAAC,MAAM,CAYnD,CAAC;AAKF,eAAO,MAAM,oBAAoB,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CA2DvD,CAAC;AAGF,eAAO,MAAM,kBAAkB,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,EAAE,CAKvD,CAAC;AAGF,eAAO,MAAM,0BAA0B,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CA2D7D,CAAC;AAGF,eAAO,MAAM,4BAA4B,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CA8B/D,CAAC;AAGF,eAAO,MAAM,6BAA6B,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,EAAE,CAalE,CAAC;AAGF,eAAO,MAAM,mBAAmB,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAatD,CAAC"}
@@ -35,6 +35,7 @@ export const GLOBAL_SKILLS_OPTIONAL = [
35
35
  'git-worktree',
36
36
  'tool-fallback',
37
37
  'context7-usage',
38
+ 'chub-usage',
38
39
  ];
39
40
  /** 전역 설치 스킬 전체 (하위 호환용) */
40
41
  export const GLOBAL_SKILLS = [
@@ -1 +1 @@
1
- {"version":3,"file":"constants.js","sourceRoot":"","sources":["../../../src/cli/postinstall/constants.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"constants.js","sourceRoot":"","sources":["../../../src/cli/postinstall/constants.ts"],"names":[],"mappings":"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"}
@@ -2,7 +2,49 @@
2
2
  * VerificationLoop — SPEC 요구사항 달성률 정량화 + 자동 반복
3
3
  *
4
4
  * /vibe.trace 결과를 정량화하고, 임계값 미달 시 자동 재시도 지원
5
+ * E2E 브라우저 검증 지원 (Puppeteer 기반 사용자 관점 검증)
5
6
  */
7
+ export interface E2ECheckConfig {
8
+ /** 검증 대상 URL (e.g., http://localhost:3000) */
9
+ baseURL: string;
10
+ /** 검증할 경로 목록 */
11
+ routes: string[];
12
+ /** 뷰포트 크기 (기본: 1920x1080) */
13
+ viewport?: {
14
+ width: number;
15
+ height: number;
16
+ };
17
+ /** 스크린샷 비교 임계값 (기본: 0.01 = 1%) */
18
+ diffThreshold?: number;
19
+ /** 콘솔 에러 허용 여부 (기본: false) */
20
+ allowConsoleErrors?: boolean;
21
+ }
22
+ export interface E2ECheckResult {
23
+ /** 검증 대상 URL */
24
+ url: string;
25
+ /** pass/fail */
26
+ status: 'pass' | 'fail';
27
+ /** P1 이슈 수 */
28
+ p1Count: number;
29
+ /** P2 이슈 수 */
30
+ p2Count: number;
31
+ /** 이슈 요약 */
32
+ issues: string[];
33
+ /** 스크린샷 diff 비율 (있으면) */
34
+ screenshotDiffRatio?: number;
35
+ }
36
+ export interface E2EVerificationResult {
37
+ /** 전체 pass 여부 */
38
+ passed: boolean;
39
+ /** 개별 라우트 결과 */
40
+ checks: E2ECheckResult[];
41
+ /** 총 P1 이슈 수 */
42
+ totalP1: number;
43
+ /** 총 P2 이슈 수 */
44
+ totalP2: number;
45
+ /** 타임스탬프 */
46
+ timestamp: string;
47
+ }
6
48
  export interface RequirementResult {
7
49
  /** Requirement ID (e.g., REQ-001) */
8
50
  id: string;
@@ -40,6 +82,8 @@ export interface VerificationLoopConfig {
40
82
  maxIterations: number;
41
83
  /** Whether auto-retry is enabled */
42
84
  autoRetry: boolean;
85
+ /** E2E 브라우저 검증 설정 (없으면 E2E 스킵) */
86
+ e2e?: E2ECheckConfig;
43
87
  }
44
88
  export declare const DEFAULT_VERIFICATION_CONFIG: VerificationLoopConfig;
45
89
  export interface LoopState {
@@ -102,4 +146,22 @@ export declare function formatLoopSummary(state: LoopState): string;
102
146
  * Returns true if latest rate is at least 1% higher than the previous
103
147
  */
104
148
  export declare function isImproving(state: LoopState): boolean;
149
+ /**
150
+ * 단일 URL에 대해 E2E 브라우저 검증 수행
151
+ * browser/ 인프라의 Puppeteer 모듈을 동적 임포트 (puppeteer 미설치 시 graceful skip)
152
+ */
153
+ export declare function runE2ECheck(url: string, config: E2ECheckConfig): Promise<E2ECheckResult>;
154
+ /**
155
+ * E2E 검증 전체 실행 — 모든 라우트에 대해 브라우저 검증
156
+ */
157
+ export declare function runE2EVerification(config: E2ECheckConfig): Promise<E2EVerificationResult>;
158
+ /**
159
+ * E2E 검증 결과를 RequirementResult로 변환
160
+ * VerificationLoop와 통합하여 SPEC 달성률에 반영
161
+ */
162
+ export declare function e2eToRequirements(e2eResult: E2EVerificationResult): RequirementResult[];
163
+ /**
164
+ * E2E 검증 결과 포맷팅
165
+ */
166
+ export declare function formatE2EResult(result: E2EVerificationResult): string;
105
167
  //# sourceMappingURL=VerificationLoop.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"VerificationLoop.d.ts","sourceRoot":"","sources":["../../../src/infra/lib/VerificationLoop.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"VerificationLoop.d.ts","sourceRoot":"","sources":["../../../src/infra/lib/VerificationLoop.ts"],"names":[],"mappings":"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"}
@@ -2,6 +2,7 @@
2
2
  * VerificationLoop — SPEC 요구사항 달성률 정량화 + 자동 반복
3
3
  *
4
4
  * /vibe.trace 결과를 정량화하고, 임계값 미달 시 자동 재시도 지원
5
+ * E2E 브라우저 검증 지원 (Puppeteer 기반 사용자 관점 검증)
5
6
  */
6
7
  export const DEFAULT_VERIFICATION_CONFIG = {
7
8
  threshold: 90,
@@ -186,4 +187,118 @@ export function isImproving(state) {
186
187
  const prev = state.history[state.history.length - 2];
187
188
  return last.achievementRate - prev.achievementRate >= 1;
188
189
  }
190
+ // ─── E2E Browser Verification ───
191
+ /**
192
+ * 단일 URL에 대해 E2E 브라우저 검증 수행
193
+ * browser/ 인프라의 Puppeteer 모듈을 동적 임포트 (puppeteer 미설치 시 graceful skip)
194
+ */
195
+ export async function runE2ECheck(url, config) {
196
+ const result = { url, status: 'pass', p1Count: 0, p2Count: 0, issues: [] };
197
+ try {
198
+ const { launchBrowser, openPage, closeBrowser } = await import('./browser/launch.js');
199
+ const { captureScreenshot, extractTextContent } = await import('./browser/capture.js');
200
+ const viewport = config.viewport ?? { width: 1920, height: 1080 };
201
+ const browser = await launchBrowser({ headless: true, viewport });
202
+ const page = await openPage(browser, url, viewport);
203
+ // 콘솔 에러 수집
204
+ const consoleErrors = [];
205
+ page.on('console', (msg) => {
206
+ const m = msg;
207
+ if (m.type() === 'error')
208
+ consoleErrors.push(m.text());
209
+ });
210
+ // 페이지 로드 대기
211
+ await page.waitForNetworkIdle({ idleTime: 1000 }).catch(() => { });
212
+ // 텍스트 콘텐츠 존재 확인 (빈 페이지 감지)
213
+ const texts = await extractTextContent(page);
214
+ if (texts.length === 0) {
215
+ result.issues.push('Empty page — no text content rendered');
216
+ result.p1Count++;
217
+ }
218
+ // 콘솔 에러 체크
219
+ if (!config.allowConsoleErrors && consoleErrors.length > 0) {
220
+ const errorSummary = consoleErrors.slice(0, 3).join('; ');
221
+ result.issues.push(`Console errors (${consoleErrors.length}): ${errorSummary}`);
222
+ result.p1Count++;
223
+ }
224
+ // HTTP 에러 체크 (4xx, 5xx 리소스)
225
+ const failedRequests = [];
226
+ page.on('requestfailed', (req) => {
227
+ const r = req;
228
+ failedRequests.push(r.url());
229
+ });
230
+ if (failedRequests.length > 0) {
231
+ result.issues.push(`Failed requests (${failedRequests.length}): ${failedRequests[0]}`);
232
+ result.p2Count++;
233
+ }
234
+ await closeBrowser();
235
+ }
236
+ catch (error) {
237
+ const msg = error instanceof Error ? error.message : String(error);
238
+ if (msg.includes('Cannot find module') || msg.includes('puppeteer')) {
239
+ result.issues.push('Puppeteer not installed — E2E check skipped');
240
+ return result; // graceful skip, 아직 pass
241
+ }
242
+ result.issues.push(`E2E check error: ${msg}`);
243
+ result.p1Count++;
244
+ }
245
+ result.status = result.p1Count > 0 ? 'fail' : 'pass';
246
+ return result;
247
+ }
248
+ /**
249
+ * E2E 검증 전체 실행 — 모든 라우트에 대해 브라우저 검증
250
+ */
251
+ export async function runE2EVerification(config) {
252
+ const checks = [];
253
+ let totalP1 = 0;
254
+ let totalP2 = 0;
255
+ for (const route of config.routes) {
256
+ const url = `${config.baseURL}${route}`;
257
+ const check = await runE2ECheck(url, config);
258
+ checks.push(check);
259
+ totalP1 += check.p1Count;
260
+ totalP2 += check.p2Count;
261
+ }
262
+ return {
263
+ passed: totalP1 === 0,
264
+ checks,
265
+ totalP1,
266
+ totalP2,
267
+ timestamp: new Date().toISOString(),
268
+ };
269
+ }
270
+ /**
271
+ * E2E 검증 결과를 RequirementResult로 변환
272
+ * VerificationLoop와 통합하여 SPEC 달성률에 반영
273
+ */
274
+ export function e2eToRequirements(e2eResult) {
275
+ return e2eResult.checks.map((check, i) => ({
276
+ id: `E2E-${String(i + 1).padStart(3, '0')}`,
277
+ description: `E2E: ${check.url}`,
278
+ status: check.status === 'pass' ? 'pass' : 'fail',
279
+ score: check.status === 'pass' ? 100 : Math.max(0, 100 - check.p1Count * 50),
280
+ evidence: check.issues.length > 0 ? check.issues.join('; ') : 'All checks passed',
281
+ }));
282
+ }
283
+ /**
284
+ * E2E 검증 결과 포맷팅
285
+ */
286
+ export function formatE2EResult(result) {
287
+ const lines = [];
288
+ const statusIcon = result.passed ? '✅' : '❌';
289
+ lines.push(`━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━`);
290
+ lines.push(`${statusIcon} E2E Browser Verification`);
291
+ lines.push(`━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━`);
292
+ lines.push(`P1: ${result.totalP1} | P2: ${result.totalP2}`);
293
+ lines.push(``);
294
+ for (const check of result.checks) {
295
+ const icon = check.status === 'pass' ? '✅' : '❌';
296
+ lines.push(` ${icon} ${check.url}`);
297
+ for (const issue of check.issues) {
298
+ lines.push(` ${issue}`);
299
+ }
300
+ }
301
+ lines.push(`━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━`);
302
+ return lines.join('\n');
303
+ }
189
304
  //# sourceMappingURL=VerificationLoop.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"VerificationLoop.js","sourceRoot":"","sources":["../../../src/infra/lib/VerificationLoop.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"VerificationLoop.js","sourceRoot":"","sources":["../../../src/infra/lib/VerificationLoop.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAwFH,MAAM,CAAC,MAAM,2BAA2B,GAA2B;IACjE,SAAS,EAAE,EAAE;IACb,aAAa,EAAE,CAAC;IAChB,SAAS,EAAE,KAAK;CACjB,CAAC;AAsBF;;GAEG;AACH,MAAM,UAAU,UAAU,CAAC,OAAe,EAAE,MAAwC;IAClF,OAAO;QACL,OAAO;QACP,MAAM,EAAE,EAAE,GAAG,2BAA2B,EAAE,GAAG,MAAM,EAAE;QACrD,OAAO,EAAE,EAAE;QACX,MAAM,EAAE,SAAS;QACjB,SAAS,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;KACpC,CAAC;AACJ,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,wBAAwB,CAAC,YAAiC;IACxE,MAAM,MAAM,GAAG,YAAY,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,MAAM,KAAK,MAAM,CAAC,CAAC;IAC7D,IAAI,MAAM,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,GAAG,CAAC;IACpC,MAAM,KAAK,GAAG,MAAM,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,CAAC,EAAE,EAAE,CAAC,GAAG,GAAG,CAAC,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC;IAC1D,OAAO,IAAI,CAAC,KAAK,CAAC,KAAK,GAAG,MAAM,CAAC,MAAM,CAAC,CAAC;AAC3C,CAAC;AAED;;GAEG;AACH,SAAS,YAAY,CAAC,YAAiC;IACrD,OAAO;QACL,KAAK,EAAE,YAAY,CAAC,MAAM;QAC1B,IAAI,EAAE,YAAY,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,MAAM,KAAK,MAAM,CAAC,CAAC,MAAM;QAC1D,IAAI,EAAE,YAAY,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,MAAM,KAAK,MAAM,CAAC,CAAC,MAAM;QAC1D,OAAO,EAAE,YAAY,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,MAAM,KAAK,SAAS,CAAC,CAAC,MAAM;QAChE,IAAI,EAAE,YAAY,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,MAAM,KAAK,MAAM,CAAC,CAAC,MAAM;KAC3D,CAAC;AACJ,CAAC;AAED;;GAEG;AACH,SAAS,eAAe,CAAC,KAAgB,EAAE,MAA0B;IACnE,IAAI,MAAM,CAAC,eAAe,IAAI,KAAK,CAAC,MAAM,CAAC,SAAS,EAAE,CAAC;QACrD,OAAO,EAAE,IAAI,EAAE,QAAQ,EAAE,IAAI,EAAE,MAAM,CAAC,eAAe,EAAE,CAAC;IAC1D,CAAC;IAED,MAAM,aAAa,GAAG,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC;IAC3C,IAAI,aAAa,IAAI,KAAK,CAAC,MAAM,CAAC,aAAa,EAAE,CAAC;QAChD,OAAO,EAAE,IAAI,EAAE,gBAAgB,EAAE,IAAI,EAAE,MAAM,CAAC,eAAe,EAAE,OAAO,EAAE,KAAK,CAAC,OAAO,EAAE,CAAC;IAC1F,CAAC;IAED,OAAO;QACL,IAAI,EAAE,OAAO;QACb,IAAI,EAAE,MAAM,CAAC,eAAe;QAC5B,SAAS,EAAE,aAAa;QACxB,kBAAkB,EAAE,oBAAoB,CAAC,MAAM,CAAC;KACjD,CAAC;AACJ,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,kBAAkB,CAChC,KAAgB,EAChB,YAAiC;IAEjC,MAAM,SAAS,GAAG,KAAK,CAAC,OAAO,CAAC,MAAM,GAAG,CAAC,CAAC;IAC3C,MAAM,eAAe,GAAG,wBAAwB,CAAC,YAAY,CAAC,CAAC;IAE/D,MAAM,MAAM,GAAuB;QACjC,eAAe;QACf,YAAY;QACZ,OAAO,EAAE,YAAY,CAAC,YAAY,CAAC;QACnC,SAAS,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;QACnC,SAAS;KACV,CAAC;IAEF,MAAM,UAAU,GAAG,CAAC,GAAG,KAAK,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC;IAC9C,MAAM,MAAM,GAAG,eAAe,CAAC,EAAE,GAAG,KAAK,EAAE,OAAO,EAAE,UAAU,EAAE,EAAE,MAAM,CAAC,CAAC;IAE1E,MAAM,UAAU,GAAG,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;IAC9C,MAAM,WAAW,GAAG,UAAU,KAAK,SAAS,CAAC,CAAC,CAAC,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC,CAAC,CAAC,SAAS,CAAC;IAEpF,MAAM,QAAQ,GAAc;QAC1B,GAAG,KAAK;QACR,OAAO,EAAE,UAAU;QACnB,MAAM,EAAE,UAAU;QAClB,GAAG,CAAC,WAAW,IAAI,EAAE,WAAW,EAAE,CAAC;KACpC,CAAC;IAEF,OAAO,EAAE,KAAK,EAAE,QAAQ,EAAE,MAAM,EAAE,CAAC;AACrC,CAAC;AAED;;GAEG;AACH,SAAS,aAAa,CAAC,UAAsC;IAC3D,QAAQ,UAAU,EAAE,CAAC;QACnB,KAAK,QAAQ,CAAC,CAAC,OAAO,QAAQ,CAAC;QAC/B,KAAK,gBAAgB,CAAC,CAAC,OAAO,gBAAgB,CAAC;QAC/C,KAAK,OAAO,CAAC,CAAC,OAAO,SAAS,CAAC;IACjC,CAAC;AACH,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,oBAAoB,CAAC,MAA0B;IAC7D,OAAO,MAAM,CAAC,YAAY,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,MAAM,KAAK,MAAM,IAAI,CAAC,CAAC,MAAM,KAAK,SAAS,CAAC,CAAC;AACxF,CAAC;AAED;;GAEG;AACH,SAAS,kBAAkB,CAAC,MAAmC;IAC7D,QAAQ,MAAM,EAAE,CAAC;QACf,KAAK,MAAM,CAAC,CAAC,OAAO,GAAG,CAAC;QACxB,KAAK,MAAM,CAAC,CAAC,OAAO,GAAG,CAAC;QACxB,KAAK,SAAS,CAAC,CAAC,OAAO,IAAI,CAAC;QAC5B,KAAK,MAAM,CAAC,CAAC,OAAO,IAAI,CAAC;IAC3B,CAAC;AACH,CAAC;AAED;;GAEG;AACH,SAAS,YAAY,CAAC,IAAY,EAAE,QAAgB,EAAE;IACpD,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,IAAI,GAAG,GAAG,CAAC,GAAG,KAAK,CAAC,CAAC;IAChD,MAAM,KAAK,GAAG,KAAK,GAAG,MAAM,CAAC;IAC7B,OAAO,GAAG,CAAC,MAAM,CAAC,MAAM,CAAC,GAAG,GAAG,CAAC,MAAM,CAAC,KAAK,CAAC,GAAG,IAAI,IAAI,GAAG,CAAC;AAC9D,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,wBAAwB,CACtC,MAA0B,EAC1B,MAA8B;IAE9B,MAAM,KAAK,GAAa,EAAE,CAAC;IAC3B,MAAM,MAAM,GAAG,MAAM,CAAC,eAAe,IAAI,MAAM,CAAC,SAAS,CAAC;IAC1D,MAAM,WAAW,GAAG,MAAM,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,iBAAiB,CAAC;IAE1D,KAAK,CAAC,IAAI,CAAC,0CAA0C,CAAC,CAAC;IACvD,KAAK,CAAC,IAAI,CAAC,mCAAmC,MAAM,CAAC,SAAS,EAAE,CAAC,CAAC;IAClE,KAAK,CAAC,IAAI,CAAC,0CAA0C,CAAC,CAAC;IACvD,KAAK,CAAC,IAAI,CAAC,gBAAgB,YAAY,CAAC,MAAM,CAAC,eAAe,CAAC,KAAK,WAAW,GAAG,CAAC,CAAC;IACpF,KAAK,CAAC,IAAI,CAAC,gBAAgB,MAAM,CAAC,SAAS,GAAG,CAAC,CAAC;IAChD,KAAK,CAAC,IAAI,CAAC,gBAAgB,MAAM,CAAC,OAAO,CAAC,IAAI,WAAW,MAAM,CAAC,OAAO,CAAC,IAAI,WAAW,MAAM,CAAC,OAAO,CAAC,OAAO,cAAc,MAAM,CAAC,OAAO,CAAC,IAAI,OAAO,CAAC,CAAC;IACvJ,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IACf,KAAK,CAAC,IAAI,CAAC,eAAe,CAAC,CAAC;IAE5B,KAAK,MAAM,GAAG,IAAI,MAAM,CAAC,YAAY,EAAE,CAAC;QACtC,MAAM,IAAI,GAAG,kBAAkB,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;QAC5C,KAAK,CAAC,IAAI,CAAC,KAAK,IAAI,KAAK,GAAG,CAAC,EAAE,KAAK,GAAG,CAAC,WAAW,EAAE,CAAC,CAAC;QACvD,IAAI,GAAG,CAAC,MAAM,KAAK,MAAM,IAAI,GAAG,CAAC,MAAM,KAAK,MAAM,EAAE,CAAC;YACnD,KAAK,CAAC,IAAI,CAAC,oBAAoB,GAAG,CAAC,QAAQ,EAAE,CAAC,CAAC;QACjD,CAAC;IACH,CAAC;IAED,KAAK,CAAC,IAAI,CAAC,0CAA0C,CAAC,CAAC;IAEvD,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AAC1B,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,iBAAiB,CAAC,KAAgB;IAChD,MAAM,KAAK,GAAa,EAAE,CAAC;IAE3B,KAAK,CAAC,IAAI,CAAC,0CAA0C,CAAC,CAAC;IACvD,KAAK,CAAC,IAAI,CAAC,uBAAuB,KAAK,CAAC,OAAO,EAAE,CAAC,CAAC;IACnD,KAAK,CAAC,IAAI,CAAC,0CAA0C,CAAC,CAAC;IACvD,KAAK,CAAC,IAAI,CAAC,eAAe,KAAK,CAAC,MAAM,CAAC,WAAW,EAAE,EAAE,CAAC,CAAC;IACxD,KAAK,CAAC,IAAI,CAAC,eAAe,KAAK,CAAC,OAAO,CAAC,MAAM,IAAI,KAAK,CAAC,MAAM,CAAC,aAAa,EAAE,CAAC,CAAC;IAChF,KAAK,CAAC,IAAI,CAAC,eAAe,KAAK,CAAC,MAAM,CAAC,SAAS,GAAG,CAAC,CAAC;IACrD,KAAK,CAAC,IAAI,CAAC,eAAe,KAAK,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,UAAU,EAAE,CAAC,CAAC;IAE7E,IAAI,KAAK,CAAC,OAAO,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QAC7B,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QACf,KAAK,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;QACvB,KAAK,MAAM,MAAM,IAAI,KAAK,CAAC,OAAO,EAAE,CAAC;YACnC,MAAM,GAAG,GAAG,YAAY,CAAC,MAAM,CAAC,eAAe,EAAE,CAAC,CAAC,CAAC;YACpD,KAAK,CAAC,IAAI,CAAC,eAAe,MAAM,CAAC,SAAS,KAAK,GAAG,EAAE,CAAC,CAAC;QACxD,CAAC;QAED,MAAM,SAAS,GAAG,WAAW,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,cAAc,CAAC,CAAC,CAAC,EAAE,CAAC;QAC3D,KAAK,CAAC,IAAI,CAAC,GAAG,SAAS,EAAE,CAAC,CAAC;IAC7B,CAAC;IAED,IAAI,KAAK,CAAC,WAAW,EAAE,CAAC;QACtB,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QACf,KAAK,CAAC,IAAI,CAAC,cAAc,KAAK,CAAC,WAAW,EAAE,CAAC,CAAC;IAChD,CAAC;IAED,KAAK,CAAC,IAAI,CAAC,0CAA0C,CAAC,CAAC;IAEvD,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AAC1B,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,WAAW,CAAC,KAAgB;IAC1C,IAAI,KAAK,CAAC,OAAO,CAAC,MAAM,GAAG,CAAC;QAAE,OAAO,KAAK,CAAC;IAE3C,MAAM,IAAI,GAAG,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,OAAO,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;IACrD,MAAM,IAAI,GAAG,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,OAAO,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;IAErD,OAAO,IAAI,CAAC,eAAe,GAAG,IAAI,CAAC,eAAe,IAAI,CAAC,CAAC;AAC1D,CAAC;AAED,mCAAmC;AAEnC;;;GAGG;AACH,MAAM,CAAC,KAAK,UAAU,WAAW,CAC/B,GAAW,EACX,MAAsB;IAEtB,MAAM,MAAM,GAAmB,EAAE,GAAG,EAAE,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,MAAM,EAAE,EAAE,EAAE,CAAC;IAE3F,IAAI,CAAC;QACH,MAAM,EAAE,aAAa,EAAE,QAAQ,EAAE,YAAY,EAAE,GAAG,MAAM,MAAM,CAAC,qBAAqB,CAAC,CAAC;QACtF,MAAM,EAAE,iBAAiB,EAAE,kBAAkB,EAAE,GAAG,MAAM,MAAM,CAAC,sBAAsB,CAAC,CAAC;QAEvF,MAAM,QAAQ,GAAG,MAAM,CAAC,QAAQ,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC;QAClE,MAAM,OAAO,GAAG,MAAM,aAAa,CAAC,EAAE,QAAQ,EAAE,IAAI,EAAE,QAAQ,EAAE,CAAC,CAAC;QAClE,MAAM,IAAI,GAAG,MAAM,QAAQ,CAAC,OAAO,EAAE,GAAG,EAAE,QAAQ,CAGjD,CAAC;QAEF,WAAW;QACX,MAAM,aAAa,GAAa,EAAE,CAAC;QACnC,IAAI,CAAC,EAAE,CAAC,SAAS,EAAE,CAAC,GAAY,EAAE,EAAE;YAClC,MAAM,CAAC,GAAG,GAAiD,CAAC;YAC5D,IAAI,CAAC,CAAC,IAAI,EAAE,KAAK,OAAO;gBAAE,aAAa,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC;QACzD,CAAC,CAAC,CAAC;QAEH,YAAY;QACZ,MAAM,IAAI,CAAC,kBAAkB,CAAC,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC,CAAC,KAAK,CAAC,GAAG,EAAE,GAAoB,CAAC,CAAC,CAAC;QAEpF,2BAA2B;QAC3B,MAAM,KAAK,GAAG,MAAM,kBAAkB,CAAC,IAAI,CAAC,CAAC;QAC7C,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YACvB,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,uCAAuC,CAAC,CAAC;YAC5D,MAAM,CAAC,OAAO,EAAE,CAAC;QACnB,CAAC;QAED,WAAW;QACX,IAAI,CAAC,MAAM,CAAC,kBAAkB,IAAI,aAAa,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YAC3D,MAAM,YAAY,GAAG,aAAa,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YAC1D,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,mBAAmB,aAAa,CAAC,MAAM,MAAM,YAAY,EAAE,CAAC,CAAC;YAChF,MAAM,CAAC,OAAO,EAAE,CAAC;QACnB,CAAC;QAED,4BAA4B;QAC5B,MAAM,cAAc,GAAa,EAAE,CAAC;QACpC,IAAI,CAAC,EAAE,CAAC,eAAe,EAAE,CAAC,GAAY,EAAE,EAAE;YACxC,MAAM,CAAC,GAAG,GAA4B,CAAC;YACvC,cAAc,CAAC,IAAI,CAAC,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC;QAC/B,CAAC,CAAC,CAAC;QAEH,IAAI,cAAc,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YAC9B,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,oBAAoB,cAAc,CAAC,MAAM,MAAM,cAAc,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;YACvF,MAAM,CAAC,OAAO,EAAE,CAAC;QACnB,CAAC;QAED,MAAM,YAAY,EAAE,CAAC;IACvB,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,MAAM,GAAG,GAAG,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;QACnE,IAAI,GAAG,CAAC,QAAQ,CAAC,oBAAoB,CAAC,IAAI,GAAG,CAAC,QAAQ,CAAC,WAAW,CAAC,EAAE,CAAC;YACpE,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,6CAA6C,CAAC,CAAC;YAClE,OAAO,MAAM,CAAC,CAAC,yBAAyB;QAC1C,CAAC;QACD,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,oBAAoB,GAAG,EAAE,CAAC,CAAC;QAC9C,MAAM,CAAC,OAAO,EAAE,CAAC;IACnB,CAAC;IAED,MAAM,CAAC,MAAM,GAAG,MAAM,CAAC,OAAO,GAAG,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC;IACrD,OAAO,MAAM,CAAC;AAChB,CAAC;AAED;;GAEG;AACH,MAAM,CAAC,KAAK,UAAU,kBAAkB,CACtC,MAAsB;IAEtB,MAAM,MAAM,GAAqB,EAAE,CAAC;IACpC,IAAI,OAAO,GAAG,CAAC,CAAC;IAChB,IAAI,OAAO,GAAG,CAAC,CAAC;IAEhB,KAAK,MAAM,KAAK,IAAI,MAAM,CAAC,MAAM,EAAE,CAAC;QAClC,MAAM,GAAG,GAAG,GAAG,MAAM,CAAC,OAAO,GAAG,KAAK,EAAE,CAAC;QACxC,MAAM,KAAK,GAAG,MAAM,WAAW,CAAC,GAAG,EAAE,MAAM,CAAC,CAAC;QAC7C,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QACnB,OAAO,IAAI,KAAK,CAAC,OAAO,CAAC;QACzB,OAAO,IAAI,KAAK,CAAC,OAAO,CAAC;IAC3B,CAAC;IAED,OAAO;QACL,MAAM,EAAE,OAAO,KAAK,CAAC;QACrB,MAAM;QACN,OAAO;QACP,OAAO;QACP,SAAS,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;KACpC,CAAC;AACJ,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,iBAAiB,CAAC,SAAgC;IAChE,OAAO,SAAS,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC;QACzC,EAAE,EAAE,OAAO,MAAM,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,EAAE,GAAG,CAAC,EAAE;QAC3C,WAAW,EAAE,QAAQ,KAAK,CAAC,GAAG,EAAE;QAChC,MAAM,EAAE,KAAK,CAAC,MAAM,KAAK,MAAM,CAAC,CAAC,CAAC,MAAe,CAAC,CAAC,CAAC,MAAe;QACnE,KAAK,EAAE,KAAK,CAAC,MAAM,KAAK,MAAM,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,GAAG,GAAG,KAAK,CAAC,OAAO,GAAG,EAAE,CAAC;QAC5E,QAAQ,EAAE,KAAK,CAAC,MAAM,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,mBAAmB;KAClF,CAAC,CAAC,CAAC;AACN,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,eAAe,CAAC,MAA6B;IAC3D,MAAM,KAAK,GAAa,EAAE,CAAC;IAC3B,MAAM,UAAU,GAAG,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC;IAE7C,KAAK,CAAC,IAAI,CAAC,0CAA0C,CAAC,CAAC;IACvD,KAAK,CAAC,IAAI,CAAC,GAAG,UAAU,2BAA2B,CAAC,CAAC;IACrD,KAAK,CAAC,IAAI,CAAC,0CAA0C,CAAC,CAAC;IACvD,KAAK,CAAC,IAAI,CAAC,OAAO,MAAM,CAAC,OAAO,UAAU,MAAM,CAAC,OAAO,EAAE,CAAC,CAAC;IAC5D,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IAEf,KAAK,MAAM,KAAK,IAAI,MAAM,CAAC,MAAM,EAAE,CAAC;QAClC,MAAM,IAAI,GAAG,KAAK,CAAC,MAAM,KAAK,MAAM,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC;QACjD,KAAK,CAAC,IAAI,CAAC,KAAK,IAAI,IAAI,KAAK,CAAC,GAAG,EAAE,CAAC,CAAC;QACrC,KAAK,MAAM,KAAK,IAAI,KAAK,CAAC,MAAM,EAAE,CAAC;YACjC,KAAK,CAAC,IAAI,CAAC,UAAU,KAAK,EAAE,CAAC,CAAC;QAChC,CAAC;IACH,CAAC;IAED,KAAK,CAAC,IAAI,CAAC,0CAA0C,CAAC,CAAC;IACvD,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AAC1B,CAAC"}
@@ -0,0 +1,44 @@
1
+ import { InsightStore } from './InsightStore.js';
2
+ import { TraceStats } from './HookTraceReader.js';
3
+ export interface GuardAnalysisResult {
4
+ newInsights: string[];
5
+ mergedInsights: string[];
6
+ stats: TraceStats;
7
+ }
8
+ export declare class GuardAnalyzer {
9
+ private insightStore;
10
+ constructor(insightStore: InsightStore);
11
+ /**
12
+ * 최근 hook trace 분석 → insight 생성
13
+ */
14
+ analyze(daysBack?: number): GuardAnalysisResult;
15
+ /**
16
+ * 개별 클러스터를 인사이트로 변환
17
+ */
18
+ private processCluster;
19
+ /**
20
+ * 클러스터 유형 분류
21
+ */
22
+ private classifyCluster;
23
+ /**
24
+ * 인사이트 제목 생성
25
+ */
26
+ private buildTitle;
27
+ /**
28
+ * 인사이트 설명 생성
29
+ */
30
+ private buildDescription;
31
+ /**
32
+ * 두 ISO 문자열 사이 일수 계산
33
+ */
34
+ private daysBetween;
35
+ /**
36
+ * confidence 점수 계산 (빈도 + 기간 기반)
37
+ */
38
+ private calculateConfidence;
39
+ /**
40
+ * 태그 생성
41
+ */
42
+ private buildTags;
43
+ }
44
+ //# sourceMappingURL=GuardAnalyzer.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"GuardAnalyzer.d.ts","sourceRoot":"","sources":["../../../../src/infra/lib/evolution/GuardAnalyzer.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,YAAY,EAAgB,MAAM,mBAAmB,CAAC;AAC/D,OAAO,EAA+B,UAAU,EAAE,MAAM,sBAAsB,CAAC;AAE/E,MAAM,WAAW,mBAAmB;IAClC,WAAW,EAAE,MAAM,EAAE,CAAC;IACtB,cAAc,EAAE,MAAM,EAAE,CAAC;IACzB,KAAK,EAAE,UAAU,CAAC;CACnB;AAKD,qBAAa,aAAa;IACxB,OAAO,CAAC,YAAY,CAAe;gBAEvB,YAAY,EAAE,YAAY;IAItC;;OAEG;IACI,OAAO,CAAC,QAAQ,GAAE,MAAU,GAAG,mBAAmB;IAiBzD;;OAEG;IACH,OAAO,CAAC,cAAc;IA2BtB;;OAEG;IACH,OAAO,CAAC,eAAe;IAYvB;;OAEG;IACH,OAAO,CAAC,UAAU;IAKlB;;OAEG;IACH,OAAO,CAAC,gBAAgB;IAWxB;;OAEG;IACH,OAAO,CAAC,WAAW;IAMnB;;OAEG;IACH,OAAO,CAAC,mBAAmB;IAQ3B;;OAEG;IACH,OAAO,CAAC,SAAS;CASlB"}
@@ -0,0 +1,116 @@
1
+ // GuardAnalyzer — Hook trace 패턴 분석 → InsightStore에 인사이트 생성
2
+ // 하네스 자기 개선의 핵심 모듈: guard 실행 로그를 분석하여 하네스 규칙을 자동 튜닝
3
+ import { analyzeTraces } from './HookTraceReader.js';
4
+ const HIGH_FREQUENCY_THRESHOLD = 10;
5
+ const WARN_FREQUENCY_THRESHOLD = 20;
6
+ export class GuardAnalyzer {
7
+ insightStore;
8
+ constructor(insightStore) {
9
+ this.insightStore = insightStore;
10
+ }
11
+ /**
12
+ * 최근 hook trace 분석 → insight 생성
13
+ */
14
+ analyze(daysBack = 7) {
15
+ const stats = analyzeTraces(daysBack);
16
+ const result = {
17
+ newInsights: [],
18
+ mergedInsights: [],
19
+ stats,
20
+ };
21
+ if (stats.clusters.length === 0)
22
+ return result;
23
+ for (const cluster of stats.clusters) {
24
+ this.processCluster(cluster, result);
25
+ }
26
+ return result;
27
+ }
28
+ /**
29
+ * 개별 클러스터를 인사이트로 변환
30
+ */
31
+ processCluster(cluster, result) {
32
+ const title = this.buildTitle(cluster);
33
+ const description = this.buildDescription(cluster);
34
+ // 중복 체크 + 병합
35
+ const existingId = this.insightStore.findAndMergeDuplicate(title, '');
36
+ if (existingId) {
37
+ result.mergedInsights.push(existingId);
38
+ return;
39
+ }
40
+ const input = {
41
+ type: this.classifyCluster(cluster),
42
+ title,
43
+ description,
44
+ confidence: this.calculateConfidence(cluster),
45
+ tags: this.buildTags(cluster),
46
+ generatedFrom: 'agent_stats',
47
+ };
48
+ const id = this.insightStore.save(input);
49
+ result.newInsights.push(id);
50
+ }
51
+ /**
52
+ * 클러스터 유형 분류
53
+ */
54
+ classifyCluster(cluster) {
55
+ // 높은 빈도의 block → 에이전트가 반복적으로 차단되는 패턴
56
+ if (cluster.decision === 'block' && cluster.count >= HIGH_FREQUENCY_THRESHOLD) {
57
+ return 'optimization';
58
+ }
59
+ // warn이 너무 자주 발생 → 노이즈 가능성
60
+ if (cluster.decision === 'warn' && cluster.count >= WARN_FREQUENCY_THRESHOLD) {
61
+ return 'anti_pattern';
62
+ }
63
+ return 'pattern';
64
+ }
65
+ /**
66
+ * 인사이트 제목 생성
67
+ */
68
+ buildTitle(cluster) {
69
+ const action = cluster.decision === 'block' ? 'Blocked' : 'Warned';
70
+ return `Guard ${action}: ${cluster.pattern} (${cluster.count}x)`;
71
+ }
72
+ /**
73
+ * 인사이트 설명 생성
74
+ */
75
+ buildDescription(cluster) {
76
+ const tools = cluster.tools.join(', ');
77
+ const span = this.daysBetween(cluster.firstSeen, cluster.lastSeen);
78
+ return [
79
+ `Hook: ${cluster.hook}`,
80
+ `Decision: ${cluster.decision} (${cluster.count} times over ${span} days)`,
81
+ `Affected tools: ${tools}`,
82
+ `Pattern: ${cluster.pattern}`,
83
+ ].join('; ');
84
+ }
85
+ /**
86
+ * 두 ISO 문자열 사이 일수 계산
87
+ */
88
+ daysBetween(a, b) {
89
+ const msPerDay = 86_400_000;
90
+ const diff = new Date(b).getTime() - new Date(a).getTime();
91
+ return Math.max(1, Math.round(diff / msPerDay));
92
+ }
93
+ /**
94
+ * confidence 점수 계산 (빈도 + 기간 기반)
95
+ */
96
+ calculateConfidence(cluster) {
97
+ const freqScore = Math.min(0.5, cluster.count * 0.05);
98
+ const spanDays = this.daysBetween(cluster.firstSeen, cluster.lastSeen);
99
+ const spanScore = Math.min(0.3, spanDays * 0.05);
100
+ const decisionScore = cluster.decision === 'block' ? 0.2 : 0.1;
101
+ return Math.min(1.0, freqScore + spanScore + decisionScore);
102
+ }
103
+ /**
104
+ * 태그 생성
105
+ */
106
+ buildTags(cluster) {
107
+ return [
108
+ 'guard',
109
+ 'harness',
110
+ cluster.hook,
111
+ cluster.decision,
112
+ ...cluster.tools.map(t => t.toLowerCase()),
113
+ ];
114
+ }
115
+ }
116
+ //# sourceMappingURL=GuardAnalyzer.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"GuardAnalyzer.js","sourceRoot":"","sources":["../../../../src/infra/lib/evolution/GuardAnalyzer.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,45 @@
1
+ export interface HookTrace {
2
+ ts: string;
3
+ hook: string;
4
+ tool: string;
5
+ decision: 'allow' | 'block' | 'warn';
6
+ reason: string;
7
+ project: string;
8
+ }
9
+ export interface TraceCluster {
10
+ /** 대표 사유 패턴 */
11
+ pattern: string;
12
+ /** 훅 이름 */
13
+ hook: string;
14
+ /** 판정 유형 */
15
+ decision: 'block' | 'warn';
16
+ /** 발생 횟수 */
17
+ count: number;
18
+ /** 대상 도구 목록 */
19
+ tools: string[];
20
+ /** 최초 발생 */
21
+ firstSeen: string;
22
+ /** 최종 발생 */
23
+ lastSeen: string;
24
+ }
25
+ export interface TraceStats {
26
+ totalTraces: number;
27
+ blockCount: number;
28
+ warnCount: number;
29
+ byHook: Record<string, number>;
30
+ byTool: Record<string, number>;
31
+ clusters: TraceCluster[];
32
+ }
33
+ /**
34
+ * JSONL 파일에서 최근 N일간 trace 항목 읽기
35
+ */
36
+ export declare function readTraces(daysBack?: number): HookTrace[];
37
+ /**
38
+ * Trace 목록을 패턴별로 클러스터링
39
+ */
40
+ export declare function clusterTraces(traces: HookTrace[]): TraceCluster[];
41
+ /**
42
+ * 전체 통계 + 클러스터 분석 수행
43
+ */
44
+ export declare function analyzeTraces(daysBack?: number): TraceStats;
45
+ //# sourceMappingURL=HookTraceReader.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"HookTraceReader.d.ts","sourceRoot":"","sources":["../../../../src/infra/lib/evolution/HookTraceReader.ts"],"names":[],"mappings":"AAOA,MAAM,WAAW,SAAS;IACxB,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE,OAAO,GAAG,OAAO,GAAG,MAAM,CAAC;IACrC,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,EAAE,MAAM,CAAC;CACjB;AAED,MAAM,WAAW,YAAY;IAC3B,eAAe;IACf,OAAO,EAAE,MAAM,CAAC;IAChB,WAAW;IACX,IAAI,EAAE,MAAM,CAAC;IACb,YAAY;IACZ,QAAQ,EAAE,OAAO,GAAG,MAAM,CAAC;IAC3B,YAAY;IACZ,KAAK,EAAE,MAAM,CAAC;IACd,eAAe;IACf,KAAK,EAAE,MAAM,EAAE,CAAC;IAChB,YAAY;IACZ,SAAS,EAAE,MAAM,CAAC;IAClB,YAAY;IACZ,QAAQ,EAAE,MAAM,CAAC;CAClB;AAED,MAAM,WAAW,UAAU;IACzB,WAAW,EAAE,MAAM,CAAC;IACpB,UAAU,EAAE,MAAM,CAAC;IACnB,SAAS,EAAE,MAAM,CAAC;IAClB,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAC/B,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAC/B,QAAQ,EAAE,YAAY,EAAE,CAAC;CAC1B;AAaD;;GAEG;AACH,wBAAgB,UAAU,CAAC,QAAQ,GAAE,MAAU,GAAG,SAAS,EAAE,CAwB5D;AAaD;;GAEG;AACH,wBAAgB,aAAa,CAAC,MAAM,EAAE,SAAS,EAAE,GAAG,YAAY,EAAE,CA8BjE;AAED;;GAEG;AACH,wBAAgB,aAAa,CAAC,QAAQ,GAAE,MAAU,GAAG,UAAU,CAsB9D"}
@@ -0,0 +1,108 @@
1
+ // HookTraceReader — JSONL hook trace 파일 읽기 및 집계
2
+ // Guard hooks가 ~/.vibe/hook-traces.jsonl에 기록한 로그를 읽고 분석
3
+ import { readFileSync, existsSync } from 'fs';
4
+ import path from 'path';
5
+ import os from 'os';
6
+ const TRACE_FILENAME = 'hook-traces.jsonl';
7
+ const MIN_CLUSTER_SIZE = 3;
8
+ /**
9
+ * hook-traces.jsonl 파일 경로 반환
10
+ */
11
+ function getTracePath() {
12
+ const home = os.homedir();
13
+ return path.join(home, '.vibe', TRACE_FILENAME);
14
+ }
15
+ /**
16
+ * JSONL 파일에서 최근 N일간 trace 항목 읽기
17
+ */
18
+ export function readTraces(daysBack = 7) {
19
+ const tracePath = getTracePath();
20
+ if (!existsSync(tracePath))
21
+ return [];
22
+ const cutoff = new Date();
23
+ cutoff.setDate(cutoff.getDate() - daysBack);
24
+ const cutoffIso = cutoff.toISOString();
25
+ const raw = readFileSync(tracePath, 'utf-8');
26
+ const traces = [];
27
+ for (const line of raw.split('\n')) {
28
+ if (!line.trim())
29
+ continue;
30
+ try {
31
+ const entry = JSON.parse(line);
32
+ if (entry.ts >= cutoffIso) {
33
+ traces.push(entry);
34
+ }
35
+ }
36
+ catch {
37
+ // 깨진 줄 무시
38
+ }
39
+ }
40
+ return traces;
41
+ }
42
+ /**
43
+ * 사유 문자열을 정규화 (파일 경로, 명령어 세부 사항 제거)
44
+ */
45
+ function normalizeReason(reason) {
46
+ return reason
47
+ .replace(/\/[\w/._-]+/g, '<path>')
48
+ .replace(/`[^`]+`/g, '<cmd>')
49
+ .replace(/:\s+.*$/, '')
50
+ .trim();
51
+ }
52
+ /**
53
+ * Trace 목록을 패턴별로 클러스터링
54
+ */
55
+ export function clusterTraces(traces) {
56
+ const actionable = traces.filter(t => t.decision !== 'allow');
57
+ const groups = new Map();
58
+ for (const trace of actionable) {
59
+ const key = `${trace.hook}:${normalizeReason(trace.reason)}`;
60
+ const group = groups.get(key) ?? [];
61
+ group.push(trace);
62
+ groups.set(key, group);
63
+ }
64
+ const clusters = [];
65
+ for (const [, group] of groups) {
66
+ if (group.length < MIN_CLUSTER_SIZE)
67
+ continue;
68
+ const sorted = group.sort((a, b) => a.ts.localeCompare(b.ts));
69
+ const tools = [...new Set(group.map(t => t.tool))];
70
+ clusters.push({
71
+ pattern: normalizeReason(group[0].reason),
72
+ hook: group[0].hook,
73
+ decision: group[0].decision,
74
+ count: group.length,
75
+ tools,
76
+ firstSeen: sorted[0].ts,
77
+ lastSeen: sorted[sorted.length - 1].ts,
78
+ });
79
+ }
80
+ return clusters.sort((a, b) => b.count - a.count);
81
+ }
82
+ /**
83
+ * 전체 통계 + 클러스터 분석 수행
84
+ */
85
+ export function analyzeTraces(daysBack = 7) {
86
+ const traces = readTraces(daysBack);
87
+ const byHook = {};
88
+ const byTool = {};
89
+ let blockCount = 0;
90
+ let warnCount = 0;
91
+ for (const t of traces) {
92
+ byHook[t.hook] = (byHook[t.hook] ?? 0) + 1;
93
+ byTool[t.tool] = (byTool[t.tool] ?? 0) + 1;
94
+ if (t.decision === 'block')
95
+ blockCount++;
96
+ if (t.decision === 'warn')
97
+ warnCount++;
98
+ }
99
+ return {
100
+ totalTraces: traces.length,
101
+ blockCount,
102
+ warnCount,
103
+ byHook,
104
+ byTool,
105
+ clusters: clusterTraces(traces),
106
+ };
107
+ }
108
+ //# sourceMappingURL=HookTraceReader.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"HookTraceReader.js","sourceRoot":"","sources":["../../../../src/infra/lib/evolution/HookTraceReader.ts"],"names":[],"mappings":"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"}
@@ -32,4 +32,8 @@ export { DeprecationDetector } from './DeprecationDetector.js';
32
32
  export type { DeprecationCandidate, DeprecationReport } from './DeprecationDetector.js';
33
33
  export { ParityTester, PARITY_THRESHOLDS } from './ParityTester.js';
34
34
  export type { ParityTestResult, ModelVersion, EvalComparison } from './ParityTester.js';
35
+ export { readTraces, clusterTraces, analyzeTraces } from './HookTraceReader.js';
36
+ export type { HookTrace, TraceCluster, TraceStats } from './HookTraceReader.js';
37
+ export { GuardAnalyzer } from './GuardAnalyzer.js';
38
+ export type { GuardAnalysisResult } from './GuardAnalyzer.js';
35
39
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/infra/lib/evolution/index.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,eAAe,EAAE,MAAM,8BAA8B,CAAC;AAC/D,YAAY,EAAE,UAAU,EAAE,eAAe,EAAE,cAAc,EAAE,iBAAiB,EAAE,MAAM,8BAA8B,CAAC;AAGnH,OAAO,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AACjD,YAAY,EAAE,OAAO,EAAE,YAAY,EAAE,WAAW,EAAE,aAAa,EAAE,MAAM,mBAAmB,CAAC;AAC3F,OAAO,EAAE,gBAAgB,EAAE,MAAM,uBAAuB,CAAC;AACzD,OAAO,EAAE,gBAAgB,EAAE,MAAM,uBAAuB,CAAC;AACzD,OAAO,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AAGnD,OAAO,EAAE,kBAAkB,EAAE,MAAM,yBAAyB,CAAC;AAC7D,YAAY,EAAE,UAAU,EAAE,eAAe,EAAE,cAAc,EAAE,gBAAgB,EAAE,MAAM,yBAAyB,CAAC;AAC7G,OAAO,EAAE,cAAc,EAAE,MAAM,gCAAgC,CAAC;AAChE,OAAO,EAAE,cAAc,EAAE,MAAM,gCAAgC,CAAC;AAChE,OAAO,EAAE,aAAa,EAAE,MAAM,+BAA+B,CAAC;AAC9D,OAAO,EAAE,wBAAwB,EAAE,MAAM,+BAA+B,CAAC;AACzE,YAAY,EAAE,eAAe,EAAE,MAAM,+BAA+B,CAAC;AACrE,OAAO,EAAE,qBAAqB,EAAE,MAAM,4BAA4B,CAAC;AACnE,YAAY,EAAE,mBAAmB,EAAE,MAAM,4BAA4B,CAAC;AAGtE,OAAO,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AACjD,YAAY,EAAE,UAAU,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AAClE,OAAO,EAAE,gBAAgB,EAAE,MAAM,uBAAuB,CAAC;AACzD,OAAO,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAC;AACvD,OAAO,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC;AACrD,YAAY,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AAGxD,OAAO,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAC;AACvD,YAAY,EACV,aAAa,EAAE,aAAa,EAAE,aAAa,EAAE,cAAc,EAC3D,UAAU,EAAE,YAAY,GACzB,MAAM,sBAAsB,CAAC;AAC9B,OAAO,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC;AACrD,YAAY,EACV,eAAe,EAAE,gBAAgB,EAAE,YAAY,EAAE,UAAU,EAAE,aAAa,GAC3E,MAAM,qBAAqB,CAAC;AAC7B,OAAO,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAC;AACvD,YAAY,EAAE,aAAa,EAAE,oBAAoB,EAAE,MAAM,sBAAsB,CAAC;AAChF,OAAO,EAAE,oBAAoB,EAAE,MAAM,2BAA2B,CAAC;AACjE,YAAY,EACV,gBAAgB,EAAE,iBAAiB,EAAE,oBAAoB,EAAE,eAAe,GAC3E,MAAM,2BAA2B,CAAC;AACnC,OAAO,EAAE,mBAAmB,EAAE,MAAM,0BAA0B,CAAC;AAC/D,YAAY,EAAE,oBAAoB,EAAE,iBAAiB,EAAE,MAAM,0BAA0B,CAAC;AAGxF,OAAO,EAAE,YAAY,EAAE,iBAAiB,EAAE,MAAM,mBAAmB,CAAC;AACpE,YAAY,EAAE,gBAAgB,EAAE,YAAY,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/infra/lib/evolution/index.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,eAAe,EAAE,MAAM,8BAA8B,CAAC;AAC/D,YAAY,EAAE,UAAU,EAAE,eAAe,EAAE,cAAc,EAAE,iBAAiB,EAAE,MAAM,8BAA8B,CAAC;AAGnH,OAAO,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AACjD,YAAY,EAAE,OAAO,EAAE,YAAY,EAAE,WAAW,EAAE,aAAa,EAAE,MAAM,mBAAmB,CAAC;AAC3F,OAAO,EAAE,gBAAgB,EAAE,MAAM,uBAAuB,CAAC;AACzD,OAAO,EAAE,gBAAgB,EAAE,MAAM,uBAAuB,CAAC;AACzD,OAAO,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AAGnD,OAAO,EAAE,kBAAkB,EAAE,MAAM,yBAAyB,CAAC;AAC7D,YAAY,EAAE,UAAU,EAAE,eAAe,EAAE,cAAc,EAAE,gBAAgB,EAAE,MAAM,yBAAyB,CAAC;AAC7G,OAAO,EAAE,cAAc,EAAE,MAAM,gCAAgC,CAAC;AAChE,OAAO,EAAE,cAAc,EAAE,MAAM,gCAAgC,CAAC;AAChE,OAAO,EAAE,aAAa,EAAE,MAAM,+BAA+B,CAAC;AAC9D,OAAO,EAAE,wBAAwB,EAAE,MAAM,+BAA+B,CAAC;AACzE,YAAY,EAAE,eAAe,EAAE,MAAM,+BAA+B,CAAC;AACrE,OAAO,EAAE,qBAAqB,EAAE,MAAM,4BAA4B,CAAC;AACnE,YAAY,EAAE,mBAAmB,EAAE,MAAM,4BAA4B,CAAC;AAGtE,OAAO,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AACjD,YAAY,EAAE,UAAU,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AAClE,OAAO,EAAE,gBAAgB,EAAE,MAAM,uBAAuB,CAAC;AACzD,OAAO,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAC;AACvD,OAAO,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC;AACrD,YAAY,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AAGxD,OAAO,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAC;AACvD,YAAY,EACV,aAAa,EAAE,aAAa,EAAE,aAAa,EAAE,cAAc,EAC3D,UAAU,EAAE,YAAY,GACzB,MAAM,sBAAsB,CAAC;AAC9B,OAAO,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC;AACrD,YAAY,EACV,eAAe,EAAE,gBAAgB,EAAE,YAAY,EAAE,UAAU,EAAE,aAAa,GAC3E,MAAM,qBAAqB,CAAC;AAC7B,OAAO,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAC;AACvD,YAAY,EAAE,aAAa,EAAE,oBAAoB,EAAE,MAAM,sBAAsB,CAAC;AAChF,OAAO,EAAE,oBAAoB,EAAE,MAAM,2BAA2B,CAAC;AACjE,YAAY,EACV,gBAAgB,EAAE,iBAAiB,EAAE,oBAAoB,EAAE,eAAe,GAC3E,MAAM,2BAA2B,CAAC;AACnC,OAAO,EAAE,mBAAmB,EAAE,MAAM,0BAA0B,CAAC;AAC/D,YAAY,EAAE,oBAAoB,EAAE,iBAAiB,EAAE,MAAM,0BAA0B,CAAC;AAGxF,OAAO,EAAE,YAAY,EAAE,iBAAiB,EAAE,MAAM,mBAAmB,CAAC;AACpE,YAAY,EAAE,gBAAgB,EAAE,YAAY,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAC;AAGxF,OAAO,EAAE,UAAU,EAAE,aAAa,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AAChF,YAAY,EAAE,SAAS,EAAE,YAAY,EAAE,UAAU,EAAE,MAAM,sBAAsB,CAAC;AAChF,OAAO,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AACnD,YAAY,EAAE,mBAAmB,EAAE,MAAM,oBAAoB,CAAC"}
@@ -26,4 +26,7 @@ export { DescriptionOptimizer } from './DescriptionOptimizer.js';
26
26
  export { DeprecationDetector } from './DeprecationDetector.js';
27
27
  // Phase 5b: Model Parity Testing
28
28
  export { ParityTester, PARITY_THRESHOLDS } from './ParityTester.js';
29
+ // Phase 6: Harness Self-Improvement (Hook Trace Analysis)
30
+ export { readTraces, clusterTraces, analyzeTraces } from './HookTraceReader.js';
31
+ export { GuardAnalyzer } from './GuardAnalyzer.js';
29
32
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/infra/lib/evolution/index.ts"],"names":[],"mappings":"AAAA,8BAA8B;AAE9B,2BAA2B;AAC3B,OAAO,EAAE,eAAe,EAAE,MAAM,8BAA8B,CAAC;AAG/D,8BAA8B;AAC9B,OAAO,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AAEjD,OAAO,EAAE,gBAAgB,EAAE,MAAM,uBAAuB,CAAC;AACzD,OAAO,EAAE,gBAAgB,EAAE,MAAM,uBAAuB,CAAC;AACzD,OAAO,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AAEnD,2BAA2B;AAC3B,OAAO,EAAE,kBAAkB,EAAE,MAAM,yBAAyB,CAAC;AAE7D,OAAO,EAAE,cAAc,EAAE,MAAM,gCAAgC,CAAC;AAChE,OAAO,EAAE,cAAc,EAAE,MAAM,gCAAgC,CAAC;AAChE,OAAO,EAAE,aAAa,EAAE,MAAM,+BAA+B,CAAC;AAC9D,OAAO,EAAE,wBAAwB,EAAE,MAAM,+BAA+B,CAAC;AAEzE,OAAO,EAAE,qBAAqB,EAAE,MAAM,4BAA4B,CAAC;AAGnE,kCAAkC;AAClC,OAAO,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AAEjD,OAAO,EAAE,gBAAgB,EAAE,MAAM,uBAAuB,CAAC;AACzD,OAAO,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAC;AACvD,OAAO,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC;AAGrD,sCAAsC;AACtC,OAAO,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAC;AAKvD,OAAO,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC;AAIrD,OAAO,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAC;AAEvD,OAAO,EAAE,oBAAoB,EAAE,MAAM,2BAA2B,CAAC;AAIjE,OAAO,EAAE,mBAAmB,EAAE,MAAM,0BAA0B,CAAC;AAG/D,iCAAiC;AACjC,OAAO,EAAE,YAAY,EAAE,iBAAiB,EAAE,MAAM,mBAAmB,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/infra/lib/evolution/index.ts"],"names":[],"mappings":"AAAA,8BAA8B;AAE9B,2BAA2B;AAC3B,OAAO,EAAE,eAAe,EAAE,MAAM,8BAA8B,CAAC;AAG/D,8BAA8B;AAC9B,OAAO,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AAEjD,OAAO,EAAE,gBAAgB,EAAE,MAAM,uBAAuB,CAAC;AACzD,OAAO,EAAE,gBAAgB,EAAE,MAAM,uBAAuB,CAAC;AACzD,OAAO,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AAEnD,2BAA2B;AAC3B,OAAO,EAAE,kBAAkB,EAAE,MAAM,yBAAyB,CAAC;AAE7D,OAAO,EAAE,cAAc,EAAE,MAAM,gCAAgC,CAAC;AAChE,OAAO,EAAE,cAAc,EAAE,MAAM,gCAAgC,CAAC;AAChE,OAAO,EAAE,aAAa,EAAE,MAAM,+BAA+B,CAAC;AAC9D,OAAO,EAAE,wBAAwB,EAAE,MAAM,+BAA+B,CAAC;AAEzE,OAAO,EAAE,qBAAqB,EAAE,MAAM,4BAA4B,CAAC;AAGnE,kCAAkC;AAClC,OAAO,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AAEjD,OAAO,EAAE,gBAAgB,EAAE,MAAM,uBAAuB,CAAC;AACzD,OAAO,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAC;AACvD,OAAO,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC;AAGrD,sCAAsC;AACtC,OAAO,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAC;AAKvD,OAAO,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC;AAIrD,OAAO,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAC;AAEvD,OAAO,EAAE,oBAAoB,EAAE,MAAM,2BAA2B,CAAC;AAIjE,OAAO,EAAE,mBAAmB,EAAE,MAAM,0BAA0B,CAAC;AAG/D,iCAAiC;AACjC,OAAO,EAAE,YAAY,EAAE,iBAAiB,EAAE,MAAM,mBAAmB,CAAC;AAGpE,0DAA0D;AAC1D,OAAO,EAAE,UAAU,EAAE,aAAa,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AAEhF,OAAO,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC"}
@@ -39,7 +39,29 @@ async function main() {
39
39
  const extractor = new extractorMod.InsightExtractor(storage);
40
40
  const extractResult = extractor.extractFromRecent(20);
41
41
 
42
- if (extractResult.newInsights.length === 0 && extractResult.mergedInsights.length === 0) {
42
+ // Phase 2b: Guard trace 분석 (하네스 자기 개선)
43
+ let guardInsightCount = 0;
44
+ try {
45
+ const guardMod = await import(`${LIB_BASE}evolution/GuardAnalyzer.js`);
46
+ const insightMod = await import(`${LIB_BASE}evolution/InsightStore.js`);
47
+ const insightStore = new insightMod.InsightStore(storage);
48
+ const guardAnalyzer = new guardMod.GuardAnalyzer(insightStore);
49
+ const guardResult = guardAnalyzer.analyze(7);
50
+ guardInsightCount = guardResult.newInsights.length;
51
+ if (guardInsightCount > 0) {
52
+ process.stderr.write(
53
+ `[Evolution] Guard analysis: ${guardInsightCount} new insights from hook traces\n`
54
+ );
55
+ }
56
+ } catch (e) {
57
+ process.stderr.write(`[Evolution] Guard analysis skipped: ${e.message}\n`);
58
+ }
59
+
60
+ if (
61
+ extractResult.newInsights.length === 0 &&
62
+ extractResult.mergedInsights.length === 0 &&
63
+ guardInsightCount === 0
64
+ ) {
43
65
  storage.close();
44
66
  return;
45
67
  }
@@ -139,6 +139,8 @@ const toolInput = stdinPayload?.tool_input
139
139
  : JSON.stringify(stdinPayload.tool_input))
140
140
  : (process.argv[3] || process.env.TOOL_INPUT || '');
141
141
 
142
+ import { logHookDecision } from './utils.js';
143
+
142
144
  const validation = validateCommand(toolName, toolInput);
143
145
  const output = formatOutput(toolName, validation);
144
146
 
@@ -146,5 +148,12 @@ if (output) {
146
148
  console.log(output);
147
149
  }
148
150
 
151
+ // Hook trace logging
152
+ if (!validation.allowed) {
153
+ logHookDecision('pre-tool-guard', toolName, 'block', validation.warnings.join('; '));
154
+ } else if (validation.warnings.length > 0) {
155
+ logHookDecision('pre-tool-guard', toolName, 'warn', validation.warnings.join('; '));
156
+ }
157
+
149
158
  // Exit code: 0 = allowed, 2 = denied (claw-code 규약), 1 = 레거시 호환
150
159
  process.exit(validation.allowed ? 0 : 2);
@@ -118,9 +118,12 @@ const toolInput = stdinPayload?.tool_input
118
118
  : JSON.stringify(stdinPayload.tool_input))
119
119
  : (process.argv[3] || process.env.TOOL_INPUT || '');
120
120
 
121
+ import { logHookDecision } from './utils.js';
122
+
121
123
  const result = guard(toolName, toolInput);
122
124
 
123
125
  if (result) {
126
+ logHookDecision('sentinel-guard', toolName, 'block', result.reason);
124
127
  console.log(JSON.stringify(result));
125
128
  process.exit(2); // deny 규약
126
129
  }
@@ -146,3 +146,41 @@ export function getToolsBaseUrl() {
146
146
  export function getLibBaseUrl() {
147
147
  return getPackageUrl(path.join('dist', 'infra', 'lib'), 'gpt-api.js');
148
148
  }
149
+
150
+ // ─── Hook Trace Logging ───
151
+
152
+ const HOOK_TRACE_PATH = path.join(VIBE_HOME_DIR, 'hook-traces.jsonl');
153
+ const MAX_TRACE_SIZE_BYTES = 5 * 1024 * 1024; // 5MB rotation
154
+
155
+ /**
156
+ * Guard/Hook 결정 사항을 JSONL로 로깅
157
+ * evolution GuardAnalyzer가 이 로그를 분석해 하네스 자기 개선에 활용
158
+ *
159
+ * @param {string} hookName - 훅 이름 (e.g., 'sentinel-guard', 'pre-tool-guard')
160
+ * @param {string} toolName - 대상 도구 (e.g., 'Bash', 'Write')
161
+ * @param {'allow'|'block'|'warn'} decision - 판정 결과
162
+ * @param {string} reason - 판정 사유
163
+ */
164
+ export function logHookDecision(hookName, toolName, decision, reason) {
165
+ try {
166
+ // 로그 로테이션: 5MB 초과 시 이전 파일 교체
167
+ if (fs.existsSync(HOOK_TRACE_PATH)) {
168
+ const stat = fs.statSync(HOOK_TRACE_PATH);
169
+ if (stat.size > MAX_TRACE_SIZE_BYTES) {
170
+ const rotated = HOOK_TRACE_PATH + '.prev';
171
+ try { fs.unlinkSync(rotated); } catch { /* ignore */ }
172
+ fs.renameSync(HOOK_TRACE_PATH, rotated);
173
+ }
174
+ }
175
+
176
+ const entry = JSON.stringify({
177
+ ts: new Date().toISOString(),
178
+ hook: hookName,
179
+ tool: toolName,
180
+ decision,
181
+ reason,
182
+ project: PROJECT_DIR,
183
+ });
184
+ fs.appendFileSync(HOOK_TRACE_PATH, entry + '\n');
185
+ } catch { /* 트레이스 실패가 훅 실행을 방해해선 안 됨 */ }
186
+ }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@su-record/vibe",
3
- "version": "2.8.42",
3
+ "version": "2.8.45",
4
4
  "description": "AI Coding Framework for Claude Code — 56 agents, 45 skills, multi-LLM orchestration",
5
5
  "type": "module",
6
6
  "main": "dist/cli/index.js",
@@ -0,0 +1,115 @@
1
+ ---
2
+ name: chub-usage
3
+ tier: optional
4
+ description: "Context Hub (chub) — 검수된 최신 API 문서 조회. 외부 API/SDK 코드 작성 시 training data 대신 최신 문서를 기반으로 정확한 코드 작성."
5
+ triggers: [chub, context hub, API docs, latest API, deprecated API, SDK documentation, api reference, 최신 문서]
6
+ priority: 65
7
+ ---
8
+
9
+ # Context Hub (chub) Usage
10
+
11
+ 외부 API/SDK 코드 작성 전 검수된 최신 문서를 가져오는 스킬.
12
+ Training data의 지식 컷오프 문제를 해결합니다.
13
+
14
+ ## Why?
15
+
16
+ | Problem | Solution |
17
+ |---------|----------|
18
+ | Training data에 의존 → deprecated API 사용 | chub get → 검수된 최신 문서 기반 코드 |
19
+ | 웹 검색 → 노이즈 섞인 결과 | chub search → 큐레이션된 문서만 |
20
+ | 세션마다 같은 실수 반복 | chub annotate → 학습 누적 |
21
+
22
+ ## Prerequisites
23
+
24
+ ```bash
25
+ npm install -g @aisuite/chub
26
+ ```
27
+
28
+ ## When to Use
29
+
30
+ | Situation | Example |
31
+ |-----------|---------|
32
+ | 외부 API 코드 작성 | "Stripe 결제 연동해줘" |
33
+ | SDK 최신 버전 확인 | "OpenAI 최신 모델 호출" |
34
+ | 공식 문서 필요 | "Supabase auth 설정" |
35
+ | Deprecated 패턴 방지 | "Firebase v10 마이그레이션" |
36
+
37
+ ## Workflow
38
+
39
+ ```
40
+ 외부 API/SDK 코드 작성 요청
41
+
42
+ Step 1: chub search "<라이브러리명>"
43
+
44
+ Step 2: chub get <id> --lang ts
45
+
46
+ Step 3: 문서 기반 코드 작성
47
+
48
+ Step 4: gotcha 발견 시 chub annotate
49
+ ```
50
+
51
+ ## Usage
52
+
53
+ ### Step 1 — 문서 검색
54
+
55
+ ```bash
56
+ chub search "stripe"
57
+ chub search "openai"
58
+ chub search "" # 전체 목록 확인
59
+ ```
60
+
61
+ ### Step 2 — 최신 문서 fetch
62
+
63
+ ```bash
64
+ chub get stripe/api --lang ts
65
+ chub get openai/chat --lang py
66
+ chub get supabase/auth --lang js
67
+ ```
68
+
69
+ ### Step 3 — 문서 기반 코드 작성
70
+
71
+ fetch한 문서 내용을 기반으로 정확한 코드 작성.
72
+ **절대 training data에 의존하지 않는다. 문서 먼저, 코드 나중.**
73
+
74
+ ### Step 4 — 학습 내용 기록
75
+
76
+ 작업 중 발견한 gotcha, workaround, 버전 이슈:
77
+
78
+ ```bash
79
+ chub annotate stripe/api "한국 결제는 pg 파라미터 필수"
80
+ chub annotate openai/chat "streaming에서 tool_calls는 delta로 옴"
81
+ chub annotate firebase/auth "v10에서 getAuth() import 경로 변경"
82
+ ```
83
+
84
+ Annotation은 로컬 저장, 다음 세션에서 `chub get` 시 자동으로 같이 나옴.
85
+
86
+ ## Implementation Pattern (Subagent)
87
+
88
+ 컨텍스트 블로트 방지를 위해 서브에이전트에서 실행:
89
+
90
+ ```
91
+ Task tool call:
92
+ - subagent_type: Explore
93
+ - model: haiku
94
+ - prompt: "Run `chub search <library>` then `chub get <id> --lang <lang>` to fetch latest API documentation for [topic]. Return only the relevant API usage examples, key changes from previous versions, and any annotations."
95
+ ```
96
+
97
+ 서브에이전트가 chub 호출을 처리하고 요약만 반환 → 메인 컨텍스트 깨끗하게 유지.
98
+
99
+ ## Supported APIs (1,000+)
100
+
101
+ OpenAI, Anthropic, Stripe, Firebase, Supabase, Vercel, AWS S3, Cloudflare Workers, Auth0, Clerk 등.
102
+
103
+ ```bash
104
+ chub search # 인자 없이 실행하면 전체 목록 확인 가능
105
+ ```
106
+
107
+ ## Fallback Chain
108
+
109
+ ```
110
+ chub 설치 안 됨
111
+
112
+ Prompt: npm install -g @aisuite/chub
113
+
114
+ If still unavailable: context7 또는 Web Search fallback
115
+ ```
@@ -42,7 +42,7 @@ Figma 트리가 코드의 원천이다. 스크린샷은 검증용이다.
42
42
  PC Design: https://figma.com/...?node-id=yyy (있으면)
43
43
 
44
44
  → Phase 0: Setup (스택 감지, 디렉토리 생성, 기존 자산 인덱싱)
45
- → Phase 1: Storyboard (스토리보드 → 기능 스펙 문서 작성, 파일 생성 없음)
45
+ → Phase 1: 디자인 리소스 (URL 입력 → 스토리보드 분석 → 기능 스펙 문서)
46
46
  → Phase 2: 재료 확보 (모든 BP의 트리 + 노드 렌더링 이미지 + 스크린샷)
47
47
  → Phase 3: 리매핑 (tree.json → remapped.json, BP 간 노드 매칭 + CSS diff)
48
48
  → Phase 4: 순차 코드 생성 (remapped.json → 섹션별 HTML+SCSS)
@@ -196,18 +196,44 @@ Figma 트리가 코드의 원천이다. 스크린샷은 검증용이다.
196
196
 
197
197
  ---
198
198
 
199
- ## Phase 1: Storyboard
199
+ ## Phase 1: 디자인 리소스
200
200
 
201
201
  사용자에게 질문한다:
202
- - question: "스토리보드 Figma URL을 입력해주세요. (없으면 '없음')"
202
+ - question: "스토리보드, 디자인 리소스를 줄바꿈으로 입력해주세요. (순서 무관)"
203
+ - 예시:
204
+ https://figma.com/design/xxx/...?node-id=20-4964
205
+ https://figma.com/design/yyy/...?node-id=641-78147
206
+ https://figma.com/design/yyy/...?node-id=641-78200
207
+ 또는:
208
+ docs/storyboard.pdf
209
+ https://figma.com/design/yyy/...?node-id=641-78147
203
210
  - options 제공 금지 — 자유 텍스트 입력만 허용
211
+ - 디자인 URL 최소 1개 필수
204
212
 
205
- "없음" 응답 → 스토리보드 분석 스킵
213
+ ### 입력 분류 (자동)
214
+
215
+ ```
216
+ 각 줄을 파싱하여 분류:
217
+
218
+ 1. figma.com URL → Figma 리소스
219
+ → ROOT name으로 스토리보드/MO/PC 판별
220
+ → fileKey가 다르면 스토리보드 vs 디자인 구분
221
+ → ROOT name에 "MO" → 모바일, "PC" → 데스크탑
222
+
223
+ 2. .pdf 파일 경로 → PDF 스토리보드
224
+ → Read 도구로 페이지별 분석
225
+
226
+ 3. .png/.jpg/.webp 파일 경로 → 이미지 스토리보드
227
+ → Read 도구로 시각 분석
228
+ ```
206
229
 
207
230
  ### 1-1. 스토리보드 분석
208
231
 
209
232
  ```
210
- URL에서 fileKey, nodeId 추출
233
+ 입력 타입에 따라 분기:
234
+
235
+ ■ Figma URL인 경우:
236
+ URL에서 fileKey, nodeId 추출
211
237
 
212
238
  1단계 (BLOCKING): 루트 depth=2로 전체 프레임 + nodeId 수집
213
239
  # [FIGMA_SCRIPT] = ~/.vibe/hooks/scripts/figma-extract.js
@@ -229,9 +255,22 @@ URL에서 fileKey, nodeId 추출
229
255
  하위 케이스(3.1.1, 3.2.1 등)는 건너뜀
230
256
  4순위: SHARED (공통 요소, Popup) — 필요 시
231
257
 
232
- 높이 1500px 이상 프레임:
233
- node "[FIGMA_SCRIPT]" screenshot으로 시각 파악
234
- 또는 depth 높여서 하위 분할 조회
258
+ PDF 파일인 경우:
259
+ Read 도구로 페이지별 분석 (pages: "1-5" "6-10" → ...)
260
+ 페이지에서 추출:
261
+ - 섹션 목록 + 기능 정의
262
+ - 해상도/브레이크포인트 정보 (CONFIG)
263
+ - 인터랙션 흐름
264
+ - 상태 정의
265
+ → Figma 스토리보드와 동일한 기능 스펙 문서 생성
266
+
267
+ ■ 이미지 파일인 경우:
268
+ Read 도구로 시각 분석
269
+ → 와이어프레임/목업에서 섹션 구조 + 기능 추출
270
+
271
+ ■ 스토리보드 없음:
272
+ 디자인 URL의 tree.json에서 섹션 목록만 추출
273
+ → 기능 정의는 디자인 name/구조에서 추정 (정확도 낮음)
235
274
  ```
236
275
 
237
276
  ### 1-2. 기능 스펙 문서 작성 (파일 생성 없음)
@@ -353,8 +392,8 @@ URL에서 fileKey, nodeId 추출
353
392
  부분 실패 처리:
354
393
  - 개별 URL 추출 실패 시 해당 frame만 건너뛰고 나머지 진행
355
394
  - 실패한 frame은 사용자에게 즉시 보고: "frame-{N} 추출 실패: {에러 사유}" (API 에러, 권한 부족, 잘못된 nodeId 등)
356
- - 성공한 frame ≥ 2: Phase 2.5 계속 진행
357
- - 정확히 1개만 성공: 단일 프레임 모드로 폴백 (Phase 2.5 스킵)
395
+ - 성공한 frame ≥ 2: Phase 3 계속 진행
396
+ - 정확히 1개만 성공: 단일 프레임 모드로 폴백 (Phase 3 스킵)
358
397
  - 0개 성공: 전체 실패 보고
359
398
 
360
399
  결과:
@@ -368,10 +407,10 @@ URL에서 fileKey, nodeId 추출
368
407
  │ └── ...
369
408
  ├── frame-3/ ← 서브 페이지 2
370
409
  │ └── ...
371
- └── shared/ 공통 분석 결과 (Phase 2.5에서 생성)
410
+ └── sections/ Phase 6 검증용 스크린샷
372
411
  ```
373
412
 
374
- ### 2-2. 재료함 정리
413
+ ### 2-2. 추출 데이터 정리
375
414
 
376
415
  ```
377
416
  Phase 2 완료 시 /tmp/{feature}/ 에 다음이 준비되어야 함:
@@ -468,9 +507,8 @@ UI 요소 → vw 비례:
468
507
 
469
508
  ## Phase 4: 순차 코드 생성
470
509
 
471
- **Phase 1에서 만든 컴포넌트에 Phase 2의 재료로 디자인을 입힌다.**
472
- **스크린샷을 보면서 퍼즐을 맞추듯 조립한다.**
473
- **첫 섹션(Hero) 단독 완료 후 나머지 섹션 병렬 진행.**
510
+ **remapped.json 기반으로 섹션별 순차 코드 생성.**
511
+ **한 섹션 완료 브라우저 확인 → 다음 섹션. 병렬 금지.**
474
512
 
475
513
  **멀티 프레임 모드 시 조립 순서 변경:**
476
514
  ```
@@ -505,13 +543,13 @@ UI 요소 → vw 비례:
505
543
  ```
506
544
  Phase 1에서 생성한 빈 SCSS 파일에 기본 내용 Write:
507
545
  styles/{feature}/index.scss ← @import 진입점
508
- styles/{feature}/_tokens.scss ← 재료함에서 추출한 디자인 토큰
546
+ styles/{feature}/_tokens.scss ← tree.json에서 추출한 디자인 토큰
509
547
  styles/{feature}/_mixins.scss ← breakpoint mixin
510
548
  styles/{feature}/_base.scss ← 루트 클래스
511
549
 
512
550
  토큰 매핑 (기존 토큰 우선 사용):
513
551
  1. /tmp/{feature}/project-tokens.json 을 Read로 로드
514
- 2. Figma 재료함의 각 값에 대해 project-tokens에서 동일 값 검색:
552
+ 2. Figma tree.json의 각 값에 대해 project-tokens에서 동일 값 검색:
515
553
  - 색상: hex 정규화 후 완전 일치 (Figma RGBA 0-1 → hex, 3자리→6자리, 대소문자 무시)
516
554
  ※ alpha < 1: 8자리 hex (#RRGGBBAA) 또는 rgba() 함수로 변환
517
555
  - 간격: px 값 완전 일치 (rem→px: 1rem=16px)
@@ -690,7 +728,7 @@ URL 있으면:
690
728
 
691
729
  ## Phase 5: 컴파일 게이트
692
730
 
693
- **Phase 3 퍼즐 조립 완료 후, 브라우저 검증 전에 컴파일 성공을 보장한다.**
731
+ **Phase 3 코드 생성 완료 후, 브라우저 검증 전에 컴파일 성공을 보장한다.**
694
732
  **컴파일 에러는 스킵 불가 — 반드시 수정 또는 사용자 보고.**
695
733
  **Phase 5 실패 시 Phase 4 진행 불가 (hard gate).**
696
734
 
@@ -860,7 +898,7 @@ import { getComputedStyles, compareStyles, diffsToIssues } from 'src/infra/lib/b
860
898
  'background-color', 'border-radius', 'gap',
861
899
  ])
862
900
 
863
- 2. Figma 재료함의 기대값과 비교:
901
+ 2. Figma tree.json의 기대값과 비교:
864
902
  // tree.json에서 해당 노드의 CSS 수치 (vw/clamp 변환 후)
865
903
  const expected = { 'font-size': '16px', 'color': '#ffffff', 'width': '465px' }
866
904
  const diffs = compareStyles(expected, actual)
@@ -884,7 +922,7 @@ import { extractImages, extractTextContent } from 'src/infra/lib/browser'
884
922
 
885
923
  2. 텍스트 콘텐츠 확인:
886
924
  const texts = await extractTextContent(page)
887
- 재료함의 TEXT 노드 characters와 대조
925
+ tree.json의 TEXT 노드 characters와 대조
888
926
  → 누락된 텍스트 = P1
889
927
  ```
890
928
 
@@ -896,9 +934,9 @@ import { extractImages, extractTextContent } from 'src/infra/lib/browser'
896
934
  2. P1 이슈 우선 수정:
897
935
  - 이미지 누락 → 이미지 경로 확인, static/ 에 파일 존재 확인
898
936
  - 레이아웃 다름 → 스크린샷 diff 이미지 + computed CSS로 원인 파악
899
- - 텍스트 누락 → 재료함의 정확한 텍스트 삽입
900
- - CSS 수치 틀림 → 재료함(tree.json)의 정확한 값으로 교체
901
- ⚠️ 추정으로 수정하지 않는다. 반드시 재료함 참조.
937
+ - 텍스트 누락 → tree.json의 정확한 텍스트 삽입
938
+ - CSS 수치 틀림 → tree.json(tree.json)의 정확한 값으로 교체
939
+ ⚠️ 추정으로 수정하지 않는다. 반드시 tree.json 참조.
902
940
  3. 수정 후 컴파일 재검증:
903
941
  Bash: npx tsc --noEmit 2>&1 (또는 3.5-1에서 선택한 타입 체커)
904
942
  → 시각 수정이 타입 에러를 유발하면 즉시 타입 에러 수정 후 진행