@tienne/gestalt 0.84.1 → 0.85.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (206) 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 +1 -1
  9. package/dist/plugin/skills/dispatch/SKILL.md +14 -2
  10. package/dist/plugin/skills/execute/SKILL.md +219 -52
  11. package/dist/plugin/skills/interview/SKILL.md +15 -2
  12. package/dist/plugin/skills/review/SKILL.md +29 -5
  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/interview/engine.d.ts +1 -1
  94. package/dist/src/interview/engine.d.ts.map +1 -1
  95. package/dist/src/interview/engine.js +3 -3
  96. package/dist/src/interview/engine.js.map +1 -1
  97. package/dist/src/interview/passthrough-engine.d.ts +1 -1
  98. package/dist/src/interview/passthrough-engine.d.ts.map +1 -1
  99. package/dist/src/interview/passthrough-engine.js +20 -3
  100. package/dist/src/interview/passthrough-engine.js.map +1 -1
  101. package/dist/src/interview/repository.d.ts +8 -0
  102. package/dist/src/interview/repository.d.ts.map +1 -1
  103. package/dist/src/interview/repository.js +16 -1
  104. package/dist/src/interview/repository.js.map +1 -1
  105. package/dist/src/interview/session.d.ts +15 -2
  106. package/dist/src/interview/session.d.ts.map +1 -1
  107. package/dist/src/interview/session.js +67 -23
  108. package/dist/src/interview/session.js.map +1 -1
  109. package/dist/src/knowledge-base/embedding.d.ts +6 -1
  110. package/dist/src/knowledge-base/embedding.d.ts.map +1 -1
  111. package/dist/src/knowledge-base/embedding.js +19 -6
  112. package/dist/src/knowledge-base/embedding.js.map +1 -1
  113. package/dist/src/local-pr/registry.d.ts +1 -21
  114. package/dist/src/local-pr/registry.d.ts.map +1 -1
  115. package/dist/src/local-pr/registry.js +7 -113
  116. package/dist/src/local-pr/registry.js.map +1 -1
  117. package/dist/src/mcp/input-guard.d.ts +17 -0
  118. package/dist/src/mcp/input-guard.d.ts.map +1 -1
  119. package/dist/src/mcp/input-guard.js +1 -1
  120. package/dist/src/mcp/input-guard.js.map +1 -1
  121. package/dist/src/mcp/schemas.d.ts +62 -7
  122. package/dist/src/mcp/schemas.d.ts.map +1 -1
  123. package/dist/src/mcp/schemas.js +28 -1
  124. package/dist/src/mcp/schemas.js.map +1 -1
  125. package/dist/src/mcp/server.d.ts.map +1 -1
  126. package/dist/src/mcp/server.js +26 -40
  127. package/dist/src/mcp/server.js.map +1 -1
  128. package/dist/src/mcp/tools/execute/evaluate.d.ts.map +1 -1
  129. package/dist/src/mcp/tools/execute/evaluate.js +15 -9
  130. package/dist/src/mcp/tools/execute/evaluate.js.map +1 -1
  131. package/dist/src/mcp/tools/execute/evolve.d.ts +1 -0
  132. package/dist/src/mcp/tools/execute/evolve.d.ts.map +1 -1
  133. package/dist/src/mcp/tools/execute/evolve.js +102 -37
  134. package/dist/src/mcp/tools/execute/evolve.js.map +1 -1
  135. package/dist/src/mcp/tools/execute/execution.d.ts.map +1 -1
  136. package/dist/src/mcp/tools/execute/execution.js +66 -7
  137. package/dist/src/mcp/tools/execute/execution.js.map +1 -1
  138. package/dist/src/mcp/tools/execute/planning.d.ts.map +1 -1
  139. package/dist/src/mcp/tools/execute/planning.js +34 -2
  140. package/dist/src/mcp/tools/execute/planning.js.map +1 -1
  141. package/dist/src/mcp/tools/execute/roles.d.ts.map +1 -1
  142. package/dist/src/mcp/tools/execute/roles.js +13 -5
  143. package/dist/src/mcp/tools/execute/roles.js.map +1 -1
  144. package/dist/src/mcp/tools/execute/utility.d.ts.map +1 -1
  145. package/dist/src/mcp/tools/execute/utility.js +26 -0
  146. package/dist/src/mcp/tools/execute/utility.js.map +1 -1
  147. package/dist/src/mcp/tools/execute/utils.d.ts +1 -0
  148. package/dist/src/mcp/tools/execute/utils.d.ts.map +1 -1
  149. package/dist/src/mcp/tools/execute/utils.js +15 -0
  150. package/dist/src/mcp/tools/execute/utils.js.map +1 -1
  151. package/dist/src/mcp/tools/execute-passthrough.d.ts.map +1 -1
  152. package/dist/src/mcp/tools/execute-passthrough.js +21 -1
  153. package/dist/src/mcp/tools/execute-passthrough.js.map +1 -1
  154. package/dist/src/mcp/tools/interview-passthrough.d.ts +2 -1
  155. package/dist/src/mcp/tools/interview-passthrough.d.ts.map +1 -1
  156. package/dist/src/mcp/tools/interview-passthrough.js +4 -3
  157. package/dist/src/mcp/tools/interview-passthrough.js.map +1 -1
  158. package/dist/src/mcp/tools/interview.d.ts.map +1 -1
  159. package/dist/src/mcp/tools/interview.js +2 -1
  160. package/dist/src/mcp/tools/interview.js.map +1 -1
  161. package/dist/src/mcp/tools/review-passthrough.js +15 -19
  162. package/dist/src/mcp/tools/review-passthrough.js.map +1 -1
  163. package/dist/src/mcp/tools/spec-passthrough.d.ts.map +1 -1
  164. package/dist/src/mcp/tools/spec-passthrough.js +16 -8
  165. package/dist/src/mcp/tools/spec-passthrough.js.map +1 -1
  166. package/dist/src/mcp/tools/status.d.ts.map +1 -1
  167. package/dist/src/mcp/tools/status.js +4 -0
  168. package/dist/src/mcp/tools/status.js.map +1 -1
  169. package/dist/src/memory/memory-context-injector.d.ts +22 -8
  170. package/dist/src/memory/memory-context-injector.d.ts.map +1 -1
  171. package/dist/src/memory/memory-context-injector.js +85 -13
  172. package/dist/src/memory/memory-context-injector.js.map +1 -1
  173. package/dist/src/memory/memory-merge.d.ts +19 -0
  174. package/dist/src/memory/memory-merge.d.ts.map +1 -0
  175. package/dist/src/memory/memory-merge.js +120 -0
  176. package/dist/src/memory/memory-merge.js.map +1 -0
  177. package/dist/src/memory/project-memory-store.d.ts +15 -11
  178. package/dist/src/memory/project-memory-store.d.ts.map +1 -1
  179. package/dist/src/memory/project-memory-store.js +97 -120
  180. package/dist/src/memory/project-memory-store.js.map +1 -1
  181. package/dist/src/memory/semantic-search.d.ts +4 -1
  182. package/dist/src/memory/semantic-search.d.ts.map +1 -1
  183. package/dist/src/memory/semantic-search.js +66 -19
  184. package/dist/src/memory/semantic-search.js.map +1 -1
  185. package/dist/src/resilience/lateral.d.ts +8 -1
  186. package/dist/src/resilience/lateral.d.ts.map +1 -1
  187. package/dist/src/resilience/lateral.js +52 -4
  188. package/dist/src/resilience/lateral.js.map +1 -1
  189. package/package.json +1 -1
  190. package/plugin/.codex-plugin/plugin.json +1 -1
  191. package/plugin/.mcp.json +1 -1
  192. package/plugin/mcp.json +1 -1
  193. package/plugin/skills/dispatch/SKILL.md +14 -2
  194. package/plugin/skills/execute/SKILL.md +219 -52
  195. package/plugin/skills/interview/SKILL.md +15 -2
  196. package/plugin/skills/review/SKILL.md +29 -5
  197. package/plugin/skills/solve/SKILL.md +20 -5
  198. package/plugin/skills/spec/SKILL.md +2 -0
  199. package/dist/src/interview/mini-interview-engine.d.ts +0 -33
  200. package/dist/src/interview/mini-interview-engine.d.ts.map +0 -1
  201. package/dist/src/interview/mini-interview-engine.js +0 -102
  202. package/dist/src/interview/mini-interview-engine.js.map +0 -1
  203. package/dist/src/memory/user-profile-store.d.ts +0 -13
  204. package/dist/src/memory/user-profile-store.d.ts.map +0 -1
  205. package/dist/src/memory/user-profile-store.js +0 -85
  206. package/dist/src/memory/user-profile-store.js.map +0 -1
@@ -1 +1 @@
1
- {"version":3,"file":"spec-passthrough.js","sourceRoot":"","sources":["../../../../src/mcp/tools/spec-passthrough.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"spec-passthrough.js","sourceRoot":"","sources":["../../../../src/mcp/tools/spec-passthrough.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"status.d.ts","sourceRoot":"","sources":["../../../../src/mcp/tools/status.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,2BAA2B,CAAC;AACjE,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AACjD,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,uBAAuB,CAAC;AACxD,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AA0B1D;;;;;;GAMG;AACH,wBAAgB,qBAAqB,CAAC,MAAM,CAAC,EAAE,aAAa;;;;;;;;;;;;;;;;;;;;EAyB3D;AAED,wBAAgB,YAAY,CAC1B,MAAM,EAAE,eAAe,EACvB,QAAQ,EAAE,WAAW,EACrB,UAAU,CAAC,EAAE,UAAU,EACvB,MAAM,CAAC,EAAE,aAAa,GACrB,MAAM,CAwIR"}
1
+ {"version":3,"file":"status.d.ts","sourceRoot":"","sources":["../../../../src/mcp/tools/status.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,2BAA2B,CAAC;AACjE,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AACjD,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,uBAAuB,CAAC;AACxD,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AA0B1D;;;;;;GAMG;AACH,wBAAgB,qBAAqB,CAAC,MAAM,CAAC,EAAE,aAAa;;;;;;;;;;;;;;;;;;;;EAyB3D;AAED,wBAAgB,YAAY,CAC1B,MAAM,EAAE,eAAe,EACvB,QAAQ,EAAE,WAAW,EACrB,UAAU,CAAC,EAAE,UAAU,EACvB,MAAM,CAAC,EAAE,aAAa,GACrB,MAAM,CAyIR"}
@@ -98,6 +98,7 @@ export function handleStatus(engine, rawInput, eventStore, config) {
98
98
  projectType: session.projectType,
99
99
  totalRounds: session.rounds.length,
100
100
  answeredRounds,
101
+ forcedComplete: session.forcedComplete === true,
101
102
  resolutionScore: session.resolutionScore
102
103
  ? {
103
104
  overall: session.resolutionScore.overall.toFixed(2),
@@ -181,6 +182,9 @@ function formatExecuteSessionBasic(session) {
181
182
  : '';
182
183
  summary = `세션 ${shortId}: completed —${scoreStr}${alignStr}`;
183
184
  }
185
+ else if (session.status === 'awaiting_human') {
186
+ summary = `세션 ${shortId}: 사람 판단 대기 — ges_execute gate_resolve로 답을 넘겨야 이어져요`;
187
+ }
184
188
  else if (totalTasks > 0) {
185
189
  const pct = Math.round((completedTasks / totalTasks) * 100);
186
190
  summary = `세션 ${shortId}: ${session.status} 단계, ${completedTasks}/${totalTasks} 태스크 완료 (${pct}%)`;
@@ -1 +1 @@
1
- {"version":3,"file":"status.js","sourceRoot":"","sources":["../../../../src/mcp/tools/status.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"status.js","sourceRoot":"","sources":["../../../../src/mcp/tools/status.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,wBAAwB,EAAE,MAAM,6BAA6B,CAAC;AACvE,OAAO,EAAE,UAAU,EAAE,qBAAqB,EAAE,iBAAiB,EAAE,MAAM,uBAAuB,CAAC;AAC7F,OAAO,EAAE,sBAAsB,EAAE,MAAM,wBAAwB,CAAC;AAEhE,2CAA2C;AAC3C,MAAM,eAAe,GAAG,EAAE,CAAC;AAE3B;;;;;;;;;GASG;AACH,SAAS,iBAAiB,CAAC,KAAe;IACxC,OAAO,KAAK,CAAC,KAAK,CAAC,CAAC,EAAE,eAAe,CAAC,CAAC,GAAG,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,KAAK,CAAC,OAAO,EAAE,GAAG,CAAC,CAAC,CAAC;AAC/E,CAAC;AAED,SAAS,KAAK,CAAC,KAAa,EAAE,GAAW;IACvC,OAAO,KAAK,CAAC,MAAM,IAAI,GAAG,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,GAAG,KAAK,CAAC,KAAK,CAAC,CAAC,EAAE,GAAG,GAAG,CAAC,CAAC,GAAG,CAAC;AACrE,CAAC;AAED;;;;;;GAMG;AACH,MAAM,UAAU,qBAAqB,CAAC,MAAsB;IAC1D,OAAO;QACL,cAAc,EAAE,MAAM,EAAE,cAAc,IAAI,IAAI;QAC9C,sBAAsB,EAAE,MAAM,EAAE,sBAAsB,IAAI,IAAI;QAC9D,mDAAmD;QACnD,iDAAiD;QACjD,gDAAgD;QAChD,0DAA0D;QAC1D,UAAU,EAAE,MAAM,EAAE,UAAU,IAAI,IAAI;QACtC,0DAA0D;QAC1D,kDAAkD;QAClD,sCAAsC;QACtC,WAAW,EAAE,MAAM,EAAE,WAAW,IAAI,EAAE;QACtC,wCAAwC;QACxC,0CAA0C;QAC1C,wDAAwD;QACxD,gBAAgB,EAAE,iBAAiB,CAAC,MAAM,EAAE,gBAAgB,IAAI,EAAE,CAAC;QACnE,+CAA+C;QAC/C,oBAAoB;QACpB,kBAAkB,EAAE,iBAAiB,CAAC,MAAM,EAAE,kBAAkB,IAAI,EAAE,CAAC;QACvE,gDAAgD;QAChD,uCAAuC;QACvC,oBAAoB,EAAE,CAAC,MAAM,EAAE,gBAAgB,IAAI,EAAE,CAAC,CAAC,MAAM;QAC7D,sBAAsB,EAAE,CAAC,MAAM,EAAE,kBAAkB,IAAI,EAAE,CAAC,CAAC,MAAM;KAClE,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,YAAY,CAC1B,MAAuB,EACvB,QAAqB,EACrB,UAAuB,EACvB,MAAsB;IAEtB,MAAM,YAAY,GAAG,qBAAqB,EAAE,CAAC;IAC7C,qDAAqD;IACrD,iDAAiD;IACjD,MAAM,OAAO,GAAG,iBAAiB,EAAE,CAAC;IACpC,MAAM,WAAW,GAAG;QAClB,OAAO,EAAE,OAAO,CAAC,OAAO;QACxB,MAAM,EAAE,OAAO,CAAC,MAAM;QACtB,MAAM,EAAE,UAAU,EAAE;QACpB,MAAM,EAAE,YAAY,EAAE,aAAa,IAAI,IAAI;QAC3C,eAAe,EAAE,YAAY,EAAE,eAAe,IAAI,KAAK;KACxD,CAAC;IACF,MAAM,gBAAgB,GAAG,qBAAqB,CAAC,MAAM,CAAC,CAAC;IAEvD,MAAM,WAAW,GAAG,QAAQ,CAAC,WAAW,IAAI,KAAK,CAAC;IAElD,MAAM,iBAAiB,GAAG,QAAQ,CAAC,SAAS;QAC1C,CAAC,CAAC,sBAAsB,CAAC,QAAQ,CAAC,SAAS,EAAE,WAAW,EAAE;YACtD,qBAAqB,EAAE,GAAG,EAAE,CAAC,MAAM,CAAC,YAAY,EAAE;YAClD,mBAAmB,EAAE,GAAG,EAAE,CACxB,UAAU,CAAC,CAAC,CAAC,IAAI,wBAAwB,CAAC,UAAU,CAAC,CAAC,cAAc,EAAE,CAAC,CAAC,CAAC,EAAE;SAC9E,CAAC;QACJ,CAAC,CAAC,IAAI,CAAC;IACT,IAAI,iBAAiB,IAAI,CAAC,iBAAiB,CAAC,EAAE,EAAE,CAAC;QAC/C,OAAO,IAAI,CAAC,SAAS,CAAC,EAAE,GAAG,gBAAgB,EAAE,KAAK,EAAE,iBAAiB,CAAC,KAAK,EAAE,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC;IAC1F,CAAC;IACD,MAAM,KAAK,GAAgB,EAAE,GAAG,QAAQ,EAAE,SAAS,EAAE,iBAAiB,EAAE,SAAS,EAAE,CAAC;IAEpF,IAAI,CAAC;QACH,IAAI,KAAK,CAAC,SAAS,EAAE,CAAC;YACpB,sBAAsB;YACtB,IAAI,CAAC;gBACH,MAAM,OAAO,GAAG,MAAM,CAAC,UAAU,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC;gBACnD,MAAM,cAAc,GAAG,OAAO,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC,MAAM,CAAC;gBAC3E,MAAM,QAAQ,GAAG,OAAO,CAAC,eAAe;oBACtC,CAAC,CAAC,WAAW,OAAO,CAAC,eAAe,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG;oBAC1D,CAAC,CAAC,EAAE,CAAC;gBACP,MAAM,gBAAgB,GAAG,MAAM,OAAO,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,KAAK,OAAO,CAAC,MAAM,MAAM,cAAc,IAAI,OAAO,CAAC,MAAM,CAAC,MAAM,UAAU,QAAQ,EAAE,CAAC;gBACjJ,OAAO,IAAI,CAAC,SAAS,CACnB;oBACE,WAAW;oBACX,GAAG,gBAAgB;oBACnB,IAAI,EAAE,WAAW;oBACjB,OAAO,EAAE,gBAAgB;oBACzB,OAAO,EAAE;wBACP,SAAS,EAAE,OAAO,CAAC,SAAS;wBAC5B,KAAK,EAAE,OAAO,CAAC,KAAK;wBACpB,MAAM,EAAE,OAAO,CAAC,MAAM;wBACtB,WAAW,EAAE,OAAO,CAAC,WAAW;wBAChC,WAAW,EAAE,OAAO,CAAC,MAAM,CAAC,MAAM;wBAClC,cAAc;wBACd,cAAc,EAAE,OAAO,CAAC,cAAc,KAAK,IAAI;wBAC/C,eAAe,EAAE,OAAO,CAAC,eAAe;4BACtC,CAAC,CAAC;gCACE,OAAO,EAAE,OAAO,CAAC,eAAe,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,CAAC;gCACnD,OAAO,EAAE,OAAO,CAAC,eAAe,CAAC,OAAO;gCACxC,cAAc,EAAE,OAAO,CAAC,eAAe,CAAC,cAAc,IAAI,EAAE;6BAC7D;4BACH,CAAC,CAAC,IAAI;wBACR,MAAM,EAAE,OAAO,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;4BACjC,WAAW,EAAE,CAAC,CAAC,WAAW;4BAC1B,YAAY,EAAE,CAAC,CAAC,YAAY;4BAC5B,cAAc,EAAE,CAAC,CAAC,cAAc,IAAI,EAAE;yBACvC,CAAC,CAAC;wBACH,SAAS,EAAE,OAAO,CAAC,SAAS;wBAC5B,SAAS,EAAE,OAAO,CAAC,SAAS;qBAC7B;iBACF,EACD,IAAI,EACJ,CAAC,CACF,CAAC;YACJ,CAAC;YAAC,MAAM,CAAC;gBACP,+DAA+D;gBAC/D,IAAI,UAAU,EAAE,CAAC;oBACf,MAAM,IAAI,GAAG,IAAI,wBAAwB,CAAC,UAAU,CAAC,CAAC;oBACtD,MAAM,WAAW,GAAG,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC;oBACtD,IAAI,WAAW,EAAE,CAAC;wBAChB,MAAM,SAAS,GAAG,yBAAyB,CAAC,WAAW,CAAC,CAAC;wBACzD,OAAO,IAAI,CAAC,SAAS,CACnB;4BACE,WAAW;4BACX,GAAG,gBAAgB;4BACnB,IAAI,EAAE,SAAS;4BACf,OAAO,EAAE,SAAS,CAAC,OAAO;4BAC1B,OAAO,EAAE,SAAS;yBACnB,EACD,IAAI,EACJ,CAAC,CACF,CAAC;oBACJ,CAAC;gBACH,CAAC;gBACD,MAAM,IAAI,KAAK,CAAC,sBAAsB,KAAK,CAAC,SAAS,EAAE,CAAC,CAAC;YAC3D,CAAC;QACH,CAAC;QAED,YAAY;QACZ,MAAM,iBAAiB,GACrB,WAAW,KAAK,WAAW,IAAI,WAAW,KAAK,KAAK;YAClD,CAAC,CAAC,MAAM,CAAC,YAAY,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;gBAChC,SAAS,EAAE,CAAC,CAAC,SAAS;gBACtB,KAAK,EAAE,CAAC,CAAC,KAAK;gBACd,MAAM,EAAE,CAAC,CAAC,MAAM;gBAChB,WAAW,EAAE,CAAC,CAAC,WAAW;gBAC1B,WAAW,EAAE,CAAC,CAAC,MAAM,CAAC,MAAM;gBAC5B,eAAe,EAAE,CAAC,CAAC,eAAe,EAAE,OAAO,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,KAAK;gBAC/D,iBAAiB,EAAE,CAAC,CAAC,CAAC,eAAe,EAAE,cAAc,EAAE,MAAM,IAAI,CAAC,CAAC,GAAG,CAAC;gBACvE,SAAS,EAAE,CAAC,CAAC,SAAS;aACvB,CAAC,CAAC;YACL,CAAC,CAAC,EAAE,CAAC;QAET,IAAI,eAAe,GAAmD,EAAE,CAAC;QACzE,IAAI,CAAC,WAAW,KAAK,SAAS,IAAI,WAAW,KAAK,KAAK,CAAC,IAAI,UAAU,EAAE,CAAC;YACvE,MAAM,IAAI,GAAG,IAAI,wBAAwB,CAAC,UAAU,CAAC,CAAC;YACtD,eAAe,GAAG,IAAI,CAAC,cAAc,EAAE,CAAC,GAAG,CAAC,yBAAyB,CAAC,CAAC;QACzE,CAAC;QAED,OAAO,IAAI,CAAC,SAAS,CACnB;YACE,WAAW;YACX,GAAG,gBAAgB;YACnB,iBAAiB;YACjB,eAAe;YACf,KAAK,EAAE,EAAE,SAAS,EAAE,iBAAiB,CAAC,MAAM,EAAE,OAAO,EAAE,eAAe,CAAC,MAAM,EAAE;SAChF,EACD,IAAI,EACJ,CAAC,CACF,CAAC;IACJ,CAAC;IAAC,OAAO,CAAC,EAAE,CAAC;QACX,OAAO,IAAI,CAAC,SAAS,CACnB;YACE,GAAG,gBAAgB;YACnB,KAAK,EAAE,CAAC,YAAY,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC;SAClD,EACD,IAAI,EACJ,CAAC,CACF,CAAC;IACJ,CAAC;AACH,CAAC;AAED,SAAS,yBAAyB,CAAC,OAAqD;IACtF,MAAM,UAAU,GAAG,OAAO,CAAC,aAAa,EAAE,WAAW,CAAC,MAAM,IAAI,CAAC,CAAC;IAClE,MAAM,cAAc,GAAG,OAAO,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,MAAM,KAAK,WAAW,CAAC,CAAC,MAAM,CAAC;IAE1F,IAAI,OAAe,CAAC;IACpB,MAAM,OAAO,GAAG,OAAO,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;IAC9C,IAAI,OAAO,CAAC,MAAM,KAAK,WAAW,EAAE,CAAC;QACnC,MAAM,QAAQ,GACZ,OAAO,CAAC,gBAAgB,EAAE,YAAY,IAAI,IAAI;YAC5C,CAAC,CAAC,UAAU,OAAO,CAAC,gBAAgB,CAAC,YAAY,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE;YAC9D,CAAC,CAAC,EAAE,CAAC;QACT,MAAM,QAAQ,GACZ,OAAO,CAAC,gBAAgB,EAAE,aAAa,IAAI,IAAI;YAC7C,CAAC,CAAC,eAAe,OAAO,CAAC,gBAAgB,CAAC,aAAa,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE;YACpE,CAAC,CAAC,EAAE,CAAC;QACT,OAAO,GAAG,MAAM,OAAO,gBAAgB,QAAQ,GAAG,QAAQ,EAAE,CAAC;IAC/D,CAAC;SAAM,IAAI,OAAO,CAAC,MAAM,KAAK,gBAAgB,EAAE,CAAC;QAC/C,OAAO,GAAG,MAAM,OAAO,oDAAoD,CAAC;IAC9E,CAAC;SAAM,IAAI,UAAU,GAAG,CAAC,EAAE,CAAC;QAC1B,MAAM,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,cAAc,GAAG,UAAU,CAAC,GAAG,GAAG,CAAC,CAAC;QAC5D,OAAO,GAAG,MAAM,OAAO,KAAK,OAAO,CAAC,MAAM,QAAQ,cAAc,IAAI,UAAU,YAAY,GAAG,IAAI,CAAC;IACpG,CAAC;SAAM,CAAC;QACN,OAAO,GAAG,MAAM,OAAO,KAAK,OAAO,CAAC,MAAM,gBAAgB,CAAC;IAC7D,CAAC;IAED,OAAO;QACL,SAAS,EAAE,OAAO,CAAC,SAAS;QAC5B,MAAM,EAAE,OAAO,CAAC,MAAM;QACtB,MAAM,EAAE,OAAO,CAAC,MAAM;QACtB,IAAI,EAAE,OAAO,CAAC,IAAI,CAAC,IAAI;QACvB,OAAO;QACP,YAAY,EAAE,UAAU,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,cAAc,IAAI,UAAU,EAAE,CAAC,CAAC,CAAC,IAAI;QACvE,eAAe,EAAE,OAAO,CAAC,gBAAgB,EAAE,YAAY,IAAI,IAAI;QAC/D,aAAa,EAAE,OAAO,CAAC,gBAAgB,EAAE,aAAa,IAAI,IAAI;QAC9D,iBAAiB,EAAE,OAAO,CAAC,iBAAiB;QAC5C,iBAAiB,EAAE,OAAO,CAAC,iBAAiB,IAAI,IAAI;QACpD,SAAS,EAAE,OAAO,CAAC,SAAS;QAC5B,SAAS,EAAE,OAAO,CAAC,SAAS;KAC7B,CAAC;AACJ,CAAC"}
@@ -1,11 +1,13 @@
1
- import type { ProjectMemory, ArchitectureDecision } from '../core/types.js';
1
+ import type { ProjectMemory, ArchitectureDecision, SpecHistoryEntry } from '../core/types.js';
2
+ interface SpecSummary {
3
+ goal: string;
4
+ specId: string;
5
+ createdAt: string;
6
+ sourceType: string;
7
+ }
2
8
  export interface MemoryContext {
3
- recentSpecs: Array<{
4
- goal: string;
5
- specId: string;
6
- createdAt: string;
7
- sourceType: string;
8
- }>;
9
+ recentSpecs: SpecSummary[];
10
+ relatedSpecs: SpecSummary[];
9
11
  architectureDecisions: ArchitectureDecision[];
10
12
  recentExecutions: Array<{
11
13
  specId: string;
@@ -15,12 +17,24 @@ export interface MemoryContext {
15
17
  }>;
16
18
  hasContext: boolean;
17
19
  }
18
- export declare function buildMemoryContext(memory: ProjectMemory): MemoryContext;
20
+ export type SpecSearchFn = (query: string, memory: ProjectMemory, topK: number, minScore: number) => Promise<SpecHistoryEntry[]>;
21
+ export interface RelatedSpecOptions {
22
+ search?: SpecSearchFn;
23
+ timeoutMs?: number;
24
+ }
25
+ /**
26
+ * 최근 창 밖으로 밀려난 스펙 중 주제와 비슷한 것을 찾는다.
27
+ * 임베딩 모델을 못 불러오거나 제한 시간을 넘기면 빈 배열을 돌려준다.
28
+ */
29
+ export declare function findRelatedSpecs(memory: ProjectMemory, topic: string, options?: RelatedSpecOptions): Promise<SpecSummary[]>;
30
+ export declare function buildMemoryContext(memory: ProjectMemory, relatedSpecs?: SpecSummary[]): MemoryContext;
19
31
  export declare function formatMemoryContextForPrompt(context: MemoryContext): string;
20
32
  export declare class MemoryContextInjector {
21
33
  private store;
22
34
  constructor(cwd?: string);
23
35
  getContext(): MemoryContext;
36
+ getContextForTopic(topic: string, options?: RelatedSpecOptions): Promise<MemoryContext>;
24
37
  formatForPrompt(): string;
25
38
  }
39
+ export {};
26
40
  //# sourceMappingURL=memory-context-injector.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"memory-context-injector.d.ts","sourceRoot":"","sources":["../../../src/memory/memory-context-injector.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,oBAAoB,EAAE,MAAM,kBAAkB,CAAC;AAG5E,MAAM,WAAW,aAAa;IAC5B,WAAW,EAAE,KAAK,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAC;QAAC,SAAS,EAAE,MAAM,CAAC;QAAC,UAAU,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IAC5F,qBAAqB,EAAE,oBAAoB,EAAE,CAAC;IAC9C,gBAAgB,EAAE,KAAK,CAAC;QACtB,MAAM,EAAE,MAAM,CAAC;QACf,cAAc,EAAE,MAAM,CAAC;QACvB,WAAW,EAAE,MAAM,CAAC;QACpB,WAAW,EAAE,MAAM,CAAC;KACrB,CAAC,CAAC;IACH,UAAU,EAAE,OAAO,CAAC;CACrB;AAED,wBAAgB,kBAAkB,CAAC,MAAM,EAAE,aAAa,GAAG,aAAa,CA0BvE;AAED,wBAAgB,4BAA4B,CAAC,OAAO,EAAE,aAAa,GAAG,MAAM,CA8B3E;AAED,qBAAa,qBAAqB;IAChC,OAAO,CAAC,KAAK,CAAqB;gBAEtB,GAAG,CAAC,EAAE,MAAM;IAIxB,UAAU,IAAI,aAAa;IAK3B,eAAe,IAAI,MAAM;CAI1B"}
1
+ {"version":3,"file":"memory-context-injector.d.ts","sourceRoot":"","sources":["../../../src/memory/memory-context-injector.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,oBAAoB,EAAE,gBAAgB,EAAE,MAAM,kBAAkB,CAAC;AAY9F,UAAU,WAAW;IACnB,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,MAAM,CAAC;IACf,SAAS,EAAE,MAAM,CAAC;IAClB,UAAU,EAAE,MAAM,CAAC;CACpB;AAED,MAAM,WAAW,aAAa;IAC5B,WAAW,EAAE,WAAW,EAAE,CAAC;IAC3B,YAAY,EAAE,WAAW,EAAE,CAAC;IAC5B,qBAAqB,EAAE,oBAAoB,EAAE,CAAC;IAC9C,gBAAgB,EAAE,KAAK,CAAC;QACtB,MAAM,EAAE,MAAM,CAAC;QACf,cAAc,EAAE,MAAM,CAAC;QACvB,WAAW,EAAE,MAAM,CAAC;QACpB,WAAW,EAAE,MAAM,CAAC;KACrB,CAAC,CAAC;IACH,UAAU,EAAE,OAAO,CAAC;CACrB;AAED,MAAM,MAAM,YAAY,GAAG,CACzB,KAAK,EAAE,MAAM,EACb,MAAM,EAAE,aAAa,EACrB,IAAI,EAAE,MAAM,EACZ,QAAQ,EAAE,MAAM,KACb,OAAO,CAAC,gBAAgB,EAAE,CAAC,CAAC;AAEjC,MAAM,WAAW,kBAAkB;IACjC,MAAM,CAAC,EAAE,YAAY,CAAC;IACtB,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAWD;;;GAGG;AACH,wBAAsB,gBAAgB,CACpC,MAAM,EAAE,aAAa,EACrB,KAAK,EAAE,MAAM,EACb,OAAO,GAAE,kBAAuB,GAC/B,OAAO,CAAC,WAAW,EAAE,CAAC,CA4BxB;AAED,wBAAgB,kBAAkB,CAChC,MAAM,EAAE,aAAa,EACrB,YAAY,GAAE,WAAW,EAAO,GAC/B,aAAa,CAuBf;AAiBD,wBAAgB,4BAA4B,CAAC,OAAO,EAAE,aAAa,GAAG,MAAM,CAsC3E;AAED,qBAAa,qBAAqB;IAChC,OAAO,CAAC,KAAK,CAAqB;gBAEtB,GAAG,CAAC,EAAE,MAAM;IAIxB,UAAU,IAAI,aAAa;IAKrB,kBAAkB,CAAC,KAAK,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,kBAAkB,GAAG,OAAO,CAAC,aAAa,CAAC;IAM7F,eAAe,IAAI,MAAM;CAI1B"}
@@ -1,27 +1,87 @@
1
+ import { log } from '../core/log.js';
1
2
  import { ProjectMemoryStore } from './project-memory-store.js';
2
- export function buildMemoryContext(memory) {
3
- const recentSpecs = memory.specHistory.slice(-5).map((s) => ({
4
- goal: s.goal,
5
- specId: s.specId,
6
- createdAt: s.createdAt,
7
- sourceType: s.sourceType,
8
- }));
3
+ const RECENT_SPEC_WINDOW = 5;
4
+ const RELATED_SPEC_TOP_K = 3;
5
+ // all-MiniLM-L6-v2에서 주제가 겹치는 문장은 0.5 위로, 무관한 문장은 0.2 아래로 갈린다
6
+ const RELATED_SPEC_MIN_SCORE = 0.4;
7
+ // 모델을 처음 받는 환경에서는 수십 초가 걸린다. 인터뷰 시작을 그만큼 붙잡지 않고
8
+ // 이번엔 최근 스펙만 넣는다. 로딩은 서버 프로세스 안에서 계속 돌고 끝난 뒤의 start부터 쓰인다
9
+ const RELATED_SPEC_TIMEOUT_MS = 3000;
10
+ function toSummary(s) {
11
+ return { goal: s.goal, specId: s.specId, createdAt: s.createdAt, sourceType: s.sourceType };
12
+ }
13
+ async function defaultSearch(...args) {
14
+ const { searchSimilarSpecs } = await import('./semantic-search.js');
15
+ return searchSimilarSpecs(...args);
16
+ }
17
+ /**
18
+ * 최근 창 밖으로 밀려난 스펙 중 주제와 비슷한 것을 찾는다.
19
+ * 임베딩 모델을 못 불러오거나 제한 시간을 넘기면 빈 배열을 돌려준다.
20
+ */
21
+ export async function findRelatedSpecs(memory, topic, options = {}) {
22
+ // 최근 창 안의 스펙은 recentSpecs로 이미 들어가므로 그 앞쪽만 뒤진다
23
+ const older = memory.specHistory.slice(0, -RECENT_SPEC_WINDOW);
24
+ if (older.length === 0)
25
+ return [];
26
+ const search = options.search ?? defaultSearch;
27
+ const timeoutMs = options.timeoutMs ?? RELATED_SPEC_TIMEOUT_MS;
28
+ let timer;
29
+ const timeout = new Promise((resolve) => {
30
+ timer = setTimeout(() => resolve(null), timeoutMs);
31
+ });
32
+ try {
33
+ const found = await Promise.race([
34
+ search(topic, { ...memory, specHistory: older }, RELATED_SPEC_TOP_K, RELATED_SPEC_MIN_SCORE),
35
+ timeout,
36
+ ]);
37
+ if (found === null) {
38
+ log(`memory: related spec search timed out after ${timeoutMs}ms, using recent specs only`);
39
+ return [];
40
+ }
41
+ return found.map(toSummary);
42
+ }
43
+ catch (e) {
44
+ log(`memory: related spec search unavailable (${e instanceof Error ? e.message : String(e)})`);
45
+ return [];
46
+ }
47
+ finally {
48
+ clearTimeout(timer);
49
+ }
50
+ }
51
+ export function buildMemoryContext(memory, relatedSpecs = []) {
52
+ const recentSpecs = memory.specHistory.slice(-RECENT_SPEC_WINDOW).map(toSummary);
9
53
  const recentExecutions = memory.executionHistory.slice(-3).map((e) => ({
10
54
  specId: e.specId,
11
- completedTasks: e.completedTasks.length,
12
- failedTasks: e.failedTasks.length,
55
+ completedTasks: Array.isArray(e.completedTasks) ? e.completedTasks.length : 0,
56
+ failedTasks: Array.isArray(e.failedTasks) ? e.failedTasks.length : 0,
13
57
  completedAt: e.completedAt,
14
58
  }));
15
59
  const hasContext = recentSpecs.length > 0 ||
60
+ relatedSpecs.length > 0 ||
16
61
  memory.architectureDecisions.length > 0 ||
17
62
  recentExecutions.length > 0;
18
63
  return {
19
64
  recentSpecs,
65
+ relatedSpecs,
20
66
  architectureDecisions: memory.architectureDecisions,
21
67
  recentExecutions,
22
68
  hasContext,
23
69
  };
24
70
  }
71
+ // memory.json은 팀이 커밋해 공유하고 merge driver가 남의 브랜치 항목을 그대로 합친다.
72
+ // 값 안의 개행이나 헤더가 시스템 프롬프트의 새 섹션으로 읽히지 않게 한 줄로 접는다
73
+ const MAX_FIELD_LENGTH = 300;
74
+ // 구조 검증은 merge driver에만 있어 fast-forward로 들어온 파일은 그대로 읽힌다.
75
+ // 문자열이 아닌 값이 와도 인터뷰 시작이 죽지 않게 여기서 문자열로 바꾼다.
76
+ // 먼저 잘라야 긴 공백 입력에서도 정규식 비용이 길이 상한 안에 머문다
77
+ function oneLine(value, maxLength = MAX_FIELD_LENGTH) {
78
+ return String(value ?? '')
79
+ .slice(0, maxLength * 2)
80
+ .replace(/\s+/g, ' ')
81
+ .replace(/^ ?#+ ?/, '')
82
+ .trim()
83
+ .slice(0, maxLength);
84
+ }
25
85
  export function formatMemoryContextForPrompt(context) {
26
86
  if (!context.hasContext)
27
87
  return '';
@@ -29,20 +89,27 @@ export function formatMemoryContextForPrompt(context) {
29
89
  if (context.recentSpecs.length > 0) {
30
90
  lines.push('\n### Recent Specs');
31
91
  for (const s of context.recentSpecs) {
32
- lines.push(`- [${s.createdAt.slice(0, 10)}] ${s.goal}`);
92
+ lines.push(`- [${oneLine(s.createdAt, 10)}] ${oneLine(s.goal)}`);
93
+ }
94
+ }
95
+ if (context.relatedSpecs.length > 0) {
96
+ lines.push('\n### Related Past Specs');
97
+ for (const s of context.relatedSpecs) {
98
+ lines.push(`- [${oneLine(s.createdAt, 10)}] ${oneLine(s.goal)}`);
33
99
  }
34
100
  }
35
101
  if (context.architectureDecisions.length > 0) {
36
102
  lines.push('\n### Architecture Decisions');
37
103
  for (const d of context.architectureDecisions) {
38
- const rationale = d.rationale ? ` (${d.rationale})` : '';
39
- lines.push(`- ${d.decision}${rationale}`);
104
+ const rationale = d.rationale ? ` (${oneLine(d.rationale)})` : '';
105
+ const outcome = d.outcome ? ` → Outcome: ${oneLine(d.outcome)}` : '';
106
+ lines.push(`- ${oneLine(d.decision)}${rationale}${outcome}`);
40
107
  }
41
108
  }
42
109
  if (context.recentExecutions.length > 0) {
43
110
  lines.push('\n### Recent Execution History');
44
111
  for (const e of context.recentExecutions) {
45
- lines.push(`- Spec ${e.specId.slice(0, 8)}: ${e.completedTasks} tasks completed, ${e.failedTasks} failed (${e.completedAt.slice(0, 10)})`);
112
+ lines.push(`- Spec ${oneLine(e.specId, 8)}: ${e.completedTasks} tasks completed, ${e.failedTasks} failed (${oneLine(e.completedAt, 10)})`);
46
113
  }
47
114
  }
48
115
  return lines.join('\n');
@@ -56,6 +123,11 @@ export class MemoryContextInjector {
56
123
  const memory = this.store.read();
57
124
  return buildMemoryContext(memory);
58
125
  }
126
+ async getContextForTopic(topic, options) {
127
+ const memory = this.store.read();
128
+ const related = await findRelatedSpecs(memory, topic, options);
129
+ return buildMemoryContext(memory, related);
130
+ }
59
131
  formatForPrompt() {
60
132
  const context = this.getContext();
61
133
  return formatMemoryContextForPrompt(context);
@@ -1 +1 @@
1
- {"version":3,"file":"memory-context-injector.js","sourceRoot":"","sources":["../../../src/memory/memory-context-injector.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"memory-context-injector.js","sourceRoot":"","sources":["../../../src/memory/memory-context-injector.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,19 @@
1
+ import type { ProjectMemory } from '../core/types.js';
2
+ /**
3
+ * local과 remote ProjectMemory를 합친다. specHistory, executionHistory,
4
+ * architectureDecisions는 쌓기만 하는 기록이라 공통 조상 없이 합집합으로 충분하다.
5
+ * compressedContexts는 같은 세션 요약을 덮어써 갱신하므로 더 최신 쪽을 고른다.
6
+ *
7
+ * - specHistory: specId 기준, executionHistory: executeSessionId 기준
8
+ * - architectureDecisions: decision 기준. 한쪽에만 outcome이 있으면 그쪽을 남긴다
9
+ * - compressedContexts: sessionId 기준. compressedAt이 더 최신인 쪽을 남긴다
10
+ * - 그 밖에 같은 키가 양쪽에 있으면 remote가 이긴다. lastUpdated는 더 최신 값
11
+ */
12
+ export declare function mergeMemory(local: ProjectMemory, remote: ProjectMemory): ProjectMemory;
13
+ /**
14
+ * git merge driver 진입점. `%A`(현재 브랜치) 자리에 합친 결과를 쓴다.
15
+ * 어느 쪽이든 JSON으로 못 읽거나 구조가 맞지 않으면 쓰기 전에 던진다 — 호출부가
16
+ * 0이 아닌 코드로 끝내야 git이 그 경로를 충돌로 남기고 사람에게 넘긴다.
17
+ */
18
+ export declare function runMemoryMergeDriver(oursPath: string, theirsPath: string): ProjectMemory;
19
+ //# sourceMappingURL=memory-merge.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"memory-merge.d.ts","sourceRoot":"","sources":["../../../src/memory/memory-merge.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EACV,aAAa,EAId,MAAM,kBAAkB,CAAC;AAO1B;;;;;;;;;GASG;AACH,wBAAgB,WAAW,CAAC,KAAK,EAAE,aAAa,EAAE,MAAM,EAAE,aAAa,GAAG,aAAa,CAgDtF;AAyED;;;;GAIG;AACH,wBAAgB,oBAAoB,CAAC,QAAQ,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,GAAG,aAAa,CAOxF"}
@@ -0,0 +1,120 @@
1
+ import { readFileSync, renameSync, writeFileSync } from 'node:fs';
2
+ import { z } from 'zod';
3
+ function unionBy(remote, local, key) {
4
+ const seen = new Set(remote.map(key));
5
+ return [...remote, ...local.filter((item) => !seen.has(key(item)))];
6
+ }
7
+ /**
8
+ * local과 remote ProjectMemory를 합친다. specHistory, executionHistory,
9
+ * architectureDecisions는 쌓기만 하는 기록이라 공통 조상 없이 합집합으로 충분하다.
10
+ * compressedContexts는 같은 세션 요약을 덮어써 갱신하므로 더 최신 쪽을 고른다.
11
+ *
12
+ * - specHistory: specId 기준, executionHistory: executeSessionId 기준
13
+ * - architectureDecisions: decision 기준. 한쪽에만 outcome이 있으면 그쪽을 남긴다
14
+ * - compressedContexts: sessionId 기준. compressedAt이 더 최신인 쪽을 남긴다
15
+ * - 그 밖에 같은 키가 양쪽에 있으면 remote가 이긴다. lastUpdated는 더 최신 값
16
+ */
17
+ export function mergeMemory(local, remote) {
18
+ const specHistory = unionBy(remote.specHistory, local.specHistory, (s) => s.specId);
19
+ const executionHistory = unionBy(remote.executionHistory, local.executionHistory, (e) => e.executeSessionId);
20
+ // addArchitectureDecision이 decision 문자열로 중복을 막으므로 여기서도 같은 키를 쓴다.
21
+ // timestamp까지 키에 넣으면 양쪽에서 같은 결정을 따로 기록했을 때 둘 다 남는다
22
+ const localDecisions = new Map(local.architectureDecisions.map((d) => [d.decision, d]));
23
+ const architectureDecisions = unionBy(remote.architectureDecisions, local.architectureDecisions, (d) => d.decision).map((d) => {
24
+ const other = localDecisions.get(d.decision);
25
+ return !d.outcome && other?.outcome ? other : d;
26
+ });
27
+ const localContexts = new Map((local.compressedContexts ?? []).map((c) => [c.sessionId, c]));
28
+ const compressedContexts = unionBy(remote.compressedContexts ?? [], local.compressedContexts ?? [], (c) => c.sessionId).map((c) => {
29
+ const other = localContexts.get(c.sessionId);
30
+ return other && other.compressedAt > c.compressedAt ? other : c;
31
+ });
32
+ // 스키마가 lastUpdated를 빠뜨린 파일도 받으므로 빈 값은 더 오래된 것으로 친다
33
+ const lastUpdated = (local.lastUpdated ?? '') > (remote.lastUpdated ?? '') ? local.lastUpdated : remote.lastUpdated;
34
+ return {
35
+ version: local.version,
36
+ repoRoot: local.repoRoot,
37
+ specHistory,
38
+ executionHistory,
39
+ architectureDecisions,
40
+ compressedContexts: compressedContexts.length > 0 ? compressedContexts : undefined,
41
+ lastUpdated,
42
+ };
43
+ }
44
+ // 합친 결과는 사람 검토 없이 커밋된다. 머지 키와 날짜 비교에 쓰는 필드, 그리고 인터뷰를 시작할 때
45
+ // 프롬프트에 싣는 필드는 여기서 형태를 확인한다. 그 밖의 필드는 손대지 않고 그대로 넘긴다
46
+ const memoryFileSchema = z
47
+ .object({
48
+ specHistory: z.array(z.object({ specId: z.string(), goal: z.string(), createdAt: z.string() }).passthrough()),
49
+ executionHistory: z.array(z
50
+ .object({
51
+ executeSessionId: z.string(),
52
+ specId: z.string(),
53
+ completedAt: z.string(),
54
+ completedTasks: z.array(z.unknown()),
55
+ failedTasks: z.array(z.unknown()),
56
+ })
57
+ .passthrough()),
58
+ architectureDecisions: z.array(z
59
+ .object({
60
+ decision: z.string(),
61
+ rationale: z.string().optional(),
62
+ outcome: z.string().optional(),
63
+ })
64
+ .passthrough()),
65
+ compressedContexts: z
66
+ .array(z.object({ sessionId: z.string(), compressedAt: z.string() }).passthrough())
67
+ .optional(),
68
+ lastUpdated: z.string().optional(),
69
+ })
70
+ .passthrough();
71
+ function shapeError(path, at) {
72
+ const where = at.length > 0 ? at.map(String).join('.') : '(root)';
73
+ return new Error(`${path}: unexpected memory.json shape at ${where}`);
74
+ }
75
+ // ProjectMemoryStore.load()의 v1 마이그레이션과 같은 일을 하되 두 군데가 다르다.
76
+ // timestamp를 실행 시각 대신 파일의 lastUpdated로 채워 같은 입력이면 같은 머지 결과가 나오게 한다.
77
+ // store는 배열이 아닌 필드를 빈 배열로 바꿔 읽지만 여기서는 거부한다. 합친 결과가 그대로 커밋되므로
78
+ // 망가진 값을 조용히 지우면 사람이 알아챌 자리가 없다. 드라이버는 git이 넘겨준 임시 파일을 읽으므로 store를 거치지 못한다
79
+ function readMemoryFile(path) {
80
+ let raw;
81
+ try {
82
+ raw = JSON.parse(readFileSync(path, 'utf-8'));
83
+ }
84
+ catch (e) {
85
+ throw new Error(`${path}: ${e instanceof Error ? e.message : String(e)}`, { cause: e });
86
+ }
87
+ // 마이그레이션이 필드를 건드리기 전에 막아야 원시 TypeError 대신 어디가 틀렸는지가 남는다
88
+ if (typeof raw !== 'object' || raw === null || Array.isArray(raw))
89
+ throw shapeError(path, []);
90
+ const parsed = raw;
91
+ if (parsed.architectureDecisions !== undefined && !Array.isArray(parsed.architectureDecisions)) {
92
+ throw shapeError(path, ['architectureDecisions']);
93
+ }
94
+ parsed.architectureDecisions = (parsed.architectureDecisions ?? []).map((item) => typeof item === 'string'
95
+ ? { decision: item, rationale: '', specId: '', timestamp: parsed.lastUpdated ?? '' }
96
+ : item);
97
+ // null은 채우지 않고 스키마에 걸리게 둔다. 빠진 필드만 빈 배열로 본다
98
+ if (parsed.specHistory === undefined)
99
+ parsed.specHistory = [];
100
+ if (parsed.executionHistory === undefined)
101
+ parsed.executionHistory = [];
102
+ const checked = memoryFileSchema.safeParse(parsed);
103
+ if (!checked.success)
104
+ throw shapeError(path, checked.error.issues[0]?.path ?? []);
105
+ return parsed;
106
+ }
107
+ /**
108
+ * git merge driver 진입점. `%A`(현재 브랜치) 자리에 합친 결과를 쓴다.
109
+ * 어느 쪽이든 JSON으로 못 읽거나 구조가 맞지 않으면 쓰기 전에 던진다 — 호출부가
110
+ * 0이 아닌 코드로 끝내야 git이 그 경로를 충돌로 남기고 사람에게 넘긴다.
111
+ */
112
+ export function runMemoryMergeDriver(oursPath, theirsPath) {
113
+ const merged = mergeMemory(readMemoryFile(oursPath), readMemoryFile(theirsPath));
114
+ // 쓰다 끊겨도 ours가 반쯤 쓰인 채 남지 않게 같은 디렉토리에 쓰고 바꿔 끼운다
115
+ const tmpPath = `${oursPath}.${process.pid}.tmp`;
116
+ writeFileSync(tmpPath, JSON.stringify(merged, null, 2), 'utf-8');
117
+ renameSync(tmpPath, oursPath);
118
+ return merged;
119
+ }
120
+ //# sourceMappingURL=memory-merge.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"memory-merge.js","sourceRoot":"","sources":["../../../src/memory/memory-merge.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,UAAU,EAAE,aAAa,EAAE,MAAM,SAAS,CAAC;AAClE,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAQxB,SAAS,OAAO,CAAI,MAAW,EAAE,KAAU,EAAE,GAAwB;IACnE,MAAM,IAAI,GAAG,IAAI,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC;IACtC,OAAO,CAAC,GAAG,MAAM,EAAE,GAAG,KAAK,CAAC,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC;AACtE,CAAC;AAED;;;;;;;;;GASG;AACH,MAAM,UAAU,WAAW,CAAC,KAAoB,EAAE,MAAqB;IACrE,MAAM,WAAW,GAAuB,OAAO,CAC7C,MAAM,CAAC,WAAW,EAClB,KAAK,CAAC,WAAW,EACjB,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,MAAM,CAChB,CAAC;IAEF,MAAM,gBAAgB,GAA4B,OAAO,CACvD,MAAM,CAAC,gBAAgB,EACvB,KAAK,CAAC,gBAAgB,EACtB,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,gBAAgB,CAC1B,CAAC;IAEF,iEAAiE;IACjE,mDAAmD;IACnD,MAAM,cAAc,GAAG,IAAI,GAAG,CAAC,KAAK,CAAC,qBAAqB,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,QAAQ,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;IACxF,MAAM,qBAAqB,GAA2B,OAAO,CAC3D,MAAM,CAAC,qBAAqB,EAC5B,KAAK,CAAC,qBAAqB,EAC3B,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,QAAQ,CAClB,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE;QACV,MAAM,KAAK,GAAG,cAAc,CAAC,GAAG,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC;QAC7C,OAAO,CAAC,CAAC,CAAC,OAAO,IAAI,KAAK,EAAE,OAAO,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;IAClD,CAAC,CAAC,CAAC;IAEH,MAAM,aAAa,GAAG,IAAI,GAAG,CAAC,CAAC,KAAK,CAAC,kBAAkB,IAAI,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,SAAS,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;IAC7F,MAAM,kBAAkB,GAAG,OAAO,CAChC,MAAM,CAAC,kBAAkB,IAAI,EAAE,EAC/B,KAAK,CAAC,kBAAkB,IAAI,EAAE,EAC9B,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,SAAS,CACnB,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE;QACV,MAAM,KAAK,GAAG,aAAa,CAAC,GAAG,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC;QAC7C,OAAO,KAAK,IAAI,KAAK,CAAC,YAAY,GAAG,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;IAClE,CAAC,CAAC,CAAC;IAEH,mDAAmD;IACnD,MAAM,WAAW,GACf,CAAC,KAAK,CAAC,WAAW,IAAI,EAAE,CAAC,GAAG,CAAC,MAAM,CAAC,WAAW,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,WAAW,CAAC,CAAC,CAAC,MAAM,CAAC,WAAW,CAAC;IAElG,OAAO;QACL,OAAO,EAAE,KAAK,CAAC,OAAO;QACtB,QAAQ,EAAE,KAAK,CAAC,QAAQ;QACxB,WAAW;QACX,gBAAgB;QAChB,qBAAqB;QACrB,kBAAkB,EAAE,kBAAkB,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,kBAAkB,CAAC,CAAC,CAAC,SAAS;QAClF,WAAW;KACZ,CAAC;AACJ,CAAC;AAED,2DAA2D;AAC3D,qDAAqD;AACrD,MAAM,gBAAgB,GAAG,CAAC;KACvB,MAAM,CAAC;IACN,WAAW,EAAE,CAAC,CAAC,KAAK,CAClB,CAAC,CAAC,MAAM,CAAC,EAAE,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE,EAAE,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE,EAAE,SAAS,EAAE,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC,WAAW,EAAE,CACxF;IACD,gBAAgB,EAAE,CAAC,CAAC,KAAK,CACvB,CAAC;SACE,MAAM,CAAC;QACN,gBAAgB,EAAE,CAAC,CAAC,MAAM,EAAE;QAC5B,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE;QAClB,WAAW,EAAE,CAAC,CAAC,MAAM,EAAE;QACvB,cAAc,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,OAAO,EAAE,CAAC;QACpC,WAAW,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,OAAO,EAAE,CAAC;KAClC,CAAC;SACD,WAAW,EAAE,CACjB;IACD,qBAAqB,EAAE,CAAC,CAAC,KAAK,CAC5B,CAAC;SACE,MAAM,CAAC;QACN,QAAQ,EAAE,CAAC,CAAC,MAAM,EAAE;QACpB,SAAS,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;QAChC,OAAO,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;KAC/B,CAAC;SACD,WAAW,EAAE,CACjB;IACD,kBAAkB,EAAE,CAAC;SAClB,KAAK,CAAC,CAAC,CAAC,MAAM,CAAC,EAAE,SAAS,EAAE,CAAC,CAAC,MAAM,EAAE,EAAE,YAAY,EAAE,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC,WAAW,EAAE,CAAC;SAClF,QAAQ,EAAE;IACb,WAAW,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;CACnC,CAAC;KACD,WAAW,EAAE,CAAC;AAEjB,SAAS,UAAU,CAAC,IAAY,EAAE,EAAiB;IACjD,MAAM,KAAK,GAAG,EAAE,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC;IAClE,OAAO,IAAI,KAAK,CAAC,GAAG,IAAI,qCAAqC,KAAK,EAAE,CAAC,CAAC;AACxE,CAAC;AAED,4DAA4D;AAC5D,oEAAoE;AACpE,6DAA6D;AAC7D,2EAA2E;AAC3E,SAAS,cAAc,CAAC,IAAY;IAClC,IAAI,GAAY,CAAC;IACjB,IAAI,CAAC;QACH,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC,CAAC;IAChD,CAAC;IAAC,OAAO,CAAC,EAAE,CAAC;QACX,MAAM,IAAI,KAAK,CAAC,GAAG,IAAI,KAAK,CAAC,YAAY,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,EAAE,KAAK,EAAE,CAAC,EAAE,CAAC,CAAC;IAC1F,CAAC;IACD,wDAAwD;IACxD,IAAI,OAAO,GAAG,KAAK,QAAQ,IAAI,GAAG,KAAK,IAAI,IAAI,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC;QAAE,MAAM,UAAU,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC;IAC9F,MAAM,MAAM,GAAG,GAAoB,CAAC;IACpC,IAAI,MAAM,CAAC,qBAAqB,KAAK,SAAS,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,qBAAqB,CAAC,EAAE,CAAC;QAC/F,MAAM,UAAU,CAAC,IAAI,EAAE,CAAC,uBAAuB,CAAC,CAAC,CAAC;IACpD,CAAC;IAED,MAAM,CAAC,qBAAqB,GAAG,CAAC,MAAM,CAAC,qBAAqB,IAAI,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAC/E,OAAO,IAAI,KAAK,QAAQ;QACtB,CAAC,CAAC,EAAE,QAAQ,EAAE,IAAI,EAAE,SAAS,EAAE,EAAE,EAAE,MAAM,EAAE,EAAE,EAAE,SAAS,EAAE,MAAM,CAAC,WAAW,IAAI,EAAE,EAAE;QACpF,CAAC,CAAC,IAAI,CACT,CAAC;IACF,4CAA4C;IAC5C,IAAI,MAAM,CAAC,WAAW,KAAK,SAAS;QAAE,MAAM,CAAC,WAAW,GAAG,EAAE,CAAC;IAC9D,IAAI,MAAM,CAAC,gBAAgB,KAAK,SAAS;QAAE,MAAM,CAAC,gBAAgB,GAAG,EAAE,CAAC;IAExE,MAAM,OAAO,GAAG,gBAAgB,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC;IACnD,IAAI,CAAC,OAAO,CAAC,OAAO;QAAE,MAAM,UAAU,CAAC,IAAI,EAAE,OAAO,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,IAAI,IAAI,EAAE,CAAC,CAAC;IAClF,OAAO,MAAM,CAAC;AAChB,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,oBAAoB,CAAC,QAAgB,EAAE,UAAkB;IACvE,MAAM,MAAM,GAAG,WAAW,CAAC,cAAc,CAAC,QAAQ,CAAC,EAAE,cAAc,CAAC,UAAU,CAAC,CAAC,CAAC;IACjF,gDAAgD;IAChD,MAAM,OAAO,GAAG,GAAG,QAAQ,IAAI,OAAO,CAAC,GAAG,MAAM,CAAC;IACjD,aAAa,CAAC,OAAO,EAAE,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC,EAAE,OAAO,CAAC,CAAC;IACjE,UAAU,CAAC,OAAO,EAAE,QAAQ,CAAC,CAAC;IAC9B,OAAO,MAAM,CAAC;AAChB,CAAC"}
@@ -3,22 +3,26 @@ export declare class ProjectMemoryStore {
3
3
  private memoryPath;
4
4
  private repoRoot;
5
5
  constructor(cwd?: string);
6
+ /**
7
+ * 메모리를 읽는다. 읽기 자체가 실패하면 빈 메모리를 돌려준다.
8
+ *
9
+ * 인터뷰에 맥락을 끼워 넣는 자리라 여기서 던지면 인터뷰가 멈춘다. 고쳐 쓰는 경로는
10
+ * 이 메서드 대신 `load()`를 직접 불러, 못 읽은 채로 빈 메모리를 덮어쓰지 않는다.
11
+ * 잠금 없이 읽으므로 깨진 파일을 옮기지 않는다. 옮기는 건 잠금을 쥔 `update()`만 한다.
12
+ */
6
13
  read(): ProjectMemory;
7
- private write;
14
+ private load;
15
+ /**
16
+ * 잠금을 쥔 채 읽고 고쳐 쓴다.
17
+ *
18
+ * 워크트리나 프로세스 여럿이 같은 메모리에 동시에 기록하면, 잠금 없이는 늦게 쓴 쪽이
19
+ * 먼저 쓴 쪽의 항목을 덮는다.
20
+ */
21
+ private update;
8
22
  addSpec(entry: SpecHistoryEntry): ProjectMemory;
9
23
  addExecution(record: MemoryExecutionRecord): ProjectMemory;
10
24
  addArchitectureDecision(decision: ArchitectureDecision): ProjectMemory;
11
25
  addCompressedContext(sessionId: string, summary: string): ProjectMemory;
12
- searchSimilarSpecs(query: string, topK?: number): Promise<SpecHistoryEntry[]>;
13
- /**
14
- * local과 remote ProjectMemory를 머지한다.
15
- *
16
- * - specHistory: specId 기준 dedupe (remote에 없는 local 항목 추가)
17
- * - executionHistory: executeSessionId 기준 dedupe (동일 방식)
18
- * - architectureDecisions: timestamp+decision 기준 dedupe
19
- * - 그 외 스칼라 필드: local 값 우선, lastUpdated는 최신값
20
- */
21
- mergeMemory(local: ProjectMemory, remote: ProjectMemory): ProjectMemory;
22
26
  getRepoRoot(): string;
23
27
  }
24
28
  //# sourceMappingURL=project-memory-store.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"project-memory-store.d.ts","sourceRoot":"","sources":["../../../src/memory/project-memory-store.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EACV,aAAa,EACb,gBAAgB,EAChB,qBAAqB,EACrB,oBAAoB,EACrB,MAAM,kBAAkB,CAAC;AA+B1B,qBAAa,kBAAkB;IAC7B,OAAO,CAAC,UAAU,CAAS;IAC3B,OAAO,CAAC,QAAQ,CAAS;gBAEb,GAAG,CAAC,EAAE,MAAM;IAKxB,IAAI,IAAI,aAAa;IA2BrB,OAAO,CAAC,KAAK;IASb,OAAO,CAAC,KAAK,EAAE,gBAAgB,GAAG,aAAa;IAW/C,YAAY,CAAC,MAAM,EAAE,qBAAqB,GAAG,aAAa;IAa1D,uBAAuB,CAAC,QAAQ,EAAE,oBAAoB,GAAG,aAAa;IAWtE,oBAAoB,CAAC,SAAS,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,aAAa;IAiBjE,kBAAkB,CAAC,KAAK,EAAE,MAAM,EAAE,IAAI,SAAI,GAAG,OAAO,CAAC,gBAAgB,EAAE,CAAC;IAM9E;;;;;;;OAOG;IACH,WAAW,CAAC,KAAK,EAAE,aAAa,EAAE,MAAM,EAAE,aAAa,GAAG,aAAa;IAkDvE,WAAW,IAAI,MAAM;CAGtB"}
1
+ {"version":3,"file":"project-memory-store.d.ts","sourceRoot":"","sources":["../../../src/memory/project-memory-store.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EACV,aAAa,EACb,gBAAgB,EAChB,qBAAqB,EACrB,oBAAoB,EACrB,MAAM,kBAAkB,CAAC;AA+B1B,qBAAa,kBAAkB;IAC7B,OAAO,CAAC,UAAU,CAAS;IAC3B,OAAO,CAAC,QAAQ,CAAS;gBAEb,GAAG,CAAC,EAAE,MAAM;IAKxB;;;;;;OAMG;IACH,IAAI,IAAI,aAAa;IASrB,OAAO,CAAC,IAAI;IA+BZ;;;;;OAKG;IACH,OAAO,CAAC,MAAM;IAiBd,OAAO,CAAC,KAAK,EAAE,gBAAgB,GAAG,aAAa;IAU/C,YAAY,CAAC,MAAM,EAAE,qBAAqB,GAAG,aAAa;IAY1D,uBAAuB,CAAC,QAAQ,EAAE,oBAAoB,GAAG,aAAa;IAUtE,oBAAoB,CAAC,SAAS,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,aAAa;IAgBvE,WAAW,IAAI,MAAM;CAGtB"}