aicodeman 0.2.8

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 (246) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +403 -0
  3. package/dist/ai-checker-base.d.ts +175 -0
  4. package/dist/ai-checker-base.d.ts.map +1 -0
  5. package/dist/ai-checker-base.js +424 -0
  6. package/dist/ai-checker-base.js.map +1 -0
  7. package/dist/ai-idle-checker.d.ts +53 -0
  8. package/dist/ai-idle-checker.d.ts.map +1 -0
  9. package/dist/ai-idle-checker.js +141 -0
  10. package/dist/ai-idle-checker.js.map +1 -0
  11. package/dist/ai-plan-checker.d.ts +52 -0
  12. package/dist/ai-plan-checker.d.ts.map +1 -0
  13. package/dist/ai-plan-checker.js +103 -0
  14. package/dist/ai-plan-checker.js.map +1 -0
  15. package/dist/bash-tool-parser.d.ts +191 -0
  16. package/dist/bash-tool-parser.d.ts.map +1 -0
  17. package/dist/bash-tool-parser.js +598 -0
  18. package/dist/bash-tool-parser.js.map +1 -0
  19. package/dist/cli.d.ts +12 -0
  20. package/dist/cli.d.ts.map +1 -0
  21. package/dist/cli.js +460 -0
  22. package/dist/cli.js.map +1 -0
  23. package/dist/config/buffer-limits.d.ts +59 -0
  24. package/dist/config/buffer-limits.d.ts.map +1 -0
  25. package/dist/config/buffer-limits.js +74 -0
  26. package/dist/config/buffer-limits.js.map +1 -0
  27. package/dist/config/map-limits.d.ts +40 -0
  28. package/dist/config/map-limits.d.ts.map +1 -0
  29. package/dist/config/map-limits.js +52 -0
  30. package/dist/config/map-limits.js.map +1 -0
  31. package/dist/file-stream-manager.d.ts +148 -0
  32. package/dist/file-stream-manager.d.ts.map +1 -0
  33. package/dist/file-stream-manager.js +351 -0
  34. package/dist/file-stream-manager.js.map +1 -0
  35. package/dist/hooks-config.d.ts +31 -0
  36. package/dist/hooks-config.d.ts.map +1 -0
  37. package/dist/hooks-config.js +115 -0
  38. package/dist/hooks-config.js.map +1 -0
  39. package/dist/image-watcher.d.ts +86 -0
  40. package/dist/image-watcher.d.ts.map +1 -0
  41. package/dist/image-watcher.js +275 -0
  42. package/dist/image-watcher.js.map +1 -0
  43. package/dist/index.d.ts +11 -0
  44. package/dist/index.d.ts.map +1 -0
  45. package/dist/index.js +54 -0
  46. package/dist/index.js.map +1 -0
  47. package/dist/mux-factory.d.ts +13 -0
  48. package/dist/mux-factory.d.ts.map +1 -0
  49. package/dist/mux-factory.js +19 -0
  50. package/dist/mux-factory.js.map +1 -0
  51. package/dist/mux-interface.d.ts +145 -0
  52. package/dist/mux-interface.d.ts.map +1 -0
  53. package/dist/mux-interface.js +9 -0
  54. package/dist/mux-interface.js.map +1 -0
  55. package/dist/plan-orchestrator.d.ts +123 -0
  56. package/dist/plan-orchestrator.d.ts.map +1 -0
  57. package/dist/plan-orchestrator.js +500 -0
  58. package/dist/plan-orchestrator.js.map +1 -0
  59. package/dist/prompts/index.d.ts +9 -0
  60. package/dist/prompts/index.d.ts.map +1 -0
  61. package/dist/prompts/index.js +9 -0
  62. package/dist/prompts/index.js.map +1 -0
  63. package/dist/prompts/planner.d.ts +14 -0
  64. package/dist/prompts/planner.d.ts.map +1 -0
  65. package/dist/prompts/planner.js +83 -0
  66. package/dist/prompts/planner.js.map +1 -0
  67. package/dist/prompts/research-agent.d.ts +10 -0
  68. package/dist/prompts/research-agent.d.ts.map +1 -0
  69. package/dist/prompts/research-agent.js +143 -0
  70. package/dist/prompts/research-agent.js.map +1 -0
  71. package/dist/push-store.d.ts +41 -0
  72. package/dist/push-store.d.ts.map +1 -0
  73. package/dist/push-store.js +168 -0
  74. package/dist/push-store.js.map +1 -0
  75. package/dist/ralph-config.d.ts +67 -0
  76. package/dist/ralph-config.d.ts.map +1 -0
  77. package/dist/ralph-config.js +134 -0
  78. package/dist/ralph-config.js.map +1 -0
  79. package/dist/ralph-loop.d.ts +124 -0
  80. package/dist/ralph-loop.d.ts.map +1 -0
  81. package/dist/ralph-loop.js +418 -0
  82. package/dist/ralph-loop.js.map +1 -0
  83. package/dist/ralph-tracker.d.ts +1081 -0
  84. package/dist/ralph-tracker.d.ts.map +1 -0
  85. package/dist/ralph-tracker.js +3343 -0
  86. package/dist/ralph-tracker.js.map +1 -0
  87. package/dist/respawn-controller.d.ts +1182 -0
  88. package/dist/respawn-controller.d.ts.map +1 -0
  89. package/dist/respawn-controller.js +2754 -0
  90. package/dist/respawn-controller.js.map +1 -0
  91. package/dist/run-summary.d.ts +123 -0
  92. package/dist/run-summary.d.ts.map +1 -0
  93. package/dist/run-summary.js +325 -0
  94. package/dist/run-summary.js.map +1 -0
  95. package/dist/session-lifecycle-log.d.ts +36 -0
  96. package/dist/session-lifecycle-log.d.ts.map +1 -0
  97. package/dist/session-lifecycle-log.js +101 -0
  98. package/dist/session-lifecycle-log.js.map +1 -0
  99. package/dist/session-manager.d.ts +97 -0
  100. package/dist/session-manager.d.ts.map +1 -0
  101. package/dist/session-manager.js +224 -0
  102. package/dist/session-manager.js.map +1 -0
  103. package/dist/session.d.ts +686 -0
  104. package/dist/session.d.ts.map +1 -0
  105. package/dist/session.js +2025 -0
  106. package/dist/session.js.map +1 -0
  107. package/dist/state-store.d.ts +189 -0
  108. package/dist/state-store.d.ts.map +1 -0
  109. package/dist/state-store.js +730 -0
  110. package/dist/state-store.js.map +1 -0
  111. package/dist/subagent-watcher.d.ts +345 -0
  112. package/dist/subagent-watcher.d.ts.map +1 -0
  113. package/dist/subagent-watcher.js +1469 -0
  114. package/dist/subagent-watcher.js.map +1 -0
  115. package/dist/task-queue.d.ts +108 -0
  116. package/dist/task-queue.d.ts.map +1 -0
  117. package/dist/task-queue.js +235 -0
  118. package/dist/task-queue.js.map +1 -0
  119. package/dist/task-tracker.d.ts +306 -0
  120. package/dist/task-tracker.d.ts.map +1 -0
  121. package/dist/task-tracker.js +488 -0
  122. package/dist/task-tracker.js.map +1 -0
  123. package/dist/task.d.ts +73 -0
  124. package/dist/task.d.ts.map +1 -0
  125. package/dist/task.js +177 -0
  126. package/dist/task.js.map +1 -0
  127. package/dist/team-watcher.d.ts +53 -0
  128. package/dist/team-watcher.d.ts.map +1 -0
  129. package/dist/team-watcher.js +313 -0
  130. package/dist/team-watcher.js.map +1 -0
  131. package/dist/templates/case-template.md +461 -0
  132. package/dist/templates/claude-md.d.ts +26 -0
  133. package/dist/templates/claude-md.d.ts.map +1 -0
  134. package/dist/templates/claude-md.js +74 -0
  135. package/dist/templates/claude-md.js.map +1 -0
  136. package/dist/tmux-manager.d.ts +181 -0
  137. package/dist/tmux-manager.d.ts.map +1 -0
  138. package/dist/tmux-manager.js +1405 -0
  139. package/dist/tmux-manager.js.map +1 -0
  140. package/dist/transcript-watcher.d.ts +110 -0
  141. package/dist/transcript-watcher.d.ts.map +1 -0
  142. package/dist/transcript-watcher.js +338 -0
  143. package/dist/transcript-watcher.js.map +1 -0
  144. package/dist/tunnel-manager.d.ts +54 -0
  145. package/dist/tunnel-manager.d.ts.map +1 -0
  146. package/dist/tunnel-manager.js +251 -0
  147. package/dist/tunnel-manager.js.map +1 -0
  148. package/dist/types.d.ts +1139 -0
  149. package/dist/types.d.ts.map +1 -0
  150. package/dist/types.js +215 -0
  151. package/dist/types.js.map +1 -0
  152. package/dist/utils/buffer-accumulator.d.ts +111 -0
  153. package/dist/utils/buffer-accumulator.d.ts.map +1 -0
  154. package/dist/utils/buffer-accumulator.js +172 -0
  155. package/dist/utils/buffer-accumulator.js.map +1 -0
  156. package/dist/utils/claude-cli-resolver.d.ts +26 -0
  157. package/dist/utils/claude-cli-resolver.d.ts.map +1 -0
  158. package/dist/utils/claude-cli-resolver.js +78 -0
  159. package/dist/utils/claude-cli-resolver.js.map +1 -0
  160. package/dist/utils/cleanup-manager.d.ts +165 -0
  161. package/dist/utils/cleanup-manager.d.ts.map +1 -0
  162. package/dist/utils/cleanup-manager.js +274 -0
  163. package/dist/utils/cleanup-manager.js.map +1 -0
  164. package/dist/utils/index.d.ts +19 -0
  165. package/dist/utils/index.d.ts.map +1 -0
  166. package/dist/utils/index.js +19 -0
  167. package/dist/utils/index.js.map +1 -0
  168. package/dist/utils/lru-map.d.ts +140 -0
  169. package/dist/utils/lru-map.d.ts.map +1 -0
  170. package/dist/utils/lru-map.js +234 -0
  171. package/dist/utils/lru-map.js.map +1 -0
  172. package/dist/utils/nice-wrapper.d.ts +13 -0
  173. package/dist/utils/nice-wrapper.d.ts.map +1 -0
  174. package/dist/utils/nice-wrapper.js +17 -0
  175. package/dist/utils/nice-wrapper.js.map +1 -0
  176. package/dist/utils/opencode-cli-resolver.d.ts +21 -0
  177. package/dist/utils/opencode-cli-resolver.d.ts.map +1 -0
  178. package/dist/utils/opencode-cli-resolver.js +67 -0
  179. package/dist/utils/opencode-cli-resolver.js.map +1 -0
  180. package/dist/utils/regex-patterns.d.ts +64 -0
  181. package/dist/utils/regex-patterns.d.ts.map +1 -0
  182. package/dist/utils/regex-patterns.js +74 -0
  183. package/dist/utils/regex-patterns.js.map +1 -0
  184. package/dist/utils/stale-expiration-map.d.ts +159 -0
  185. package/dist/utils/stale-expiration-map.d.ts.map +1 -0
  186. package/dist/utils/stale-expiration-map.js +277 -0
  187. package/dist/utils/stale-expiration-map.js.map +1 -0
  188. package/dist/utils/string-similarity.d.ts +108 -0
  189. package/dist/utils/string-similarity.d.ts.map +1 -0
  190. package/dist/utils/string-similarity.js +189 -0
  191. package/dist/utils/string-similarity.js.map +1 -0
  192. package/dist/utils/token-validation.d.ts +39 -0
  193. package/dist/utils/token-validation.d.ts.map +1 -0
  194. package/dist/utils/token-validation.js +59 -0
  195. package/dist/utils/token-validation.js.map +1 -0
  196. package/dist/utils/type-safety.d.ts +33 -0
  197. package/dist/utils/type-safety.d.ts.map +1 -0
  198. package/dist/utils/type-safety.js +35 -0
  199. package/dist/utils/type-safety.js.map +1 -0
  200. package/dist/web/public/app.js +491 -0
  201. package/dist/web/public/app.js.br +0 -0
  202. package/dist/web/public/app.js.gz +0 -0
  203. package/dist/web/public/index.html +1675 -0
  204. package/dist/web/public/index.html.br +0 -0
  205. package/dist/web/public/index.html.gz +0 -0
  206. package/dist/web/public/manifest.json +8 -0
  207. package/dist/web/public/mobile.css +1 -0
  208. package/dist/web/public/mobile.css.br +0 -0
  209. package/dist/web/public/mobile.css.gz +0 -0
  210. package/dist/web/public/ralph-wizard.js +1037 -0
  211. package/dist/web/public/ralph-wizard.js.br +0 -0
  212. package/dist/web/public/ralph-wizard.js.gz +0 -0
  213. package/dist/web/public/styles.css +1 -0
  214. package/dist/web/public/styles.css.br +0 -0
  215. package/dist/web/public/styles.css.gz +0 -0
  216. package/dist/web/public/sw.js +67 -0
  217. package/dist/web/public/sw.js.br +0 -0
  218. package/dist/web/public/sw.js.gz +0 -0
  219. package/dist/web/public/upload.html +155 -0
  220. package/dist/web/public/upload.html.br +0 -0
  221. package/dist/web/public/upload.html.gz +0 -0
  222. package/dist/web/public/vendor/xterm-addon-fit.min.js +1 -0
  223. package/dist/web/public/vendor/xterm-addon-fit.min.js.br +0 -0
  224. package/dist/web/public/vendor/xterm-addon-fit.min.js.gz +0 -0
  225. package/dist/web/public/vendor/xterm-addon-unicode11.min.js +1 -0
  226. package/dist/web/public/vendor/xterm-addon-unicode11.min.js.br +0 -0
  227. package/dist/web/public/vendor/xterm-addon-unicode11.min.js.gz +0 -0
  228. package/dist/web/public/vendor/xterm-addon-webgl.min.js +2 -0
  229. package/dist/web/public/vendor/xterm-addon-webgl.min.js.br +0 -0
  230. package/dist/web/public/vendor/xterm-addon-webgl.min.js.gz +0 -0
  231. package/dist/web/public/vendor/xterm.css +209 -0
  232. package/dist/web/public/vendor/xterm.css.br +0 -0
  233. package/dist/web/public/vendor/xterm.css.gz +0 -0
  234. package/dist/web/public/vendor/xterm.min.js +9 -0
  235. package/dist/web/public/vendor/xterm.min.js.br +0 -0
  236. package/dist/web/public/vendor/xterm.min.js.gz +0 -0
  237. package/dist/web/schemas.d.ts +479 -0
  238. package/dist/web/schemas.d.ts.map +1 -0
  239. package/dist/web/schemas.js +448 -0
  240. package/dist/web/schemas.js.map +1 -0
  241. package/dist/web/server.d.ts +207 -0
  242. package/dist/web/server.d.ts.map +1 -0
  243. package/dist/web/server.js +5784 -0
  244. package/dist/web/server.js.map +1 -0
  245. package/package.json +110 -0
  246. package/scripts/postinstall.js +390 -0
@@ -0,0 +1,500 @@
1
+ /**
2
+ * @fileoverview Simplified plan generation with 2 agents instead of 9.
3
+ *
4
+ * Previous architecture (removed):
5
+ * - 4 parallel analysis agents (requirements, architecture, testing, risks)
6
+ * - Synthesis phase
7
+ * - Verification agent
8
+ * - Execution optimizer agent (output was ignored anyway)
9
+ * - Final review agent
10
+ *
11
+ * New architecture:
12
+ * 1. Research Agent - gather context (optional, can fail)
13
+ * 2. Planner Agent - single agent generates complete TDD plan
14
+ *
15
+ * @module plan-orchestrator
16
+ */
17
+ import { Session } from './session.js';
18
+ import { existsSync, mkdirSync, writeFileSync } from 'node:fs';
19
+ import { join } from 'node:path';
20
+ import { RESEARCH_AGENT_PROMPT, PLANNER_PROMPT } from './prompts/index.js';
21
+ // ============================================================================
22
+ // JSON Repair Helper
23
+ // ============================================================================
24
+ function tryParseJSON(jsonString) {
25
+ try {
26
+ return { success: true, data: JSON.parse(jsonString) };
27
+ }
28
+ catch (firstError) {
29
+ let repaired = jsonString;
30
+ repaired = repaired.replace(/,(\s*[\]}])/g, '$1');
31
+ repaired = repaired.replace(/"([^"\\]|\\.)*"/g, (match) => {
32
+ return match.replace(/\n/g, '\\n').replace(/\r/g, '\\r').replace(/\t/g, '\\t');
33
+ });
34
+ const openBraces = (repaired.match(/\{/g) || []).length;
35
+ const closeBraces = (repaired.match(/\}/g) || []).length;
36
+ for (let i = 0; i < openBraces - closeBraces; i++) {
37
+ repaired = repaired.replace(/,\s*$/, '') + '}';
38
+ }
39
+ try {
40
+ return { success: true, data: JSON.parse(repaired) };
41
+ }
42
+ catch {
43
+ const errMsg = firstError instanceof Error ? firstError.message : String(firstError);
44
+ return { success: false, error: errMsg };
45
+ }
46
+ }
47
+ }
48
+ // ============================================================================
49
+ // Constants
50
+ // ============================================================================
51
+ const DEFAULT_MODEL = 'opus';
52
+ // ============================================================================
53
+ // Main Orchestrator Class
54
+ // ============================================================================
55
+ export class PlanOrchestrator {
56
+ mux;
57
+ workingDir;
58
+ outputDir;
59
+ runningSessions = new Set();
60
+ cancelled = false;
61
+ taskDescription = '';
62
+ researchModel;
63
+ plannerModel;
64
+ constructor(mux, workingDir = process.cwd(), outputDir, modelConfig) {
65
+ this.mux = mux;
66
+ this.workingDir = workingDir;
67
+ this.outputDir = outputDir;
68
+ this.researchModel = modelConfig?.agentTypeOverrides?.explore || modelConfig?.defaultModel || DEFAULT_MODEL;
69
+ this.plannerModel = modelConfig?.agentTypeOverrides?.review || modelConfig?.defaultModel || DEFAULT_MODEL;
70
+ }
71
+ saveAgentOutput(agentType, prompt, result, durationMs) {
72
+ if (!this.outputDir)
73
+ return;
74
+ try {
75
+ if (!existsSync(this.outputDir)) {
76
+ mkdirSync(this.outputDir, { recursive: true });
77
+ }
78
+ const agentDir = join(this.outputDir, agentType);
79
+ if (!existsSync(agentDir)) {
80
+ mkdirSync(agentDir, { recursive: true });
81
+ }
82
+ const promptPath = join(agentDir, 'prompt.md');
83
+ writeFileSync(promptPath, `# ${agentType} Agent Prompt\n\nGenerated: ${new Date().toISOString()}\nDuration: ${(durationMs / 1000).toFixed(1)}s\n\n## Task\n${this.taskDescription}\n\n## Prompt\n${prompt}\n`, 'utf-8');
84
+ const resultPath = join(agentDir, 'result.json');
85
+ writeFileSync(resultPath, JSON.stringify(result, null, 2), 'utf-8');
86
+ }
87
+ catch (err) {
88
+ console.warn(`[PlanOrchestrator] Failed to save ${agentType} output:`, err);
89
+ }
90
+ }
91
+ saveFinalResult(result) {
92
+ if (!this.outputDir)
93
+ return;
94
+ try {
95
+ if (!existsSync(this.outputDir)) {
96
+ mkdirSync(this.outputDir, { recursive: true });
97
+ }
98
+ // Save final result JSON
99
+ const resultPath = join(this.outputDir, 'final-result.json');
100
+ writeFileSync(resultPath, JSON.stringify(result, null, 2), 'utf-8');
101
+ // Save human-readable summary
102
+ if (result.success && result.items) {
103
+ const summaryPath = join(this.outputDir, 'summary.md');
104
+ const summary = this.generateSummary(result);
105
+ writeFileSync(summaryPath, summary, 'utf-8');
106
+ }
107
+ }
108
+ catch (err) {
109
+ console.warn('[PlanOrchestrator] Failed to save final result:', err);
110
+ }
111
+ }
112
+ generateSummary(result) {
113
+ const items = result.items || [];
114
+ const p0 = items.filter((i) => i.priority === 'P0');
115
+ const p1 = items.filter((i) => i.priority === 'P1');
116
+ const p2 = items.filter((i) => i.priority === 'P2');
117
+ let md = `# Plan Summary\n\n`;
118
+ md += `Generated: ${new Date().toISOString()}\n`;
119
+ md += `Total Tasks: ${items.length} (P0: ${p0.length}, P1: ${p1.length}, P2: ${p2.length})\n\n`;
120
+ md += `## Task\n${this.taskDescription}\n\n`;
121
+ const addSection = (title, tasks) => {
122
+ if (tasks.length === 0)
123
+ return;
124
+ md += `## ${title}\n\n`;
125
+ for (const t of tasks) {
126
+ const phase = t.tddPhase ? ` [${t.tddPhase}]` : '';
127
+ md += `- **${t.id}**${phase}: ${t.content}\n`;
128
+ if (t.verificationCriteria)
129
+ md += ` - Verify: ${t.verificationCriteria}\n`;
130
+ }
131
+ md += '\n';
132
+ };
133
+ addSection('P0 - Critical', p0);
134
+ addSection('P1 - Required', p1);
135
+ addSection('P2 - Enhancement', p2);
136
+ if (result.metadata?.plannerWarnings?.length) {
137
+ md += `## Warnings\n\n`;
138
+ for (const w of result.metadata.plannerWarnings) {
139
+ md += `- ${w}\n`;
140
+ }
141
+ }
142
+ return md;
143
+ }
144
+ async cancel() {
145
+ this.cancelled = true;
146
+ // Stop all running sessions and await cleanup to prevent PTY process leaks
147
+ const stopPromises = [];
148
+ for (const session of this.runningSessions) {
149
+ stopPromises.push(session.stop().catch((err) => {
150
+ console.error('[PlanOrchestrator] Failed to stop session during cancel:', err);
151
+ }));
152
+ }
153
+ await Promise.all(stopPromises);
154
+ this.runningSessions.clear();
155
+ }
156
+ /**
157
+ * Generate a detailed TDD plan.
158
+ *
159
+ * Flow:
160
+ * 1. Research Agent (optional - failures don't block)
161
+ * 2. Planner Agent (generates complete TDD plan)
162
+ */
163
+ async generateDetailedPlan(taskDescription, onProgress, onSubagent) {
164
+ const startTime = Date.now();
165
+ let totalCost = 0;
166
+ this.taskDescription = taskDescription;
167
+ try {
168
+ // Phase 1: Research (optional)
169
+ onProgress?.('research', 'Running research agent...');
170
+ const researchResult = await this.runResearchAgent(taskDescription, onProgress, onSubagent);
171
+ totalCost += researchResult.success ? 0.01 : 0;
172
+ const effectiveTaskDescription = researchResult.success
173
+ ? researchResult.enrichedTaskDescription
174
+ : taskDescription;
175
+ const researchContext = this.formatResearchContext(researchResult);
176
+ // Phase 2: Planner (main agent)
177
+ onProgress?.('planning', 'Running planner agent...');
178
+ const plannerResult = await this.runPlannerAgent(effectiveTaskDescription, researchContext, onProgress, onSubagent);
179
+ if (!plannerResult.success) {
180
+ return {
181
+ success: false,
182
+ error: plannerResult.error || 'Planner failed',
183
+ };
184
+ }
185
+ totalCost += 0.01;
186
+ const totalDurationMs = Date.now() - startTime;
187
+ const result = {
188
+ success: true,
189
+ items: plannerResult.items,
190
+ costUsd: totalCost,
191
+ metadata: {
192
+ researchResult: researchResult.success ? researchResult : undefined,
193
+ plannerGaps: plannerResult.gaps || [],
194
+ plannerWarnings: plannerResult.warnings || [],
195
+ totalDurationMs,
196
+ },
197
+ };
198
+ this.saveFinalResult(result);
199
+ return result;
200
+ }
201
+ catch (err) {
202
+ return {
203
+ success: false,
204
+ error: err instanceof Error ? err.message : String(err),
205
+ };
206
+ }
207
+ }
208
+ formatResearchContext(research) {
209
+ if (!research.success)
210
+ return '';
211
+ const parts = ['## Research Context\n'];
212
+ if (research.findings.externalResources.length > 0) {
213
+ parts.push('### External Resources');
214
+ for (const r of research.findings.externalResources.slice(0, 5)) {
215
+ parts.push(`- ${r.title}${r.url ? ` (${r.url})` : ''}`);
216
+ if (r.keyInsights.length > 0) {
217
+ parts.push(` Key insights: ${r.keyInsights.slice(0, 3).join(', ')}`);
218
+ }
219
+ }
220
+ parts.push('');
221
+ }
222
+ if (research.findings.codebasePatterns.length > 0) {
223
+ parts.push('### Existing Codebase Patterns');
224
+ for (const p of research.findings.codebasePatterns.slice(0, 5)) {
225
+ parts.push(`- ${p.pattern} at ${p.location}`);
226
+ }
227
+ parts.push('');
228
+ }
229
+ if (research.findings.technicalRecommendations.length > 0) {
230
+ parts.push('### Recommendations');
231
+ for (const r of research.findings.technicalRecommendations.slice(0, 5)) {
232
+ parts.push(`- ${r}`);
233
+ }
234
+ parts.push('');
235
+ }
236
+ return parts.join('\n');
237
+ }
238
+ async runResearchAgent(taskDescription, _onProgress, onSubagent) {
239
+ const agentId = `research-${Date.now()}`;
240
+ const startTime = Date.now();
241
+ if (this.cancelled) {
242
+ return {
243
+ success: false,
244
+ findings: {
245
+ externalResources: [],
246
+ codebasePatterns: [],
247
+ technicalRecommendations: [],
248
+ potentialChallenges: [],
249
+ recommendedTools: [],
250
+ },
251
+ enrichedTaskDescription: taskDescription,
252
+ error: 'Cancelled',
253
+ durationMs: 0,
254
+ };
255
+ }
256
+ onSubagent?.({
257
+ type: 'started',
258
+ agentId,
259
+ agentType: 'research',
260
+ model: this.researchModel,
261
+ status: 'running',
262
+ detail: 'Researching...',
263
+ });
264
+ const session = new Session({
265
+ workingDir: this.workingDir,
266
+ mux: this.mux,
267
+ useMux: false,
268
+ mode: 'claude',
269
+ });
270
+ this.runningSessions.add(session);
271
+ const prompt = RESEARCH_AGENT_PROMPT.replace('{TASK}', taskDescription).replace('{WORKING_DIR}', this.workingDir);
272
+ // Start progress interval before try block to ensure cleanup in finally
273
+ const progressInterval = setInterval(() => {
274
+ const elapsed = Math.floor((Date.now() - startTime) / 1000);
275
+ onSubagent?.({
276
+ type: 'progress',
277
+ agentId,
278
+ agentType: 'research',
279
+ model: this.researchModel,
280
+ status: 'running',
281
+ detail: `${elapsed}s elapsed`,
282
+ });
283
+ }, 30000);
284
+ try {
285
+ const { result: response } = await session.runPrompt(prompt, { model: this.researchModel });
286
+ const durationMs = Date.now() - startTime;
287
+ // Extract JSON from response
288
+ const jsonMatch = response.match(/\{[\s\S]*\}/);
289
+ if (!jsonMatch) {
290
+ onSubagent?.({
291
+ type: 'failed',
292
+ agentId,
293
+ agentType: 'research',
294
+ model: this.researchModel,
295
+ status: 'failed',
296
+ error: 'No JSON found',
297
+ durationMs,
298
+ });
299
+ return {
300
+ success: false,
301
+ findings: {
302
+ externalResources: [],
303
+ codebasePatterns: [],
304
+ technicalRecommendations: [],
305
+ potentialChallenges: [],
306
+ recommendedTools: [],
307
+ },
308
+ enrichedTaskDescription: taskDescription,
309
+ error: 'No JSON in response',
310
+ durationMs,
311
+ };
312
+ }
313
+ const parsed = tryParseJSON(jsonMatch[0]);
314
+ if (!parsed.success) {
315
+ onSubagent?.({
316
+ type: 'failed',
317
+ agentId,
318
+ agentType: 'research',
319
+ model: this.researchModel,
320
+ status: 'failed',
321
+ error: parsed.error,
322
+ durationMs,
323
+ });
324
+ return {
325
+ success: false,
326
+ findings: {
327
+ externalResources: [],
328
+ codebasePatterns: [],
329
+ technicalRecommendations: [],
330
+ potentialChallenges: [],
331
+ recommendedTools: [],
332
+ },
333
+ enrichedTaskDescription: taskDescription,
334
+ error: parsed.error,
335
+ durationMs,
336
+ };
337
+ }
338
+ const data = parsed.data;
339
+ const result = {
340
+ success: true,
341
+ findings: {
342
+ externalResources: Array.isArray(data.externalResources) ? data.externalResources : [],
343
+ codebasePatterns: Array.isArray(data.codebasePatterns) ? data.codebasePatterns : [],
344
+ technicalRecommendations: Array.isArray(data.technicalRecommendations) ? data.technicalRecommendations : [],
345
+ potentialChallenges: Array.isArray(data.potentialChallenges) ? data.potentialChallenges : [],
346
+ recommendedTools: Array.isArray(data.recommendedTools) ? data.recommendedTools : [],
347
+ },
348
+ enrichedTaskDescription: typeof data.enrichedTaskDescription === 'string' ? data.enrichedTaskDescription : taskDescription,
349
+ durationMs,
350
+ };
351
+ this.saveAgentOutput('research', prompt, result, durationMs);
352
+ onSubagent?.({
353
+ type: 'completed',
354
+ agentId,
355
+ agentType: 'research',
356
+ model: this.researchModel,
357
+ status: 'completed',
358
+ durationMs,
359
+ });
360
+ return result;
361
+ }
362
+ catch (err) {
363
+ const durationMs = Date.now() - startTime;
364
+ const error = err instanceof Error ? err.message : String(err);
365
+ onSubagent?.({
366
+ type: 'failed',
367
+ agentId,
368
+ agentType: 'research',
369
+ model: this.researchModel,
370
+ status: 'failed',
371
+ error,
372
+ durationMs,
373
+ });
374
+ return {
375
+ success: false,
376
+ findings: {
377
+ externalResources: [],
378
+ codebasePatterns: [],
379
+ technicalRecommendations: [],
380
+ potentialChallenges: [],
381
+ recommendedTools: [],
382
+ },
383
+ enrichedTaskDescription: taskDescription,
384
+ error,
385
+ durationMs,
386
+ };
387
+ }
388
+ finally {
389
+ // Always clean up session and progress interval — centralizing here
390
+ // prevents the race where cancel() and catch both try to manage the set
391
+ await session.stop().catch(() => { });
392
+ this.runningSessions.delete(session);
393
+ clearInterval(progressInterval);
394
+ }
395
+ }
396
+ async runPlannerAgent(taskDescription, researchContext, onProgress, onSubagent) {
397
+ const agentId = `planner-${Date.now()}`;
398
+ const startTime = Date.now();
399
+ if (this.cancelled) {
400
+ return { success: false, error: 'Cancelled' };
401
+ }
402
+ onSubagent?.({
403
+ type: 'started',
404
+ agentId,
405
+ agentType: 'planner',
406
+ model: this.plannerModel,
407
+ status: 'running',
408
+ detail: 'Generating plan...',
409
+ });
410
+ const session = new Session({
411
+ workingDir: this.workingDir,
412
+ mux: this.mux,
413
+ useMux: false,
414
+ mode: 'claude',
415
+ });
416
+ this.runningSessions.add(session);
417
+ const prompt = PLANNER_PROMPT.replace('{TASK}', taskDescription).replace('{RESEARCH_CONTEXT}', researchContext || '');
418
+ // Start progress interval before try block to ensure cleanup in finally
419
+ const progressInterval = setInterval(() => {
420
+ const elapsed = Math.floor((Date.now() - startTime) / 1000);
421
+ onSubagent?.({
422
+ type: 'progress',
423
+ agentId,
424
+ agentType: 'planner',
425
+ model: this.plannerModel,
426
+ status: 'running',
427
+ detail: `${elapsed}s elapsed`,
428
+ });
429
+ }, 30000);
430
+ try {
431
+ const { result: response } = await session.runPrompt(prompt, { model: this.plannerModel });
432
+ const durationMs = Date.now() - startTime;
433
+ // Extract JSON from response
434
+ const jsonMatch = response.match(/\{[\s\S]*\}/);
435
+ if (!jsonMatch) {
436
+ onSubagent?.({
437
+ type: 'failed',
438
+ agentId,
439
+ agentType: 'planner',
440
+ model: this.plannerModel,
441
+ status: 'failed',
442
+ error: 'No JSON found',
443
+ durationMs,
444
+ });
445
+ return { success: false, error: 'No JSON in response' };
446
+ }
447
+ const parsed = tryParseJSON(jsonMatch[0]);
448
+ if (!parsed.success) {
449
+ onSubagent?.({
450
+ type: 'failed',
451
+ agentId,
452
+ agentType: 'planner',
453
+ model: this.plannerModel,
454
+ status: 'failed',
455
+ error: parsed.error,
456
+ durationMs,
457
+ });
458
+ return { success: false, error: parsed.error };
459
+ }
460
+ const data = parsed.data;
461
+ const items = Array.isArray(data.items) ? data.items : [];
462
+ const gaps = Array.isArray(data.gaps) ? data.gaps : [];
463
+ const warnings = Array.isArray(data.warnings) ? data.warnings : [];
464
+ this.saveAgentOutput('planner', prompt, { items, gaps, warnings }, durationMs);
465
+ onSubagent?.({
466
+ type: 'completed',
467
+ agentId,
468
+ agentType: 'planner',
469
+ model: this.plannerModel,
470
+ status: 'completed',
471
+ itemCount: items.length,
472
+ durationMs,
473
+ });
474
+ onProgress?.('planning', `Generated ${items.length} tasks`);
475
+ return { success: true, items, gaps, warnings };
476
+ }
477
+ catch (err) {
478
+ const durationMs = Date.now() - startTime;
479
+ const error = err instanceof Error ? err.message : String(err);
480
+ onSubagent?.({
481
+ type: 'failed',
482
+ agentId,
483
+ agentType: 'planner',
484
+ model: this.plannerModel,
485
+ status: 'failed',
486
+ error,
487
+ durationMs,
488
+ });
489
+ return { success: false, error };
490
+ }
491
+ finally {
492
+ // Always clean up session and progress interval — centralizing here
493
+ // prevents the race where cancel() and catch both try to manage the set
494
+ await session.stop().catch(() => { });
495
+ this.runningSessions.delete(session);
496
+ clearInterval(progressInterval);
497
+ }
498
+ }
499
+ }
500
+ //# sourceMappingURL=plan-orchestrator.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"plan-orchestrator.js","sourceRoot":"","sources":["../src/plan-orchestrator.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,9 @@
1
+ /**
2
+ * @fileoverview Plan Orchestrator Prompts
3
+ *
4
+ * Each prompt is in its own file for easy editing and iteration.
5
+ * Import from here for convenience.
6
+ */
7
+ export { RESEARCH_AGENT_PROMPT } from './research-agent.js';
8
+ export { PLANNER_PROMPT } from './planner.js';
9
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/prompts/index.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAE,qBAAqB,EAAE,MAAM,qBAAqB,CAAC;AAC5D,OAAO,EAAE,cAAc,EAAE,MAAM,cAAc,CAAC"}
@@ -0,0 +1,9 @@
1
+ /**
2
+ * @fileoverview Plan Orchestrator Prompts
3
+ *
4
+ * Each prompt is in its own file for easy editing and iteration.
5
+ * Import from here for convenience.
6
+ */
7
+ export { RESEARCH_AGENT_PROMPT } from './research-agent.js';
8
+ export { PLANNER_PROMPT } from './planner.js';
9
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/prompts/index.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAE,qBAAqB,EAAE,MAAM,qBAAqB,CAAC;AAC5D,OAAO,EAAE,cAAc,EAAE,MAAM,cAAc,CAAC"}
@@ -0,0 +1,14 @@
1
+ /**
2
+ * Planner Prompt - Single agent for TDD plan generation
3
+ *
4
+ * Combines what was previously 5 separate agents:
5
+ * - Requirements Analyst (redundant)
6
+ * - Architecture Planner (redundant)
7
+ * - Testing Specialist (kept - TDD focus)
8
+ * - Risk Analyst (redundant)
9
+ * - Verification Expert (kept - structure)
10
+ *
11
+ * Placeholders: {TASK}, {RESEARCH_CONTEXT}
12
+ */
13
+ export declare const PLANNER_PROMPT = "You are a TDD Plan Generator. Create a complete implementation plan with test-first approach.\n\n## TASK DESCRIPTION\n{TASK}\n\n{RESEARCH_CONTEXT}\n\n## YOUR MISSION\nGenerate a complete TDD implementation plan with:\n1. Tests BEFORE implementations (red-green-refactor)\n2. Review tasks AFTER implementations\n3. Clear priorities (P0=blocking, P1=required, P2=polish)\n4. Dependencies between tasks\n\n## TDD CYCLE\nFor each feature:\n1. Write failing test first\n2. Implement to make test pass\n3. Review implementation\n\n## PRIORITY GUIDELINES\n- P0: Foundation, types, project setup, blocking dependencies\n- P1: Core features, main implementation, error handling\n- P2: Polish, optimization, documentation\n\n## OUTPUT FORMAT\nReturn ONLY a JSON object:\n{\n \"items\": [\n {\n \"id\": \"P0-001\",\n \"content\": \"Write failing test for user authentication endpoint\",\n \"priority\": \"P0\",\n \"tddPhase\": \"test\",\n \"verificationCriteria\": \"Test file exists, test fails with 'not implemented'\",\n \"testCommand\": \"npm test -- --grep='auth'\",\n \"dependencies\": []\n },\n {\n \"id\": \"P0-002\",\n \"content\": \"Implement user authentication handler\",\n \"priority\": \"P0\",\n \"tddPhase\": \"impl\",\n \"verificationCriteria\": \"npm test -- --grep='auth' passes\",\n \"pairedWith\": \"P0-001\",\n \"dependencies\": [\"P0-001\"]\n },\n {\n \"id\": \"P0-003\",\n \"content\": \"Review auth implementation for security\",\n \"priority\": \"P0\",\n \"tddPhase\": \"review\",\n \"verificationCriteria\": \"No security issues, follows best practices\",\n \"reviewChecklist\": [\"Input validation\", \"XSS prevention\", \"Error handling\"],\n \"pairedWith\": \"P0-002\",\n \"dependencies\": [\"P0-002\"]\n }\n ],\n \"gaps\": [\"any missing requirements noted\"],\n \"warnings\": [\"any concerns or risks identified\"]\n}\n\nCRITICAL REQUIREMENTS:\n1. Every implementation MUST have a paired test task that comes BEFORE it\n2. Every implementation MUST have a review task that comes AFTER it\n3. Use sequential IDs: P0-001, P0-002, P1-001, etc.\n4. verificationCriteria must be SPECIFIC and observable\n5. Dependencies must form a valid DAG (no cycles)\n\nGenerate 15-40 items covering the complete implementation.";
14
+ //# sourceMappingURL=planner.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"planner.d.ts","sourceRoot":"","sources":["../../src/prompts/planner.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAEH,eAAO,MAAM,cAAc,+zEAqEgC,CAAC"}
@@ -0,0 +1,83 @@
1
+ /**
2
+ * Planner Prompt - Single agent for TDD plan generation
3
+ *
4
+ * Combines what was previously 5 separate agents:
5
+ * - Requirements Analyst (redundant)
6
+ * - Architecture Planner (redundant)
7
+ * - Testing Specialist (kept - TDD focus)
8
+ * - Risk Analyst (redundant)
9
+ * - Verification Expert (kept - structure)
10
+ *
11
+ * Placeholders: {TASK}, {RESEARCH_CONTEXT}
12
+ */
13
+ export const PLANNER_PROMPT = `You are a TDD Plan Generator. Create a complete implementation plan with test-first approach.
14
+
15
+ ## TASK DESCRIPTION
16
+ {TASK}
17
+
18
+ {RESEARCH_CONTEXT}
19
+
20
+ ## YOUR MISSION
21
+ Generate a complete TDD implementation plan with:
22
+ 1. Tests BEFORE implementations (red-green-refactor)
23
+ 2. Review tasks AFTER implementations
24
+ 3. Clear priorities (P0=blocking, P1=required, P2=polish)
25
+ 4. Dependencies between tasks
26
+
27
+ ## TDD CYCLE
28
+ For each feature:
29
+ 1. Write failing test first
30
+ 2. Implement to make test pass
31
+ 3. Review implementation
32
+
33
+ ## PRIORITY GUIDELINES
34
+ - P0: Foundation, types, project setup, blocking dependencies
35
+ - P1: Core features, main implementation, error handling
36
+ - P2: Polish, optimization, documentation
37
+
38
+ ## OUTPUT FORMAT
39
+ Return ONLY a JSON object:
40
+ {
41
+ "items": [
42
+ {
43
+ "id": "P0-001",
44
+ "content": "Write failing test for user authentication endpoint",
45
+ "priority": "P0",
46
+ "tddPhase": "test",
47
+ "verificationCriteria": "Test file exists, test fails with 'not implemented'",
48
+ "testCommand": "npm test -- --grep='auth'",
49
+ "dependencies": []
50
+ },
51
+ {
52
+ "id": "P0-002",
53
+ "content": "Implement user authentication handler",
54
+ "priority": "P0",
55
+ "tddPhase": "impl",
56
+ "verificationCriteria": "npm test -- --grep='auth' passes",
57
+ "pairedWith": "P0-001",
58
+ "dependencies": ["P0-001"]
59
+ },
60
+ {
61
+ "id": "P0-003",
62
+ "content": "Review auth implementation for security",
63
+ "priority": "P0",
64
+ "tddPhase": "review",
65
+ "verificationCriteria": "No security issues, follows best practices",
66
+ "reviewChecklist": ["Input validation", "XSS prevention", "Error handling"],
67
+ "pairedWith": "P0-002",
68
+ "dependencies": ["P0-002"]
69
+ }
70
+ ],
71
+ "gaps": ["any missing requirements noted"],
72
+ "warnings": ["any concerns or risks identified"]
73
+ }
74
+
75
+ CRITICAL REQUIREMENTS:
76
+ 1. Every implementation MUST have a paired test task that comes BEFORE it
77
+ 2. Every implementation MUST have a review task that comes AFTER it
78
+ 3. Use sequential IDs: P0-001, P0-002, P1-001, etc.
79
+ 4. verificationCriteria must be SPECIFIC and observable
80
+ 5. Dependencies must form a valid DAG (no cycles)
81
+
82
+ Generate 15-40 items covering the complete implementation.`;
83
+ //# sourceMappingURL=planner.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"planner.js","sourceRoot":"","sources":["../../src/prompts/planner.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAEH,MAAM,CAAC,MAAM,cAAc,GAAG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2DAqE6B,CAAC"}