@tienne/gestalt 0.84.2 → 0.86.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 (222) hide show
  1. package/CLAUDE.md +4 -4
  2. package/README.ko.md +72 -22
  3. package/README.md +73 -23
  4. package/dist/benchmarks/runners/passthrough-benchmark-runner.d.ts.map +1 -1
  5. package/dist/benchmarks/runners/passthrough-benchmark-runner.js +8 -7
  6. package/dist/benchmarks/runners/passthrough-benchmark-runner.js.map +1 -1
  7. package/dist/bin/gestalt.js +2 -2
  8. package/dist/package.json +4 -3
  9. package/dist/plugin/review-agents/harness-reviewer/AGENT.md +21 -1
  10. package/dist/plugin/skills/dispatch/SKILL.md +14 -2
  11. package/dist/plugin/skills/execute/SKILL.md +219 -52
  12. package/dist/plugin/skills/interview/SKILL.md +15 -2
  13. package/dist/plugin/skills/solve/SKILL.md +20 -5
  14. package/dist/plugin/skills/spec/SKILL.md +2 -0
  15. package/dist/src/cli/commands/interview.d.ts.map +1 -1
  16. package/dist/src/cli/commands/interview.js +16 -4
  17. package/dist/src/cli/commands/interview.js.map +1 -1
  18. package/dist/src/cli/commands/memory-merge.d.ts +2 -0
  19. package/dist/src/cli/commands/memory-merge.d.ts.map +1 -0
  20. package/dist/src/cli/commands/memory-merge.js +13 -0
  21. package/dist/src/cli/commands/memory-merge.js.map +1 -0
  22. package/dist/src/cli/index.d.ts.map +1 -1
  23. package/dist/src/cli/index.js +7 -0
  24. package/dist/src/cli/index.js.map +1 -1
  25. package/dist/src/core/constants.d.ts +4 -0
  26. package/dist/src/core/constants.d.ts.map +1 -1
  27. package/dist/src/core/constants.js +8 -0
  28. package/dist/src/core/constants.js.map +1 -1
  29. package/dist/src/core/errors.d.ts +3 -0
  30. package/dist/src/core/errors.d.ts.map +1 -1
  31. package/dist/src/core/errors.js +7 -0
  32. package/dist/src/core/errors.js.map +1 -1
  33. package/dist/src/core/file-lock.d.ts +37 -0
  34. package/dist/src/core/file-lock.d.ts.map +1 -0
  35. package/dist/src/core/file-lock.js +143 -0
  36. package/dist/src/core/file-lock.js.map +1 -0
  37. package/dist/src/core/json-file.d.ts +40 -0
  38. package/dist/src/core/json-file.d.ts.map +1 -0
  39. package/dist/src/core/json-file.js +82 -0
  40. package/dist/src/core/json-file.js.map +1 -0
  41. package/dist/src/core/types.d.ts +86 -9
  42. package/dist/src/core/types.d.ts.map +1 -1
  43. package/dist/src/events/store.d.ts +6 -0
  44. package/dist/src/events/store.d.ts.map +1 -1
  45. package/dist/src/events/store.js +12 -0
  46. package/dist/src/events/store.js.map +1 -1
  47. package/dist/src/events/types.d.ts +7 -0
  48. package/dist/src/events/types.d.ts.map +1 -1
  49. package/dist/src/events/types.js +7 -0
  50. package/dist/src/events/types.js.map +1 -1
  51. package/dist/src/execute/artifact-verifier.d.ts +12 -0
  52. package/dist/src/execute/artifact-verifier.d.ts.map +1 -0
  53. package/dist/src/execute/artifact-verifier.js +211 -0
  54. package/dist/src/execute/artifact-verifier.js.map +1 -0
  55. package/dist/src/execute/drift-detector.d.ts +2 -0
  56. package/dist/src/execute/drift-detector.d.ts.map +1 -1
  57. package/dist/src/execute/drift-detector.js +9 -13
  58. package/dist/src/execute/drift-detector.js.map +1 -1
  59. package/dist/src/execute/orchestrators/evaluation.d.ts +5 -1
  60. package/dist/src/execute/orchestrators/evaluation.d.ts.map +1 -1
  61. package/dist/src/execute/orchestrators/evaluation.js +48 -41
  62. package/dist/src/execute/orchestrators/evaluation.js.map +1 -1
  63. package/dist/src/execute/orchestrators/evolution.d.ts +17 -3
  64. package/dist/src/execute/orchestrators/evolution.d.ts.map +1 -1
  65. package/dist/src/execute/orchestrators/evolution.js +102 -53
  66. package/dist/src/execute/orchestrators/evolution.js.map +1 -1
  67. package/dist/src/execute/orchestrators/execution.d.ts +17 -2
  68. package/dist/src/execute/orchestrators/execution.d.ts.map +1 -1
  69. package/dist/src/execute/orchestrators/execution.js +99 -3
  70. package/dist/src/execute/orchestrators/execution.js.map +1 -1
  71. package/dist/src/execute/orchestrators/planning.d.ts +18 -4
  72. package/dist/src/execute/orchestrators/planning.d.ts.map +1 -1
  73. package/dist/src/execute/orchestrators/planning.js +62 -21
  74. package/dist/src/execute/orchestrators/planning.js.map +1 -1
  75. package/dist/src/execute/orchestrators/types.d.ts +12 -1
  76. package/dist/src/execute/orchestrators/types.d.ts.map +1 -1
  77. package/dist/src/execute/passthrough-engine.d.ts +12 -5
  78. package/dist/src/execute/passthrough-engine.d.ts.map +1 -1
  79. package/dist/src/execute/passthrough-engine.js +10 -4
  80. package/dist/src/execute/passthrough-engine.js.map +1 -1
  81. package/dist/src/execute/repository.d.ts +11 -1
  82. package/dist/src/execute/repository.d.ts.map +1 -1
  83. package/dist/src/execute/repository.js +138 -19
  84. package/dist/src/execute/repository.js.map +1 -1
  85. package/dist/src/execute/session.d.ts +26 -4
  86. package/dist/src/execute/session.d.ts.map +1 -1
  87. package/dist/src/execute/session.js +165 -48
  88. package/dist/src/execute/session.js.map +1 -1
  89. package/dist/src/execute/structural-commands.d.ts +23 -0
  90. package/dist/src/execute/structural-commands.d.ts.map +1 -0
  91. package/dist/src/execute/structural-commands.js +139 -0
  92. package/dist/src/execute/structural-commands.js.map +1 -0
  93. package/dist/src/harness-review/collect.d.ts +1 -1
  94. package/dist/src/harness-review/collect.d.ts.map +1 -1
  95. package/dist/src/harness-review/collect.js +6 -1
  96. package/dist/src/harness-review/collect.js.map +1 -1
  97. package/dist/src/harness-review/rule-overlap.d.ts +3 -0
  98. package/dist/src/harness-review/rule-overlap.d.ts.map +1 -0
  99. package/dist/src/harness-review/rule-overlap.js +78 -0
  100. package/dist/src/harness-review/rule-overlap.js.map +1 -0
  101. package/dist/src/harness-review/types.d.ts +1 -1
  102. package/dist/src/harness-review/types.d.ts.map +1 -1
  103. package/dist/src/harness-review/types.js +1 -0
  104. package/dist/src/harness-review/types.js.map +1 -1
  105. package/dist/src/humanize/overlap.d.ts +116 -0
  106. package/dist/src/humanize/overlap.d.ts.map +1 -0
  107. package/dist/src/humanize/overlap.js +680 -0
  108. package/dist/src/humanize/overlap.js.map +1 -0
  109. package/dist/src/interview/engine.d.ts +1 -1
  110. package/dist/src/interview/engine.d.ts.map +1 -1
  111. package/dist/src/interview/engine.js +3 -3
  112. package/dist/src/interview/engine.js.map +1 -1
  113. package/dist/src/interview/passthrough-engine.d.ts +1 -1
  114. package/dist/src/interview/passthrough-engine.d.ts.map +1 -1
  115. package/dist/src/interview/passthrough-engine.js +20 -3
  116. package/dist/src/interview/passthrough-engine.js.map +1 -1
  117. package/dist/src/interview/repository.d.ts +8 -0
  118. package/dist/src/interview/repository.d.ts.map +1 -1
  119. package/dist/src/interview/repository.js +16 -1
  120. package/dist/src/interview/repository.js.map +1 -1
  121. package/dist/src/interview/session.d.ts +15 -2
  122. package/dist/src/interview/session.d.ts.map +1 -1
  123. package/dist/src/interview/session.js +67 -23
  124. package/dist/src/interview/session.js.map +1 -1
  125. package/dist/src/knowledge-base/embedding.d.ts +6 -1
  126. package/dist/src/knowledge-base/embedding.d.ts.map +1 -1
  127. package/dist/src/knowledge-base/embedding.js +19 -6
  128. package/dist/src/knowledge-base/embedding.js.map +1 -1
  129. package/dist/src/local-pr/registry.d.ts +1 -21
  130. package/dist/src/local-pr/registry.d.ts.map +1 -1
  131. package/dist/src/local-pr/registry.js +7 -113
  132. package/dist/src/local-pr/registry.js.map +1 -1
  133. package/dist/src/mcp/input-guard.d.ts +17 -0
  134. package/dist/src/mcp/input-guard.d.ts.map +1 -1
  135. package/dist/src/mcp/input-guard.js +1 -1
  136. package/dist/src/mcp/input-guard.js.map +1 -1
  137. package/dist/src/mcp/schemas.d.ts +62 -7
  138. package/dist/src/mcp/schemas.d.ts.map +1 -1
  139. package/dist/src/mcp/schemas.js +28 -1
  140. package/dist/src/mcp/schemas.js.map +1 -1
  141. package/dist/src/mcp/server.d.ts.map +1 -1
  142. package/dist/src/mcp/server.js +26 -40
  143. package/dist/src/mcp/server.js.map +1 -1
  144. package/dist/src/mcp/tools/execute/evaluate.d.ts.map +1 -1
  145. package/dist/src/mcp/tools/execute/evaluate.js +15 -9
  146. package/dist/src/mcp/tools/execute/evaluate.js.map +1 -1
  147. package/dist/src/mcp/tools/execute/evolve.d.ts +1 -0
  148. package/dist/src/mcp/tools/execute/evolve.d.ts.map +1 -1
  149. package/dist/src/mcp/tools/execute/evolve.js +102 -37
  150. package/dist/src/mcp/tools/execute/evolve.js.map +1 -1
  151. package/dist/src/mcp/tools/execute/execution.d.ts.map +1 -1
  152. package/dist/src/mcp/tools/execute/execution.js +66 -7
  153. package/dist/src/mcp/tools/execute/execution.js.map +1 -1
  154. package/dist/src/mcp/tools/execute/planning.d.ts.map +1 -1
  155. package/dist/src/mcp/tools/execute/planning.js +34 -2
  156. package/dist/src/mcp/tools/execute/planning.js.map +1 -1
  157. package/dist/src/mcp/tools/execute/roles.d.ts.map +1 -1
  158. package/dist/src/mcp/tools/execute/roles.js +13 -5
  159. package/dist/src/mcp/tools/execute/roles.js.map +1 -1
  160. package/dist/src/mcp/tools/execute/utility.d.ts.map +1 -1
  161. package/dist/src/mcp/tools/execute/utility.js +26 -0
  162. package/dist/src/mcp/tools/execute/utility.js.map +1 -1
  163. package/dist/src/mcp/tools/execute/utils.d.ts +1 -0
  164. package/dist/src/mcp/tools/execute/utils.d.ts.map +1 -1
  165. package/dist/src/mcp/tools/execute/utils.js +15 -0
  166. package/dist/src/mcp/tools/execute/utils.js.map +1 -1
  167. package/dist/src/mcp/tools/execute-passthrough.d.ts.map +1 -1
  168. package/dist/src/mcp/tools/execute-passthrough.js +21 -1
  169. package/dist/src/mcp/tools/execute-passthrough.js.map +1 -1
  170. package/dist/src/mcp/tools/interview-passthrough.d.ts +2 -1
  171. package/dist/src/mcp/tools/interview-passthrough.d.ts.map +1 -1
  172. package/dist/src/mcp/tools/interview-passthrough.js +4 -3
  173. package/dist/src/mcp/tools/interview-passthrough.js.map +1 -1
  174. package/dist/src/mcp/tools/interview.d.ts.map +1 -1
  175. package/dist/src/mcp/tools/interview.js +2 -1
  176. package/dist/src/mcp/tools/interview.js.map +1 -1
  177. package/dist/src/mcp/tools/review-passthrough.js +15 -19
  178. package/dist/src/mcp/tools/review-passthrough.js.map +1 -1
  179. package/dist/src/mcp/tools/spec-passthrough.d.ts.map +1 -1
  180. package/dist/src/mcp/tools/spec-passthrough.js +16 -8
  181. package/dist/src/mcp/tools/spec-passthrough.js.map +1 -1
  182. package/dist/src/mcp/tools/status.d.ts.map +1 -1
  183. package/dist/src/mcp/tools/status.js +4 -0
  184. package/dist/src/mcp/tools/status.js.map +1 -1
  185. package/dist/src/memory/memory-context-injector.d.ts +22 -8
  186. package/dist/src/memory/memory-context-injector.d.ts.map +1 -1
  187. package/dist/src/memory/memory-context-injector.js +85 -13
  188. package/dist/src/memory/memory-context-injector.js.map +1 -1
  189. package/dist/src/memory/memory-merge.d.ts +19 -0
  190. package/dist/src/memory/memory-merge.d.ts.map +1 -0
  191. package/dist/src/memory/memory-merge.js +120 -0
  192. package/dist/src/memory/memory-merge.js.map +1 -0
  193. package/dist/src/memory/project-memory-store.d.ts +15 -11
  194. package/dist/src/memory/project-memory-store.d.ts.map +1 -1
  195. package/dist/src/memory/project-memory-store.js +97 -120
  196. package/dist/src/memory/project-memory-store.js.map +1 -1
  197. package/dist/src/memory/semantic-search.d.ts +4 -1
  198. package/dist/src/memory/semantic-search.d.ts.map +1 -1
  199. package/dist/src/memory/semantic-search.js +66 -19
  200. package/dist/src/memory/semantic-search.js.map +1 -1
  201. package/dist/src/resilience/lateral.d.ts +8 -1
  202. package/dist/src/resilience/lateral.d.ts.map +1 -1
  203. package/dist/src/resilience/lateral.js +52 -4
  204. package/dist/src/resilience/lateral.js.map +1 -1
  205. package/package.json +4 -3
  206. package/plugin/.codex-plugin/plugin.json +1 -1
  207. package/plugin/.mcp.json +1 -1
  208. package/plugin/mcp.json +1 -1
  209. package/plugin/review-agents/harness-reviewer/AGENT.md +21 -1
  210. package/plugin/skills/dispatch/SKILL.md +14 -2
  211. package/plugin/skills/execute/SKILL.md +219 -52
  212. package/plugin/skills/interview/SKILL.md +15 -2
  213. package/plugin/skills/solve/SKILL.md +20 -5
  214. package/plugin/skills/spec/SKILL.md +2 -0
  215. package/dist/src/interview/mini-interview-engine.d.ts +0 -33
  216. package/dist/src/interview/mini-interview-engine.d.ts.map +0 -1
  217. package/dist/src/interview/mini-interview-engine.js +0 -102
  218. package/dist/src/interview/mini-interview-engine.js.map +0 -1
  219. package/dist/src/memory/user-profile-store.d.ts +0 -13
  220. package/dist/src/memory/user-profile-store.d.ts.map +0 -1
  221. package/dist/src/memory/user-profile-store.js +0 -85
  222. package/dist/src/memory/user-profile-store.js.map +0 -1
@@ -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
- | `human_escalation` (lateral 4개 소진) | 루프 종료 → 막힌 지점과 시도한 접근법 보고 |
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
- human_escalation → 막힌 지점 보고
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 +1 @@
1
- {"version":3,"file":"interview.d.ts","sourceRoot":"","sources":["../../../../src/cli/commands/interview.ts"],"names":[],"mappings":"AAOA,wBAAsB,gBAAgB,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAgFnE"}
1
+ {"version":3,"file":"interview.d.ts","sourceRoot":"","sources":["../../../../src/cli/commands/interview.ts"],"names":[],"mappings":"AAQA,wBAAsB,gBAAgB,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CA8FnE"}
@@ -4,6 +4,7 @@ import { EventStore } from '../../events/store.js';
4
4
  import { createAdapter, createTierAdapter } from '../../llm/factory.js';
5
5
  import { InterviewEngine } from '../../interview/engine.js';
6
6
  import { logger } from '../../core/logger.js';
7
+ import { RESOLUTION_THRESHOLD } from '../../core/constants.js';
7
8
  export async function interviewCommand(topic) {
8
9
  logger.info('cli.interview', { module: 'cli/interview', topic });
9
10
  const config = loadConfig();
@@ -55,11 +56,22 @@ export async function interviewCommand(topic) {
55
56
  }
56
57
  currentQuestion = nextQuestion;
57
58
  }
58
- const completeResult = engine.complete(sessionId);
59
- if (completeResult.ok) {
60
- console.log(`\n✅ Interview completed. Session ID: ${sessionId}`);
61
- console.log('Run `gestalt spec ' + sessionId + '` to generate a spec.\n');
59
+ let force = false;
60
+ if (engine.getSession(sessionId).resolutionScore?.isReady !== true) {
61
+ const answer = await prompt(`\n⚠️ Resolution is below ${RESOLUTION_THRESHOLD}. Complete anyway? (y/N) `);
62
+ if (answer.trim().toLowerCase() !== 'y') {
63
+ console.log(`Interview left in progress. Session ID: ${sessionId}\n`);
64
+ return;
65
+ }
66
+ force = true;
67
+ }
68
+ const completeResult = engine.complete(sessionId, force);
69
+ if (!completeResult.ok) {
70
+ console.error(`Error: ${completeResult.error.message}`);
71
+ return;
62
72
  }
73
+ console.log(`\n✅ Interview completed. Session ID: ${sessionId}`);
74
+ console.log('Run `gestalt spec ' + sessionId + '` to generate a spec.\n');
63
75
  }
64
76
  finally {
65
77
  rl.close();
@@ -1 +1 @@
1
- {"version":3,"file":"interview.js","sourceRoot":"","sources":["../../../../src/cli/commands/interview.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"interview.js","sourceRoot":"","sources":["../../../../src/cli/commands/interview.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export declare function memoryMergeCommand(oursPath: string, theirsPath: string): void;
2
+ //# sourceMappingURL=memory-merge.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"memory-merge.d.ts","sourceRoot":"","sources":["../../../../src/cli/commands/memory-merge.ts"],"names":[],"mappings":"AAGA,wBAAgB,kBAAkB,CAAC,QAAQ,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,GAAG,IAAI,CAY7E"}
@@ -0,0 +1,13 @@
1
+ import { runMemoryMergeDriver } from '../../memory/memory-merge.js';
2
+ // git merge driver는 종료 코드만 본다. 0이면 %A를 결과로 받고 그 밖이면 충돌로 남긴다
3
+ export function memoryMergeCommand(oursPath, theirsPath) {
4
+ try {
5
+ const merged = runMemoryMergeDriver(oursPath, theirsPath);
6
+ process.stderr.write(`gestalt: memory.json merged (specs ${merged.specHistory.length}, executions ${merged.executionHistory.length}, decisions ${merged.architectureDecisions.length})\n`);
7
+ }
8
+ catch (e) {
9
+ process.stderr.write(`gestalt: memory.json merge failed, leaving conflict (${e instanceof Error ? e.message : String(e)})\n`);
10
+ process.exitCode = 1;
11
+ }
12
+ }
13
+ //# sourceMappingURL=memory-merge.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"memory-merge.js","sourceRoot":"","sources":["../../../../src/cli/commands/memory-merge.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,oBAAoB,EAAE,MAAM,8BAA8B,CAAC;AAEpE,4DAA4D;AAC5D,MAAM,UAAU,kBAAkB,CAAC,QAAgB,EAAE,UAAkB;IACrE,IAAI,CAAC;QACH,MAAM,MAAM,GAAG,oBAAoB,CAAC,QAAQ,EAAE,UAAU,CAAC,CAAC;QAC1D,OAAO,CAAC,MAAM,CAAC,KAAK,CAClB,sCAAsC,MAAM,CAAC,WAAW,CAAC,MAAM,gBAAgB,MAAM,CAAC,gBAAgB,CAAC,MAAM,eAAe,MAAM,CAAC,qBAAqB,CAAC,MAAM,KAAK,CACrK,CAAC;IACJ,CAAC;IAAC,OAAO,CAAC,EAAE,CAAC;QACX,OAAO,CAAC,MAAM,CAAC,KAAK,CAClB,wDAAwD,CAAC,YAAY,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,KAAK,CACxG,CAAC;QACF,OAAO,CAAC,QAAQ,GAAG,CAAC,CAAC;IACvB,CAAC;AACH,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/cli/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAkDpC,wBAAgB,SAAS,IAAI,OAAO,CAicnC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/cli/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAmDpC,wBAAgB,SAAS,IAAI,OAAO,CA0cnC"}
@@ -10,6 +10,7 @@ import { updateCommand } from './commands/update.js';
10
10
  import { usageReportCommand } from './commands/usage-report.js';
11
11
  import { humanizeCheckCommand } from './commands/humanize-check.js';
12
12
  import { humanizeScanCommand } from './commands/humanize-scan.js';
13
+ import { memoryMergeCommand } from './commands/memory-merge.js';
13
14
  import { explainCheckCommand } from './commands/explain-check.js';
14
15
  import { DEFAULT_CASES_PATH, explainEvalCommand } from './commands/explain-eval.js';
15
16
  import { reviewLoopDirCommand, reviewLoopParseCommand, reviewLoopResolveCommand, reviewLoopStateCommand, } from './commands/review-loop.js';
@@ -69,6 +70,12 @@ export function createCli() {
69
70
  .action(async () => {
70
71
  await updateCommand();
71
72
  });
73
+ program
74
+ .command('memory-merge <base> <ours> <theirs>')
75
+ .description('git merge driver for .gestalt/memory.json — writes the union into <ours> (use with %O %A %B)')
76
+ .action((_base, ours, theirs) => {
77
+ memoryMergeCommand(ours, theirs);
78
+ });
72
79
  program
73
80
  .command('graph-visualize')
74
81
  .description('Visualize the code knowledge graph in the browser')
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/cli/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/cli/index.ts"],"names":[],"mappings":"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"}
@@ -38,6 +38,10 @@ export declare const PLANNING_PRINCIPLE_STRATEGIES: Record<string, string>;
38
38
  export declare const MAX_ATOMIC_TASKS = 100;
39
39
  export declare const MAX_TASK_GROUPS = 20;
40
40
  export declare const EXECUTION_PRINCIPLE_STRATEGY: Record<string, string>;
41
+ export declare const ARTIFACT_GIT_TIMEOUT_MS = 10000;
42
+ export declare const BASELINE_EVENT_DIRTY_LIMIT = 2000;
43
+ export declare const VERIFICATION_EVENT_FILE_LIMIT = 50;
44
+ export declare const COMPRESSION_HINT_TASK_COUNT = 5;
41
45
  export declare const DRIFT_THRESHOLD = 0.6;
42
46
  export declare const DRIFT_WEIGHTS: {
43
47
  readonly goal: 0.5;
@@ -1 +1 @@
1
- {"version":3,"file":"constants.d.ts","sourceRoot":"","sources":["../../../src/core/constants.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,gBAAgB,EAAE,MAAM,YAAY,CAAC;AAE9C,eAAO,MAAM,oBAAoB,MAAM,CAAC;AACxC,eAAO,MAAM,oBAAoB,KAAK,CAAC;AACvC,eAAO,MAAM,gBAAgB,IAAI,CAAC;AAClC,eAAO,MAAM,eAAe,MAAM,CAAC;AACnC,eAAO,MAAM,cAAc,OAAO,CAAC;AACnC,eAAO,MAAM,aAAa,oBAAoB,CAAC;AAC/C,eAAO,MAAM,uBAAuB,UAAU,CAAC;AAC/C,eAAO,MAAM,wBAAwB,SAAS,CAAC;AAE/C;;;;;;;;;;GAUG;AACH,eAAO,MAAM,mBAAmB;;;;CAItB,CAAC;AAEX,eAAO,MAAM,kBAAkB,EAAE,MAAM,CAAC,gBAAgB,EAAE,MAAM,CAM/D,CAAC;AAEF,eAAO,MAAM,kBAAkB,EAAE,MAAM,CAAC,gBAAgB,EAAE,MAAM,CAM/D,CAAC;AAEF,eAAO,MAAM,sBAAsB,OAAO,CAAC;AAC3C,eAAO,MAAM,sBAAsB,OAAO,CAAC;AAE3C,eAAO,MAAM,6BAA6B,EAAE,MAAM,CAAC,gBAAgB,EAAE,MAAM,CAW1E,CAAC;AAEF,eAAO,MAAM,iBAAiB,WAAW,CAAC;AAC1C,eAAO,MAAM,UAAU,kBAAkB,CAAC;AAM1C,eAAO,MAAM,sBAAsB,OAAO,CAAC;AAG3C,eAAO,MAAM,sBAAsB,QAAsB,CAAC;AAG1D,eAAO,MAAM,2BAA2B,8HAK9B,CAAC;AAEX,eAAO,MAAM,oBAAoB,IAAI,CAAC;AAEtC,eAAO,MAAM,6BAA6B,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAShE,CAAC;AAEF,eAAO,MAAM,gBAAgB,MAAM,CAAC;AACpC,eAAO,MAAM,eAAe,KAAK,CAAC;AAGlC,eAAO,MAAM,4BAA4B,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAG/D,CAAC;AAOF,eAAO,MAAM,eAAe,MAAM,CAAC;AACnC,eAAO,MAAM,aAAa;;;;CAIhB,CAAC;AAGX,eAAO,MAAM,yBAAyB,IAAI,CAAC;AAC3C,eAAO,MAAM,qBAAqB,IAAI,CAAC;AACvC,eAAO,MAAM,wBAAwB,OAAO,CAAC;AAC7C,eAAO,MAAM,+BAA+B,MAAM,CAAC;AACnD,eAAO,MAAM,uBAAuB,OAAO,CAAC;AAC5C,eAAO,MAAM,uBAAuB,IAAI,CAAC;AACzC,eAAO,MAAM,wBAAwB,IAAI,CAAC"}
1
+ {"version":3,"file":"constants.d.ts","sourceRoot":"","sources":["../../../src/core/constants.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,gBAAgB,EAAE,MAAM,YAAY,CAAC;AAE9C,eAAO,MAAM,oBAAoB,MAAM,CAAC;AACxC,eAAO,MAAM,oBAAoB,KAAK,CAAC;AACvC,eAAO,MAAM,gBAAgB,IAAI,CAAC;AAClC,eAAO,MAAM,eAAe,MAAM,CAAC;AACnC,eAAO,MAAM,cAAc,OAAO,CAAC;AACnC,eAAO,MAAM,aAAa,oBAAoB,CAAC;AAC/C,eAAO,MAAM,uBAAuB,UAAU,CAAC;AAC/C,eAAO,MAAM,wBAAwB,SAAS,CAAC;AAE/C;;;;;;;;;;GAUG;AACH,eAAO,MAAM,mBAAmB;;;;CAItB,CAAC;AAEX,eAAO,MAAM,kBAAkB,EAAE,MAAM,CAAC,gBAAgB,EAAE,MAAM,CAM/D,CAAC;AAEF,eAAO,MAAM,kBAAkB,EAAE,MAAM,CAAC,gBAAgB,EAAE,MAAM,CAM/D,CAAC;AAEF,eAAO,MAAM,sBAAsB,OAAO,CAAC;AAC3C,eAAO,MAAM,sBAAsB,OAAO,CAAC;AAE3C,eAAO,MAAM,6BAA6B,EAAE,MAAM,CAAC,gBAAgB,EAAE,MAAM,CAW1E,CAAC;AAEF,eAAO,MAAM,iBAAiB,WAAW,CAAC;AAC1C,eAAO,MAAM,UAAU,kBAAkB,CAAC;AAM1C,eAAO,MAAM,sBAAsB,OAAO,CAAC;AAG3C,eAAO,MAAM,sBAAsB,QAAsB,CAAC;AAG1D,eAAO,MAAM,2BAA2B,8HAK9B,CAAC;AAEX,eAAO,MAAM,oBAAoB,IAAI,CAAC;AAEtC,eAAO,MAAM,6BAA6B,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAShE,CAAC;AAEF,eAAO,MAAM,gBAAgB,MAAM,CAAC;AACpC,eAAO,MAAM,eAAe,KAAK,CAAC;AAGlC,eAAO,MAAM,4BAA4B,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAG/D,CAAC;AAGF,eAAO,MAAM,uBAAuB,QAAS,CAAC;AAE9C,eAAO,MAAM,0BAA0B,OAAQ,CAAC;AAEhD,eAAO,MAAM,6BAA6B,KAAK,CAAC;AAEhD,eAAO,MAAM,2BAA2B,IAAI,CAAC;AAO7C,eAAO,MAAM,eAAe,MAAM,CAAC;AACnC,eAAO,MAAM,aAAa;;;;CAIhB,CAAC;AAGX,eAAO,MAAM,yBAAyB,IAAI,CAAC;AAC3C,eAAO,MAAM,qBAAqB,IAAI,CAAC;AACvC,eAAO,MAAM,wBAAwB,OAAO,CAAC;AAC7C,eAAO,MAAM,+BAA+B,MAAM,CAAC;AACnD,eAAO,MAAM,uBAAuB,OAAO,CAAC;AAC5C,eAAO,MAAM,uBAAuB,IAAI,CAAC;AACzC,eAAO,MAAM,wBAAwB,IAAI,CAAC"}
@@ -75,6 +75,14 @@ export const MAX_TASK_GROUPS = 20;
75
75
  export const EXECUTION_PRINCIPLE_STRATEGY = {
76
76
  [GestaltPrinciple.SIMILARITY]: 'Leverage Similarity: when executing a task, reference completed tasks with similar patterns to provide consistent implementation context.',
77
77
  };
78
+ // 완료 보고된 artifacts를 git 작업 트리와 대조할 때 git 호출 하나에 주는 시간
79
+ export const ARTIFACT_GIT_TIMEOUT_MS = 10_000;
80
+ // 시작 시점 dirty 파일이 이보다 많으면 실행 시작 이벤트에 해시를 남기지 않는다. 메모리에서는 그대로 대조한다
81
+ export const BASELINE_EVENT_DIRTY_LIMIT = 2_000;
82
+ // 대조 실패 이벤트에 남기는 파일 수. 응답에는 전부 싣는다
83
+ export const VERIFICATION_EVENT_FILE_LIMIT = 50;
84
+ // 결과가 이 개수를 넘으면 execute_task 응답에 compress 안내를 붙인다
85
+ export const COMPRESSION_HINT_TASK_COUNT = 5;
78
86
  // ─── Drift Detection ───────────────────────────────────────────
79
87
  // Goal Drift가 문장 단위 Jaccard 유사도에서 임베딩(Xenova/all-MiniLM-L6-v2) 코사인
80
88
  // 유사도로 교체되면서(src/execute/drift-detector.ts) 임계값도 새 척도에 맞게 재조정했다.
@@ -1 +1 @@
1
- {"version":3,"file":"constants.js","sourceRoot":"","sources":["../../../src/core/constants.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"constants.js","sourceRoot":"","sources":["../../../src/core/constants.ts"],"names":[],"mappings":"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"}
@@ -12,6 +12,9 @@ export declare class SessionNotFoundError extends InterviewError {
12
12
  export declare class SessionAlreadyCompletedError extends InterviewError {
13
13
  constructor(sessionId: string);
14
14
  }
15
+ export declare class InterviewNotReadyError extends InterviewError {
16
+ constructor(score: number | null, threshold: number);
17
+ }
15
18
  export declare class ResolutionThresholdError extends GestaltError {
16
19
  constructor(score: number, threshold: number);
17
20
  }
@@ -1 +1 @@
1
- {"version":3,"file":"errors.d.ts","sourceRoot":"","sources":["../../../src/core/errors.ts"],"names":[],"mappings":"AAAA,qBAAa,YAAa,SAAQ,KAAK;aAKnB,IAAI,EAAE,MAAM;IAJ9B,SAAgB,YAAY,CAAC,EAAE,MAAM,CAAC;gBAGpC,OAAO,EAAE,MAAM,EACC,IAAI,EAAE,MAAM,EAC5B,YAAY,CAAC,EAAE,MAAM;CAQxB;AAED,qBAAa,cAAe,SAAQ,YAAY;gBAClC,OAAO,EAAE,MAAM;CAI5B;AAED,qBAAa,oBAAqB,SAAQ,cAAc;gBAC1C,SAAS,EAAE,MAAM;CAM9B;AAED,qBAAa,4BAA6B,SAAQ,cAAc;gBAClD,SAAS,EAAE,MAAM;CAI9B;AAED,qBAAa,wBAAyB,SAAQ,YAAY;gBAC5C,KAAK,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM;CAO7C;AAED,qBAAa,mBAAoB,SAAQ,YAAY;gBACvC,OAAO,EAAE,MAAM;CAI5B;AAED,qBAAa,QAAS,SAAQ,YAAY;gBAC5B,OAAO,EAAE,MAAM;CAI5B;AAED,qBAAa,eAAgB,SAAQ,YAAY;gBACnC,OAAO,EAAE,MAAM;CAI5B;AAED,qBAAa,eAAgB,SAAQ,YAAY;gBACnC,OAAO,EAAE,MAAM;CAI5B;AAED,qBAAa,WAAY,SAAQ,YAAY;gBAC/B,OAAO,EAAE,MAAM;CAI5B;AAED,qBAAa,YAAa,SAAQ,YAAY;gBAChC,OAAO,EAAE,MAAM;CAI5B;AAED,qBAAa,2BAA4B,SAAQ,YAAY;gBAC/C,SAAS,EAAE,MAAM;CAI9B;AAED,qBAAa,wBAAyB,SAAQ,YAAY;gBAC5C,OAAO,EAAE,MAAM;CAI5B;AAED,qBAAa,aAAc,SAAQ,YAAY;IAC7C,SAAgB,SAAS,EAAE,MAAM,EAAE,CAAC;gBAExB,OAAO,EAAE,MAAM,EAAE,SAAS,GAAE,MAAM,EAAO;CAStD;AAED,qBAAa,kBAAmB,SAAQ,YAAY;gBACtC,OAAO,EAAE,MAAM;CAI5B;AAED,qBAAa,eAAgB,SAAQ,YAAY;gBACnC,OAAO,EAAE,MAAM;CAI5B;AAED,qBAAa,kBAAmB,SAAQ,YAAY;gBACtC,OAAO,EAAE,MAAM;CAI5B"}
1
+ {"version":3,"file":"errors.d.ts","sourceRoot":"","sources":["../../../src/core/errors.ts"],"names":[],"mappings":"AAAA,qBAAa,YAAa,SAAQ,KAAK;aAKnB,IAAI,EAAE,MAAM;IAJ9B,SAAgB,YAAY,CAAC,EAAE,MAAM,CAAC;gBAGpC,OAAO,EAAE,MAAM,EACC,IAAI,EAAE,MAAM,EAC5B,YAAY,CAAC,EAAE,MAAM;CAQxB;AAED,qBAAa,cAAe,SAAQ,YAAY;gBAClC,OAAO,EAAE,MAAM;CAI5B;AAED,qBAAa,oBAAqB,SAAQ,cAAc;gBAC1C,SAAS,EAAE,MAAM;CAM9B;AAED,qBAAa,4BAA6B,SAAQ,cAAc;gBAClD,SAAS,EAAE,MAAM;CAI9B;AAED,qBAAa,sBAAuB,SAAQ,cAAc;gBAC5C,KAAK,EAAE,MAAM,GAAG,IAAI,EAAE,SAAS,EAAE,MAAM;CAOpD;AAED,qBAAa,wBAAyB,SAAQ,YAAY;gBAC5C,KAAK,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM;CAO7C;AAED,qBAAa,mBAAoB,SAAQ,YAAY;gBACvC,OAAO,EAAE,MAAM;CAI5B;AAED,qBAAa,QAAS,SAAQ,YAAY;gBAC5B,OAAO,EAAE,MAAM;CAI5B;AAED,qBAAa,eAAgB,SAAQ,YAAY;gBACnC,OAAO,EAAE,MAAM;CAI5B;AAED,qBAAa,eAAgB,SAAQ,YAAY;gBACnC,OAAO,EAAE,MAAM;CAI5B;AAED,qBAAa,WAAY,SAAQ,YAAY;gBAC/B,OAAO,EAAE,MAAM;CAI5B;AAED,qBAAa,YAAa,SAAQ,YAAY;gBAChC,OAAO,EAAE,MAAM;CAI5B;AAED,qBAAa,2BAA4B,SAAQ,YAAY;gBAC/C,SAAS,EAAE,MAAM;CAI9B;AAED,qBAAa,wBAAyB,SAAQ,YAAY;gBAC5C,OAAO,EAAE,MAAM;CAI5B;AAED,qBAAa,aAAc,SAAQ,YAAY;IAC7C,SAAgB,SAAS,EAAE,MAAM,EAAE,CAAC;gBAExB,OAAO,EAAE,MAAM,EAAE,SAAS,GAAE,MAAM,EAAO;CAStD;AAED,qBAAa,kBAAmB,SAAQ,YAAY;gBACtC,OAAO,EAAE,MAAM;CAI5B;AAED,qBAAa,eAAgB,SAAQ,YAAY;gBACnC,OAAO,EAAE,MAAM;CAI5B;AAED,qBAAa,kBAAmB,SAAQ,YAAY;gBACtC,OAAO,EAAE,MAAM;CAI5B"}
@@ -28,6 +28,13 @@ export class SessionAlreadyCompletedError extends InterviewError {
28
28
  this.name = 'SessionAlreadyCompletedError';
29
29
  }
30
30
  }
31
+ export class InterviewNotReadyError extends InterviewError {
32
+ constructor(score, threshold) {
33
+ const current = score === null ? '측정 전' : score.toFixed(2);
34
+ super(`해상도 점수(${current})가 임계값(${threshold})에 못 미쳐 인터뷰를 완료할 수 없습니다. 인터뷰를 계속 진행하거나 force=true로 넘기세요.`);
35
+ this.name = 'InterviewNotReadyError';
36
+ }
37
+ }
31
38
  export class ResolutionThresholdError extends GestaltError {
32
39
  constructor(score, threshold) {
33
40
  super(`해상도 점수(${score.toFixed(2)})가 임계값(${threshold}) 미만입니다. 인터뷰를 계속 진행하거나 force=true로 강제 생성하세요.`, 'RESOLUTION_THRESHOLD');
@@ -1 +1 @@
1
- {"version":3,"file":"errors.js","sourceRoot":"","sources":["../../../src/core/errors.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"errors.js","sourceRoot":"","sources":["../../../src/core/errors.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,37 @@
1
+ export interface FileLockOptions {
2
+ /** 기다리다 포기할 때 던질 에러 메시지 */
3
+ busyMessage?: string;
4
+ }
5
+ /**
6
+ * 파일 하나를 읽고 고쳐 쓰는 동안 다른 프로세스를 막는다.
7
+ *
8
+ * 워크트리 여럿이 같은 파일에 동시에 손대는 게 이 레포의 기본 흐름이다. 잠금 없이
9
+ * 읽고 고쳐 쓰면 나중에 쓴 쪽이 먼저 쓴 쪽의 항목을 덮는다.
10
+ *
11
+ * `mkdir`는 있으면 실패하니까 그 자체가 잠금이다. 쥔 채로 죽은 프로세스가 파일을 영영
12
+ * 못 고치게 만들면 안 되므로 버려진 잠금은 부순다. 부수는 순간에 둘이 겹치면 둘 다
13
+ * `mkdir`을 시도하고 한쪽만 성공한다 — 진 쪽은 다시 기다린다.
14
+ *
15
+ * **버려졌는지는 주인의 pid로 가른다.** 예전에는 잠금 디렉토리의 mtime만 봤는데,
16
+ * 잠금은 잡을 때 한 번 만들어지고 쥔 동안 mtime이 안 올라간다. 그래서 `fn()`이
17
+ * 5초를 넘기면 살아 있는 잠금이 버려진 것으로 보였다. 남이 부수고 들어와 둘이 나란히
18
+ * 읽고 고쳐 써서 늦게 쓴 쪽이 상대 항목을 덮었다. 파일은 rename이라 안 깨지고 항목만
19
+ * 조용히 사라진다.
20
+ *
21
+ * 쥔 동안 mtime을 주기적으로 올리는 방법은 여기서 안 통한다. `fn()`이 통째로 동기라
22
+ * 타이머가 돌 틈이 없다 — 갱신이 필요한 바로 그 순간에 이벤트 루프가 막혀 있다.
23
+ * 대신 주인이 살아 있는지를 직접 묻는다.
24
+ *
25
+ * 부수기 직전에 mtime과 주인 토큰을 다시 읽어 판정 때 본 값과 같은지 비교한다.
26
+ * 그래도 다시 읽기와 삭제 사이의 아주 좁은 틈은 남는다. 그래서 `fn`에는 `stillMine`을
27
+ * 준다. 쓰기 직전에 잠금이 아직 내 것인지 다시 확인할 수 있어야 한다.
28
+ *
29
+ * 기다리는 동안은 `Atomics.wait`로 스레드를 멈춘다. 경합이 길면 이벤트 루프가 최대
30
+ * 2초(`LOCK_WAIT_MS`) 동안 아무것도 못 한다. MCP 서버도 그동안 다른 요청을 못 받는다.
31
+ *
32
+ * @param lockPath 잠금으로 쓸 디렉토리 경로. 부모 디렉토리는 없으면 만든다
33
+ */
34
+ export declare function withFileLock<T>(lockPath: string, fn: (ctx: {
35
+ stillMine: () => boolean;
36
+ }) => T, options?: FileLockOptions): T;
37
+ //# sourceMappingURL=file-lock.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"file-lock.d.ts","sourceRoot":"","sources":["../../../src/core/file-lock.ts"],"names":[],"mappings":"AAgEA,MAAM,WAAW,eAAe;IAC9B,2BAA2B;IAC3B,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA4BG;AACH,wBAAgB,YAAY,CAAC,CAAC,EAC5B,QAAQ,EAAE,MAAM,EAChB,EAAE,EAAE,CAAC,GAAG,EAAE;IAAE,SAAS,EAAE,MAAM,OAAO,CAAA;CAAE,KAAK,CAAC,EAC5C,OAAO,GAAE,eAAoB,GAC5B,CAAC,CA0DH"}
@@ -0,0 +1,143 @@
1
+ import { randomUUID } from 'node:crypto';
2
+ import { mkdirSync, readFileSync, rmSync, statSync, writeFileSync } from 'node:fs';
3
+ import { dirname, join } from 'node:path';
4
+ /** 주인이 안 잡히는 잠금을 부수기까지 */
5
+ const LOCK_STALE_MS = 5_000;
6
+ /**
7
+ * 주인이 살아 있어도 이만큼 지나면 부순다.
8
+ *
9
+ * pid는 재활용된다. 잠금을 쥔 채 죽은 프로세스의 번호를 남이 물려받으면 살아 있다고
10
+ * 읽혀서 아무도 파일을 못 고치게 된다. 그 자리를 여는 마지막 문이다.
11
+ */
12
+ const LOCK_HARD_STALE_MS = 60_000;
13
+ const LOCK_WAIT_MS = 2_000;
14
+ /** 대기 간격. 바퀴마다 배로 늘리되 이 값에서 멈춘다 */
15
+ const LOCK_BACKOFF_START_MS = 5;
16
+ const LOCK_BACKOFF_MAX_MS = 100;
17
+ /** 동기 대기. 잠금을 쓰는 쓰기 경로가 전부 동기라 여기서만 잠깐 멈춘다 */
18
+ function sleep(ms) {
19
+ Atomics.wait(new Int32Array(new SharedArrayBuffer(4)), 0, 0, ms);
20
+ }
21
+ function lockMtime(lockPath) {
22
+ try {
23
+ return statSync(lockPath).mtimeMs;
24
+ }
25
+ catch {
26
+ return null;
27
+ }
28
+ }
29
+ function readOwner(ownerPath) {
30
+ try {
31
+ const parsed = JSON.parse(readFileSync(ownerPath, 'utf-8'));
32
+ if (typeof parsed !== 'object' || parsed === null)
33
+ return null;
34
+ const { token, pid } = parsed;
35
+ if (typeof token !== 'string' || typeof pid !== 'number')
36
+ return null;
37
+ return { token, pid };
38
+ }
39
+ catch {
40
+ // 아직 안 쓰였거나(mkdir 직후) 옛 버전이 쓴 모양이다. 주인을 모르는 것으로 친다
41
+ return null;
42
+ }
43
+ }
44
+ /** 그 프로세스가 아직 도는가. 신호 0은 아무것도 안 보내고 존재만 묻는다 */
45
+ function alivePid(pid) {
46
+ try {
47
+ process.kill(pid, 0);
48
+ return true;
49
+ }
50
+ catch (e) {
51
+ // EPERM은 남의 것이라 못 건드리는 것뿐이다. 그래도 살아는 있다
52
+ return e.code === 'EPERM';
53
+ }
54
+ }
55
+ /**
56
+ * 파일 하나를 읽고 고쳐 쓰는 동안 다른 프로세스를 막는다.
57
+ *
58
+ * 워크트리 여럿이 같은 파일에 동시에 손대는 게 이 레포의 기본 흐름이다. 잠금 없이
59
+ * 읽고 고쳐 쓰면 나중에 쓴 쪽이 먼저 쓴 쪽의 항목을 덮는다.
60
+ *
61
+ * `mkdir`는 있으면 실패하니까 그 자체가 잠금이다. 쥔 채로 죽은 프로세스가 파일을 영영
62
+ * 못 고치게 만들면 안 되므로 버려진 잠금은 부순다. 부수는 순간에 둘이 겹치면 둘 다
63
+ * `mkdir`을 시도하고 한쪽만 성공한다 — 진 쪽은 다시 기다린다.
64
+ *
65
+ * **버려졌는지는 주인의 pid로 가른다.** 예전에는 잠금 디렉토리의 mtime만 봤는데,
66
+ * 잠금은 잡을 때 한 번 만들어지고 쥔 동안 mtime이 안 올라간다. 그래서 `fn()`이
67
+ * 5초를 넘기면 살아 있는 잠금이 버려진 것으로 보였다. 남이 부수고 들어와 둘이 나란히
68
+ * 읽고 고쳐 써서 늦게 쓴 쪽이 상대 항목을 덮었다. 파일은 rename이라 안 깨지고 항목만
69
+ * 조용히 사라진다.
70
+ *
71
+ * 쥔 동안 mtime을 주기적으로 올리는 방법은 여기서 안 통한다. `fn()`이 통째로 동기라
72
+ * 타이머가 돌 틈이 없다 — 갱신이 필요한 바로 그 순간에 이벤트 루프가 막혀 있다.
73
+ * 대신 주인이 살아 있는지를 직접 묻는다.
74
+ *
75
+ * 부수기 직전에 mtime과 주인 토큰을 다시 읽어 판정 때 본 값과 같은지 비교한다.
76
+ * 그래도 다시 읽기와 삭제 사이의 아주 좁은 틈은 남는다. 그래서 `fn`에는 `stillMine`을
77
+ * 준다. 쓰기 직전에 잠금이 아직 내 것인지 다시 확인할 수 있어야 한다.
78
+ *
79
+ * 기다리는 동안은 `Atomics.wait`로 스레드를 멈춘다. 경합이 길면 이벤트 루프가 최대
80
+ * 2초(`LOCK_WAIT_MS`) 동안 아무것도 못 한다. MCP 서버도 그동안 다른 요청을 못 받는다.
81
+ *
82
+ * @param lockPath 잠금으로 쓸 디렉토리 경로. 부모 디렉토리는 없으면 만든다
83
+ */
84
+ export function withFileLock(lockPath, fn, options = {}) {
85
+ mkdirSync(dirname(lockPath), { recursive: true });
86
+ // 잠금을 누가 쥐고 있는지 적어둔다. 버려진 잠금은 남이 부수고 자기 것을 새로 만드는데,
87
+ // 그때 원래 주인이 끝나며 무조건 지우면 **남의** 잠금을 푼다. 토큰이 내 것일 때만 지운다
88
+ const ownerPath = join(lockPath, 'owner');
89
+ const token = randomUUID();
90
+ const start = Date.now();
91
+ let waitMs = LOCK_BACKOFF_START_MS;
92
+ for (;;) {
93
+ let acquired = false;
94
+ try {
95
+ mkdirSync(lockPath);
96
+ acquired = true;
97
+ writeFileSync(ownerPath, JSON.stringify({ token, pid: process.pid }), 'utf-8');
98
+ break;
99
+ }
100
+ catch (e) {
101
+ // 디렉토리는 만들었는데 주인을 못 적었다. 그대로 두면 주인 없는 잠금이 남아
102
+ // 버려진 걸로 판정될 때까지 남들이 전부 기다리다 포기한다
103
+ if (acquired) {
104
+ rmSync(lockPath, { recursive: true, force: true });
105
+ throw e;
106
+ }
107
+ if (e.code !== 'EEXIST')
108
+ throw e;
109
+ const seenMtime = lockMtime(lockPath);
110
+ // 그 사이에 풀렸으면 다음 바퀴에서 잡는다
111
+ const heldFor = seenMtime === null ? 0 : Date.now() - seenMtime;
112
+ const owner = readOwner(ownerPath);
113
+ const holderAlive = owner !== null && alivePid(owner.pid);
114
+ const abandoned = heldFor > LOCK_HARD_STALE_MS || (!holderAlive && heldFor > LOCK_STALE_MS);
115
+ if (abandoned) {
116
+ // 판정과 삭제 사이에 남이 먼저 부수고 새로 잡았을 수 있다. 그 잠금까지 지우면
117
+ // 둘이 나란히 들어간다. 판정 때 본 mtime과 토큰이 다시 읽은 값과 같을 때만
118
+ // 지운다. 다시 읽기와 삭제 사이의 틈은 쓰기 직전에 stillMine으로 한 번 더 확인해서 좁힌다
119
+ const same = lockMtime(lockPath) === seenMtime && readOwner(ownerPath)?.token === owner?.token;
120
+ if (same)
121
+ rmSync(lockPath, { recursive: true, force: true });
122
+ continue;
123
+ }
124
+ if (Date.now() - start > LOCK_WAIT_MS) {
125
+ throw new Error(options.busyMessage ?? `잠겨 있어서 못 고쳤어요: ${lockPath}`, {
126
+ cause: e,
127
+ });
128
+ }
129
+ // 바퀴마다 mkdir 실패와 stat이 붙는다. 간격을 배로 늘려 바퀴 수를 줄인다
130
+ sleep(waitMs);
131
+ waitMs = Math.min(waitMs * 2, LOCK_BACKOFF_MAX_MS);
132
+ }
133
+ }
134
+ const stillMine = () => readOwner(ownerPath)?.token === token;
135
+ try {
136
+ return fn({ stillMine });
137
+ }
138
+ finally {
139
+ if (stillMine())
140
+ rmSync(lockPath, { recursive: true, force: true });
141
+ }
142
+ }
143
+ //# sourceMappingURL=file-lock.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"file-lock.js","sourceRoot":"","sources":["../../../src/core/file-lock.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,40 @@
1
+ /** 배열이 아닌 객체인가. 저장 파일의 최상위 모양 검사에 쓴다 */
2
+ export declare function isPlainObject(value: unknown): value is Record<string, unknown>;
3
+ export interface WriteJsonOptions {
4
+ /** 새 파일의 권한. rename으로 갈아 끼우므로 기존 파일 권한은 이어지지 않는다 */
5
+ mode?: number;
6
+ }
7
+ /**
8
+ * JSON 파일을 통째로 바꿔 쓴다.
9
+ *
10
+ * 같은 디렉토리에 다 쓴 뒤 `rename`으로 갈아 끼운다. `writeFileSync`는 자르고 나서 쓰기
11
+ * 때문에 그 사이에 읽는 쪽이 반쯤 쓰인 JSON을 본다. `rename`은 같은 파일시스템 안에서
12
+ * 원자적이라 읽는 쪽은 항상 이전 내용이나 새 내용 중 하나를 온전히 본다.
13
+ *
14
+ * 임시 파일 이름에 pid와 uuid를 붙이는 건 프로세스 여럿이 같은 파일을 동시에 쓸 때
15
+ * 서로의 임시 파일을 덮지 않게 하려는 것이다.
16
+ */
17
+ export declare function writeJsonAtomic(path: string, data: unknown, options?: WriteJsonOptions): void;
18
+ export interface ReadJsonOptions {
19
+ /**
20
+ * 깨진 파일을 백업으로 옮길지. 기본값은 true다.
21
+ *
22
+ * 잠금 없이 읽는 자리에서는 끈다. 깨졌다고 본 뒤 옮기기 전에 다른 프로세스가 잠금
23
+ * 안에서 먼저 백업하고 새 파일을 써 둘 수 있다. 그때 옮기면 방금 쓴 정상 파일이
24
+ * 백업으로 밀려난다.
25
+ */
26
+ quarantine?: boolean;
27
+ }
28
+ /**
29
+ * JSON 파일을 읽는다. 없으면 `undefined`다.
30
+ *
31
+ * 파싱이 안 되거나 `isValid`를 통과 못 하면 그 파일을 `<path>.corrupt-<시각>-<난수>`로
32
+ * 옮기고 경고를 남긴 뒤 `undefined`를 돌려준다. 예전에는 빈 값을 돌려주고 끝냈는데,
33
+ * 다음 쓰기가 그 빈 값으로 파일을 덮어서 쌓인 기록이 흔적 없이 사라졌다. 옮겨두면
34
+ * 사람이 고쳐서 되살릴 수 있다. `quarantine: false`면 옮기지 않고 `undefined`만 돌려준다.
35
+ *
36
+ * 파싱 말고 읽기 자체가 실패한 경우(권한 등)는 그대로 던진다. 그건 파일이 깨진 게
37
+ * 아니라서 옮기면 안 된다.
38
+ */
39
+ export declare function readJsonOrQuarantine(path: string, isValid?: (value: unknown) => boolean, options?: ReadJsonOptions): unknown;
40
+ //# sourceMappingURL=json-file.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"json-file.d.ts","sourceRoot":"","sources":["../../../src/core/json-file.ts"],"names":[],"mappings":"AAYA,wCAAwC;AACxC,wBAAgB,aAAa,CAAC,KAAK,EAAE,OAAO,GAAG,KAAK,IAAI,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAE9E;AAED,MAAM,WAAW,gBAAgB;IAC/B,oDAAoD;IACpD,IAAI,CAAC,EAAE,MAAM,CAAC;CACf;AAED;;;;;;;;;GASG;AACH,wBAAgB,eAAe,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,OAAO,EAAE,OAAO,GAAE,gBAAqB,GAAG,IAAI,CAcjG;AAED,MAAM,WAAW,eAAe;IAC9B;;;;;;OAMG;IACH,UAAU,CAAC,EAAE,OAAO,CAAC;CACtB;AAED;;;;;;;;;;GAUG;AACH,wBAAgB,oBAAoB,CAClC,IAAI,EAAE,MAAM,EACZ,OAAO,GAAE,CAAC,KAAK,EAAE,OAAO,KAAK,OAAoB,EACjD,OAAO,GAAE,eAAoB,GAC5B,OAAO,CA+BT"}