@tienne/gestalt 0.1.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 (288) hide show
  1. package/CLAUDE.md +203 -0
  2. package/README.md +60 -0
  3. package/agents/closure-completer/AGENT.md +32 -0
  4. package/agents/continuity-judge/AGENT.md +40 -0
  5. package/agents/ground-mapper/AGENT.md +31 -0
  6. package/agents/proximity-worker/AGENT.md +33 -0
  7. package/agents/similarity-crystallizer/AGENT.md +34 -0
  8. package/dist/agents/closure-completer/AGENT.md +32 -0
  9. package/dist/agents/continuity-judge/AGENT.md +40 -0
  10. package/dist/agents/ground-mapper/AGENT.md +31 -0
  11. package/dist/agents/proximity-worker/AGENT.md +33 -0
  12. package/dist/agents/similarity-crystallizer/AGENT.md +34 -0
  13. package/dist/bin/gestalt.d.ts +3 -0
  14. package/dist/bin/gestalt.d.ts.map +1 -0
  15. package/dist/bin/gestalt.js +5 -0
  16. package/dist/bin/gestalt.js.map +1 -0
  17. package/dist/skills/execute/SKILL.md +84 -0
  18. package/dist/skills/interview/SKILL.md +82 -0
  19. package/dist/skills/seed/SKILL.md +92 -0
  20. package/dist/skills/spec/SKILL.md +92 -0
  21. package/dist/src/agent/figural-router.d.ts +48 -0
  22. package/dist/src/agent/figural-router.d.ts.map +1 -0
  23. package/dist/src/agent/figural-router.js +55 -0
  24. package/dist/src/agent/figural-router.js.map +1 -0
  25. package/dist/src/agent/parser.d.ts +3 -0
  26. package/dist/src/agent/parser.d.ts.map +1 -0
  27. package/dist/src/agent/parser.js +32 -0
  28. package/dist/src/agent/parser.js.map +1 -0
  29. package/dist/src/agent/prompt-resolver.d.ts +17 -0
  30. package/dist/src/agent/prompt-resolver.d.ts.map +1 -0
  31. package/dist/src/agent/prompt-resolver.js +31 -0
  32. package/dist/src/agent/prompt-resolver.js.map +1 -0
  33. package/dist/src/agent/registry.d.ts +9 -0
  34. package/dist/src/agent/registry.d.ts.map +1 -0
  35. package/dist/src/agent/registry.js +22 -0
  36. package/dist/src/agent/registry.js.map +1 -0
  37. package/dist/src/cli/commands/interview.d.ts +2 -0
  38. package/dist/src/cli/commands/interview.d.ts.map +1 -0
  39. package/dist/src/cli/commands/interview.js +67 -0
  40. package/dist/src/cli/commands/interview.js.map +1 -0
  41. package/dist/src/cli/commands/seed.d.ts +4 -0
  42. package/dist/src/cli/commands/seed.d.ts.map +1 -0
  43. package/dist/src/cli/commands/seed.js +34 -0
  44. package/dist/src/cli/commands/seed.js.map +1 -0
  45. package/dist/src/cli/commands/serve.d.ts +2 -0
  46. package/dist/src/cli/commands/serve.d.ts.map +1 -0
  47. package/dist/src/cli/commands/serve.js +5 -0
  48. package/dist/src/cli/commands/serve.js.map +1 -0
  49. package/dist/src/cli/commands/spec.d.ts +4 -0
  50. package/dist/src/cli/commands/spec.d.ts.map +1 -0
  51. package/dist/src/cli/commands/spec.js +34 -0
  52. package/dist/src/cli/commands/spec.js.map +1 -0
  53. package/dist/src/cli/commands/status.d.ts +2 -0
  54. package/dist/src/cli/commands/status.d.ts.map +1 -0
  55. package/dist/src/cli/commands/status.js +66 -0
  56. package/dist/src/cli/commands/status.js.map +1 -0
  57. package/dist/src/cli/index.d.ts +3 -0
  58. package/dist/src/cli/index.d.ts.map +1 -0
  59. package/dist/src/cli/index.js +39 -0
  60. package/dist/src/cli/index.js.map +1 -0
  61. package/dist/src/core/config.d.ts +36 -0
  62. package/dist/src/core/config.d.ts.map +1 -0
  63. package/dist/src/core/config.js +65 -0
  64. package/dist/src/core/config.js.map +1 -0
  65. package/dist/src/core/constants.d.ts +34 -0
  66. package/dist/src/core/constants.d.ts.map +1 -0
  67. package/dist/src/core/constants.js +68 -0
  68. package/dist/src/core/constants.js.map +1 -0
  69. package/dist/src/core/errors.d.ts +50 -0
  70. package/dist/src/core/errors.d.ts.map +1 -0
  71. package/dist/src/core/errors.js +99 -0
  72. package/dist/src/core/errors.js.map +1 -0
  73. package/dist/src/core/log.d.ts +5 -0
  74. package/dist/src/core/log.d.ts.map +1 -0
  75. package/dist/src/core/log.js +7 -0
  76. package/dist/src/core/log.js.map +1 -0
  77. package/dist/src/core/result.d.ts +20 -0
  78. package/dist/src/core/result.d.ts.map +1 -0
  79. package/dist/src/core/result.js +43 -0
  80. package/dist/src/core/result.js.map +1 -0
  81. package/dist/src/core/types.d.ts +289 -0
  82. package/dist/src/core/types.d.ts.map +1 -0
  83. package/dist/src/core/types.js +15 -0
  84. package/dist/src/core/types.js.map +1 -0
  85. package/dist/src/events/store.d.ts +22 -0
  86. package/dist/src/events/store.d.ts.map +1 -0
  87. package/dist/src/events/store.js +130 -0
  88. package/dist/src/events/store.js.map +1 -0
  89. package/dist/src/events/types.d.ts +33 -0
  90. package/dist/src/events/types.d.ts.map +1 -0
  91. package/dist/src/events/types.js +35 -0
  92. package/dist/src/events/types.js.map +1 -0
  93. package/dist/src/execute/dag-validator.d.ts +7 -0
  94. package/dist/src/execute/dag-validator.d.ts.map +1 -0
  95. package/dist/src/execute/dag-validator.js +141 -0
  96. package/dist/src/execute/dag-validator.js.map +1 -0
  97. package/dist/src/execute/drift-detector.d.ts +11 -0
  98. package/dist/src/execute/drift-detector.d.ts.map +1 -0
  99. package/dist/src/execute/drift-detector.js +111 -0
  100. package/dist/src/execute/drift-detector.js.map +1 -0
  101. package/dist/src/execute/impact-identifier.d.ts +12 -0
  102. package/dist/src/execute/impact-identifier.d.ts.map +1 -0
  103. package/dist/src/execute/impact-identifier.js +60 -0
  104. package/dist/src/execute/impact-identifier.js.map +1 -0
  105. package/dist/src/execute/passthrough-engine.d.ts +181 -0
  106. package/dist/src/execute/passthrough-engine.d.ts.map +1 -0
  107. package/dist/src/execute/passthrough-engine.js +795 -0
  108. package/dist/src/execute/passthrough-engine.js.map +1 -0
  109. package/dist/src/execute/prompts.d.ts +19 -0
  110. package/dist/src/execute/prompts.d.ts.map +1 -0
  111. package/dist/src/execute/prompts.js +505 -0
  112. package/dist/src/execute/prompts.js.map +1 -0
  113. package/dist/src/execute/repository.d.ts +30 -0
  114. package/dist/src/execute/repository.d.ts.map +1 -0
  115. package/dist/src/execute/repository.js +248 -0
  116. package/dist/src/execute/repository.js.map +1 -0
  117. package/dist/src/execute/session.d.ts +34 -0
  118. package/dist/src/execute/session.d.ts.map +1 -0
  119. package/dist/src/execute/session.js +273 -0
  120. package/dist/src/execute/session.js.map +1 -0
  121. package/dist/src/execute/spec-patch-applier.d.ts +13 -0
  122. package/dist/src/execute/spec-patch-applier.d.ts.map +1 -0
  123. package/dist/src/execute/spec-patch-applier.js +83 -0
  124. package/dist/src/execute/spec-patch-applier.js.map +1 -0
  125. package/dist/src/execute/spec-patch-validator.d.ts +20 -0
  126. package/dist/src/execute/spec-patch-validator.d.ts.map +1 -0
  127. package/dist/src/execute/spec-patch-validator.js +60 -0
  128. package/dist/src/execute/spec-patch-validator.js.map +1 -0
  129. package/dist/src/execute/termination-detector.d.ts +20 -0
  130. package/dist/src/execute/termination-detector.d.ts.map +1 -0
  131. package/dist/src/execute/termination-detector.js +77 -0
  132. package/dist/src/execute/termination-detector.js.map +1 -0
  133. package/dist/src/gestalt/analyzer.d.ts +18 -0
  134. package/dist/src/gestalt/analyzer.d.ts.map +1 -0
  135. package/dist/src/gestalt/analyzer.js +59 -0
  136. package/dist/src/gestalt/analyzer.js.map +1 -0
  137. package/dist/src/gestalt/principles.d.ts +21 -0
  138. package/dist/src/gestalt/principles.d.ts.map +1 -0
  139. package/dist/src/gestalt/principles.js +66 -0
  140. package/dist/src/gestalt/principles.js.map +1 -0
  141. package/dist/src/index.d.ts +22 -0
  142. package/dist/src/index.d.ts.map +1 -0
  143. package/dist/src/index.js +22 -0
  144. package/dist/src/index.js.map +1 -0
  145. package/dist/src/interview/ambiguity.d.ts +8 -0
  146. package/dist/src/interview/ambiguity.d.ts.map +1 -0
  147. package/dist/src/interview/ambiguity.js +69 -0
  148. package/dist/src/interview/ambiguity.js.map +1 -0
  149. package/dist/src/interview/brownfield.d.ts +7 -0
  150. package/dist/src/interview/brownfield.d.ts.map +1 -0
  151. package/dist/src/interview/brownfield.js +28 -0
  152. package/dist/src/interview/brownfield.js.map +1 -0
  153. package/dist/src/interview/engine.d.ts +31 -0
  154. package/dist/src/interview/engine.d.ts.map +1 -0
  155. package/dist/src/interview/engine.js +110 -0
  156. package/dist/src/interview/engine.js.map +1 -0
  157. package/dist/src/interview/passthrough-engine.d.ts +52 -0
  158. package/dist/src/interview/passthrough-engine.d.ts.map +1 -0
  159. package/dist/src/interview/passthrough-engine.js +174 -0
  160. package/dist/src/interview/passthrough-engine.js.map +1 -0
  161. package/dist/src/interview/questions.d.ts +12 -0
  162. package/dist/src/interview/questions.d.ts.map +1 -0
  163. package/dist/src/interview/questions.js +54 -0
  164. package/dist/src/interview/questions.js.map +1 -0
  165. package/dist/src/interview/repository.d.ts +25 -0
  166. package/dist/src/interview/repository.d.ts.map +1 -0
  167. package/dist/src/interview/repository.js +102 -0
  168. package/dist/src/interview/repository.js.map +1 -0
  169. package/dist/src/interview/session.d.ts +22 -0
  170. package/dist/src/interview/session.d.ts.map +1 -0
  171. package/dist/src/interview/session.js +120 -0
  172. package/dist/src/interview/session.js.map +1 -0
  173. package/dist/src/llm/adapter.d.ts +8 -0
  174. package/dist/src/llm/adapter.d.ts.map +1 -0
  175. package/dist/src/llm/adapter.js +42 -0
  176. package/dist/src/llm/adapter.js.map +1 -0
  177. package/dist/src/llm/openai-adapter.d.ts +8 -0
  178. package/dist/src/llm/openai-adapter.d.ts.map +1 -0
  179. package/dist/src/llm/openai-adapter.js +45 -0
  180. package/dist/src/llm/openai-adapter.js.map +1 -0
  181. package/dist/src/llm/prompts.d.ts +15 -0
  182. package/dist/src/llm/prompts.d.ts.map +1 -0
  183. package/dist/src/llm/prompts.js +83 -0
  184. package/dist/src/llm/prompts.js.map +1 -0
  185. package/dist/src/llm/types.d.ts +21 -0
  186. package/dist/src/llm/types.d.ts.map +1 -0
  187. package/dist/src/llm/types.js +2 -0
  188. package/dist/src/llm/types.js.map +1 -0
  189. package/dist/src/mcp/schemas.d.ts +799 -0
  190. package/dist/src/mcp/schemas.d.ts.map +1 -0
  191. package/dist/src/mcp/schemas.js +151 -0
  192. package/dist/src/mcp/schemas.js.map +1 -0
  193. package/dist/src/mcp/server.d.ts +13 -0
  194. package/dist/src/mcp/server.d.ts.map +1 -0
  195. package/dist/src/mcp/server.js +255 -0
  196. package/dist/src/mcp/server.js.map +1 -0
  197. package/dist/src/mcp/tools/execute-passthrough.d.ts +4 -0
  198. package/dist/src/mcp/tools/execute-passthrough.d.ts.map +1 -0
  199. package/dist/src/mcp/tools/execute-passthrough.js +349 -0
  200. package/dist/src/mcp/tools/execute-passthrough.js.map +1 -0
  201. package/dist/src/mcp/tools/index.d.ts +4 -0
  202. package/dist/src/mcp/tools/index.d.ts.map +1 -0
  203. package/dist/src/mcp/tools/index.js +4 -0
  204. package/dist/src/mcp/tools/index.js.map +1 -0
  205. package/dist/src/mcp/tools/interview-passthrough.d.ts +4 -0
  206. package/dist/src/mcp/tools/interview-passthrough.d.ts.map +1 -0
  207. package/dist/src/mcp/tools/interview-passthrough.js +96 -0
  208. package/dist/src/mcp/tools/interview-passthrough.js.map +1 -0
  209. package/dist/src/mcp/tools/interview.d.ts +4 -0
  210. package/dist/src/mcp/tools/interview.d.ts.map +1 -0
  211. package/dist/src/mcp/tools/interview.js +85 -0
  212. package/dist/src/mcp/tools/interview.js.map +1 -0
  213. package/dist/src/mcp/tools/seed-passthrough.d.ts +5 -0
  214. package/dist/src/mcp/tools/seed-passthrough.d.ts.map +1 -0
  215. package/dist/src/mcp/tools/seed-passthrough.js +29 -0
  216. package/dist/src/mcp/tools/seed-passthrough.js.map +1 -0
  217. package/dist/src/mcp/tools/seed.d.ts +5 -0
  218. package/dist/src/mcp/tools/seed.d.ts.map +1 -0
  219. package/dist/src/mcp/tools/seed.js +19 -0
  220. package/dist/src/mcp/tools/seed.js.map +1 -0
  221. package/dist/src/mcp/tools/spec-passthrough.d.ts +5 -0
  222. package/dist/src/mcp/tools/spec-passthrough.d.ts.map +1 -0
  223. package/dist/src/mcp/tools/spec-passthrough.js +29 -0
  224. package/dist/src/mcp/tools/spec-passthrough.js.map +1 -0
  225. package/dist/src/mcp/tools/spec.d.ts +5 -0
  226. package/dist/src/mcp/tools/spec.d.ts.map +1 -0
  227. package/dist/src/mcp/tools/spec.js +19 -0
  228. package/dist/src/mcp/tools/spec.js.map +1 -0
  229. package/dist/src/mcp/tools/status.d.ts +4 -0
  230. package/dist/src/mcp/tools/status.d.ts.map +1 -0
  231. package/dist/src/mcp/tools/status.js +45 -0
  232. package/dist/src/mcp/tools/status.js.map +1 -0
  233. package/dist/src/registry/base-registry.d.ts +26 -0
  234. package/dist/src/registry/base-registry.d.ts.map +1 -0
  235. package/dist/src/registry/base-registry.js +82 -0
  236. package/dist/src/registry/base-registry.js.map +1 -0
  237. package/dist/src/seed/extractor.d.ts +15 -0
  238. package/dist/src/seed/extractor.d.ts.map +1 -0
  239. package/dist/src/seed/extractor.js +88 -0
  240. package/dist/src/seed/extractor.js.map +1 -0
  241. package/dist/src/seed/generator.d.ts +12 -0
  242. package/dist/src/seed/generator.d.ts.map +1 -0
  243. package/dist/src/seed/generator.js +66 -0
  244. package/dist/src/seed/generator.js.map +1 -0
  245. package/dist/src/seed/passthrough-generator.d.ts +31 -0
  246. package/dist/src/seed/passthrough-generator.d.ts.map +1 -0
  247. package/dist/src/seed/passthrough-generator.js +80 -0
  248. package/dist/src/seed/passthrough-generator.js.map +1 -0
  249. package/dist/src/seed/schema.d.ts +145 -0
  250. package/dist/src/seed/schema.d.ts.map +1 -0
  251. package/dist/src/seed/schema.js +37 -0
  252. package/dist/src/seed/schema.js.map +1 -0
  253. package/dist/src/skills/executor.d.ts +14 -0
  254. package/dist/src/skills/executor.d.ts.map +1 -0
  255. package/dist/src/skills/executor.js +17 -0
  256. package/dist/src/skills/executor.js.map +1 -0
  257. package/dist/src/skills/parser.d.ts +3 -0
  258. package/dist/src/skills/parser.d.ts.map +1 -0
  259. package/dist/src/skills/parser.js +37 -0
  260. package/dist/src/skills/parser.js.map +1 -0
  261. package/dist/src/skills/registry.d.ts +8 -0
  262. package/dist/src/skills/registry.d.ts.map +1 -0
  263. package/dist/src/skills/registry.js +19 -0
  264. package/dist/src/skills/registry.js.map +1 -0
  265. package/dist/src/skills/types.d.ts +19 -0
  266. package/dist/src/skills/types.d.ts.map +1 -0
  267. package/dist/src/skills/types.js +2 -0
  268. package/dist/src/skills/types.js.map +1 -0
  269. package/dist/src/spec/extractor.d.ts +15 -0
  270. package/dist/src/spec/extractor.d.ts.map +1 -0
  271. package/dist/src/spec/extractor.js +88 -0
  272. package/dist/src/spec/extractor.js.map +1 -0
  273. package/dist/src/spec/generator.d.ts +12 -0
  274. package/dist/src/spec/generator.d.ts.map +1 -0
  275. package/dist/src/spec/generator.js +66 -0
  276. package/dist/src/spec/generator.js.map +1 -0
  277. package/dist/src/spec/passthrough-generator.d.ts +34 -0
  278. package/dist/src/spec/passthrough-generator.d.ts.map +1 -0
  279. package/dist/src/spec/passthrough-generator.js +86 -0
  280. package/dist/src/spec/passthrough-generator.js.map +1 -0
  281. package/dist/src/spec/schema.d.ts +145 -0
  282. package/dist/src/spec/schema.d.ts.map +1 -0
  283. package/dist/src/spec/schema.js +37 -0
  284. package/dist/src/spec/schema.js.map +1 -0
  285. package/package.json +53 -0
  286. package/skills/execute/SKILL.md +84 -0
  287. package/skills/interview/SKILL.md +82 -0
  288. package/skills/spec/SKILL.md +92 -0
@@ -0,0 +1 @@
1
+ {"version":3,"file":"repository.d.ts","sourceRoot":"","sources":["../../../src/execute/repository.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,oBAAoB,CAAC;AACrD,OAAO,KAAK,EAEV,cAAc,EAUf,MAAM,kBAAkB,CAAC;AAG1B;;;GAGG;AACH,qBAAa,wBAAwB;IACvB,OAAO,CAAC,UAAU;gBAAV,UAAU,EAAE,UAAU;IAE1C;;OAEG;IACH,WAAW,CAAC,SAAS,EAAE,MAAM,GAAG,cAAc,GAAG,IAAI;IAOrD;;OAEG;IACH,IAAI,IAAI,MAAM,EAAE;IAIhB;;OAEG;IACH,cAAc,IAAI,cAAc,EAAE;IAUlC,OAAO,CAAC,UAAU;IA8BlB,OAAO,CAAC,UAAU;IAgMlB;;;OAGG;IACH,OAAO,CAAC,gBAAgB;CAgBzB"}
@@ -0,0 +1,248 @@
1
+ import { EventType } from '../events/types.js';
2
+ /**
3
+ * ExecuteSessionRepository — Event Replay 기반 ExecuteSession 재구성.
4
+ * 도메인 전용 Repository: aggregate_type='execute' 이벤트만 처리.
5
+ */
6
+ export class ExecuteSessionRepository {
7
+ eventStore;
8
+ constructor(eventStore) {
9
+ this.eventStore = eventStore;
10
+ }
11
+ /**
12
+ * 이벤트를 fold하여 ExecuteSession 상태를 완전히 복원한다.
13
+ */
14
+ reconstruct(sessionId) {
15
+ const events = this.eventStore.replay('execute', sessionId);
16
+ if (events.length === 0)
17
+ return null;
18
+ return this.foldEvents(sessionId, events);
19
+ }
20
+ /**
21
+ * 모든 Execute 세션 ID 목록을 반환한다.
22
+ */
23
+ list() {
24
+ return this.eventStore.listAggregates('execute');
25
+ }
26
+ /**
27
+ * 모든 Execute 세션을 재구성하여 반환한다.
28
+ */
29
+ reconstructAll() {
30
+ const ids = this.list();
31
+ const sessions = [];
32
+ for (const id of ids) {
33
+ const session = this.reconstruct(id);
34
+ if (session)
35
+ sessions.push(session);
36
+ }
37
+ return sessions;
38
+ }
39
+ foldEvents(sessionId, events) {
40
+ const firstEvent = events[0];
41
+ const startPayload = firstEvent.payload;
42
+ const session = {
43
+ sessionId,
44
+ specId: startPayload.specId ?? '',
45
+ spec: startPayload.spec ?? this.buildMinimalSpec(startPayload),
46
+ status: 'planning',
47
+ currentStep: 1,
48
+ planningSteps: [],
49
+ taskResults: [],
50
+ driftHistory: [],
51
+ evolutionHistory: [],
52
+ currentGeneration: 0,
53
+ createdAt: firstEvent.timestamp,
54
+ updatedAt: firstEvent.timestamp,
55
+ };
56
+ for (const event of events) {
57
+ this.applyEvent(session, event);
58
+ }
59
+ return session;
60
+ }
61
+ applyEvent(session, event) {
62
+ session.updatedAt = event.timestamp;
63
+ const payload = event.payload;
64
+ switch (event.eventType) {
65
+ case EventType.EXECUTE_SESSION_STARTED:
66
+ // 이미 초기 상태에서 처리됨
67
+ break;
68
+ case EventType.EXECUTE_PLANNING_STEP_COMPLETED: {
69
+ const stepResult = payload.stepResult;
70
+ if (stepResult) {
71
+ session.planningSteps.push(stepResult);
72
+ session.currentStep = session.planningSteps.length + 1;
73
+ }
74
+ break;
75
+ }
76
+ case EventType.EXECUTE_PLAN_COMPLETED: {
77
+ const executionPlan = payload.executionPlan;
78
+ if (executionPlan) {
79
+ session.executionPlan = executionPlan;
80
+ }
81
+ session.status = 'plan_complete';
82
+ break;
83
+ }
84
+ case EventType.EXECUTE_EXECUTION_STARTED:
85
+ session.status = 'executing';
86
+ break;
87
+ case EventType.EXECUTE_TASK_COMPLETED: {
88
+ const taskResult = {
89
+ taskId: payload.taskId,
90
+ status: payload.status,
91
+ output: payload.output ?? '',
92
+ artifacts: payload.artifacts ?? [],
93
+ };
94
+ // Replace if retry, otherwise push
95
+ const existingIdx = session.taskResults.findIndex((r) => r.taskId === taskResult.taskId);
96
+ if (existingIdx >= 0) {
97
+ session.taskResults[existingIdx] = taskResult;
98
+ }
99
+ else {
100
+ session.taskResults.push(taskResult);
101
+ }
102
+ break;
103
+ }
104
+ case EventType.EVALUATE_STRUCTURAL_STARTED:
105
+ session.evaluateStage = 'structural';
106
+ break;
107
+ case EventType.EVALUATE_STRUCTURAL_COMPLETED: {
108
+ const structuralResult = payload;
109
+ // 전체 StructuralResult는 이벤트에 포함되지 않을 수 있으므로 최소 복원
110
+ if (structuralResult) {
111
+ session.structuralResult = session.structuralResult ?? {
112
+ commands: (structuralResult.commands ?? []).map((c) => ({
113
+ name: c.name,
114
+ command: '',
115
+ exitCode: c.exitCode,
116
+ output: '',
117
+ })),
118
+ allPassed: structuralResult.allPassed ?? false,
119
+ };
120
+ }
121
+ break;
122
+ }
123
+ case EventType.EVALUATE_CONTEXTUAL_STARTED:
124
+ session.evaluateStage = 'contextual';
125
+ break;
126
+ case EventType.EVALUATE_CONTEXTUAL_COMPLETED:
127
+ break;
128
+ case EventType.EVALUATE_SHORT_CIRCUITED: {
129
+ session.evaluateStage = 'complete';
130
+ const shortCircuitResult = payload.structuralResult;
131
+ if (shortCircuitResult) {
132
+ session.structuralResult = shortCircuitResult;
133
+ }
134
+ break;
135
+ }
136
+ case EventType.EXECUTE_EVALUATION_COMPLETED: {
137
+ const evaluationResult = payload.evaluationResult;
138
+ if (evaluationResult) {
139
+ session.evaluationResult = evaluationResult;
140
+ session.evaluateStage = 'complete';
141
+ }
142
+ break;
143
+ }
144
+ case EventType.EXECUTE_SESSION_COMPLETED:
145
+ session.status = 'completed';
146
+ break;
147
+ case EventType.EXECUTE_SESSION_FAILED:
148
+ session.status = 'failed';
149
+ break;
150
+ case EventType.EXECUTE_DRIFT_MEASURED: {
151
+ const driftScore = payload;
152
+ if (driftScore?.taskId) {
153
+ session.driftHistory.push(driftScore);
154
+ }
155
+ break;
156
+ }
157
+ // ─── Evolution Loop ─────────────────────────────────────
158
+ case EventType.EVOLVE_STRUCTURAL_FIX_STARTED:
159
+ session.evolveStage = 'fix';
160
+ session.status = 'executing';
161
+ break;
162
+ case EventType.EVOLVE_STRUCTURAL_FIX_COMPLETED:
163
+ // Fix tasks recorded in event, no direct session state change beyond stage
164
+ break;
165
+ case EventType.EVOLVE_SPEC_PATCHED: {
166
+ const patchedSpec = payload.spec;
167
+ const delta = payload.delta;
168
+ const generation = payload.generation;
169
+ if (patchedSpec) {
170
+ session.spec = patchedSpec;
171
+ }
172
+ if (generation !== undefined) {
173
+ session.currentGeneration = generation;
174
+ }
175
+ session.evolveStage = 'patch';
176
+ // Record generation snapshot
177
+ if (delta && generation !== undefined) {
178
+ session.evolutionHistory.push({
179
+ generation: generation,
180
+ spec: session.spec,
181
+ evaluationScore: session.evaluationResult?.overallScore ?? 0,
182
+ goalAlignment: session.evaluationResult?.goalAlignment ?? 0,
183
+ delta,
184
+ });
185
+ }
186
+ break;
187
+ }
188
+ case EventType.EVOLVE_RE_EXECUTION_STARTED: {
189
+ session.evolveStage = 're_executing';
190
+ session.status = 'executing';
191
+ const reExecTaskIds = payload.taskIds;
192
+ if (reExecTaskIds) {
193
+ session.taskResults = session.taskResults.filter((r) => !reExecTaskIds.includes(r.taskId));
194
+ }
195
+ break;
196
+ }
197
+ case EventType.EVOLVE_TASK_COMPLETED: {
198
+ const evolveTaskResult = {
199
+ taskId: payload.taskId,
200
+ status: payload.status,
201
+ output: payload.output ?? '',
202
+ artifacts: payload.artifacts ?? [],
203
+ };
204
+ const evolveExistingIdx = session.taskResults.findIndex((r) => r.taskId === evolveTaskResult.taskId);
205
+ if (evolveExistingIdx >= 0) {
206
+ session.taskResults[evolveExistingIdx] = evolveTaskResult;
207
+ }
208
+ else {
209
+ session.taskResults.push(evolveTaskResult);
210
+ }
211
+ break;
212
+ }
213
+ case EventType.EVOLVE_TERMINATED: {
214
+ const terminationReason = payload.reason;
215
+ if (terminationReason) {
216
+ session.terminationReason = terminationReason;
217
+ session.status = terminationReason === 'success' ? 'completed' : 'failed';
218
+ session.evolveStage = undefined;
219
+ }
220
+ break;
221
+ }
222
+ // EXECUTE_PLAN_VALIDATED 등 — 세션 상태에 직접 영향 없음
223
+ default:
224
+ break;
225
+ }
226
+ }
227
+ /**
228
+ * 이전 payload 형식(spec 전체 없음)을 위한 최소 Spec 생성.
229
+ * 재구성은 되지만 일부 데이터가 불완전할 수 있음.
230
+ */
231
+ buildMinimalSpec(startPayload) {
232
+ return {
233
+ version: '1.0',
234
+ goal: startPayload.goal ?? '',
235
+ constraints: [],
236
+ acceptanceCriteria: [],
237
+ ontologySchema: { entities: [], relations: [] },
238
+ gestaltAnalysis: [],
239
+ metadata: {
240
+ specId: startPayload.specId ?? '',
241
+ interviewSessionId: '',
242
+ ambiguityScore: 0,
243
+ generatedAt: '',
244
+ },
245
+ };
246
+ }
247
+ }
248
+ //# sourceMappingURL=repository.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"repository.js","sourceRoot":"","sources":["../../../src/execute/repository.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,34 @@
1
+ import type { ExecuteSession, ExecutionPlan, PlanningStepResult, Spec, TaskExecutionResult, EvaluationResult, StructuralResult, DriftScore, SpecPatch, SpecDelta, FixTask, EvolutionGeneration, TerminationReason } from '../core/types.js';
2
+ import { EventStore } from '../events/store.js';
3
+ export declare class ExecuteSessionManager {
4
+ private eventStore;
5
+ private sessions;
6
+ constructor(eventStore: EventStore);
7
+ /**
8
+ * EventStore에서 기존 세션을 복원하여 메모리 Map에 로드한다.
9
+ * 서버 시작 시 한 번 호출.
10
+ */
11
+ loadFromStore(): void;
12
+ create(spec: Spec): ExecuteSession;
13
+ get(sessionId: string): ExecuteSession;
14
+ addPlanningStep(sessionId: string, stepResult: PlanningStepResult): void;
15
+ completePlan(sessionId: string, plan: ExecutionPlan): void;
16
+ startExecution(sessionId: string): void;
17
+ addTaskResult(sessionId: string, taskResult: TaskExecutionResult): void;
18
+ startStructuralEvaluation(sessionId: string): void;
19
+ completeStructuralStage(sessionId: string, structuralResult: StructuralResult): void;
20
+ startContextualEvaluation(sessionId: string): void;
21
+ shortCircuitEvaluation(sessionId: string, reason: string): void;
22
+ completeEvaluation(sessionId: string, evaluationResult: EvaluationResult): void;
23
+ addDriftScore(sessionId: string, driftScore: DriftScore): void;
24
+ startStructuralFix(sessionId: string): void;
25
+ completeStructuralFix(sessionId: string, fixTasks: FixTask[]): void;
26
+ patchSpec(sessionId: string, patch: SpecPatch, newSpec: Spec, delta: SpecDelta): void;
27
+ startReExecution(sessionId: string, taskIds: string[]): void;
28
+ addEvolveTaskResult(sessionId: string, taskResult: TaskExecutionResult): void;
29
+ recordEvolutionGeneration(sessionId: string, generation: EvolutionGeneration): void;
30
+ terminate(sessionId: string, reason: TerminationReason): void;
31
+ fail(sessionId: string, reason: string): void;
32
+ list(): ExecuteSession[];
33
+ }
34
+ //# sourceMappingURL=session.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"session.d.ts","sourceRoot":"","sources":["../../../src/execute/session.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EACV,cAAc,EACd,aAAa,EACb,kBAAkB,EAClB,IAAI,EACJ,mBAAmB,EACnB,gBAAgB,EAChB,gBAAgB,EAChB,UAAU,EACV,SAAS,EACT,SAAS,EACT,OAAO,EACP,mBAAmB,EACnB,iBAAiB,EAClB,MAAM,kBAAkB,CAAC;AAE1B,OAAO,EAAE,UAAU,EAAE,MAAM,oBAAoB,CAAC;AAIhD,qBAAa,qBAAqB;IAGpB,OAAO,CAAC,UAAU;IAF9B,OAAO,CAAC,QAAQ,CAAqC;gBAEjC,UAAU,EAAE,UAAU;IAE1C;;;OAGG;IACH,aAAa,IAAI,IAAI;IAQrB,MAAM,CAAC,IAAI,EAAE,IAAI,GAAG,cAAc;IA4BlC,GAAG,CAAC,SAAS,EAAE,MAAM,GAAG,cAAc;IAMtC,eAAe,CAAC,SAAS,EAAE,MAAM,EAAE,UAAU,EAAE,kBAAkB,GAAG,IAAI;IAaxE,YAAY,CAAC,SAAS,EAAE,MAAM,EAAE,IAAI,EAAE,aAAa,GAAG,IAAI;IAc1D,cAAc,CAAC,SAAS,EAAE,MAAM,GAAG,IAAI;IAWvC,aAAa,CAAC,SAAS,EAAE,MAAM,EAAE,UAAU,EAAE,mBAAmB,GAAG,IAAI;IAmBvE,yBAAyB,CAAC,SAAS,EAAE,MAAM,GAAG,IAAI;IAUlD,uBAAuB,CAAC,SAAS,EAAE,MAAM,EAAE,gBAAgB,EAAE,gBAAgB,GAAG,IAAI;IAWpF,yBAAyB,CAAC,SAAS,EAAE,MAAM,GAAG,IAAI;IAUlD,sBAAsB,CAAC,SAAS,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,IAAI;IA4B/D,kBAAkB,CAAC,SAAS,EAAE,MAAM,EAAE,gBAAgB,EAAE,gBAAgB,GAAG,IAAI;IAoB/E,aAAa,CAAC,SAAS,EAAE,MAAM,EAAE,UAAU,EAAE,UAAU,GAAG,IAAI;IAe9D,kBAAkB,CAAC,SAAS,EAAE,MAAM,GAAG,IAAI;IAY3C,qBAAqB,CAAC,SAAS,EAAE,MAAM,EAAE,QAAQ,EAAE,OAAO,EAAE,GAAG,IAAI;IAWnE,SAAS,CAAC,SAAS,EAAE,MAAM,EAAE,KAAK,EAAE,SAAS,EAAE,OAAO,EAAE,IAAI,EAAE,KAAK,EAAE,SAAS,GAAG,IAAI;IAerF,gBAAgB,CAAC,SAAS,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,GAAG,IAAI;IAc5D,mBAAmB,CAAC,SAAS,EAAE,MAAM,EAAE,UAAU,EAAE,mBAAmB,GAAG,IAAI;IAmB7E,yBAAyB,CAAC,SAAS,EAAE,MAAM,EAAE,UAAU,EAAE,mBAAmB,GAAG,IAAI;IAMnF,SAAS,CAAC,SAAS,EAAE,MAAM,EAAE,MAAM,EAAE,iBAAiB,GAAG,IAAI;IAe7D,IAAI,CAAC,SAAS,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,IAAI;IAU7C,IAAI,IAAI,cAAc,EAAE;CAKzB"}
@@ -0,0 +1,273 @@
1
+ import { randomUUID } from 'node:crypto';
2
+ import { ExecuteSessionNotFoundError } from '../core/errors.js';
3
+ import { EventType } from '../events/types.js';
4
+ import { ExecuteSessionRepository } from './repository.js';
5
+ export class ExecuteSessionManager {
6
+ eventStore;
7
+ sessions = new Map();
8
+ constructor(eventStore) {
9
+ this.eventStore = eventStore;
10
+ }
11
+ /**
12
+ * EventStore에서 기존 세션을 복원하여 메모리 Map에 로드한다.
13
+ * 서버 시작 시 한 번 호출.
14
+ */
15
+ loadFromStore() {
16
+ const repo = new ExecuteSessionRepository(this.eventStore);
17
+ const restored = repo.reconstructAll();
18
+ for (const session of restored) {
19
+ this.sessions.set(session.sessionId, session);
20
+ }
21
+ }
22
+ create(spec) {
23
+ const session = {
24
+ sessionId: randomUUID(),
25
+ specId: spec.metadata.specId,
26
+ spec,
27
+ status: 'planning',
28
+ currentStep: 1,
29
+ planningSteps: [],
30
+ taskResults: [],
31
+ driftHistory: [],
32
+ evolutionHistory: [],
33
+ currentGeneration: 0,
34
+ createdAt: new Date().toISOString(),
35
+ updatedAt: new Date().toISOString(),
36
+ };
37
+ this.sessions.set(session.sessionId, session);
38
+ this.eventStore.append('execute', session.sessionId, EventType.EXECUTE_SESSION_STARTED, {
39
+ specId: spec.metadata.specId,
40
+ goal: spec.goal,
41
+ acCount: spec.acceptanceCriteria.length,
42
+ spec,
43
+ });
44
+ return session;
45
+ }
46
+ get(sessionId) {
47
+ const session = this.sessions.get(sessionId);
48
+ if (!session)
49
+ throw new ExecuteSessionNotFoundError(sessionId);
50
+ return session;
51
+ }
52
+ addPlanningStep(sessionId, stepResult) {
53
+ const session = this.get(sessionId);
54
+ session.planningSteps.push(stepResult);
55
+ session.currentStep = session.planningSteps.length + 1;
56
+ session.updatedAt = new Date().toISOString();
57
+ this.eventStore.append('execute', sessionId, EventType.EXECUTE_PLANNING_STEP_COMPLETED, {
58
+ principle: stepResult.principle,
59
+ stepNumber: session.planningSteps.length,
60
+ stepResult,
61
+ });
62
+ }
63
+ completePlan(sessionId, plan) {
64
+ const session = this.get(sessionId);
65
+ session.executionPlan = plan;
66
+ session.status = 'plan_complete';
67
+ session.updatedAt = new Date().toISOString();
68
+ this.eventStore.append('execute', sessionId, EventType.EXECUTE_PLAN_COMPLETED, {
69
+ planId: plan.planId,
70
+ taskCount: plan.atomicTasks.length,
71
+ groupCount: plan.taskGroups.length,
72
+ executionPlan: plan,
73
+ });
74
+ }
75
+ startExecution(sessionId) {
76
+ const session = this.get(sessionId);
77
+ session.status = 'executing';
78
+ session.updatedAt = new Date().toISOString();
79
+ this.eventStore.append('execute', sessionId, EventType.EXECUTE_EXECUTION_STARTED, {
80
+ planId: session.executionPlan?.planId,
81
+ taskCount: session.executionPlan?.atomicTasks.length,
82
+ });
83
+ }
84
+ addTaskResult(sessionId, taskResult) {
85
+ const session = this.get(sessionId);
86
+ // Replace if already exists (retry case), otherwise push
87
+ const existingIdx = session.taskResults.findIndex((r) => r.taskId === taskResult.taskId);
88
+ if (existingIdx >= 0) {
89
+ session.taskResults[existingIdx] = taskResult;
90
+ }
91
+ else {
92
+ session.taskResults.push(taskResult);
93
+ }
94
+ session.updatedAt = new Date().toISOString();
95
+ this.eventStore.append('execute', sessionId, EventType.EXECUTE_TASK_COMPLETED, {
96
+ taskId: taskResult.taskId,
97
+ status: taskResult.status,
98
+ output: taskResult.output,
99
+ artifacts: taskResult.artifacts,
100
+ });
101
+ }
102
+ startStructuralEvaluation(sessionId) {
103
+ const session = this.get(sessionId);
104
+ session.evaluateStage = 'structural';
105
+ session.updatedAt = new Date().toISOString();
106
+ this.eventStore.append('execute', sessionId, EventType.EVALUATE_STRUCTURAL_STARTED, {
107
+ taskResultCount: session.taskResults.length,
108
+ });
109
+ }
110
+ completeStructuralStage(sessionId, structuralResult) {
111
+ const session = this.get(sessionId);
112
+ session.structuralResult = structuralResult;
113
+ session.updatedAt = new Date().toISOString();
114
+ this.eventStore.append('execute', sessionId, EventType.EVALUATE_STRUCTURAL_COMPLETED, {
115
+ allPassed: structuralResult.allPassed,
116
+ commands: structuralResult.commands.map((c) => ({ name: c.name, exitCode: c.exitCode })),
117
+ });
118
+ }
119
+ startContextualEvaluation(sessionId) {
120
+ const session = this.get(sessionId);
121
+ session.evaluateStage = 'contextual';
122
+ session.updatedAt = new Date().toISOString();
123
+ this.eventStore.append('execute', sessionId, EventType.EVALUATE_CONTEXTUAL_STARTED, {
124
+ structuralPassed: session.structuralResult?.allPassed ?? false,
125
+ });
126
+ }
127
+ shortCircuitEvaluation(sessionId, reason) {
128
+ const session = this.get(sessionId);
129
+ session.evaluateStage = 'complete';
130
+ session.status = 'completed';
131
+ session.evaluationResult = {
132
+ verifications: session.spec.acceptanceCriteria.map((_, i) => ({
133
+ acIndex: i,
134
+ satisfied: false,
135
+ evidence: 'Short-circuited due to structural failure',
136
+ gaps: [reason],
137
+ })),
138
+ overallScore: 0,
139
+ goalAlignment: 0,
140
+ recommendations: ['Fix structural issues before contextual evaluation'],
141
+ };
142
+ session.updatedAt = new Date().toISOString();
143
+ this.eventStore.append('execute', sessionId, EventType.EVALUATE_SHORT_CIRCUITED, {
144
+ reason,
145
+ structuralResult: session.structuralResult,
146
+ });
147
+ this.eventStore.append('execute', sessionId, EventType.EXECUTE_SESSION_COMPLETED, {
148
+ overallScore: 0,
149
+ shortCircuited: true,
150
+ });
151
+ }
152
+ completeEvaluation(sessionId, evaluationResult) {
153
+ const session = this.get(sessionId);
154
+ session.evaluationResult = evaluationResult;
155
+ session.evaluateStage = 'complete';
156
+ session.status = 'completed';
157
+ session.updatedAt = new Date().toISOString();
158
+ this.eventStore.append('execute', sessionId, EventType.EXECUTE_EVALUATION_COMPLETED, {
159
+ overallScore: evaluationResult.overallScore,
160
+ goalAlignment: evaluationResult.goalAlignment,
161
+ satisfiedCount: evaluationResult.verifications.filter((v) => v.satisfied).length,
162
+ totalCount: evaluationResult.verifications.length,
163
+ evaluationResult,
164
+ });
165
+ this.eventStore.append('execute', sessionId, EventType.EXECUTE_SESSION_COMPLETED, {
166
+ overallScore: evaluationResult.overallScore,
167
+ });
168
+ }
169
+ addDriftScore(sessionId, driftScore) {
170
+ const session = this.get(sessionId);
171
+ session.driftHistory.push(driftScore);
172
+ session.updatedAt = new Date().toISOString();
173
+ this.eventStore.append('execute', sessionId, EventType.EXECUTE_DRIFT_MEASURED, {
174
+ taskId: driftScore.taskId,
175
+ overall: driftScore.overall,
176
+ thresholdExceeded: driftScore.thresholdExceeded,
177
+ dimensions: driftScore.dimensions,
178
+ });
179
+ }
180
+ // ─── Evolution Loop Methods ─────────────────────────────────
181
+ startStructuralFix(sessionId) {
182
+ const session = this.get(sessionId);
183
+ session.evolveStage = 'fix';
184
+ session.status = 'executing';
185
+ session.updatedAt = new Date().toISOString();
186
+ this.eventStore.append('execute', sessionId, EventType.EVOLVE_STRUCTURAL_FIX_STARTED, {
187
+ generation: session.currentGeneration,
188
+ structuralResult: session.structuralResult,
189
+ });
190
+ }
191
+ completeStructuralFix(sessionId, fixTasks) {
192
+ const session = this.get(sessionId);
193
+ session.updatedAt = new Date().toISOString();
194
+ this.eventStore.append('execute', sessionId, EventType.EVOLVE_STRUCTURAL_FIX_COMPLETED, {
195
+ generation: session.currentGeneration,
196
+ fixCount: fixTasks.length,
197
+ fixTasks,
198
+ });
199
+ }
200
+ patchSpec(sessionId, patch, newSpec, delta) {
201
+ const session = this.get(sessionId);
202
+ session.currentGeneration++;
203
+ session.spec = newSpec;
204
+ session.evolveStage = 'patch';
205
+ session.updatedAt = new Date().toISOString();
206
+ this.eventStore.append('execute', sessionId, EventType.EVOLVE_SPEC_PATCHED, {
207
+ generation: session.currentGeneration,
208
+ patch,
209
+ spec: newSpec,
210
+ delta,
211
+ });
212
+ }
213
+ startReExecution(sessionId, taskIds) {
214
+ const session = this.get(sessionId);
215
+ session.evolveStage = 're_executing';
216
+ session.status = 'executing';
217
+ // Clear results for tasks being re-executed
218
+ session.taskResults = session.taskResults.filter((r) => !taskIds.includes(r.taskId));
219
+ session.updatedAt = new Date().toISOString();
220
+ this.eventStore.append('execute', sessionId, EventType.EVOLVE_RE_EXECUTION_STARTED, {
221
+ generation: session.currentGeneration,
222
+ taskIds,
223
+ });
224
+ }
225
+ addEvolveTaskResult(sessionId, taskResult) {
226
+ const session = this.get(sessionId);
227
+ const existingIdx = session.taskResults.findIndex((r) => r.taskId === taskResult.taskId);
228
+ if (existingIdx >= 0) {
229
+ session.taskResults[existingIdx] = taskResult;
230
+ }
231
+ else {
232
+ session.taskResults.push(taskResult);
233
+ }
234
+ session.updatedAt = new Date().toISOString();
235
+ this.eventStore.append('execute', sessionId, EventType.EVOLVE_TASK_COMPLETED, {
236
+ generation: session.currentGeneration,
237
+ taskId: taskResult.taskId,
238
+ status: taskResult.status,
239
+ output: taskResult.output,
240
+ artifacts: taskResult.artifacts,
241
+ });
242
+ }
243
+ recordEvolutionGeneration(sessionId, generation) {
244
+ const session = this.get(sessionId);
245
+ session.evolutionHistory.push(generation);
246
+ session.updatedAt = new Date().toISOString();
247
+ }
248
+ terminate(sessionId, reason) {
249
+ const session = this.get(sessionId);
250
+ session.terminationReason = reason;
251
+ session.status = reason === 'success' ? 'completed' : 'failed';
252
+ session.evolveStage = undefined;
253
+ session.updatedAt = new Date().toISOString();
254
+ this.eventStore.append('execute', sessionId, EventType.EVOLVE_TERMINATED, {
255
+ reason,
256
+ generation: session.currentGeneration,
257
+ scoreHistory: session.evolutionHistory.map((g) => g.evaluationScore),
258
+ evolutionHistory: session.evolutionHistory,
259
+ });
260
+ }
261
+ fail(sessionId, reason) {
262
+ const session = this.get(sessionId);
263
+ session.status = 'failed';
264
+ session.updatedAt = new Date().toISOString();
265
+ this.eventStore.append('execute', sessionId, EventType.EXECUTE_SESSION_FAILED, {
266
+ reason,
267
+ });
268
+ }
269
+ list() {
270
+ return Array.from(this.sessions.values()).sort((a, b) => b.createdAt.localeCompare(a.createdAt));
271
+ }
272
+ }
273
+ //# sourceMappingURL=session.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"session.js","sourceRoot":"","sources":["../../../src/execute/session.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,13 @@
1
+ import type { Spec, SpecPatch, SpecDelta } from '../core/types.js';
2
+ /**
3
+ * Spec Patch Applier — 검증 완료된 패치를 현재 Spec에 머지한다.
4
+ *
5
+ * 반환: { newSpec, delta }
6
+ * - newSpec: 패치 적용된 새 Spec (원본 불변)
7
+ * - delta: 변경 필드 목록 + Jaccard similarity
8
+ */
9
+ export declare function applySpecPatch(currentSpec: Spec, patch: SpecPatch, generation: number): {
10
+ newSpec: Spec;
11
+ delta: SpecDelta;
12
+ };
13
+ //# sourceMappingURL=spec-patch-applier.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"spec-patch-applier.d.ts","sourceRoot":"","sources":["../../../src/execute/spec-patch-applier.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,IAAI,EAAE,SAAS,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAC;AAEnE;;;;;;GAMG;AACH,wBAAgB,cAAc,CAC5B,WAAW,EAAE,IAAI,EACjB,KAAK,EAAE,SAAS,EAChB,UAAU,EAAE,MAAM,GACjB;IAAE,OAAO,EAAE,IAAI,CAAC;IAAC,KAAK,EAAE,SAAS,CAAA;CAAE,CA4CrC"}