@tienne/gestalt 0.15.1 → 0.15.2

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 (29) hide show
  1. package/CLAUDE.md +2 -2
  2. package/README.ko.md +4 -0
  3. package/README.md +4 -0
  4. package/dist/package.json +1 -1
  5. package/dist/src/execute/orchestrators/evaluation.d.ts +27 -0
  6. package/dist/src/execute/orchestrators/evaluation.d.ts.map +1 -0
  7. package/dist/src/execute/orchestrators/evaluation.js +169 -0
  8. package/dist/src/execute/orchestrators/evaluation.js.map +1 -0
  9. package/dist/src/execute/orchestrators/evolution.d.ts +50 -0
  10. package/dist/src/execute/orchestrators/evolution.d.ts.map +1 -0
  11. package/dist/src/execute/orchestrators/evolution.js +391 -0
  12. package/dist/src/execute/orchestrators/evolution.js.map +1 -0
  13. package/dist/src/execute/orchestrators/execution.d.ts +38 -0
  14. package/dist/src/execute/orchestrators/execution.d.ts.map +1 -0
  15. package/dist/src/execute/orchestrators/execution.js +328 -0
  16. package/dist/src/execute/orchestrators/execution.js.map +1 -0
  17. package/dist/src/execute/orchestrators/planning.d.ts +26 -0
  18. package/dist/src/execute/orchestrators/planning.d.ts.map +1 -0
  19. package/dist/src/execute/orchestrators/planning.js +269 -0
  20. package/dist/src/execute/orchestrators/planning.js.map +1 -0
  21. package/dist/src/execute/orchestrators/types.d.ts +137 -0
  22. package/dist/src/execute/orchestrators/types.d.ts.map +1 -0
  23. package/dist/src/execute/orchestrators/types.js +2 -0
  24. package/dist/src/execute/orchestrators/types.js.map +1 -0
  25. package/dist/src/execute/passthrough-engine.d.ts +9 -201
  26. package/dist/src/execute/passthrough-engine.d.ts.map +1 -1
  27. package/dist/src/execute/passthrough-engine.js +37 -1075
  28. package/dist/src/execute/passthrough-engine.js.map +1 -1
  29. package/package.json +1 -1
package/CLAUDE.md CHANGED
@@ -7,9 +7,9 @@
7
7
  ## Architecture
8
8
  - **Interview Engine**: 게슈탈트 원리 기반 Q&A로 해상도 점수를 0.8 이상으로 높임
9
9
  - **Spec Generator**: 완료된 인터뷰에서 구조화된 프로젝트 스펙(Spec) 생성
10
- - **Execute Engine**: Spec→ExecutionPlan 변환 (Figure-Ground→Closure→Proximity→Continuity)
10
+ - **Execute Engine**: Spec→ExecutionPlan 변환 (Figure-Ground→Closure→Proximity→Continuity). 설계상 **항상 Passthrough 모드** — Claude Code가 도구(Bash/Edit 등)로 실제 파일 수정·코드 실행을 수행하므로 LLM 주체가 됨 (API 키 유무 무관)
11
11
  - **Resilience Engine**: Stagnation 감지 → Lateral Thinking Personas → Human Escalation
12
- - **MCP Server**: stdio transport, API 키 없으면 Passthrough 모드 자동 활성화
12
+ - **MCP Server**: stdio transport, API 키 없으면 Passthrough 모드 자동 활성화 (Execute는 항상 Passthrough)
13
13
  - **Skill System**: SKILL.md 기반 확장, chokidar hot-reload
14
14
  - **Code Knowledge Graph**: 정적 분석 → 의존성 그래프 → Blast-Radius 영향 파일 추출
15
15
  - **Event Store**: better-sqlite3 WAL 모드 이벤트 소싱
package/README.ko.md CHANGED
@@ -79,6 +79,8 @@ Gestalt는 코드를 작성하기 전에 요구사항을 함께 구체화해줘
79
79
 
80
80
  Gestalt는 **MCP 서버**로 실행돼요. Claude Code를 통해 사용할 경우 Claude Code가 LLM 역할을 담당해요 — Gestalt는 프롬프트와 컨텍스트를 반환하고, 실제 추론은 Claude Code가 해요. 서버 자체는 별도 API 호출을 하지 않아요.
81
81
 
82
+ > **참고해 주세요** — Execute 단계는 API 키 설정 여부와 무관하게 **항상 Passthrough 모드**로 동작해요. Execute는 Claude Code의 도구(Bash, Edit 등)로 실제 파일 수정과 코드 실행을 수행하기 때문에, Claude Code가 LLM 주체가 되는 게 설계 의도예요. 자체 LLM으로 대체하는 모드는 따로 없어요(미구현이 아니라 설계상 그래요).
83
+
82
84
  ```
83
85
  Claude Code
84
86
 
@@ -286,6 +288,8 @@ Spec에서 실행 계획을 만들어 실행해요:
286
288
  /execute
287
289
  ```
288
290
 
291
+ > Execute는 **항상 Passthrough 모드**로 동작해요 — 실제 파일 수정과 코드 실행은 Claude Code가 도구(Bash, Edit 등)로 수행해요. API 키를 설정해도 Execute가 자체 LLM 모드로 바뀌지 않아요. 그런 모드는 설계상 존재하지 않아요.
292
+
289
293
  **Planning 단계**에서 4가지 게슈탈트 원리를 고정 순서로 적용해요:
290
294
 
291
295
  | 단계 | 원리 | 역할 |
package/README.md CHANGED
@@ -96,6 +96,8 @@ Gestalt addresses this before any code is written. It runs a structured intervie
96
96
 
97
97
  Gestalt runs as an MCP server. Claude Code acts as the LLM: Gestalt returns prompts and context, and Claude Code does the reasoning. The server makes no API calls.
98
98
 
99
+ > **Note:** The Execute stage **always runs in Passthrough mode**, regardless of whether an API key is configured. Execute carries out real file edits and code execution through Claude Code's tools (Bash, Edit, etc.), so Claude Code must be the LLM that drives it — this is by design, not a missing feature.
100
+
99
101
  ```
100
102
  You (in Claude Code)
101
103
 
@@ -273,6 +275,8 @@ Transform the Spec into a dependency-aware execution plan and run it:
273
275
  /execute
274
276
  ```
275
277
 
278
+ > Execute **always runs in Passthrough mode** — Claude Code performs the actual file edits and code execution through its tools (Bash, Edit, etc.). Configuring an API key does not switch Execute to a self-contained LLM mode; there is no such mode by design.
279
+
276
280
  **Planning** applies four Gestalt principles in a fixed sequence:
277
281
 
278
282
  | Step | Principle | What it does |
package/dist/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@tienne/gestalt",
3
- "version": "0.15.1",
3
+ "version": "0.15.2",
4
4
  "description": "TypeScript AI Development Harness - Gestalt psychology-driven requirement clarification",
5
5
  "type": "module",
6
6
  "main": "./dist/src/index.js",
@@ -0,0 +1,27 @@
1
+ import type { EvaluationResult, StructuralResult } from '../../core/types.js';
2
+ import { ExecuteError } from '../../core/errors.js';
3
+ import { type Result } from '../../core/result.js';
4
+ import { EventStore } from '../../events/store.js';
5
+ import { ExecuteSessionManager } from '../session.js';
6
+ import type { AgentRegistry } from '../../agent/registry.js';
7
+ import type { RoleAgentRegistry } from '../../agent/role-agent-registry.js';
8
+ import type { PassthroughEvaluateResult } from './types.js';
9
+ export declare class EvaluationOrchestrator {
10
+ private sessionManager;
11
+ private agentRegistry?;
12
+ constructor(sessionManager: ExecuteSessionManager, _eventStore: EventStore, agentRegistry?: AgentRegistry | undefined, _roleAgentRegistry?: RoleAgentRegistry);
13
+ /**
14
+ * Call 1: Start evaluation → returns structural commands to run.
15
+ */
16
+ startEvaluation(sessionId: string): Result<PassthroughEvaluateResult, ExecuteError>;
17
+ /**
18
+ * Call 2: Submit structural results → returns contextual context or short-circuits.
19
+ */
20
+ submitStructuralResult(sessionId: string, structuralResult: StructuralResult): Result<PassthroughEvaluateResult, ExecuteError>;
21
+ /**
22
+ * Call 3: Submit contextual evaluation result → completes session.
23
+ */
24
+ submitEvaluation(sessionId: string, evaluationResult: EvaluationResult): Result<PassthroughEvaluateResult, ExecuteError>;
25
+ private buildContextualEvaluateContext;
26
+ }
27
+ //# sourceMappingURL=evaluation.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"evaluation.d.ts","sourceRoot":"","sources":["../../../../src/execute/orchestrators/evaluation.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAkB,gBAAgB,EAAqB,gBAAgB,EAAE,MAAM,qBAAqB,CAAC;AACjH,OAAO,EAAE,YAAY,EAAgD,MAAM,sBAAsB,CAAC;AAClG,OAAO,EAAE,KAAK,MAAM,EAAW,MAAM,sBAAsB,CAAC;AAC5D,OAAO,EAAE,UAAU,EAAE,MAAM,uBAAuB,CAAC;AACnD,OAAO,EAAE,qBAAqB,EAAE,MAAM,eAAe,CAAC;AAKtD,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,yBAAyB,CAAC;AAG7D,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,oCAAoC,CAAC;AAC5E,OAAO,KAAK,EAA6B,yBAAyB,EAAE,MAAM,YAAY,CAAC;AAEvF,qBAAa,sBAAsB;IAE/B,OAAO,CAAC,cAAc;IAEtB,OAAO,CAAC,aAAa,CAAC;gBAFd,cAAc,EAAE,qBAAqB,EAC7C,WAAW,EAAE,UAAU,EACf,aAAa,CAAC,EAAE,aAAa,YAAA,EACrC,kBAAkB,CAAC,EAAE,iBAAiB;IAGxC;;OAEG;IACH,eAAe,CAAC,SAAS,EAAE,MAAM,GAAG,MAAM,CAAC,yBAAyB,EAAE,YAAY,CAAC;IA2EnF;;OAEG;IACH,sBAAsB,CACpB,SAAS,EAAE,MAAM,EACjB,gBAAgB,EAAE,gBAAgB,GACjC,MAAM,CAAC,yBAAyB,EAAE,YAAY,CAAC;IAsDlD;;OAEG;IACH,gBAAgB,CACd,SAAS,EAAE,MAAM,EACjB,gBAAgB,EAAE,gBAAgB,GACjC,MAAM,CAAC,yBAAyB,EAAE,YAAY,CAAC;IAsDlD,OAAO,CAAC,8BAA8B;CAwBvC"}
@@ -0,0 +1,169 @@
1
+ import { ExecuteSessionNotFoundError, EvaluationError } from '../../core/errors.js';
2
+ import { ok, err } from '../../core/result.js';
3
+ import { EXECUTE_EVALUATION_SYSTEM_PROMPT, buildContextualEvaluationPrompt, } from '../prompts.js';
4
+ import { mergeSystemPrompt } from '../../agent/prompt-resolver.js';
5
+ import { codeGraphEngine } from '../../code-graph/index.js';
6
+ export class EvaluationOrchestrator {
7
+ sessionManager;
8
+ agentRegistry;
9
+ constructor(sessionManager, _eventStore, agentRegistry, _roleAgentRegistry) {
10
+ this.sessionManager = sessionManager;
11
+ this.agentRegistry = agentRegistry;
12
+ }
13
+ /**
14
+ * Call 1: Start evaluation → returns structural commands to run.
15
+ */
16
+ startEvaluation(sessionId) {
17
+ try {
18
+ const session = this.sessionManager.get(sessionId);
19
+ if (session.status !== 'executing') {
20
+ return err(new EvaluationError(`Cannot start evaluation: session status is "${session.status}", expected "executing"`));
21
+ }
22
+ if (!session.executionPlan) {
23
+ return err(new EvaluationError('No execution plan found'));
24
+ }
25
+ this.sessionManager.startStructuralEvaluation(sessionId);
26
+ let commands = [
27
+ { name: 'lint', command: 'npm run lint' },
28
+ { name: 'build', command: 'npm run build' },
29
+ { name: 'test', command: 'npm test' },
30
+ ];
31
+ // blast-radius 기반 테스트 필터링: codeGraphRepoRoot가 설정되고 DB가 존재할 때
32
+ if (session.codeGraphRepoRoot && codeGraphEngine.dbExists(session.codeGraphRepoRoot)) {
33
+ try {
34
+ const blastResult = codeGraphEngine.blastRadius(session.codeGraphRepoRoot, {
35
+ base: 'HEAD~1',
36
+ });
37
+ const testFiles = blastResult.impactedFiles.filter((f) => f.includes('.test.') || f.includes('.spec.') || f.includes('__tests__'));
38
+ if (testFiles.length > 0) {
39
+ commands = commands.map((cmd) => {
40
+ if (cmd.name === 'test') {
41
+ return { ...cmd, command: `${cmd.command} -- ${testFiles.join(' ')}` };
42
+ }
43
+ return cmd;
44
+ });
45
+ }
46
+ else {
47
+ // 변경된 테스트 파일 없음 → 테스트 스킵
48
+ commands = commands.map((cmd) => {
49
+ if (cmd.name === 'test') {
50
+ return { ...cmd, command: 'echo "No affected tests"' };
51
+ }
52
+ return cmd;
53
+ });
54
+ }
55
+ }
56
+ catch {
57
+ // blast-radius 실패 시 기존 전체 테스트로 fallback (graceful degradation)
58
+ }
59
+ }
60
+ return ok({
61
+ session: this.sessionManager.get(sessionId),
62
+ stage: 'structural',
63
+ structuralContext: {
64
+ phase: 'evaluating',
65
+ stage: 'structural',
66
+ commands,
67
+ message: 'Run these structural checks and submit results. Adapt commands to your project (e.g., pnpm/yarn). All must pass to proceed to contextual evaluation.',
68
+ },
69
+ });
70
+ }
71
+ catch (e) {
72
+ if (e instanceof ExecuteSessionNotFoundError)
73
+ return err(e);
74
+ return err(new EvaluationError(`Failed to start evaluation: ${e instanceof Error ? e.message : String(e)}`));
75
+ }
76
+ }
77
+ /**
78
+ * Call 2: Submit structural results → returns contextual context or short-circuits.
79
+ */
80
+ submitStructuralResult(sessionId, structuralResult) {
81
+ try {
82
+ const session = this.sessionManager.get(sessionId);
83
+ if (session.status !== 'executing' || session.evaluateStage !== 'structural') {
84
+ return err(new EvaluationError(`Cannot submit structural result: expected stage "structural", got "${session.evaluateStage ?? 'none'}"`));
85
+ }
86
+ this.sessionManager.completeStructuralStage(sessionId, structuralResult);
87
+ // Short-circuit if structural checks failed
88
+ if (!structuralResult.allPassed) {
89
+ const failedCommands = structuralResult.commands
90
+ .filter((c) => c.exitCode !== 0)
91
+ .map((c) => `${c.name} (exit ${c.exitCode})`)
92
+ .join(', ');
93
+ this.sessionManager.shortCircuitEvaluation(sessionId, `Structural checks failed: ${failedCommands}`);
94
+ return ok({
95
+ session: this.sessionManager.get(sessionId),
96
+ stage: 'complete',
97
+ shortCircuited: true,
98
+ evaluationResult: this.sessionManager.get(sessionId).evaluationResult,
99
+ });
100
+ }
101
+ // Structural passed → advance to contextual stage
102
+ this.sessionManager.startContextualEvaluation(sessionId);
103
+ const updatedSession = this.sessionManager.get(sessionId);
104
+ const contextualContext = this.buildContextualEvaluateContext(updatedSession);
105
+ return ok({
106
+ session: updatedSession,
107
+ stage: 'contextual',
108
+ contextualContext,
109
+ });
110
+ }
111
+ catch (e) {
112
+ if (e instanceof ExecuteSessionNotFoundError)
113
+ return err(e);
114
+ return err(new EvaluationError(`Failed to submit structural result: ${e instanceof Error ? e.message : String(e)}`));
115
+ }
116
+ }
117
+ /**
118
+ * Call 3: Submit contextual evaluation result → completes session.
119
+ */
120
+ submitEvaluation(sessionId, evaluationResult) {
121
+ try {
122
+ const session = this.sessionManager.get(sessionId);
123
+ if (session.status !== 'executing' || session.evaluateStage !== 'contextual') {
124
+ return err(new EvaluationError(`Cannot submit evaluation: expected stage "contextual", got "${session.evaluateStage ?? 'none'}"`));
125
+ }
126
+ // Validate evaluation covers all ACs
127
+ const acCount = session.spec.acceptanceCriteria.length;
128
+ const verifiedIndices = new Set(evaluationResult.verifications.map((v) => v.acIndex));
129
+ for (let i = 0; i < acCount; i++) {
130
+ if (!verifiedIndices.has(i)) {
131
+ return err(new EvaluationError(`AC index ${i} is not verified`));
132
+ }
133
+ }
134
+ // Validate score ranges
135
+ if (evaluationResult.overallScore < 0 || evaluationResult.overallScore > 1) {
136
+ return err(new EvaluationError(`overallScore must be between 0 and 1, got ${evaluationResult.overallScore}`));
137
+ }
138
+ if (evaluationResult.goalAlignment < 0 || evaluationResult.goalAlignment > 1) {
139
+ return err(new EvaluationError(`goalAlignment must be between 0 and 1, got ${evaluationResult.goalAlignment}`));
140
+ }
141
+ this.sessionManager.completeEvaluation(sessionId, evaluationResult);
142
+ return ok({
143
+ session: this.sessionManager.get(sessionId),
144
+ stage: 'complete',
145
+ evaluationResult,
146
+ });
147
+ }
148
+ catch (e) {
149
+ if (e instanceof ExecuteSessionNotFoundError)
150
+ return err(e);
151
+ return err(new EvaluationError(`Failed to submit evaluation: ${e instanceof Error ? e.message : String(e)}`));
152
+ }
153
+ }
154
+ buildContextualEvaluateContext(session) {
155
+ const plan = session.executionPlan;
156
+ const evaluatePrompt = buildContextualEvaluationPrompt(session.spec, plan.classifiedACs, session.taskResults, session.structuralResult);
157
+ return {
158
+ systemPrompt: mergeSystemPrompt(EXECUTE_EVALUATION_SYSTEM_PROMPT, this.agentRegistry, 'evaluate'),
159
+ evaluatePrompt,
160
+ phase: 'evaluating',
161
+ stage: 'contextual',
162
+ spec: session.spec,
163
+ taskResults: session.taskResults,
164
+ classifiedACs: plan.classifiedACs,
165
+ structuralResult: session.structuralResult,
166
+ };
167
+ }
168
+ }
169
+ //# sourceMappingURL=evaluation.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"evaluation.js","sourceRoot":"","sources":["../../../../src/execute/orchestrators/evaluation.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,50 @@
1
+ import type { TaskExecutionResult, FixTask, SpecPatch } from '../../core/types.js';
2
+ import { ExecuteError } from '../../core/errors.js';
3
+ import { type Result } from '../../core/result.js';
4
+ import { EventStore } from '../../events/store.js';
5
+ import { ExecuteSessionManager } from '../session.js';
6
+ import type { AgentRegistry } from '../../agent/registry.js';
7
+ import type { LateralResult } from '../../resilience/types.js';
8
+ import type { RoleAgentRegistry } from '../../agent/role-agent-registry.js';
9
+ import type { PassthroughEvolveFixResult, PassthroughEvolvePatchResult, PassthroughReExecuteResult } from './types.js';
10
+ export declare class EvolutionOrchestrator {
11
+ private sessionManager;
12
+ private eventStore;
13
+ private agentRegistry?;
14
+ constructor(sessionManager: ExecuteSessionManager, eventStore: EventStore, agentRegistry?: AgentRegistry | undefined, _roleAgentRegistry?: RoleAgentRegistry);
15
+ /**
16
+ * evolve_fix: Structural 실패 시 fix context를 반환하거나, fix 결과를 제출한다.
17
+ * - fixTasks 없으면: fixContext 반환 (caller가 fix 생성)
18
+ * - fixTasks 있으면: fix 기록 후 re-evaluate를 위한 상태 복원
19
+ */
20
+ startStructuralFix(sessionId: string, fixTasks?: FixTask[]): Result<PassthroughEvolveFixResult, ExecuteError>;
21
+ /**
22
+ * evolve: Contextual evolution 시작.
23
+ * - evaluationResult에서 gap 분석 후 evolveContext 반환
24
+ * - caller가 SpecPatch를 생성
25
+ * - terminateReason='caller'이면 즉시 종료
26
+ */
27
+ startContextualEvolve(sessionId: string, terminateReason?: 'caller'): Result<PassthroughEvolveFixResult, ExecuteError>;
28
+ /**
29
+ * evolve_patch: Spec 패치 제출 → 검증 → 적용 → impacted tasks 식별 → re-execute context 반환
30
+ */
31
+ submitSpecPatch(sessionId: string, patch: SpecPatch): Result<PassthroughEvolvePatchResult, ExecuteError>;
32
+ /**
33
+ * evolve_re_execute: Re-execution 중 태스크 결과 제출
34
+ */
35
+ submitReExecuteTaskResult(sessionId: string, taskResult: TaskExecutionResult): Result<PassthroughReExecuteResult, ExecuteError>;
36
+ /**
37
+ * evolve_lateral: 다음 lateral persona를 suggest하거나 human_escalation 반환.
38
+ * evolve에서 자동 분기되지만, caller가 명시적으로 다음 persona를 요청할 때도 사용.
39
+ */
40
+ startLateralEvolve(sessionId: string): Result<PassthroughEvolveFixResult, ExecuteError>;
41
+ /**
42
+ * evolve_lateral_result: Lateral thinking 결과(specPatch) 제출.
43
+ * completeLateral() 후 기존 submitSpecPatch() 위임.
44
+ */
45
+ submitLateralResult(sessionId: string, lateralResult: LateralResult): Result<PassthroughEvolvePatchResult, ExecuteError>;
46
+ private countStructuralFixes;
47
+ private buildReExecuteContext;
48
+ private buildNextReExecuteTaskContext;
49
+ }
50
+ //# sourceMappingURL=evolution.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"evolution.d.ts","sourceRoot":"","sources":["../../../../src/execute/orchestrators/evolution.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAkB,mBAAmB,EAAE,OAAO,EAAE,SAAS,EAAE,MAAM,qBAAqB,CAAC;AACnG,OAAO,EACL,YAAY,EAGb,MAAM,sBAAsB,CAAC;AAC9B,OAAO,EAAE,KAAK,MAAM,EAAW,MAAM,sBAAsB,CAAC;AAC5D,OAAO,EAAE,UAAU,EAAE,MAAM,uBAAuB,CAAC;AAEnD,OAAO,EAAE,qBAAqB,EAAE,MAAM,eAAe,CAAC;AActD,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,yBAAyB,CAAC;AAQ7D,OAAO,KAAK,EAAE,aAAa,EAAsB,MAAM,2BAA2B,CAAC;AACnF,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,oCAAoC,CAAC;AAC5E,OAAO,KAAK,EAEV,0BAA0B,EAC1B,4BAA4B,EAC5B,0BAA0B,EAC3B,MAAM,YAAY,CAAC;AAEpB,qBAAa,qBAAqB;IAE9B,OAAO,CAAC,cAAc;IACtB,OAAO,CAAC,UAAU;IAClB,OAAO,CAAC,aAAa,CAAC;gBAFd,cAAc,EAAE,qBAAqB,EACrC,UAAU,EAAE,UAAU,EACtB,aAAa,CAAC,EAAE,aAAa,YAAA,EACrC,kBAAkB,CAAC,EAAE,iBAAiB;IAGxC;;;;OAIG;IACH,kBAAkB,CAChB,SAAS,EAAE,MAAM,EACjB,QAAQ,CAAC,EAAE,OAAO,EAAE,GACnB,MAAM,CAAC,0BAA0B,EAAE,YAAY,CAAC;IAmDnD;;;;;OAKG;IACH,qBAAqB,CACnB,SAAS,EAAE,MAAM,EACjB,eAAe,CAAC,EAAE,QAAQ,GACzB,MAAM,CAAC,0BAA0B,EAAE,YAAY,CAAC;IAoHnD;;OAEG;IACH,eAAe,CACb,SAAS,EAAE,MAAM,EACjB,KAAK,EAAE,SAAS,GACf,MAAM,CAAC,4BAA4B,EAAE,YAAY,CAAC;IAqErD;;OAEG;IACH,yBAAyB,CACvB,SAAS,EAAE,MAAM,EACjB,UAAU,EAAE,mBAAmB,GAC9B,MAAM,CAAC,0BAA0B,EAAE,YAAY,CAAC;IAoCnD;;;OAGG;IACH,kBAAkB,CAAC,SAAS,EAAE,MAAM,GAAG,MAAM,CAAC,0BAA0B,EAAE,YAAY,CAAC;IAkFvF;;;OAGG;IACH,mBAAmB,CACjB,SAAS,EAAE,MAAM,EACjB,aAAa,EAAE,aAAa,GAC3B,MAAM,CAAC,4BAA4B,EAAE,YAAY,CAAC;IAwBrD,OAAO,CAAC,oBAAoB;IAM5B,OAAO,CAAC,qBAAqB;IA6C7B,OAAO,CAAC,6BAA6B;CA4CtC"}