@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,349 @@
1
+ export function handleExecutePassthrough(engine, input) {
2
+ switch (input.action) {
3
+ case 'start': {
4
+ if (!input.spec)
5
+ return formatError('spec is required for start action');
6
+ const result = engine.start(input.spec);
7
+ if (!result.ok)
8
+ return formatError(result.error.message);
9
+ const { session, executeContext } = result.value;
10
+ return JSON.stringify({
11
+ status: 'started',
12
+ sessionId: session.sessionId,
13
+ specId: session.specId,
14
+ executeContext,
15
+ message: `Execute session started. Use the executeContext.planningPrompt with executeContext.systemPrompt to generate the Figure-Ground classification.`,
16
+ }, null, 2);
17
+ }
18
+ case 'plan_step': {
19
+ if (!input.sessionId)
20
+ return formatError('sessionId is required for plan_step action');
21
+ if (!input.stepResult)
22
+ return formatError('stepResult is required for plan_step action');
23
+ const stepResult = buildStepResult(input.stepResult);
24
+ if (!stepResult)
25
+ return formatError('Invalid stepResult: missing required fields for the given principle');
26
+ const result = engine.planStep(input.sessionId, stepResult);
27
+ if (!result.ok)
28
+ return formatError(result.error.message);
29
+ const { session, executeContext, isLastStep } = result.value;
30
+ if (isLastStep) {
31
+ return JSON.stringify({
32
+ status: 'planning_complete',
33
+ sessionId: session.sessionId,
34
+ stepsCompleted: session.planningSteps.length,
35
+ isLastStep: true,
36
+ message: 'All planning steps completed. Call plan_complete to assemble the execution plan.',
37
+ }, null, 2);
38
+ }
39
+ return JSON.stringify({
40
+ status: 'planning',
41
+ sessionId: session.sessionId,
42
+ stepsCompleted: session.planningSteps.length,
43
+ isLastStep: false,
44
+ executeContext,
45
+ message: `Step ${session.planningSteps.length}/${4} complete. Use the executeContext.planningPrompt to generate the next step.`,
46
+ }, null, 2);
47
+ }
48
+ case 'plan_complete': {
49
+ if (!input.sessionId)
50
+ return formatError('sessionId is required for plan_complete action');
51
+ const result = engine.planComplete(input.sessionId);
52
+ if (!result.ok)
53
+ return formatError(result.error.message);
54
+ const { executionPlan } = result.value;
55
+ return JSON.stringify({
56
+ status: 'plan_complete',
57
+ sessionId: result.value.session.sessionId,
58
+ executionPlan: {
59
+ planId: executionPlan.planId,
60
+ specId: executionPlan.specId,
61
+ totalTasks: executionPlan.atomicTasks.length,
62
+ totalGroups: executionPlan.taskGroups.length,
63
+ dagValid: executionPlan.dagValidation.isValid,
64
+ criticalPathLength: executionPlan.dagValidation.criticalPath.length,
65
+ classifiedACs: executionPlan.classifiedACs,
66
+ atomicTasks: executionPlan.atomicTasks,
67
+ taskGroups: executionPlan.taskGroups,
68
+ dagValidation: executionPlan.dagValidation,
69
+ },
70
+ message: 'Execution plan assembled and validated. Call execute_start to begin task execution.',
71
+ }, null, 2);
72
+ }
73
+ case 'execute_start': {
74
+ if (!input.sessionId)
75
+ return formatError('sessionId is required for execute_start action');
76
+ const result = engine.startExecution(input.sessionId);
77
+ if (!result.ok)
78
+ return formatError(result.error.message);
79
+ const { session, taskContext, allTasksCompleted } = result.value;
80
+ if (allTasksCompleted) {
81
+ return JSON.stringify({
82
+ status: 'all_tasks_completed',
83
+ sessionId: session.sessionId,
84
+ message: 'All tasks already completed. Call evaluate to verify acceptance criteria.',
85
+ }, null, 2);
86
+ }
87
+ return JSON.stringify({
88
+ status: 'executing',
89
+ sessionId: session.sessionId,
90
+ taskContext,
91
+ message: `Execution started. Use taskContext.taskPrompt with taskContext.systemPrompt to implement the task, then submit with execute_task.`,
92
+ }, null, 2);
93
+ }
94
+ case 'execute_task': {
95
+ if (!input.sessionId)
96
+ return formatError('sessionId is required for execute_task action');
97
+ if (!input.taskResult)
98
+ return formatError('taskResult is required for execute_task action');
99
+ const result = engine.submitTaskResult(input.sessionId, input.taskResult);
100
+ if (!result.ok)
101
+ return formatError(result.error.message);
102
+ const { session, taskContext, allTasksCompleted, driftScore, retrospectiveContext } = result.value;
103
+ if (allTasksCompleted) {
104
+ return JSON.stringify({
105
+ status: 'all_tasks_completed',
106
+ sessionId: session.sessionId,
107
+ completedTasks: session.taskResults.length,
108
+ ...(driftScore ? { driftScore } : {}),
109
+ ...(retrospectiveContext ? { retrospectiveContext } : {}),
110
+ message: 'All tasks completed. Call evaluate to verify acceptance criteria.',
111
+ }, null, 2);
112
+ }
113
+ return JSON.stringify({
114
+ status: 'executing',
115
+ sessionId: session.sessionId,
116
+ completedTasks: session.taskResults.length,
117
+ taskContext,
118
+ ...(driftScore ? { driftScore } : {}),
119
+ ...(retrospectiveContext ? { retrospectiveContext } : {}),
120
+ message: `Task "${input.taskResult.taskId}" recorded.${driftScore?.thresholdExceeded ? ' WARNING: Drift threshold exceeded! Review retrospectiveContext.' : ''} Use taskContext.taskPrompt to implement the next task.`,
121
+ }, null, 2);
122
+ }
123
+ case 'evaluate': {
124
+ if (!input.sessionId)
125
+ return formatError('sessionId is required for evaluate action');
126
+ // Call 3: Submit contextual evaluation result
127
+ if (input.evaluationResult) {
128
+ const result = engine.submitEvaluation(input.sessionId, input.evaluationResult);
129
+ if (!result.ok)
130
+ return formatError(result.error.message);
131
+ const { evaluationResult } = result.value;
132
+ return JSON.stringify({
133
+ status: 'completed',
134
+ sessionId: result.value.session.sessionId,
135
+ stage: 'complete',
136
+ evaluationResult,
137
+ message: `Evaluation complete. Overall score: ${evaluationResult.overallScore.toFixed(2)}, goal alignment: ${evaluationResult.goalAlignment.toFixed(2)}. Session is now completed.`,
138
+ }, null, 2);
139
+ }
140
+ // Call 2: Submit structural results
141
+ if (input.structuralResult) {
142
+ const result = engine.submitStructuralResult(input.sessionId, input.structuralResult);
143
+ if (!result.ok)
144
+ return formatError(result.error.message);
145
+ const { stage, shortCircuited, contextualContext, evaluationResult } = result.value;
146
+ if (shortCircuited) {
147
+ return JSON.stringify({
148
+ status: 'completed',
149
+ sessionId: result.value.session.sessionId,
150
+ stage: 'complete',
151
+ shortCircuited: true,
152
+ evaluationResult,
153
+ message: 'Structural checks failed. Evaluation short-circuited. Fix structural issues and retry.',
154
+ }, null, 2);
155
+ }
156
+ return JSON.stringify({
157
+ status: 'evaluating',
158
+ sessionId: result.value.session.sessionId,
159
+ stage,
160
+ contextualContext,
161
+ message: 'Structural checks passed. Use contextualContext.evaluatePrompt with contextualContext.systemPrompt to generate the contextual evaluation.',
162
+ }, null, 2);
163
+ }
164
+ // Call 1: Start evaluation → return structural commands
165
+ const result = engine.startEvaluation(input.sessionId);
166
+ if (!result.ok)
167
+ return formatError(result.error.message);
168
+ return JSON.stringify({
169
+ status: 'evaluating',
170
+ sessionId: result.value.session.sessionId,
171
+ stage: 'structural',
172
+ structuralContext: result.value.structuralContext,
173
+ message: 'Run structural checks (lint, build, test) and submit results with structuralResult.',
174
+ }, null, 2);
175
+ }
176
+ case 'status': {
177
+ return handleStatus(engine, input.sessionId);
178
+ }
179
+ // ─── Evolution Loop Actions ───────────────────────────────
180
+ case 'evolve_fix': {
181
+ if (!input.sessionId)
182
+ return formatError('sessionId is required for evolve_fix action');
183
+ const fixResult = engine.startStructuralFix(input.sessionId, input.fixTasks);
184
+ if (!fixResult.ok)
185
+ return formatError(fixResult.error.message);
186
+ const { fixContext } = fixResult.value;
187
+ if (fixContext) {
188
+ return JSON.stringify({
189
+ status: 'evolving',
190
+ sessionId: fixResult.value.session.sessionId,
191
+ stage: 'fix',
192
+ fixContext,
193
+ message: 'Structural failures detected. Use fixContext to generate fix tasks, then re-submit with fixTasks.',
194
+ }, null, 2);
195
+ }
196
+ return JSON.stringify({
197
+ status: 'fix_applied',
198
+ sessionId: fixResult.value.session.sessionId,
199
+ message: 'Fix tasks recorded. Call evaluate to re-run structural checks.',
200
+ }, null, 2);
201
+ }
202
+ case 'evolve': {
203
+ if (!input.sessionId)
204
+ return formatError('sessionId is required for evolve action');
205
+ const evolveResult = engine.startContextualEvolve(input.sessionId, input.terminateReason);
206
+ if (!evolveResult.ok)
207
+ return formatError(evolveResult.error.message);
208
+ if (evolveResult.value.terminated) {
209
+ return JSON.stringify({
210
+ status: 'terminated',
211
+ sessionId: evolveResult.value.session.sessionId,
212
+ terminationReason: evolveResult.value.terminationReason,
213
+ evolutionHistory: evolveResult.value.session.evolutionHistory.map((g) => ({
214
+ generation: g.generation,
215
+ score: g.evaluationScore,
216
+ goalAlignment: g.goalAlignment,
217
+ fieldsChanged: g.delta.fieldsChanged,
218
+ })),
219
+ message: `Evolution terminated: ${evolveResult.value.terminationReason}.`,
220
+ }, null, 2);
221
+ }
222
+ return JSON.stringify({
223
+ status: 'evolving',
224
+ sessionId: evolveResult.value.session.sessionId,
225
+ stage: 'evolve',
226
+ evolveContext: evolveResult.value.evolveContext,
227
+ message: 'Use evolveContext to generate a Spec patch, then submit with evolve_patch.',
228
+ }, null, 2);
229
+ }
230
+ case 'evolve_patch': {
231
+ if (!input.sessionId)
232
+ return formatError('sessionId is required for evolve_patch action');
233
+ if (!input.specPatch)
234
+ return formatError('specPatch is required for evolve_patch action');
235
+ const patchResult = engine.submitSpecPatch(input.sessionId, input.specPatch);
236
+ if (!patchResult.ok)
237
+ return formatError(patchResult.error.message);
238
+ const { impactedTaskIds, reExecuteContext } = patchResult.value;
239
+ if (impactedTaskIds.length === 0) {
240
+ return JSON.stringify({
241
+ status: 'patch_applied',
242
+ sessionId: patchResult.value.session.sessionId,
243
+ impactedTaskIds: [],
244
+ message: 'Spec patched. No tasks need re-execution. Call evaluate to re-assess.',
245
+ }, null, 2);
246
+ }
247
+ return JSON.stringify({
248
+ status: 're_executing',
249
+ sessionId: patchResult.value.session.sessionId,
250
+ impactedTaskIds,
251
+ reExecuteContext,
252
+ message: `Spec patched. ${impactedTaskIds.length} tasks need re-execution. Use reExecuteContext to implement the task.`,
253
+ }, null, 2);
254
+ }
255
+ case 'evolve_re_execute': {
256
+ if (!input.sessionId)
257
+ return formatError('sessionId is required for evolve_re_execute action');
258
+ if (!input.reExecuteTaskResult)
259
+ return formatError('reExecuteTaskResult is required for evolve_re_execute action');
260
+ const reExecResult = engine.submitReExecuteTaskResult(input.sessionId, input.reExecuteTaskResult);
261
+ if (!reExecResult.ok)
262
+ return formatError(reExecResult.error.message);
263
+ const { reExecuteContext: nextContext, allTasksCompleted } = reExecResult.value;
264
+ if (allTasksCompleted) {
265
+ return JSON.stringify({
266
+ status: 're_execute_complete',
267
+ sessionId: reExecResult.value.session.sessionId,
268
+ message: 'All impacted tasks re-executed. Call evaluate to re-assess.',
269
+ }, null, 2);
270
+ }
271
+ return JSON.stringify({
272
+ status: 're_executing',
273
+ sessionId: reExecResult.value.session.sessionId,
274
+ reExecuteContext: nextContext,
275
+ message: 'Task recorded. Use reExecuteContext to implement the next re-execution task.',
276
+ }, null, 2);
277
+ }
278
+ }
279
+ }
280
+ function buildStepResult(raw) {
281
+ switch (raw.principle) {
282
+ case 'figure_ground':
283
+ if (!raw.classifiedACs)
284
+ return null;
285
+ return { principle: 'figure_ground', classifiedACs: raw.classifiedACs };
286
+ case 'closure':
287
+ if (!raw.atomicTasks)
288
+ return null;
289
+ return { principle: 'closure', atomicTasks: raw.atomicTasks };
290
+ case 'proximity':
291
+ if (!raw.taskGroups)
292
+ return null;
293
+ return { principle: 'proximity', taskGroups: raw.taskGroups };
294
+ case 'continuity':
295
+ if (!raw.dagValidation)
296
+ return null;
297
+ return { principle: 'continuity', dagValidation: raw.dagValidation };
298
+ default:
299
+ return null;
300
+ }
301
+ }
302
+ function handleStatus(engine, sessionId) {
303
+ try {
304
+ if (sessionId) {
305
+ const session = engine.getSession(sessionId);
306
+ return JSON.stringify({
307
+ session: {
308
+ sessionId: session.sessionId,
309
+ specId: session.specId,
310
+ status: session.status,
311
+ currentStep: session.currentStep,
312
+ stepsCompleted: session.planningSteps.length,
313
+ hasPlan: !!session.executionPlan,
314
+ taskResults: session.taskResults.length,
315
+ evaluateStage: session.evaluateStage ?? null,
316
+ hasEvaluation: !!session.evaluationResult,
317
+ driftAlerts: session.driftHistory.filter((d) => d.thresholdExceeded).length,
318
+ evolveStage: session.evolveStage ?? null,
319
+ currentGeneration: session.currentGeneration,
320
+ evolutionCount: session.evolutionHistory.length,
321
+ terminationReason: session.terminationReason ?? null,
322
+ createdAt: session.createdAt,
323
+ updatedAt: session.updatedAt,
324
+ },
325
+ }, null, 2);
326
+ }
327
+ const sessions = engine.listSessions();
328
+ return JSON.stringify({
329
+ sessions: sessions.map((s) => ({
330
+ sessionId: s.sessionId,
331
+ specId: s.specId,
332
+ status: s.status,
333
+ stepsCompleted: s.planningSteps.length,
334
+ hasPlan: !!s.executionPlan,
335
+ taskResults: s.taskResults.length,
336
+ hasEvaluation: !!s.evaluationResult,
337
+ createdAt: s.createdAt,
338
+ })),
339
+ total: sessions.length,
340
+ }, null, 2);
341
+ }
342
+ catch (e) {
343
+ return formatError(e instanceof Error ? e.message : String(e));
344
+ }
345
+ }
346
+ function formatError(message) {
347
+ return JSON.stringify({ error: message }, null, 2);
348
+ }
349
+ //# sourceMappingURL=execute-passthrough.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"execute-passthrough.js","sourceRoot":"","sources":["../../../../src/mcp/tools/execute-passthrough.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,4 @@
1
+ export { handleInterview } from './interview.js';
2
+ export { handleSpec } from './spec.js';
3
+ export { handleStatus } from './status.js';
4
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/mcp/tools/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,MAAM,gBAAgB,CAAC;AACjD,OAAO,EAAE,UAAU,EAAE,MAAM,WAAW,CAAC;AACvC,OAAO,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC"}
@@ -0,0 +1,4 @@
1
+ export { handleInterview } from './interview.js';
2
+ export { handleSpec } from './spec.js';
3
+ export { handleStatus } from './status.js';
4
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/mcp/tools/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,MAAM,gBAAgB,CAAC;AACjD,OAAO,EAAE,UAAU,EAAE,MAAM,WAAW,CAAC;AACvC,OAAO,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC"}
@@ -0,0 +1,4 @@
1
+ import type { PassthroughEngine } from '../../interview/passthrough-engine.js';
2
+ import type { InterviewInput } from '../schemas.js';
3
+ export declare function handleInterviewPassthrough(engine: PassthroughEngine, input: InterviewInput): string;
4
+ //# sourceMappingURL=interview-passthrough.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"interview-passthrough.d.ts","sourceRoot":"","sources":["../../../../src/mcp/tools/interview-passthrough.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,uCAAuC,CAAC;AAC/E,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,eAAe,CAAC;AAEpD,wBAAgB,0BAA0B,CACxC,MAAM,EAAE,iBAAiB,EACzB,KAAK,EAAE,cAAc,GACpB,MAAM,CAiGR"}
@@ -0,0 +1,96 @@
1
+ export function handleInterviewPassthrough(engine, input) {
2
+ switch (input.action) {
3
+ case 'start': {
4
+ const topic = input.topic ?? 'Untitled project';
5
+ const result = engine.start(topic, input.cwd);
6
+ if (!result.ok)
7
+ return formatError(result.error.message);
8
+ const { session, projectType, detectedFiles, gestaltContext } = result.value;
9
+ return JSON.stringify({
10
+ status: 'started',
11
+ sessionId: session.sessionId,
12
+ projectType,
13
+ detectedFiles,
14
+ gestaltContext,
15
+ roundNumber: 1,
16
+ message: `Interview started for "${topic}" (${projectType}). Use the gestaltContext.questionPrompt with gestaltContext.systemPrompt to generate the first question.`,
17
+ }, null, 2);
18
+ }
19
+ case 'respond': {
20
+ if (!input.sessionId)
21
+ return formatError('sessionId is required for respond action');
22
+ if (!input.response)
23
+ return formatError('response is required for respond action');
24
+ if (!input.generatedQuestion)
25
+ return formatError('generatedQuestion is required for respond action in passthrough mode');
26
+ const result = engine.respond(input.sessionId, input.response, input.generatedQuestion, input.ambiguityScore);
27
+ if (!result.ok)
28
+ return formatError(result.error.message);
29
+ const { session, ambiguityScore, gestaltContext } = result.value;
30
+ return JSON.stringify({
31
+ status: 'in_progress',
32
+ sessionId: session.sessionId,
33
+ roundNumber: session.rounds.length,
34
+ gestaltContext,
35
+ ambiguityScore: ambiguityScore
36
+ ? {
37
+ overall: ambiguityScore.overall.toFixed(2),
38
+ isReady: ambiguityScore.isReady,
39
+ dimensions: ambiguityScore.dimensions.map((d) => ({
40
+ name: d.name,
41
+ clarity: d.clarity.toFixed(2),
42
+ principle: d.gestaltPrinciple,
43
+ })),
44
+ }
45
+ : null,
46
+ message: ambiguityScore?.isReady
47
+ ? 'Ambiguity threshold met! You can complete the interview and generate a spec.'
48
+ : 'Use gestaltContext.questionPrompt to generate the next question. Use gestaltContext.scoringPrompt to compute ambiguity scores.',
49
+ }, null, 2);
50
+ }
51
+ case 'score': {
52
+ if (!input.sessionId)
53
+ return formatError('sessionId is required for score action');
54
+ const result = engine.score(input.sessionId, input.ambiguityScore);
55
+ if (!result.ok)
56
+ return formatError(result.error.message);
57
+ const { ambiguityScore, scoringPrompt } = result.value;
58
+ return JSON.stringify({
59
+ status: 'scored',
60
+ ambiguityScore: ambiguityScore
61
+ ? {
62
+ overall: ambiguityScore.overall.toFixed(2),
63
+ isReady: ambiguityScore.isReady,
64
+ dimensions: ambiguityScore.dimensions.map((d) => ({
65
+ name: d.name,
66
+ clarity: d.clarity.toFixed(2),
67
+ principle: d.gestaltPrinciple,
68
+ })),
69
+ }
70
+ : null,
71
+ scoringPrompt: scoringPrompt ?? null,
72
+ message: scoringPrompt
73
+ ? 'Use the scoringPrompt to compute ambiguity scores, then call score again with the ambiguityScore parameter.'
74
+ : undefined,
75
+ }, null, 2);
76
+ }
77
+ case 'complete': {
78
+ if (!input.sessionId)
79
+ return formatError('sessionId is required for complete action');
80
+ const result = engine.complete(input.sessionId);
81
+ if (!result.ok)
82
+ return formatError(result.error.message);
83
+ return JSON.stringify({
84
+ status: 'completed',
85
+ sessionId: result.value.sessionId,
86
+ totalRounds: result.value.rounds.length,
87
+ finalAmbiguityScore: result.value.ambiguityScore?.overall.toFixed(2) ?? 'N/A',
88
+ message: 'Interview completed. Use ges_generate_spec to generate a spec.',
89
+ }, null, 2);
90
+ }
91
+ }
92
+ }
93
+ function formatError(message) {
94
+ return JSON.stringify({ error: message }, null, 2);
95
+ }
96
+ //# sourceMappingURL=interview-passthrough.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"interview-passthrough.js","sourceRoot":"","sources":["../../../../src/mcp/tools/interview-passthrough.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,4 @@
1
+ import type { InterviewEngine } from '../../interview/engine.js';
2
+ import type { InterviewInput } from '../schemas.js';
3
+ export declare function handleInterview(engine: InterviewEngine, input: InterviewInput): Promise<string>;
4
+ //# sourceMappingURL=interview.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"interview.d.ts","sourceRoot":"","sources":["../../../../src/mcp/tools/interview.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,2BAA2B,CAAC;AACjE,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,eAAe,CAAC;AAEpD,wBAAsB,eAAe,CACnC,MAAM,EAAE,eAAe,EACvB,KAAK,EAAE,cAAc,GACpB,OAAO,CAAC,MAAM,CAAC,CAkFjB"}
@@ -0,0 +1,85 @@
1
+ export async function handleInterview(engine, input) {
2
+ switch (input.action) {
3
+ case 'start': {
4
+ const topic = input.topic ?? 'Untitled project';
5
+ const result = await engine.start(topic, input.cwd);
6
+ if (!result.ok)
7
+ return formatError(result.error.message);
8
+ const { session, firstQuestion, projectType, detectedFiles } = result.value;
9
+ return JSON.stringify({
10
+ status: 'started',
11
+ sessionId: session.sessionId,
12
+ projectType,
13
+ detectedFiles,
14
+ question: firstQuestion,
15
+ roundNumber: 1,
16
+ message: `Interview started for "${topic}" (${projectType}). Please answer the question below.`,
17
+ }, null, 2);
18
+ }
19
+ case 'respond': {
20
+ if (!input.sessionId)
21
+ return formatError('sessionId is required for respond action');
22
+ if (!input.response)
23
+ return formatError('response is required for respond action');
24
+ const result = await engine.respond(input.sessionId, input.response);
25
+ if (!result.ok)
26
+ return formatError(result.error.message);
27
+ const { session, nextQuestion, ambiguityScore } = result.value;
28
+ return JSON.stringify({
29
+ status: 'in_progress',
30
+ sessionId: session.sessionId,
31
+ roundNumber: session.rounds.length,
32
+ question: nextQuestion,
33
+ ambiguityScore: {
34
+ overall: ambiguityScore.overall.toFixed(2),
35
+ isReady: ambiguityScore.isReady,
36
+ dimensions: ambiguityScore.dimensions.map((d) => ({
37
+ name: d.name,
38
+ clarity: d.clarity.toFixed(2),
39
+ principle: d.gestaltPrinciple,
40
+ })),
41
+ },
42
+ message: ambiguityScore.isReady
43
+ ? 'Ambiguity threshold met! You can now complete the interview and generate a spec.'
44
+ : `Ambiguity: ${(ambiguityScore.overall * 100).toFixed(0)}% — continue answering to reduce ambiguity.`,
45
+ }, null, 2);
46
+ }
47
+ case 'score': {
48
+ if (!input.sessionId)
49
+ return formatError('sessionId is required for score action');
50
+ const result = await engine.score(input.sessionId);
51
+ if (!result.ok)
52
+ return formatError(result.error.message);
53
+ return JSON.stringify({
54
+ status: 'scored',
55
+ ambiguityScore: {
56
+ overall: result.value.overall.toFixed(2),
57
+ isReady: result.value.isReady,
58
+ dimensions: result.value.dimensions.map((d) => ({
59
+ name: d.name,
60
+ clarity: d.clarity.toFixed(2),
61
+ principle: d.gestaltPrinciple,
62
+ })),
63
+ },
64
+ }, null, 2);
65
+ }
66
+ case 'complete': {
67
+ if (!input.sessionId)
68
+ return formatError('sessionId is required for complete action');
69
+ const result = engine.complete(input.sessionId);
70
+ if (!result.ok)
71
+ return formatError(result.error.message);
72
+ return JSON.stringify({
73
+ status: 'completed',
74
+ sessionId: result.value.sessionId,
75
+ totalRounds: result.value.rounds.length,
76
+ finalAmbiguityScore: result.value.ambiguityScore?.overall.toFixed(2) ?? 'N/A',
77
+ message: 'Interview completed. You can now generate a spec with ges_generate_spec.',
78
+ }, null, 2);
79
+ }
80
+ }
81
+ }
82
+ function formatError(message) {
83
+ return JSON.stringify({ error: message }, null, 2);
84
+ }
85
+ //# sourceMappingURL=interview.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"interview.js","sourceRoot":"","sources":["../../../../src/mcp/tools/interview.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,5 @@
1
+ import type { PassthroughEngine } from '../../interview/passthrough-engine.js';
2
+ import type { PassthroughSeedGenerator } from '../../seed/passthrough-generator.js';
3
+ import type { SeedInput } from '../schemas.js';
4
+ export declare function handleSeedPassthrough(engine: PassthroughEngine, generator: PassthroughSeedGenerator, input: SeedInput): string;
5
+ //# sourceMappingURL=seed-passthrough.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"seed-passthrough.d.ts","sourceRoot":"","sources":["../../../../src/mcp/tools/seed-passthrough.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,uCAAuC,CAAC;AAC/E,OAAO,KAAK,EAAE,wBAAwB,EAAE,MAAM,qCAAqC,CAAC;AACpF,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,eAAe,CAAC;AAE/C,wBAAgB,qBAAqB,CACnC,MAAM,EAAE,iBAAiB,EACzB,SAAS,EAAE,wBAAwB,EACnC,KAAK,EAAE,SAAS,GACf,MAAM,CA8BR"}