@tienne/gestalt 0.106.0 → 0.108.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (271) hide show
  1. package/CLAUDE.md +1 -0
  2. package/README.ko.md +1 -0
  3. package/README.md +1 -0
  4. package/dist/package.json +1 -1
  5. package/dist/plugin/role-agents/lens-context/AGENT.md +94 -0
  6. package/dist/plugin/role-agents/lens-link/AGENT.md +83 -0
  7. package/dist/plugin/role-agents/lens-reader/AGENT.md +230 -0
  8. package/dist/plugin/skills/_shared/proactive-routing.md +1 -0
  9. package/dist/plugin/skills/interview/SKILL.md +47 -8
  10. package/dist/plugin/skills/lens/SKILL.md +375 -0
  11. package/dist/plugin/skills/solve/SKILL.md +3 -3
  12. package/dist/plugin/skills/spec/SKILL.md +4 -4
  13. package/dist/schemas/gestalt.schema.json +19 -0
  14. package/dist/src/agent/role-consensus-engine.d.ts.map +1 -1
  15. package/dist/src/agent/role-consensus-engine.js +1 -1
  16. package/dist/src/agent/role-consensus-engine.js.map +1 -1
  17. package/dist/src/agent/role-prompt-generator.d.ts.map +1 -1
  18. package/dist/src/agent/role-prompt-generator.js +1 -2
  19. package/dist/src/agent/role-prompt-generator.js.map +1 -1
  20. package/dist/src/cli/commands/digest.d.ts +2 -0
  21. package/dist/src/cli/commands/digest.d.ts.map +1 -1
  22. package/dist/src/cli/commands/digest.js +6 -0
  23. package/dist/src/cli/commands/digest.js.map +1 -1
  24. package/dist/src/cli/commands/interview.d.ts +1 -0
  25. package/dist/src/cli/commands/interview.d.ts.map +1 -1
  26. package/dist/src/cli/commands/interview.js +5 -3
  27. package/dist/src/cli/commands/interview.js.map +1 -1
  28. package/dist/src/cli/commands/lens.d.ts +27 -0
  29. package/dist/src/cli/commands/lens.d.ts.map +1 -0
  30. package/dist/src/cli/commands/lens.js +200 -0
  31. package/dist/src/cli/commands/lens.js.map +1 -0
  32. package/dist/src/cli/commands/spec.d.ts.map +1 -1
  33. package/dist/src/cli/commands/spec.js +2 -2
  34. package/dist/src/cli/commands/spec.js.map +1 -1
  35. package/dist/src/cli/index.d.ts.map +1 -1
  36. package/dist/src/cli/index.js +37 -0
  37. package/dist/src/cli/index.js.map +1 -1
  38. package/dist/src/core/config.d.ts +19 -0
  39. package/dist/src/core/config.d.ts.map +1 -1
  40. package/dist/src/core/config.js +23 -15
  41. package/dist/src/core/config.js.map +1 -1
  42. package/dist/src/core/constants.d.ts +5 -0
  43. package/dist/src/core/constants.d.ts.map +1 -1
  44. package/dist/src/core/constants.js +5 -0
  45. package/dist/src/core/constants.js.map +1 -1
  46. package/dist/src/core/errors.d.ts +3 -1
  47. package/dist/src/core/errors.d.ts.map +1 -1
  48. package/dist/src/core/errors.js +6 -2
  49. package/dist/src/core/errors.js.map +1 -1
  50. package/dist/src/core/types.d.ts +51 -2
  51. package/dist/src/core/types.d.ts.map +1 -1
  52. package/dist/src/digest/format.d.ts.map +1 -1
  53. package/dist/src/digest/format.js +1 -0
  54. package/dist/src/digest/format.js.map +1 -1
  55. package/dist/src/digest/frames.d.ts.map +1 -1
  56. package/dist/src/digest/frames.js +1 -1
  57. package/dist/src/digest/frames.js.map +1 -1
  58. package/dist/src/digest/ingest.d.ts +8 -1
  59. package/dist/src/digest/ingest.d.ts.map +1 -1
  60. package/dist/src/digest/ingest.js +2 -1
  61. package/dist/src/digest/ingest.js.map +1 -1
  62. package/dist/src/digest/lens-schema.d.ts +542 -0
  63. package/dist/src/digest/lens-schema.d.ts.map +1 -0
  64. package/dist/src/digest/lens-schema.js +108 -0
  65. package/dist/src/digest/lens-schema.js.map +1 -0
  66. package/dist/src/digest/lens-source.d.ts +260 -0
  67. package/dist/src/digest/lens-source.d.ts.map +1 -0
  68. package/dist/src/digest/lens-source.js +92 -0
  69. package/dist/src/digest/lens-source.js.map +1 -0
  70. package/dist/src/digest/lens-widget-schema.d.ts +1225 -0
  71. package/dist/src/digest/lens-widget-schema.d.ts.map +1 -0
  72. package/dist/src/digest/lens-widget-schema.js +80 -0
  73. package/dist/src/digest/lens-widget-schema.js.map +1 -0
  74. package/dist/src/digest/lens-widgets.d.ts +25 -0
  75. package/dist/src/digest/lens-widgets.d.ts.map +1 -0
  76. package/dist/src/digest/lens-widgets.js +225 -0
  77. package/dist/src/digest/lens-widgets.js.map +1 -0
  78. package/dist/src/digest/lint-lens-context.d.ts +102 -0
  79. package/dist/src/digest/lint-lens-context.d.ts.map +1 -0
  80. package/dist/src/digest/lint-lens-context.js +192 -0
  81. package/dist/src/digest/lint-lens-context.js.map +1 -0
  82. package/dist/src/digest/lint-lens.d.ts +17 -0
  83. package/dist/src/digest/lint-lens.d.ts.map +1 -0
  84. package/dist/src/digest/lint-lens.js +237 -0
  85. package/dist/src/digest/lint-lens.js.map +1 -0
  86. package/dist/src/digest/lint.d.ts +14 -0
  87. package/dist/src/digest/lint.d.ts.map +1 -1
  88. package/dist/src/digest/lint.js +156 -2
  89. package/dist/src/digest/lint.js.map +1 -1
  90. package/dist/src/digest/merge.d.ts.map +1 -1
  91. package/dist/src/digest/merge.js +11 -2
  92. package/dist/src/digest/merge.js.map +1 -1
  93. package/dist/src/digest/prose.d.ts.map +1 -1
  94. package/dist/src/digest/prose.js +8 -0
  95. package/dist/src/digest/prose.js.map +1 -1
  96. package/dist/src/digest/render-html.d.ts +5 -0
  97. package/dist/src/digest/render-html.d.ts.map +1 -1
  98. package/dist/src/digest/render-html.js +93 -18
  99. package/dist/src/digest/render-html.js.map +1 -1
  100. package/dist/src/digest/render-lens.d.ts +61 -0
  101. package/dist/src/digest/render-lens.d.ts.map +1 -0
  102. package/dist/src/digest/render-lens.js +273 -0
  103. package/dist/src/digest/render-lens.js.map +1 -0
  104. package/dist/src/digest/render-md.d.ts +5 -0
  105. package/dist/src/digest/render-md.d.ts.map +1 -1
  106. package/dist/src/digest/render-md.js +116 -7
  107. package/dist/src/digest/render-md.js.map +1 -1
  108. package/dist/src/digest/render-widgets.d.ts +13 -0
  109. package/dist/src/digest/render-widgets.d.ts.map +1 -0
  110. package/dist/src/digest/render-widgets.js +197 -0
  111. package/dist/src/digest/render-widgets.js.map +1 -0
  112. package/dist/src/digest/render.d.ts +2 -0
  113. package/dist/src/digest/render.d.ts.map +1 -1
  114. package/dist/src/digest/render.js +17 -3
  115. package/dist/src/digest/render.js.map +1 -1
  116. package/dist/src/digest/schema.d.ts +14683 -2022
  117. package/dist/src/digest/schema.d.ts.map +1 -1
  118. package/dist/src/digest/schema.js +67 -6
  119. package/dist/src/digest/schema.js.map +1 -1
  120. package/dist/src/digest/server.d.ts +2 -1
  121. package/dist/src/digest/server.d.ts.map +1 -1
  122. package/dist/src/digest/server.js +26 -11
  123. package/dist/src/digest/server.js.map +1 -1
  124. package/dist/src/digest/viewer-js.d.ts.map +1 -1
  125. package/dist/src/digest/viewer-js.js +120 -4
  126. package/dist/src/digest/viewer-js.js.map +1 -1
  127. package/dist/src/events/types.d.ts +2 -0
  128. package/dist/src/events/types.d.ts.map +1 -1
  129. package/dist/src/events/types.js +2 -0
  130. package/dist/src/events/types.js.map +1 -1
  131. package/dist/src/execute/orchestrators/evolution.d.ts.map +1 -1
  132. package/dist/src/execute/orchestrators/evolution.js +4 -0
  133. package/dist/src/execute/orchestrators/evolution.js.map +1 -1
  134. package/dist/src/execute/passthrough-engine.d.ts +6 -0
  135. package/dist/src/execute/passthrough-engine.d.ts.map +1 -1
  136. package/dist/src/execute/passthrough-engine.js +10 -0
  137. package/dist/src/execute/passthrough-engine.js.map +1 -1
  138. package/dist/src/execute/termination-detector.d.ts +3 -0
  139. package/dist/src/execute/termination-detector.d.ts.map +1 -1
  140. package/dist/src/execute/termination-detector.js +2 -3
  141. package/dist/src/execute/termination-detector.js.map +1 -1
  142. package/dist/src/gestalt/analyzer.d.ts +1 -1
  143. package/dist/src/gestalt/analyzer.d.ts.map +1 -1
  144. package/dist/src/gestalt/analyzer.js +3 -2
  145. package/dist/src/gestalt/analyzer.js.map +1 -1
  146. package/dist/src/gestalt/signals.d.ts +20 -0
  147. package/dist/src/gestalt/signals.d.ts.map +1 -0
  148. package/dist/src/gestalt/signals.js +112 -0
  149. package/dist/src/gestalt/signals.js.map +1 -0
  150. package/dist/src/interview/engine.d.ts +9 -1
  151. package/dist/src/interview/engine.d.ts.map +1 -1
  152. package/dist/src/interview/engine.js +40 -11
  153. package/dist/src/interview/engine.js.map +1 -1
  154. package/dist/src/interview/passthrough-engine.d.ts +31 -7
  155. package/dist/src/interview/passthrough-engine.d.ts.map +1 -1
  156. package/dist/src/interview/passthrough-engine.js +87 -28
  157. package/dist/src/interview/passthrough-engine.js.map +1 -1
  158. package/dist/src/interview/repository.d.ts +6 -1
  159. package/dist/src/interview/repository.d.ts.map +1 -1
  160. package/dist/src/interview/repository.js +20 -2
  161. package/dist/src/interview/repository.js.map +1 -1
  162. package/dist/src/interview/rescore.d.ts +35 -0
  163. package/dist/src/interview/rescore.d.ts.map +1 -0
  164. package/dist/src/interview/rescore.js +92 -0
  165. package/dist/src/interview/rescore.js.map +1 -0
  166. package/dist/src/interview/resolution.d.ts +5 -1
  167. package/dist/src/interview/resolution.d.ts.map +1 -1
  168. package/dist/src/interview/resolution.js +15 -4
  169. package/dist/src/interview/resolution.js.map +1 -1
  170. package/dist/src/interview/session.d.ts +12 -2
  171. package/dist/src/interview/session.d.ts.map +1 -1
  172. package/dist/src/interview/session.js +57 -5
  173. package/dist/src/interview/session.js.map +1 -1
  174. package/dist/src/lens/attach.d.ts +436 -0
  175. package/dist/src/lens/attach.d.ts.map +1 -0
  176. package/dist/src/lens/attach.js +46 -0
  177. package/dist/src/lens/attach.js.map +1 -0
  178. package/dist/src/lens/ingest.d.ts +75 -0
  179. package/dist/src/lens/ingest.d.ts.map +1 -0
  180. package/dist/src/lens/ingest.js +558 -0
  181. package/dist/src/lens/ingest.js.map +1 -0
  182. package/dist/src/lens/kind.d.ts +11 -0
  183. package/dist/src/lens/kind.d.ts.map +1 -0
  184. package/dist/src/lens/kind.js +59 -0
  185. package/dist/src/lens/kind.js.map +1 -0
  186. package/dist/src/lens/knowledge.d.ts +53 -0
  187. package/dist/src/lens/knowledge.d.ts.map +1 -0
  188. package/dist/src/lens/knowledge.js +202 -0
  189. package/dist/src/lens/knowledge.js.map +1 -0
  190. package/dist/src/lens/notes.d.ts +73 -0
  191. package/dist/src/lens/notes.d.ts.map +1 -0
  192. package/dist/src/lens/notes.js +276 -0
  193. package/dist/src/lens/notes.js.map +1 -0
  194. package/dist/src/lens/panels.d.ts +10 -0
  195. package/dist/src/lens/panels.d.ts.map +1 -0
  196. package/dist/src/lens/panels.js +25 -0
  197. package/dist/src/lens/panels.js.map +1 -0
  198. package/dist/src/lens/pdf-extract-py.d.ts +15 -0
  199. package/dist/src/lens/pdf-extract-py.d.ts.map +1 -0
  200. package/dist/src/lens/pdf-extract-py.js +414 -0
  201. package/dist/src/lens/pdf-extract-py.js.map +1 -0
  202. package/dist/src/lens/podcast.d.ts +36 -0
  203. package/dist/src/lens/podcast.d.ts.map +1 -0
  204. package/dist/src/lens/podcast.js +104 -0
  205. package/dist/src/lens/podcast.js.map +1 -0
  206. package/dist/src/lens/python.d.ts +33 -0
  207. package/dist/src/lens/python.d.ts.map +1 -0
  208. package/dist/src/lens/python.js +61 -0
  209. package/dist/src/lens/python.js.map +1 -0
  210. package/dist/src/lens/web-extract-py.d.ts +9 -0
  211. package/dist/src/lens/web-extract-py.d.ts.map +1 -0
  212. package/dist/src/lens/web-extract-py.js +114 -0
  213. package/dist/src/lens/web-extract-py.js.map +1 -0
  214. package/dist/src/llm/prompts.d.ts +8 -0
  215. package/dist/src/llm/prompts.d.ts.map +1 -1
  216. package/dist/src/llm/prompts.js +7 -0
  217. package/dist/src/llm/prompts.js.map +1 -1
  218. package/dist/src/mcp/schemas.d.ts +29 -20
  219. package/dist/src/mcp/schemas.d.ts.map +1 -1
  220. package/dist/src/mcp/schemas.js +15 -3
  221. package/dist/src/mcp/schemas.js.map +1 -1
  222. package/dist/src/mcp/server.d.ts.map +1 -1
  223. package/dist/src/mcp/server.js +11 -5
  224. package/dist/src/mcp/server.js.map +1 -1
  225. package/dist/src/mcp/tools/digest-passthrough.d.ts.map +1 -1
  226. package/dist/src/mcp/tools/digest-passthrough.js +5 -0
  227. package/dist/src/mcp/tools/digest-passthrough.js.map +1 -1
  228. package/dist/src/mcp/tools/execute/evaluate.d.ts.map +1 -1
  229. package/dist/src/mcp/tools/execute/evaluate.js +3 -3
  230. package/dist/src/mcp/tools/execute/evaluate.js.map +1 -1
  231. package/dist/src/mcp/tools/interview-passthrough.d.ts.map +1 -1
  232. package/dist/src/mcp/tools/interview-passthrough.js +40 -34
  233. package/dist/src/mcp/tools/interview-passthrough.js.map +1 -1
  234. package/dist/src/mcp/tools/spec-passthrough.d.ts.map +1 -1
  235. package/dist/src/mcp/tools/spec-passthrough.js +7 -0
  236. package/dist/src/mcp/tools/spec-passthrough.js.map +1 -1
  237. package/dist/src/mcp/tools/status.d.ts.map +1 -1
  238. package/dist/src/mcp/tools/status.js +6 -1
  239. package/dist/src/mcp/tools/status.js.map +1 -1
  240. package/dist/src/research/schema.d.ts +3 -3
  241. package/dist/src/research/source-create.d.ts +6 -1
  242. package/dist/src/research/source-create.d.ts.map +1 -1
  243. package/dist/src/research/source-create.js +41 -10
  244. package/dist/src/research/source-create.js.map +1 -1
  245. package/dist/src/spec/extractor.js +1 -1
  246. package/dist/src/spec/extractor.js.map +1 -1
  247. package/dist/src/spec/generator.d.ts +3 -1
  248. package/dist/src/spec/generator.d.ts.map +1 -1
  249. package/dist/src/spec/generator.js +6 -4
  250. package/dist/src/spec/generator.js.map +1 -1
  251. package/dist/src/spec/passthrough-generator.d.ts +3 -1
  252. package/dist/src/spec/passthrough-generator.d.ts.map +1 -1
  253. package/dist/src/spec/passthrough-generator.js +6 -4
  254. package/dist/src/spec/passthrough-generator.js.map +1 -1
  255. package/dist/src/spec/schema.d.ts +5 -5
  256. package/dist/src/spec/schema.js +1 -1
  257. package/dist/src/spec/schema.js.map +1 -1
  258. package/package.json +1 -1
  259. package/plugin/.codex-plugin/plugin.json +1 -1
  260. package/plugin/.mcp.json +1 -1
  261. package/plugin/commands/gestalt-interview.md +2 -1
  262. package/plugin/mcp.json +1 -1
  263. package/plugin/role-agents/lens-context/AGENT.md +94 -0
  264. package/plugin/role-agents/lens-link/AGENT.md +83 -0
  265. package/plugin/role-agents/lens-reader/AGENT.md +230 -0
  266. package/plugin/skills/_shared/proactive-routing.md +1 -0
  267. package/plugin/skills/interview/SKILL.md +47 -8
  268. package/plugin/skills/lens/SKILL.md +375 -0
  269. package/plugin/skills/solve/SKILL.md +3 -3
  270. package/plugin/skills/spec/SKILL.md +4 -4
  271. package/schemas/gestalt.schema.json +19 -0
@@ -1,4 +1,5 @@
1
- import { MAX_INTERVIEW_ROUNDS } from '../core/constants.js';
1
+ import { MAX_INTERVIEW_ROUNDS, RESOLUTION_THRESHOLD } from '../core/constants.js';
2
+ import { logger } from '../core/logger.js';
2
3
  import { InterviewError } from '../core/errors.js';
3
4
  import { ok, err } from '../core/result.js';
4
5
  import { selectNextPrinciple } from '../gestalt/principles.js';
@@ -6,23 +7,28 @@ import { ResolutionScorer } from './resolution.js';
6
7
  import { QuestionGenerator } from './questions.js';
7
8
  import { SessionManager } from './session.js';
8
9
  import { detectProjectType } from './brownfield.js';
10
+ import { recordScoreWithRescore, applyRescore } from './rescore.js';
9
11
  import { EventType } from '../events/types.js';
10
12
  export class InterviewEngine {
11
13
  eventStore;
12
14
  sessionManager;
13
15
  questionGenerator;
14
16
  resolutionScorer;
17
+ resolutionThreshold;
18
+ rescoreSetting;
15
19
  /**
16
20
  * @param llm 질문 생성에 쓰는 기본 어댑터
17
21
  * @param frugalLlm 해상도 점수 산정용 저비용 어댑터. 없으면 `llm`을 그대로 쓴다.
18
22
  * 점수 산정은 정해진 기준에 점수를 매기는 작업이라 질문 생성만큼의 모델이 필요 없다.
19
23
  */
20
- constructor(llm, eventStore, frugalLlm) {
24
+ constructor(llm, eventStore, frugalLlm, options = {}) {
21
25
  this.eventStore = eventStore;
22
- this.sessionManager = new SessionManager(eventStore);
26
+ this.sessionManager = new SessionManager(eventStore, options);
23
27
  this.sessionManager.loadFromStore();
24
28
  this.questionGenerator = new QuestionGenerator(llm);
25
- this.resolutionScorer = new ResolutionScorer(frugalLlm ?? llm);
29
+ this.resolutionScorer = new ResolutionScorer(frugalLlm ?? llm, options.resolutionThreshold);
30
+ this.resolutionThreshold = options.resolutionThreshold ?? RESOLUTION_THRESHOLD;
31
+ this.rescoreSetting = options.rescore ?? 'record';
26
32
  }
27
33
  async start(topic, cwd) {
28
34
  try {
@@ -61,14 +67,15 @@ export class InterviewEngine {
61
67
  }
62
68
  // Score resolution
63
69
  const resolutionScore = await this.resolutionScorer.score(session.topic, session.rounds, session.projectType);
64
- this.sessionManager.updateResolutionScore(sessionId, resolutionScore);
70
+ const afterRescore = await this.recordScore(sessionId, resolutionScore);
65
71
  // Select next principle based on current state
66
72
  const hasContradictions = (resolutionScore.contradictions?.length ?? 0) > 0;
67
- const nextPrinciple = selectNextPrinciple({
68
- roundNumber: session.rounds.length + 1,
69
- dimensions: resolutionScore.dimensions,
70
- hasContradictions,
71
- });
73
+ const nextPrinciple = afterRescore ??
74
+ selectNextPrinciple({
75
+ roundNumber: session.rounds.length + 1,
76
+ dimensions: resolutionScore.dimensions,
77
+ hasContradictions,
78
+ });
72
79
  this.eventStore.append('interview', sessionId, EventType.GESTALT_PRINCIPLE_APPLIED, {
73
80
  principle: nextPrinciple,
74
81
  roundNumber: session.rounds.length + 1,
@@ -90,13 +97,35 @@ export class InterviewEngine {
90
97
  try {
91
98
  const session = this.sessionManager.get(sessionId);
92
99
  const resolutionScore = await this.resolutionScorer.score(session.topic, session.rounds, session.projectType);
93
- this.sessionManager.updateResolutionScore(sessionId, resolutionScore);
100
+ await this.recordScore(sessionId, resolutionScore);
94
101
  return ok(resolutionScore);
95
102
  }
96
103
  catch (e) {
97
104
  return err(new InterviewError(`Failed to score: ${e instanceof Error ? e.message : String(e)}`));
98
105
  }
99
106
  }
107
+ /**
108
+ * 채점을 기록하고 다시 채점할 차례면 같은 모델로 한 번 더 부른다.
109
+ * gate가 판정을 미뤘으면 다음 질문에 쓸 원칙을 돌려준다.
110
+ */
111
+ async recordScore(sessionId, score) {
112
+ const request = recordScoreWithRescore(this.sessionManager, sessionId, score, this.rescoreSetting, this.resolutionThreshold);
113
+ if (!request)
114
+ return null;
115
+ const session = this.sessionManager.get(sessionId);
116
+ let second;
117
+ try {
118
+ second = await this.resolutionScorer.rescore(session.topic, session.rounds, session.projectType);
119
+ }
120
+ catch (e) {
121
+ // 다시 채점이 실패해도 인터뷰는 이어간다. gate면 다음에 넘을 때 다시 부른다
122
+ const error = e instanceof Error ? e.message : String(e);
123
+ logger.warn('interview.rescore.failed', { sessionId, error });
124
+ this.sessionManager.recordRescoreFailure(sessionId, error);
125
+ return null;
126
+ }
127
+ return applyRescore(this.sessionManager, sessionId, score, second, 'isolated', this.rescoreSetting, this.resolutionThreshold).principle;
128
+ }
100
129
  complete(sessionId, force = false) {
101
130
  try {
102
131
  return ok(this.sessionManager.complete(sessionId, { force }));
@@ -1 +1 @@
1
- {"version":3,"file":"engine.js","sourceRoot":"","sources":["../../../src/interview/engine.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"engine.js","sourceRoot":"","sources":["../../../src/interview/engine.ts"],"names":[],"mappings":"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"}
@@ -1,7 +1,7 @@
1
- import type { InterviewSession, ResolutionScore, ProjectType, GestaltPrinciple } from '../core/types.js';
1
+ import type { InterviewSession, ResolutionScore, ProjectType, GestaltPrinciple, RescoreMode, RescoreResult } from '../core/types.js';
2
2
  import { InterviewError } from '../core/errors.js';
3
3
  import { type Result } from '../core/result.js';
4
- import { SessionManager } from './session.js';
4
+ import { SessionManager, type InterviewOptions } from './session.js';
5
5
  import { EventStore } from '../events/store.js';
6
6
  import type { AgentRegistry } from '../agent/registry.js';
7
7
  export interface GestaltContext {
@@ -29,6 +29,26 @@ export interface PassthroughRespondResult {
29
29
  compressionPrompt: string;
30
30
  };
31
31
  needsCompression?: boolean;
32
+ /**
33
+ * 다시 채점하기를 요청할 차례면 붙는 프롬프트. record는 처음 기준값을 넘을 때 한 번, gate는 다시 채점을
34
+ * 받기 전까지 넘을 때마다 붙고 off면 안 붙는다. 이때 nextAction은 rescore다
35
+ */
36
+ rescorePrompt?: string;
37
+ nextAction?: 'rescore';
38
+ }
39
+ export interface PassthroughScoreResult {
40
+ resolutionScore: ResolutionScore | null;
41
+ scoringPrompt?: string;
42
+ rescorePrompt?: string;
43
+ nextAction?: 'rescore';
44
+ /** rescore: true로 받은 채점의 비교 결과 */
45
+ rescore?: RescoreResult;
46
+ /** gate가 판정을 미뤘을 때 다음 질문을 만들 컨텍스트 */
47
+ gestaltContext?: GestaltContext;
48
+ }
49
+ export interface RescoreOptions {
50
+ rescore?: boolean;
51
+ rescoreMode?: RescoreMode;
32
52
  }
33
53
  export interface ExternalResolutionScore {
34
54
  goalClarity: number;
@@ -42,18 +62,22 @@ export declare class PassthroughEngine {
42
62
  private eventStore;
43
63
  private sessionManager;
44
64
  private agentRegistry?;
45
- constructor(eventStore: EventStore, agentRegistry?: AgentRegistry);
65
+ private resolutionThreshold;
66
+ private rescoreSetting;
67
+ constructor(eventStore: EventStore, agentRegistry?: AgentRegistry, options?: InterviewOptions);
46
68
  start(topic: string, cwd?: string, memoryContextStr?: string): Result<PassthroughStartResult, InterviewError>;
47
69
  respond(sessionId: string, response: string, generatedQuestion: string, externalScore?: ExternalResolutionScore): Result<PassthroughRespondResult, InterviewError>;
48
- score(sessionId: string, externalScore?: ExternalResolutionScore): Result<{
49
- resolutionScore: ResolutionScore | null;
50
- scoringPrompt?: string;
51
- }, InterviewError>;
70
+ score(sessionId: string, externalScore?: ExternalResolutionScore, options?: RescoreOptions): Result<PassthroughScoreResult, InterviewError>;
52
71
  complete(sessionId: string, force?: boolean): Result<InterviewSession, InterviewError>;
53
72
  getSession(sessionId: string): InterviewSession;
54
73
  getSessionManager(): SessionManager;
55
74
  getLatestSession(): InterviewSession | null;
56
75
  listSessions(): InterviewSession[];
76
+ /** 채점을 세션에 넣는다. 다시 채점하기를 요청할 차례면 rounds로 만든 프롬프트를 돌려준다 */
77
+ private recordScore;
78
+ private rescore;
79
+ /** 직전 respond가 이 라운드용으로 고른 원칙. 첫 라운드나 기록이 없으면 null */
80
+ private appliedPrinciple;
57
81
  private buildGestaltContext;
58
82
  }
59
83
  //# sourceMappingURL=passthrough-engine.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"passthrough-engine.d.ts","sourceRoot":"","sources":["../../../src/interview/passthrough-engine.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,gBAAgB,EAChB,eAAe,EACf,WAAW,EACX,gBAAgB,EACjB,MAAM,kBAAkB,CAAC;AAE1B,OAAO,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAC;AACnD,OAAO,EAAE,KAAK,MAAM,EAAW,MAAM,mBAAmB,CAAC;AAGzD,OAAO,EAAE,cAAc,EAAE,MAAM,cAAc,CAAC;AAE9C,OAAO,EAAE,UAAU,EAAE,MAAM,oBAAoB,CAAC;AAOhD,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AAM1D,MAAM,WAAW,cAAc;IAC7B,YAAY,EAAE,MAAM,CAAC;IACrB,gBAAgB,EAAE,gBAAgB,CAAC;IACnC,iBAAiB,EAAE,MAAM,CAAC;IAC1B,KAAK,EAAE,MAAM,CAAC;IACd,cAAc,EAAE,MAAM,CAAC;IACvB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,WAAW,EAAE,MAAM,CAAC;IACpB,YAAY,CAAC,EAAE,MAAM,EAAE,CAAC;CACzB;AAED,MAAM,WAAW,sBAAsB;IACrC,OAAO,EAAE,gBAAgB,CAAC;IAC1B,WAAW,EAAE,WAAW,CAAC;IACzB,aAAa,EAAE,MAAM,EAAE,CAAC;IACxB,cAAc,EAAE,cAAc,CAAC;CAChC;AAED,MAAM,WAAW,wBAAwB;IACvC,OAAO,EAAE,gBAAgB,CAAC;IAC1B,eAAe,EAAE,eAAe,GAAG,IAAI,CAAC;IACxC,cAAc,EAAE,cAAc,CAAC;IAC/B,kBAAkB,CAAC,EAAE;QAAE,YAAY,EAAE,MAAM,CAAC;QAAC,iBAAiB,EAAE,MAAM,CAAA;KAAE,CAAC;IACzE,gBAAgB,CAAC,EAAE,OAAO,CAAC;CAC5B;AAID,MAAM,WAAW,uBAAuB;IACtC,WAAW,EAAE,MAAM,CAAC;IACpB,iBAAiB,EAAE,MAAM,CAAC;IAC1B,eAAe,EAAE,MAAM,CAAC;IACxB,eAAe,EAAE,MAAM,CAAC;IACxB,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,cAAc,CAAC,EAAE,MAAM,EAAE,CAAC;CAC3B;AAID,qBAAa,iBAAiB;IAK1B,OAAO,CAAC,UAAU;IAJpB,OAAO,CAAC,cAAc,CAAiB;IACvC,OAAO,CAAC,aAAa,CAAC,CAAgB;gBAG5B,UAAU,EAAE,UAAU,EAC9B,aAAa,CAAC,EAAE,aAAa;IAO/B,KAAK,CACH,KAAK,EAAE,MAAM,EACb,GAAG,CAAC,EAAE,MAAM,EACZ,gBAAgB,CAAC,EAAE,MAAM,GACxB,MAAM,CAAC,sBAAsB,EAAE,cAAc,CAAC;IAuCjD,OAAO,CACL,SAAS,EAAE,MAAM,EACjB,QAAQ,EAAE,MAAM,EAChB,iBAAiB,EAAE,MAAM,EACzB,aAAa,CAAC,EAAE,uBAAuB,GACtC,MAAM,CAAC,wBAAwB,EAAE,cAAc,CAAC;IA2GnD,KAAK,CACH,SAAS,EAAE,MAAM,EACjB,aAAa,CAAC,EAAE,uBAAuB,GACtC,MAAM,CAAC;QAAE,eAAe,EAAE,eAAe,GAAG,IAAI,CAAC;QAAC,aAAa,CAAC,EAAE,MAAM,CAAA;KAAE,EAAE,cAAc,CAAC;IAoC9F,QAAQ,CAAC,SAAS,EAAE,MAAM,EAAE,KAAK,UAAQ,GAAG,MAAM,CAAC,gBAAgB,EAAE,cAAc,CAAC;IAUpF,UAAU,CAAC,SAAS,EAAE,MAAM,GAAG,gBAAgB;IAI/C,iBAAiB,IAAI,cAAc;IAInC,gBAAgB,IAAI,gBAAgB,GAAG,IAAI;IAI3C,YAAY,IAAI,gBAAgB,EAAE;IAMlC,OAAO,CAAC,mBAAmB;CAqC5B"}
1
+ {"version":3,"file":"passthrough-engine.d.ts","sourceRoot":"","sources":["../../../src/interview/passthrough-engine.ts"],"names":[],"mappings":"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"}
@@ -1,12 +1,13 @@
1
- import { MAX_INTERVIEW_ROUNDS, PRINCIPLE_QUESTION_STRATEGIES } from '../core/constants.js';
1
+ import { MAX_INTERVIEW_ROUNDS, PRINCIPLE_QUESTION_STRATEGIES, RESOLUTION_THRESHOLD, } from '../core/constants.js';
2
2
  import { InterviewError } from '../core/errors.js';
3
3
  import { ok, err } from '../core/result.js';
4
4
  import { selectNextPrinciple, getPrinciplePhaseLabel } from '../gestalt/principles.js';
5
5
  import { computeResolutionScore } from '../gestalt/analyzer.js';
6
6
  import { SessionManager } from './session.js';
7
7
  import { detectProjectType } from './brownfield.js';
8
+ import { recordScoreWithRescore, applyRescore } from './rescore.js';
8
9
  import { EventType } from '../events/types.js';
9
- import { INTERVIEW_SYSTEM_PROMPT, buildQuestionPrompt, buildResolutionPrompt, } from '../llm/prompts.js';
10
+ import { INTERVIEW_SYSTEM_PROMPT, buildQuestionPrompt, buildResolutionPrompt, buildRescorePrompt, } from '../llm/prompts.js';
10
11
  import { mergeSystemPrompt, getActiveAgentNames } from '../agent/prompt-resolver.js';
11
12
  import { ContextCompressor } from './context-compressor.js';
12
13
  // ─── Engine ─────────────────────────────────────────────────────
@@ -14,9 +15,13 @@ export class PassthroughEngine {
14
15
  eventStore;
15
16
  sessionManager;
16
17
  agentRegistry;
17
- constructor(eventStore, agentRegistry) {
18
+ resolutionThreshold;
19
+ rescoreSetting;
20
+ constructor(eventStore, agentRegistry, options = {}) {
18
21
  this.eventStore = eventStore;
19
- this.sessionManager = new SessionManager(eventStore);
22
+ this.resolutionThreshold = options.resolutionThreshold ?? RESOLUTION_THRESHOLD;
23
+ this.rescoreSetting = options.rescore ?? 'record';
24
+ this.sessionManager = new SessionManager(eventStore, options);
20
25
  this.sessionManager.loadFromStore();
21
26
  this.agentRegistry = agentRegistry;
22
27
  }
@@ -53,10 +58,12 @@ export class PassthroughEngine {
53
58
  respond(sessionId, response, generatedQuestion, externalScore) {
54
59
  try {
55
60
  const session = this.sessionManager.get(sessionId);
56
- // Save the externally generated question
57
- const principle = session.rounds.length > 0
58
- ? session.rounds[session.rounds.length - 1].gestaltFocus
59
- : selectNextPrinciple({ roundNumber: 1, dimensions: [], hasContradictions: false });
61
+ // 호스트는 직전 응답의 gestaltContext.currentPrinciple로 질문을 만들었다.
62
+ // 그 원칙을 라운드에 남겨야 어느 차원을 물었는지가 기록과 맞는다
63
+ const principle = this.appliedPrinciple(sessionId, session.rounds.length + 1) ??
64
+ (session.rounds.length > 0
65
+ ? session.rounds[session.rounds.length - 1].gestaltFocus
66
+ : selectNextPrinciple({ roundNumber: 1, dimensions: [], hasContradictions: false }));
60
67
  // If there's no pending round (no unanswered question), add one
61
68
  const lastRound = session.rounds[session.rounds.length - 1];
62
69
  if (!lastRound || lastRound.userResponse !== null) {
@@ -73,19 +80,16 @@ export class PassthroughEngine {
73
80
  }
74
81
  // Compute resolution score if provided externally
75
82
  let resolutionScore = null;
83
+ let rescorePrompt;
76
84
  if (externalScore) {
77
- resolutionScore = computeResolutionScore({
78
- goalClarity: externalScore.goalClarity,
79
- constraintClarity: externalScore.constraintClarity,
80
- successCriteria: externalScore.successCriteria,
81
- priorityClarity: externalScore.priorityClarity,
82
- contextClarity: externalScore.contextClarity,
83
- contradictions: externalScore.contradictions ?? [],
84
- }, session.projectType);
85
+ resolutionScore = computeResolutionScore(rawScore(externalScore), session.projectType, this.resolutionThreshold);
85
86
  const rejected = rejectUnbackedReadyScore(session, resolutionScore);
86
87
  if (rejected)
87
88
  return err(rejected);
88
- this.sessionManager.updateResolutionScore(sessionId, resolutionScore);
89
+ // 같이 온 점수는 직전 respond의 scoringPrompt로 매긴 것이라 이번 답을 못 봤다.
90
+ // 다시 채점도 그 범위로 물어야 흔들림에 새 답으로 늘어난 몫이 안 섞인다
91
+ const scored = session.rounds.slice(0, -1);
92
+ rescorePrompt = this.recordScore(sessionId, resolutionScore, scored.some((r) => r.userResponse) ? scored : session.rounds);
89
93
  }
90
94
  // Select next principle
91
95
  const hasContradictions = (externalScore?.contradictions?.length ?? 0) > 0;
@@ -118,29 +122,32 @@ export class PassthroughEngine {
118
122
  resolutionScore,
119
123
  gestaltContext,
120
124
  ...(needsCompression ? { compressionContext, needsCompression } : {}),
125
+ ...(rescorePrompt && { rescorePrompt, nextAction: 'rescore' }),
121
126
  });
122
127
  }
123
128
  catch (e) {
124
129
  return err(new InterviewError(`Failed to process response: ${e instanceof Error ? e.message : String(e)}`));
125
130
  }
126
131
  }
127
- score(sessionId, externalScore) {
132
+ score(sessionId, externalScore, options = {}) {
128
133
  try {
129
134
  const session = this.sessionManager.get(sessionId);
135
+ if (options.rescore) {
136
+ if (!externalScore) {
137
+ return err(new InterviewError('rescore: true에는 resolutionScore가 필요합니다.'));
138
+ }
139
+ return this.rescore(sessionId, externalScore, options.rescoreMode ?? 'same-context');
140
+ }
130
141
  if (externalScore) {
131
- const resolutionScore = computeResolutionScore({
132
- goalClarity: externalScore.goalClarity,
133
- constraintClarity: externalScore.constraintClarity,
134
- successCriteria: externalScore.successCriteria,
135
- priorityClarity: externalScore.priorityClarity,
136
- contextClarity: externalScore.contextClarity,
137
- contradictions: externalScore.contradictions ?? [],
138
- }, session.projectType);
142
+ const resolutionScore = computeResolutionScore(rawScore(externalScore), session.projectType, this.resolutionThreshold);
139
143
  const rejected = rejectUnbackedReadyScore(session, resolutionScore);
140
144
  if (rejected)
141
145
  return err(rejected);
142
- this.sessionManager.updateResolutionScore(sessionId, resolutionScore);
143
- return ok({ resolutionScore });
146
+ const rescorePrompt = this.recordScore(sessionId, resolutionScore, session.rounds);
147
+ return ok({
148
+ resolutionScore,
149
+ ...(rescorePrompt && { rescorePrompt, nextAction: 'rescore' }),
150
+ });
144
151
  }
145
152
  // No external score — return scoring prompt for the caller
146
153
  const rounds = session.rounds
@@ -174,6 +181,48 @@ export class PassthroughEngine {
174
181
  return this.sessionManager.list();
175
182
  }
176
183
  // ─── Private helpers ────────────────────────────────────────────
184
+ /** 채점을 세션에 넣는다. 다시 채점하기를 요청할 차례면 rounds로 만든 프롬프트를 돌려준다 */
185
+ recordScore(sessionId, score, rounds) {
186
+ const request = recordScoreWithRescore(this.sessionManager, sessionId, score, this.rescoreSetting, this.resolutionThreshold);
187
+ if (!request)
188
+ return undefined;
189
+ const session = this.sessionManager.get(sessionId);
190
+ return buildRescorePrompt(session.topic, rounds.map((r) => ({ question: r.question, response: r.userResponse })), session.projectType);
191
+ }
192
+ rescore(sessionId, externalScore, mode) {
193
+ if (this.rescoreSetting === 'off') {
194
+ return err(new InterviewError('interview.rescore가 off라 다시 채점을 받지 않습니다.'));
195
+ }
196
+ const state = this.sessionManager.rescoreState(sessionId);
197
+ if (state === 'done') {
198
+ return err(new InterviewError('이미 다시 채점한 인터뷰입니다. 다시 채점하기는 인터뷰마다 한 번만 받습니다.'));
199
+ }
200
+ const session = this.sessionManager.get(sessionId);
201
+ const first = session.resolutionScore;
202
+ if (state === 'none' || !first) {
203
+ return err(new InterviewError(`아직 기준값(${this.resolutionThreshold})을 넘은 채점이 없습니다. 다시 채점하기는 처음 넘은 채점 뒤에 받습니다.`));
204
+ }
205
+ const second = computeResolutionScore(rawScore(externalScore), session.projectType, this.resolutionThreshold);
206
+ const { resolutionScore, rescore, principle, roundNumber } = applyRescore(this.sessionManager, sessionId, first, second, mode, this.rescoreSetting, this.resolutionThreshold);
207
+ if (!principle)
208
+ return ok({ resolutionScore, rescore });
209
+ // gate가 판정을 미뤘으면 다음 질문은 흔들린 차원부터 묻는다
210
+ this.eventStore.append('interview', sessionId, EventType.GESTALT_PRINCIPLE_APPLIED, {
211
+ principle,
212
+ roundNumber,
213
+ });
214
+ const gestaltContext = this.buildGestaltContext(session.topic, principle, roundNumber, session.rounds.map((r) => ({ question: r.question, response: r.userResponse })), session.projectType);
215
+ return ok({ resolutionScore, rescore, gestaltContext });
216
+ }
217
+ /** 직전 respond가 이 라운드용으로 고른 원칙. 첫 라운드나 기록이 없으면 null */
218
+ appliedPrinciple(sessionId, roundNumber) {
219
+ const applied = this.eventStore
220
+ .replay('interview', sessionId)
221
+ .filter((e) => e.eventType === EventType.GESTALT_PRINCIPLE_APPLIED &&
222
+ e.payload.roundNumber === roundNumber);
223
+ const last = applied[applied.length - 1];
224
+ return last ? last.payload.principle : null;
225
+ }
177
226
  buildGestaltContext(topic, principle, roundNumber, previousRounds, projectType, includeScoringPrompt = false) {
178
227
  const questionPrompt = buildQuestionPrompt(topic, principle, previousRounds, projectType);
179
228
  const phase = getPrinciplePhaseLabel(roundNumber);
@@ -197,6 +246,16 @@ export class PassthroughEngine {
197
246
  return context;
198
247
  }
199
248
  }
249
+ function rawScore(external) {
250
+ return {
251
+ goalClarity: external.goalClarity,
252
+ constraintClarity: external.constraintClarity,
253
+ successCriteria: external.successCriteria,
254
+ priorityClarity: external.priorityClarity,
255
+ contextClarity: external.contextClarity,
256
+ contradictions: external.contradictions ?? [],
257
+ };
258
+ }
200
259
  // 답을 하나도 안 받은 세션은 근거가 없으니 임계값 이상 점수를 받지 않는다.
201
260
  // 공백만 보낸 답은 답으로 치지 않는다.
202
261
  // 임계값 미만은 막지 않는다 — 시작 직전 상태를 낮게 기록하는 건 정상 흐름이다.
@@ -1 +1 @@
1
- {"version":3,"file":"passthrough-engine.js","sourceRoot":"","sources":["../../../src/interview/passthrough-engine.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"passthrough-engine.js","sourceRoot":"","sources":["../../../src/interview/passthrough-engine.ts"],"names":[],"mappings":"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"}
@@ -6,7 +6,12 @@ import type { InterviewSession } from '../core/types.js';
6
6
  */
7
7
  export declare class InterviewSessionRepository {
8
8
  private eventStore;
9
- constructor(eventStore: IEventStore);
9
+ private resolutionThreshold;
10
+ /**
11
+ * @param resolutionThreshold isReady가 저장되지 않은 옛 ambiguity 이벤트를 읽을 때만 쓴다.
12
+ * 그 밖의 채점 이벤트는 저장된 isReady를 다시 계산하지 않는다
13
+ */
14
+ constructor(eventStore: IEventStore, resolutionThreshold?: number);
10
15
  /**
11
16
  * 이벤트를 fold하여 InterviewSession 상태를 완전히 복원한다.
12
17
  */
@@ -1 +1 @@
1
- {"version":3,"file":"repository.d.ts","sourceRoot":"","sources":["../../../src/interview/repository.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AACtD,OAAO,KAAK,EAEV,gBAAgB,EAMjB,MAAM,kBAAkB,CAAC;AAI1B;;;GAGG;AACH,qBAAa,0BAA0B;IACzB,OAAO,CAAC,UAAU;gBAAV,UAAU,EAAE,WAAW;IAE3C;;OAEG;IACH,WAAW,CAAC,SAAS,EAAE,MAAM,GAAG,gBAAgB,GAAG,IAAI;IAIvD;;;OAGG;IACH,IAAI,CAAC,SAAS,EAAE,MAAM,GAAG;QAAE,OAAO,EAAE,gBAAgB,CAAC;QAAC,UAAU,EAAE,MAAM,CAAA;KAAE,GAAG,IAAI;IAOjF;;OAEG;IACH,IAAI,IAAI,MAAM,EAAE;IAIhB;;OAEG;IACH,cAAc,IAAI,gBAAgB,EAAE;IAUpC,OAAO,CAAC,UAAU;IAwBlB,OAAO,CAAC,UAAU;CAmFnB"}
1
+ {"version":3,"file":"repository.d.ts","sourceRoot":"","sources":["../../../src/interview/repository.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AACtD,OAAO,KAAK,EAEV,gBAAgB,EAOjB,MAAM,kBAAkB,CAAC;AAI1B;;;GAGG;AACH,qBAAa,0BAA0B;IAMnC,OAAO,CAAC,UAAU;IAClB,OAAO,CAAC,mBAAmB;IAN7B;;;OAGG;gBAEO,UAAU,EAAE,WAAW,EACvB,mBAAmB,GAAE,MAA6B;IAG5D;;OAEG;IACH,WAAW,CAAC,SAAS,EAAE,MAAM,GAAG,gBAAgB,GAAG,IAAI;IAIvD;;;OAGG;IACH,IAAI,CAAC,SAAS,EAAE,MAAM,GAAG;QAAE,OAAO,EAAE,gBAAgB,CAAC;QAAC,UAAU,EAAE,MAAM,CAAA;KAAE,GAAG,IAAI;IAOjF;;OAEG;IACH,IAAI,IAAI,MAAM,EAAE;IAIhB;;OAEG;IACH,cAAc,IAAI,gBAAgB,EAAE;IAUpC,OAAO,CAAC,UAAU;IAwBlB,OAAO,CAAC,UAAU;CAgGnB"}
@@ -6,8 +6,14 @@ import { RESOLUTION_THRESHOLD } from '../core/constants.js';
6
6
  */
7
7
  export class InterviewSessionRepository {
8
8
  eventStore;
9
- constructor(eventStore) {
9
+ resolutionThreshold;
10
+ /**
11
+ * @param resolutionThreshold isReady가 저장되지 않은 옛 ambiguity 이벤트를 읽을 때만 쓴다.
12
+ * 그 밖의 채점 이벤트는 저장된 isReady를 다시 계산하지 않는다
13
+ */
14
+ constructor(eventStore, resolutionThreshold = RESOLUTION_THRESHOLD) {
10
15
  this.eventStore = eventStore;
16
+ this.resolutionThreshold = resolutionThreshold;
11
17
  }
12
18
  /**
13
19
  * 이벤트를 fold하여 InterviewSession 상태를 완전히 복원한다.
@@ -97,6 +103,10 @@ export class InterviewSessionRepository {
97
103
  isReady: payload.isReady,
98
104
  dimensions: payload.dimensions ?? [],
99
105
  ...(contradictions.length > 0 && { contradictions }),
106
+ ...(typeof payload.threshold === 'number' && { threshold: payload.threshold }),
107
+ ...(payload.signals != null && {
108
+ signals: payload.signals,
109
+ }),
100
110
  };
101
111
  if (contradictions.length > 0) {
102
112
  const roundNumber = payload.roundNumber;
@@ -110,6 +120,14 @@ export class InterviewSessionRepository {
110
120
  }
111
121
  break;
112
122
  }
123
+ case EventType.INTERVIEW_RESOLUTION_RESCORED: {
124
+ const score = session.resolutionScore;
125
+ if (score) {
126
+ score.isReady = payload.isReady;
127
+ score.signals = payload.signals;
128
+ }
129
+ break;
130
+ }
113
131
  // Backward compatibility: old ambiguity score was inverted (low = clear)
114
132
  // Convert to resolution score by inverting: resolution = 1 - ambiguity
115
133
  case 'interview.ambiguity.scored': {
@@ -117,7 +135,7 @@ export class InterviewSessionRepository {
117
135
  const resolution = 1 - ambiguity;
118
136
  session.resolutionScore = {
119
137
  overall: resolution,
120
- isReady: resolution >= RESOLUTION_THRESHOLD,
138
+ isReady: resolution >= this.resolutionThreshold,
121
139
  dimensions: payload.dimensions ?? [],
122
140
  };
123
141
  break;
@@ -1 +1 @@
1
- {"version":3,"file":"repository.js","sourceRoot":"","sources":["../../../src/interview/repository.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"repository.js","sourceRoot":"","sources":["../../../src/interview/repository.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,35 @@
1
+ import type { GestaltPrinciple, ResolutionScore, RescoreMode, RescoreResult } from '../core/types.js';
2
+ import type { InterviewConfig } from '../core/config.js';
3
+ import type { SessionManager } from './session.js';
4
+ export type RescoreSetting = InterviewConfig['rescore'];
5
+ /** none: 기준값을 넘은 채점이 아직 없다. pending: 넘었는데 다시 채점을 안 받았다. done: 받았다 */
6
+ export type RescoreState = 'none' | 'pending' | 'done';
7
+ /** gate 모드에서 차원 하나라도 이보다 크게 흔들리면 판정을 미룬다 */
8
+ export declare const RESCORE_SPREAD_LIMIT = 0.2;
9
+ /**
10
+ * 이 채점 뒤에 다시 채점하기를 요청할지 정한다.
11
+ * record는 처음 기준값을 넘을 때 한 번만 요청한다. gate는 다시 채점을 받기 전까지
12
+ * 판정을 미루므로 넘을 때마다 요청한다.
13
+ */
14
+ export declare function shouldRequestRescore(setting: RescoreSetting, state: RescoreState, score: ResolutionScore, threshold: number): boolean;
15
+ export declare function compareRescore(first: ResolutionScore, second: ResolutionScore, mode: RescoreMode, threshold: number): RescoreResult;
16
+ /** record는 다시 채점 직전 점수의 판정을 그대로 두고 gate는 낮은 overall과 흔들림으로 다시 정한다 */
17
+ export declare function readinessAfterRescore(setting: RescoreSetting, first: ResolutionScore, rescore: RescoreResult, threshold: number): boolean;
18
+ /**
19
+ * gate가 판정을 미뤘을 때 다음 질문의 원칙.
20
+ * 흔들림이 기준을 넘었으면 가장 많이 흔들린 차원을 묻는다. 안 넘었으면 낮은 쪽 점수로 고른다.
21
+ */
22
+ export declare function principleAfterRescore(first: ResolutionScore, second: ResolutionScore, rescore: RescoreResult, roundNumber: number): GestaltPrinciple;
23
+ /**
24
+ * 채점을 세션에 넣고 다시 채점하기를 요청할 차례인지 돌려준다.
25
+ * 판정이 이 순서에 달려 있어서 두 엔진이 이 함수 하나를 같이 쓴다.
26
+ */
27
+ export declare function recordScoreWithRescore(sessions: SessionManager, sessionId: string, score: ResolutionScore, setting: RescoreSetting, threshold: number): boolean;
28
+ /** 다시 채점한 점수를 다시 채점 직전 점수와 비교해 남긴다. gate가 판정을 미뤘으면 다음 질문의 원칙도 돌려준다 */
29
+ export declare function applyRescore(sessions: SessionManager, sessionId: string, first: ResolutionScore, second: ResolutionScore, mode: RescoreMode, setting: RescoreSetting, threshold: number): {
30
+ resolutionScore: ResolutionScore;
31
+ rescore: RescoreResult;
32
+ principle: GestaltPrinciple | null;
33
+ roundNumber: number;
34
+ };
35
+ //# sourceMappingURL=rescore.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"rescore.d.ts","sourceRoot":"","sources":["../../../src/interview/rescore.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,gBAAgB,EAEhB,eAAe,EACf,WAAW,EACX,aAAa,EACd,MAAM,kBAAkB,CAAC;AAC1B,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAC;AAGzD,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,cAAc,CAAC;AAEnD,MAAM,MAAM,cAAc,GAAG,eAAe,CAAC,SAAS,CAAC,CAAC;AAExD,qEAAqE;AACrE,MAAM,MAAM,YAAY,GAAG,MAAM,GAAG,SAAS,GAAG,MAAM,CAAC;AAEvD,4CAA4C;AAC5C,eAAO,MAAM,oBAAoB,MAAM,CAAC;AAExC;;;;GAIG;AACH,wBAAgB,oBAAoB,CAClC,OAAO,EAAE,cAAc,EACvB,KAAK,EAAE,YAAY,EACnB,KAAK,EAAE,eAAe,EACtB,SAAS,EAAE,MAAM,GAChB,OAAO,CAIT;AAED,wBAAgB,cAAc,CAC5B,KAAK,EAAE,eAAe,EACtB,MAAM,EAAE,eAAe,EACvB,IAAI,EAAE,WAAW,EACjB,SAAS,EAAE,MAAM,GAChB,aAAa,CAkBf;AAED,qEAAqE;AACrE,wBAAgB,qBAAqB,CACnC,OAAO,EAAE,cAAc,EACvB,KAAK,EAAE,eAAe,EACtB,OAAO,EAAE,aAAa,EACtB,SAAS,EAAE,MAAM,GAChB,OAAO,CAMT;AAED;;;GAGG;AACH,wBAAgB,qBAAqB,CACnC,KAAK,EAAE,eAAe,EACtB,MAAM,EAAE,eAAe,EACvB,OAAO,EAAE,aAAa,EACtB,WAAW,EAAE,MAAM,GAClB,gBAAgB,CAoBlB;AAED;;;GAGG;AACH,wBAAgB,sBAAsB,CACpC,QAAQ,EAAE,cAAc,EACxB,SAAS,EAAE,MAAM,EACjB,KAAK,EAAE,eAAe,EACtB,OAAO,EAAE,cAAc,EACvB,SAAS,EAAE,MAAM,GAChB,OAAO,CAMT;AAED,sEAAsE;AACtE,wBAAgB,YAAY,CAC1B,QAAQ,EAAE,cAAc,EACxB,SAAS,EAAE,MAAM,EACjB,KAAK,EAAE,eAAe,EACtB,MAAM,EAAE,eAAe,EACvB,IAAI,EAAE,WAAW,EACjB,OAAO,EAAE,cAAc,EACvB,SAAS,EAAE,MAAM,GAChB;IACD,eAAe,EAAE,eAAe,CAAC;IACjC,OAAO,EAAE,aAAa,CAAC;IACvB,SAAS,EAAE,gBAAgB,GAAG,IAAI,CAAC;IACnC,WAAW,EAAE,MAAM,CAAC;CACrB,CAUA"}