@tienne/gestalt 0.84.2 โ 0.85.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.
- package/CLAUDE.md +4 -4
- package/README.ko.md +72 -22
- package/README.md +73 -23
- package/dist/benchmarks/runners/passthrough-benchmark-runner.d.ts.map +1 -1
- package/dist/benchmarks/runners/passthrough-benchmark-runner.js +8 -7
- package/dist/benchmarks/runners/passthrough-benchmark-runner.js.map +1 -1
- package/dist/bin/gestalt.js +2 -2
- package/dist/package.json +1 -1
- package/dist/plugin/skills/dispatch/SKILL.md +14 -2
- package/dist/plugin/skills/execute/SKILL.md +219 -52
- package/dist/plugin/skills/interview/SKILL.md +15 -2
- package/dist/plugin/skills/solve/SKILL.md +20 -5
- package/dist/plugin/skills/spec/SKILL.md +2 -0
- package/dist/src/cli/commands/interview.d.ts.map +1 -1
- package/dist/src/cli/commands/interview.js +16 -4
- package/dist/src/cli/commands/interview.js.map +1 -1
- package/dist/src/cli/commands/memory-merge.d.ts +2 -0
- package/dist/src/cli/commands/memory-merge.d.ts.map +1 -0
- package/dist/src/cli/commands/memory-merge.js +13 -0
- package/dist/src/cli/commands/memory-merge.js.map +1 -0
- package/dist/src/cli/index.d.ts.map +1 -1
- package/dist/src/cli/index.js +7 -0
- package/dist/src/cli/index.js.map +1 -1
- package/dist/src/core/constants.d.ts +4 -0
- package/dist/src/core/constants.d.ts.map +1 -1
- package/dist/src/core/constants.js +8 -0
- package/dist/src/core/constants.js.map +1 -1
- package/dist/src/core/errors.d.ts +3 -0
- package/dist/src/core/errors.d.ts.map +1 -1
- package/dist/src/core/errors.js +7 -0
- package/dist/src/core/errors.js.map +1 -1
- package/dist/src/core/file-lock.d.ts +37 -0
- package/dist/src/core/file-lock.d.ts.map +1 -0
- package/dist/src/core/file-lock.js +143 -0
- package/dist/src/core/file-lock.js.map +1 -0
- package/dist/src/core/json-file.d.ts +40 -0
- package/dist/src/core/json-file.d.ts.map +1 -0
- package/dist/src/core/json-file.js +82 -0
- package/dist/src/core/json-file.js.map +1 -0
- package/dist/src/core/types.d.ts +86 -9
- package/dist/src/core/types.d.ts.map +1 -1
- package/dist/src/events/store.d.ts +6 -0
- package/dist/src/events/store.d.ts.map +1 -1
- package/dist/src/events/store.js +12 -0
- package/dist/src/events/store.js.map +1 -1
- package/dist/src/events/types.d.ts +7 -0
- package/dist/src/events/types.d.ts.map +1 -1
- package/dist/src/events/types.js +7 -0
- package/dist/src/events/types.js.map +1 -1
- package/dist/src/execute/artifact-verifier.d.ts +12 -0
- package/dist/src/execute/artifact-verifier.d.ts.map +1 -0
- package/dist/src/execute/artifact-verifier.js +211 -0
- package/dist/src/execute/artifact-verifier.js.map +1 -0
- package/dist/src/execute/drift-detector.d.ts +2 -0
- package/dist/src/execute/drift-detector.d.ts.map +1 -1
- package/dist/src/execute/drift-detector.js +9 -13
- package/dist/src/execute/drift-detector.js.map +1 -1
- package/dist/src/execute/orchestrators/evaluation.d.ts +5 -1
- package/dist/src/execute/orchestrators/evaluation.d.ts.map +1 -1
- package/dist/src/execute/orchestrators/evaluation.js +48 -41
- package/dist/src/execute/orchestrators/evaluation.js.map +1 -1
- package/dist/src/execute/orchestrators/evolution.d.ts +17 -3
- package/dist/src/execute/orchestrators/evolution.d.ts.map +1 -1
- package/dist/src/execute/orchestrators/evolution.js +102 -53
- package/dist/src/execute/orchestrators/evolution.js.map +1 -1
- package/dist/src/execute/orchestrators/execution.d.ts +17 -2
- package/dist/src/execute/orchestrators/execution.d.ts.map +1 -1
- package/dist/src/execute/orchestrators/execution.js +99 -3
- package/dist/src/execute/orchestrators/execution.js.map +1 -1
- package/dist/src/execute/orchestrators/planning.d.ts +18 -4
- package/dist/src/execute/orchestrators/planning.d.ts.map +1 -1
- package/dist/src/execute/orchestrators/planning.js +62 -21
- package/dist/src/execute/orchestrators/planning.js.map +1 -1
- package/dist/src/execute/orchestrators/types.d.ts +12 -1
- package/dist/src/execute/orchestrators/types.d.ts.map +1 -1
- package/dist/src/execute/passthrough-engine.d.ts +12 -5
- package/dist/src/execute/passthrough-engine.d.ts.map +1 -1
- package/dist/src/execute/passthrough-engine.js +10 -4
- package/dist/src/execute/passthrough-engine.js.map +1 -1
- package/dist/src/execute/repository.d.ts +11 -1
- package/dist/src/execute/repository.d.ts.map +1 -1
- package/dist/src/execute/repository.js +138 -19
- package/dist/src/execute/repository.js.map +1 -1
- package/dist/src/execute/session.d.ts +26 -4
- package/dist/src/execute/session.d.ts.map +1 -1
- package/dist/src/execute/session.js +165 -48
- package/dist/src/execute/session.js.map +1 -1
- package/dist/src/execute/structural-commands.d.ts +23 -0
- package/dist/src/execute/structural-commands.d.ts.map +1 -0
- package/dist/src/execute/structural-commands.js +139 -0
- package/dist/src/execute/structural-commands.js.map +1 -0
- package/dist/src/interview/engine.d.ts +1 -1
- package/dist/src/interview/engine.d.ts.map +1 -1
- package/dist/src/interview/engine.js +3 -3
- package/dist/src/interview/engine.js.map +1 -1
- package/dist/src/interview/passthrough-engine.d.ts +1 -1
- package/dist/src/interview/passthrough-engine.d.ts.map +1 -1
- package/dist/src/interview/passthrough-engine.js +20 -3
- package/dist/src/interview/passthrough-engine.js.map +1 -1
- package/dist/src/interview/repository.d.ts +8 -0
- package/dist/src/interview/repository.d.ts.map +1 -1
- package/dist/src/interview/repository.js +16 -1
- package/dist/src/interview/repository.js.map +1 -1
- package/dist/src/interview/session.d.ts +15 -2
- package/dist/src/interview/session.d.ts.map +1 -1
- package/dist/src/interview/session.js +67 -23
- package/dist/src/interview/session.js.map +1 -1
- package/dist/src/knowledge-base/embedding.d.ts +6 -1
- package/dist/src/knowledge-base/embedding.d.ts.map +1 -1
- package/dist/src/knowledge-base/embedding.js +19 -6
- package/dist/src/knowledge-base/embedding.js.map +1 -1
- package/dist/src/local-pr/registry.d.ts +1 -21
- package/dist/src/local-pr/registry.d.ts.map +1 -1
- package/dist/src/local-pr/registry.js +7 -113
- package/dist/src/local-pr/registry.js.map +1 -1
- package/dist/src/mcp/input-guard.d.ts +17 -0
- package/dist/src/mcp/input-guard.d.ts.map +1 -1
- package/dist/src/mcp/input-guard.js +1 -1
- package/dist/src/mcp/input-guard.js.map +1 -1
- package/dist/src/mcp/schemas.d.ts +62 -7
- package/dist/src/mcp/schemas.d.ts.map +1 -1
- package/dist/src/mcp/schemas.js +28 -1
- 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 +26 -40
- package/dist/src/mcp/server.js.map +1 -1
- package/dist/src/mcp/tools/execute/evaluate.d.ts.map +1 -1
- package/dist/src/mcp/tools/execute/evaluate.js +15 -9
- package/dist/src/mcp/tools/execute/evaluate.js.map +1 -1
- package/dist/src/mcp/tools/execute/evolve.d.ts +1 -0
- package/dist/src/mcp/tools/execute/evolve.d.ts.map +1 -1
- package/dist/src/mcp/tools/execute/evolve.js +102 -37
- package/dist/src/mcp/tools/execute/evolve.js.map +1 -1
- package/dist/src/mcp/tools/execute/execution.d.ts.map +1 -1
- package/dist/src/mcp/tools/execute/execution.js +66 -7
- package/dist/src/mcp/tools/execute/execution.js.map +1 -1
- package/dist/src/mcp/tools/execute/planning.d.ts.map +1 -1
- package/dist/src/mcp/tools/execute/planning.js +34 -2
- package/dist/src/mcp/tools/execute/planning.js.map +1 -1
- package/dist/src/mcp/tools/execute/roles.d.ts.map +1 -1
- package/dist/src/mcp/tools/execute/roles.js +13 -5
- package/dist/src/mcp/tools/execute/roles.js.map +1 -1
- package/dist/src/mcp/tools/execute/utility.d.ts.map +1 -1
- package/dist/src/mcp/tools/execute/utility.js +26 -0
- package/dist/src/mcp/tools/execute/utility.js.map +1 -1
- package/dist/src/mcp/tools/execute/utils.d.ts +1 -0
- package/dist/src/mcp/tools/execute/utils.d.ts.map +1 -1
- package/dist/src/mcp/tools/execute/utils.js +15 -0
- package/dist/src/mcp/tools/execute/utils.js.map +1 -1
- package/dist/src/mcp/tools/execute-passthrough.d.ts.map +1 -1
- package/dist/src/mcp/tools/execute-passthrough.js +21 -1
- package/dist/src/mcp/tools/execute-passthrough.js.map +1 -1
- package/dist/src/mcp/tools/interview-passthrough.d.ts +2 -1
- package/dist/src/mcp/tools/interview-passthrough.d.ts.map +1 -1
- package/dist/src/mcp/tools/interview-passthrough.js +4 -3
- package/dist/src/mcp/tools/interview-passthrough.js.map +1 -1
- package/dist/src/mcp/tools/interview.d.ts.map +1 -1
- package/dist/src/mcp/tools/interview.js +2 -1
- package/dist/src/mcp/tools/interview.js.map +1 -1
- package/dist/src/mcp/tools/review-passthrough.js +15 -19
- 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 +16 -8
- package/dist/src/mcp/tools/spec-passthrough.js.map +1 -1
- package/dist/src/mcp/tools/status.d.ts.map +1 -1
- package/dist/src/mcp/tools/status.js +4 -0
- package/dist/src/mcp/tools/status.js.map +1 -1
- package/dist/src/memory/memory-context-injector.d.ts +22 -8
- package/dist/src/memory/memory-context-injector.d.ts.map +1 -1
- package/dist/src/memory/memory-context-injector.js +85 -13
- package/dist/src/memory/memory-context-injector.js.map +1 -1
- package/dist/src/memory/memory-merge.d.ts +19 -0
- package/dist/src/memory/memory-merge.d.ts.map +1 -0
- package/dist/src/memory/memory-merge.js +120 -0
- package/dist/src/memory/memory-merge.js.map +1 -0
- package/dist/src/memory/project-memory-store.d.ts +15 -11
- package/dist/src/memory/project-memory-store.d.ts.map +1 -1
- package/dist/src/memory/project-memory-store.js +97 -120
- package/dist/src/memory/project-memory-store.js.map +1 -1
- package/dist/src/memory/semantic-search.d.ts +4 -1
- package/dist/src/memory/semantic-search.d.ts.map +1 -1
- package/dist/src/memory/semantic-search.js +66 -19
- package/dist/src/memory/semantic-search.js.map +1 -1
- package/dist/src/resilience/lateral.d.ts +8 -1
- package/dist/src/resilience/lateral.d.ts.map +1 -1
- package/dist/src/resilience/lateral.js +52 -4
- package/dist/src/resilience/lateral.js.map +1 -1
- package/package.json +1 -1
- package/plugin/.codex-plugin/plugin.json +1 -1
- package/plugin/.mcp.json +1 -1
- package/plugin/mcp.json +1 -1
- package/plugin/skills/dispatch/SKILL.md +14 -2
- package/plugin/skills/execute/SKILL.md +219 -52
- package/plugin/skills/interview/SKILL.md +15 -2
- package/plugin/skills/solve/SKILL.md +20 -5
- package/plugin/skills/spec/SKILL.md +2 -0
- package/dist/src/interview/mini-interview-engine.d.ts +0 -33
- package/dist/src/interview/mini-interview-engine.d.ts.map +0 -1
- package/dist/src/interview/mini-interview-engine.js +0 -102
- package/dist/src/interview/mini-interview-engine.js.map +0 -1
- package/dist/src/memory/user-profile-store.d.ts +0 -13
- package/dist/src/memory/user-profile-store.d.ts.map +0 -1
- package/dist/src/memory/user-profile-store.js +0 -85
- package/dist/src/memory/user-profile-store.js.map +0 -1
|
@@ -1,16 +1,16 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: execute
|
|
3
|
-
version:
|
|
4
|
-
description:
|
|
3
|
+
version: '1.3.0'
|
|
4
|
+
description: 'Gestalt-driven execution planner that transforms a Spec into a validated ExecutionPlan. Requires a Spec that already exists. Given only a problem statement, use solve instead โ it drives interview โ spec โ execute as one loop.'
|
|
5
5
|
triggers:
|
|
6
|
-
-
|
|
7
|
-
-
|
|
8
|
-
-
|
|
6
|
+
- 'execute'
|
|
7
|
+
- 'plan execution'
|
|
8
|
+
- 'create execution plan'
|
|
9
9
|
inputs:
|
|
10
10
|
spec:
|
|
11
11
|
type: object
|
|
12
12
|
required: true
|
|
13
|
-
description:
|
|
13
|
+
description: 'A validated Spec specification from the spec generation step'
|
|
14
14
|
outputs:
|
|
15
15
|
- executionPlan
|
|
16
16
|
---
|
|
@@ -61,6 +61,7 @@ Success condition: `score โฅ 0.85` AND `goalAlignment โฅ 0.80`
|
|
|
61
61
|
- **Flow A โ Structural Fix**: fix lint/build/test failures โ re-evaluate
|
|
62
62
|
- **Flow B โ Contextual Evolution**: patch Spec ACs/constraints โ re-execute impacted tasks โ re-evaluate
|
|
63
63
|
- **Flow C โ Lateral Thinking**: when stagnation detected, rotate through Multistability / Simplicity / Reification / Invariance personas
|
|
64
|
+
- **Flow D โ Human Decision**: when all four personas are exhausted, the session pauses as `awaiting_human` โ ask the human, then `gate_resolve` and follow `nextAction`
|
|
64
65
|
|
|
65
66
|
## Phase 0 โ ๊ท์น ํ๋ณด (ํ์ โ ์คํต ๋ถ๊ฐ)
|
|
66
67
|
|
|
@@ -109,16 +110,15 @@ ges_status() โ {
|
|
|
109
110
|
|
|
110
111
|
**`ruleSourceErrors`๊ฐ ๋น์ด ์์ง ์์ผ๋ฉด ๋ฉ์ถ๋ค.** ํ์ ๊ณผ ์ฌ์ฉ์์๊ฒ ์๋ฆด ๋ฌธ๊ตฌ๋ [`../_shared/rule-sources.md`](../_shared/rule-sources.md)์ "์ ์ธ์ด ๊นจ์ก์ ๋" ์ ์ด ์๋ณธ์ด๋ค. **`ruleSources`๊ฐ ๋น์ด ์์ง ์์๋ ์ผ๋ถ๊ฐ ๋น ์ง ์ํ์ผ ์ ์์ผ๋ ๋ฐฐ์ด ๊ธธ์ด๋ก ํ์ ํ์ง ์๋๋ค.**
|
|
111
112
|
|
|
112
|
-
|
|
113
113
|
`scope`๊ฐ ๋น์ด ์์ง ์์ผ๋ฉด **์ด๋ฒ Spec์ ํด๋นํ๋ ์์ค๋ง** ์ฝ๋๋ค. ๋ฐฑ์๋ ํ์คํฌ๋ง ์๋ Spec์์ ๋์์ธ ํ ํฐ์ ๋ฌผ์ด๋ณผ ์ด์ ๊ฐ ์๋ค. ์ฌ๊ธฐ๋ ๊ฑด๋๋ฆด ํ์ผ์ด ์ ํด์ง ์๋ฆฌ๋ผ ํ๊ทธ๋ฅผ ๊ทธ ํ์ผ์์ ๋ฝ๋๋ค.
|
|
114
114
|
|
|
115
115
|
**`solve`๋ก ๋ค์ด์ ์์ค ์ฝ๊ธฐ๋ฅผ ๊ฑด๋๋ฐ๋ ๊ฒฝ์ฐ์๋ ์ด ํ์ ์ ํ๋ค.** ๊ฑด๋๋ฐ๋ ๊ฑด ์ฝ๊ธฐ์ง ํ์ ์ด ์๋๋ค. ์ ์คํฌ์ ํ์ผ์ ๋ชจ๋ฅธ ์ฑ ๋๊ฒผ์ผ๋ฏ๋ก ์ฌ๊ธฐ์ ์ธ ๊ฐ์ง๊ฐ ์ ํด์ง๋ค.
|
|
116
116
|
|
|
117
|
-
| ์์์ ๋์ด์จ ๊ฒ
|
|
118
|
-
|
|
117
|
+
| ์์์ ๋์ด์จ ๊ฒ | ์ฌ๊ธฐ์ |
|
|
118
|
+
| -------------------------------------------------------------- | -------------------------------------------------------------------------------------------------- |
|
|
119
119
|
| ๋๊ฒ ์ก์ ์ฝ์ด๋ `convention` ์์ค ์ค ํ์ผ์ ๋ณด๋ ์ ๊ฑธ๋ฆฌ๋ ๊ฒ | `repoRules.sources`์์ ๋บ๋ค. ๊ฑฐ๊ธฐ์ ๋น ์ง๋ฉด ์๋ธ์์ด์ ํธ ํ๋กฌํํธ์ ์๋ฃ ๋ณด๊ณ ์์ชฝ์์ ํจ๊ป ๋น ์ง๋ค |
|
|
120
|
-
| ํ์ ์ ๋ฏธ๋ค๋ `stop`๊ณผ `delegate` ์์ค
|
|
121
|
-
| ์๋ก ๊ฑธ๋ฆฌ๋ ์์ค
|
|
120
|
+
| ํ์ ์ ๋ฏธ๋ค๋ `stop`๊ณผ `delegate` ์์ค | ์ฌ๊ธฐ์ ํ์ ํ๋ค. ๊ฑธ๋ฆฌ๋ฉด ์ฝ๊ฑฐ๋ ๋ฉ์ถ๊ฑฐ๋ ๋๊ธด๋ค |
|
|
121
|
+
| ์๋ก ๊ฑธ๋ฆฌ๋ ์์ค | ๊ทธ๊ฒ๋ง ๋ ์ฝ๋๋ค |
|
|
122
122
|
|
|
123
123
|
`trust: "delegate"`์ธ ์์ค๊ฐ ์ด๋ฒ ์์
๋ฒ์์ ๊ฑธ๋ฆฌ๋ฉด ๊ทธ ๋ถ๋ถ์ ๊ฒ์ํํธ๊ฐ ์ง์ ๋ง๋ค์ง ์๊ณ ๋๊ธด๋ค. ์ด๋๊น์ง ๋๊ธฐ๋์ง ์ฌ์ฉ์์๊ฒ ์๋ฆฌ๊ณ ์งํํ๋ค.
|
|
124
124
|
|
|
@@ -145,41 +145,52 @@ API ํค ์์ด MCP ์๋ฒ ์คํ ์ ์๋ ํ์ฑํ. LLM ์์
์ caller๊ฐ
|
|
|
145
145
|
### Action๋ณ ์ฌ์ฉ๋ฒ
|
|
146
146
|
|
|
147
147
|
**`start`** โ ์คํ ๊ณํ ์ธ์
์์
|
|
148
|
+
|
|
148
149
|
```json
|
|
149
150
|
{ "action": "start", "spec": { ... } }
|
|
150
151
|
```
|
|
152
|
+
|
|
151
153
|
โ `{ status, sessionId, specId, executeContext, message }`
|
|
152
154
|
|
|
153
155
|
**`plan_step`** โ ๊ฐ ๊ณํ ๋จ๊ณ ๊ฒฐ๊ณผ ์ ์ถ
|
|
156
|
+
|
|
154
157
|
```json
|
|
155
158
|
{ "action": "plan_step", "sessionId": "...", "stepResult": { "principle": "figure_ground", "classifiedACs": [...] } }
|
|
156
159
|
```
|
|
160
|
+
|
|
157
161
|
โ `{ status, sessionId, stepsCompleted, isLastStep, executeContext?, message }`
|
|
158
162
|
|
|
163
|
+
continuity์์ DAG๊ฐ ๋ฌดํจ๋ฉด `error`๊ฐ ํจ๊ป ์ค๋ฆฐ `status: "plan_rewound"` ์๋ต์ด ์จ๋ค. [DAG๊ฐ ๋ฌดํจ์ผ ๋](#dag๊ฐ-๋ฌดํจ์ผ-๋--closure๋ก-๋๊ฐ๊ธฐ)๋ฅผ ๋ณธ๋ค.
|
|
164
|
+
|
|
159
165
|
**`plan_complete`** โ ์ต์ข
์คํ ๊ณํ ์กฐ๋ฆฝ
|
|
166
|
+
|
|
160
167
|
```json
|
|
161
168
|
{ "action": "plan_complete", "sessionId": "..." }
|
|
162
169
|
```
|
|
170
|
+
|
|
163
171
|
โ `{ status, sessionId, executionPlan, message }`
|
|
164
172
|
|
|
173
|
+
์ ์ฅ๋ ๊ณํ์ DAG๊ฐ ๋ฌดํจ๋ฉด ํ์ ํ์ง ์๊ณ ๊ฐ์ `plan_rewound` ์๋ต์ ๋๋ ค์ค๋ค.
|
|
174
|
+
|
|
165
175
|
**`status`** โ ์ธ์
์ํ ํ์ธ
|
|
176
|
+
|
|
166
177
|
```json
|
|
167
178
|
{ "action": "status", "sessionId": "..." }
|
|
168
179
|
```
|
|
169
180
|
|
|
170
181
|
### ExecuteContext ํ๋
|
|
171
182
|
|
|
172
|
-
| ํ๋
|
|
173
|
-
|
|
174
|
-
| `systemPrompt`
|
|
175
|
-
| `planningPrompt`
|
|
176
|
-
| `
|
|
177
|
-
| `principleStrategy` | string | ํด๋น ์๋ฆฌ์ ์ ๋ต ์ค๋ช
|
|
178
|
-
| `phase`
|
|
179
|
-
| `stepNumber`
|
|
180
|
-
| `totalSteps`
|
|
181
|
-
| `spec`
|
|
182
|
-
| `previousSteps`
|
|
183
|
+
| ํ๋ | ํ์
| ์ค๋ช
|
|
|
184
|
+
| ------------------- | ------ | ----------------------------------------------------------------------------------------------- |
|
|
185
|
+
| `systemPrompt` | string | ์คํ ๊ณํ ์์คํ
ํ๋กฌํํธ |
|
|
186
|
+
| `planningPrompt` | string | ํ์ฌ ๋จ๊ณ์ ๊ณํ ํ๋กฌํํธ |
|
|
187
|
+
| `currentStage` | string | ํ์ฌ ๋จ๊ณ๋ฅผ ํ์ด ์ด ๋ฌธ๊ตฌ (์: `๋น ์ง ์๊ตฌ์ฌํญ ์ฑ์ฐ๊ธฐ`). ์๋ฒ ๋ด๋ถ์ ์๋ฆฌ ์ด๋ฆ ๋์ ์๋ต์ ์ค๋ฆฐ๋ค |
|
|
188
|
+
| `principleStrategy` | string | ํด๋น ์๋ฆฌ์ ์ ๋ต ์ค๋ช
|
|
|
189
|
+
| `phase` | string | ํ์ฌ ๋จ๊ณ (`planning`) |
|
|
190
|
+
| `stepNumber` | number | ํ์ฌ ์คํ
๋ฒํธ (1-4) |
|
|
191
|
+
| `totalSteps` | number | ์ ์ฒด ์คํ
์ (4) |
|
|
192
|
+
| `spec` | Spec | ์๋ณธ Spec ์คํ |
|
|
193
|
+
| `previousSteps` | array | ์ด์ ๋จ๊ณ ๊ฒฐ๊ณผ๋ค |
|
|
183
194
|
|
|
184
195
|
### Planning Principle ์์
|
|
185
196
|
|
|
@@ -195,6 +206,31 @@ API ํค ์์ด MCP ์๋ฒ ์คํ ์ ์๋ ํ์ฑํ. LLM ์์
์ caller๊ฐ
|
|
|
195
206
|
- Continuity ๋จ๊ณ์์๋ ์๋ฒ ์ธก DAG ๊ฒ์ฆ์ด ์ถ๊ฐ๋ก ์ํ๋จ
|
|
196
207
|
- ๋ชจ๋ AC๊ฐ ๋ถ๋ฅ๋์ด์ผ ํ๊ณ ๋ชจ๋ Task๊ฐ ๊ทธ๋ฃน์ ํฌํจ๋์ด์ผ ํจ
|
|
197
208
|
|
|
209
|
+
### DAG๊ฐ ๋ฌดํจ์ผ ๋ โ closure๋ก ๋๊ฐ๊ธฐ
|
|
210
|
+
|
|
211
|
+
์ํ์ closure ๋จ๊ณ `atomicTasks`์ `dependsOn`์์ ์๊ธด๋ค. continuity๋ง ๋ค์ ๋ด์๋ ๋ชป ๊ณ ์น๋ค. ๊ทธ๋์ `dagValidation.isValid: false`๋ฅผ ๋ณด๊ณ ํ๊ฑฐ๋ ์๋ฒ๊ฐ ์ํ์ด๋ ์ถฉ๋์ ์ฐพ์ผ๋ฉด `plan_step`(continuity)๊ณผ `plan_complete` ๋ ๋ค ๊ณํ์ ํ์ ํ์ง ์๋๋ค. ๋์ ์ธ์
์ figure_ground๊น์ง๋ง ๋จ๊ธฐ๊ณ ๋๊ฐ์ ๋ค ์ด๋ ๊ฒ ๋๋ ค์ค๋ค.
|
|
212
|
+
|
|
213
|
+
```json
|
|
214
|
+
{
|
|
215
|
+
"error": "Dependency DAG is invalid (...)",
|
|
216
|
+
"status": "plan_rewound",
|
|
217
|
+
"sessionId": "...",
|
|
218
|
+
"rewoundToStep": 2,
|
|
219
|
+
"hasCycles": true,
|
|
220
|
+
"cycleDetails": ["Cycle detected involving tasks: task-0 โ task-1"],
|
|
221
|
+
"conflictDetails": [],
|
|
222
|
+
"executeContext": { "currentStage": "๋น ์ง ์๊ตฌ์ฌํญ ์ฑ์ฐ๊ธฐ", "stepNumber": 2, "...": "..." },
|
|
223
|
+
"nextAction": "plan_step"
|
|
224
|
+
}
|
|
225
|
+
```
|
|
226
|
+
|
|
227
|
+
- `cycleDetails`์ `conflictDetails`๋ฅผ ๋ณด๊ณ ๋ฌธ์ ๊ฐ ๋ ํ์คํฌ์ `dependsOn`์ ๊ณ ์น๋ค.
|
|
228
|
+
- ์๋ต์ `executeContext`๋ก closure๋ถํฐ ๋ค์ ๋ธ๋ค. ๊ทธ๋ค์ proximity์ continuity๋ฅผ ์ฐจ๋ก๋ก ๋ค์ ์ ์ถํ๋ค.
|
|
229
|
+
- `isValid: false`๋ฅผ ๊ทธ๋๋ก ๋๊ณ continuity๋ง ๋ค์ ๋ด๋ฉด ๋ ๋๊ฐ๊ธด๋ค. ํธ์ถ์ ๋ณด๊ณ ๊ฐ ๋ฌดํจ์ฌ๋ ๋ง๋๋ค.
|
|
230
|
+
- ์ด ์๋ต์๋ `error` ํ๋๊ฐ ํจ๊ป ์ค๋ฆฐ๋ค. `plan_complete`๋ `execute_start`๋ก ๋์ด๊ฐ์ง ์๋๋ค.
|
|
231
|
+
- ๋๊ฐ์ ๋ค์ closure ํ๋กฌํํธ์๋ ์ํ ์ ๋ณด๋ ์ง์ `atomicTasks`๋ ์๋ค. ์๋ธ์์ด์ ํธ๋ก ๋ค์ ๋ผ ๋๋ ์๋ต์ `cycleDetails`์ `conflictDetails`, ์ง์ ์ ์ ์ถํ `atomicTasks`๋ฅผ ํจ๊ป ๋๊ธฐ๊ณ ์ํ์ ๋ง๋ `dependsOn`์ ๊ณ ์น๋ผ๊ณ ์ ๋๋ค.
|
|
232
|
+
- ๊ฐ์ ์ธ์
์์ `plan_rewound`๋ฅผ ์ฐ์ ๋ ๋ฒ ๋ฐ์ผ๋ฉด closure๋ฅผ ๋ค์ ์ ์ถํ์ง ์๋๋ค. `cycleDetails`๋ฅผ ์ฌ์ฉ์์๊ฒ ๋ณด์ฌ์ฃผ๊ณ ์ด๋ป๊ฒ ํ ์ง ๋ฌป๋๋ค. ์๋ฒ๋ ํ์๋ฅผ ์ธ์ง ์์ผ๋ฏ๋ก ์คํฌ์ด ์ผ๋ค.
|
|
233
|
+
|
|
198
234
|
### Reasoning Model ์๋ธ์์ด์ ํธ๋ก ํ๋๋ ์ถ๋ก
|
|
199
235
|
|
|
200
236
|
Phase 1 ํ๋๋(`plan_step` 4๋จ๊ณ + `plan_complete`)์ Spec์ ํ์คํฌ DAG๋ก ๋ถํดํ๋ ๊น์ one-shot ์ถ๋ก ์ด๋ผ, ๊ฒ์ํํธ์์ ์์ ์ถ๋ก ๋ชจ๋ธ์ด ์ง์ง ๊ฐ์ ํ๋ ์ง์ ์ด๋ค. ๊ฐ `plan_step`์ `stepResult`(classifiedACs / atomicTasks / taskGroups / dagValidation)๋ฅผ ๋ง๋๋ ์ถ๋ก ์ ํ์ฌ ์ธ์
์ด ์ง์ ํ์ง ๋ง๊ณ ๋ณ๋ Agent ์๋ธ์์ด์ ํธ๋ก ์คํฐํ๋ค.
|
|
@@ -207,7 +243,7 @@ Phase 1 ํ๋๋(`plan_step` 4๋จ๊ณ + `plan_complete`)์ Spec์ ํ์คํฌ DA
|
|
|
207
243
|
ges_status() โ { reasoningModel: "fable", reasoningModelFallback: "opus", ... }
|
|
208
244
|
```
|
|
209
245
|
|
|
210
|
-
**์คํฐ.** ๊ฐ `plan_step`(๊ทธ๋ฆฌ๊ณ `plan_complete` ์กฐ๋ฆฝ์ ์ํ ์ถ๋ก ์ด ํ์ํ๋ฉด ๊ทธ ๋จ๊ณ)์์ Agent ๋๊ตฌ๋ก ์๋ธ์์ด์ ํธ๋ฅผ ๋์ฐ๋ `model` ํ๋ผ๋ฏธํฐ์ `reasoningModel` ๊ฐ์ ๋๊ธด๋ค. ์๋ธ์์ด์ ํธ์๋ ํด๋น ๋จ๊ณ์ `executeContext`(`systemPrompt`, `planningPrompt`, `
|
|
246
|
+
**์คํฐ.** ๊ฐ `plan_step`(๊ทธ๋ฆฌ๊ณ `plan_complete` ์กฐ๋ฆฝ์ ์ํ ์ถ๋ก ์ด ํ์ํ๋ฉด ๊ทธ ๋จ๊ณ)์์ Agent ๋๊ตฌ๋ก ์๋ธ์์ด์ ํธ๋ฅผ ๋์ฐ๋ `model` ํ๋ผ๋ฏธํฐ์ `reasoningModel` ๊ฐ์ ๋๊ธด๋ค. ์๋ธ์์ด์ ํธ์๋ ํด๋น ๋จ๊ณ์ `executeContext`(`systemPrompt`, `planningPrompt`, `currentStage`, `spec`, `previousSteps`)๋ฅผ ์ ๋ฌํ๊ณ ๊ทธ ๋จ๊ณ์ `stepResult`๋ฅผ ์ฐ์ถํ๊ฒ ํ๋ค. ๊ฒฐ๊ณผ๋ฅผ `plan_step`์ผ๋ก ์ ์ถํ๋ค.
|
|
211
247
|
|
|
212
248
|
**ํด๋ฐฑ์ ์คํฌ ๋ฐํ์์์ ๋ฐ๋ํ๋ค.** ์๋ฒ๋ ํด๋ฐฑ ๋์(`reasoningModelFallback`)๋ง ์๋ ค์ค ๋ฟ, ๋ชจ๋ธ ๊ฐ์ฉ์ฑ์ ๊ฐ์งํ๊ฑฐ๋ ์ฌ์๋ํ์ง ์๋๋ค. Agent ๋๊ตฌ๊ฐ `reasoningModel`(์: `fable`)์ ์ง์ํ์ง ์์ ์คํฐ์ด ๊ฑฐ๋ถ/์คํจํ๋ฉด, ๊ทธ๋ ์คํฌ์ด ์ง์ `model`์ `reasoningModelFallback`(์: `opus`)๋ก ๋ฐ๊ฟ 1ํ ์ฌ์๋ํ๋ค. ํด๋ฐฑ ํ๋จ๊ณผ ์ฌ์๋๋ ์ ์ ์ผ๋ก ์ด ์คํฌ ๋ฐํ์์ ์ฑ
์์ด๋ค.
|
|
213
249
|
|
|
@@ -220,9 +256,18 @@ ges_status() โ { reasoningModel: "fable", reasoningModelFallback: "opus", ..
|
|
|
220
256
|
`plan_complete` ์ดํ ํธ์ถ. ํ์คํฌ ๋ชฉ๋ก์ ๋ฐ์ ์คํ ์ค๋น.
|
|
221
257
|
|
|
222
258
|
```json
|
|
223
|
-
{ "action": "execute_start", "sessionId": "..." }
|
|
259
|
+
{ "action": "execute_start", "sessionId": "...", "cwd": "/path/to/project" }
|
|
224
260
|
```
|
|
225
|
-
|
|
261
|
+
|
|
262
|
+
โ `{ status, sessionId, executionPlan, artifactCheck, message }`
|
|
263
|
+
|
|
264
|
+
`cwd`์๋ ํ๋ก์ ํธ ๋ฃจํธ๋ฅผ ๋๊ธด๋ค. ์๋ฒ๊ฐ ์ด ๋๋ ํ ๋ฆฌ์์ git ์์
ํธ๋ฆฌ๊ฐ ์คํ ์์ ์์ ์ ์ด๋ค ์ํ์๋์ง ์ก์ ๋๊ณ ๋์ค์ `completed` ๋ณด๊ณ ์ `artifacts`๋ฅผ ๊ทธ ์ํ์ ๋์กฐํ๋ค. `cwd`๋ฅผ ๋น์ฐ๋ฉด ์ธ์
์ `codeGraphRepoRoot`๋ฅผ ์ฐ๊ณ ๊ทธ๊ฒ๋ ์์ผ๋ฉด ์๋ฒ ํ๋ก์ธ์ค์ cwd๋ฅผ ์ด๋ค. git ๋ ํฌ๊ฐ ์๋๋ฉด ๋์กฐ ์์ด ์งํํ๋ค. ๋์กฐ ์ค์๋ ๊ทธ ๋ ํฌ์ `filter.*.clean` ์ค์ ์ด ์คํ๋๋ฏ๋ก ๋ฏฟ์ง ์๋ ๋ ํฌ๋ฅผ `cwd`๋ก ๋๊ธฐ์ง ์๋๋ค.
|
|
265
|
+
|
|
266
|
+
์๋ต์๋ `artifactCheck: { repoRoot, baseline, error? }`๊ฐ ๋ถ๋๋ค. `repoRoot`๋ ์ค์ ๋ก ๋์กฐ์ ์ธ ๋๋ ํ ๋ฆฌ๋ค. `baseline`์ ์๋ ์
์ค ํ๋๋ค. `execute_task` ์๋ต์ `artifactCheck`๋ `verified` ๊ฐ์ ๋ฌธ์์ด ํ๋๋ผ ๊ผด์ด ๋ค๋ฅด๋ค.
|
|
267
|
+
|
|
268
|
+
- `captured`: ์์ ์์ ์ํ๋ฅผ ์ก์๋ค. ์ดํ `completed` ๋ณด๊ณ ๋ฅผ ๋์กฐํ๋ค
|
|
269
|
+
- `no_baseline`: git ๋ ํฌ๊ฐ ์๋๋ผ ๋์กฐํ์ง ์๋๋ค
|
|
270
|
+
- `baseline_failed`: git ํธ์ถ์ด ์คํจํด ๋์กฐํ์ง ์๋๋ค. ์คํจ ๋ด์ฉ์ `error`์ ๋ด๊ธด๋ค
|
|
226
271
|
|
|
227
272
|
---
|
|
228
273
|
|
|
@@ -236,6 +281,7 @@ ges_status() โ { reasoningModel: "fable", reasoningModelFallback: "opus", ..
|
|
|
236
281
|
// Call 1: ๋งค์นญ ์ปจํ
์คํธ ์์ฒญ
|
|
237
282
|
{ "action": "role_match", "sessionId": "..." }
|
|
238
283
|
```
|
|
284
|
+
|
|
239
285
|
โ `{ matchContext }` โ ์ด๋ค ์์ด์ ํธ๊ฐ ์ ํฉํ์ง ํ๋จํ๊ธฐ ์ํ ํ๋กฌํํธ
|
|
240
286
|
|
|
241
287
|
`matchContext.tierHint`๋ `"frugal"`์ด๋ค. `matchContext.availableAgents`์๋ ์์ด์ ํธ 20์ฌ ๊ฐ์ description์ด ํต์งธ๋ก ๋ค์ด ์๋ค. ๊ทธ๊ฑธ ์ธ์
์ปจํ
์คํธ์ ๋ค์ด๋ ๋์ **์๋ธ์์ด์ ํธ์ ๋๊ฒจ 1์ฐจ ํ๋ณด๋ฅผ ์ขํ๋ค.**
|
|
@@ -259,11 +305,22 @@ Agent {
|
|
|
259
305
|
"action": "role_match",
|
|
260
306
|
"sessionId": "...",
|
|
261
307
|
"matchResult": [
|
|
262
|
-
{
|
|
263
|
-
|
|
308
|
+
{
|
|
309
|
+
"agentName": "technical-writer",
|
|
310
|
+
"domain": ["documentation"],
|
|
311
|
+
"relevanceScore": 0.9,
|
|
312
|
+
"reasoning": "..."
|
|
313
|
+
},
|
|
314
|
+
{
|
|
315
|
+
"agentName": "architect",
|
|
316
|
+
"domain": ["architecture"],
|
|
317
|
+
"relevanceScore": 0.7,
|
|
318
|
+
"reasoning": "..."
|
|
319
|
+
}
|
|
264
320
|
]
|
|
265
321
|
}
|
|
266
322
|
```
|
|
323
|
+
|
|
267
324
|
โ `{ perspectivePrompts }` โ ๊ฐ ์์ด์ ํธ๋ณ ๊ด์ ์์ฑ ํ๋กฌํํธ
|
|
268
325
|
|
|
269
326
|
**`role_consensus` โ ๋ค์ค ๊ด์ ํฉ์ (2-Call)**
|
|
@@ -279,6 +336,7 @@ Agent {
|
|
|
279
336
|
]
|
|
280
337
|
}
|
|
281
338
|
```
|
|
339
|
+
|
|
282
340
|
โ `{ synthesisContext }` โ ๊ด์ ํตํฉ ํ๋กฌํํธ
|
|
283
341
|
|
|
284
342
|
```json
|
|
@@ -293,6 +351,7 @@ Agent {
|
|
|
293
351
|
}
|
|
294
352
|
}
|
|
295
353
|
```
|
|
354
|
+
|
|
296
355
|
โ `{ roleGuidance }` โ execute_task ์ ์ฐธ์กฐํ ์ต์ข
guidance
|
|
297
356
|
|
|
298
357
|
---
|
|
@@ -320,13 +379,13 @@ Agent {
|
|
|
320
379
|
|
|
321
380
|
```
|
|
322
381
|
// ๊ฐ์ ๋ฉ์์ง์์ ๋์ ํธ์ถ โ Agent 1
|
|
323
|
-
Agent(task: "task-0 ์คํ: {task-0 title}\n์ปจํ
์คํธ: {taskContext}\n์๋ฃ ํ execute_task๋ก ๊ฒฐ๊ณผ
|
|
382
|
+
Agent(task: "task-0 ์คํ: {task-0 title}\n์ปจํ
์คํธ: {taskContext}\n์๋ฃ ํ execute_task๋ก ๊ฒฐ๊ณผ ์ ์ถ. ๋ฐ๊พผ ํ์ผ์ ์ ๋ถ artifacts์ ์ ๋๋ค. ํ์ผ์ ์ ๋ฐ๊พธ๋ ํ์คํฌ๋ฉด noCodeChange: true๋ฅผ ๊ฐ์ด ๋ธ๋ค. verification_failed๊ฐ ์ค๋ฉด ๊ณ ์ณ์ ๋ค์ ์ ์ถํ๊ณ ๋๋ด์ง ๋ชปํ์ผ๋ฉด status: \"failed\"๋ก ๋ธ๋ค. serverError: true๊ฐ ํจ๊ป ์ค๋ฉด ๊ณ ์น์ง ๋ง๊ณ ์ ์ ๋ค ๊ฐ์ ๊ฒฐ๊ณผ๋ฅผ ๋ค์ ๋ด๊ณ ๊ณ์ ์คํจํ๋ฉด status: \"failed\"๋ก ๋ธ๋ค")
|
|
324
383
|
|
|
325
384
|
// ๊ฐ์ ๋ฉ์์ง์์ ๋์ ํธ์ถ โ Agent 2
|
|
326
|
-
Agent(task: "task-1 ์คํ: {task-1 title}\n์ปจํ
์คํธ: {taskContext}\n์๋ฃ ํ execute_task๋ก ๊ฒฐ๊ณผ
|
|
385
|
+
Agent(task: "task-1 ์คํ: {task-1 title}\n์ปจํ
์คํธ: {taskContext}\n์๋ฃ ํ execute_task๋ก ๊ฒฐ๊ณผ ์ ์ถ. ๋ฐ๊พผ ํ์ผ์ ์ ๋ถ artifacts์ ์ ๋๋ค. ํ์ผ์ ์ ๋ฐ๊พธ๋ ํ์คํฌ๋ฉด noCodeChange: true๋ฅผ ๊ฐ์ด ๋ธ๋ค. verification_failed๊ฐ ์ค๋ฉด ๊ณ ์ณ์ ๋ค์ ์ ์ถํ๊ณ ๋๋ด์ง ๋ชปํ์ผ๋ฉด status: \"failed\"๋ก ๋ธ๋ค. serverError: true๊ฐ ํจ๊ป ์ค๋ฉด ๊ณ ์น์ง ๋ง๊ณ ์ ์ ๋ค ๊ฐ์ ๊ฒฐ๊ณผ๋ฅผ ๋ค์ ๋ด๊ณ ๊ณ์ ์คํจํ๋ฉด status: \"failed\"๋ก ๋ธ๋ค")
|
|
327
386
|
|
|
328
387
|
// ๊ฐ์ ๋ฉ์์ง์์ ๋์ ํธ์ถ โ Agent 3
|
|
329
|
-
Agent(task: "task-2 ์คํ: {task-2 title}\n์ปจํ
์คํธ: {taskContext}\n์๋ฃ ํ execute_task๋ก ๊ฒฐ๊ณผ
|
|
388
|
+
Agent(task: "task-2 ์คํ: {task-2 title}\n์ปจํ
์คํธ: {taskContext}\n์๋ฃ ํ execute_task๋ก ๊ฒฐ๊ณผ ์ ์ถ. ๋ฐ๊พผ ํ์ผ์ ์ ๋ถ artifacts์ ์ ๋๋ค. ํ์ผ์ ์ ๋ฐ๊พธ๋ ํ์คํฌ๋ฉด noCodeChange: true๋ฅผ ๊ฐ์ด ๋ธ๋ค. verification_failed๊ฐ ์ค๋ฉด ๊ณ ์ณ์ ๋ค์ ์ ์ถํ๊ณ ๋๋ด์ง ๋ชปํ์ผ๋ฉด status: \"failed\"๋ก ๋ธ๋ค. serverError: true๊ฐ ํจ๊ป ์ค๋ฉด ๊ณ ์น์ง ๋ง๊ณ ์ ์ ๋ค ๊ฐ์ ๊ฒฐ๊ณผ๋ฅผ ๋ค์ ๋ด๊ณ ๊ณ์ ์คํจํ๋ฉด status: \"failed\"๋ก ๋ธ๋ค")
|
|
330
389
|
```
|
|
331
390
|
|
|
332
391
|
**๊ฐ Agent์ execute_task ์ ์ถ:**
|
|
@@ -345,6 +404,7 @@ Agent(task: "task-2 ์คํ: {task-2 title}\n์ปจํ
์คํธ: {taskContext}\n์๋ฃ
|
|
|
345
404
|
```
|
|
346
405
|
|
|
347
406
|
์คํจ ์:
|
|
407
|
+
|
|
348
408
|
```json
|
|
349
409
|
{
|
|
350
410
|
"action": "execute_task",
|
|
@@ -379,10 +439,54 @@ role_match/role_consensus๋ก ์ป์ `roleGuidance`๋ฅผ ์ฐธ์กฐํด ํ์คํฌ๋ฅผ ์
|
|
|
379
439
|
}
|
|
380
440
|
}
|
|
381
441
|
```
|
|
382
|
-
|
|
442
|
+
|
|
443
|
+
โ `{ status, nextTaskId?, allTasksCompleted, artifactCheck?, driftResult? }`
|
|
383
444
|
|
|
384
445
|
`driftResult`๊ฐ ๋ฐํ๋๋ฉด Spec๊ณผ์ drift ๊ฒฝ๊ณ โ ๊ณ์ ์งํํ๋ ๋ค์ ํ์คํฌ์์ ๋ฐฉํฅ ๋ณด์ .
|
|
385
446
|
|
|
447
|
+
**artifacts ๋์กฐ.** `status: "completed"`๋ก ๋ณด๊ณ ํ๋ฉด ์๋ฒ๊ฐ `artifacts`์ ํ์ผ์ด ์คํ ์์ ๋ค๋ก ์ค์ ๋ก ๋ฐ๋์๋์ง ํ์ธํ๋ค. ์์ ํ๊ฑฐ๋ ์๋ก ๋ง๋ค๊ฑฐ๋ ์ปค๋ฐํ๊ฑฐ๋ ์ง์ด ํ์ผ์ ๋ชจ๋ ๋ฐ๋ ๊ฒ์ผ๋ก ์น๋ค. ์๋ ๊ฒฝ๋ก๋ `execute_start`์ `cwd` ๊ธฐ์ค์ด๋ค. ๋๋ ํ ๋ฆฌ๋ gitignore์ ๊ฑธ๋ฆฐ ๊ฒฝ๋ก๋ ํ์ธํ ์ ์์ผ๋ ๋ฐ๊พผ ์์ค ํ์ผ์ ํ๋์ฉ ์ ๋๋ค. `failed`์ `skipped`๋ ๋์กฐํ์ง ์๋๋ค. ๋์กฐ๋ `execute_task`์๋ง ์๊ณ `evolve_re_execute`์ `evolve_fix`๋ก ๋ธ ๊ฒฐ๊ณผ๋ ๋์กฐํ์ง ์๋๋ค.
|
|
448
|
+
|
|
449
|
+
`artifacts`๊ฐ ๋น `completed`๋ ๊ฑฐ์ ๋๋ค. ์กฐ์ฌ๋ ํ๋จ์ฒ๋ผ ์๋ ํ์ผ์ ์ ๋ฐ๊พธ๋ ํ์คํฌ๋ `noCodeChange: true`๋ฅผ ๊ฐ์ด ๋ธ๋ค. `artifacts`๊ฐ ํ๋๋ผ๋ ์์ผ๋ฉด `noCodeChange`์ ์๊ด์์ด ๋์กฐํ๋ค.
|
|
450
|
+
|
|
451
|
+
```json
|
|
452
|
+
{
|
|
453
|
+
"action": "execute_task",
|
|
454
|
+
"sessionId": "...",
|
|
455
|
+
"taskResult": {
|
|
456
|
+
"taskId": "task-1",
|
|
457
|
+
"status": "completed",
|
|
458
|
+
"output": "๊ธฐ์กด ์ธ์ฆ ํ๋ฆ ์กฐ์ฌ ๊ฒฐ๊ณผ ์์ฝ",
|
|
459
|
+
"artifacts": [],
|
|
460
|
+
"noCodeChange": true
|
|
461
|
+
}
|
|
462
|
+
}
|
|
463
|
+
```
|
|
464
|
+
|
|
465
|
+
ํต๊ณผํ๋ฉด ์๋ต์ `artifactCheck`๊ฐ ๋ถ๋๋ค.
|
|
466
|
+
|
|
467
|
+
- `verified`: ๋์กฐ๋ฅผ ํต๊ณผํ ๊ฒฝ์ฐ
|
|
468
|
+
- `no_code_change`: `noCodeChange: true`๋ก ๋์กฐ๋ฅผ ๊ฑด๋๋ด ๊ฒฝ์ฐ
|
|
469
|
+
- `no_baseline`: git ๋ ํฌ๊ฐ ์๋๋ผ ์์ ์์ ์ํ๊ฐ ์๋ ๊ฒฝ์ฐ
|
|
470
|
+
- `baseline_failed`: `execute_start` ๋ git ํธ์ถ์ด ์คํจํด ์์ ์์ ์ํ๋ฅผ ๋ชป ์ก์ ๊ฒฝ์ฐ
|
|
471
|
+
- `baseline_truncated`: ์์ ์์ ์ ์ปค๋ฐ ์ ๋ ํ์ผ์ด 2000๊ฐ๋ฅผ ๋์ด ์ด๋ฒคํธ์ ํด์๋ฅผ ๋ค ๋ชป ๋จ๊ฒผ๊ณ ์ด ์ธ์
์ ๋ค๋ฅธ ์๋ฒ ํ๋ก์ธ์ค๊ฐ ์ด๋ฒคํธ์์ ๋ถ๋ฌ์ ๋์กฐํ์ง ๋ชปํ ๊ฒฝ์ฐ. ํด์๋ ์คํ์ ์์ํ ํ๋ก์ธ์ค ๋ฉ๋ชจ๋ฆฌ์๋ง ์๊ณ ์ด๋ฒคํธ์๋ ์ฌ์ ๋ง ๋จ๋๋ค. ๊ทธ๋์ ์๋ฒ๊ฐ ์ฌ์์๋๊ฑฐ๋ MCP ์๋ฒ๋ฅผ ๋ฐ๋ก ๋์ฐ๋ dispatch ์์ปค๊ฐ ๋ณด๊ณ ํ๋ฉด ๋์กฐ ์์ด ํต๊ณผํ๋ค. ์์ํ ํ๋ก์ธ์ค๋ ์ํ๋ฅผ ์ก์์ผ๋ฏ๋ก `execute_start` ์๋ต์ `artifactCheck.baseline`์ ์ด๋๋ `captured`๋ก ๋๊ฐ๋ค. dispatch๋ฅผ ์ธ ๋ ์์ ์ ์ ์ปค๋ฐ ์ ๋ ํ์ผ์ ์ค์ฌ ๋๋ค
|
|
472
|
+
|
|
473
|
+
**`verification_failed`๋ฅผ ๋ฐ์ผ๋ฉด.** ๋ฐ๋์ง ์์ ํ์ผ์ด ํ๋๋ผ๋ ์์ผ๋ฉด ์๋ฒ๋ ๊ฒฐ๊ณผ๋ฅผ ๊ธฐ๋กํ์ง ์๊ณ ์ด๋ ๊ฒ ๋๋ ค์ค๋ค.
|
|
474
|
+
|
|
475
|
+
```json
|
|
476
|
+
{
|
|
477
|
+
"status": "verification_failed",
|
|
478
|
+
"recorded": false,
|
|
479
|
+
"problems": [{ "path": "src/auth.ts", "status": "unchanged", "hint": "์คํ ์์ ๋ค๋ก ๋ด์ฉ์ด ๊ทธ๋๋ก์
๋๋ค" }],
|
|
480
|
+
"nextAction": "execute_task"
|
|
481
|
+
}
|
|
482
|
+
```
|
|
483
|
+
|
|
484
|
+
`problems[].status`๋ `unchanged`, `missing`, `outside_repo`, `ignored`, `directory`, `invalid_path`(๊ฒฝ๋ก์ ๊ฐํ์ด๋ NUL ๋ฌธ์), `not_regular_file`(FIFO๋ ์์ผ์ฒ๋ผ ์ผ๋ฐ ํ์ผ์ด ์๋) ์ค ํ๋๋ค. ํ์คํฌ๋ ์์ง ๋๋์ง ์์ ์ํ๋ก ๋จ๋๋ค. ํ์ผ์ ์ค์ ๋ก ๊ณ ์ณค๋์ง ํ์ธํ๊ณ ์์ ์ ๋ง์น๊ฑฐ๋ `artifacts` ๋ชฉ๋ก์ ๋ฐ๋ก์ก์ ๊ฐ์ ํ์คํฌ๋ฅผ ๋ค์ ์ ์ถํ๋ค. ๋๋ด์ง ๋ชปํ์ผ๋ฉด `status: "failed"`๋ก ๋ธ๋ค.
|
|
485
|
+
|
|
486
|
+
์๋ต์ `serverError: true`๊ฐ ์์ผ๋ฉด ๋ณด๊ณ ๋ด์ฉ ๋ฌธ์ ๊ฐ ์๋๋ผ ์๋ฒ ์ชฝ git ํธ์ถ์ด ์คํจํ ๊ฒ์ด๋ค. ์ด๋๋ ๊ณ ์น ๊ฒ์ด ์์ผ๋ ์ ์ ๋ค ๊ฐ์ ๊ฒฐ๊ณผ๋ฅผ ๊ทธ๋๋ก ๋ค์ ๋ธ๋ค. ๊ณ์ ์คํจํ๋ฉด `status: "failed"`๋ก ๋ด๊ณ `output`์ ์ค๋ฅ ๋ด์ฉ์ ์ ๋๋ค.
|
|
487
|
+
|
|
488
|
+
> ๊ธฐ์ค์ ์ ํ์คํฌ๋ง๋ค๊ฐ ์๋๋ผ `execute_start` ๋ ํ ๋ฒ ์ก๋๋ค. ์์ ํ์คํฌ๊ฐ ๋ฐ๊พผ ํ์ผ์ ๋ค ํ์คํฌ๊ฐ `artifacts`์ ์ ์ด๋ ํต๊ณผํ๋ค.
|
|
489
|
+
|
|
386
490
|
---
|
|
387
491
|
|
|
388
492
|
## Phase 3 โ Evaluate
|
|
@@ -390,12 +494,19 @@ role_match/role_consensus๋ก ์ป์ `roleGuidance`๋ฅผ ์ฐธ์กฐํด ํ์คํฌ๋ฅผ ์
|
|
|
390
494
|
๋ชจ๋ ํ์คํฌ ์๋ฃ ํ 3-Call ํ๊ฐ ์งํ.
|
|
391
495
|
|
|
392
496
|
**Call 1 โ Structural ๋จ๊ณ ์์**
|
|
497
|
+
|
|
393
498
|
```json
|
|
394
499
|
{ "action": "evaluate", "sessionId": "..." }
|
|
395
500
|
```
|
|
501
|
+
|
|
396
502
|
โ `{ stage: "structural", structuralContext }` โ lint/build/test ์คํ ์ง์
|
|
397
503
|
|
|
504
|
+
`structuralContext.commands`์ `command` ๋ฌธ์์ด์ ๊ณ ์น์ง ๋ง๊ณ ๊ทธ๋๋ก ์คํํ๋ค. ํจํค์ง ๋งค๋์ ๋ ์๋ฒ๊ฐ package.json์ `packageManager` ํ๋๋ lockfile๋ก ๊ณจ๋ผ๋๋ค. scripts์ ์๋ lint, build๋ ๋ชฉ๋ก์์ ๋น ์ง๊ณ test๋ ํญ์ ๋จ๋๋ค. ์ ์ถํ ๋๋ ๊ฐ์ ๋ฌธ์์ด์ ๊ทธ๋๋ก ์ฃ๋๋ค โ ๋ช
๋ น์ด ๋ค๋ฅด๊ฑฐ๋ ๋น ์ง๋ฉด ์๋ฒ๊ฐ ๊ฑฐ๋ถํ๋ค. ์ข
๋ฃ ์ฝ๋๊ฐ 0์ด ์๋ ๋ช
๋ น์ด ์์ผ๋ฉด `allPassed`๋ฅผ `true`๋ก ๋ณด๋ด๋ ์คํจ๋ก ์ฒ๋ฆฌ๋๋ค.
|
|
505
|
+
|
|
506
|
+
๊ฑฐ๋ถ ๋ฉ์์ง๊ฐ `Submitted commands do not match`๋ก ์์ํ๋ฉด `structuralContext.commands`์ ๋ช
๋ น์ ๊ทธ๋๋ก ๋ค์ ์คํํด์ ๊ทธ ์คํ์ ์ข
๋ฃ ์ฝ๋์ ์ถ๋ ฅ์ผ๋ก ๋ค์ ์ ์ถํ๋ค. ์ด์ ์คํ ๊ฒฐ๊ณผ์ ๋ช
๋ น ๋ฌธ์์ด๋ง ๋ฐ๊ฟ ์ฃ์ง ์๋๋ค. ๋ค๋ฅธ ๊ฑฐ๋ถ ๋ฉ์์ง๋ฉด ๋ค์ ์ ์ถํ์ง ๋ง๊ณ Call 1๋ถํฐ ๋ค์ ์์ํ๋ค.
|
|
507
|
+
|
|
398
508
|
**Call 2 โ Structural ๊ฒฐ๊ณผ ์ ์ถ**
|
|
509
|
+
|
|
399
510
|
```json
|
|
400
511
|
{
|
|
401
512
|
"action": "evaluate",
|
|
@@ -410,24 +521,25 @@ role_match/role_consensus๋ก ์ป์ `roleGuidance`๋ฅผ ์ฐธ์กฐํด ํ์คํฌ๋ฅผ ์
|
|
|
410
521
|
}
|
|
411
522
|
}
|
|
412
523
|
```
|
|
413
|
-
|
|
414
|
-
โ structural
|
|
524
|
+
|
|
525
|
+
โ structural ์คํจ ์ `{ stage: "complete", shortCircuited: true, nextAction: "evolve_fix" }` โ Evolve Flow A ์ง์
|
|
526
|
+
โ structural ํต๊ณผ ์ `{ stage: "contextual", contextualContext }` โ AC๋ณ LLM ๊ฒ์ฆ ์ง์
|
|
415
527
|
|
|
416
528
|
**Call 3 โ Contextual ๊ฒฐ๊ณผ ์ ์ถ**
|
|
529
|
+
|
|
417
530
|
```json
|
|
418
531
|
{
|
|
419
532
|
"action": "evaluate",
|
|
420
533
|
"sessionId": "...",
|
|
421
534
|
"evaluationResult": {
|
|
422
|
-
"verifications": [
|
|
423
|
-
{ "acIndex": 0, "satisfied": true, "evidence": "...", "gaps": [] }
|
|
424
|
-
],
|
|
535
|
+
"verifications": [{ "acIndex": 0, "satisfied": true, "evidence": "...", "gaps": [] }],
|
|
425
536
|
"overallScore": 0.92,
|
|
426
537
|
"goalAlignment": 0.88,
|
|
427
538
|
"recommendations": []
|
|
428
539
|
}
|
|
429
540
|
}
|
|
430
541
|
```
|
|
542
|
+
|
|
431
543
|
โ `{ status: "completed" }` (score โฅ 0.85, goalAlignment โฅ 0.80)
|
|
432
544
|
โ ๋ฏธ๋ฌ ์ `{ evolveContext }` โ Evolve Flow B ์ง์
|
|
433
545
|
|
|
@@ -477,7 +589,7 @@ role_match/role_consensus๋ก ์ป์ `roleGuidance`๋ฅผ ์ฐธ์กฐํด ํ์คํฌ๋ฅผ ์
|
|
|
477
589
|
{
|
|
478
590
|
"action": "evolve_re_execute",
|
|
479
591
|
"sessionId": "...",
|
|
480
|
-
"reExecuteTaskResult": { "taskId": "task-3", "status": "completed", "output": "...", "artifacts": [] }
|
|
592
|
+
"reExecuteTaskResult": { "taskId": "task-3", "status": "completed", "output": "...", "artifacts": ["src/auth/oauth.ts"] }
|
|
481
593
|
}
|
|
482
594
|
|
|
483
595
|
// 4. Re-evaluate
|
|
@@ -510,25 +622,64 @@ role_match/role_consensus๋ก ์ป์ `roleGuidance`๋ฅผ ์ฐธ์กฐํด ํ์คํฌ๋ฅผ ์
|
|
|
510
622
|
{ "action": "evolve_lateral", "sessionId": "..." }
|
|
511
623
|
```
|
|
512
624
|
|
|
513
|
-
| Stagnation ํจํด
|
|
625
|
+
| Stagnation ํจํด | Persona | ์ ๋ต |
|
|
626
|
+
| ------------------- | -------------- | ---------------- |
|
|
627
|
+
| hard_cap | Multistability | ๋ค๋ฅธ ๊ฐ๋๋ก ๋ณด๊ธฐ |
|
|
628
|
+
| oscillation | Simplicity | ๋จ์ํ๊ฒ ์ค์ด๊ธฐ |
|
|
629
|
+
| no_drift | Reification | ๋น ์ง ์กฐ๊ฐ ์ฑ์ฐ๊ธฐ |
|
|
630
|
+
| diminishing_returns | Invariance | ์ฑ๊ณต ํจํด ๋ณต์ |
|
|
631
|
+
|
|
632
|
+
4๊ฐ persona๋ฅผ ๋ค ์จ๋ ์ ์๊ฐ ์ ์ค๋ฅด๋ฉด ์ธ์
์ ๋๋์ง ์๊ณ `awaiting_human`์ผ๋ก ๋ฉ์ถ๋ค. ์๋ต์ `gate`๊ฐ ์ค๋ ค ์จ๋ค.
|
|
633
|
+
|
|
634
|
+
```json
|
|
635
|
+
โ { status: "awaiting_human", gate: { gateId, question, options: [...], context }, escalationContext, nextAction: "gate_resolve", nextActionParams: { sessionId, gateResolution: { gateId } } }
|
|
636
|
+
```
|
|
637
|
+
|
|
638
|
+
### Flow D โ ์ฌ๋ ํ๋จ ๋๊ธฐ (`awaiting_human`)
|
|
639
|
+
|
|
640
|
+
์ฌ๊ธฐ์ ์คํฌ์ ์ค์ค๋ก ๊ณ ๋ฅด์ง ์๋๋ค. **๋ฐ๋์ ์ฌ๋์๊ฒ ๋ฌป๊ณ ๋ต์ ๊ธฐ๋ค๋ฆฐ๋ค.**
|
|
641
|
+
|
|
642
|
+
1. `gate.question`๊ณผ `gate.context`(๋งํ ํ์คํฌ, ์๋ํ persona, ์ต๊ณ ์ ์, ๋จ์ ๋ฌธ์ )๋ฅผ ๋ณด์ฌ์ค๋ค.
|
|
643
|
+
2. `gate.options`๋ฅผ ์ ํ์ง๋ก ๋์ด๋ค. ํธ์คํธ์ ์ ํํ ์ง๋ฌธ ๋๊ตฌ๊ฐ ์์ผ๋ฉด(AskUserQuestion ๋ฑ) ๊ทธ๊ฑธ ์ด๋ค. ์์ผ๋ฉด ๋ฒํธ ๋ชฉ๋ก์ผ๋ก ๋ณด์ฌ์ฃผ๊ณ ๋ต์ ๋ฐ๋๋ค. `restart`์ `abort`๋ ์ธ์
์ด ์ข
๋ฃ๋๋ค๋ ์ ์ ํจ๊ป ์๋ฆฐ๋ค.
|
|
644
|
+
3. ๊ณ ๋ฅธ ์ ํ์ง์ ๋ํด **๊ฒฐ์ (`decision`)๊ณผ ์ด์ (`rationale`)๋ฅผ ํ ์ค์ฉ** ๋ฐ๋๋ค. ๋ ๋ค ๋น๋ฉด ์๋ฒ๊ฐ ๊ฑฐ์ ํ๋ค. ์ฌ๋์ด ์ด์ ๋ฅผ ์ ์ ์์ผ๋ฉด ๋ค์ ๋ฌป๋๋ค. ๋์ ์ง์ด๋ด์ง ์๋๋ค โ ์ด ๋ ์ค์ด ๊ทธ๋๋ก Memory์ ๋จ๋๋ค.
|
|
645
|
+
4. `gate_resolve`๋ฅผ ๋ถ๋ฅธ๋ค.
|
|
646
|
+
|
|
647
|
+
```json
|
|
648
|
+
{
|
|
649
|
+
"action": "gate_resolve",
|
|
650
|
+
"sessionId": "...",
|
|
651
|
+
"gateResolution": {
|
|
652
|
+
"gateId": "gate-...",
|
|
653
|
+
"optionId": "patch_spec",
|
|
654
|
+
"decision": "์ฌ๋์ด ๋ด๋ฆฐ ๊ฒฐ์ ",
|
|
655
|
+
"rationale": "๊ทธ๋ ๊ฒ ์ ํ ์ด์ "
|
|
656
|
+
}
|
|
657
|
+
}
|
|
658
|
+
```
|
|
659
|
+
|
|
660
|
+
5. ์๋ต์ `nextAction`์ ๋ฐ๋ฅธ๋ค.
|
|
661
|
+
|
|
662
|
+
| `optionId` | ์๋ต | ๋ค์ |
|
|
514
663
|
|---|---|---|
|
|
515
|
-
|
|
|
516
|
-
|
|
|
517
|
-
|
|
|
518
|
-
|
|
|
664
|
+
| `patch_spec` | `gate_resolved`, ์ธ์
`executing` | ์ฌ๋์ด ๋งํ ๋๋ก AC๋ ์ ์ฝ์ ๊ณ ์ณ `evolve_patch` (Flow B) |
|
|
665
|
+
| `manual_task` | `gate_resolved`, ์ธ์
`executing` | ์ฌ๋์ด ํ์คํฌ๋ฅผ ์ฒ๋ฆฌํ๋์ง ํ์ธํ ๋ค `evaluate` |
|
|
666
|
+
| `restart` | `terminated` | ์ธ์
์ข
๋ฃ. ํ์คํฌ๋ฅผ ๋ ์๊ฒ ์ชผ๊ฐ ์ ์คํ์ผ๋ก `start`๋ฅผ ์๋ด |
|
|
667
|
+
| `abort` | `terminated` | ์ธ์
์ข
๋ฃ. ๋งํ ์ง์ ๊ณผ ์๋ํ ์ ๊ทผ์ ๋ณด๊ณ |
|
|
668
|
+
|
|
669
|
+
์ด์ด๊ฐ ๋ค ๋ค์ ํ๊ฐ๊ฐ ํ ๋ฒ๋ง ์ฑ๊ณต ๊ธฐ์ค์ ๋ชป ๋ฏธ์ณ๋ persona๋ฅผ ๋ํ์ดํ์ง ์๊ณ ๊ณง๋ฐ๋ก ์ `awaiting_human` ์๋ต์ด ์จ๋ค. ์งํ ์ด๋ ฅ๊ณผ ์ด๋ฏธ ์จ๋ณธ persona ๊ธฐ๋ก์ด ๋จ์ ์์ด์๋ค. ๊ทธ๋๋ 1๋ฒ๋ถํฐ ๋ค์ ํ๋ค.
|
|
519
670
|
|
|
520
|
-
|
|
671
|
+
`awaiting_human`์ธ ๋์์๋ `status`, `resume`, `gate_resolve`, `evolution_viz` ๋ง๊ณ ๋ ์ ๋ถ ์๋ฌ๋ก ๊ฑฐ์ ๋๋ค. ์ธ์
์ ์ด์ด๋ฐ์๋๋ฐ `resume`์ด `awaiting_human`์ ๋๋ ค์ฃผ๋ฉด 1๋ฒ๋ถํฐ ๋ค์ ํ๋ค.
|
|
521
672
|
|
|
522
673
|
### ์ข
๋ฃ ์กฐ๊ฑด
|
|
523
674
|
|
|
524
|
-
| ์กฐ๊ฑด
|
|
525
|
-
|
|
526
|
-
| `success`
|
|
527
|
-
| `stagnation`
|
|
528
|
-
| `oscillation`
|
|
529
|
-
| `hard_cap`
|
|
530
|
-
| `caller`
|
|
531
|
-
| `human_escalation` | 4๊ฐ lateral persona ์์ง |
|
|
675
|
+
| ์กฐ๊ฑด | ํธ๋ฆฌ๊ฑฐ |
|
|
676
|
+
| ------------------ | ------------------------------------------------------------- |
|
|
677
|
+
| `success` | score โฅ 0.85 AND goalAlignment โฅ 0.80 |
|
|
678
|
+
| `stagnation` | 2ํ ์ฐ์ delta < 0.05 |
|
|
679
|
+
| `oscillation` | 2ํ ์ฐ์ ์ ์ ์ญ์ |
|
|
680
|
+
| `hard_cap` | structural 3ํ + contextual 3ํ ์คํจ |
|
|
681
|
+
| `caller` | `{ action: "evolve", terminateReason: "caller" }` |
|
|
682
|
+
| `human_escalation` | 4๊ฐ lateral persona ์์ง ํ ์ฌ๋์ด `restart`๋ `abort`๋ฅผ ๊ณ ๋ฆ |
|
|
532
683
|
|
|
533
684
|
---
|
|
534
685
|
|
|
@@ -551,7 +702,13 @@ activeForm: "์คํ ๊ณํ ์๋ฆฝ ์ค"
|
|
|
551
702
|
`TaskUpdate`๋ก ํ์ฌ Planning ๋จ๊ณ๋ฅผ ์
๋ฐ์ดํธํ๋ค.
|
|
552
703
|
|
|
553
704
|
```
|
|
554
|
-
description: "Planning ์ค | ๋จ๊ณ {stepsCompleted}/4 | {
|
|
705
|
+
description: "Planning ์ค | ๋จ๊ณ {stepsCompleted}/4 | {executeContext.currentStage}"
|
|
706
|
+
```
|
|
707
|
+
|
|
708
|
+
`plan_rewound`๋ฅผ ๋ฐ์ผ๋ฉด `stepsCompleted`๊ฐ ์์ผ๋ฏ๋ก ์ด๋ ๊ฒ ๋ฐ๊พผ๋ค.
|
|
709
|
+
|
|
710
|
+
```
|
|
711
|
+
description: "Planning ๋๊ฐ๊น | ๋จ๊ณ {rewoundToStep - 1}/4 | {executeContext.currentStage}"
|
|
555
712
|
```
|
|
556
713
|
|
|
557
714
|
### Execution ์์ ํ (`execute_start` ์๋ต ์์ ํ)
|
|
@@ -584,12 +741,14 @@ activeForm: "๋ณ๋ ฌ ์คํ ์ค: ๊ทธ๋ฃน {groupIndex}/{totalGroups} โ {agentCoun
|
|
|
584
741
|
`TaskUpdate`๋ก ์งํ ์ํฉ๊ณผ ํ์ฌ ์คํ ํ์คํฌ๋ช
์ ์
๋ฐ์ดํธํ๋ค.
|
|
585
742
|
|
|
586
743
|
์์ฐจ ์คํ ์ค:
|
|
744
|
+
|
|
587
745
|
```
|
|
588
746
|
description: "{completedCount}/{totalTasks} ์๋ฃ | ์คํจ: {failedCount}๊ฐ | ๊ทธ๋ฃน {groupIndex}/{totalGroups}"
|
|
589
747
|
activeForm: "์คํ ์ค: {taskContext.currentTask.title}"
|
|
590
748
|
```
|
|
591
749
|
|
|
592
750
|
๋ณ๋ ฌ ๊ทธ๋ฃน ์คํ ์ค (๊ฐ Agent์ execute_task ์๋ฃ ์):
|
|
751
|
+
|
|
593
752
|
```
|
|
594
753
|
description: "{completedCount}/{totalTasks} ์๋ฃ | ์คํจ: {failedCount}๊ฐ | ๊ทธ๋ฃน {groupIndex}/{totalGroups}"
|
|
595
754
|
activeForm: "๋ณ๋ ฌ ์คํ ์ค: ๊ทธ๋ฃน {groupIndex}/{totalGroups} โ {agentCount}๊ฐ Agent ์คํ ์ค"
|
|
@@ -609,6 +768,14 @@ activeForm: "๋ณ๋ ฌ ์คํ ์ค: ๊ทธ๋ฃน {groupIndex}/{totalGroups} โ {agentCoun
|
|
|
609
768
|
- ํ๊ฐ ์๋ฃ(success): `TaskUpdate({ status: "completed", description: "์๋ฃ | score: {overallScore} | alignment: {goalAlignment}" })`
|
|
610
769
|
- Evolve ์ง์
: description์ "๊ฐ์ ์ค (generation {N})" ์ถ๊ฐ
|
|
611
770
|
|
|
771
|
+
### ์ฌ๋ ํ๋จ ๋๊ธฐ ์ (`awaiting_human`)
|
|
772
|
+
|
|
773
|
+
```
|
|
774
|
+
description: "์ฌ๋ ํ๋จ ๋๊ธฐ | ์ต๊ณ ์ ์: {gate.context.bestScore}"
|
|
775
|
+
```
|
|
776
|
+
|
|
777
|
+
`gate_resolve`๊ฐ `gate_resolved`๋ฅผ ๋๋ ค์ฃผ๋ฉด ์งํ ๋จ๊ณ ํ์๋ก ๋์๊ฐ๋ค.
|
|
778
|
+
|
|
612
779
|
### ์ค๋ฅ/์์ค์ปฌ๋ ์ด์
์
|
|
613
780
|
|
|
614
781
|
```
|
|
@@ -128,7 +128,15 @@ The interview only has value if the human's actual intent is captured. A self-an
|
|
|
128
128
|
1. **Start**: Create a session, detect project type (greenfield/brownfield), ask the first question
|
|
129
129
|
2. **Iterate**: Present each generated question to the user โ wait for answer โ submit answer to Gestalt
|
|
130
130
|
3. **Score**: Continuously assess resolution across multiple dimensions
|
|
131
|
-
4. **Complete**:
|
|
131
|
+
4. **Complete**: Call `complete` only after `resolutionScore.isReady === true` (overall โฅ 0.8). The server rejects `complete` on a session that has no score or is below threshold
|
|
132
|
+
|
|
133
|
+
### 0.8 ๋ฏธ๋ง์์ ๋๋ด๊ธฐ
|
|
134
|
+
|
|
135
|
+
์ฌ์ฉ์๊ฐ 0.8 ๋ฏธ๋ง์์ ๋์ด๊ฐ๊ฒ ๋ค๊ณ ์ง์ ๋ตํ ๊ฒฝ์ฐ์๋ง `force: true`๋ก `complete`๋ฅผ ๋ถ๋ฅธ๋ค. 15๋ผ์ด๋๋ฅผ ๋ค ์ฑ์ `respond`๊ฐ ๋ ๋ฐ์ง ์์ผ๋ฉด ๊ทธ ๋ง์ง๋ง ๋ต์ ์ ์๋ ๋ฐ์๋์ง ์์ ์ํ๋ค. ๋จผ์ `score`๋ก ๊ทธ ์ ์๋ฅผ ๋ฃ๊ณ `isReady`๋ฅผ ํ์ธํ๋ค. ๊ทธ๋๋ 0.8 ๋ฏธ๋ง์ด๋ฉด ์์ด์ ํธ๊ฐ ํ์ฌ ์ ์์ ๋ ์ฑ์์ง ์ฐจ์์ ๋ณด์ฌ์ฃผ๊ณ ๋์ด๊ฐ์ง ๋ฌป๋๋ค. ๋ผ์ด๋ ์๋ง์ผ๋ก `force`๋ฅผ ๋๊ธฐ์ง ์๋๋ค. ์ฌ์ฉ์๊ฐ ๋จผ์ "๊ทธ๋ฅ ๋์ด๊ฐ์"๊ณ ํ์ ๋๋ ๊ฐ์ ๋ด์ฉ์ ๋ณด์ฌ์ฃผ๊ณ ํ ๋ฒ ๋ ํ์ธํ ๋ค์ ๋ถ๋ฅธ๋ค.
|
|
136
|
+
|
|
137
|
+
์ฌ์ฉ์๊ฐ ๋์ด๊ฐ์ง ์๊ฒ ๋ค๊ณ ํ๋ฉด ์ธ์
์ `in_progress`๋ก ๋๋ค. 15๋ผ์ด๋ ์ ์ด๋ฉด ๊ฐ์ ์ธ์
์์ ๋ ์ฑ์์ง ์ฐจ์์ ๋ค์ ๋ฌป๋๋ค. 15๋ผ์ด๋๋ฅผ ๋ค ์ฑ์ ์ผ๋ฉด ๋ ์ฑ์์ง ์ฐจ์์ ์ฌ์ฉ์์ ํจ๊ป ์ ๋ฆฌํด ์ ์ธํฐ๋ทฐ๋ก ์ด์ด๊ฐ๊ฑฐ๋ ๊ฑฐ๊ธฐ์ ๋ฉ์ถ๋ค.
|
|
138
|
+
|
|
139
|
+
์์ด์ ํธ๊ฐ ์ค์ค๋ก `force`๋ฅผ ํ๋จํ์ง ์๋๋ค. ๊ฑฐ์ ๋ฉ์์ง์ "force=true๋ก ๋๊ธฐ์ธ์"๊ฐ ๋์๋ ๊ทธ๊ฑด ์ฌ์ฉ์์๊ฒ ๋ฌผ์ด๋ณผ ๊ทผ๊ฑฐ์ด์ง ๋ฐ๋ก ๋๊ธธ ๊ทผ๊ฑฐ๊ฐ ์๋๋ค. ์ด๋ ๊ฒ ๋๋ธ ์ธ์
์๋ `forcedComplete`๊ฐ ๊ธฐ๋ก๋๋ค. Spec์ ๋ฝ์ ๋๋ `ges_generate_spec`์ `force`๋ฅผ ๋ฐ๋ก ๋๊ฒจ์ผ ํ๋ค.
|
|
132
140
|
|
|
133
141
|
## Gestalt Principles Applied
|
|
134
142
|
|
|
@@ -154,9 +162,12 @@ API ํค ์์ด MCP ์๋ฒ ์คํ ์ ์๋ ํ์ฑํ. LLM ์์
์ caller๊ฐ
|
|
|
154
162
|
| `resolutionScore.priorityClarity` | number (0-1) | ํ์* | ์ฐ์ ์์ ๋ช
ํ๋ |
|
|
155
163
|
| `resolutionScore.contextClarity` | number (0-1) | ์ ํ | ์ปจํ
์คํธ ๋ช
ํ๋ |
|
|
156
164
|
| `resolutionScore.contradictions` | string[] | ์ ํ | ๋ฐ๊ฒฌ๋ ๋ชจ์ ๋ชฉ๋ก |
|
|
165
|
+
| `force` | boolean | ์ ํ (๊ธฐ๋ณธ `false`) | `complete` ์ ์ฉ. 0.8 ๋ฏธ๋ง์ด์ด๋ ์๋ฃํ๋ค. ์ฌ์ฉ์๊ฐ ์ง์ ์ ํ์ ๋๋ง ๋๊ธด๋ค |
|
|
157
166
|
|
|
158
167
|
\* resolutionScore ๊ฐ์ฒด๋ฅผ ์ ๊ณตํ ๊ฒฝ์ฐ ํ์
|
|
159
168
|
|
|
169
|
+
๋ต๋ณ ๋ผ์ด๋๊ฐ 0์ธ ์ธ์
์ ๊ธฐ์ค์ ๋๋ resolutionScore๋ฅผ ๋ฃ์ผ๋ฉด `score`์ `respond`๊ฐ ๊ฑฐ์ ํ๋ค. ๊ณต๋ฐฑ๋ง ๋ณด๋ธ ๋ต์ ๋ต๋ณ์ผ๋ก ์ธ์ง ์๋๋ค. ๊ธฐ์ค ๋ฏธ๋ง ์ ์๋ ๋ฐ๋๋ค.
|
|
170
|
+
|
|
160
171
|
### Action๋ณ ์๋ต ๊ตฌ์กฐ (Passthrough)
|
|
161
172
|
|
|
162
173
|
**`start`** โ `{ status, sessionId, projectType, detectedFiles, gestaltContext, roundNumber, message }`
|
|
@@ -166,7 +177,9 @@ API ํค ์์ด MCP ์๋ฒ ์คํ ์ ์๋ ํ์ฑํ. LLM ์์
์ caller๊ฐ
|
|
|
166
177
|
**`score`** (์ ์ ๋ฏธ์ ๊ณต ์) โ `{ status, resolutionScore, scoringPrompt, message }`
|
|
167
178
|
**`score`** (์ ์ ์ ๊ณต ์) โ `{ status, resolutionScore }`
|
|
168
179
|
|
|
169
|
-
**`complete`** โ `{ status, sessionId, totalRounds, finalResolutionScore, message }`
|
|
180
|
+
**`complete`** โ `{ status, sessionId, totalRounds, finalResolutionScore, forced, message }`
|
|
181
|
+
|
|
182
|
+
`forced`๋ ๊ธฐ์ค ๋ฏธ๋ง ์ธ์
์ `force`๋ก ๋๋์ ๋๋ง `true`๋ค. ์ด๋ฏธ ์ค๋น๋ ์ธ์
์ `force`๋ฅผ ๋๊ฒจ๋ `false`๋ก ๋จ๋๋ค.
|
|
170
183
|
|
|
171
184
|
### GestaltContext ํ๋
|
|
172
185
|
|
|
@@ -25,7 +25,7 @@ outputs:
|
|
|
25
25
|
> `ges_*` ๋๊ตฌ๊ฐ ์๊ฑฐ๋ ํธ์ถ์ด ์คํจํ๋ฉด ์ง์ ํ๋ด๋ด ์งํํ์ง ์๊ณ ๋ฌด์์ด ์ ์ ๋๋์ง ๋งํ๊ณ ๋ฉ์ถฅ๋๋ค.
|
|
26
26
|
|
|
27
27
|
- **์ธํฐ๋ทฐ**: ์ฌ๋์ด ์ง์ ๋ต๋ณ (ํฐ ๊ด์ ์ ๋ฆฌ ํฌํจ, ์๋ํํ์ง ์์)
|
|
28
|
-
- **์คํ ์์ฑ ์ดํ**: AI๊ฐ ์์จ๋ก ๋๋ผ์ด๋น โ ์ฌ๋ ๊ฐ์
์์ด ๋ฃจํ๋ฅผ
|
|
28
|
+
- **์คํ ์์ฑ ์ดํ**: AI๊ฐ ์์จ๋ก ๋๋ผ์ด๋น โ ์ฌ๋ ๊ฐ์
์์ด ๋ฃจํ๋ฅผ ๋๋ฆฐ๋ค. lateral persona๋ฅผ ๋ค ์จ์ `awaiting_human`์ผ๋ก ๋ฉ์ท์ ๋๋ง ์ฌ๋์๊ฒ ๋ฌป๋๋ค
|
|
29
29
|
|
|
30
30
|
---
|
|
31
31
|
|
|
@@ -84,12 +84,14 @@ Phase 3์ ๋ ํฌ ์ ํ์๊น์ง ์๋น๊ธฐ์ง๋ ์๋๋ค. ๊ทธ๊ฑด ์คํ ๋
|
|
|
84
84
|
|
|
85
85
|
โ resolutionScore.isReady === true ๋๋ overallScore โฅ 0.8์ด ๋ ๋๊น์ง ๋ฐ๋ณตํ๋ค.
|
|
86
86
|
|
|
87
|
-
|
|
87
|
+
์๋ฃ (`isReady === true`์ผ ๋๋ง):
|
|
88
88
|
|
|
89
89
|
```json
|
|
90
90
|
{ "action": "complete", "sessionId": "..." }
|
|
91
91
|
```
|
|
92
92
|
|
|
93
|
+
0.8 ๋ฏธ๋ง์ด๋ฉด ์๋ฒ๊ฐ `complete`๋ฅผ ๊ฑฐ์ ํ๋ค. ์์จ ๋ฃจํ๋ผ๋ `force`๋ ์์ด์ ํธ๊ฐ ์ ํ์ง ์๋๋ค. 15๋ผ์ด๋๋ฅผ ๋ค ์ฑ์ด ๊ฒฝ์ฐ์๋ ๋ง์ง๋ง ๋ต์ ์ ์๊ฐ ๋น ์ ธ ์์ผ๋ ๋จผ์ `score`๋ก ๋ฃ๊ณ `isReady`๋ฅผ ํ์ธํ๋ค. ๊ทธ๋๋ 0.8 ๋ฏธ๋ง์ด๋ฉด ์ฌ์ฉ์์๊ฒ ํ์ฌ ์ ์๋ฅผ ๋ณด์ฌ์ฃผ๊ณ ๋์ด๊ฐ๊ธฐ๋ก ์ง์ ๋ตํ์ ๋๋ง `{ "action": "complete", "sessionId": "...", "force": true }`๋ก ๋ถ๋ฅธ๋ค. ์ด๋ ๊ฒ ๋๋ธ ์ธ์
์ `complete` ์๋ต์ `forced: true`๊ฐ ์จ๋ค. ๊ทธ ๊ฐ์ ๊ทผ๊ฑฐ๋ก Phase 2์์ `ges_generate_spec`์๋ `force: true`๋ฅผ ๋๊ธด๋ค.
|
|
94
|
+
|
|
93
95
|
### ์งํ ํจ๋
|
|
94
96
|
|
|
95
97
|
์ธ Phase๋ฅผ ๋๋ ๋์ ์ฌ์ฉ์๊ฐ ์ด๋๊น์ง ์๋์ง ๋ณผ ์๋ฆฌ๋ฅผ ๋ง๋ ๋ค. ํจ๋์ best-effort๋ค โ ํจ๋์ ๋ชป ๋ง๋ค๊ฑฐ๋ ๋ชป ๊ณ ์ณ๋ ์ธํฐ๋ทฐ์ ์คํ๊ณผ ์คํ์ ๊ทธ๋๋ก ๊ฐ๋ค.
|
|
@@ -143,7 +145,7 @@ description: "Phase 2/3 โ ์คํ ์๋ฃ | AC {N}๊ฐ"
|
|
|
143
145
|
|
|
144
146
|
## Phase 3 โ Execute ๋ฃจํ (์์จ)
|
|
145
147
|
|
|
146
|
-
์คํ์ ๋ฐ์ ์คํ โ ํ๊ฐ โ ๊ฐ์ ๋ฃจํ๋ฅผ ์์จ๋ก ๋๋ผ์ด๋นํ๋ค. **์ฌ๋ ๊ฐ์
์์ด ๋ฃจํ๋ฅผ ๋๋ค.**
|
|
148
|
+
์คํ์ ๋ฐ์ ์คํ โ ํ๊ฐ โ ๊ฐ์ ๋ฃจํ๋ฅผ ์์จ๋ก ๋๋ผ์ด๋นํ๋ค. **์ฌ๋ ๊ฐ์
์์ด ๋ฃจํ๋ฅผ ๋๋ค.** ์์ธ๋ lateral persona๋ฅผ ๋ค ์จ์ ์ธ์
์ด ์ฌ๋ ํ๋จ์ ๊ธฐ๋ค๋ฆด ๋ ํ๋๋ค (โ [์ฌ๋ ํ๋จ ๋๊ธฐ](#์ฌ๋-ํ๋จ-๋๊ธฐ-awaiting_human)).
|
|
147
149
|
|
|
148
150
|
execute ์คํฌ์ ์ ์ฒด ํ์ดํ๋ผ์ธ(Planning โ Execution โ Evaluate โ Evolve)์ ๊ทธ๋๋ก ๋ฐ๋ฅธ๋ค. ๋จ, ๊ฐ ๋จ๊ณ ์ฌ์ด์์ ์ฌ๋์๊ฒ ํ์ธ์ ๊ตฌํ์ง ์๋๋ค.
|
|
149
151
|
|
|
@@ -168,9 +170,21 @@ activeForm: "{ํ์ฌ ๋จ๊ณ: ์คํ ์ค / ํ๊ฐ ์ค / ๊ฐ์ ์ค}"
|
|
|
168
170
|
| ์กฐ๊ฑด | ๋์ |
|
|
169
171
|
|------|------|
|
|
170
172
|
| `success` (score โฅ 0.85, goalAlignment โฅ 0.80) | ๋ฃจํ ์ข
๋ฃ โ ์๋ฃ ๋ณด๊ณ |
|
|
171
|
-
| `
|
|
173
|
+
| `awaiting_human` (lateral 4๊ฐ ์์ง) | ๋ฃจํ๋ฅผ ๋ฉ์ถ๊ณ ์ฌ๋์๊ฒ ๋ฌป๋๋ค โ `gate_resolve` โ `nextAction`๋๋ก ์ด์ด๊ฐ๋ค (์๋ ์ฐธ๊ณ ) |
|
|
174
|
+
| `human_escalation` (์ฌ๋์ด `restart`๋ `abort`๋ฅผ ๊ณ ๋ฆ) | ๋ฃจํ ์ข
๋ฃ โ ๋งํ ์ง์ ๊ณผ ์๋ํ ์ ๊ทผ๋ฒ ๋ณด๊ณ |
|
|
172
175
|
| `caller` (์ฌ์ฉ์๊ฐ ๋ช
์์ ์ผ๋ก ์ค๋จ) | ์ฆ์ ์ข
๋ฃ |
|
|
173
176
|
|
|
177
|
+
### ์ฌ๋ ํ๋จ ๋๊ธฐ (`awaiting_human`)
|
|
178
|
+
|
|
179
|
+
lateral persona 4๊ฐ๋ฅผ ๋ค ์จ๋ ์ ์๊ฐ ์ ์ค๋ฅด๋ฉด ์ธ์
์ ๋๋์ง ์๊ณ `awaiting_human`์ผ๋ก ๋ฉ์ถ๋ค. ์ฌ๊ธฐ๋ ์ธํฐ๋ทฐ์ ๊ฐ๋ค. **๋ฐ๋์ ์ฌ๋์๊ฒ ๋ฌป๊ณ ๋ต์ ๊ธฐ๋ค๋ฆฐ๋ค.** ์ค์ค๋ก ๊ณ ๋ฅด์ง ์๋๋ค.
|
|
180
|
+
|
|
181
|
+
1. `gate.question`๊ณผ ๋งํ ์ง์ (`gate.context`)์ ๋ณด์ฌ์ฃผ๊ณ `gate.options`๋ฅผ ์ ํ์ง๋ก ๋์ด๋ค.
|
|
182
|
+
2. ๊ณ ๋ฅธ ์ ํ์ง์ ํจ๊ป ๊ฒฐ์ ๊ณผ ์ด์ ๋ฅผ ํ ์ค์ฉ ๋ฐ๋๋ค. ๋น์ด ์์ผ๋ฉด ์๋ฒ๊ฐ ๊ฑฐ์ ํ๋ค. ๋์ ์ฑ์ฐ์ง ์๋๋ค โ ๊ทธ๋๋ก Memory์ ๋จ๋ ๋ง์ด๋ค.
|
|
183
|
+
3. `ges_execute { action: "gate_resolve", sessionId, gateResolution: { gateId, optionId, decision, rationale } }`๋ฅผ ๋ถ๋ฅธ๋ค.
|
|
184
|
+
4. `patch_spec`์ด๋ฉด `evolve_patch`๋ก, `manual_task`๋ฉด ์ฌ๋์ด ์ฒ๋ฆฌํ ๊ฑธ ํ์ธํ๊ณ `evaluate`๋ก ๋ฃจํ๋ฅผ ์ด์ด๊ฐ๋ค. `restart`๋ `abort`๋ฉด ์ธ์
์ด ์ข
๋ฃ๋๋ ๋ฃจํ๋ฅผ ๋๋ด๊ณ ์๋ ์์ค์ปฌ๋ ์ด์
๋ณด๊ณ ๋ฅผ ํ๋ค.
|
|
185
|
+
|
|
186
|
+
์์ธํ ํ๋ฆ์ execute ์คํฌ์ Flow D์ ๊ฐ๋ค.
|
|
187
|
+
|
|
174
188
|
### ์๋ฃ ๋ณด๊ณ
|
|
175
189
|
|
|
176
190
|
๋ฃจํ ์ข
๋ฃ ์ ์ฌ๋์๊ฒ ๊ฒฐ๊ณผ๋ฅผ ๋ณด๊ณ ํ๋ค:
|
|
@@ -216,7 +230,8 @@ description: "์์ค์ปฌ๋ ์ด์
| ์ต๊ณ ์ ์: {bestScore} | {์๋ํ perso
|
|
|
216
230
|
execute โ evaluate โ evolve โ re-execute โ evaluate โ ...
|
|
217
231
|
โ
|
|
218
232
|
success โ ์๋ฃ ๋ณด๊ณ
|
|
219
|
-
|
|
233
|
+
awaiting_human โ ์ฌ๋์๊ฒ ๋ฌป๊ณ gate_resolve โ ์ด์ด๊ฐ๊ฑฐ๋ ์ข
๋ฃ
|
|
234
|
+
human_escalation (restart/abort) โ ๋งํ ์ง์ ๋ณด๊ณ
|
|
220
235
|
```
|
|
221
236
|
|
|
222
237
|
์ธํฐ๋ทฐ์์ ์ฌ๋๊ณผ ํฐ ๊ด์ ์ ์ถฉ๋ถํ ์ ๋ฆฌํ ๋ค, ๊ทธ ์ดํ๋ AI๊ฐ ๋ชฉํ๋ฅผ ํฅํด ์ค์ค๋ก ๋ฃจํ๋ฅผ ๋๋ค.
|
|
@@ -41,6 +41,8 @@ This skill transforms completed interview data into a structured project specifi
|
|
|
41
41
|
|
|
42
42
|
- Interview session must be in `completed` status
|
|
43
43
|
- Resolution score must be โฅ 0.8 (unless `force` is true)
|
|
44
|
+
- 0.8 ๋ฏธ๋ง ์ธ์
์ ์ธํฐ๋ทฐ `complete`์ `force: true`๋ฅผ ๋๊ฒจ์ผ๋ง `completed`๊ฐ ๋๋ค. ์ด๋ ์ธ์
์ `forcedComplete`๊ฐ ๋จ๋๋ค
|
|
45
|
+
- `ges_generate_spec`์ด ํด์๋ ๊ธฐ์ค์ผ๋ก ๊ฑฐ์ ํ๋ฉด `ges_status({ sessionId })`๋ก `forcedComplete`๋ฅผ ๋ณธ๋ค. `true`๋ฉด ์ฌ์ฉ์๊ฐ ์ธํฐ๋ทฐ์์ ๋์ด๊ฐ๊ธฐ๋ก ํ ์ธ์
์ด๋ `force: true`๋ก ๋ค์ ๋ถ๋ฅธ๋ค. `false`์ธ๋ฐ 0.8 ๋ฏธ๋ง์ด๋ฉด `force`๋ฅผ ์ค์ค๋ก ๋๊ธฐ์ง ์๋๋ค. ํ์ฌ ์ ์๋ฅผ ๋ณด์ฌ์ฃผ๊ณ ์ฌ์ฉ์์๊ฒ ๋ฌป๋๋ค
|
|
44
46
|
|
|
45
47
|
## ๊ท์น ํ๋ณด (1๋จ๊ณ ํธ์ถ ์ )
|
|
46
48
|
|
|
@@ -1,33 +0,0 @@
|
|
|
1
|
-
export interface MiniInterviewQuestion {
|
|
2
|
-
dimension: string;
|
|
3
|
-
prompt: string;
|
|
4
|
-
rationale: string;
|
|
5
|
-
}
|
|
6
|
-
export interface MiniInterviewContext {
|
|
7
|
-
systemPrompt: string;
|
|
8
|
-
questions: MiniInterviewQuestion[];
|
|
9
|
-
scoringPrompt: string;
|
|
10
|
-
sourceTopic: string;
|
|
11
|
-
message: string;
|
|
12
|
-
}
|
|
13
|
-
export interface ResolutionDimensionScore {
|
|
14
|
-
goalClarity: number;
|
|
15
|
-
constraintClarity: number;
|
|
16
|
-
successCriteria: number;
|
|
17
|
-
priorityClarity: number;
|
|
18
|
-
contextClarity?: number;
|
|
19
|
-
contradictions?: string[];
|
|
20
|
-
}
|
|
21
|
-
export declare class MiniInterviewEngine {
|
|
22
|
-
/**
|
|
23
|
-
* Given an initial ambiguity score from text-based spec generation,
|
|
24
|
-
* determine if a mini-interview is needed and build the clarification context.
|
|
25
|
-
*/
|
|
26
|
-
needsMiniInterview(score: ResolutionDimensionScore): boolean;
|
|
27
|
-
buildClarificationContext(topic: string, text: string, score: ResolutionDimensionScore): MiniInterviewContext;
|
|
28
|
-
buildReScoringContext(topic: string, text: string, answers: Array<{
|
|
29
|
-
question: string;
|
|
30
|
-
answer: string;
|
|
31
|
-
}>): string;
|
|
32
|
-
}
|
|
33
|
-
//# sourceMappingURL=mini-interview-engine.d.ts.map
|