@tienne/gestalt 0.8.0 → 0.9.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.
- package/CLAUDE.md +4 -2
- package/README.ko.md +47 -35
- package/README.md +8 -20
- package/dist/package.json +3 -1
- package/dist/role-agents/technical-writer/AGENT.md +39 -3
- package/dist/schemas/gestalt.schema.json +5 -0
- package/dist/skills/execute/SKILL.md +148 -1
- package/dist/skills/interview/SKILL.md +37 -1
- package/dist/skills/spec/SKILL.md +39 -1
- package/dist/src/cli/commands/setup.d.ts.map +1 -1
- package/dist/src/cli/commands/setup.js +1 -0
- package/dist/src/cli/commands/setup.js.map +1 -1
- package/dist/src/core/config.d.ts +3 -0
- package/dist/src/core/config.d.ts.map +1 -1
- package/dist/src/core/config.js +5 -0
- package/dist/src/core/config.js.map +1 -1
- package/dist/src/execute/rule-writer.d.ts +15 -0
- package/dist/src/execute/rule-writer.d.ts.map +1 -0
- package/dist/src/execute/rule-writer.js +57 -0
- package/dist/src/execute/rule-writer.js.map +1 -0
- package/dist/src/mcp/schemas.d.ts +3 -0
- package/dist/src/mcp/schemas.d.ts.map +1 -1
- package/dist/src/mcp/schemas.js +1 -0
- package/dist/src/mcp/schemas.js.map +1 -1
- package/dist/src/mcp/server.d.ts.map +1 -1
- package/dist/src/mcp/server.js +2 -0
- package/dist/src/mcp/server.js.map +1 -1
- package/dist/src/mcp/tools/execute-passthrough.d.ts.map +1 -1
- package/dist/src/mcp/tools/execute-passthrough.js +113 -4
- package/dist/src/mcp/tools/execute-passthrough.js.map +1 -1
- package/dist/src/mcp/tools/interview-passthrough.d.ts.map +1 -1
- package/dist/src/mcp/tools/interview-passthrough.js +5 -0
- package/dist/src/mcp/tools/interview-passthrough.js.map +1 -1
- package/dist/src/mcp/tools/review-passthrough.d.ts.map +1 -1
- package/dist/src/mcp/tools/review-passthrough.js +14 -0
- package/dist/src/mcp/tools/review-passthrough.js.map +1 -1
- package/dist/src/mcp/tools/spec-passthrough.d.ts.map +1 -1
- package/dist/src/mcp/tools/spec-passthrough.js +9 -0
- package/dist/src/mcp/tools/spec-passthrough.js.map +1 -1
- package/dist/src/utils/notifier.d.ts +10 -0
- package/dist/src/utils/notifier.d.ts.map +1 -0
- package/dist/src/utils/notifier.js +21 -0
- package/dist/src/utils/notifier.js.map +1 -0
- package/package.json +3 -1
- package/role-agents/technical-writer/AGENT.md +39 -3
- package/schemas/gestalt.schema.json +5 -0
- package/skills/execute/SKILL.md +148 -1
- package/skills/interview/SKILL.md +37 -1
- package/skills/spec/SKILL.md +39 -1
|
@@ -32,8 +32,20 @@ When writing Korean developer documentation, follow these conventions observed i
|
|
|
32
32
|
**Formatting Patterns**
|
|
33
33
|
- Bold key terms on first use: **소모성 아이템**, **비소모성 아이템**
|
|
34
34
|
- Use bullet lists for features, options, and constraints — keep each item concise
|
|
35
|
+
- Use numbered lists when sequence matters — installation steps, API call order, migration procedures
|
|
36
|
+
— Don't: bullet a 3-step setup where step 2 depends on step 1
|
|
37
|
+
— Do: number any list where "do these in order" is part of the instruction
|
|
35
38
|
- Separate distinct concepts with `---` horizontal rules
|
|
36
|
-
-
|
|
39
|
+
- Use callout blocks to signal importance — choose the type based on consequence:
|
|
40
|
+
- 💡 **Tip**: better approach, shortcut, optional improvement
|
|
41
|
+
- 📝 **Note / 참고**: extra context, exception cases, policy notes — use at the end of conceptual sections
|
|
42
|
+
- ⚠️ **Warning / 주의**: incorrect usage causes problems (wrong output, wasted time)
|
|
43
|
+
- 🔴 **Danger / 경고**: data loss, security risk, service outage — reader must not skip this
|
|
44
|
+
— Don't use Note for Danger: "참고로 이 명령어는 데이터를 삭제해요" understates the risk
|
|
45
|
+
- Write descriptive link text — destination should be clear from the link text alone
|
|
46
|
+
— Don't: "자세한 내용은 [여기](...)를 참고하세요."
|
|
47
|
+
— Do: "자세한 내용은 [설치 가이드](...)를 참고하세요."
|
|
48
|
+
— Don't: "See [this](url)." → Do: "See [API authentication guide](url)."
|
|
37
49
|
|
|
38
50
|
**Content Principles**
|
|
39
51
|
- Lead with business value or user benefit, follow with technical detail
|
|
@@ -46,6 +58,26 @@ When writing Korean developer documentation, follow these conventions observed i
|
|
|
46
58
|
- Avoid listing terms inline in introductions if they are covered in a dedicated section below — redundant inline lists interrupt flow without adding value
|
|
47
59
|
|
|
48
60
|
**Korean Sentence Writing**
|
|
61
|
+
|
|
62
|
+
**핵심 원칙: 영어로 생각하고 번역하지 말 것**
|
|
63
|
+
한국어로 직접 작성한다. "dependency-based execution planning"을 머릿속에서 먼저 영어로 구성한 뒤 번역하면 번역체가 된다.
|
|
64
|
+
|
|
65
|
+
- ❌ 의존성 기반 실행 계획 수립 → ✅ 의존성에 따라 실행 순서를 정해요
|
|
66
|
+
- ❌ 스태그네이션 감지 메커니즘이 트리거됩니다 → ✅ 답보 상태를 감지하면 자동으로 분기해요
|
|
67
|
+
- ❌ 스포닝 → ✅ 하위 에이전트 생성
|
|
68
|
+
- ❌ 소급 검토 컨텍스트 → ✅ 회고 컨텍스트
|
|
69
|
+
- ❌ 임의 태스크에 적용 가능합니다 → ✅ 모든 태스크에 적용할 수 있어요
|
|
70
|
+
- ❌ 단락(short-circuit) 처리 → ✅ 조기 종료 처리
|
|
71
|
+
- ❌ 수익 체감 패턴 → ✅ 효과 감소 패턴
|
|
72
|
+
|
|
73
|
+
**기술 용어 3단계 처리**
|
|
74
|
+
|
|
75
|
+
| 단계 | 사용 기준 | 예시 |
|
|
76
|
+
|------|-----------|------|
|
|
77
|
+
| 영어 그대로 | 한국 개발자들이 영어로 통용하는 용어 | API, CLI, JSON, Git, PR, LLM, DAG |
|
|
78
|
+
| 한국어 + 영어 병기 (첫 등장) | 덜 일반적인 전문 용어의 첫 사용 | 이벤트 소싱(Event Sourcing), 단락 회로 실행(Short-circuit Evaluation) |
|
|
79
|
+
| 한국어만 | 자연스러운 한국어 표현이 있는 경우 | 버전 관리 (버저닝 ❌), 배포 (디플로이먼트 ❌) |
|
|
80
|
+
|
|
49
81
|
- Reader is the subject: write so the developer is the actor — use active constructions
|
|
50
82
|
— Don't: "설정이 완료되어야 합니다." → Do: "설정을 완료하세요."
|
|
51
83
|
— Don't: "이 라이브러리는 초기화를 수행해요." → Do: "이 명령어로 초기화하세요."
|
|
@@ -206,7 +238,11 @@ When writing documentation, produce:
|
|
|
206
238
|
- Callout blocks for important notes, warnings, or tips
|
|
207
239
|
|
|
208
240
|
When reviewing existing documentation, provide:
|
|
209
|
-
-
|
|
210
|
-
-
|
|
241
|
+
- Issues classified by severity:
|
|
242
|
+
- **Blocker**: reader can misunderstand, follow wrong steps, or miss a critical risk — must fix before publish
|
|
243
|
+
- **Fix**: clarity, consistency, or structural problem — fix when possible
|
|
244
|
+
- **Suggest**: improvement idea — optional, at author's discretion
|
|
245
|
+
- Specific location (section name or quoted passage) for each issue
|
|
246
|
+
- Rewrite suggestions for all Blocker and Fix items
|
|
211
247
|
- Missing content checklist
|
|
212
248
|
- Overall readability assessment
|
|
@@ -87,6 +87,11 @@
|
|
|
87
87
|
"description": "Directory containing agent definitions (env: GESTALT_AGENTS_DIR)",
|
|
88
88
|
"default": "agents"
|
|
89
89
|
},
|
|
90
|
+
"notifications": {
|
|
91
|
+
"type": "boolean",
|
|
92
|
+
"description": "Enable OS desktop notifications for pipeline events (env: GESTALT_NOTIFICATIONS)",
|
|
93
|
+
"default": false
|
|
94
|
+
},
|
|
90
95
|
"logLevel": {
|
|
91
96
|
"type": "string",
|
|
92
97
|
"enum": ["debug", "info", "warn", "error"],
|
package/skills/execute/SKILL.md
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: execute
|
|
3
|
-
version: "1.
|
|
3
|
+
version: "1.2.0"
|
|
4
4
|
description: "Gestalt-driven execution planner that transforms a Spec into a validated ExecutionPlan"
|
|
5
5
|
triggers:
|
|
6
6
|
- "execute"
|
|
@@ -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`를 참조해 태스크를 수행한 후 결과 제출.
|
|
@@ -350,3 +411,89 @@ role_match/role_consensus로 얻은 `roleGuidance`를 참조해 태스크를 수
|
|
|
350
411
|
| `hard_cap` | structural 3회 + contextual 3회 실패 |
|
|
351
412
|
| `caller` | `{ action: "evolve", terminateReason: "caller" }` |
|
|
352
413
|
| `human_escalation` | 4개 lateral persona 소진 |
|
|
414
|
+
|
|
415
|
+
---
|
|
416
|
+
|
|
417
|
+
## 공통 진행 패널
|
|
418
|
+
|
|
419
|
+
Execute 파이프라인 실행 중 Claude Code Task 패널에 실시간 상태를 표시한다. 패널 업데이트는 best-effort — 실패가 태스크 실행 흐름을 중단시켜서는 안 된다.
|
|
420
|
+
|
|
421
|
+
### Planning 단계 시작 시 (`start` 응답 수신 후)
|
|
422
|
+
|
|
423
|
+
`TaskCreate`로 실행 패널을 생성하고, 반환된 taskId를 세션 동안 보관한다.
|
|
424
|
+
|
|
425
|
+
```
|
|
426
|
+
subject: "Gestalt Execute: {spec.goal 앞 40자}"
|
|
427
|
+
description: "Planning 중 | 단계 1/4 | figure_ground"
|
|
428
|
+
activeForm: "실행 계획 수립 중"
|
|
429
|
+
```
|
|
430
|
+
|
|
431
|
+
### Planning 각 단계 후 (`plan_step` 응답 수신 시마다)
|
|
432
|
+
|
|
433
|
+
`TaskUpdate`로 현재 Planning 단계를 업데이트한다.
|
|
434
|
+
|
|
435
|
+
```
|
|
436
|
+
description: "Planning 중 | 단계 {stepsCompleted}/4 | {currentPrinciple}"
|
|
437
|
+
```
|
|
438
|
+
|
|
439
|
+
### Execution 시작 후 (`execute_start` 응답 수신 후)
|
|
440
|
+
|
|
441
|
+
Planning 패널 태스크를 완료하고, 새 Execution 패널 태스크를 생성한다.
|
|
442
|
+
|
|
443
|
+
```
|
|
444
|
+
subject: "Gestalt Execute: {spec.goal 앞 40자}"
|
|
445
|
+
description: "0/{totalTasks} 완료 | 실패: 0개 | 그룹 0/{parallelGroupCount}"
|
|
446
|
+
activeForm: "실행 중: {taskContext.currentTask.title}"
|
|
447
|
+
```
|
|
448
|
+
|
|
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`)
|
|
463
|
+
|
|
464
|
+
### 각 태스크 완료 후 (`execute_task` 응답 수신 시마다)
|
|
465
|
+
|
|
466
|
+
`TaskUpdate`로 진행 상황과 현재 실행 태스크명을 업데이트한다.
|
|
467
|
+
|
|
468
|
+
순차 실행 중:
|
|
469
|
+
```
|
|
470
|
+
description: "{completedCount}/{totalTasks} 완료 | 실패: {failedCount}개 | 그룹 {groupIndex}/{totalGroups}"
|
|
471
|
+
activeForm: "실행 중: {taskContext.currentTask.title}"
|
|
472
|
+
```
|
|
473
|
+
|
|
474
|
+
병렬 그룹 실행 중 (각 Agent의 execute_task 완료 시):
|
|
475
|
+
```
|
|
476
|
+
description: "{completedCount}/{totalTasks} 완료 | 실패: {failedCount}개 | 그룹 {groupIndex}/{totalGroups}"
|
|
477
|
+
activeForm: "병렬 실행 중: 그룹 {groupIndex}/{totalGroups} — {agentCount}개 Agent 실행 중"
|
|
478
|
+
```
|
|
479
|
+
|
|
480
|
+
- `completedCount`: 지금까지 제출한 taskResult 수 (`response.completedTasks`)
|
|
481
|
+
- `failedCount`: status가 `failed`인 taskResult 수
|
|
482
|
+
- `groupIndex/totalGroups`: 현재 처리 중인 병렬 그룹 번호 / 전체 그룹 수
|
|
483
|
+
- `agentCount`: 해당 그룹에서 아직 실행 중인 Agent 수
|
|
484
|
+
|
|
485
|
+
`allTasksCompleted === true` 이면 `TaskUpdate({ status: "completed", activeForm: undefined, description: "전체 완료 ({totalTasks}개)" })`로 변경한다.
|
|
486
|
+
|
|
487
|
+
### 평가/진화 단계
|
|
488
|
+
|
|
489
|
+
- `evaluate` 시작: description에 "평가 중 — structural 검사" 추가
|
|
490
|
+
- structural 통과: "평가 중 — contextual 검사" 로 업데이트
|
|
491
|
+
- 평가 완료(success): `TaskUpdate({ status: "completed", description: "완료 | score: {overallScore} | alignment: {goalAlignment}" })`
|
|
492
|
+
- Evolve 진입: description에 "개선 중 (generation {N})" 추가
|
|
493
|
+
|
|
494
|
+
### 오류/에스컬레이션 시
|
|
495
|
+
|
|
496
|
+
```
|
|
497
|
+
status: "completed"
|
|
498
|
+
description: "종료: {terminationReason} | 최고 점수: {bestScore}"
|
|
499
|
+
```
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: interview
|
|
3
|
-
version: "1.
|
|
3
|
+
version: "1.1.0"
|
|
4
4
|
description: "Gestalt-driven interview to clarify project requirements"
|
|
5
5
|
triggers:
|
|
6
6
|
- "interview"
|
|
@@ -80,3 +80,39 @@ API 키 없이 MCP 서버 실행 시 자동 활성화. LLM 작업을 caller가
|
|
|
80
80
|
| `questionPrompt` | string | 다음 질문 생성용 프롬프트 |
|
|
81
81
|
| `scoringPrompt` | string? | 모호성 점수 산출용 프롬프트 (respond 후에만 포함) |
|
|
82
82
|
| `roundNumber` | number | 현재 라운드 번호 |
|
|
83
|
+
|
|
84
|
+
---
|
|
85
|
+
|
|
86
|
+
## 공통 진행 패널
|
|
87
|
+
|
|
88
|
+
인터뷰 진행 중 Claude Code Task 패널에 실시간 상태를 표시한다. 패널 업데이트는 best-effort — 업데이트 실패가 인터뷰 흐름을 중단시켜서는 안 된다.
|
|
89
|
+
|
|
90
|
+
### 시작 시 (`start` 응답 수신 직후)
|
|
91
|
+
|
|
92
|
+
`TaskCreate`를 호출해 진행 패널을 생성하고, 반환된 taskId를 세션 동안 보관한다.
|
|
93
|
+
|
|
94
|
+
```
|
|
95
|
+
subject: "Gestalt 인터뷰: {topic}"
|
|
96
|
+
description: "라운드 1/{maxRounds} | 모호성: 측정 전"
|
|
97
|
+
activeForm: "라운드 1 — {currentPrinciple}"
|
|
98
|
+
```
|
|
99
|
+
|
|
100
|
+
### 각 라운드 후 (`respond` 응답 수신 시마다)
|
|
101
|
+
|
|
102
|
+
`TaskUpdate`로 description과 activeForm을 최신 상태로 갱신한다. 모호성 점수는 추이 형식으로 표시한다.
|
|
103
|
+
|
|
104
|
+
```
|
|
105
|
+
description: "라운드 {roundNumber}/{maxRounds} | 모호성: {score1} → {score2} → {latestScore}"
|
|
106
|
+
activeForm: "라운드 {roundNumber} — {currentPrinciple}"
|
|
107
|
+
```
|
|
108
|
+
|
|
109
|
+
ambiguityScore.isReady === true 이면 description에 "✓ 준비 완료" 표시를 추가한다.
|
|
110
|
+
|
|
111
|
+
### 완료 시 (`complete` 응답 수신 후)
|
|
112
|
+
|
|
113
|
+
`TaskUpdate`로 status를 completed로 변경한다.
|
|
114
|
+
|
|
115
|
+
```
|
|
116
|
+
status: "completed"
|
|
117
|
+
description: "총 {totalRounds}라운드 완료 | 최종 모호성: {finalAmbiguityScore}"
|
|
118
|
+
```
|
package/skills/spec/SKILL.md
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: spec
|
|
3
|
-
version: "1.
|
|
3
|
+
version: "1.1.0"
|
|
4
4
|
description: "Generate a Spec specification from a completed interview"
|
|
5
5
|
triggers:
|
|
6
6
|
- "generate spec"
|
|
@@ -90,3 +90,41 @@ ges_generate_spec({
|
|
|
90
90
|
- `gestaltAnalysis[].confidence`: 0.0 ~ 1.0
|
|
91
91
|
- `ontologySchema.entities[]`: `{ name: string(min 1), description: string, attributes: string[] }`
|
|
92
92
|
- `ontologySchema.relations[]`: `{ from: string(min 1), to: string(min 1), type: string(min 1) }`
|
|
93
|
+
|
|
94
|
+
---
|
|
95
|
+
|
|
96
|
+
## 공통 진행 패널
|
|
97
|
+
|
|
98
|
+
Spec 생성 중 Claude Code Task 패널에 상태를 표시한다. best-effort — 패널 실패가 Spec 생성을 막아서는 안 된다.
|
|
99
|
+
|
|
100
|
+
### 시작 시 (1단계 `ges_generate_spec` 호출 전)
|
|
101
|
+
|
|
102
|
+
`TaskCreate`로 패널을 생성한다.
|
|
103
|
+
|
|
104
|
+
```
|
|
105
|
+
subject: "Spec 생성 중"
|
|
106
|
+
description: "인터뷰 세션 {sessionId} 기반 Spec 구성 중..."
|
|
107
|
+
activeForm: "1/2 — 컨텍스트 요청 중"
|
|
108
|
+
```
|
|
109
|
+
|
|
110
|
+
1단계 응답(`status: "prompt"`) 수신 후 `TaskUpdate`로 갱신한다.
|
|
111
|
+
|
|
112
|
+
```
|
|
113
|
+
activeForm: "2/2 — Spec 검증 중"
|
|
114
|
+
```
|
|
115
|
+
|
|
116
|
+
### 완료 시 (2단계 `ges_generate_spec` 응답 수신 후)
|
|
117
|
+
|
|
118
|
+
`TaskUpdate`로 status를 completed로 변경한다.
|
|
119
|
+
|
|
120
|
+
```
|
|
121
|
+
status: "completed"
|
|
122
|
+
description: "Spec 생성 완료 | specId: {spec.metadata.specId}"
|
|
123
|
+
```
|
|
124
|
+
|
|
125
|
+
실패 시(error 반환):
|
|
126
|
+
|
|
127
|
+
```
|
|
128
|
+
status: "completed"
|
|
129
|
+
description: "Spec 생성 실패: {error}"
|
|
130
|
+
```
|