wiggum-cli 0.11.26 → 0.12.1

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 (476) hide show
  1. package/README.md +2 -1
  2. package/dist/ai/agents/codebase-analyst.d.ts +0 -1
  3. package/dist/ai/agents/codebase-analyst.js +0 -1
  4. package/dist/ai/agents/codebase-analyzer.d.ts +0 -1
  5. package/dist/ai/agents/codebase-analyzer.js +0 -1
  6. package/dist/ai/agents/context-enricher.d.ts +0 -1
  7. package/dist/ai/agents/context-enricher.js +0 -1
  8. package/dist/ai/agents/evaluator-optimizer.d.ts +0 -1
  9. package/dist/ai/agents/evaluator-optimizer.js +0 -1
  10. package/dist/ai/agents/index.d.ts +0 -1
  11. package/dist/ai/agents/index.js +0 -1
  12. package/dist/ai/agents/mcp-detector.d.ts +0 -1
  13. package/dist/ai/agents/mcp-detector.js +0 -1
  14. package/dist/ai/agents/orchestrator.d.ts +0 -1
  15. package/dist/ai/agents/orchestrator.js +0 -1
  16. package/dist/ai/agents/planning-orchestrator.d.ts +0 -1
  17. package/dist/ai/agents/planning-orchestrator.js +0 -1
  18. package/dist/ai/agents/stack-researcher.d.ts +0 -1
  19. package/dist/ai/agents/stack-researcher.js +0 -1
  20. package/dist/ai/agents/stack-utils.d.ts +0 -1
  21. package/dist/ai/agents/stack-utils.js +0 -1
  22. package/dist/ai/agents/synthesis-agent.d.ts +0 -1
  23. package/dist/ai/agents/synthesis-agent.js +0 -1
  24. package/dist/ai/agents/tech-researcher.d.ts +0 -1
  25. package/dist/ai/agents/tech-researcher.js +0 -1
  26. package/dist/ai/agents/types.d.ts +0 -1
  27. package/dist/ai/agents/types.js +0 -1
  28. package/dist/ai/conversation/conversation-manager.d.ts +0 -1
  29. package/dist/ai/conversation/conversation-manager.js +0 -1
  30. package/dist/ai/conversation/index.d.ts +0 -1
  31. package/dist/ai/conversation/index.js +0 -1
  32. package/dist/ai/conversation/interview-tools.d.ts +0 -1
  33. package/dist/ai/conversation/interview-tools.js +0 -1
  34. package/dist/ai/conversation/spec-generator.d.ts +0 -1
  35. package/dist/ai/conversation/spec-generator.js +0 -1
  36. package/dist/ai/conversation/url-fetcher.d.ts +0 -1
  37. package/dist/ai/conversation/url-fetcher.js +0 -1
  38. package/dist/ai/enhancer.d.ts +0 -1
  39. package/dist/ai/enhancer.js +0 -1
  40. package/dist/ai/index.d.ts +0 -1
  41. package/dist/ai/index.js +0 -1
  42. package/dist/ai/prompts.d.ts +0 -1
  43. package/dist/ai/prompts.js +0 -1
  44. package/dist/ai/providers.d.ts +0 -1
  45. package/dist/ai/providers.js +0 -1
  46. package/dist/ai/tools/context7.d.ts +0 -1
  47. package/dist/ai/tools/context7.js +0 -1
  48. package/dist/ai/tools/index.d.ts +0 -1
  49. package/dist/ai/tools/index.js +0 -1
  50. package/dist/ai/tools/tavily.d.ts +0 -1
  51. package/dist/ai/tools/tavily.js +0 -1
  52. package/dist/ai/tools.d.ts +0 -1
  53. package/dist/ai/tools.js +0 -1
  54. package/dist/commands/config.d.ts +0 -1
  55. package/dist/commands/config.js +0 -1
  56. package/dist/commands/init.d.ts +0 -1
  57. package/dist/commands/init.js +0 -1
  58. package/dist/commands/monitor.d.ts +0 -1
  59. package/dist/commands/monitor.js +3 -2
  60. package/dist/commands/new.d.ts +0 -1
  61. package/dist/commands/new.js +0 -1
  62. package/dist/commands/run.d.ts +1 -1
  63. package/dist/commands/run.js +8 -1
  64. package/dist/context/convert.d.ts +0 -1
  65. package/dist/context/convert.js +0 -1
  66. package/dist/context/index.d.ts +0 -1
  67. package/dist/context/index.js +0 -1
  68. package/dist/context/storage.d.ts +0 -1
  69. package/dist/context/storage.js +0 -1
  70. package/dist/context/types.d.ts +0 -1
  71. package/dist/context/types.js +0 -1
  72. package/dist/generator/config.d.ts +0 -1
  73. package/dist/generator/config.js +0 -1
  74. package/dist/generator/index.d.ts +0 -1
  75. package/dist/generator/index.js +0 -1
  76. package/dist/generator/templates.d.ts +0 -1
  77. package/dist/generator/templates.js +0 -1
  78. package/dist/generator/writer.d.ts +0 -1
  79. package/dist/generator/writer.js +0 -1
  80. package/dist/index.d.ts +0 -1
  81. package/dist/index.js +0 -1
  82. package/dist/repl/command-parser.d.ts +0 -1
  83. package/dist/repl/command-parser.js +0 -1
  84. package/dist/repl/index.d.ts +0 -1
  85. package/dist/repl/index.js +0 -1
  86. package/dist/repl/session-state.d.ts +0 -1
  87. package/dist/repl/session-state.js +0 -1
  88. package/dist/scanner/detectors/core/framework.d.ts +0 -1
  89. package/dist/scanner/detectors/core/framework.js +0 -1
  90. package/dist/scanner/detectors/core/packageManager.d.ts +0 -1
  91. package/dist/scanner/detectors/core/packageManager.js +0 -1
  92. package/dist/scanner/detectors/core/styling.d.ts +0 -1
  93. package/dist/scanner/detectors/core/styling.js +0 -1
  94. package/dist/scanner/detectors/core/testing.d.ts +0 -1
  95. package/dist/scanner/detectors/core/testing.js +0 -1
  96. package/dist/scanner/detectors/data/api.d.ts +0 -1
  97. package/dist/scanner/detectors/data/api.js +0 -1
  98. package/dist/scanner/detectors/data/database.d.ts +0 -1
  99. package/dist/scanner/detectors/data/database.js +0 -1
  100. package/dist/scanner/detectors/data/orm.d.ts +0 -1
  101. package/dist/scanner/detectors/data/orm.js +0 -1
  102. package/dist/scanner/detectors/frontend/formHandling.d.ts +0 -1
  103. package/dist/scanner/detectors/frontend/formHandling.js +0 -1
  104. package/dist/scanner/detectors/frontend/stateManagement.d.ts +0 -1
  105. package/dist/scanner/detectors/frontend/stateManagement.js +0 -1
  106. package/dist/scanner/detectors/frontend/uiComponents.d.ts +0 -1
  107. package/dist/scanner/detectors/frontend/uiComponents.js +0 -1
  108. package/dist/scanner/detectors/infra/deployment.d.ts +0 -1
  109. package/dist/scanner/detectors/infra/deployment.js +0 -1
  110. package/dist/scanner/detectors/infra/monorepo.d.ts +0 -1
  111. package/dist/scanner/detectors/infra/monorepo.js +0 -1
  112. package/dist/scanner/detectors/mcp/mcpProject.d.ts +0 -1
  113. package/dist/scanner/detectors/mcp/mcpProject.js +0 -1
  114. package/dist/scanner/detectors/mcp/mcpServers.d.ts +0 -1
  115. package/dist/scanner/detectors/mcp/mcpServers.js +0 -1
  116. package/dist/scanner/detectors/services/analytics.d.ts +0 -1
  117. package/dist/scanner/detectors/services/analytics.js +0 -1
  118. package/dist/scanner/detectors/services/auth.d.ts +0 -1
  119. package/dist/scanner/detectors/services/auth.js +0 -1
  120. package/dist/scanner/detectors/services/email.d.ts +0 -1
  121. package/dist/scanner/detectors/services/email.js +0 -1
  122. package/dist/scanner/detectors/services/payments.d.ts +0 -1
  123. package/dist/scanner/detectors/services/payments.js +0 -1
  124. package/dist/scanner/detectors/utils.d.ts +0 -1
  125. package/dist/scanner/detectors/utils.js +0 -1
  126. package/dist/scanner/index.d.ts +0 -1
  127. package/dist/scanner/index.js +0 -1
  128. package/dist/scanner/registry.d.ts +0 -1
  129. package/dist/scanner/registry.js +0 -1
  130. package/dist/scanner/types.d.ts +0 -1
  131. package/dist/scanner/types.js +0 -1
  132. package/dist/templates/config/ralph.config.cjs.tmpl +1 -0
  133. package/dist/templates/prompts/PROMPT_review_manual.md.tmpl +96 -0
  134. package/dist/templates/root/README.md.tmpl +7 -6
  135. package/dist/templates/scripts/feature-loop.sh.tmpl +34 -5
  136. package/dist/templates/scripts/ralph-monitor.sh.tmpl +3 -1
  137. package/dist/tui/app.d.ts +0 -1
  138. package/dist/tui/app.js +3 -1
  139. package/dist/tui/components/ActionOutput.d.ts +0 -1
  140. package/dist/tui/components/ActionOutput.js +0 -1
  141. package/dist/tui/components/ChatInput.d.ts +0 -1
  142. package/dist/tui/components/ChatInput.js +0 -1
  143. package/dist/tui/components/CommandDropdown.d.ts +0 -1
  144. package/dist/tui/components/CommandDropdown.js +0 -1
  145. package/dist/tui/components/Confirm.d.ts +0 -1
  146. package/dist/tui/components/Confirm.js +0 -1
  147. package/dist/tui/components/ErrorCard.d.ts +0 -1
  148. package/dist/tui/components/ErrorCard.js +0 -1
  149. package/dist/tui/components/FooterStatusBar.d.ts +0 -1
  150. package/dist/tui/components/FooterStatusBar.js +0 -1
  151. package/dist/tui/components/MessageList.d.ts +0 -1
  152. package/dist/tui/components/MessageList.js +0 -1
  153. package/dist/tui/components/MultiSelect.d.ts +0 -1
  154. package/dist/tui/components/MultiSelect.js +0 -1
  155. package/dist/tui/components/PasswordInput.d.ts +0 -1
  156. package/dist/tui/components/PasswordInput.js +0 -1
  157. package/dist/tui/components/PhaseHeader.d.ts +0 -1
  158. package/dist/tui/components/PhaseHeader.js +0 -1
  159. package/dist/tui/components/Select.d.ts +0 -1
  160. package/dist/tui/components/Select.js +0 -1
  161. package/dist/tui/components/StatusLine.d.ts +0 -1
  162. package/dist/tui/components/StatusLine.js +0 -1
  163. package/dist/tui/components/StreamingText.d.ts +0 -1
  164. package/dist/tui/components/StreamingText.js +0 -1
  165. package/dist/tui/components/ToolCallCard.d.ts +0 -1
  166. package/dist/tui/components/ToolCallCard.js +0 -1
  167. package/dist/tui/components/WiggumBanner.d.ts +0 -1
  168. package/dist/tui/components/WiggumBanner.js +1 -3
  169. package/dist/tui/components/WorkingIndicator.d.ts +0 -1
  170. package/dist/tui/components/WorkingIndicator.js +0 -1
  171. package/dist/tui/components/index.d.ts +0 -1
  172. package/dist/tui/components/index.js +0 -1
  173. package/dist/tui/hooks/index.d.ts +0 -1
  174. package/dist/tui/hooks/index.js +0 -1
  175. package/dist/tui/hooks/useCommandHistory.d.ts +0 -1
  176. package/dist/tui/hooks/useCommandHistory.js +0 -1
  177. package/dist/tui/hooks/useInit.d.ts +0 -1
  178. package/dist/tui/hooks/useInit.js +0 -1
  179. package/dist/tui/hooks/useSpecGenerator.d.ts +0 -1
  180. package/dist/tui/hooks/useSpecGenerator.js +0 -1
  181. package/dist/tui/hooks/useSync.d.ts +0 -1
  182. package/dist/tui/hooks/useSync.js +0 -1
  183. package/dist/tui/index.d.ts +0 -1
  184. package/dist/tui/index.js +0 -1
  185. package/dist/tui/orchestration/index.d.ts +0 -1
  186. package/dist/tui/orchestration/index.js +0 -1
  187. package/dist/tui/orchestration/interview-orchestrator.d.ts +0 -1
  188. package/dist/tui/orchestration/interview-orchestrator.js +0 -1
  189. package/dist/tui/screens/InitScreen.d.ts +0 -1
  190. package/dist/tui/screens/InitScreen.js +0 -1
  191. package/dist/tui/screens/InterviewScreen.d.ts +0 -1
  192. package/dist/tui/screens/InterviewScreen.js +0 -1
  193. package/dist/tui/screens/MainShell.d.ts +0 -1
  194. package/dist/tui/screens/MainShell.js +0 -1
  195. package/dist/tui/screens/RunScreen.d.ts +0 -1
  196. package/dist/tui/screens/RunScreen.js +8 -1
  197. package/dist/tui/screens/WelcomeScreen.d.ts +0 -1
  198. package/dist/tui/screens/WelcomeScreen.js +0 -1
  199. package/dist/tui/screens/index.d.ts +0 -1
  200. package/dist/tui/screens/index.js +0 -1
  201. package/dist/tui/theme.d.ts +0 -1
  202. package/dist/tui/theme.js +0 -1
  203. package/dist/tui/types/interview.d.ts +0 -1
  204. package/dist/tui/types/interview.js +0 -1
  205. package/dist/tui/utils/input-utils.d.ts +0 -1
  206. package/dist/tui/utils/input-utils.js +0 -1
  207. package/dist/tui/utils/loop-status.d.ts +0 -1
  208. package/dist/tui/utils/loop-status.js +3 -2
  209. package/dist/utils/colors.d.ts +0 -1
  210. package/dist/utils/colors.js +0 -1
  211. package/dist/utils/config.d.ts +1 -1
  212. package/dist/utils/config.js +2 -1
  213. package/dist/utils/env.d.ts +0 -1
  214. package/dist/utils/env.js +0 -1
  215. package/dist/utils/header.d.ts +0 -1
  216. package/dist/utils/header.js +0 -1
  217. package/dist/utils/json-repair.d.ts +0 -1
  218. package/dist/utils/json-repair.js +0 -1
  219. package/dist/utils/logger.d.ts +0 -1
  220. package/dist/utils/logger.js +0 -1
  221. package/dist/utils/spinner.d.ts +0 -1
  222. package/dist/utils/spinner.js +0 -1
  223. package/dist/utils/tracing.d.ts +0 -1
  224. package/dist/utils/tracing.js +0 -1
  225. package/dist/utils/tui.d.ts +0 -1
  226. package/dist/utils/tui.js +0 -1
  227. package/dist/utils/update-check.d.ts +0 -1
  228. package/dist/utils/update-check.js +0 -1
  229. package/package.json +5 -5
  230. package/src/templates/config/ralph.config.cjs.tmpl +1 -0
  231. package/src/templates/prompts/PROMPT_review_manual.md.tmpl +96 -0
  232. package/src/templates/root/README.md.tmpl +7 -6
  233. package/src/templates/scripts/feature-loop.sh.tmpl +34 -5
  234. package/src/templates/scripts/ralph-monitor.sh.tmpl +3 -1
  235. package/CONTRIBUTING.md +0 -162
  236. package/dist/ai/agents/codebase-analyst.d.ts.map +0 -1
  237. package/dist/ai/agents/codebase-analyst.js.map +0 -1
  238. package/dist/ai/agents/codebase-analyzer.d.ts.map +0 -1
  239. package/dist/ai/agents/codebase-analyzer.js.map +0 -1
  240. package/dist/ai/agents/context-enricher.d.ts.map +0 -1
  241. package/dist/ai/agents/context-enricher.js.map +0 -1
  242. package/dist/ai/agents/evaluator-optimizer.d.ts.map +0 -1
  243. package/dist/ai/agents/evaluator-optimizer.js.map +0 -1
  244. package/dist/ai/agents/index.d.ts.map +0 -1
  245. package/dist/ai/agents/index.js.map +0 -1
  246. package/dist/ai/agents/mcp-detector.d.ts.map +0 -1
  247. package/dist/ai/agents/mcp-detector.js.map +0 -1
  248. package/dist/ai/agents/orchestrator.d.ts.map +0 -1
  249. package/dist/ai/agents/orchestrator.js.map +0 -1
  250. package/dist/ai/agents/planning-orchestrator.d.ts.map +0 -1
  251. package/dist/ai/agents/planning-orchestrator.js.map +0 -1
  252. package/dist/ai/agents/stack-researcher.d.ts.map +0 -1
  253. package/dist/ai/agents/stack-researcher.js.map +0 -1
  254. package/dist/ai/agents/stack-utils.d.ts.map +0 -1
  255. package/dist/ai/agents/stack-utils.js.map +0 -1
  256. package/dist/ai/agents/synthesis-agent.d.ts.map +0 -1
  257. package/dist/ai/agents/synthesis-agent.js.map +0 -1
  258. package/dist/ai/agents/tech-researcher.d.ts.map +0 -1
  259. package/dist/ai/agents/tech-researcher.js.map +0 -1
  260. package/dist/ai/agents/types.d.ts.map +0 -1
  261. package/dist/ai/agents/types.js.map +0 -1
  262. package/dist/ai/conversation/conversation-manager.d.ts.map +0 -1
  263. package/dist/ai/conversation/conversation-manager.js.map +0 -1
  264. package/dist/ai/conversation/index.d.ts.map +0 -1
  265. package/dist/ai/conversation/index.js.map +0 -1
  266. package/dist/ai/conversation/interview-tools.d.ts.map +0 -1
  267. package/dist/ai/conversation/interview-tools.js.map +0 -1
  268. package/dist/ai/conversation/spec-generator.d.ts.map +0 -1
  269. package/dist/ai/conversation/spec-generator.js.map +0 -1
  270. package/dist/ai/conversation/url-fetcher.d.ts.map +0 -1
  271. package/dist/ai/conversation/url-fetcher.js.map +0 -1
  272. package/dist/ai/enhancer.d.ts.map +0 -1
  273. package/dist/ai/enhancer.js.map +0 -1
  274. package/dist/ai/index.d.ts.map +0 -1
  275. package/dist/ai/index.js.map +0 -1
  276. package/dist/ai/prompts.d.ts.map +0 -1
  277. package/dist/ai/prompts.js.map +0 -1
  278. package/dist/ai/providers.d.ts.map +0 -1
  279. package/dist/ai/providers.js.map +0 -1
  280. package/dist/ai/tools/context7.d.ts.map +0 -1
  281. package/dist/ai/tools/context7.js.map +0 -1
  282. package/dist/ai/tools/index.d.ts.map +0 -1
  283. package/dist/ai/tools/index.js.map +0 -1
  284. package/dist/ai/tools/tavily.d.ts.map +0 -1
  285. package/dist/ai/tools/tavily.js.map +0 -1
  286. package/dist/ai/tools.d.ts.map +0 -1
  287. package/dist/ai/tools.js.map +0 -1
  288. package/dist/cli.d.ts +0 -6
  289. package/dist/cli.d.ts.map +0 -1
  290. package/dist/cli.js +0 -212
  291. package/dist/cli.js.map +0 -1
  292. package/dist/commands/config.d.ts.map +0 -1
  293. package/dist/commands/config.js.map +0 -1
  294. package/dist/commands/init.d.ts.map +0 -1
  295. package/dist/commands/init.js.map +0 -1
  296. package/dist/commands/monitor.d.ts.map +0 -1
  297. package/dist/commands/monitor.js.map +0 -1
  298. package/dist/commands/new.d.ts.map +0 -1
  299. package/dist/commands/new.js.map +0 -1
  300. package/dist/commands/run.d.ts.map +0 -1
  301. package/dist/commands/run.js.map +0 -1
  302. package/dist/context/convert.d.ts.map +0 -1
  303. package/dist/context/convert.js.map +0 -1
  304. package/dist/context/index.d.ts.map +0 -1
  305. package/dist/context/index.js.map +0 -1
  306. package/dist/context/storage.d.ts.map +0 -1
  307. package/dist/context/storage.js.map +0 -1
  308. package/dist/context/types.d.ts.map +0 -1
  309. package/dist/context/types.js.map +0 -1
  310. package/dist/generator/config.d.ts.map +0 -1
  311. package/dist/generator/config.js.map +0 -1
  312. package/dist/generator/index.d.ts.map +0 -1
  313. package/dist/generator/index.js.map +0 -1
  314. package/dist/generator/templates.d.ts.map +0 -1
  315. package/dist/generator/templates.js.map +0 -1
  316. package/dist/generator/writer.d.ts.map +0 -1
  317. package/dist/generator/writer.js.map +0 -1
  318. package/dist/index.d.ts.map +0 -1
  319. package/dist/index.js.map +0 -1
  320. package/dist/repl/command-parser.d.ts.map +0 -1
  321. package/dist/repl/command-parser.js.map +0 -1
  322. package/dist/repl/index.d.ts.map +0 -1
  323. package/dist/repl/index.js.map +0 -1
  324. package/dist/repl/repl-loop.d.ts +0 -32
  325. package/dist/repl/repl-loop.d.ts.map +0 -1
  326. package/dist/repl/repl-loop.js +0 -309
  327. package/dist/repl/repl-loop.js.map +0 -1
  328. package/dist/repl/session-state.d.ts.map +0 -1
  329. package/dist/repl/session-state.js.map +0 -1
  330. package/dist/scanner/detectors/core/framework.d.ts.map +0 -1
  331. package/dist/scanner/detectors/core/framework.js.map +0 -1
  332. package/dist/scanner/detectors/core/packageManager.d.ts.map +0 -1
  333. package/dist/scanner/detectors/core/packageManager.js.map +0 -1
  334. package/dist/scanner/detectors/core/styling.d.ts.map +0 -1
  335. package/dist/scanner/detectors/core/styling.js.map +0 -1
  336. package/dist/scanner/detectors/core/testing.d.ts.map +0 -1
  337. package/dist/scanner/detectors/core/testing.js.map +0 -1
  338. package/dist/scanner/detectors/data/api.d.ts.map +0 -1
  339. package/dist/scanner/detectors/data/api.js.map +0 -1
  340. package/dist/scanner/detectors/data/database.d.ts.map +0 -1
  341. package/dist/scanner/detectors/data/database.js.map +0 -1
  342. package/dist/scanner/detectors/data/orm.d.ts.map +0 -1
  343. package/dist/scanner/detectors/data/orm.js.map +0 -1
  344. package/dist/scanner/detectors/frontend/formHandling.d.ts.map +0 -1
  345. package/dist/scanner/detectors/frontend/formHandling.js.map +0 -1
  346. package/dist/scanner/detectors/frontend/stateManagement.d.ts.map +0 -1
  347. package/dist/scanner/detectors/frontend/stateManagement.js.map +0 -1
  348. package/dist/scanner/detectors/frontend/uiComponents.d.ts.map +0 -1
  349. package/dist/scanner/detectors/frontend/uiComponents.js.map +0 -1
  350. package/dist/scanner/detectors/infra/deployment.d.ts.map +0 -1
  351. package/dist/scanner/detectors/infra/deployment.js.map +0 -1
  352. package/dist/scanner/detectors/infra/monorepo.d.ts.map +0 -1
  353. package/dist/scanner/detectors/infra/monorepo.js.map +0 -1
  354. package/dist/scanner/detectors/mcp/mcpProject.d.ts.map +0 -1
  355. package/dist/scanner/detectors/mcp/mcpProject.js.map +0 -1
  356. package/dist/scanner/detectors/mcp/mcpServers.d.ts.map +0 -1
  357. package/dist/scanner/detectors/mcp/mcpServers.js.map +0 -1
  358. package/dist/scanner/detectors/services/analytics.d.ts.map +0 -1
  359. package/dist/scanner/detectors/services/analytics.js.map +0 -1
  360. package/dist/scanner/detectors/services/auth.d.ts.map +0 -1
  361. package/dist/scanner/detectors/services/auth.js.map +0 -1
  362. package/dist/scanner/detectors/services/email.d.ts.map +0 -1
  363. package/dist/scanner/detectors/services/email.js.map +0 -1
  364. package/dist/scanner/detectors/services/payments.d.ts.map +0 -1
  365. package/dist/scanner/detectors/services/payments.js.map +0 -1
  366. package/dist/scanner/detectors/utils.d.ts.map +0 -1
  367. package/dist/scanner/detectors/utils.js.map +0 -1
  368. package/dist/scanner/index.d.ts.map +0 -1
  369. package/dist/scanner/index.js.map +0 -1
  370. package/dist/scanner/registry.d.ts.map +0 -1
  371. package/dist/scanner/registry.js.map +0 -1
  372. package/dist/scanner/types.d.ts.map +0 -1
  373. package/dist/scanner/types.js.map +0 -1
  374. package/dist/templates/config/ralph.config.js.tmpl +0 -38
  375. package/dist/tui/app.d.ts.map +0 -1
  376. package/dist/tui/app.js.map +0 -1
  377. package/dist/tui/components/ActionOutput.d.ts.map +0 -1
  378. package/dist/tui/components/ActionOutput.js.map +0 -1
  379. package/dist/tui/components/ChatInput.d.ts.map +0 -1
  380. package/dist/tui/components/ChatInput.js.map +0 -1
  381. package/dist/tui/components/CommandDropdown.d.ts.map +0 -1
  382. package/dist/tui/components/CommandDropdown.js.map +0 -1
  383. package/dist/tui/components/Confirm.d.ts.map +0 -1
  384. package/dist/tui/components/Confirm.js.map +0 -1
  385. package/dist/tui/components/ErrorCard.d.ts.map +0 -1
  386. package/dist/tui/components/ErrorCard.js.map +0 -1
  387. package/dist/tui/components/FooterStatusBar.d.ts.map +0 -1
  388. package/dist/tui/components/FooterStatusBar.js.map +0 -1
  389. package/dist/tui/components/MessageList.d.ts.map +0 -1
  390. package/dist/tui/components/MessageList.js.map +0 -1
  391. package/dist/tui/components/MultiSelect.d.ts.map +0 -1
  392. package/dist/tui/components/MultiSelect.js.map +0 -1
  393. package/dist/tui/components/PasswordInput.d.ts.map +0 -1
  394. package/dist/tui/components/PasswordInput.js.map +0 -1
  395. package/dist/tui/components/PhaseHeader.d.ts.map +0 -1
  396. package/dist/tui/components/PhaseHeader.js.map +0 -1
  397. package/dist/tui/components/Select.d.ts.map +0 -1
  398. package/dist/tui/components/Select.js.map +0 -1
  399. package/dist/tui/components/StatusLine.d.ts.map +0 -1
  400. package/dist/tui/components/StatusLine.js.map +0 -1
  401. package/dist/tui/components/StreamingText.d.ts.map +0 -1
  402. package/dist/tui/components/StreamingText.js.map +0 -1
  403. package/dist/tui/components/ToolCallCard.d.ts.map +0 -1
  404. package/dist/tui/components/ToolCallCard.js.map +0 -1
  405. package/dist/tui/components/WiggumBanner.d.ts.map +0 -1
  406. package/dist/tui/components/WiggumBanner.js.map +0 -1
  407. package/dist/tui/components/WorkingIndicator.d.ts.map +0 -1
  408. package/dist/tui/components/WorkingIndicator.js.map +0 -1
  409. package/dist/tui/components/index.d.ts.map +0 -1
  410. package/dist/tui/components/index.js.map +0 -1
  411. package/dist/tui/demo.d.ts +0 -8
  412. package/dist/tui/demo.d.ts.map +0 -1
  413. package/dist/tui/demo.js +0 -69
  414. package/dist/tui/demo.js.map +0 -1
  415. package/dist/tui/hooks/index.d.ts.map +0 -1
  416. package/dist/tui/hooks/index.js.map +0 -1
  417. package/dist/tui/hooks/useCommandHistory.d.ts.map +0 -1
  418. package/dist/tui/hooks/useCommandHistory.js.map +0 -1
  419. package/dist/tui/hooks/useInit.d.ts.map +0 -1
  420. package/dist/tui/hooks/useInit.js.map +0 -1
  421. package/dist/tui/hooks/useSpecGenerator.d.ts.map +0 -1
  422. package/dist/tui/hooks/useSpecGenerator.js.map +0 -1
  423. package/dist/tui/hooks/useSync.d.ts.map +0 -1
  424. package/dist/tui/hooks/useSync.js.map +0 -1
  425. package/dist/tui/index.d.ts.map +0 -1
  426. package/dist/tui/index.js.map +0 -1
  427. package/dist/tui/orchestration/index.d.ts.map +0 -1
  428. package/dist/tui/orchestration/index.js.map +0 -1
  429. package/dist/tui/orchestration/interview-orchestrator.d.ts.map +0 -1
  430. package/dist/tui/orchestration/interview-orchestrator.js.map +0 -1
  431. package/dist/tui/screens/InitScreen.d.ts.map +0 -1
  432. package/dist/tui/screens/InitScreen.js.map +0 -1
  433. package/dist/tui/screens/InterviewScreen.d.ts.map +0 -1
  434. package/dist/tui/screens/InterviewScreen.js.map +0 -1
  435. package/dist/tui/screens/MainShell.d.ts.map +0 -1
  436. package/dist/tui/screens/MainShell.js.map +0 -1
  437. package/dist/tui/screens/RunScreen.d.ts.map +0 -1
  438. package/dist/tui/screens/RunScreen.js.map +0 -1
  439. package/dist/tui/screens/WelcomeScreen.d.ts.map +0 -1
  440. package/dist/tui/screens/WelcomeScreen.js.map +0 -1
  441. package/dist/tui/screens/index.d.ts.map +0 -1
  442. package/dist/tui/screens/index.js.map +0 -1
  443. package/dist/tui/theme.d.ts.map +0 -1
  444. package/dist/tui/theme.js.map +0 -1
  445. package/dist/tui/types/interview.d.ts.map +0 -1
  446. package/dist/tui/types/interview.js.map +0 -1
  447. package/dist/tui/utils/input-utils.d.ts.map +0 -1
  448. package/dist/tui/utils/input-utils.js.map +0 -1
  449. package/dist/tui/utils/loop-status.d.ts.map +0 -1
  450. package/dist/tui/utils/loop-status.js.map +0 -1
  451. package/dist/utils/colors.d.ts.map +0 -1
  452. package/dist/utils/colors.js.map +0 -1
  453. package/dist/utils/config.d.ts.map +0 -1
  454. package/dist/utils/config.js.map +0 -1
  455. package/dist/utils/env.d.ts.map +0 -1
  456. package/dist/utils/env.js.map +0 -1
  457. package/dist/utils/header.d.ts.map +0 -1
  458. package/dist/utils/header.js.map +0 -1
  459. package/dist/utils/json-repair.d.ts.map +0 -1
  460. package/dist/utils/json-repair.js.map +0 -1
  461. package/dist/utils/logger.d.ts.map +0 -1
  462. package/dist/utils/logger.js.map +0 -1
  463. package/dist/utils/repl-prompts.d.ts +0 -59
  464. package/dist/utils/repl-prompts.d.ts.map +0 -1
  465. package/dist/utils/repl-prompts.js +0 -314
  466. package/dist/utils/repl-prompts.js.map +0 -1
  467. package/dist/utils/spinner.d.ts.map +0 -1
  468. package/dist/utils/spinner.js.map +0 -1
  469. package/dist/utils/tracing.d.ts.map +0 -1
  470. package/dist/utils/tracing.js.map +0 -1
  471. package/dist/utils/tui.d.ts.map +0 -1
  472. package/dist/utils/tui.js.map +0 -1
  473. package/dist/utils/update-check.d.ts.map +0 -1
  474. package/dist/utils/update-check.js.map +0 -1
  475. /package/dist/templates/prompts/{PROMPT_review.md.tmpl → PROMPT_review_auto.md.tmpl} +0 -0
  476. /package/src/templates/prompts/{PROMPT_review.md.tmpl → PROMPT_review_auto.md.tmpl} +0 -0
@@ -8,4 +8,3 @@ import type { Detector } from '../../types.js';
8
8
  */
9
9
  export declare const packageManagerDetector: Detector;
10
10
  export default packageManagerDetector;
11
- //# sourceMappingURL=packageManager.d.ts.map
@@ -71,4 +71,3 @@ export const packageManagerDetector = {
71
71
  },
72
72
  };
73
73
  export default packageManagerDetector;
74
- //# sourceMappingURL=packageManager.js.map
@@ -9,4 +9,3 @@ import type { Detector } from '../../types.js';
9
9
  */
10
10
  export declare const stylingDetector: Detector;
11
11
  export default stylingDetector;
12
- //# sourceMappingURL=styling.d.ts.map
@@ -227,4 +227,3 @@ export const stylingDetector = {
227
227
  },
228
228
  };
229
229
  export default stylingDetector;
230
- //# sourceMappingURL=styling.js.map
@@ -9,4 +9,3 @@ import type { Detector } from '../../types.js';
9
9
  */
10
10
  export declare const testingDetector: Detector;
11
11
  export default testingDetector;
12
- //# sourceMappingURL=testing.d.ts.map
@@ -187,4 +187,3 @@ export const testingDetector = {
187
187
  },
188
188
  };
189
189
  export default testingDetector;
190
- //# sourceMappingURL=testing.js.map
@@ -9,4 +9,3 @@ import type { Detector } from '../../types.js';
9
9
  */
10
10
  export declare const apiDetector: Detector;
11
11
  export default apiDetector;
12
- //# sourceMappingURL=api.d.ts.map
@@ -258,4 +258,3 @@ export const apiDetector = {
258
258
  },
259
259
  };
260
260
  export default apiDetector;
261
- //# sourceMappingURL=api.js.map
@@ -9,4 +9,3 @@ import type { Detector } from '../../types.js';
9
9
  */
10
10
  export declare const databaseDetector: Detector;
11
11
  export default databaseDetector;
12
- //# sourceMappingURL=database.d.ts.map
@@ -210,4 +210,3 @@ export const databaseDetector = {
210
210
  },
211
211
  };
212
212
  export default databaseDetector;
213
- //# sourceMappingURL=database.js.map
@@ -9,4 +9,3 @@ import type { Detector } from '../../types.js';
9
9
  */
10
10
  export declare const ormDetector: Detector;
11
11
  export default ormDetector;
12
- //# sourceMappingURL=orm.d.ts.map
@@ -157,4 +157,3 @@ export const ormDetector = {
157
157
  },
158
158
  };
159
159
  export default ormDetector;
160
- //# sourceMappingURL=orm.js.map
@@ -9,4 +9,3 @@ import type { Detector } from '../../types.js';
9
9
  */
10
10
  export declare const formHandlingDetector: Detector;
11
11
  export default formHandlingDetector;
12
- //# sourceMappingURL=formHandling.d.ts.map
@@ -208,4 +208,3 @@ export const formHandlingDetector = {
208
208
  },
209
209
  };
210
210
  export default formHandlingDetector;
211
- //# sourceMappingURL=formHandling.js.map
@@ -9,4 +9,3 @@ import type { Detector } from '../../types.js';
9
9
  */
10
10
  export declare const stateManagementDetector: Detector;
11
11
  export default stateManagementDetector;
12
- //# sourceMappingURL=stateManagement.d.ts.map
@@ -218,4 +218,3 @@ export const stateManagementDetector = {
218
218
  },
219
219
  };
220
220
  export default stateManagementDetector;
221
- //# sourceMappingURL=stateManagement.js.map
@@ -9,4 +9,3 @@ import type { Detector } from '../../types.js';
9
9
  */
10
10
  export declare const uiComponentsDetector: Detector;
11
11
  export default uiComponentsDetector;
12
- //# sourceMappingURL=uiComponents.d.ts.map
@@ -282,4 +282,3 @@ export const uiComponentsDetector = {
282
282
  },
283
283
  };
284
284
  export default uiComponentsDetector;
285
- //# sourceMappingURL=uiComponents.js.map
@@ -9,4 +9,3 @@ import type { Detector } from '../../types.js';
9
9
  */
10
10
  export declare const deploymentDetector: Detector;
11
11
  export default deploymentDetector;
12
- //# sourceMappingURL=deployment.d.ts.map
@@ -298,4 +298,3 @@ export const deploymentDetector = {
298
298
  },
299
299
  };
300
300
  export default deploymentDetector;
301
- //# sourceMappingURL=deployment.js.map
@@ -9,4 +9,3 @@ import type { Detector } from '../../types.js';
9
9
  */
10
10
  export declare const monorepoDetector: Detector;
11
11
  export default monorepoDetector;
12
- //# sourceMappingURL=monorepo.d.ts.map
@@ -216,4 +216,3 @@ export const monorepoDetector = {
216
216
  },
217
217
  };
218
218
  export default monorepoDetector;
219
- //# sourceMappingURL=monorepo.js.map
@@ -9,4 +9,3 @@ import type { Detector } from '../../types.js';
9
9
  */
10
10
  export declare const mcpProjectDetector: Detector;
11
11
  export default mcpProjectDetector;
12
- //# sourceMappingURL=mcpProject.d.ts.map
@@ -151,4 +151,3 @@ export const mcpProjectDetector = {
151
151
  },
152
152
  };
153
153
  export default mcpProjectDetector;
154
- //# sourceMappingURL=mcpProject.js.map
@@ -14,4 +14,3 @@ export declare const mcpServersDetector: Detector;
14
14
  */
15
15
  export declare function getRecommendedMCPServers(projectRoot: string): string[];
16
16
  export default mcpServersDetector;
17
- //# sourceMappingURL=mcpServers.d.ts.map
@@ -190,4 +190,3 @@ export function getRecommendedMCPServers(projectRoot) {
190
190
  return inferMCPFromDeps(deps);
191
191
  }
192
192
  export default mcpServersDetector;
193
- //# sourceMappingURL=mcpServers.js.map
@@ -9,4 +9,3 @@ import type { Detector } from '../../types.js';
9
9
  */
10
10
  export declare const analyticsDetector: Detector;
11
11
  export default analyticsDetector;
12
- //# sourceMappingURL=analytics.d.ts.map
@@ -233,4 +233,3 @@ export const analyticsDetector = {
233
233
  },
234
234
  };
235
235
  export default analyticsDetector;
236
- //# sourceMappingURL=analytics.js.map
@@ -9,4 +9,3 @@ import type { Detector } from '../../types.js';
9
9
  */
10
10
  export declare const authDetector: Detector;
11
11
  export default authDetector;
12
- //# sourceMappingURL=auth.d.ts.map
@@ -214,4 +214,3 @@ export const authDetector = {
214
214
  },
215
215
  };
216
216
  export default authDetector;
217
- //# sourceMappingURL=auth.js.map
@@ -9,4 +9,3 @@ import type { Detector } from '../../types.js';
9
9
  */
10
10
  export declare const emailDetector: Detector;
11
11
  export default emailDetector;
12
- //# sourceMappingURL=email.d.ts.map
@@ -208,4 +208,3 @@ export const emailDetector = {
208
208
  },
209
209
  };
210
210
  export default emailDetector;
211
- //# sourceMappingURL=email.js.map
@@ -9,4 +9,3 @@ import type { Detector } from '../../types.js';
9
9
  */
10
10
  export declare const paymentsDetector: Detector;
11
11
  export default paymentsDetector;
12
- //# sourceMappingURL=payments.d.ts.map
@@ -182,4 +182,3 @@ export const paymentsDetector = {
182
182
  },
183
183
  };
184
184
  export default paymentsDetector;
185
- //# sourceMappingURL=payments.js.map
@@ -157,4 +157,3 @@ export declare function getScripts(pkg: PackageJson | null): Record<string, stri
157
157
  * @returns True if the script exists
158
158
  */
159
159
  export declare function hasScript(pkg: PackageJson | null, scriptName: string): boolean;
160
- //# sourceMappingURL=utils.d.ts.map
@@ -219,4 +219,3 @@ export function hasScript(pkg, scriptName) {
219
219
  const scripts = getScripts(pkg);
220
220
  return scriptName in scripts;
221
221
  }
222
- //# sourceMappingURL=utils.js.map
@@ -39,4 +39,3 @@ export declare function scanProject(projectRoot: string, options?: ScannerOption
39
39
  * Format a scan result for display
40
40
  */
41
41
  export declare function formatScanResult(result: ScanResult): string;
42
- //# sourceMappingURL=index.d.ts.map
@@ -279,4 +279,3 @@ export function formatScanResult(result) {
279
279
  }
280
280
  return lines.join('\n');
281
281
  }
282
- //# sourceMappingURL=index.js.map
@@ -40,4 +40,3 @@ export declare class DetectorRegistry {
40
40
  */
41
41
  export declare function createDefaultRegistry(): DetectorRegistry;
42
42
  export { DetectorRegistry as Registry };
43
- //# sourceMappingURL=registry.d.ts.map
@@ -240,4 +240,3 @@ export function createDefaultRegistry() {
240
240
  return registry;
241
241
  }
242
242
  export { DetectorRegistry as Registry };
243
- //# sourceMappingURL=registry.js.map
@@ -109,4 +109,3 @@ export interface ScanResult {
109
109
  /** Any errors encountered during scanning */
110
110
  errors?: string[];
111
111
  }
112
- //# sourceMappingURL=types.d.ts.map
@@ -3,4 +3,3 @@
3
3
  * Type definitions for the project scanner system
4
4
  */
5
5
  export {};
6
- //# sourceMappingURL=types.js.map
@@ -34,5 +34,6 @@ module.exports = {
34
34
  maxE2eAttempts: 5,
35
35
  defaultModel: 'sonnet',
36
36
  planningModel: 'opus',
37
+ reviewMode: 'manual', // 'manual' = stop at PR, 'auto' = review + auto-merge
37
38
  },
38
39
  };
@@ -0,0 +1,96 @@
1
+ ## Context
2
+ Study @.ralph/AGENTS.md for commands and patterns.
3
+ Study @.ralph/specs/$FEATURE.md for feature specification.
4
+ Study @.ralph/specs/$FEATURE-implementation-plan.md for completed tasks.
5
+
6
+ ## Learnings
7
+ Read @.ralph/LEARNINGS.md for patterns from previous features.
8
+ Capture any review feedback patterns for future iterations.
9
+
10
+ ## Task
11
+ All implementation and E2E tasks are complete. Create PR for manual review.
12
+
13
+ ### Step 1: Verify Ready State
14
+ 1. Check all tasks are complete in implementation plan (no `- [ ]` items)
15
+ 2. Verify tests pass: `cd {{appDir}} && {{testCommand}}`
16
+ 3. Verify build succeeds: `cd {{appDir}} && {{buildCommand}}`
17
+
18
+ If any fail, fix before proceeding.
19
+
20
+ ### Step 2: Check Git Status
21
+ ```bash
22
+ cd {{appDir}} && git status
23
+ cd {{appDir}} && git log --oneline -5
24
+ ```
25
+
26
+ Ensure:
27
+ - On branch `feat/$FEATURE`
28
+ - All changes are committed
29
+ - Branch is pushed to remote
30
+
31
+ If uncommitted changes exist:
32
+ ```bash
33
+ git -C {{appDir}} add -A && git -C {{appDir}} commit -m "chore($FEATURE): final cleanup"
34
+ git -C {{appDir}} push origin feat/$FEATURE
35
+ ```
36
+
37
+ ### Step 3: Create PR
38
+ Check if PR already exists:
39
+ ```bash
40
+ cd {{appDir}} && gh pr list --head feat/$FEATURE
41
+ ```
42
+
43
+ If no PR exists, create one:
44
+ ```bash
45
+ cd {{appDir}} && gh pr create --base main --head feat/$FEATURE \
46
+ --title "feat($FEATURE): [read description from spec]" \
47
+ --body "$(cat <<'EOF'
48
+ ## Summary
49
+ [Read from spec Purpose section]
50
+
51
+ ## Changes
52
+ [Read from implementation plan - list completed phases]
53
+
54
+ ## Testing
55
+ - [x] Unit/integration tests: passing
56
+ - [x] E2E tests: All scenarios passed
57
+ - [x] Build succeeds
58
+
59
+ ## E2E Test Results
60
+ [Copy from implementation plan if E2E phase exists]
61
+
62
+ Generated with Claude Code
63
+ EOF
64
+ )"
65
+ ```
66
+
67
+ ### Manual Review Required
68
+
69
+ **PR created. Review and merge manually.**
70
+
71
+ The feature branch has been prepared and pushed. A pull request has been created for human review.
72
+
73
+ **Next steps (manual):**
74
+ 1. Review the PR on GitHub
75
+ 2. Address any review comments
76
+ 3. Merge when approved
77
+
78
+ Note: Spec status updates are handled in the Spec Verification phase before PR creation.
79
+
80
+ ## Rules
81
+ - Manual review mode stops after PR creation
82
+ - No automated code review or merge
83
+ - Human review and approval required before merging
84
+ - If gh CLI fails, check authentication: `gh auth status`
85
+
86
+ ## Troubleshooting
87
+ - **gh: command not found** -> Install GitHub CLI: `brew install gh`
88
+ - **gh auth error** -> Run: `gh auth login`
89
+ - **PR already exists** -> Use: `gh pr view` to see status
90
+
91
+ ## Learning Capture
92
+ If you discover patterns worth remembering during PR creation, append to @.ralph/LEARNINGS.md:
93
+ - Process improvements -> Add under "## Tool Usage"
94
+ - Common issues -> Add under "## Anti-Patterns"
95
+
96
+ Format: `- [YYYY-MM-DD] [$FEATURE] Brief description`
@@ -9,11 +9,12 @@ This directory contains configuration and guidance for AI-assisted development o
9
9
  |-- AGENTS.md # Commands, patterns, and coding rules
10
10
  |-- LEARNINGS.md # Accumulated knowledge from iterations
11
11
  |-- prompts/ # Task-specific prompts
12
- | |-- PROMPT.md # Main implementation prompt
13
- | |-- PROMPT_feature.md # Feature planning prompt
14
- | |-- PROMPT_e2e.md # E2E testing prompt
15
- | |-- PROMPT_verify.md # Verification prompt
16
- | |-- PROMPT_review.md # PR review prompt
12
+ | |-- PROMPT.md # Main implementation prompt
13
+ | |-- PROMPT_feature.md # Feature planning prompt
14
+ | |-- PROMPT_e2e.md # E2E testing prompt
15
+ | |-- PROMPT_verify.md # Verification prompt
16
+ | |-- PROMPT_review_manual.md # PR review prompt (manual)
17
+ | |-- PROMPT_review_auto.md # PR review prompt (auto merge)
17
18
  |-- guides/ # Reference documentation
18
19
  | |-- FRONTEND.md # UI/UX patterns and checklist
19
20
  | |-- SECURITY.md # Security review checklist
@@ -39,7 +40,7 @@ Reference these files in your prompts:
39
40
  2. **Implement**: Use `PROMPT.md` for iterative task completion
40
41
  3. **Test**: Use `PROMPT_e2e.md` for browser-based testing
41
42
  4. **Verify**: Use `PROMPT_verify.md` to verify spec requirements
42
- 5. **Review**: Use `PROMPT_review.md` to create PR and get review
43
+ 5. **Review**: Use `PROMPT_review_manual.md` (manual) or `PROMPT_review_auto.md` (auto merge) to create PR
43
44
 
44
45
  ### Specs
45
46
 
@@ -1,12 +1,13 @@
1
1
  #!/bin/bash
2
2
  # feature-loop.sh - Full feature workflow: branch -> implement -> E2E test -> PR -> review -> merge
3
3
  # Generated by ralph-cli for {{projectName}}
4
- # Usage: ./feature-loop.sh <feature-name> [max-iterations] [max-e2e-attempts] [--worktree] [--resume] [--model MODEL]
4
+ # Usage: ./feature-loop.sh <feature-name> [max-iterations] [max-e2e-attempts] [--worktree] [--resume] [--model MODEL] [--review-mode MODE]
5
5
  #
6
6
  # Options:
7
- # --worktree Use git worktree for isolation (enables parallel execution)
8
- # --resume Resume an interrupted loop (reuses existing branch/worktree)
9
- # --model MODEL Claude model to use (e.g., opus, sonnet, claude-sonnet-4-5-20250514)
7
+ # --worktree Use git worktree for isolation (enables parallel execution)
8
+ # --resume Resume an interrupted loop (reuses existing branch/worktree)
9
+ # --model MODEL Claude model to use (e.g., opus, sonnet, claude-sonnet-4-5-20250514)
10
+ # --review-mode MODE Review mode: 'manual' (stop at PR) or 'auto' (review + merge). Default: 'manual'
10
11
 
11
12
  set -e
12
13
  set -o pipefail
@@ -49,6 +50,7 @@ cd "$SCRIPT_DIR/../.."
49
50
  USE_WORKTREE=false
50
51
  RESUME=false
51
52
  MODEL=""
53
+ REVIEW_MODE=""
52
54
  POSITIONAL=()
53
55
  while [[ $# -gt 0 ]]; do
54
56
  case $1 in
@@ -64,6 +66,10 @@ while [[ $# -gt 0 ]]; do
64
66
  MODEL="$2"
65
67
  shift 2
66
68
  ;;
69
+ --review-mode)
70
+ REVIEW_MODE="$2"
71
+ shift 2
72
+ ;;
67
73
  *)
68
74
  POSITIONAL+=("$1")
69
75
  shift
@@ -72,6 +78,24 @@ while [[ $# -gt 0 ]]; do
72
78
  done
73
79
  set -- "${POSITIONAL[@]}"
74
80
 
81
+ # Resolve review mode from CLI > config > default
82
+ if [ -z "$REVIEW_MODE" ]; then
83
+ if [ -f "$SCRIPT_DIR/../ralph.config.cjs" ]; then
84
+ REVIEW_MODE_DEFAULT=$(node -e "console.log(require('$SCRIPT_DIR/../ralph.config.cjs').loop?.reviewMode || 'manual')" 2>/dev/null || echo "manual")
85
+ elif [ -f "$SCRIPT_DIR/../../ralph.config.cjs" ]; then
86
+ REVIEW_MODE_DEFAULT=$(node -e "console.log(require('$SCRIPT_DIR/../../ralph.config.cjs').loop?.reviewMode || 'manual')" 2>/dev/null || echo "manual")
87
+ else
88
+ REVIEW_MODE_DEFAULT="manual"
89
+ fi
90
+ REVIEW_MODE="${REVIEW_MODE_DEFAULT}"
91
+ fi
92
+
93
+ # Validate review mode
94
+ if [ "$REVIEW_MODE" != "manual" ] && [ "$REVIEW_MODE" != "auto" ]; then
95
+ echo "ERROR: Invalid review mode: '$REVIEW_MODE'. Allowed values are 'manual' or 'auto'." >&2
96
+ exit 1
97
+ fi
98
+
75
99
  # Build claude commands
76
100
  CLAUDE_CMD_OPUS="claude -p --dangerously-skip-permissions --model ${PLANNING_MODEL}"
77
101
  CLAUDE_CMD_IMPL="claude -p --dangerously-skip-permissions --model ${MODEL:-$DEFAULT_MODEL}"
@@ -134,6 +158,7 @@ echo "Branch: $BRANCH"
134
158
  echo "App dir: $APP_DIR"
135
159
  echo "Worktree mode: $USE_WORKTREE"
136
160
  echo "Resume mode: $RESUME"
161
+ echo "Review mode: $REVIEW_MODE"
137
162
  echo "Model (planning): $PLANNING_MODEL"
138
163
  echo "Model (impl): ${MODEL:-$DEFAULT_MODEL}"
139
164
  echo "Max iterations: $MAX_ITERATIONS"
@@ -248,7 +273,11 @@ parse_and_accumulate_tokens "$CLAUDE_OUTPUT"
248
273
  # Phase 7: PR and Review
249
274
  echo "======================== PR & REVIEW PHASE ========================"
250
275
  export FEATURE APP_DIR SPEC_DIR PROMPTS_DIR
251
- cat "$PROMPTS_DIR/PROMPT_review.md" | envsubst | $CLAUDE_CMD_OPUS 2>&1 | tee "$CLAUDE_OUTPUT" || true
276
+ if [ "$REVIEW_MODE" = "manual" ]; then
277
+ cat "$PROMPTS_DIR/PROMPT_review_manual.md" | envsubst | $CLAUDE_CMD_OPUS 2>&1 | tee "$CLAUDE_OUTPUT" || true
278
+ else
279
+ cat "$PROMPTS_DIR/PROMPT_review_auto.md" | envsubst | $CLAUDE_CMD_OPUS 2>&1 | tee "$CLAUDE_OUTPUT" || true
280
+ fi
252
281
  parse_and_accumulate_tokens "$CLAUDE_OUTPUT"
253
282
 
254
283
  # Persist final status for TUI summaries
@@ -75,7 +75,9 @@ detect_phase() {
75
75
  echo "E2E Testing"
76
76
  elif pgrep -f "PROMPT_verify.md" > /dev/null 2>&1; then
77
77
  echo "Verification"
78
- elif pgrep -f "PROMPT_review.md" > /dev/null 2>&1; then
78
+ elif pgrep -f "PROMPT_review_manual.md" > /dev/null 2>&1; then
79
+ echo "PR Review"
80
+ elif pgrep -f "PROMPT_review_auto.md" > /dev/null 2>&1; then
79
81
  echo "PR Review"
80
82
  elif pgrep -f "PROMPT.md" > /dev/null 2>&1; then
81
83
  echo "Implementation"
package/dist/tui/app.d.ts CHANGED
@@ -88,4 +88,3 @@ export interface RenderAppOptions {
88
88
  * ```
89
89
  */
90
90
  export declare function renderApp(options: RenderAppOptions): Instance;
91
- //# sourceMappingURL=app.d.ts.map
package/dist/tui/app.js CHANGED
@@ -378,6 +378,8 @@ export function App({ screen: initialScreen, initialSessionState, version = '0.8
378
378
  * ```
379
379
  */
380
380
  export function renderApp(options) {
381
+ if (options.screen === 'welcome') {
382
+ process.stdout.write('\x1b[3J\x1b[2J\x1b[0;0H');
383
+ }
381
384
  return render(_jsx(App, { screen: options.screen, initialSessionState: options.initialSessionState, version: options.version, interviewProps: options.interviewProps, onComplete: options.onComplete, onExit: options.onExit }));
382
385
  }
383
- //# sourceMappingURL=app.js.map
@@ -78,4 +78,3 @@ export interface ActionListProps {
78
78
  * Displays a list of actions with their outputs.
79
79
  */
80
80
  export declare function ActionList({ actions, previewLines, }: ActionListProps): React.ReactElement;
81
- //# sourceMappingURL=ActionOutput.d.ts.map
@@ -99,4 +99,3 @@ export function ActionOutput({ actionName, description, status, output, error, p
99
99
  export function ActionList({ actions, previewLines = 3, }) {
100
100
  return (_jsx(Box, { flexDirection: "column", gap: 1, children: actions.map((action) => (_jsx(ActionOutput, { actionName: action.actionName, description: action.description, status: action.status, output: action.output, error: action.error, previewLines: previewLines }, action.id))) }));
101
101
  }
102
- //# sourceMappingURL=ActionOutput.js.map
@@ -62,4 +62,3 @@ export interface ChatInputProps {
62
62
  * ```
63
63
  */
64
64
  export declare function ChatInput({ onSubmit, placeholder, disabled, allowEmpty, commands, onCommand, }: ChatInputProps): React.ReactElement;
65
- //# sourceMappingURL=ChatInput.d.ts.map
@@ -252,4 +252,3 @@ export function ChatInput({ onSubmit, placeholder = 'Type your message...', disa
252
252
  const remainder = rightText ? rightText.slice(1) : '';
253
253
  return (_jsxs(Box, { flexDirection: "column", children: [_jsxs(Box, { flexDirection: "row", children: [_jsxs(Text, { color: theme.colors.prompt, bold: true, children: [theme.chars.prompt, ' '] }), value.length === 0 ? (_jsxs(Box, { flexDirection: "row", children: [_jsx(Text, { inverse: true, children: ' ' }), _jsx(Text, { dimColor: true, children: placeholder })] })) : (_jsxs(Box, { flexDirection: "row", children: [_jsx(Text, { children: leftText }), _jsx(Text, { inverse: true, children: cursorChar }), _jsx(Text, { children: remainder })] }))] }), showDropdown && isSlashCommand && !hasSpace && (_jsx(CommandDropdown, { commands: commands, filter: commandFilter, onSelect: handleCommandSelect, onCancel: handleDropdownCancel }))] }));
254
254
  }
255
- //# sourceMappingURL=ChatInput.js.map
@@ -52,4 +52,3 @@ export declare function CommandDropdown({ commands, filter, onSelect, onCancel,
52
52
  * Default commands available in wiggum
53
53
  */
54
54
  export declare const DEFAULT_COMMANDS: Command[];
55
- //# sourceMappingURL=CommandDropdown.d.ts.map
@@ -89,4 +89,3 @@ export const DEFAULT_COMMANDS = [
89
89
  { name: 'clear', description: 'Clear conversation history' },
90
90
  { name: 'exit', description: 'Exit wiggum' },
91
91
  ];
92
- //# sourceMappingURL=CommandDropdown.js.map
@@ -36,4 +36,3 @@ export interface ConfirmProps {
36
36
  * ```
37
37
  */
38
38
  export declare function Confirm({ message, onConfirm, onCancel, initialValue, }: ConfirmProps): React.ReactElement;
39
- //# sourceMappingURL=Confirm.d.ts.map
@@ -57,4 +57,3 @@ export function Confirm({ message, onConfirm, onCancel, initialValue = true, })
57
57
  });
58
58
  return (_jsxs(Box, { flexDirection: "column", children: [_jsxs(Box, { marginBottom: 1, children: [_jsx(Text, { color: colors.yellow, children: "? " }), _jsx(Text, { children: message })] }), _jsxs(Box, { paddingLeft: 2, children: [_jsxs(Text, { color: value ? colors.green : undefined, bold: value, children: [value ? '❯ ' : ' ', "Yes"] }), _jsx(Text, { children: " / " }), _jsxs(Text, { color: !value ? colors.pink : undefined, bold: !value, children: [!value ? '❯ ' : ' ', "No"] })] }), _jsx(Box, { marginTop: 1, paddingLeft: 2, children: _jsx(Text, { dimColor: true, children: "(\u2190\u2192 to toggle, y/n or Enter to confirm, Esc to cancel)" }) })] }));
59
59
  }
60
- //# sourceMappingURL=Confirm.js.map
@@ -75,4 +75,3 @@ export declare const CommonErrors: {
75
75
  */
76
76
  fileNotFound: (path: string) => ErrorCardProps;
77
77
  };
78
- //# sourceMappingURL=ErrorCard.d.ts.map
@@ -89,4 +89,3 @@ export const CommonErrors = {
89
89
  ],
90
90
  }),
91
91
  };
92
- //# sourceMappingURL=ErrorCard.js.map
@@ -29,4 +29,3 @@ export interface FooterStatusBarProps extends StatusLineProps {
29
29
  * ```
30
30
  */
31
31
  export declare function FooterStatusBar(props: FooterStatusBarProps): React.ReactElement;
32
- //# sourceMappingURL=FooterStatusBar.d.ts.map
@@ -28,4 +28,3 @@ export function FooterStatusBar(props) {
28
28
  const width = Math.max(1, (stdout?.columns ?? 80) - 2);
29
29
  return (_jsxs(Box, { flexDirection: "column", width: "100%", children: [_jsx(Box, { width: "100%", children: _jsx(Text, { color: colors.separator, children: SEPARATOR_CHAR.repeat(width) }) }), _jsx(StatusLine, { ...props })] }));
30
30
  }
31
- //# sourceMappingURL=FooterStatusBar.js.map
@@ -71,4 +71,3 @@ export interface MessageListProps {
71
71
  * ```
72
72
  */
73
73
  export declare function MessageList({ messages, maxHeight, toolCallsExpanded, }: MessageListProps): React.ReactElement;
74
- //# sourceMappingURL=MessageList.d.ts.map
@@ -83,4 +83,3 @@ export function MessageList({ messages, maxHeight, toolCallsExpanded = false, })
83
83
  }
84
84
  }) }));
85
85
  }
86
- //# sourceMappingURL=MessageList.js.map
@@ -46,4 +46,3 @@ export interface MultiSelectProps {
46
46
  * ```
47
47
  */
48
48
  export declare function MultiSelect({ message, options, onSubmit, onChatMode, onCancel, initialIndex, }: MultiSelectProps): React.ReactElement;
49
- //# sourceMappingURL=MultiSelect.d.ts.map
@@ -90,4 +90,3 @@ export function MultiSelect({ message, options, onSubmit, onChatMode, onCancel,
90
90
  return (_jsxs(Box, { paddingLeft: 2, children: [_jsxs(Text, { color: color, children: [isFocused ? '❯ ' : ' ', num, " ", indicator, " ", option.label] }), option.hint && _jsxs(Text, { dimColor: true, children: [" (", option.hint, ")"] })] }, option.value));
91
91
  }) }), _jsx(Box, { marginTop: 1, paddingLeft: 2, children: _jsx(Text, { dimColor: true, children: "(\u2191\u2193 move, Space toggle, Enter submit, c chat mode, Esc free-text)" }) })] }));
92
92
  }
93
- //# sourceMappingURL=MultiSelect.js.map
@@ -36,4 +36,3 @@ export interface PasswordInputProps {
36
36
  * ```
37
37
  */
38
38
  export declare function PasswordInput({ message, onSubmit, onCancel, mask, placeholder, }: PasswordInputProps): React.ReactElement;
39
- //# sourceMappingURL=PasswordInput.d.ts.map
@@ -60,4 +60,3 @@ export function PasswordInput({ message, onSubmit, onCancel, mask = '*', placeho
60
60
  const displayValue = value.length > 0 ? maskedValue : placeholder;
61
61
  return (_jsxs(Box, { flexDirection: "column", children: [_jsxs(Box, { marginBottom: 1, children: [_jsx(Text, { color: colors.yellow, children: "? " }), _jsx(Text, { children: message })] }), _jsxs(Box, { paddingLeft: 2, children: [_jsx(Text, { color: colors.brown, children: "> " }), _jsx(Text, { color: value.length > 0 ? colors.white : undefined, dimColor: value.length === 0, children: displayValue }), _jsx(Text, { color: colors.yellow, children: "\u258C" })] }), _jsx(Box, { marginTop: 1, paddingLeft: 2, children: _jsx(Text, { dimColor: true, children: "(Enter to submit, Esc to cancel)" }) })] }));
62
62
  }
63
- //# sourceMappingURL=PasswordInput.js.map
@@ -33,4 +33,3 @@ export interface PhaseHeaderProps {
33
33
  * ```
34
34
  */
35
35
  export declare function PhaseHeader({ currentPhase, totalPhases, phaseName, }: PhaseHeaderProps): React.ReactElement;
36
- //# sourceMappingURL=PhaseHeader.d.ts.map