@tienne/gestalt 0.106.0 โ 0.107.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/dist/package.json +1 -1
- package/dist/plugin/skills/interview/SKILL.md +47 -8
- package/dist/plugin/skills/solve/SKILL.md +3 -3
- package/dist/plugin/skills/spec/SKILL.md +4 -4
- package/dist/schemas/gestalt.schema.json +6 -0
- package/dist/src/agent/role-consensus-engine.d.ts.map +1 -1
- package/dist/src/agent/role-consensus-engine.js +1 -1
- package/dist/src/agent/role-consensus-engine.js.map +1 -1
- package/dist/src/agent/role-prompt-generator.d.ts.map +1 -1
- package/dist/src/agent/role-prompt-generator.js +1 -2
- package/dist/src/agent/role-prompt-generator.js.map +1 -1
- package/dist/src/cli/commands/interview.d.ts +1 -0
- package/dist/src/cli/commands/interview.d.ts.map +1 -1
- package/dist/src/cli/commands/interview.js +5 -3
- package/dist/src/cli/commands/interview.js.map +1 -1
- package/dist/src/cli/commands/spec.d.ts.map +1 -1
- package/dist/src/cli/commands/spec.js +2 -2
- package/dist/src/cli/commands/spec.js.map +1 -1
- package/dist/src/core/config.d.ts +19 -0
- package/dist/src/core/config.d.ts.map +1 -1
- package/dist/src/core/config.js +23 -15
- package/dist/src/core/config.js.map +1 -1
- package/dist/src/core/constants.d.ts +5 -0
- package/dist/src/core/constants.d.ts.map +1 -1
- package/dist/src/core/constants.js +5 -0
- package/dist/src/core/constants.js.map +1 -1
- package/dist/src/core/errors.d.ts +3 -1
- package/dist/src/core/errors.d.ts.map +1 -1
- package/dist/src/core/errors.js +6 -2
- package/dist/src/core/errors.js.map +1 -1
- package/dist/src/core/types.d.ts +51 -2
- package/dist/src/core/types.d.ts.map +1 -1
- package/dist/src/events/types.d.ts +2 -0
- package/dist/src/events/types.d.ts.map +1 -1
- package/dist/src/events/types.js +2 -0
- package/dist/src/events/types.js.map +1 -1
- package/dist/src/execute/orchestrators/evolution.d.ts.map +1 -1
- package/dist/src/execute/orchestrators/evolution.js +4 -0
- package/dist/src/execute/orchestrators/evolution.js.map +1 -1
- package/dist/src/execute/passthrough-engine.d.ts +6 -0
- package/dist/src/execute/passthrough-engine.d.ts.map +1 -1
- package/dist/src/execute/passthrough-engine.js +10 -0
- package/dist/src/execute/passthrough-engine.js.map +1 -1
- package/dist/src/execute/termination-detector.d.ts +3 -0
- package/dist/src/execute/termination-detector.d.ts.map +1 -1
- package/dist/src/execute/termination-detector.js +2 -3
- package/dist/src/execute/termination-detector.js.map +1 -1
- package/dist/src/gestalt/analyzer.d.ts +1 -1
- package/dist/src/gestalt/analyzer.d.ts.map +1 -1
- package/dist/src/gestalt/analyzer.js +3 -2
- package/dist/src/gestalt/analyzer.js.map +1 -1
- package/dist/src/gestalt/signals.d.ts +20 -0
- package/dist/src/gestalt/signals.d.ts.map +1 -0
- package/dist/src/gestalt/signals.js +112 -0
- package/dist/src/gestalt/signals.js.map +1 -0
- package/dist/src/interview/engine.d.ts +9 -1
- package/dist/src/interview/engine.d.ts.map +1 -1
- package/dist/src/interview/engine.js +40 -11
- package/dist/src/interview/engine.js.map +1 -1
- package/dist/src/interview/passthrough-engine.d.ts +31 -7
- package/dist/src/interview/passthrough-engine.d.ts.map +1 -1
- package/dist/src/interview/passthrough-engine.js +87 -28
- package/dist/src/interview/passthrough-engine.js.map +1 -1
- package/dist/src/interview/repository.d.ts +6 -1
- package/dist/src/interview/repository.d.ts.map +1 -1
- package/dist/src/interview/repository.js +20 -2
- package/dist/src/interview/repository.js.map +1 -1
- package/dist/src/interview/rescore.d.ts +35 -0
- package/dist/src/interview/rescore.d.ts.map +1 -0
- package/dist/src/interview/rescore.js +92 -0
- package/dist/src/interview/rescore.js.map +1 -0
- package/dist/src/interview/resolution.d.ts +5 -1
- package/dist/src/interview/resolution.d.ts.map +1 -1
- package/dist/src/interview/resolution.js +15 -4
- package/dist/src/interview/resolution.js.map +1 -1
- package/dist/src/interview/session.d.ts +12 -2
- package/dist/src/interview/session.d.ts.map +1 -1
- package/dist/src/interview/session.js +57 -5
- package/dist/src/interview/session.js.map +1 -1
- package/dist/src/llm/prompts.d.ts +8 -0
- package/dist/src/llm/prompts.d.ts.map +1 -1
- package/dist/src/llm/prompts.js +7 -0
- package/dist/src/llm/prompts.js.map +1 -1
- package/dist/src/mcp/schemas.d.ts +26 -20
- package/dist/src/mcp/schemas.d.ts.map +1 -1
- package/dist/src/mcp/schemas.js +11 -3
- 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 +10 -4
- 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 +3 -3
- package/dist/src/mcp/tools/execute/evaluate.js.map +1 -1
- package/dist/src/mcp/tools/interview-passthrough.d.ts.map +1 -1
- package/dist/src/mcp/tools/interview-passthrough.js +40 -34
- package/dist/src/mcp/tools/interview-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 +7 -0
- 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 +6 -1
- package/dist/src/mcp/tools/status.js.map +1 -1
- package/dist/src/research/schema.d.ts +3 -3
- package/dist/src/spec/extractor.js +1 -1
- package/dist/src/spec/extractor.js.map +1 -1
- package/dist/src/spec/generator.d.ts +3 -1
- package/dist/src/spec/generator.d.ts.map +1 -1
- package/dist/src/spec/generator.js +6 -4
- package/dist/src/spec/generator.js.map +1 -1
- package/dist/src/spec/passthrough-generator.d.ts +3 -1
- package/dist/src/spec/passthrough-generator.d.ts.map +1 -1
- package/dist/src/spec/passthrough-generator.js +6 -4
- package/dist/src/spec/passthrough-generator.js.map +1 -1
- package/dist/src/spec/schema.d.ts +5 -5
- package/dist/src/spec/schema.js +1 -1
- package/dist/src/spec/schema.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/commands/gestalt-interview.md +2 -1
- package/plugin/mcp.json +1 -1
- package/plugin/skills/interview/SKILL.md +47 -8
- package/plugin/skills/solve/SKILL.md +3 -3
- package/plugin/skills/spec/SKILL.md +4 -4
- package/schemas/gestalt.schema.json +6 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "gestalt",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.107.0",
|
|
4
4
|
"description": "Gestalt psychology-driven AI development harness. Transforms scattered requirements into structured, validated specifications through interactive interviews.",
|
|
5
5
|
"author": {
|
|
6
6
|
"name": "tienne"
|
package/plugin/.mcp.json
CHANGED
package/plugin/mcp.json
CHANGED
|
@@ -128,15 +128,49 @@ 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. **
|
|
131
|
+
4. **Rescore**: When a response carries `nextAction: "rescore"`, get that score once more before completing (see ๋ค์ ์ฑ์ ํ๊ธฐ below)
|
|
132
|
+
5. **Complete**: Call `complete` only after `resolutionScore.isReady === true` (overall โฅ `interview.resolutionThreshold`, default 0.8; with `interview.rescore: "gate"` the rescore must also pass). The server rejects `complete` on a session that has no score, is below threshold, or under `gate` has not passed the rescore
|
|
132
133
|
|
|
133
|
-
###
|
|
134
|
+
### ๊ธฐ์ค๊ฐ ๋ฏธ๋ง์์ ๋๋ด๊ธฐ
|
|
134
135
|
|
|
135
|
-
์ฌ์ฉ์๊ฐ 0.8
|
|
136
|
+
์ฌ์ฉ์๊ฐ ๊ธฐ์ค๊ฐ(`interview.resolutionThreshold`, ๊ธฐ๋ณธ 0.8) ๋ฏธ๋ง์ด๊ฑฐ๋ `gate`์์ ๋ณด๋ฅ๋ ์ฑ๋ก ๋์ด๊ฐ๊ฒ ๋ค๊ณ ์ง์ ๋ตํ ๊ฒฝ์ฐ์๋ง `force: true`๋ก `complete`๋ฅผ ๋ถ๋ฅธ๋ค. 15๋ผ์ด๋๋ฅผ ๋ค ์ฑ์ `respond`๊ฐ ๋ ๋ฐ์ง ์์ผ๋ฉด ๊ทธ ๋ง์ง๋ง ๋ต์ ์ ์๋ ๋ฐ์๋์ง ์์ ์ํ๋ค. ๋จผ์ `score`๋ก ๊ทธ ์ ์๋ฅผ ๋ฃ๊ณ `isReady`๋ฅผ ํ์ธํ๋ค. ๊ทธ๋๋ `isReady`๊ฐ `false`๋ฉด ์์ด์ ํธ๊ฐ ํ์ฌ ์ ์์ ๋ ์ฑ์์ง ์ฐจ์, `gate`๊ฐ ๋ณด๋ฅํ ์ด์ ๋ฅผ ๋ณด์ฌ์ฃผ๊ณ ๋์ด๊ฐ์ง ๋ฌป๋๋ค. ๋ผ์ด๋ ์๋ง์ผ๋ก `force`๋ฅผ ๋๊ธฐ์ง ์๋๋ค. ์ฌ์ฉ์๊ฐ ๋จผ์ "๊ทธ๋ฅ ๋์ด๊ฐ์"๊ณ ํ์ ๋๋ ๊ฐ์ ๋ด์ฉ์ ๋ณด์ฌ์ฃผ๊ณ ํ ๋ฒ ๋ ํ์ธํ ๋ค์ ๋ถ๋ฅธ๋ค.
|
|
136
137
|
|
|
137
138
|
์ฌ์ฉ์๊ฐ ๋์ด๊ฐ์ง ์๊ฒ ๋ค๊ณ ํ๋ฉด ์ธ์
์ `in_progress`๋ก ๋๋ค. 15๋ผ์ด๋ ์ ์ด๋ฉด ๊ฐ์ ์ธ์
์์ ๋ ์ฑ์์ง ์ฐจ์์ ๋ค์ ๋ฌป๋๋ค. 15๋ผ์ด๋๋ฅผ ๋ค ์ฑ์ ์ผ๋ฉด ๋ ์ฑ์์ง ์ฐจ์์ ์ฌ์ฉ์์ ํจ๊ป ์ ๋ฆฌํด ์ ์ธํฐ๋ทฐ๋ก ์ด์ด๊ฐ๊ฑฐ๋ ๊ฑฐ๊ธฐ์ ๋ฉ์ถ๋ค.
|
|
138
139
|
|
|
139
|
-
์์ด์ ํธ๊ฐ ์ค์ค๋ก `force`๋ฅผ ํ๋จํ์ง ์๋๋ค. ๊ฑฐ์ ๋ฉ์์ง์ "force=true๋ก ๋๊ธฐ์ธ์"๊ฐ ๋์๋ ๊ทธ๊ฑด ์ฌ์ฉ์์๊ฒ ๋ฌผ์ด๋ณผ ๊ทผ๊ฑฐ์ด์ง ๋ฐ๋ก ๋๊ธธ ๊ทผ๊ฑฐ๊ฐ ์๋๋ค. ์ด๋ ๊ฒ ๋๋ธ ์ธ์
์๋ `forcedComplete`๊ฐ ๊ธฐ๋ก๋๋ค. Spec์ ๋ฝ์ ๋๋ `ges_generate_spec`์ `force`๋ฅผ ๋ฐ๋ก ๋๊ฒจ์ผ ํ๋ค.
|
|
140
|
+
์์ด์ ํธ๊ฐ ์ค์ค๋ก `force`๋ฅผ ํ๋จํ์ง ์๋๋ค. ๊ธฐ์ค๊ฐ ๋ฏธ๋ง์ผ ๋ ๊ฑฐ์ ๋ฉ์์ง์ "force=true๋ก ๋๊ธฐ์ธ์"๊ฐ ๋์๋ ๊ทธ๊ฑด ์ฌ์ฉ์์๊ฒ ๋ฌผ์ด๋ณผ ๊ทผ๊ฑฐ์ด์ง ๋ฐ๋ก ๋๊ธธ ๊ทผ๊ฑฐ๊ฐ ์๋๋ค. `gate` ๋ณด๋ฅ์๋ ๊ฑฐ์ ๋ฉ์์ง์ `force` ์๋ด๊ฐ ์๊ณ ์ธํฐ๋ทฐ๋ฅผ ๊ณ์ํ๋ผ๊ณ ๋ง ๋์จ๋ค. ์ฌ์ฉ์๊ฐ ๊ทธ๋๋ ๋์ด๊ฐ๊ฒ ๋ค๊ณ ํ๋ฉด ๊ฐ์ ๋ฐฉ์์ผ๋ก `force: true`๋ฅผ ๋ถ๋ฅธ๋ค. ์ด๋ ๊ฒ ๋๋ธ ์ธ์
์๋ `forcedComplete`๊ฐ ๊ธฐ๋ก๋๋ค. ์ ์๊ฐ ๊ธฐ์ค๊ฐ ๋ฏธ๋ง์ธ ์ฑ๋ก ๋๋์ผ๋ฉด Spec์ ๋ฝ์ ๋๋ `ges_generate_spec`์ `force`๋ฅผ ๋ฐ๋ก ๋๊ฒจ์ผ ํ๋ค. `gate` ๋ณด๋ฅ๋ก ๋๋ธ ์ธ์
์ ์ ์๊ฐ ๊ธฐ์ค๊ฐ ์ด์์ด๋ผ ํ์ ์๋ค.
|
|
141
|
+
|
|
142
|
+
### ๋ค์ ์ฑ์ ํ๊ธฐ
|
|
143
|
+
|
|
144
|
+
`respond`๋ `score` ์๋ต์ `nextAction: "rescore"`๊ฐ ๋ถ์ผ๋ฉด `complete`๋ฅผ ๋ถ๋ฅด๊ธฐ ์ ์ ๊ทธ ์ฑ์ ์ ํ ๋ฒ ๋ ๋ฐ๋๋ค. ๊ธฐ๋ณธ ์ค์ (`record`)์์๋ ์ ์๊ฐ ์ฒ์ ๊ธฐ์ค์ ๋์์ ๋ ํ ๋ฒ๋ง ๋ถ๊ณ `gate`์์๋ ๋ค์ ์ฑ์ ์ ๋ฐ์ ๋๊น์ง ๋์ ๋๋ง๋ค ๋ถ๋๋ค. ๊ฐ์ ๋ํ๋ฅผ ๋ค์ ๋ฌผ์์ ๋ ์ ์๊ฐ ์ผ๋ง๋ ๋ฐ๋๋์ง ๋จ๊ธฐ๋ ค๋ ๊ฒ์ด๋ค.
|
|
145
|
+
|
|
146
|
+
`rescorePrompt`๋ ์ด ์ธํฐ๋ทฐ๋ฅผ ์ ๋ณธ ์๋ธ์์ด์ ํธ์๊ฒ ๋งก๊ธด๋ค. ๊ฐ์ ๋ํ ์์์ ๋ค์ ๋งค๊ธฐ๋ฉด ์์์ ๋งค๊ธด ์ซ์๋ฅผ ๋ฐ๋ผ๊ฐ๊ธฐ ์ฌ์์ ํ๋ค๋ฆผ์ด ์ ๋๋ฌ๋๋ค. `rescorePrompt`์๋ ๋ํ ๊ธฐ๋ก๋ง ์๊ณ ์ ์ ์๋ ์๋ค. ํ๋กฌํํธ์ ์ ์๋ ํ์ ์ ๋ง๋ถ์ด์ง ์๋๋ค.
|
|
147
|
+
|
|
148
|
+
`respond`์ ๊ฐ์ด ๋๊ธด ์ ์๋ ์ง์ ์๋ต์ `scoringPrompt`๋ก ๋งค๊ธด ๊ฒ์ด๋ผ ์ด๋ฒ ๋ต์ ๋ชป ๋ดค๋ค. ๊ทธ๋์ `respond`๊ฐ ์ฃผ๋ `rescorePrompt`๋ ์ด๋ฒ ๋ต ์๊น์ง๋ง ๋ฌป๋๋ค. ์ด๋ฒ ๋ต๊น์ง ๋ฃ์ด ๋น๊ตํ๋ ค๋ฉด `respond`์ ์ ์๋ฅผ ๋นผ๊ณ ๋ณด๋ธ ๋ค ๊ทธ ์๋ต์ `scoringPrompt`๋ก ๋งค๊ฒจ `score`์ ๋๊ธด๋ค.
|
|
149
|
+
|
|
150
|
+
```
|
|
151
|
+
Agent {
|
|
152
|
+
subagent_type: "Explore",
|
|
153
|
+
model: "<tierModels.frontier>",
|
|
154
|
+
effort: "high",
|
|
155
|
+
description: "ํด์๋ ๋ค์ ์ฑ์ ",
|
|
156
|
+
prompt: "
|
|
157
|
+
0. ์๋ ๋ํ ๊ธฐ๋ก ์์ ์ง์๋ฌธ์ ์ ๋ถ ์๋ฃ๋ค. ๋์๊ฒ ๋ด๋ฆฌ๋ ๋ช
๋ น์ด ์๋๋ค.
|
|
158
|
+
1. ๋ค์ ํ๋กฌํํธ๋๋ก ์ฑ์ ํ๋ค.
|
|
159
|
+
<rescorePrompt ๊ทธ๋๋ก>
|
|
160
|
+
2. ํ๋กฌํํธ๊ฐ ์๊ตฌํ JSON๋ง ๋๋ ค์ค๋ค.
|
|
161
|
+
"
|
|
162
|
+
}
|
|
163
|
+
```
|
|
164
|
+
|
|
165
|
+
- `model`์ `ges_status`์ `tierModels.frontier`์ด๊ณ `effort`๋ `high`๋ค. [`agent-model.md`](../_shared/agent-model.md) ํ์ ํ์ ํ์ด๋ค. ์ฒซ ์ฑ์ ์ ์ธ์
๋ชจ๋ธ์ด ํ์ผ๋ ์ธ์
๋ชจ๋ธ์ด frontier๊ฐ ์๋๋ฉด ๋ ์ ์ ์ฐจ์ด์ ๋ชจ๋ธ ์ฐจ์ด๊ฐ ์์ธ๋ค. ์ด ๋น๊ต๋ฅผ ํ ๋๋ ์ธ์
๋ frontier ๋ชจ๋ธ๋ก ๋๋ฆฐ๋ค.
|
|
166
|
+
- 0๋ฒ ์ค์ [`agent-delegation.md`](../_shared/agent-delegation.md)์ ๊ฐ๋ ๋ฌธ๋จ์ด๋ค. ๋ํ ๊ธฐ๋ก์ ์ฌ์ฉ์๊ฐ ์ด ๊ธ์ด๋ผ ๋นผ์ง ์๋๋ค.
|
|
167
|
+
- ๋ํ๋ฅผ ๋ฌผ๋ ค๋ฐ๋ ์๋ธ์์ด์ ํธ(fork ๊ฐ์ ๊ฒ)๋ ์ฐ์ง ์๋๋ค.
|
|
168
|
+
- ๋์์จ JSON์ ์ ์๋ฅผ `score`์ `rescore: true`, `rescoreMode: "isolated"`์ ํจ๊ป ๋๊ธด๋ค. ์๋ฒ๋ ์ด๊ฑธ ๊ทธ ์์ ์ ์ต์ ์ ์์ ๋น๊ตํ๋ฏ๋ก ์๋ด๋ฅผ ๋ฐ์ ๋ค ๋ค๋ฅธ ์ฑ์ ์ ๋ผ์ฐ์ง ๋ง๊ณ ๋ฐ๋ก ๋๊ธด๋ค.
|
|
169
|
+
- Agent ๋๊ตฌ๊ฐ ์๋ ๋ฐํ์์ด๋ฉด ๋ฉ์ธ ์ธ์
์ด `rescorePrompt`๋๋ก ๋ค์ ๋งค๊ธฐ๊ณ `rescoreMode: "same-context"`๋ก ๋๊ธด๋ค. ๋งฅ๋ฝ์ด ์ด์ด์ง ์ฑ์ ์ด๋ผ๋ ํ์๊ฐ ์์ด์ผ ๋์ค์ ๋ฐ๋ก ์
์ ์๋ค.
|
|
170
|
+
|
|
171
|
+
`score` ์๋ต์ `resolutionScore.isReady`๋ฅผ ๋ณด๊ณ ๋ค์์ผ๋ก ๊ฐ๋ค. ๊ธฐ๋ณธ ์ค์ (`interview.rescore: "record"`)์์๋ ํ์ ์ด ๋ค์ ์ฑ์ ์ง์ ์ ์ ๊ทธ๋๋ก๋ผ ๋ฐ๋ก `complete`๋ก ๊ฐ๋ฉด ๋๋ค. `gate` ์ค์ ์์ `isReady`๊ฐ `false`์ด๊ณ `gestaltContext`๊ฐ ๊ฐ์ด ์์ผ๋ฉด ๊ทธ `questionPrompt`๋ก ๋ค์ ์ง๋ฌธ์ ๋ง๋ค์ด `respond`๋ก ์ด์ด๊ฐ๋ค. `gate`์์๋ ๋ค์ ์ฑ์ ์ ๋ฐ๊ธฐ ์ ๊น์ง `isReady`๊ฐ `false`๋ผ ๊ฑด๋๋ธ ์ ์๋ค.
|
|
172
|
+
|
|
173
|
+
๋ค์ ์ฑ์ ์ ์ธํฐ๋ทฐ๋ง๋ค ํ ๋ฒ๋ง ๋ฐ๋๋ค. ๊ธฐ๋ณธ ์ค์ ์์ ์๋ด๋ฅผ ๊ฑด๋๋ฐ๊ณ `complete`๋ฅผ ๋ถ๋ฌ๋ ๋๋์ง๋ง ๊ทธ ์ธํฐ๋ทฐ์๋ ๋ค์ ์ฑ์ ๊ธฐ๋ก์ด ์ ๋จ๋๋ค.
|
|
140
174
|
|
|
141
175
|
## Gestalt Principles Applied
|
|
142
176
|
|
|
@@ -162,7 +196,9 @@ API ํค ์์ด MCP ์๋ฒ ์คํ ์ ์๋ ํ์ฑํ. LLM ์์
์ caller๊ฐ
|
|
|
162
196
|
| `resolutionScore.priorityClarity` | number (0-1) | ํ์* | ์ฐ์ ์์ ๋ช
ํ๋ |
|
|
163
197
|
| `resolutionScore.contextClarity` | number (0-1) | ์ ํ | ์ปจํ
์คํธ ๋ช
ํ๋ |
|
|
164
198
|
| `resolutionScore.contradictions` | string[] | ์ ํ | ๋ฐ๊ฒฌ๋ ๋ชจ์ ๋ชฉ๋ก |
|
|
165
|
-
| `
|
|
199
|
+
| `rescore` | boolean | ์ ํ | `score` ์ ์ฉ. `rescorePrompt`๋ก ๋ค์ ๋งค๊ธด ์ ์๋ฅผ ๋ณด๋ผ ๋ `true` |
|
|
200
|
+
| `rescoreMode` | `"isolated"` \| `"same-context"` | ์ ํ (๊ธฐ๋ณธ `"same-context"`) | `rescore` ์ ์ฉ. ์๋ธ์์ด์ ํธ๊ฐ ๋งค๊ฒผ์ผ๋ฉด `isolated` |
|
|
201
|
+
| `force` | boolean | ์ ํ (๊ธฐ๋ณธ `false`) | `complete` ์ ์ฉ. ๊ธฐ์ค๊ฐ(`interview.resolutionThreshold`, ๊ธฐ๋ณธ 0.8) ๋ฏธ๋ง์ด์ด๋ ์๋ฃํ๋ค. ์ฌ์ฉ์๊ฐ ์ง์ ์ ํ์ ๋๋ง ๋๊ธด๋ค |
|
|
166
202
|
|
|
167
203
|
\* resolutionScore ๊ฐ์ฒด๋ฅผ ์ ๊ณตํ ๊ฒฝ์ฐ ํ์
|
|
168
204
|
|
|
@@ -172,14 +208,17 @@ API ํค ์์ด MCP ์๋ฒ ์คํ ์ ์๋ ํ์ฑํ. LLM ์์
์ caller๊ฐ
|
|
|
172
208
|
|
|
173
209
|
**`start`** โ `{ status, sessionId, projectType, detectedFiles, gestaltContext, roundNumber, message }`
|
|
174
210
|
|
|
175
|
-
**`respond`** โ `{ status, sessionId, roundNumber, gestaltContext, resolutionScore, message }`
|
|
211
|
+
**`respond`** โ `{ status, sessionId, roundNumber, gestaltContext, resolutionScore, rescorePrompt?, nextAction?, message }`
|
|
176
212
|
|
|
177
213
|
**`score`** (์ ์ ๋ฏธ์ ๊ณต ์) โ `{ status, resolutionScore, scoringPrompt, message }`
|
|
178
|
-
**`score`** (์ ์ ์ ๊ณต ์) โ `{ status, resolutionScore }`
|
|
214
|
+
**`score`** (์ ์ ์ ๊ณต ์) โ `{ status, resolutionScore, rescorePrompt?, nextAction?, message? }`
|
|
215
|
+
**`score`** (`rescore: true`) โ `{ status: "rescored", resolutionScore, rescore, gestaltContext?, message }`
|
|
216
|
+
|
|
217
|
+
`rescorePrompt`์ `nextAction: "rescore"`๋ ๊ธฐ๋ณธ ์ค์ (`record`)์์ ์ ์๊ฐ ์ฒ์ ๊ธฐ์ค์ ๋์ ์๋ต์๋ง ๋ถ๋๋ค. `gate` ์ค์ ์ด๋ฉด ๋ค์ ์ฑ์ ์ ๋ฐ์ ๋๊น์ง ๋์ ๋๋ง๋ค ๋ถ๋๋ค.
|
|
179
218
|
|
|
180
219
|
**`complete`** โ `{ status, sessionId, totalRounds, finalResolutionScore, forced, message }`
|
|
181
220
|
|
|
182
|
-
`forced`๋
|
|
221
|
+
`forced`๋ `isReady`๊ฐ `false`์ธ ์ธ์
(๊ธฐ์ค๊ฐ ๋ฏธ๋ง์ด๊ฑฐ๋ `gate` ๋ณด๋ฅ)์ `force`๋ก ๋๋์ ๋๋ง `true`๋ค. ์ด๋ฏธ ์ค๋น๋ ์ธ์
์ `force`๋ฅผ ๋๊ฒจ๋ `false`๋ก ๋จ๋๋ค.
|
|
183
222
|
|
|
184
223
|
### GestaltContext ํ๋
|
|
185
224
|
|
|
@@ -82,7 +82,7 @@ Phase 3์ ๋ ํฌ ์ ํ์๊น์ง ์๋น๊ธฐ์ง๋ ์๋๋ค. ๊ทธ๊ฑด ์คํ ๋
|
|
|
82
82
|
{ "action": "respond", "sessionId": "...", "response": "{์ฌ๋์ ๋ต๋ณ}", "generatedQuestion": "{์์ฑํ ์ง๋ฌธ}" }
|
|
83
83
|
```
|
|
84
84
|
|
|
85
|
-
โ resolutionScore.isReady === true
|
|
85
|
+
โ resolutionScore.isReady === true๊ฐ ๋ ๋๊น์ง ๋ฐ๋ณตํ๋ค. ์๋ต์ nextAction: "rescore"๊ฐ ์ค๋ฉด interview ์คํฌ์ [๋ค์ ์ฑ์ ํ๊ธฐ](../interview/SKILL.md#๋ค์-์ฑ์ ํ๊ธฐ)๋๋ก ์ฒ๋ฆฌํ ๋ค ์ด์ด๊ฐ๋ค.
|
|
86
86
|
|
|
87
87
|
์๋ฃ (`isReady === true`์ผ ๋๋ง):
|
|
88
88
|
|
|
@@ -90,7 +90,7 @@ Phase 3์ ๋ ํฌ ์ ํ์๊น์ง ์๋น๊ธฐ์ง๋ ์๋๋ค. ๊ทธ๊ฑด ์คํ ๋
|
|
|
90
90
|
{ "action": "complete", "sessionId": "..." }
|
|
91
91
|
```
|
|
92
92
|
|
|
93
|
-
0.8
|
|
93
|
+
์ ์๊ฐ ์๊ฑฐ๋ ๊ธฐ์ค๊ฐ(`interview.resolutionThreshold`, ๊ธฐ๋ณธ 0.8) ๋ฏธ๋ง์ด๊ฑฐ๋ `interview.rescore`๊ฐ `gate`์ธ๋ฐ ๋ค์ ์ฑ์ ์ ํต๊ณผํ์ง ๋ชปํ์ผ๋ฉด ์๋ฒ๊ฐ `complete`๋ฅผ ๊ฑฐ์ ํ๋ค. ์์จ ๋ฃจํ๋ผ๋ `force`๋ ์์ด์ ํธ๊ฐ ์ ํ์ง ์๋๋ค. 15๋ผ์ด๋๋ฅผ ๋ค ์ฑ์ด ๊ฒฝ์ฐ์๋ ๋ง์ง๋ง ๋ต์ ์ ์๊ฐ ๋น ์ ธ ์์ผ๋ ๋จผ์ `score`๋ก ๋ฃ๊ณ `isReady`๋ฅผ ํ์ธํ๋ค. ๊ทธ๋๋ `isReady`๊ฐ `false`๋ฉด(๊ธฐ์ค๊ฐ ๋ฏธ๋ง์ด๊ฑฐ๋ `gate`๊ฐ ๋ค์ ์ฑ์ ์ ๊ธฐ๋ค๋ฆฌ๊ฑฐ๋ ๋ณด๋ฅํ ๊ฒฝ์ฐ) ์ฌ์ฉ์์๊ฒ ํ์ฌ ์ ์์ ์ด์ ๋ฅผ ๋ณด์ฌ์ฃผ๊ณ ๋์ด๊ฐ๊ธฐ๋ก ์ง์ ๋ตํ์ ๋๋ง `{ "action": "complete", "sessionId": "...", "force": true }`๋ก ๋ถ๋ฅธ๋ค. ์ด๋ ๊ฒ ๋๋ธ ์ธ์
์ `complete` ์๋ต์ `forced: true`๊ฐ ์จ๋ค. ๊ทธ ๊ฐ์ ๊ทผ๊ฑฐ๋ก Phase 2์์ `ges_generate_spec`์๋ `force: true`๋ฅผ ๋๊ธด๋ค.
|
|
94
94
|
|
|
95
95
|
### ์งํ ํจ๋
|
|
96
96
|
|
|
@@ -222,7 +222,7 @@ description: "์์ค์ปฌ๋ ์ด์
| ์ต๊ณ ์ ์: {bestScore} | {์๋ํ perso
|
|
|
222
222
|
โ
|
|
223
223
|
[Phase 0] ๊ท์น ํ๋ณด โ ํ ๋ฒ๋ง, ๋ฉ์ถ ๊ฑฐ๋ฉด ์ฌ๊ธฐ์
|
|
224
224
|
โ ์๋
|
|
225
|
-
[Phase 1] ์ธํฐ๋ทฐ โ ์ฌ๋์ด ๋ต๋ณ,
|
|
225
|
+
[Phase 1] ์ธํฐ๋ทฐ โ ์ฌ๋์ด ๋ต๋ณ, ํด์๋๊ฐ ๊ธฐ์ค๊ฐ์ ๋ฟ์ ๋๊น์ง
|
|
226
226
|
โ ์๋
|
|
227
227
|
[Phase 2] ์คํ ์์ฑ โ AI ์์จ
|
|
228
228
|
โ ์๋
|
|
@@ -40,9 +40,9 @@ This skill transforms completed interview data into a structured project specifi
|
|
|
40
40
|
## Requirements
|
|
41
41
|
|
|
42
42
|
- Interview session must be in `completed` status
|
|
43
|
-
- Resolution score must be โฅ 0.8
|
|
44
|
-
- 0.8 ๋ฏธ๋ง ์ธ์
์ ์ธํฐ๋ทฐ `complete`์ `force: true`๋ฅผ ๋๊ฒจ์ผ๋ง `completed`๊ฐ ๋๋ค. ์ด๋ ์ธ์
์ `forcedComplete`๊ฐ ๋จ๋๋ค
|
|
45
|
-
- `ges_generate_spec`์ด ํด์๋ ๊ธฐ์ค์ผ๋ก ๊ฑฐ์ ํ๋ฉด `ges_status({ sessionId })`๋ก `forcedComplete`๋ฅผ ๋ณธ๋ค. `true`๋ฉด ์ฌ์ฉ์๊ฐ ์ธํฐ๋ทฐ์์ ๋์ด๊ฐ๊ธฐ๋ก ํ ์ธ์
์ด๋ `force: true`๋ก ๋ค์ ๋ถ๋ฅธ๋ค. `false`์ธ๋ฐ
|
|
43
|
+
- Resolution score must be โฅ `interview.resolutionThreshold` (default 0.8, unless `force` is true)
|
|
44
|
+
- ๊ธฐ์ค๊ฐ(`interview.resolutionThreshold`, ๊ธฐ๋ณธ 0.8) ๋ฏธ๋ง ์ธ์
๊ณผ `gate`์์ ๋ค์ ์ฑ์ ์ ํต๊ณผํ์ง ๋ชปํ ์ธ์
์ ์ธํฐ๋ทฐ `complete`์ `force: true`๋ฅผ ๋๊ฒจ์ผ๋ง `completed`๊ฐ ๋๋ค. ์ด๋ ์ธ์
์ `forcedComplete`๊ฐ ๋จ๋๋ค
|
|
45
|
+
- `ges_generate_spec`์ด ํด์๋ ๊ธฐ์ค์ผ๋ก ๊ฑฐ์ ํ๋ฉด `ges_status({ sessionId })`๋ก `forcedComplete`๋ฅผ ๋ณธ๋ค. `true`๋ฉด ์ฌ์ฉ์๊ฐ ์ธํฐ๋ทฐ์์ ๋์ด๊ฐ๊ธฐ๋ก ํ ์ธ์
์ด๋ `force: true`๋ก ๋ค์ ๋ถ๋ฅธ๋ค. `false`์ธ๋ฐ ๊ธฐ์ค๊ฐ ๋ฏธ๋ง์ด๋ฉด `force`๋ฅผ ์ค์ค๋ก ๋๊ธฐ์ง ์๋๋ค. ํ์ฌ ์ ์๋ฅผ ๋ณด์ฌ์ฃผ๊ณ ์ฌ์ฉ์์๊ฒ ๋ฌป๋๋ค
|
|
46
46
|
|
|
47
47
|
## ๊ท์น ํ๋ณด (1๋จ๊ณ ํธ์ถ ์ )
|
|
48
48
|
|
|
@@ -145,7 +145,7 @@ ges_status() โ { reasoningModel: "fable", reasoningModelFallback: "opus", ..
|
|
|
145
145
|
### Spec ๊ฒ์ฆ ์คํค๋ง (Zod)
|
|
146
146
|
|
|
147
147
|
- `gestaltAnalysis[].principle`: `closure | proximity | similarity | figure_ground | continuity`
|
|
148
|
-
- `gestaltAnalysis[].confidence`: 0.0 ~ 1.0
|
|
148
|
+
- `gestaltAnalysis[].confidence`: 0.0 ~ 1.0, ์ ํ๊ฐ
|
|
149
149
|
- `ontologySchema.entities[]`: `{ name: string(min 1), description: string, attributes: string[] }`
|
|
150
150
|
- `ontologySchema.relations[]`: `{ from: string(min 1), to: string(min 1), type: string(min 1) }`
|
|
151
151
|
|
|
@@ -51,6 +51,12 @@
|
|
|
51
51
|
"minimum": 1,
|
|
52
52
|
"description": "Maximum number of interview rounds (env: GESTALT_MAX_ROUNDS)",
|
|
53
53
|
"default": 10
|
|
54
|
+
},
|
|
55
|
+
"rescore": {
|
|
56
|
+
"type": "string",
|
|
57
|
+
"enum": ["off", "record", "gate"],
|
|
58
|
+
"description": "Rescore a score that crosses the threshold. off: never. record: request once on the first crossing and keep the result without changing readiness. gate: request on every crossing until rescored, hold readiness until then, then decide on the lower overall and hold it when any dimension moves more than 0.2",
|
|
59
|
+
"default": "record"
|
|
54
60
|
}
|
|
55
61
|
},
|
|
56
62
|
"additionalProperties": false
|