@tienne/gestalt 0.2.0 → 0.5.1

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 (180) hide show
  1. package/CLAUDE.md +56 -2
  2. package/README.md +316 -12
  3. package/dist/benchmarks/runners/passthrough-benchmark-runner.d.ts +94 -0
  4. package/dist/benchmarks/runners/passthrough-benchmark-runner.d.ts.map +1 -0
  5. package/dist/benchmarks/runners/passthrough-benchmark-runner.js +454 -0
  6. package/dist/benchmarks/runners/passthrough-benchmark-runner.js.map +1 -0
  7. package/dist/benchmarks/scenarios/api-gateway.scenario.d.ts +3 -0
  8. package/dist/benchmarks/scenarios/api-gateway.scenario.d.ts.map +1 -0
  9. package/dist/benchmarks/scenarios/api-gateway.scenario.js +115 -0
  10. package/dist/benchmarks/scenarios/api-gateway.scenario.js.map +1 -0
  11. package/dist/benchmarks/scenarios/auth-system.scenario.d.ts +3 -0
  12. package/dist/benchmarks/scenarios/auth-system.scenario.d.ts.map +1 -0
  13. package/dist/benchmarks/scenarios/auth-system.scenario.js +114 -0
  14. package/dist/benchmarks/scenarios/auth-system.scenario.js.map +1 -0
  15. package/dist/benchmarks/scenarios/dashboard.scenario.d.ts +3 -0
  16. package/dist/benchmarks/scenarios/dashboard.scenario.d.ts.map +1 -0
  17. package/dist/benchmarks/scenarios/dashboard.scenario.js +110 -0
  18. package/dist/benchmarks/scenarios/dashboard.scenario.js.map +1 -0
  19. package/dist/benchmarks/types.d.ts +148 -0
  20. package/dist/benchmarks/types.d.ts.map +1 -0
  21. package/dist/benchmarks/types.js +2 -0
  22. package/dist/benchmarks/types.js.map +1 -0
  23. package/dist/bin/gestalt.js +8 -0
  24. package/dist/bin/gestalt.js.map +1 -1
  25. package/dist/package.json +5 -1
  26. package/dist/src/agent/parser.d.ts.map +1 -1
  27. package/dist/src/agent/parser.js +2 -0
  28. package/dist/src/agent/parser.js.map +1 -1
  29. package/dist/src/agent/passthrough-generator.d.ts +27 -0
  30. package/dist/src/agent/passthrough-generator.d.ts.map +1 -0
  31. package/dist/src/agent/passthrough-generator.js +133 -0
  32. package/dist/src/agent/passthrough-generator.js.map +1 -0
  33. package/dist/src/agent/registry.d.ts +1 -0
  34. package/dist/src/agent/registry.d.ts.map +1 -1
  35. package/dist/src/agent/registry.js +4 -1
  36. package/dist/src/agent/registry.js.map +1 -1
  37. package/dist/src/agent/role-agent-registry.d.ts +18 -0
  38. package/dist/src/agent/role-agent-registry.d.ts.map +1 -0
  39. package/dist/src/agent/role-agent-registry.js +62 -0
  40. package/dist/src/agent/role-agent-registry.js.map +1 -0
  41. package/dist/src/agent/role-consensus-engine.d.ts +9 -0
  42. package/dist/src/agent/role-consensus-engine.d.ts.map +1 -0
  43. package/dist/src/agent/role-consensus-engine.js +35 -0
  44. package/dist/src/agent/role-consensus-engine.js.map +1 -0
  45. package/dist/src/agent/role-match-engine.d.ts +14 -0
  46. package/dist/src/agent/role-match-engine.d.ts.map +1 -0
  47. package/dist/src/agent/role-match-engine.js +46 -0
  48. package/dist/src/agent/role-match-engine.js.map +1 -0
  49. package/dist/src/agent/role-prompt-generator.d.ts +10 -0
  50. package/dist/src/agent/role-prompt-generator.d.ts.map +1 -0
  51. package/dist/src/agent/role-prompt-generator.js +22 -0
  52. package/dist/src/agent/role-prompt-generator.js.map +1 -0
  53. package/dist/src/cli/commands/monitor.d.ts +2 -0
  54. package/dist/src/cli/commands/monitor.d.ts.map +1 -0
  55. package/dist/src/cli/commands/monitor.js +13 -0
  56. package/dist/src/cli/commands/monitor.js.map +1 -0
  57. package/dist/src/cli/index.d.ts.map +1 -1
  58. package/dist/src/cli/index.js +7 -0
  59. package/dist/src/cli/index.js.map +1 -1
  60. package/dist/src/core/config.d.ts +3 -0
  61. package/dist/src/core/config.d.ts.map +1 -1
  62. package/dist/src/core/config.js +4 -0
  63. package/dist/src/core/config.js.map +1 -1
  64. package/dist/src/core/errors.d.ts +3 -0
  65. package/dist/src/core/errors.d.ts.map +1 -1
  66. package/dist/src/core/errors.js +6 -0
  67. package/dist/src/core/errors.js.map +1 -1
  68. package/dist/src/core/types.d.ts +77 -1
  69. package/dist/src/core/types.d.ts.map +1 -1
  70. package/dist/src/events/types.d.ts +13 -1
  71. package/dist/src/events/types.d.ts.map +1 -1
  72. package/dist/src/events/types.js +15 -0
  73. package/dist/src/events/types.js.map +1 -1
  74. package/dist/src/execute/passthrough-engine.d.ts +31 -2
  75. package/dist/src/execute/passthrough-engine.d.ts.map +1 -1
  76. package/dist/src/execute/passthrough-engine.js +128 -8
  77. package/dist/src/execute/passthrough-engine.js.map +1 -1
  78. package/dist/src/execute/session.d.ts +4 -1
  79. package/dist/src/execute/session.d.ts.map +1 -1
  80. package/dist/src/execute/session.js +29 -0
  81. package/dist/src/execute/session.js.map +1 -1
  82. package/dist/src/mcp/schemas.d.ts +347 -9
  83. package/dist/src/mcp/schemas.d.ts.map +1 -1
  84. package/dist/src/mcp/schemas.js +81 -0
  85. package/dist/src/mcp/schemas.js.map +1 -1
  86. package/dist/src/mcp/server.d.ts.map +1 -1
  87. package/dist/src/mcp/server.js +214 -36
  88. package/dist/src/mcp/server.js.map +1 -1
  89. package/dist/src/mcp/tools/benchmark-passthrough.d.ts +3 -0
  90. package/dist/src/mcp/tools/benchmark-passthrough.d.ts.map +1 -0
  91. package/dist/src/mcp/tools/benchmark-passthrough.js +95 -0
  92. package/dist/src/mcp/tools/benchmark-passthrough.js.map +1 -0
  93. package/dist/src/mcp/tools/create-agent-passthrough.d.ts +5 -0
  94. package/dist/src/mcp/tools/create-agent-passthrough.d.ts.map +1 -0
  95. package/dist/src/mcp/tools/create-agent-passthrough.js +59 -0
  96. package/dist/src/mcp/tools/create-agent-passthrough.js.map +1 -0
  97. package/dist/src/mcp/tools/execute-passthrough.d.ts.map +1 -1
  98. package/dist/src/mcp/tools/execute-passthrough.js +50 -0
  99. package/dist/src/mcp/tools/execute-passthrough.js.map +1 -1
  100. package/dist/src/mcp/tools/review-passthrough.d.ts +6 -0
  101. package/dist/src/mcp/tools/review-passthrough.d.ts.map +1 -0
  102. package/dist/src/mcp/tools/review-passthrough.js +134 -0
  103. package/dist/src/mcp/tools/review-passthrough.js.map +1 -0
  104. package/dist/src/mcp/tools/status.d.ts +2 -1
  105. package/dist/src/mcp/tools/status.d.ts.map +1 -1
  106. package/dist/src/mcp/tools/status.js +74 -27
  107. package/dist/src/mcp/tools/status.js.map +1 -1
  108. package/dist/src/review/agent-matcher.d.ts +15 -0
  109. package/dist/src/review/agent-matcher.d.ts.map +1 -0
  110. package/dist/src/review/agent-matcher.js +61 -0
  111. package/dist/src/review/agent-matcher.js.map +1 -0
  112. package/dist/src/review/context-collector.d.ts +7 -0
  113. package/dist/src/review/context-collector.d.ts.map +1 -0
  114. package/dist/src/review/context-collector.js +44 -0
  115. package/dist/src/review/context-collector.js.map +1 -0
  116. package/dist/src/review/passthrough-engine.d.ts +53 -0
  117. package/dist/src/review/passthrough-engine.d.ts.map +1 -0
  118. package/dist/src/review/passthrough-engine.js +257 -0
  119. package/dist/src/review/passthrough-engine.js.map +1 -0
  120. package/dist/src/review/report-generator.d.ts +7 -0
  121. package/dist/src/review/report-generator.d.ts.map +1 -0
  122. package/dist/src/review/report-generator.js +82 -0
  123. package/dist/src/review/report-generator.js.map +1 -0
  124. package/dist/src/tui/components/TUIApp.d.ts +20 -0
  125. package/dist/src/tui/components/TUIApp.d.ts.map +1 -0
  126. package/dist/src/tui/components/TUIApp.js +84 -0
  127. package/dist/src/tui/components/TUIApp.js.map +1 -0
  128. package/dist/src/tui/hooks/event-store-reader.d.ts +28 -0
  129. package/dist/src/tui/hooks/event-store-reader.d.ts.map +1 -0
  130. package/dist/src/tui/hooks/event-store-reader.js +143 -0
  131. package/dist/src/tui/hooks/event-store-reader.js.map +1 -0
  132. package/dist/src/tui/hooks/useEventStorePoller.d.ts +12 -0
  133. package/dist/src/tui/hooks/useEventStorePoller.d.ts.map +1 -0
  134. package/dist/src/tui/hooks/useEventStorePoller.js +86 -0
  135. package/dist/src/tui/hooks/useEventStorePoller.js.map +1 -0
  136. package/dist/src/tui/screens/DashboardScreen.d.ts +4 -0
  137. package/dist/src/tui/screens/DashboardScreen.d.ts.map +1 -0
  138. package/dist/src/tui/screens/DashboardScreen.js +132 -0
  139. package/dist/src/tui/screens/DashboardScreen.js.map +1 -0
  140. package/dist/src/tui/screens/DebugScreen.d.ts +4 -0
  141. package/dist/src/tui/screens/DebugScreen.d.ts.map +1 -0
  142. package/dist/src/tui/screens/DebugScreen.js +40 -0
  143. package/dist/src/tui/screens/DebugScreen.js.map +1 -0
  144. package/dist/src/tui/screens/EvolutionScreen.d.ts +4 -0
  145. package/dist/src/tui/screens/EvolutionScreen.d.ts.map +1 -0
  146. package/dist/src/tui/screens/EvolutionScreen.js +136 -0
  147. package/dist/src/tui/screens/EvolutionScreen.js.map +1 -0
  148. package/dist/src/tui/screens/HUDPanel.d.ts +4 -0
  149. package/dist/src/tui/screens/HUDPanel.d.ts.map +1 -0
  150. package/dist/src/tui/screens/HUDPanel.js +13 -0
  151. package/dist/src/tui/screens/HUDPanel.js.map +1 -0
  152. package/dist/src/tui/screens/InterviewScreen.d.ts +4 -0
  153. package/dist/src/tui/screens/InterviewScreen.d.ts.map +1 -0
  154. package/dist/src/tui/screens/InterviewScreen.js +103 -0
  155. package/dist/src/tui/screens/InterviewScreen.js.map +1 -0
  156. package/dist/src/tui/screens/LogScreen.d.ts +4 -0
  157. package/dist/src/tui/screens/LogScreen.d.ts.map +1 -0
  158. package/dist/src/tui/screens/LogScreen.js +83 -0
  159. package/dist/src/tui/screens/LogScreen.js.map +1 -0
  160. package/dist/src/tui/screens/SessionListScreen.d.ts +4 -0
  161. package/dist/src/tui/screens/SessionListScreen.d.ts.map +1 -0
  162. package/dist/src/tui/screens/SessionListScreen.js +71 -0
  163. package/dist/src/tui/screens/SessionListScreen.js.map +1 -0
  164. package/dist/src/tui/screens/SpecViewerScreen.d.ts +4 -0
  165. package/dist/src/tui/screens/SpecViewerScreen.d.ts.map +1 -0
  166. package/dist/src/tui/screens/SpecViewerScreen.js +73 -0
  167. package/dist/src/tui/screens/SpecViewerScreen.js.map +1 -0
  168. package/dist/src/tui/widgets/DriftMeter.d.ts +15 -0
  169. package/dist/src/tui/widgets/DriftMeter.d.ts.map +1 -0
  170. package/dist/src/tui/widgets/DriftMeter.js +27 -0
  171. package/dist/src/tui/widgets/DriftMeter.js.map +1 -0
  172. package/dist/src/tui/widgets/GestaltPrincipleBar.d.ts +9 -0
  173. package/dist/src/tui/widgets/GestaltPrincipleBar.d.ts.map +1 -0
  174. package/dist/src/tui/widgets/GestaltPrincipleBar.js +35 -0
  175. package/dist/src/tui/widgets/GestaltPrincipleBar.js.map +1 -0
  176. package/dist/src/tui/widgets/TaskDAGTree.d.ts +15 -0
  177. package/dist/src/tui/widgets/TaskDAGTree.d.ts.map +1 -0
  178. package/dist/src/tui/widgets/TaskDAGTree.js +54 -0
  179. package/dist/src/tui/widgets/TaskDAGTree.js.map +1 -0
  180. package/package.json +5 -1
@@ -0,0 +1,114 @@
1
+ export const authSystemScenario = {
2
+ name: 'auth-system',
3
+ description: 'JWT 기반 사용자 인증 시스템',
4
+ topic: '사용자 인증 시스템',
5
+ userResponses: [
6
+ 'JWT 기반 인증 시스템을 구현하려 합니다. 회원가입, 로그인, 토큰 갱신이 필요합니다.',
7
+ 'bcrypt로 패스워드 해싱, access token 15분, refresh token 7일 유효기간입니다.',
8
+ 'PostgreSQL 사용, 이메일 중복 불가, 비밀번호 최소 8자, 대소문자+숫자 포함 필수입니다.',
9
+ 'rate limiting은 IP당 로그인 시도 5회/분, 실패 시 5분 잠금입니다.',
10
+ '우선순위: 1) 로그인/회원가입 2) 토큰 갱신 3) rate limiting 4) 로그아웃',
11
+ ],
12
+ expectedSpec: {
13
+ goal: 'JWT 기반 사용자 인증 시스템 구현 (회원가입, 로그인, 토큰 갱신, rate limiting)',
14
+ constraints: [
15
+ 'bcrypt 패스워드 해싱',
16
+ 'Access token 유효기간 15분',
17
+ 'Refresh token 유효기간 7일',
18
+ 'PostgreSQL 데이터베이스',
19
+ '비밀번호: 최소 8자, 대소문자+숫자 포함',
20
+ 'IP당 로그인 시도 5회/분, 실패 시 5분 잠금',
21
+ ],
22
+ acceptanceCriteria: [
23
+ 'AC0: 사용자 회원가입 — 이메일+비밀번호로 계정 생성, 이메일 중복 검증',
24
+ 'AC1: 사용자 로그인 — 이메일+비밀번호 인증 후 JWT access/refresh 토큰 발급',
25
+ 'AC2: 토큰 갱신 — refresh token으로 새 access token 발급',
26
+ 'AC3: Rate Limiting — IP당 5회/분 제한, 초과 시 5분 잠금',
27
+ 'AC4: 로그아웃 — refresh token 무효화',
28
+ ],
29
+ ontologySchema: {
30
+ entities: [
31
+ { name: 'User', description: '인증 사용자', attributes: ['id', 'email', 'passwordHash', 'createdAt'] },
32
+ { name: 'Token', description: 'JWT 토큰', attributes: ['id', 'userId', 'type', 'expiresAt'] },
33
+ { name: 'LoginAttempt', description: '로그인 시도 기록', attributes: ['ip', 'userId', 'success', 'timestamp'] },
34
+ ],
35
+ relations: [
36
+ { from: 'User', to: 'Token', type: 'has_many' },
37
+ { from: 'User', to: 'LoginAttempt', type: 'has_many' },
38
+ ],
39
+ },
40
+ gestaltAnalysis: [
41
+ { principle: 'closure', finding: '로그아웃 시 refresh token 무효화 로직 암묵적 요구', confidence: 0.9 },
42
+ { principle: 'figure_ground', finding: '로그인/회원가입이 핵심, rate limiting은 보조', confidence: 0.95 },
43
+ { principle: 'proximity', finding: '토큰 관리(발급/갱신/무효화)가 하나의 도메인 그룹', confidence: 0.85 },
44
+ ],
45
+ },
46
+ planningSteps: {
47
+ figureGround: {
48
+ classifiedACs: [
49
+ { acIndex: 0, classification: 'essential', reasoning: '핵심 진입점' },
50
+ { acIndex: 1, classification: 'essential', reasoning: '핵심 인증 기능' },
51
+ { acIndex: 2, classification: 'essential', reasoning: '토큰 수명 관리 필수' },
52
+ { acIndex: 3, classification: 'supplementary', reasoning: '보안 강화 부가 기능' },
53
+ { acIndex: 4, classification: 'supplementary', reasoning: '선택적 세션 종료' },
54
+ ],
55
+ },
56
+ closure: {
57
+ atomicTasks: [
58
+ { taskId: 'T1', title: 'User 엔티티 및 DB 스키마 생성', acIndices: [0], dependencies: [] },
59
+ { taskId: 'T2', title: '회원가입 API 엔드포인트', acIndices: [0], dependencies: ['T1'] },
60
+ { taskId: 'T3', title: 'JWT 토큰 발급 유틸리티', acIndices: [1, 2], dependencies: ['T1'] },
61
+ { taskId: 'T4', title: '로그인 API 엔드포인트', acIndices: [1], dependencies: ['T2', 'T3'] },
62
+ { taskId: 'T5', title: '토큰 갱신 API', acIndices: [2], dependencies: ['T3'] },
63
+ { taskId: 'T6', title: 'Rate Limiting 미들웨어', acIndices: [3], dependencies: ['T1'] },
64
+ { taskId: 'T7', title: '로그아웃 API 및 토큰 무효화', acIndices: [4], dependencies: ['T3'] },
65
+ ],
66
+ },
67
+ proximity: {
68
+ taskGroups: [
69
+ { groupId: 'G1', name: '사용자 관리', taskIds: ['T1', 'T2'] },
70
+ { groupId: 'G2', name: '인증/토큰', taskIds: ['T3', 'T4', 'T5', 'T7'] },
71
+ { groupId: 'G3', name: '보안', taskIds: ['T6'] },
72
+ ],
73
+ },
74
+ continuity: {
75
+ dagValidation: {
76
+ isValid: true,
77
+ hasCycles: false,
78
+ hasConflicts: false,
79
+ topologicalOrder: ['T1', 'T2', 'T3', 'T6', 'T4', 'T5', 'T7'],
80
+ criticalPath: ['T1', 'T2', 'T3', 'T4'],
81
+ },
82
+ },
83
+ },
84
+ taskOutputs: [
85
+ { taskId: 'T1', output: 'User 테이블 생성 마이그레이션 완료', artifacts: ['migrations/001_users.sql'] },
86
+ { taskId: 'T2', output: 'POST /auth/register 엔드포인트 구현 완료', artifacts: ['src/routes/auth.ts'] },
87
+ { taskId: 'T3', output: 'JWT 유틸리티 (sign, verify, refresh) 구현', artifacts: ['src/utils/jwt.ts'] },
88
+ { taskId: 'T4', output: 'POST /auth/login 엔드포인트 구현 완료', artifacts: ['src/routes/auth.ts'] },
89
+ { taskId: 'T5', output: 'POST /auth/refresh 엔드포인트 구현 완료', artifacts: ['src/routes/auth.ts'] },
90
+ { taskId: 'T6', output: 'Rate limiting 미들웨어 구현', artifacts: ['src/middleware/rate-limit.ts'] },
91
+ { taskId: 'T7', output: 'POST /auth/logout 구현, refresh token 블랙리스트', artifacts: ['src/routes/auth.ts'] },
92
+ ],
93
+ structuralResult: {
94
+ commands: [
95
+ { name: 'lint', command: 'eslint src/', exitCode: 0, output: 'No errors found' },
96
+ { name: 'build', command: 'tsc --noEmit', exitCode: 0, output: '' },
97
+ { name: 'test', command: 'vitest run', exitCode: 0, output: 'Tests: 24 passed' },
98
+ ],
99
+ allPassed: true,
100
+ },
101
+ evaluationResult: {
102
+ verifications: [
103
+ { acIndex: 0, satisfied: true, evidence: '회원가입 API, 이메일 중복 검증, 비밀번호 해싱 구현', gaps: [] },
104
+ { acIndex: 1, satisfied: true, evidence: '로그인 API, JWT 발급 구현', gaps: [] },
105
+ { acIndex: 2, satisfied: true, evidence: 'Refresh token으로 새 access token 발급', gaps: [] },
106
+ { acIndex: 3, satisfied: true, evidence: 'IP 기반 rate limiting 미들웨어 구현', gaps: [] },
107
+ { acIndex: 4, satisfied: true, evidence: '로그아웃 시 refresh token 블랙리스트', gaps: [] },
108
+ ],
109
+ overallScore: 0.92,
110
+ goalAlignment: 0.90,
111
+ recommendations: ['E2E 테스트 추가 권장'],
112
+ },
113
+ };
114
+ //# sourceMappingURL=auth-system.scenario.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"auth-system.scenario.js","sourceRoot":"","sources":["../../../benchmarks/scenarios/auth-system.scenario.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ import type { BenchmarkScenario } from '../types.js';
2
+ export declare const dashboardScenario: BenchmarkScenario;
3
+ //# sourceMappingURL=dashboard.scenario.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"dashboard.scenario.d.ts","sourceRoot":"","sources":["../../../benchmarks/scenarios/dashboard.scenario.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,aAAa,CAAC;AAErD,eAAO,MAAM,iBAAiB,EAAE,iBA4G/B,CAAC"}
@@ -0,0 +1,110 @@
1
+ export const dashboardScenario = {
2
+ name: 'dashboard',
3
+ description: '실시간 모니터링 대시보드',
4
+ topic: '실시간 모니터링 대시보드',
5
+ userResponses: [
6
+ 'React 기반 실시간 메트릭 대시보드를 만들려 합니다. CPU, 메모리, 네트워크 트래픽을 시각화합니다.',
7
+ 'WebSocket으로 실시간 데이터 수신, Chart.js로 차트 렌더링, 5초 간격 업데이트입니다.',
8
+ '대시보드 레이아웃은 그리드 기반, 위젯 드래그앤드롭 재배치 가능해야 합니다.',
9
+ '알림 시스템: CPU > 90% 또는 메모리 > 85%일 때 토스트 알림 + 차트 색상 변경',
10
+ '우선순위: 1) 실시간 차트 2) WebSocket 연결 3) 알림 4) 레이아웃 커스텀',
11
+ ],
12
+ expectedSpec: {
13
+ goal: 'React 기반 실시간 시스템 메트릭 모니터링 대시보드 구현',
14
+ constraints: [
15
+ 'React + TypeScript',
16
+ 'WebSocket 실시간 통신',
17
+ 'Chart.js 차트 라이브러리',
18
+ '5초 간격 데이터 업데이트',
19
+ '그리드 기반 드래그앤드롭 레이아웃',
20
+ ],
21
+ acceptanceCriteria: [
22
+ 'AC0: 실시간 차트 위젯 — CPU, 메모리, 네트워크 메트릭을 Chart.js로 시각화',
23
+ 'AC1: WebSocket 연결 — 서버와 실시간 양방향 통신, 자동 재연결',
24
+ 'AC2: 알림 시스템 — 임계치 초과 시 토스트 알림 + 차트 색상 변경',
25
+ 'AC3: 그리드 레이아웃 — 위젯 드래그앤드롭 재배치, 레이아웃 저장/복원',
26
+ ],
27
+ ontologySchema: {
28
+ entities: [
29
+ { name: 'MetricData', description: '시스템 메트릭 데이터 포인트', attributes: ['type', 'value', 'timestamp'] },
30
+ { name: 'Widget', description: '대시보드 위젯', attributes: ['id', 'type', 'position', 'size'] },
31
+ { name: 'Alert', description: '알림 규칙', attributes: ['metric', 'threshold', 'severity'] },
32
+ { name: 'Layout', description: '대시보드 레이아웃', attributes: ['id', 'widgets', 'savedAt'] },
33
+ ],
34
+ relations: [
35
+ { from: 'Widget', to: 'MetricData', type: 'displays' },
36
+ { from: 'Alert', to: 'MetricData', type: 'monitors' },
37
+ { from: 'Layout', to: 'Widget', type: 'contains' },
38
+ ],
39
+ },
40
+ gestaltAnalysis: [
41
+ { principle: 'figure_ground', finding: '실시간 차트가 핵심(figure), 레이아웃 커스텀은 보조(ground)', confidence: 0.92 },
42
+ { principle: 'proximity', finding: 'WebSocket+차트+알림이 실시간 모니터링 도메인으로 그룹핑', confidence: 0.88 },
43
+ { principle: 'continuity', finding: 'WebSocket 연결 → 데이터 수신 → 차트 업데이트 → 알림 체크 흐름', confidence: 0.90 },
44
+ ],
45
+ },
46
+ planningSteps: {
47
+ figureGround: {
48
+ classifiedACs: [
49
+ { acIndex: 0, classification: 'essential', reasoning: '핵심 시각화 기능' },
50
+ { acIndex: 1, classification: 'essential', reasoning: '실시간 데이터의 근간' },
51
+ { acIndex: 2, classification: 'supplementary', reasoning: '사용성 강화 부가기능' },
52
+ { acIndex: 3, classification: 'supplementary', reasoning: '편의 기능' },
53
+ ],
54
+ },
55
+ closure: {
56
+ atomicTasks: [
57
+ { taskId: 'T1', title: 'WebSocket 클라이언트 훅 구현', acIndices: [1], dependencies: [] },
58
+ { taskId: 'T2', title: 'MetricData 타입 및 스토어', acIndices: [0], dependencies: [] },
59
+ { taskId: 'T3', title: 'Chart.js 차트 위젯 컴포넌트', acIndices: [0], dependencies: ['T2'] },
60
+ { taskId: 'T4', title: 'WebSocket-Chart 데이터 바인딩', acIndices: [0, 1], dependencies: ['T1', 'T3'] },
61
+ { taskId: 'T5', title: '알림 엔진 및 토스트 UI', acIndices: [2], dependencies: ['T2'] },
62
+ { taskId: 'T6', title: '그리드 레이아웃 + 드래그앤드롭', acIndices: [3], dependencies: ['T3'] },
63
+ ],
64
+ },
65
+ proximity: {
66
+ taskGroups: [
67
+ { groupId: 'G1', name: '데이터 레이어', taskIds: ['T1', 'T2'] },
68
+ { groupId: 'G2', name: '시각화', taskIds: ['T3', 'T4'] },
69
+ { groupId: 'G3', name: 'UX 기능', taskIds: ['T5', 'T6'] },
70
+ ],
71
+ },
72
+ continuity: {
73
+ dagValidation: {
74
+ isValid: true,
75
+ hasCycles: false,
76
+ hasConflicts: false,
77
+ topologicalOrder: ['T1', 'T2', 'T3', 'T5', 'T4', 'T6'],
78
+ criticalPath: ['T2', 'T3', 'T4'],
79
+ },
80
+ },
81
+ },
82
+ taskOutputs: [
83
+ { taskId: 'T1', output: 'useWebSocket 훅 구현, 자동 재연결 포함', artifacts: ['src/hooks/useWebSocket.ts'] },
84
+ { taskId: 'T2', output: 'MetricData 타입 정의 및 Zustand 스토어', artifacts: ['src/types/metric.ts', 'src/stores/metricStore.ts'] },
85
+ { taskId: 'T3', output: 'LineChart, AreaChart 위젯 컴포넌트', artifacts: ['src/components/charts/LineChart.tsx'] },
86
+ { taskId: 'T4', output: 'WebSocket 데이터를 Chart에 연결하는 바인딩 레이어', artifacts: ['src/hooks/useMetricStream.ts'] },
87
+ { taskId: 'T5', output: '알림 엔진 + react-toastify 통합', artifacts: ['src/features/alerts/AlertEngine.ts'] },
88
+ { taskId: 'T6', output: 'react-grid-layout 기반 드래그앤드롭', artifacts: ['src/components/DashboardGrid.tsx'] },
89
+ ],
90
+ structuralResult: {
91
+ commands: [
92
+ { name: 'lint', command: 'eslint src/', exitCode: 0, output: 'No errors found' },
93
+ { name: 'build', command: 'tsc --noEmit', exitCode: 0, output: '' },
94
+ { name: 'test', command: 'vitest run', exitCode: 0, output: 'Tests: 18 passed' },
95
+ ],
96
+ allPassed: true,
97
+ },
98
+ evaluationResult: {
99
+ verifications: [
100
+ { acIndex: 0, satisfied: true, evidence: 'Chart.js 기반 CPU/메모리/네트워크 위젯 구현', gaps: [] },
101
+ { acIndex: 1, satisfied: true, evidence: 'WebSocket 훅 + 자동 재연결 구현', gaps: [] },
102
+ { acIndex: 2, satisfied: true, evidence: '임계치 알림 엔진 + 토스트 UI', gaps: ['차트 색상 변경 미구현'] },
103
+ { acIndex: 3, satisfied: true, evidence: 'react-grid-layout 드래그앤드롭', gaps: [] },
104
+ ],
105
+ overallScore: 0.88,
106
+ goalAlignment: 0.85,
107
+ recommendations: ['알림 시 차트 색상 변경 기능 추가 권장'],
108
+ },
109
+ };
110
+ //# sourceMappingURL=dashboard.scenario.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"dashboard.scenario.js","sourceRoot":"","sources":["../../../benchmarks/scenarios/dashboard.scenario.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,148 @@
1
+ export interface BenchmarkScenario {
2
+ name: string;
3
+ description: string;
4
+ topic: string;
5
+ userResponses: string[];
6
+ expectedSpec: {
7
+ goal: string;
8
+ constraints: string[];
9
+ acceptanceCriteria: string[];
10
+ ontologySchema: {
11
+ entities: Array<{
12
+ name: string;
13
+ description: string;
14
+ attributes: string[];
15
+ }>;
16
+ relations: Array<{
17
+ from: string;
18
+ to: string;
19
+ type: string;
20
+ }>;
21
+ };
22
+ gestaltAnalysis: Array<{
23
+ principle: string;
24
+ finding: string;
25
+ confidence: number;
26
+ }>;
27
+ };
28
+ planningSteps: {
29
+ figureGround: {
30
+ classifiedACs: Array<{
31
+ acIndex: number;
32
+ classification: 'essential' | 'supplementary';
33
+ reasoning: string;
34
+ }>;
35
+ };
36
+ closure: {
37
+ atomicTasks: Array<{
38
+ taskId: string;
39
+ title: string;
40
+ acIndices: number[];
41
+ dependencies: string[];
42
+ }>;
43
+ };
44
+ proximity: {
45
+ taskGroups: Array<{
46
+ groupId: string;
47
+ name: string;
48
+ taskIds: string[];
49
+ }>;
50
+ };
51
+ continuity: {
52
+ dagValidation: {
53
+ isValid: boolean;
54
+ hasCycles: boolean;
55
+ hasConflicts: boolean;
56
+ topologicalOrder: string[];
57
+ criticalPath: string[];
58
+ };
59
+ };
60
+ };
61
+ taskOutputs: Array<{
62
+ taskId: string;
63
+ output: string;
64
+ artifacts: string[];
65
+ }>;
66
+ structuralResult: {
67
+ commands: Array<{
68
+ name: string;
69
+ command: string;
70
+ exitCode: number;
71
+ output: string;
72
+ }>;
73
+ allPassed: boolean;
74
+ };
75
+ evaluationResult: {
76
+ verifications: Array<{
77
+ acIndex: number;
78
+ satisfied: boolean;
79
+ evidence: string;
80
+ gaps: string[];
81
+ }>;
82
+ overallScore: number;
83
+ goalAlignment: number;
84
+ recommendations: string[];
85
+ };
86
+ }
87
+ export interface StageMetrics {
88
+ name: string;
89
+ durationMs: number;
90
+ success: boolean;
91
+ }
92
+ export interface LLMCallMetric {
93
+ stage: string;
94
+ latencyMs: number;
95
+ inputTokens: number;
96
+ outputTokens: number;
97
+ jsonParseSuccess: boolean;
98
+ retried: boolean;
99
+ }
100
+ export interface LLMMetrics {
101
+ totalCalls: number;
102
+ totalInputTokens: number;
103
+ totalOutputTokens: number;
104
+ totalTokens: number;
105
+ estimatedCostUSD: number;
106
+ avgLatencyMs: number;
107
+ jsonParseFailures: number;
108
+ calls: LLMCallMetric[];
109
+ }
110
+ export interface PipelineMetrics {
111
+ mode: 'passthrough';
112
+ model: string;
113
+ scenario: string;
114
+ totalDurationMs: number;
115
+ stages: StageMetrics[];
116
+ interview: {
117
+ rounds: number;
118
+ finalAmbiguity: number;
119
+ };
120
+ spec: {
121
+ generated: boolean;
122
+ };
123
+ execute: {
124
+ taskCount: number;
125
+ completionRate: number;
126
+ driftAlerts: number;
127
+ };
128
+ evaluate: {
129
+ overallScore: number;
130
+ goalAlignment: number;
131
+ satisfiedACs: string;
132
+ };
133
+ llmMetrics: LLMMetrics;
134
+ }
135
+ export interface BenchmarkResult {
136
+ timestamp: string;
137
+ nodeVersion: string;
138
+ scenarios: PipelineMetrics[];
139
+ summary: {
140
+ totalScenarios: number;
141
+ allPassed: boolean;
142
+ avgScore: number;
143
+ avgGoalAlignment: number;
144
+ totalDurationMs: number;
145
+ totalCalls: number;
146
+ };
147
+ }
148
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../benchmarks/types.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../../benchmarks/types.ts"],"names":[],"mappings":""}
@@ -1,4 +1,12 @@
1
1
  #!/usr/bin/env node
2
+ const major = Number(process.versions.node.split('.')[0]);
3
+ if (major < 20) {
4
+ console.error(`\n gestalt requires Node.js >= 20.0.0 (current: ${process.version})\n\n` +
5
+ ` Upgrade with:\n` +
6
+ ` nvm install 22 && nvm use 22\n` +
7
+ ` or: https://nodejs.org/\n`);
8
+ process.exit(1);
9
+ }
2
10
  import { createCli } from '../src/cli/index.js';
3
11
  const program = createCli();
4
12
  program.parse();
@@ -1 +1 @@
1
- {"version":3,"file":"gestalt.js","sourceRoot":"","sources":["../../bin/gestalt.ts"],"names":[],"mappings":";AACA,OAAO,EAAE,SAAS,EAAE,MAAM,qBAAqB,CAAC;AAEhD,MAAM,OAAO,GAAG,SAAS,EAAE,CAAC;AAC5B,OAAO,CAAC,KAAK,EAAE,CAAC"}
1
+ {"version":3,"file":"gestalt.js","sourceRoot":"","sources":["../../bin/gestalt.ts"],"names":[],"mappings":";AAEA,MAAM,KAAK,GAAG,MAAM,CAAC,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;AAC1D,IAAI,KAAK,GAAG,EAAE,EAAE,CAAC;IACf,OAAO,CAAC,KAAK,CACX,oDAAoD,OAAO,CAAC,OAAO,OAAO;QAC1E,mBAAmB;QACnB,oCAAoC;QACpC,+BAA+B,CAChC,CAAC;IACF,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AAClB,CAAC;AAED,OAAO,EAAE,SAAS,EAAE,MAAM,qBAAqB,CAAC;AAEhD,MAAM,OAAO,GAAG,SAAS,EAAE,CAAC;AAC5B,OAAO,CAAC,KAAK,EAAE,CAAC"}
package/dist/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@tienne/gestalt",
3
- "version": "0.2.0",
3
+ "version": "0.5.1",
4
4
  "description": "TypeScript AI Development Harness - Gestalt psychology-driven requirement clarification",
5
5
  "type": "module",
6
6
  "main": "./dist/src/index.js",
@@ -26,6 +26,7 @@
26
26
  "test": "vitest run",
27
27
  "test:watch": "vitest",
28
28
  "serve": "tsx bin/gestalt.ts serve",
29
+ "bench": "tsx benchmarks/run.ts",
29
30
  "lint": "tsc --noEmit",
30
31
  "version:sync": "tsx scripts/sync-version.ts",
31
32
  "postversion": "pnpm run version:sync"
@@ -33,12 +34,15 @@
33
34
  "dependencies": {
34
35
  "@anthropic-ai/sdk": "^0.39.0",
35
36
  "@modelcontextprotocol/sdk": "^1.12.1",
37
+ "@types/react": "^19.2.14",
36
38
  "better-sqlite3": "^11.8.2",
37
39
  "chokidar": "^4.0.3",
38
40
  "commander": "^13.1.0",
39
41
  "dotenv": "^17.3.1",
40
42
  "gray-matter": "^4.0.3",
43
+ "ink": "^6.8.0",
41
44
  "openai": "^6.27.0",
45
+ "react": "^19.2.4",
42
46
  "zod": "^3.24.2"
43
47
  },
44
48
  "devDependencies": {
@@ -1 +1 @@
1
- {"version":3,"file":"parser.d.ts","sourceRoot":"","sources":["../../../src/agent/parser.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,eAAe,EAAoB,MAAM,kBAAkB,CAAC;AAW1E,wBAAgB,YAAY,CAAC,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,eAAe,CAuB/E"}
1
+ {"version":3,"file":"parser.d.ts","sourceRoot":"","sources":["../../../src/agent/parser.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,eAAe,EAAoB,MAAM,kBAAkB,CAAC;AAa1E,wBAAgB,YAAY,CAAC,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,eAAe,CAuB/E"}
@@ -8,6 +8,8 @@ const agentFrontmatterSchema = z.object({
8
8
  pipeline: z.enum(['interview', 'spec', 'execute', 'evaluate']),
9
9
  escalateTo: z.string().optional(),
10
10
  description: z.string().min(1),
11
+ role: z.boolean().default(false),
12
+ domain: z.array(z.string()).default([]),
11
13
  });
12
14
  export function parseAgentMd(content, filePath) {
13
15
  try {
@@ -1 +1 @@
1
- {"version":3,"file":"parser.js","sourceRoot":"","sources":["../../../src/agent/parser.ts"],"names":[],"mappings":"AAAA,OAAO,MAAM,MAAM,aAAa,CAAC;AACjC,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAC;AAGpD,MAAM,sBAAsB,GAAG,CAAC,CAAC,MAAM,CAAC;IACtC,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC;IACvB,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;IAC5B,IAAI,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,QAAQ,EAAE,UAAU,EAAE,UAAU,CAAC,CAAC;IAChD,QAAQ,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,WAAW,EAAE,MAAM,EAAE,SAAS,EAAE,UAAU,CAAC,CAAC;IAC9D,UAAU,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;IACjC,WAAW,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC;CAC/B,CAAC,CAAC;AAEH,MAAM,UAAU,YAAY,CAAC,OAAe,EAAE,QAAgB;IAC5D,IAAI,CAAC;QACH,MAAM,EAAE,IAAI,EAAE,OAAO,EAAE,IAAI,EAAE,GAAG,MAAM,CAAC,OAAO,CAAC,CAAC;QAChD,MAAM,MAAM,GAAG,sBAAsB,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC;QAEtD,IAAI,CAAC,MAAM,CAAC,OAAO,EAAE,CAAC;YACpB,MAAM,MAAM,GAAG,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,OAAO,EAAE,CAAC,CAAC;YACnF,MAAM,IAAI,eAAe,CACvB,mCAAmC,QAAQ,MAAM,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CACrE,CAAC;QACJ,CAAC;QAED,OAAO;YACL,WAAW,EAAE,MAAM,CAAC,IAAwB;YAC5C,YAAY,EAAE,IAAI,CAAC,IAAI,EAAE;YACzB,QAAQ;SACT,CAAC;IACJ,CAAC;IAAC,OAAO,CAAC,EAAE,CAAC;QACX,IAAI,CAAC,YAAY,eAAe;YAAE,MAAM,CAAC,CAAC;QAC1C,MAAM,IAAI,eAAe,CACvB,+BAA+B,QAAQ,KAAK,CAAC,YAAY,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CACzF,CAAC;IACJ,CAAC;AACH,CAAC"}
1
+ {"version":3,"file":"parser.js","sourceRoot":"","sources":["../../../src/agent/parser.ts"],"names":[],"mappings":"AAAA,OAAO,MAAM,MAAM,aAAa,CAAC;AACjC,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAC;AAGpD,MAAM,sBAAsB,GAAG,CAAC,CAAC,MAAM,CAAC;IACtC,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC;IACvB,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;IAC5B,IAAI,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,QAAQ,EAAE,UAAU,EAAE,UAAU,CAAC,CAAC;IAChD,QAAQ,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,WAAW,EAAE,MAAM,EAAE,SAAS,EAAE,UAAU,CAAC,CAAC;IAC9D,UAAU,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;IACjC,WAAW,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC;IAC9B,IAAI,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,OAAO,CAAC,KAAK,CAAC;IAChC,MAAM,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC,OAAO,CAAC,EAAE,CAAC;CACxC,CAAC,CAAC;AAEH,MAAM,UAAU,YAAY,CAAC,OAAe,EAAE,QAAgB;IAC5D,IAAI,CAAC;QACH,MAAM,EAAE,IAAI,EAAE,OAAO,EAAE,IAAI,EAAE,GAAG,MAAM,CAAC,OAAO,CAAC,CAAC;QAChD,MAAM,MAAM,GAAG,sBAAsB,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC;QAEtD,IAAI,CAAC,MAAM,CAAC,OAAO,EAAE,CAAC;YACpB,MAAM,MAAM,GAAG,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,OAAO,EAAE,CAAC,CAAC;YACnF,MAAM,IAAI,eAAe,CACvB,mCAAmC,QAAQ,MAAM,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CACrE,CAAC;QACJ,CAAC;QAED,OAAO;YACL,WAAW,EAAE,MAAM,CAAC,IAAwB;YAC5C,YAAY,EAAE,IAAI,CAAC,IAAI,EAAE;YACzB,QAAQ;SACT,CAAC;IACJ,CAAC;IAAC,OAAO,CAAC,EAAE,CAAC;QACX,IAAI,CAAC,YAAY,eAAe;YAAE,MAAM,CAAC,CAAC;QAC1C,MAAM,IAAI,eAAe,CACvB,+BAA+B,QAAQ,KAAK,CAAC,YAAY,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CACzF,CAAC;IACJ,CAAC;AACH,CAAC"}
@@ -0,0 +1,27 @@
1
+ import type { InterviewSession, AgentDefinition } from '../core/types.js';
2
+ import { AgentCreationError } from '../core/errors.js';
3
+ import { type Result } from '../core/result.js';
4
+ import { EventStore } from '../events/store.js';
5
+ import type { RoleAgentRegistry } from './role-agent-registry.js';
6
+ export interface AgentCreationContext {
7
+ systemPrompt: string;
8
+ creationPrompt: string;
9
+ existingAgents: {
10
+ name: string;
11
+ domain: string[];
12
+ description: string;
13
+ }[];
14
+ agentMdSchema: string;
15
+ }
16
+ export declare class PassthroughAgentGenerator {
17
+ private eventStore;
18
+ private roleAgentRegistry?;
19
+ constructor(eventStore: EventStore, roleAgentRegistry?: RoleAgentRegistry | undefined);
20
+ buildAgentContext(session: InterviewSession): Result<AgentCreationContext, AgentCreationError>;
21
+ validateAndSave(session: InterviewSession, agentContent: string, cwd: string): Result<{
22
+ agent: AgentDefinition;
23
+ filePath: string;
24
+ overridden: boolean;
25
+ }, AgentCreationError>;
26
+ }
27
+ //# sourceMappingURL=passthrough-generator.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"passthrough-generator.d.ts","sourceRoot":"","sources":["../../../src/agent/passthrough-generator.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,gBAAgB,EAAE,eAAe,EAAE,MAAM,kBAAkB,CAAC;AAC1E,OAAO,EAAE,kBAAkB,EAAE,MAAM,mBAAmB,CAAC;AACvD,OAAO,EAAE,KAAK,MAAM,EAAW,MAAM,mBAAmB,CAAC;AACzD,OAAO,EAAE,UAAU,EAAE,MAAM,oBAAoB,CAAC;AAGhD,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,0BAA0B,CAAC;AAIlE,MAAM,WAAW,oBAAoB;IACnC,YAAY,EAAE,MAAM,CAAC;IACrB,cAAc,EAAE,MAAM,CAAC;IACvB,cAAc,EAAE;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,EAAE,CAAC;QAAC,WAAW,EAAE,MAAM,CAAA;KAAE,EAAE,CAAC;IAC1E,aAAa,EAAE,MAAM,CAAC;CACvB;AAID,qBAAa,yBAAyB;IAElC,OAAO,CAAC,UAAU;IAClB,OAAO,CAAC,iBAAiB,CAAC;gBADlB,UAAU,EAAE,UAAU,EACtB,iBAAiB,CAAC,EAAE,iBAAiB,YAAA;IAG/C,iBAAiB,CAAC,OAAO,EAAE,gBAAgB,GAAG,MAAM,CAAC,oBAAoB,EAAE,kBAAkB,CAAC;IAoF9F,eAAe,CACb,OAAO,EAAE,gBAAgB,EACzB,YAAY,EAAE,MAAM,EACpB,GAAG,EAAE,MAAM,GACV,MAAM,CAAC;QAAE,KAAK,EAAE,eAAe,CAAC;QAAC,QAAQ,EAAE,MAAM,CAAC;QAAC,UAAU,EAAE,OAAO,CAAA;KAAE,EAAE,kBAAkB,CAAC;CAwDjG"}