@tienne/gestalt 0.1.0 → 0.2.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (79) hide show
  1. package/CLAUDE.md +121 -6
  2. package/README.md +90 -12
  3. package/dist/bin/gestalt.js +0 -0
  4. package/dist/package.json +57 -0
  5. package/dist/schemas/gestalt.schema.json +98 -0
  6. package/dist/src/cli/commands/interview.js +2 -2
  7. package/dist/src/cli/commands/interview.js.map +1 -1
  8. package/dist/src/cli/commands/setup.d.ts +2 -0
  9. package/dist/src/cli/commands/setup.d.ts.map +1 -0
  10. package/dist/src/cli/commands/setup.js +20 -0
  11. package/dist/src/cli/commands/setup.js.map +1 -0
  12. package/dist/src/cli/commands/spec.js +2 -2
  13. package/dist/src/cli/commands/spec.js.map +1 -1
  14. package/dist/src/cli/commands/status.d.ts.map +1 -1
  15. package/dist/src/cli/commands/status.js +3 -3
  16. package/dist/src/cli/commands/status.js.map +1 -1
  17. package/dist/src/cli/index.d.ts.map +1 -1
  18. package/dist/src/cli/index.js +9 -1
  19. package/dist/src/cli/index.js.map +1 -1
  20. package/dist/src/core/config.d.ts +77 -17
  21. package/dist/src/core/config.d.ts.map +1 -1
  22. package/dist/src/core/config.js +137 -31
  23. package/dist/src/core/config.js.map +1 -1
  24. package/dist/src/core/constants.d.ts +2 -2
  25. package/dist/src/core/constants.d.ts.map +1 -1
  26. package/dist/src/core/constants.js +2 -2
  27. package/dist/src/core/constants.js.map +1 -1
  28. package/dist/src/core/types.d.ts +6 -2
  29. package/dist/src/core/types.d.ts.map +1 -1
  30. package/dist/src/core/version.d.ts +10 -0
  31. package/dist/src/core/version.d.ts.map +1 -0
  32. package/dist/src/core/version.js +89 -0
  33. package/dist/src/core/version.js.map +1 -0
  34. package/dist/src/events/types.d.ts +4 -1
  35. package/dist/src/events/types.d.ts.map +1 -1
  36. package/dist/src/events/types.js +4 -0
  37. package/dist/src/events/types.js.map +1 -1
  38. package/dist/src/execute/passthrough-engine.d.ts +13 -0
  39. package/dist/src/execute/passthrough-engine.d.ts.map +1 -1
  40. package/dist/src/execute/passthrough-engine.js +117 -2
  41. package/dist/src/execute/passthrough-engine.js.map +1 -1
  42. package/dist/src/execute/repository.d.ts.map +1 -1
  43. package/dist/src/execute/repository.js +24 -0
  44. package/dist/src/execute/repository.js.map +1 -1
  45. package/dist/src/execute/session.d.ts +2 -0
  46. package/dist/src/execute/session.d.ts.map +1 -1
  47. package/dist/src/execute/session.js +31 -0
  48. package/dist/src/execute/session.js.map +1 -1
  49. package/dist/src/mcp/schemas.d.ts +169 -3
  50. package/dist/src/mcp/schemas.d.ts.map +1 -1
  51. package/dist/src/mcp/schemas.js +21 -0
  52. package/dist/src/mcp/schemas.js.map +1 -1
  53. package/dist/src/mcp/server.d.ts.map +1 -1
  54. package/dist/src/mcp/server.js +43 -6
  55. package/dist/src/mcp/server.js.map +1 -1
  56. package/dist/src/mcp/tools/execute-passthrough.d.ts.map +1 -1
  57. package/dist/src/mcp/tools/execute-passthrough.js +76 -0
  58. package/dist/src/mcp/tools/execute-passthrough.js.map +1 -1
  59. package/dist/src/mcp/tools/status.d.ts.map +1 -1
  60. package/dist/src/mcp/tools/status.js +9 -1
  61. package/dist/src/mcp/tools/status.js.map +1 -1
  62. package/dist/src/resilience/lateral.d.ts +17 -0
  63. package/dist/src/resilience/lateral.d.ts.map +1 -0
  64. package/dist/src/resilience/lateral.js +62 -0
  65. package/dist/src/resilience/lateral.js.map +1 -0
  66. package/dist/src/resilience/prompts.d.ts +5 -0
  67. package/dist/src/resilience/prompts.d.ts.map +1 -0
  68. package/dist/src/resilience/prompts.js +130 -0
  69. package/dist/src/resilience/prompts.js.map +1 -0
  70. package/dist/src/resilience/stagnation-detector.d.ts +19 -0
  71. package/dist/src/resilience/stagnation-detector.d.ts.map +1 -0
  72. package/dist/src/resilience/stagnation-detector.js +38 -0
  73. package/dist/src/resilience/stagnation-detector.js.map +1 -0
  74. package/dist/src/resilience/types.d.ts +39 -0
  75. package/dist/src/resilience/types.d.ts.map +1 -0
  76. package/dist/src/resilience/types.js +17 -0
  77. package/dist/src/resilience/types.js.map +1 -0
  78. package/package.json +7 -3
  79. package/schemas/gestalt.schema.json +98 -0
package/CLAUDE.md CHANGED
@@ -8,13 +8,14 @@
8
8
  - **Interview Engine**: 게슈탈트 원리 기반 Q&A로 모호성 점수를 0.2 이하로 낮춤
9
9
  - **Spec Generator**: 완료된 인터뷰에서 구조화된 프로젝트 스펙(Spec) 생성
10
10
  - **Execute Engine**: 게슈탈트 5원리를 실행 전략으로 사용, Spec→ExecutionPlan 변환 (Figure-Ground→Closure→Proximity→Continuity)
11
+ - **Resilience Engine**: Stagnation 감지 → Lateral Thinking Personas → Human Escalation
11
12
  - **MCP Server**: stdio transport로 Claude Code 등 AI 에이전트와 통합
12
13
  - **Skill System**: SKILL.md 기반 확장, chokidar hot-reload 지원
13
14
  - **Event Store**: better-sqlite3 WAL 모드 이벤트 소싱
14
15
 
15
16
  ## Tech Stack
16
17
  TypeScript 5.x / ESM / pnpm / vitest
17
- Dependencies: @anthropic-ai/sdk, @modelcontextprotocol/sdk, better-sqlite3, zod, chokidar, commander, gray-matter
18
+ Dependencies: @anthropic-ai/sdk, @modelcontextprotocol/sdk, better-sqlite3, zod, chokidar, commander, gray-matter, dotenv
18
19
 
19
20
  ## Key Commands
20
21
  ```bash
@@ -23,25 +24,92 @@ pnpm run serve # Start MCP server
23
24
  pnpm tsx bin/gestalt.ts interview "topic" # Interactive interview
24
25
  pnpm tsx bin/gestalt.ts spec <session-id> # Generate spec
25
26
  pnpm tsx bin/gestalt.ts status # Check sessions
27
+ pnpm tsx bin/gestalt.ts setup # Generate gestalt.json config
26
28
  ```
27
29
 
30
+ ## Configuration
31
+
32
+ 설정값은 다음 우선순위로 merge된다 (높→낮):
33
+ 1. `loadConfig(overrides)` — 코드에서 직접 전달
34
+ 2. Shell 환경변수 (`export GESTALT_*`)
35
+ 3. `.env` 파일 (dotenv)
36
+ 4. `gestalt.json` 파일
37
+ 5. 기본값
38
+
39
+ ### gestalt.json
40
+ `gestalt setup` 명령어로 생성. JSON Schema로 IDE 자동완성 지원.
41
+
42
+ ```json
43
+ {
44
+ "$schema": "./node_modules/@tienne/gestalt/schemas/gestalt.schema.json",
45
+ "llm": { "apiKey": "", "model": "claude-sonnet-4-20250514" },
46
+ "interview": { "ambiguityThreshold": 0.2, "maxRounds": 10 },
47
+ "execute": { "driftThreshold": 0.3, "successThreshold": 0.85, "goalAlignmentThreshold": 0.80 },
48
+ "dbPath": ".gestalt/gestalt.db",
49
+ "logLevel": "info"
50
+ }
51
+ ```
52
+
53
+ ### GestaltConfig 구조 (nested)
54
+
55
+ ```typescript
56
+ interface GestaltConfig {
57
+ llm: { apiKey: string; model: string };
58
+ interview: { ambiguityThreshold: number; maxRounds: number };
59
+ execute: { driftThreshold: number; successThreshold: number; goalAlignmentThreshold: number };
60
+ dbPath: string;
61
+ skillsDir: string;
62
+ agentsDir: string;
63
+ logLevel: 'debug' | 'info' | 'warn' | 'error';
64
+ }
65
+ ```
66
+
67
+ ### 환경변수 매핑
68
+
69
+ | 환경변수 | Config 경로 | 기본값 |
70
+ |----------|-------------|--------|
71
+ | `ANTHROPIC_API_KEY` | `llm.apiKey` | `""` |
72
+ | `GESTALT_MODEL` | `llm.model` | `"claude-sonnet-4-20250514"` |
73
+ | `GESTALT_AMBIGUITY_THRESHOLD` | `interview.ambiguityThreshold` | `0.2` |
74
+ | `GESTALT_MAX_ROUNDS` | `interview.maxRounds` | `10` |
75
+ | `GESTALT_DRIFT_THRESHOLD` | `execute.driftThreshold` | `0.3` |
76
+ | `GESTALT_EVOLVE_SUCCESS_THRESHOLD` | `execute.successThreshold` | `0.85` |
77
+ | `GESTALT_EVOLVE_GOAL_ALIGNMENT_THRESHOLD` | `execute.goalAlignmentThreshold` | `0.80` |
78
+ | `GESTALT_DB_PATH` | `dbPath` | `"~/.gestalt/events.db"` |
79
+ | `GESTALT_SKILLS_DIR` | `skillsDir` | `"skills"` |
80
+ | `GESTALT_AGENTS_DIR` | `agentsDir` | `"agents"` |
81
+ | `GESTALT_LOG_LEVEL` | `logLevel` | `"info"` |
82
+
83
+ 잘못된 설정값은 경고를 출력하고 기본값으로 fallback한다 (에러를 throw하지 않음).
84
+
28
85
  ## MCP Tools
29
86
  - `ges_interview`: action=[start|respond|score|complete]
30
87
  - `ges_generate_spec`: sessionId, force?
31
- - `ges_execute`: action=[start|plan_step|plan_complete|execute_start|execute_task|evaluate|status|evolve_fix|evolve|evolve_patch|evolve_re_execute]
88
+ - `ges_execute`: action=[start|plan_step|plan_complete|execute_start|execute_task|evaluate|status|evolve_fix|evolve|evolve_patch|evolve_re_execute|evolve_lateral|evolve_lateral_result]
32
89
  - `ges_status`: sessionId?
33
90
 
34
91
  ## MCP Passthrough Mode
35
92
 
36
93
  API 키(`ANTHROPIC_API_KEY`) 없이 MCP 서버 실행 시 자동 활성화. LLM 호출을 서버가 하지 않고, caller(Claude Code 등)에게 위임한다.
37
94
 
38
- ### 설정 (claude_desktop_config.json / settings.json)
95
+ ### 설치 방법
96
+
97
+ **Claude Plugin (Recommended)**
98
+ ```bash
99
+ # 1. 마켓플레이스 등록 (최초 1회)
100
+ /plugin marketplace add tienne/gestalt
101
+
102
+ # 2. 플러그인 설치
103
+ /plugin install gestalt@gestalt
104
+ ```
105
+
106
+ **MCP 직접 설정** (claude_desktop_config.json / settings.json)
39
107
  ```json
40
108
  {
41
109
  "mcpServers": {
42
110
  "gestalt": {
43
111
  "command": "npx",
44
- "args": ["tsx", "bin/gestalt.ts", "serve"]
112
+ "args": ["-y", "@tienne/gestalt"]
45
113
  }
46
114
  }
47
115
  }
@@ -173,9 +241,52 @@ ges_execute({ action: "evaluate", sessionId: "<id>" })
173
241
  ```
174
242
 
175
243
  **Spec Patch 범위**: L1(AC)+L2(constraints) 자유, L3(ontology) 추가/변경만, L4(goal) 금지
176
- **종료 조건**: success(≥0.85, ≥0.80), stagnation, oscillation, hard_cap(3+3), caller
244
+ **종료 조건**: success(≥0.85, ≥0.80), stagnation, oscillation, hard_cap(3+3), caller, human_escalation
177
245
  **Caller 종료**: `ges_execute({ action: "evolve", sessionId: "<id>", terminateReason: "caller" })`
178
246
 
247
+ **Flow C: Lateral Thinking** (evolution stagnation/oscillation/hard_cap 감지 시 자동 분기)
248
+
249
+ evolve 호출 시 non-success termination이 감지되면 즉시 종료하는 대신 lateral thinking persona로 자동 분기한다.
250
+
251
+ ```
252
+ // 1. evolve 호출 → lateralContext 자동 반환 (stagnation 시)
253
+ ges_execute({ action: "evolve", sessionId: "<id>" })
254
+ → { status: "lateral_thinking", lateralContext: { persona, pattern, systemPrompt, lateralPrompt, ... } }
255
+
256
+ // 2. Lateral result 제출 (caller가 persona 관점으로 specPatch 생성)
257
+ ges_execute({
258
+ action: "evolve_lateral_result",
259
+ sessionId: "<id>",
260
+ lateralResult: {
261
+ persona: "multistability",
262
+ specPatch: { acceptanceCriteria: [...], constraints: [...] },
263
+ description: "관점 전환으로 요구사항 재구성"
264
+ }
265
+ })
266
+ → impactedTaskIds + reExecuteContext 반환
267
+
268
+ // 3. Impacted tasks 재실행 (기존 action 재사용)
269
+ ges_execute({ action: "evolve_re_execute", sessionId: "<id>", reExecuteTaskResult: {...} })
270
+ → 반복...
271
+
272
+ // 4. Re-evaluate
273
+ ges_execute({ action: "evaluate", sessionId: "<id>" })
274
+
275
+ // 5. 다음 persona 요청 (점수 미달 시)
276
+ ges_execute({ action: "evolve_lateral", sessionId: "<id>" })
277
+ → 다음 lateralContext (or humanEscalation if 4개 persona 소진)
278
+ ```
279
+
280
+ **Stagnation Pattern → Persona 매핑**:
281
+ | Pattern | Persona | 전략 |
282
+ |---|---|---|
283
+ | spinning (hard_cap) | Multistability | 다른 각도로 보기 |
284
+ | oscillation | Simplicity | 단순하게 줄이기 |
285
+ | no_drift (delta≈0) | Reification | 빠진 조각 채우기 |
286
+ | diminishing_returns (delta↓) | Invariance | 성공 패턴 복제하기 |
287
+
288
+ **Human Escalation**: 4개 persona 모두 소진 시 `humanEscalation` 반환 (triedPersonas, bestScore, suggestions 포함). session은 `status: 'failed'`, `terminationReason: 'human_escalation'`으로 종료.
289
+
179
290
  ### 핵심 규칙
180
291
  - `action: "respond"` 시 `generatedQuestion` **필수**, `ambiguityScore` 선택
181
292
  - ambiguityScore 차원: `goalClarity`, `constraintClarity`, `successCriteria`, `priorityClarity` (필수), `contextClarity` (선택)
@@ -189,11 +300,15 @@ ges_execute({ action: "evaluate", sessionId: "<id>" })
189
300
  - `src/interview/` — InterviewEngine, AmbiguityScorer, SessionManager
190
301
  - `src/spec/` — SpecGenerator, SpecExtractor
191
302
  - `src/execute/` — ExecuteEngine, DAG Validator, ExecuteSessionManager
303
+ - `src/resilience/` — Stagnation Detector, Lateral Thinking Personas, Human Escalation
192
304
  - `src/skills/` — SkillRegistry, parser
305
+ - `src/agent/` — AgentRegistry, FiguralRouter, multi-provider LLM
306
+ - `src/registry/` — BaseRegistry 추상 클래스
193
307
  - `src/mcp/` — MCP 서버 + 툴 핸들러
194
308
  - `src/events/` — EventStore (SQLite)
195
309
  - `src/llm/` — Anthropic SDK adapter
196
- - `src/cli/` — commander 기반 CLI
310
+ - `src/cli/` — commander 기반 CLI (interview, spec, status, setup)
311
+ - `schemas/` — JSON Schema (gestalt.schema.json)
197
312
 
198
313
  ## Conventions
199
314
  - MCP 서버에서 `console.log` 사용 금지 → stderr(`log()` 유틸)
package/README.md CHANGED
@@ -1,19 +1,38 @@
1
- # @tienne/gestalt
1
+ <p align="center">
2
+ <img src="assets/logo.svg" alt="Gestalt" width="600" />
3
+ </p>
2
4
 
3
- Gestalt psychology-driven AI development harness. Transforms scattered requirements into structured, validated specifications through interactive interviews.
5
+ <p align="center">
6
+ <strong>Gestalt psychology-driven AI development harness</strong><br/>
7
+ Transforms scattered requirements into structured, validated specifications through interactive interviews.
8
+ </p>
9
+
10
+ ---
4
11
 
5
12
  ## Installation
6
13
 
7
- ### Claude Code (Recommended)
14
+ ### Claude Plugin (Recommended)
15
+
16
+ ```bash
17
+ # 1. 마켓플레이스 등록 (최초 1회)
18
+ /plugin marketplace add tienne/gestalt
19
+
20
+ # 2. 플러그인 설치
21
+ /plugin install gestalt@gestalt
22
+ ```
23
+
24
+ Skills, agents, MCP tools, and CLAUDE.md are all configured automatically.
25
+
26
+ ### Claude Code MCP
8
27
 
9
28
  ```bash
10
- claude mcp add gestalt -- npx @tienne/gestalt
29
+ claude mcp add gestalt -- npx -y @tienne/gestalt
11
30
  ```
12
31
 
13
32
  ### npx (No Install)
14
33
 
15
34
  ```bash
16
- npx @tienne/gestalt
35
+ npx -y @tienne/gestalt
17
36
  ```
18
37
 
19
38
  ### Global Install
@@ -23,15 +42,56 @@ npm install -g @tienne/gestalt
23
42
  gestalt
24
43
  ```
25
44
 
45
+ ## How It Works
46
+
47
+ ```
48
+ Interview → Spec → Execute → Evaluate → Evolve
49
+
50
+ Lateral Thinking (resilience)
51
+
52
+ Human Escalation (if exhausted)
53
+ ```
54
+
55
+ 1. **Interview** — Gestalt principles guide requirement clarification until ambiguity score drops below 0.2
56
+ 2. **Spec** — Structured specification with goal, constraints, acceptance criteria, and ontology
57
+ 3. **Execute** — 4-phase planning (Figure-Ground → Closure → Proximity → Continuity) produces a dependency-aware execution plan
58
+ 4. **Evaluate** — 2-stage verification (structural + contextual) with evolution loop for iterative improvement
59
+ 5. **Resilience** — Stagnation detection triggers Lateral Thinking Personas for alternative approaches; escalates to human when all personas exhausted
60
+
61
+ ## Gestalt Principles
62
+
63
+ Each letter in the logo represents a core Gestalt principle used throughout the system:
64
+
65
+ | Principle | Role in Gestalt |
66
+ |-----------|----------------|
67
+ | **Closure** | Finds implicit requirements that aren't explicitly stated |
68
+ | **Proximity** | Groups related requirements and tasks by domain |
69
+ | **Continuation** | Validates dependency chains and execution order (DAG) |
70
+ | **Similarity** | Identifies repeating patterns across requirements |
71
+ | **Figure & Ground** | Separates core (figure) from supporting (ground) requirements |
72
+
73
+ ## Lateral Thinking Personas
74
+
75
+ When the evolution loop stagnates, Gestalt classifies the pattern and activates a matching persona:
76
+
77
+ | Stagnation Pattern | Persona | Strategy |
78
+ |--------------------|---------|----------|
79
+ | Spinning (hard cap) | **Multistability** | See from a different angle |
80
+ | Oscillation | **Simplicity** | Simplify and converge |
81
+ | No drift | **Reification** | Fill in missing pieces |
82
+ | Diminishing returns | **Invariance** | Replicate success patterns |
83
+
84
+ All 4 personas are tried sequentially. If none succeed, the system triggers **Human Escalation** with actionable suggestions.
85
+
26
86
  ## MCP Tools
27
87
 
28
- Gestalt exposes 4 MCP tools in passthrough mode (no API key required):
88
+ 4 MCP tools exposed in passthrough mode (no API key required):
29
89
 
30
90
  | Tool | Description |
31
91
  |---|---|
32
92
  | `ges_interview` | Gestalt-driven requirement interview (start, respond, score, complete) |
33
93
  | `ges_generate_spec` | Generate a structured Spec from completed interview |
34
- | `ges_execute` | Execute Spec via Gestalt planning pipeline (plan, execute, evaluate, evolve) |
94
+ | `ges_execute` | Execute Spec via Gestalt pipeline (plan, execute, evaluate, evolve, lateral thinking) |
35
95
  | `ges_status` | Check session status |
36
96
 
37
97
  ## CLI Commands
@@ -42,14 +102,32 @@ gestalt serve # Start MCP server (explicit)
42
102
  gestalt interview "topic" # Interactive interview
43
103
  gestalt spec <session-id> # Generate Spec from interview
44
104
  gestalt status # List all sessions
105
+ gestalt setup # Generate gestalt.json config file
45
106
  ```
46
107
 
47
- ## How It Works
108
+ ## Configuration
109
+
110
+ Run `gestalt setup` to generate a `gestalt.json` configuration file with IDE autocompletion support.
111
+
112
+ ```json
113
+ {
114
+ "$schema": "./node_modules/@tienne/gestalt/schemas/gestalt.schema.json",
115
+ "interview": {
116
+ "ambiguityThreshold": 0.2,
117
+ "maxRounds": 10
118
+ }
119
+ }
120
+ ```
121
+
122
+ Configuration is loaded with the following priority (highest → lowest):
123
+
124
+ 1. Code overrides (`loadConfig(overrides)`)
125
+ 2. Shell environment variables (`GESTALT_*`)
126
+ 3. `.env` file
127
+ 4. `gestalt.json`
128
+ 5. Built-in defaults
48
129
 
49
- 1. **Interview** - Gestalt principles guide requirement clarification until ambiguity score drops below 0.2
50
- 2. **Spec** - Structured specification generated with goal, constraints, acceptance criteria, and ontology
51
- 3. **Execute** - 4-phase planning (Figure-Ground, Closure, Proximity, Continuity) produces a dependency-aware execution plan
52
- 4. **Evaluate** - 2-stage verification (structural + contextual) with evolution loop for iterative improvement
130
+ Invalid values trigger a warning and fall back to defaults.
53
131
 
54
132
  ## Passthrough Mode
55
133
 
File without changes
@@ -0,0 +1,57 @@
1
+ {
2
+ "name": "@tienne/gestalt",
3
+ "version": "0.2.0",
4
+ "description": "TypeScript AI Development Harness - Gestalt psychology-driven requirement clarification",
5
+ "type": "module",
6
+ "main": "./dist/src/index.js",
7
+ "types": "./dist/src/index.d.ts",
8
+ "engines": {
9
+ "node": ">=20.0.0"
10
+ },
11
+ "bin": {
12
+ "gestalt": "./dist/bin/gestalt.js"
13
+ },
14
+ "files": [
15
+ "dist",
16
+ "agents",
17
+ "skills",
18
+ "schemas",
19
+ "CLAUDE.md"
20
+ ],
21
+ "scripts": {
22
+ "dev": "tsx bin/gestalt.ts",
23
+ "build": "tsc",
24
+ "postbuild": "cp -r agents dist/ && cp -r skills dist/ && cp -r schemas dist/ && cp package.json dist/ && chmod +x dist/bin/gestalt.js",
25
+ "prepublishOnly": "pnpm build",
26
+ "test": "vitest run",
27
+ "test:watch": "vitest",
28
+ "serve": "tsx bin/gestalt.ts serve",
29
+ "lint": "tsc --noEmit",
30
+ "version:sync": "tsx scripts/sync-version.ts",
31
+ "postversion": "pnpm run version:sync"
32
+ },
33
+ "dependencies": {
34
+ "@anthropic-ai/sdk": "^0.39.0",
35
+ "@modelcontextprotocol/sdk": "^1.12.1",
36
+ "better-sqlite3": "^11.8.2",
37
+ "chokidar": "^4.0.3",
38
+ "commander": "^13.1.0",
39
+ "dotenv": "^17.3.1",
40
+ "gray-matter": "^4.0.3",
41
+ "openai": "^6.27.0",
42
+ "zod": "^3.24.2"
43
+ },
44
+ "devDependencies": {
45
+ "@types/better-sqlite3": "^7.6.13",
46
+ "@types/node": "^22.13.10",
47
+ "tsx": "^4.19.3",
48
+ "typescript": "^5.8.2",
49
+ "vitest": "^3.0.9"
50
+ },
51
+ "pnpm": {
52
+ "onlyBuiltDependencies": [
53
+ "better-sqlite3",
54
+ "esbuild"
55
+ ]
56
+ }
57
+ }
@@ -0,0 +1,98 @@
1
+ {
2
+ "$schema": "http://json-schema.org/draft-07/schema#",
3
+ "title": "Gestalt Configuration",
4
+ "description": "Configuration file for Gestalt AI Development Harness",
5
+ "type": "object",
6
+ "properties": {
7
+ "$schema": {
8
+ "type": "string",
9
+ "description": "JSON Schema reference for IDE autocompletion"
10
+ },
11
+ "llm": {
12
+ "type": "object",
13
+ "description": "LLM provider settings",
14
+ "properties": {
15
+ "apiKey": {
16
+ "type": "string",
17
+ "description": "Anthropic API key (env: ANTHROPIC_API_KEY)"
18
+ },
19
+ "model": {
20
+ "type": "string",
21
+ "description": "Model to use (env: GESTALT_MODEL)",
22
+ "default": "claude-sonnet-4-20250514"
23
+ }
24
+ },
25
+ "additionalProperties": false
26
+ },
27
+ "interview": {
28
+ "type": "object",
29
+ "description": "Interview engine settings",
30
+ "properties": {
31
+ "ambiguityThreshold": {
32
+ "type": "number",
33
+ "minimum": 0,
34
+ "maximum": 1,
35
+ "description": "Ambiguity threshold below which requirements are considered clear (env: GESTALT_AMBIGUITY_THRESHOLD)",
36
+ "default": 0.2
37
+ },
38
+ "maxRounds": {
39
+ "type": "integer",
40
+ "minimum": 1,
41
+ "description": "Maximum number of interview rounds (env: GESTALT_MAX_ROUNDS)",
42
+ "default": 10
43
+ }
44
+ },
45
+ "additionalProperties": false
46
+ },
47
+ "execute": {
48
+ "type": "object",
49
+ "description": "Execute engine settings",
50
+ "properties": {
51
+ "driftThreshold": {
52
+ "type": "number",
53
+ "minimum": 0,
54
+ "maximum": 1,
55
+ "description": "Drift detection threshold (env: GESTALT_DRIFT_THRESHOLD)",
56
+ "default": 0.3
57
+ },
58
+ "successThreshold": {
59
+ "type": "number",
60
+ "minimum": 0,
61
+ "maximum": 1,
62
+ "description": "Evolution success threshold (env: GESTALT_EVOLVE_SUCCESS_THRESHOLD)",
63
+ "default": 0.85
64
+ },
65
+ "goalAlignmentThreshold": {
66
+ "type": "number",
67
+ "minimum": 0,
68
+ "maximum": 1,
69
+ "description": "Goal alignment threshold (env: GESTALT_EVOLVE_GOAL_ALIGNMENT_THRESHOLD)",
70
+ "default": 0.80
71
+ }
72
+ },
73
+ "additionalProperties": false
74
+ },
75
+ "dbPath": {
76
+ "type": "string",
77
+ "description": "Path to the SQLite event store database (env: GESTALT_DB_PATH)",
78
+ "default": ".gestalt/gestalt.db"
79
+ },
80
+ "skillsDir": {
81
+ "type": "string",
82
+ "description": "Directory containing skill definitions (env: GESTALT_SKILLS_DIR)",
83
+ "default": "skills"
84
+ },
85
+ "agentsDir": {
86
+ "type": "string",
87
+ "description": "Directory containing agent definitions (env: GESTALT_AGENTS_DIR)",
88
+ "default": "agents"
89
+ },
90
+ "logLevel": {
91
+ "type": "string",
92
+ "enum": ["debug", "info", "warn", "error"],
93
+ "description": "Log level (env: GESTALT_LOG_LEVEL)",
94
+ "default": "info"
95
+ }
96
+ },
97
+ "additionalProperties": false
98
+ }
@@ -5,12 +5,12 @@ import { AnthropicAdapter } from '../../llm/adapter.js';
5
5
  import { InterviewEngine } from '../../interview/engine.js';
6
6
  export async function interviewCommand(topic) {
7
7
  const config = loadConfig();
8
- if (!config.anthropicApiKey) {
8
+ if (!config.llm.apiKey) {
9
9
  console.error('Error: ANTHROPIC_API_KEY is required for CLI mode. Set it in .env or as environment variable.');
10
10
  process.exit(1);
11
11
  }
12
12
  const eventStore = new EventStore(config.dbPath);
13
- const llm = new AnthropicAdapter(config.anthropicApiKey, config.model);
13
+ const llm = new AnthropicAdapter(config.llm.apiKey, config.llm.model);
14
14
  const engine = new InterviewEngine(llm, eventStore);
15
15
  const rl = createInterface({
16
16
  input: process.stdin,
@@ -1 +1 @@
1
- {"version":3,"file":"interview.js","sourceRoot":"","sources":["../../../../src/cli/commands/interview.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"interview.js","sourceRoot":"","sources":["../../../../src/cli/commands/interview.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export declare function setupCommand(): void;
2
+ //# sourceMappingURL=setup.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"setup.d.ts","sourceRoot":"","sources":["../../../../src/cli/commands/setup.ts"],"names":[],"mappings":"AAKA,wBAAgB,YAAY,IAAI,IAAI,CAkBnC"}
@@ -0,0 +1,20 @@
1
+ import { existsSync, writeFileSync } from 'node:fs';
2
+ import { resolve } from 'node:path';
3
+ const CONFIG_FILENAME = 'gestalt.json';
4
+ export function setupCommand() {
5
+ const filePath = resolve(CONFIG_FILENAME);
6
+ if (existsSync(filePath)) {
7
+ console.log('이미 설정이 존재합니다: ' + filePath);
8
+ return;
9
+ }
10
+ const config = {
11
+ $schema: './node_modules/@tienne/gestalt/schemas/gestalt.schema.json',
12
+ interview: {
13
+ ambiguityThreshold: 0.2,
14
+ maxRounds: 10,
15
+ },
16
+ };
17
+ writeFileSync(filePath, JSON.stringify(config, null, 2) + '\n', 'utf-8');
18
+ console.log('gestalt.json 생성 완료: ' + filePath);
19
+ }
20
+ //# sourceMappingURL=setup.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"setup.js","sourceRoot":"","sources":["../../../../src/cli/commands/setup.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,aAAa,EAAE,MAAM,SAAS,CAAC;AACpD,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAEpC,MAAM,eAAe,GAAG,cAAc,CAAC;AAEvC,MAAM,UAAU,YAAY;IAC1B,MAAM,QAAQ,GAAG,OAAO,CAAC,eAAe,CAAC,CAAC;IAE1C,IAAI,UAAU,CAAC,QAAQ,CAAC,EAAE,CAAC;QACzB,OAAO,CAAC,GAAG,CAAC,gBAAgB,GAAG,QAAQ,CAAC,CAAC;QACzC,OAAO;IACT,CAAC;IAED,MAAM,MAAM,GAAG;QACb,OAAO,EAAE,4DAA4D;QACrE,SAAS,EAAE;YACT,kBAAkB,EAAE,GAAG;YACvB,SAAS,EAAE,EAAE;SACd;KACF,CAAC;IAEF,aAAa,CAAC,QAAQ,EAAE,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC,GAAG,IAAI,EAAE,OAAO,CAAC,CAAC;IACzE,OAAO,CAAC,GAAG,CAAC,sBAAsB,GAAG,QAAQ,CAAC,CAAC;AACjD,CAAC"}
@@ -5,12 +5,12 @@ import { InterviewEngine } from '../../interview/engine.js';
5
5
  import { SpecGenerator } from '../../spec/generator.js';
6
6
  export async function specCommand(sessionId, options) {
7
7
  const config = loadConfig();
8
- if (!config.anthropicApiKey) {
8
+ if (!config.llm.apiKey) {
9
9
  console.error('Error: ANTHROPIC_API_KEY is required for CLI mode. Set it in .env or as environment variable.');
10
10
  process.exit(1);
11
11
  }
12
12
  const eventStore = new EventStore(config.dbPath);
13
- const llm = new AnthropicAdapter(config.anthropicApiKey, config.model);
13
+ const llm = new AnthropicAdapter(config.llm.apiKey, config.llm.model);
14
14
  const engine = new InterviewEngine(llm, eventStore);
15
15
  const generator = new SpecGenerator(llm, eventStore);
16
16
  try {
@@ -1 +1 @@
1
- {"version":3,"file":"spec.js","sourceRoot":"","sources":["../../../../src/cli/commands/spec.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,sBAAsB,CAAC;AAClD,OAAO,EAAE,UAAU,EAAE,MAAM,uBAAuB,CAAC;AACnD,OAAO,EAAE,gBAAgB,EAAE,MAAM,sBAAsB,CAAC;AACxD,OAAO,EAAE,eAAe,EAAE,MAAM,2BAA2B,CAAC;AAC5D,OAAO,EAAE,aAAa,EAAE,MAAM,yBAAyB,CAAC;AAExD,MAAM,CAAC,KAAK,UAAU,WAAW,CAAC,SAAiB,EAAE,OAA4B;IAC/E,MAAM,MAAM,GAAG,UAAU,EAAE,CAAC;IAE5B,IAAI,CAAC,MAAM,CAAC,eAAe,EAAE,CAAC;QAC5B,OAAO,CAAC,KAAK,CAAC,+FAA+F,CAAC,CAAC;QAC/G,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;IAED,MAAM,UAAU,GAAG,IAAI,UAAU,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;IACjD,MAAM,GAAG,GAAG,IAAI,gBAAgB,CAAC,MAAM,CAAC,eAAe,EAAE,MAAM,CAAC,KAAK,CAAC,CAAC;IACvE,MAAM,MAAM,GAAG,IAAI,eAAe,CAAC,GAAG,EAAE,UAAU,CAAC,CAAC;IACpD,MAAM,SAAS,GAAG,IAAI,aAAa,CAAC,GAAG,EAAE,UAAU,CAAC,CAAC;IAErD,IAAI,CAAC;QACH,MAAM,OAAO,GAAG,MAAM,CAAC,UAAU,CAAC,SAAS,CAAC,CAAC;QAC7C,OAAO,CAAC,GAAG,CAAC,qCAAqC,OAAO,CAAC,KAAK,IAAI,CAAC,CAAC;QAEpE,MAAM,MAAM,GAAG,MAAM,SAAS,CAAC,QAAQ,CAAC,OAAO,EAAE,OAAO,CAAC,KAAK,IAAI,KAAK,CAAC,CAAC;QAEzE,IAAI,CAAC,MAAM,CAAC,EAAE,EAAE,CAAC;YACf,OAAO,CAAC,KAAK,CAAC,UAAU,MAAM,CAAC,KAAK,CAAC,OAAO,EAAE,CAAC,CAAC;YAChD,OAAO;QACT,CAAC;QAED,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC;QACnD,OAAO,CAAC,GAAG,CAAC,oCAAoC,CAAC,CAAC;IACpD,CAAC;IAAC,OAAO,CAAC,EAAE,CAAC;QACX,OAAO,CAAC,KAAK,CAAC,UAAU,CAAC,YAAY,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;IACxE,CAAC;YAAS,CAAC;QACT,UAAU,CAAC,KAAK,EAAE,CAAC;IACrB,CAAC;AACH,CAAC"}
1
+ {"version":3,"file":"spec.js","sourceRoot":"","sources":["../../../../src/cli/commands/spec.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,sBAAsB,CAAC;AAClD,OAAO,EAAE,UAAU,EAAE,MAAM,uBAAuB,CAAC;AACnD,OAAO,EAAE,gBAAgB,EAAE,MAAM,sBAAsB,CAAC;AACxD,OAAO,EAAE,eAAe,EAAE,MAAM,2BAA2B,CAAC;AAC5D,OAAO,EAAE,aAAa,EAAE,MAAM,yBAAyB,CAAC;AAExD,MAAM,CAAC,KAAK,UAAU,WAAW,CAAC,SAAiB,EAAE,OAA4B;IAC/E,MAAM,MAAM,GAAG,UAAU,EAAE,CAAC;IAE5B,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,MAAM,EAAE,CAAC;QACvB,OAAO,CAAC,KAAK,CAAC,+FAA+F,CAAC,CAAC;QAC/G,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;IAED,MAAM,UAAU,GAAG,IAAI,UAAU,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;IACjD,MAAM,GAAG,GAAG,IAAI,gBAAgB,CAAC,MAAM,CAAC,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;IACtE,MAAM,MAAM,GAAG,IAAI,eAAe,CAAC,GAAG,EAAE,UAAU,CAAC,CAAC;IACpD,MAAM,SAAS,GAAG,IAAI,aAAa,CAAC,GAAG,EAAE,UAAU,CAAC,CAAC;IAErD,IAAI,CAAC;QACH,MAAM,OAAO,GAAG,MAAM,CAAC,UAAU,CAAC,SAAS,CAAC,CAAC;QAC7C,OAAO,CAAC,GAAG,CAAC,qCAAqC,OAAO,CAAC,KAAK,IAAI,CAAC,CAAC;QAEpE,MAAM,MAAM,GAAG,MAAM,SAAS,CAAC,QAAQ,CAAC,OAAO,EAAE,OAAO,CAAC,KAAK,IAAI,KAAK,CAAC,CAAC;QAEzE,IAAI,CAAC,MAAM,CAAC,EAAE,EAAE,CAAC;YACf,OAAO,CAAC,KAAK,CAAC,UAAU,MAAM,CAAC,KAAK,CAAC,OAAO,EAAE,CAAC,CAAC;YAChD,OAAO;QACT,CAAC;QAED,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC;QACnD,OAAO,CAAC,GAAG,CAAC,oCAAoC,CAAC,CAAC;IACpD,CAAC;IAAC,OAAO,CAAC,EAAE,CAAC;QACX,OAAO,CAAC,KAAK,CAAC,UAAU,CAAC,YAAY,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;IACxE,CAAC;YAAS,CAAC;QACT,UAAU,CAAC,KAAK,EAAE,CAAC;IACrB,CAAC;AACH,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"status.d.ts","sourceRoot":"","sources":["../../../../src/cli/commands/status.ts"],"names":[],"mappings":"AAMA,wBAAgB,aAAa,CAAC,SAAS,CAAC,EAAE,MAAM,GAAG,IAAI,CAkEtD"}
1
+ {"version":3,"file":"status.d.ts","sourceRoot":"","sources":["../../../../src/cli/commands/status.ts"],"names":[],"mappings":"AAKA,wBAAgB,aAAa,CAAC,SAAS,CAAC,EAAE,MAAM,GAAG,IAAI,CAkEtD"}
@@ -1,9 +1,9 @@
1
+ import { loadConfig } from '../../core/config.js';
1
2
  import { EventStore } from '../../events/store.js';
2
3
  import { EventType } from '../../events/types.js';
3
- const DEFAULT_DB_PATH = '.gestalt/events.db';
4
4
  export function statusCommand(sessionId) {
5
- const dbPath = process.env['GESTALT_DB_PATH'] ?? DEFAULT_DB_PATH;
6
- const eventStore = new EventStore(dbPath);
5
+ const config = loadConfig();
6
+ const eventStore = new EventStore(config.dbPath);
7
7
  try {
8
8
  if (sessionId) {
9
9
  const events = eventStore.getByAggregate('interview', sessionId);
@@ -1 +1 @@
1
- {"version":3,"file":"status.js","sourceRoot":"","sources":["../../../../src/cli/commands/status.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,uBAAuB,CAAC;AACnD,OAAO,EAAE,SAAS,EAAE,MAAM,uBAAuB,CAAC;AAGlD,MAAM,eAAe,GAAG,oBAAoB,CAAC;AAE7C,MAAM,UAAU,aAAa,CAAC,SAAkB;IAC9C,MAAM,MAAM,GAAG,OAAO,CAAC,GAAG,CAAC,iBAAiB,CAAC,IAAI,eAAe,CAAC;IACjE,MAAM,UAAU,GAAG,IAAI,UAAU,CAAC,MAAM,CAAC,CAAC;IAE1C,IAAI,CAAC;QACH,IAAI,SAAS,EAAE,CAAC;YACd,MAAM,MAAM,GAAG,UAAU,CAAC,cAAc,CAAC,WAAW,EAAE,SAAS,CAAC,CAAC;YACjE,IAAI,MAAM,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;gBACxB,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC,EAAE,KAAK,EAAE,sBAAsB,SAAS,EAAE,EAAE,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC;gBACnF,OAAO;YACT,CAAC;YAED,MAAM,UAAU,GAAG,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,SAAS,KAAK,SAAS,CAAC,yBAAyB,CAAC,CAAC;YAC3F,MAAM,aAAa,GAAG,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,SAAS,KAAK,SAAS,CAAC,2BAA2B,CAAC,CAAC;YAChG,MAAM,WAAW,GAAG,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,SAAS,KAAK,SAAS,CAAC,0BAA0B,CAAC,CAAC;YAC/F,MAAM,cAAc,GAAG,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,SAAS,KAAK,SAAS,CAAC,wBAAwB,CAAC,CAAC;YAChG,MAAM,WAAW,GAAG,WAAW,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,WAAW,CAAC,WAAW,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;YACxF,MAAM,OAAO,GAAG,CAAC,KAAqC,EAAE,EAAE,CAAC,KAAK,EAAE,OAA8C,CAAC;YAEjH,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC;gBACzB,OAAO,EAAE;oBACP,SAAS;oBACT,KAAK,EAAE,OAAO,CAAC,UAAU,CAAC,EAAE,KAAK,IAAI,SAAS;oBAC9C,MAAM,EAAE,aAAa,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,aAAa;oBACnD,WAAW,EAAE,OAAO,CAAC,UAAU,CAAC,EAAE,WAAW,IAAI,SAAS;oBAC1D,WAAW,EAAE,cAAc,CAAC,MAAM;oBAClC,cAAc,EAAE,WAAW;wBACzB,CAAC,CAAC,EAAE,OAAO,EAAE,OAAO,CAAC,WAAW,CAAC,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,CAAC,WAAW,CAAC,EAAE,OAAO,EAAE;wBACpF,CAAC,CAAC,IAAI;oBACR,SAAS,EAAE,UAAU,EAAE,SAAS;iBACjC;aACF,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC;QACf,CAAC;aAAM,CAAC;YACN,gCAAgC;YAChC,MAAM,WAAW,GAAG,UAAU,CAAC,SAAS,CAAC,SAAS,CAAC,yBAAyB,EAAE,GAAG,CAAC,CAAC;YAEnF,IAAI,WAAW,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;gBAC7B,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC,EAAE,QAAQ,EAAE,EAAE,EAAE,KAAK,EAAE,CAAC,EAAE,OAAO,EAAE,8BAA8B,EAAE,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC;gBAC1G,OAAO;YACT,CAAC;YAED,MAAM,QAAQ,GAAG,WAAW,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE;gBACzC,MAAM,aAAa,GAAG,UAAU,CAAC,cAAc,CAAC,WAAW,EAAE,KAAK,CAAC,WAAW,CAAC,CAAC;gBAChF,MAAM,aAAa,GAAG,aAAa,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,SAAS,KAAK,SAAS,CAAC,2BAA2B,CAAC,CAAC;gBACvG,MAAM,cAAc,GAAG,aAAa,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,SAAS,KAAK,SAAS,CAAC,wBAAwB,CAAC,CAAC;gBACvG,MAAM,WAAW,GAAG,aAAa,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,SAAS,KAAK,SAAS,CAAC,0BAA0B,CAAC,CAAC;gBACtG,MAAM,WAAW,GAAG,WAAW,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,WAAW,CAAC,WAAW,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;gBAExF,OAAO;oBACL,SAAS,EAAE,KAAK,CAAC,WAAW;oBAC5B,KAAK,EAAG,KAAK,CAAC,OAAmC,EAAE,KAAK,IAAI,SAAS;oBACrE,MAAM,EAAE,aAAa,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,aAAa;oBACnD,WAAW,EAAG,KAAK,CAAC,OAAmC,EAAE,WAAW,IAAI,SAAS;oBACjF,WAAW,EAAE,cAAc,CAAC,MAAM;oBAClC,cAAc,EAAE,WAAW;wBACzB,CAAC,CAAE,WAAW,CAAC,OAAmC,EAAE,OAAO;wBAC3D,CAAC,CAAC,KAAK;oBACT,SAAS,EAAE,KAAK,CAAC,SAAS;iBAC3B,CAAC;YACJ,CAAC,CAAC,CAAC;YAEH,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC,EAAE,QAAQ,EAAE,KAAK,EAAE,QAAQ,CAAC,MAAM,EAAE,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC;QAC7E,CAAC;IACH,CAAC;YAAS,CAAC;QACT,UAAU,CAAC,KAAK,EAAE,CAAC;IACrB,CAAC;AACH,CAAC"}
1
+ {"version":3,"file":"status.js","sourceRoot":"","sources":["../../../../src/cli/commands/status.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/cli/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAMpC,wBAAgB,SAAS,IAAI,OAAO,CAsCnC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/cli/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAQpC,wBAAgB,SAAS,IAAI,OAAO,CA6CnC"}
@@ -3,12 +3,14 @@ import { interviewCommand } from './commands/interview.js';
3
3
  import { specCommand } from './commands/spec.js';
4
4
  import { serveCommand } from './commands/serve.js';
5
5
  import { statusCommand } from './commands/status.js';
6
+ import { setupCommand } from './commands/setup.js';
7
+ import { getVersion } from '../core/version.js';
6
8
  export function createCli() {
7
9
  const program = new Command();
8
10
  program
9
11
  .name('gestalt')
10
12
  .description('Gestalt — AI Development Harness with Gestalt psychology-driven requirement clarification')
11
- .version('0.1.0');
13
+ .version(getVersion());
12
14
  program
13
15
  .command('serve', { isDefault: true })
14
16
  .description('Start the Gestalt MCP server (stdio transport)')
@@ -34,6 +36,12 @@ export function createCli() {
34
36
  .action((sessionId) => {
35
37
  statusCommand(sessionId);
36
38
  });
39
+ program
40
+ .command('setup')
41
+ .description('Generate a gestalt.json configuration file')
42
+ .action(() => {
43
+ setupCommand();
44
+ });
37
45
  return program;
38
46
  }
39
47
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/cli/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EAAE,gBAAgB,EAAE,MAAM,yBAAyB,CAAC;AAC3D,OAAO,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AACjD,OAAO,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AACnD,OAAO,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AAErD,MAAM,UAAU,SAAS;IACvB,MAAM,OAAO,GAAG,IAAI,OAAO,EAAE,CAAC;IAE9B,OAAO;SACJ,IAAI,CAAC,SAAS,CAAC;SACf,WAAW,CAAC,2FAA2F,CAAC;SACxG,OAAO,CAAC,OAAO,CAAC,CAAC;IAEpB,OAAO;SACJ,OAAO,CAAC,OAAO,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC;SACrC,WAAW,CAAC,gDAAgD,CAAC;SAC7D,MAAM,CAAC,KAAK,IAAI,EAAE;QACjB,MAAM,YAAY,EAAE,CAAC;IACvB,CAAC,CAAC,CAAC;IAEL,OAAO;SACJ,OAAO,CAAC,mBAAmB,CAAC;SAC5B,WAAW,CAAC,wCAAwC,CAAC;SACrD,MAAM,CAAC,KAAK,EAAE,KAAyB,EAAE,EAAE;QAC1C,MAAM,gBAAgB,CAAC,KAAK,IAAI,kBAAkB,CAAC,CAAC;IACtD,CAAC,CAAC,CAAC;IAEL,OAAO;SACJ,OAAO,CAAC,mBAAmB,CAAC;SAC5B,WAAW,CAAC,4CAA4C,CAAC;SACzD,MAAM,CAAC,aAAa,EAAE,yDAAyD,CAAC;SAChF,MAAM,CAAC,KAAK,EAAE,SAAiB,EAAE,OAA4B,EAAE,EAAE;QAChE,MAAM,WAAW,CAAC,SAAS,EAAE,OAAO,CAAC,CAAC;IACxC,CAAC,CAAC,CAAC;IAEL,OAAO;SACJ,OAAO,CAAC,qBAAqB,CAAC;SAC9B,WAAW,CAAC,gCAAgC,CAAC;SAC7C,MAAM,CAAC,CAAC,SAAkB,EAAE,EAAE;QAC7B,aAAa,CAAC,SAAS,CAAC,CAAC;IAC3B,CAAC,CAAC,CAAC;IAEL,OAAO,OAAO,CAAC;AACjB,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/cli/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EAAE,gBAAgB,EAAE,MAAM,yBAAyB,CAAC;AAC3D,OAAO,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AACjD,OAAO,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AACnD,OAAO,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AACrD,OAAO,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AACnD,OAAO,EAAE,UAAU,EAAE,MAAM,oBAAoB,CAAC;AAEhD,MAAM,UAAU,SAAS;IACvB,MAAM,OAAO,GAAG,IAAI,OAAO,EAAE,CAAC;IAE9B,OAAO;SACJ,IAAI,CAAC,SAAS,CAAC;SACf,WAAW,CAAC,2FAA2F,CAAC;SACxG,OAAO,CAAC,UAAU,EAAE,CAAC,CAAC;IAEzB,OAAO;SACJ,OAAO,CAAC,OAAO,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC;SACrC,WAAW,CAAC,gDAAgD,CAAC;SAC7D,MAAM,CAAC,KAAK,IAAI,EAAE;QACjB,MAAM,YAAY,EAAE,CAAC;IACvB,CAAC,CAAC,CAAC;IAEL,OAAO;SACJ,OAAO,CAAC,mBAAmB,CAAC;SAC5B,WAAW,CAAC,wCAAwC,CAAC;SACrD,MAAM,CAAC,KAAK,EAAE,KAAyB,EAAE,EAAE;QAC1C,MAAM,gBAAgB,CAAC,KAAK,IAAI,kBAAkB,CAAC,CAAC;IACtD,CAAC,CAAC,CAAC;IAEL,OAAO;SACJ,OAAO,CAAC,mBAAmB,CAAC;SAC5B,WAAW,CAAC,4CAA4C,CAAC;SACzD,MAAM,CAAC,aAAa,EAAE,yDAAyD,CAAC;SAChF,MAAM,CAAC,KAAK,EAAE,SAAiB,EAAE,OAA4B,EAAE,EAAE;QAChE,MAAM,WAAW,CAAC,SAAS,EAAE,OAAO,CAAC,CAAC;IACxC,CAAC,CAAC,CAAC;IAEL,OAAO;SACJ,OAAO,CAAC,qBAAqB,CAAC;SAC9B,WAAW,CAAC,gCAAgC,CAAC;SAC7C,MAAM,CAAC,CAAC,SAAkB,EAAE,EAAE;QAC7B,aAAa,CAAC,SAAS,CAAC,CAAC;IAC3B,CAAC,CAAC,CAAC;IAEL,OAAO;SACJ,OAAO,CAAC,OAAO,CAAC;SAChB,WAAW,CAAC,4CAA4C,CAAC;SACzD,MAAM,CAAC,GAAG,EAAE;QACX,YAAY,EAAE,CAAC;IACjB,CAAC,CAAC,CAAC;IAEL,OAAO,OAAO,CAAC;AACjB,CAAC"}