@tienne/gestalt 0.9.0 → 0.9.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 (136) hide show
  1. package/CLAUDE.md +78 -1
  2. package/dist/package.json +3 -1
  3. package/dist/schemas/gestalt.schema.json +5 -0
  4. package/dist/skills/blast-radius/SKILL.md +134 -0
  5. package/dist/skills/build-graph/SKILL.md +100 -0
  6. package/dist/skills/diff-radius/SKILL.md +125 -0
  7. package/dist/skills/execute/SKILL.md +90 -8
  8. package/dist/skills/interview/SKILL.md +5 -4
  9. package/dist/skills/spec/SKILL.md +7 -1
  10. package/dist/src/cli/commands/init.d.ts +5 -0
  11. package/dist/src/cli/commands/init.d.ts.map +1 -0
  12. package/dist/src/cli/commands/init.js +79 -0
  13. package/dist/src/cli/commands/init.js.map +1 -0
  14. package/dist/src/cli/commands/setup.d.ts.map +1 -1
  15. package/dist/src/cli/commands/setup.js +1 -0
  16. package/dist/src/cli/commands/setup.js.map +1 -1
  17. package/dist/src/cli/index.d.ts.map +1 -1
  18. package/dist/src/cli/index.js +9 -0
  19. package/dist/src/cli/index.js.map +1 -1
  20. package/dist/src/code-graph/blast-radius.d.ts +9 -0
  21. package/dist/src/code-graph/blast-radius.d.ts.map +1 -0
  22. package/dist/src/code-graph/blast-radius.js +139 -0
  23. package/dist/src/code-graph/blast-radius.js.map +1 -0
  24. package/dist/src/code-graph/engine.d.ts +46 -0
  25. package/dist/src/code-graph/engine.d.ts.map +1 -0
  26. package/dist/src/code-graph/engine.js +301 -0
  27. package/dist/src/code-graph/engine.js.map +1 -0
  28. package/dist/src/code-graph/git-hook.d.ts +22 -0
  29. package/dist/src/code-graph/git-hook.d.ts.map +1 -0
  30. package/dist/src/code-graph/git-hook.js +100 -0
  31. package/dist/src/code-graph/git-hook.js.map +1 -0
  32. package/dist/src/code-graph/index.d.ts +7 -0
  33. package/dist/src/code-graph/index.d.ts.map +1 -0
  34. package/dist/src/code-graph/index.js +6 -0
  35. package/dist/src/code-graph/index.js.map +1 -0
  36. package/dist/src/code-graph/plugins/go.d.ts +3 -0
  37. package/dist/src/code-graph/plugins/go.d.ts.map +1 -0
  38. package/dist/src/code-graph/plugins/go.js +126 -0
  39. package/dist/src/code-graph/plugins/go.js.map +1 -0
  40. package/dist/src/code-graph/plugins/index.d.ts +16 -0
  41. package/dist/src/code-graph/plugins/index.d.ts.map +1 -0
  42. package/dist/src/code-graph/plugins/index.js +36 -0
  43. package/dist/src/code-graph/plugins/index.js.map +1 -0
  44. package/dist/src/code-graph/plugins/java.d.ts +3 -0
  45. package/dist/src/code-graph/plugins/java.d.ts.map +1 -0
  46. package/dist/src/code-graph/plugins/java.js +108 -0
  47. package/dist/src/code-graph/plugins/java.js.map +1 -0
  48. package/dist/src/code-graph/plugins/kotlin.d.ts +3 -0
  49. package/dist/src/code-graph/plugins/kotlin.d.ts.map +1 -0
  50. package/dist/src/code-graph/plugins/kotlin.js +94 -0
  51. package/dist/src/code-graph/plugins/kotlin.js.map +1 -0
  52. package/dist/src/code-graph/plugins/objc.d.ts +3 -0
  53. package/dist/src/code-graph/plugins/objc.d.ts.map +1 -0
  54. package/dist/src/code-graph/plugins/objc.js +129 -0
  55. package/dist/src/code-graph/plugins/objc.js.map +1 -0
  56. package/dist/src/code-graph/plugins/python.d.ts +3 -0
  57. package/dist/src/code-graph/plugins/python.d.ts.map +1 -0
  58. package/dist/src/code-graph/plugins/python.js +116 -0
  59. package/dist/src/code-graph/plugins/python.js.map +1 -0
  60. package/dist/src/code-graph/plugins/rust.d.ts +3 -0
  61. package/dist/src/code-graph/plugins/rust.d.ts.map +1 -0
  62. package/dist/src/code-graph/plugins/rust.js +108 -0
  63. package/dist/src/code-graph/plugins/rust.js.map +1 -0
  64. package/dist/src/code-graph/plugins/swift.d.ts +3 -0
  65. package/dist/src/code-graph/plugins/swift.d.ts.map +1 -0
  66. package/dist/src/code-graph/plugins/swift.js +106 -0
  67. package/dist/src/code-graph/plugins/swift.js.map +1 -0
  68. package/dist/src/code-graph/plugins/typescript.d.ts +3 -0
  69. package/dist/src/code-graph/plugins/typescript.d.ts.map +1 -0
  70. package/dist/src/code-graph/plugins/typescript.js +209 -0
  71. package/dist/src/code-graph/plugins/typescript.js.map +1 -0
  72. package/dist/src/code-graph/storage.d.ts +18 -0
  73. package/dist/src/code-graph/storage.d.ts.map +1 -0
  74. package/dist/src/code-graph/storage.js +175 -0
  75. package/dist/src/code-graph/storage.js.map +1 -0
  76. package/dist/src/code-graph/types.d.ts +93 -0
  77. package/dist/src/code-graph/types.d.ts.map +1 -0
  78. package/dist/src/code-graph/types.js +17 -0
  79. package/dist/src/code-graph/types.js.map +1 -0
  80. package/dist/src/core/config.d.ts +4 -0
  81. package/dist/src/core/config.d.ts.map +1 -1
  82. package/dist/src/core/config.js +6 -1
  83. package/dist/src/core/config.js.map +1 -1
  84. package/dist/src/core/types.d.ts +1 -0
  85. package/dist/src/core/types.d.ts.map +1 -1
  86. package/dist/src/execute/passthrough-engine.d.ts +4 -1
  87. package/dist/src/execute/passthrough-engine.d.ts.map +1 -1
  88. package/dist/src/execute/passthrough-engine.js +54 -4
  89. package/dist/src/execute/passthrough-engine.js.map +1 -1
  90. package/dist/src/execute/prompts.d.ts +2 -2
  91. package/dist/src/execute/prompts.d.ts.map +1 -1
  92. package/dist/src/execute/prompts.js +7 -3
  93. package/dist/src/execute/prompts.js.map +1 -1
  94. package/dist/src/execute/repository.d.ts.map +1 -1
  95. package/dist/src/execute/repository.js +1 -0
  96. package/dist/src/execute/repository.js.map +1 -1
  97. package/dist/src/execute/session.d.ts +3 -1
  98. package/dist/src/execute/session.d.ts.map +1 -1
  99. package/dist/src/execute/session.js +3 -1
  100. package/dist/src/execute/session.js.map +1 -1
  101. package/dist/src/mcp/schemas.d.ts +46 -0
  102. package/dist/src/mcp/schemas.d.ts.map +1 -1
  103. package/dist/src/mcp/schemas.js +23 -0
  104. package/dist/src/mcp/schemas.js.map +1 -1
  105. package/dist/src/mcp/server.d.ts.map +1 -1
  106. package/dist/src/mcp/server.js +21 -1
  107. package/dist/src/mcp/server.js.map +1 -1
  108. package/dist/src/mcp/tools/code-graph-passthrough.d.ts +16 -0
  109. package/dist/src/mcp/tools/code-graph-passthrough.d.ts.map +1 -0
  110. package/dist/src/mcp/tools/code-graph-passthrough.js +65 -0
  111. package/dist/src/mcp/tools/code-graph-passthrough.js.map +1 -0
  112. package/dist/src/mcp/tools/execute-passthrough.d.ts.map +1 -1
  113. package/dist/src/mcp/tools/execute-passthrough.js +28 -2
  114. package/dist/src/mcp/tools/execute-passthrough.js.map +1 -1
  115. package/dist/src/mcp/tools/index.d.ts +1 -0
  116. package/dist/src/mcp/tools/index.d.ts.map +1 -1
  117. package/dist/src/mcp/tools/index.js +1 -0
  118. package/dist/src/mcp/tools/index.js.map +1 -1
  119. package/dist/src/mcp/tools/interview-passthrough.d.ts.map +1 -1
  120. package/dist/src/mcp/tools/interview-passthrough.js +5 -0
  121. package/dist/src/mcp/tools/interview-passthrough.js.map +1 -1
  122. package/dist/src/mcp/tools/spec-passthrough.d.ts.map +1 -1
  123. package/dist/src/mcp/tools/spec-passthrough.js +9 -0
  124. package/dist/src/mcp/tools/spec-passthrough.js.map +1 -1
  125. package/dist/src/utils/notifier.d.ts +10 -0
  126. package/dist/src/utils/notifier.d.ts.map +1 -0
  127. package/dist/src/utils/notifier.js +21 -0
  128. package/dist/src/utils/notifier.js.map +1 -0
  129. package/package.json +3 -1
  130. package/schemas/gestalt.schema.json +5 -0
  131. package/skills/blast-radius/SKILL.md +134 -0
  132. package/skills/build-graph/SKILL.md +100 -0
  133. package/skills/diff-radius/SKILL.md +125 -0
  134. package/skills/execute/SKILL.md +90 -8
  135. package/skills/interview/SKILL.md +5 -4
  136. package/skills/spec/SKILL.md +7 -1
@@ -183,6 +183,67 @@ API 키 없이 MCP 서버 실행 시 자동 활성화. LLM 작업을 caller가
183
183
 
184
184
  ---
185
185
 
186
+ ### 병렬 그룹 실행 (parallelGroups 활용)
187
+
188
+ `plan_complete` 응답에 `parallelGroups: string[][]`가 포함되어 있으면 병렬 실행을 사용한다. 각 내부 배열은 동시에 실행할 수 있는 태스크 ID 묶음이다.
189
+
190
+ **병렬 그룹 실행 흐름:**
191
+
192
+ 1. `parallelGroups[groupIndex]`의 taskId 목록을 확인한다.
193
+ 2. **단일 메시지에서** 각 taskId마다 Agent 툴을 하나씩, 동시에 호출한다 (여러 Agent 툴 호출을 같은 메시지에 담는다).
194
+ 3. 각 Agent는 독립적으로 해당 태스크를 수행하고, 완료되면 `execute_task`를 호출해 결과를 제출한다.
195
+ 4. 그룹 내 일부 Agent가 실패해도 나머지는 계속 실행한다. 실패한 태스크는 `status: "failed"`로 제출한다.
196
+ 5. 그룹 내 모든 Agent가 완료되면 다음 그룹으로 넘어간다.
197
+ 6. 모든 그룹이 완료된 후 실패한 태스크가 있으면 기존 evolve 파이프라인으로 재처리한다.
198
+
199
+ **Agent 툴 호출 예시 (parallelGroups[0] = ["task-0", "task-1", "task-2"] 인 경우):**
200
+
201
+ 단일 메시지에서 세 Agent를 동시에 실행한다.
202
+
203
+ ```
204
+ // 같은 메시지에서 동시 호출 — Agent 1
205
+ Agent(task: "task-0 실행: {task-0 title}\n컨텍스트: {taskContext}\n완료 후 execute_task로 결과 제출")
206
+
207
+ // 같은 메시지에서 동시 호출 — Agent 2
208
+ Agent(task: "task-1 실행: {task-1 title}\n컨텍스트: {taskContext}\n완료 후 execute_task로 결과 제출")
209
+
210
+ // 같은 메시지에서 동시 호출 — Agent 3
211
+ Agent(task: "task-2 실행: {task-2 title}\n컨텍스트: {taskContext}\n완료 후 execute_task로 결과 제출")
212
+ ```
213
+
214
+ **각 Agent의 execute_task 제출:**
215
+
216
+ ```json
217
+ {
218
+ "action": "execute_task",
219
+ "sessionId": "...",
220
+ "taskResult": {
221
+ "taskId": "task-0",
222
+ "status": "completed",
223
+ "output": "태스크 수행 결과 요약",
224
+ "artifacts": ["path/to/file.ts"]
225
+ }
226
+ }
227
+ ```
228
+
229
+ 실패 시:
230
+ ```json
231
+ {
232
+ "action": "execute_task",
233
+ "sessionId": "...",
234
+ "taskResult": {
235
+ "taskId": "task-1",
236
+ "status": "failed",
237
+ "output": "실패 원인 설명",
238
+ "artifacts": []
239
+ }
240
+ }
241
+ ```
242
+
243
+ **parallelGroups가 없는 경우:** 기존 순차 실행 방식을 사용한다.
244
+
245
+ ---
246
+
186
247
  ### `execute_task` — 태스크 실행 결과 제출
187
248
 
188
249
  role_match/role_consensus로 얻은 `roleGuidance`를 참조해 태스크를 수행한 후 결과 제출.
@@ -381,26 +442,47 @@ Planning 패널 태스크를 완료하고, 새 Execution 패널 태스크를 생
381
442
 
382
443
  ```
383
444
  subject: "Gestalt Execute: {spec.goal 앞 40자}"
384
- description: "0/{totalTasks} 완료 | 현재: 시작 대기 중 | 실패: 0개 | 그룹 0/{parallelGroupCount}"
385
- activeForm: "태스크 실행 "
445
+ description: "0/{totalTasks} 완료 | 실패: 0개 | 그룹 0/{parallelGroupCount}"
446
+ activeForm: "실행 중: {taskContext.currentTask.title}"
386
447
  ```
387
448
 
388
449
  `plan_complete` 응답의 `planSummary.totalTasks`와 `planSummary.parallelGroupCount`를 활용한다.
450
+ `taskContext.currentTask.title`은 `execute_start` 응답에서 바로 꺼내 쓴다.
451
+
452
+ ### 병렬 그룹 실행 시작 시 (Agent 툴 동시 호출 직전)
453
+
454
+ 각 병렬 그룹 실행을 시작하기 전에 `TaskUpdate`로 병렬 실행 상태를 표시한다.
455
+
456
+ ```
457
+ activeForm: "병렬 실행 중: 그룹 {groupIndex}/{totalGroups} — {agentCount}개 Agent 실행 중"
458
+ ```
459
+
460
+ - `groupIndex`: 현재 병렬 그룹 번호 (1부터 시작)
461
+ - `totalGroups`: 전체 병렬 그룹 수 (`parallelGroups.length`)
462
+ - `agentCount`: 현재 그룹의 태스크 수 (`parallelGroups[groupIndex].length`)
389
463
 
390
464
  ### 각 태스크 완료 후 (`execute_task` 응답 수신 시마다)
391
465
 
392
- `TaskUpdate`로 진행 상황을 업데이트한다.
466
+ `TaskUpdate`로 진행 상황과 현재 실행 태스크명을 업데이트한다.
467
+
468
+ 순차 실행 중:
469
+ ```
470
+ description: "{completedCount}/{totalTasks} 완료 | 실패: {failedCount}개 | 그룹 {groupIndex}/{totalGroups}"
471
+ activeForm: "실행 중: {taskContext.currentTask.title}"
472
+ ```
393
473
 
474
+ 병렬 그룹 실행 중 (각 Agent의 execute_task 완료 시):
394
475
  ```
395
- description: "{completedCount}/{totalTasks} 완료 | 현재: {nextTask.title or '완료'} | 실패: {failedCount}개 | 그룹 {groupIndex}/{totalGroups}"
476
+ description: "{completedCount}/{totalTasks} 완료 | 실패: {failedCount}개 | 그룹 {groupIndex}/{totalGroups}"
477
+ activeForm: "병렬 실행 중: 그룹 {groupIndex}/{totalGroups} — {agentCount}개 Agent 실행 중"
396
478
  ```
397
479
 
398
- - `completedCount`: 지금까지 제출한 taskResult 수
399
- - `nextTask`: 응답의 `nextTaskId`로 다음 태스크 이름 추론
480
+ - `completedCount`: 지금까지 제출한 taskResult 수 (`response.completedTasks`)
400
481
  - `failedCount`: status가 `failed`인 taskResult 수
401
- - `groupIndex/totalGroups`: `plan_complete` 응답의 `parallelGroups` 기준
482
+ - `groupIndex/totalGroups`: 현재 처리 중인 병렬 그룹 번호 / 전체 그룹 수
483
+ - `agentCount`: 해당 그룹에서 아직 실행 중인 Agent 수
402
484
 
403
- `allTasksCompleted === true` 이면 description "전체 완료" 표시 후 `TaskUpdate`로 status를 completed로 변경한다.
485
+ `allTasksCompleted === true` 이면 `TaskUpdate({ status: "completed", activeForm: undefined, description: "전체 완료 ({totalTasks}개)" })`로 변경한다.
404
486
 
405
487
  ### 평가/진화 단계
406
488
 
@@ -93,16 +93,17 @@ API 키 없이 MCP 서버 실행 시 자동 활성화. LLM 작업을 caller가
93
93
 
94
94
  ```
95
95
  subject: "Gestalt 인터뷰: {topic}"
96
- description: "라운드 1/{maxRounds} | 원리: {currentPrinciple} | 모호성: 측정 전"
97
- activeForm: "인터뷰 진행 "
96
+ description: "라운드 1/{maxRounds} | 모호성: 측정 전"
97
+ activeForm: "라운드 1 — {currentPrinciple}"
98
98
  ```
99
99
 
100
100
  ### 각 라운드 후 (`respond` 응답 수신 시마다)
101
101
 
102
- `TaskUpdate`로 description을 최신 상태로 갱신한다. 모호성 점수는 추이 형식으로 표시한다.
102
+ `TaskUpdate`로 description과 activeForm을 최신 상태로 갱신한다. 모호성 점수는 추이 형식으로 표시한다.
103
103
 
104
104
  ```
105
- description: "라운드 {roundNumber}/{maxRounds} | 원리: {currentPrinciple} | 모호성: {score1} → {score2} → {latestScore}"
105
+ description: "라운드 {roundNumber}/{maxRounds} | 모호성: {score1} → {score2} → {latestScore}"
106
+ activeForm: "라운드 {roundNumber} — {currentPrinciple}"
106
107
  ```
107
108
 
108
109
  ambiguityScore.isReady === true 이면 description에 "✓ 준비 완료" 표시를 추가한다.
@@ -104,7 +104,13 @@ Spec 생성 중 Claude Code Task 패널에 상태를 표시한다. best-effort
104
104
  ```
105
105
  subject: "Spec 생성 중"
106
106
  description: "인터뷰 세션 {sessionId} 기반 Spec 구성 중..."
107
- activeForm: "Spec 생성 중"
107
+ activeForm: "1/2 컨텍스트 요청 중"
108
+ ```
109
+
110
+ 1단계 응답(`status: "prompt"`) 수신 후 `TaskUpdate`로 갱신한다.
111
+
112
+ ```
113
+ activeForm: "2/2 — Spec 검증 중"
108
114
  ```
109
115
 
110
116
  ### 완료 시 (2단계 `ges_generate_spec` 응답 수신 후)