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
@@ -28,4 +28,3 @@ export function PhaseHeader({ currentPhase, totalPhases, phaseName, }) {
28
28
  const lineSegment = HEAVY_HORIZONTAL.repeat(3);
29
29
  return (_jsx(Box, { flexDirection: "row", justifyContent: "center", width: "100%", children: _jsxs(Text, { color: colors.yellow, children: [lineSegment, " ", phaseText, " ", lineSegment] }) }));
30
30
  }
31
- //# sourceMappingURL=PhaseHeader.js.map
@@ -52,4 +52,3 @@ export interface SelectProps<T> {
52
52
  * ```
53
53
  */
54
54
  export declare function Select<T>({ message, options, onSelect, onCancel, initialIndex, }: SelectProps<T>): React.ReactElement;
55
- //# sourceMappingURL=Select.d.ts.map
@@ -60,4 +60,3 @@ export function Select({ message, options, onSelect, onCancel, initialIndex = 0,
60
60
  return (_jsxs(Box, { paddingLeft: 2, children: [_jsx(Text, { color: isSelected ? colors.blue : undefined, children: isSelected ? '❯ ' : ' ' }), _jsx(Text, { color: isSelected ? colors.blue : undefined, children: option.label }), option.hint && (_jsxs(Text, { dimColor: true, children: [" (", option.hint, ")"] }))] }, String(option.value)));
61
61
  }) }), _jsx(Box, { marginTop: 1, paddingLeft: 2, children: _jsx(Text, { dimColor: true, children: "(\u2191\u2193 to move, Enter to select, Esc to cancel)" }) })] }));
62
62
  }
63
- //# sourceMappingURL=Select.js.map
@@ -33,4 +33,3 @@ export interface StatusLineProps {
33
33
  * ```
34
34
  */
35
35
  export declare function StatusLine({ action, phase, path, }: StatusLineProps): React.ReactElement;
36
- //# sourceMappingURL=StatusLine.d.ts.map
@@ -25,4 +25,3 @@ export function StatusLine({ action, phase, path, }) {
25
25
  : path;
26
26
  return (_jsxs(Box, { flexDirection: "row", children: [_jsx(Text, { color: colors.yellow, bold: true, children: action }), phase && (_jsxs(_Fragment, { children: [_jsx(Text, { dimColor: true, children: separator }), _jsx(Text, { children: phase })] })), displayPath && (_jsxs(_Fragment, { children: [_jsx(Text, { dimColor: true, children: separator }), _jsx(Text, { dimColor: true, children: displayPath })] }))] }));
27
27
  }
28
- //# sourceMappingURL=StatusLine.js.map
@@ -44,4 +44,3 @@ export interface StreamingTextProps {
44
44
  * ```
45
45
  */
46
46
  export declare function StreamingText({ text, isStreaming, color, showCursor, }: StreamingTextProps): React.ReactElement;
47
- //# sourceMappingURL=StreamingText.d.ts.map
@@ -35,4 +35,3 @@ export function StreamingText({ text, isStreaming, color = colors.white, showCur
35
35
  const displayText = displayCursor ? `${text}${CURSOR_CHAR}` : text;
36
36
  return _jsx(Text, { color: color, children: displayText });
37
37
  }
38
- //# sourceMappingURL=StreamingText.js.map
@@ -57,4 +57,3 @@ export interface ToolCallCardProps {
57
57
  * ```
58
58
  */
59
59
  export declare function ToolCallCard({ toolName, status, input, output, error, expanded, previewLines: maxPreviewLines, }: ToolCallCardProps): React.ReactElement;
60
- //# sourceMappingURL=ToolCallCard.d.ts.map
@@ -173,4 +173,3 @@ export function ToolCallCard({ toolName, status, input, output, error, expanded
173
173
  : (parsedOutput?.remainingCount || 0);
174
174
  return (_jsxs(Box, { flexDirection: "column", children: [_jsxs(Box, { flexDirection: "row", children: [_jsx(Text, { color: color, children: dot }), _jsx(Text, { children: " " }), _jsx(Text, { bold: true, children: displayName }), _jsxs(Text, { dimColor: true, children: ["(", displayInput, ")"] })] }), summary && (_jsxs(Box, { marginLeft: 2, children: [_jsxs(Text, { dimColor: true, children: [theme.chars.lineEnd, " "] }), _jsx(Text, { color: status === 'error' ? theme.colors.error : undefined, dimColor: status !== 'error', children: summary })] })), showPreview && (_jsxs(Box, { flexDirection: "column", marginLeft: 4, children: [linesToShow.map((line, index) => (_jsxs(Box, { flexDirection: "row", children: [_jsxs(Text, { dimColor: true, children: [String(index + 1).padStart(4), " "] }), _jsx(Text, { dimColor: true, children: line })] }, index))), remainingCount > 0 && (_jsxs(Text, { dimColor: true, children: ["... +", remainingCount, " lines (ctrl+o to expand)"] }))] }))] }));
175
175
  }
176
- //# sourceMappingURL=ToolCallCard.js.map
@@ -27,4 +27,3 @@ export interface WiggumBannerProps {
27
27
  * ```
28
28
  */
29
29
  export declare function WiggumBanner({ color, compact, }: WiggumBannerProps): React.ReactElement;
30
- //# sourceMappingURL=WiggumBanner.d.ts.map
@@ -5,8 +5,7 @@ import { colors } from '../theme.js';
5
5
  * ASCII art banner for Wiggum CLI
6
6
  * Block-style font to match the cfonts 'block' style
7
7
  */
8
- const BANNER = `
9
- ██╗ ██╗██╗ ██████╗ ██████╗ ██╗ ██╗███╗ ███╗
8
+ const BANNER = `██╗ ██╗██╗ ██████╗ ██████╗ ██╗ ██╗███╗ ███╗
10
9
  ██║ ██║██║██╔════╝ ██╔════╝ ██║ ██║████╗ ████║
11
10
  ██║ █╗ ██║██║██║ ███╗██║ ███╗██║ ██║██╔████╔██║
12
11
  ██║███╗██║██║██║ ██║██║ ██║██║ ██║██║╚██╔╝██║
@@ -31,4 +30,3 @@ export function WiggumBanner({ color = colors.yellow, compact = false, }) {
31
30
  }
32
31
  return (_jsx(Box, { flexDirection: "column", children: _jsx(Text, { color: color, children: BANNER }) }));
33
32
  }
34
- //# sourceMappingURL=WiggumBanner.js.map
@@ -48,4 +48,3 @@ export interface WorkingIndicatorProps {
48
48
  * ```
49
49
  */
50
50
  export declare function WorkingIndicator({ state, showElapsedTime, variant, }: WorkingIndicatorProps): React.ReactElement | null;
51
- //# sourceMappingURL=WorkingIndicator.d.ts.map
@@ -68,4 +68,3 @@ export function WorkingIndicator({ state, showElapsedTime = true, variant = 'act
68
68
  }
69
69
  return (_jsxs(Box, { flexDirection: "row", gap: 1, children: [_jsx(Text, { color: indicatorColor, children: _jsx(Spinner, { type: "dots" }) }), _jsx(Text, { color: indicatorColor, children: status }), showElapsedTime && elapsedMs >= 1000 && (_jsxs(Text, { dimColor: true, children: ["(", formatElapsedTime(elapsedMs), ")"] })), hint && (_jsxs(Text, { color: colors.brown, dimColor: true, children: ["(", hint, ")"] }))] }));
70
70
  }
71
- //# sourceMappingURL=WorkingIndicator.js.map
@@ -29,4 +29,3 @@ export { ActionOutput, ActionList } from './ActionOutput.js';
29
29
  export type { ActionOutputProps, ActionListProps, ActionStatus } from './ActionOutput.js';
30
30
  export { ErrorCard, CommonErrors } from './ErrorCard.js';
31
31
  export type { ErrorCardProps, ErrorSuggestion } from './ErrorCard.js';
32
- //# sourceMappingURL=index.d.ts.map
@@ -15,4 +15,3 @@ export { PasswordInput } from './PasswordInput.js';
15
15
  export { Confirm } from './Confirm.js';
16
16
  export { ActionOutput, ActionList } from './ActionOutput.js';
17
17
  export { ErrorCard, CommonErrors } from './ErrorCard.js';
18
- //# sourceMappingURL=index.js.map
@@ -11,4 +11,3 @@ export { useCommandHistory } from './useCommandHistory.js';
11
11
  export type { UseCommandHistoryReturn } from './useCommandHistory.js';
12
12
  export { useSync } from './useSync.js';
13
13
  export type { SyncStatus, UseSyncReturn } from './useSync.js';
14
- //# sourceMappingURL=index.d.ts.map
@@ -7,4 +7,3 @@ export { useInit } from './useInit.js';
7
7
  export { INIT_PHASE_CONFIGS, INIT_TOTAL_PHASES } from './useInit.js';
8
8
  export { useCommandHistory } from './useCommandHistory.js';
9
9
  export { useSync } from './useSync.js';
10
- //# sourceMappingURL=index.js.map
@@ -50,4 +50,3 @@ export interface UseCommandHistoryReturn {
50
50
  * ```
51
51
  */
52
52
  export declare function useCommandHistory(): UseCommandHistoryReturn;
53
- //# sourceMappingURL=useCommandHistory.d.ts.map
@@ -113,4 +113,3 @@ export function useCommandHistory() {
113
113
  getHistory,
114
114
  };
115
115
  }
116
- //# sourceMappingURL=useCommandHistory.js.map
@@ -143,4 +143,3 @@ export declare function useInit(): UseInitReturn;
143
143
  * This is a workaround since we don't store API key in state
144
144
  */
145
145
  export declare function getApiKeyFromRef(): string | null;
146
- //# sourceMappingURL=useInit.d.ts.map
@@ -365,4 +365,3 @@ export function getApiKeyFromRef() {
365
365
  // This will be managed by the screen component directly
366
366
  return null;
367
367
  }
368
- //# sourceMappingURL=useInit.js.map
@@ -185,4 +185,3 @@ export interface UseSpecGeneratorReturn {
185
185
  * ```
186
186
  */
187
187
  export declare function useSpecGenerator(): UseSpecGeneratorReturn;
188
- //# sourceMappingURL=useSpecGenerator.d.ts.map
@@ -484,4 +484,3 @@ export function useSpecGenerator() {
484
484
  setWorking,
485
485
  };
486
486
  }
487
- //# sourceMappingURL=useSpecGenerator.js.map
@@ -12,4 +12,3 @@ export interface UseSyncReturn {
12
12
  sync: (projectRoot: string, provider: AIProvider, model: string) => Promise<void>;
13
13
  }
14
14
  export declare function useSync(): UseSyncReturn;
15
- //# sourceMappingURL=useSync.d.ts.map
@@ -49,4 +49,3 @@ export function useSync() {
49
49
  }, []);
50
50
  return { status, error, sync };
51
51
  }
52
- //# sourceMappingURL=useSync.js.map
@@ -11,4 +11,3 @@ export * from './theme.js';
11
11
  export * from './components/index.js';
12
12
  export * from './hooks/index.js';
13
13
  export * from './screens/index.js';
14
- //# sourceMappingURL=index.d.ts.map
package/dist/tui/index.js CHANGED
@@ -15,4 +15,3 @@ export * from './components/index.js';
15
15
  export * from './hooks/index.js';
16
16
  // Screen components
17
17
  export * from './screens/index.js';
18
- //# sourceMappingURL=index.js.map
@@ -3,4 +3,3 @@
3
3
  * Exports orchestration classes that bridge TUI components to AI services
4
4
  */
5
5
  export { InterviewOrchestrator, type InterviewOrchestratorOptions, type SessionContext, } from './interview-orchestrator.js';
6
- //# sourceMappingURL=index.d.ts.map
@@ -3,4 +3,3 @@
3
3
  * Exports orchestration classes that bridge TUI components to AI services
4
4
  */
5
5
  export { InterviewOrchestrator, } from './interview-orchestrator.js';
6
- //# sourceMappingURL=index.js.map
@@ -164,4 +164,3 @@ export declare class InterviewOrchestrator {
164
164
  */
165
165
  getSpec(): string;
166
166
  }
167
- //# sourceMappingURL=interview-orchestrator.d.ts.map
@@ -619,4 +619,3 @@ Today's date is ${new Date().toISOString().split('T')[0]}.`;
619
619
  return this.generatedSpec;
620
620
  }
621
621
  }
622
- //# sourceMappingURL=interview-orchestrator.js.map
@@ -30,4 +30,3 @@ export interface InitScreenProps {
30
30
  * init flow with native Ink components.
31
31
  */
32
32
  export declare function InitScreen({ projectRoot, sessionState, onComplete, onCancel, }: InitScreenProps): React.ReactElement;
33
- //# sourceMappingURL=InitScreen.d.ts.map
@@ -323,4 +323,3 @@ export function InitScreen({ projectRoot, sessionState, onComplete, onCancel, })
323
323
  const phaseString = `${phaseConfig.name} (${phaseConfig.number}/${INIT_TOTAL_PHASES})`;
324
324
  return (_jsxs(Box, { flexDirection: "column", padding: 1, children: [_jsx(Box, { marginTop: 1, children: renderScanSummary() }), _jsx(Box, { marginTop: 1, children: renderPhaseContent() }), _jsx(FooterStatusBar, { action: "Initialize Project", phase: phaseString, path: projectRoot })] }));
325
325
  }
326
- //# sourceMappingURL=InitScreen.js.map
@@ -43,4 +43,3 @@ export interface InterviewScreenProps {
43
43
  * to bridge to the AI conversation.
44
44
  */
45
45
  export declare function InterviewScreen({ featureName, projectRoot, provider, model, scanResult, specsPath, onComplete, onCancel, }: InterviewScreenProps): React.ReactElement;
46
- //# sourceMappingURL=InterviewScreen.d.ts.map
@@ -318,4 +318,3 @@ export function InterviewScreen({ featureName, projectRoot, provider, model, sca
318
318
  // Free-text mode (default for all phases)
319
319
  _jsx(ChatInput, { onSubmit: handleSubmit, disabled: inputDisabled, allowEmpty: state.phase === 'context', placeholder: getPlaceholder() })) })), _jsx(FooterStatusBar, { action: "New Spec", phase: phaseString, path: featureName })] }));
320
320
  }
321
- //# sourceMappingURL=InterviewScreen.js.map
@@ -43,4 +43,3 @@ export interface MainShellProps {
43
43
  * ```
44
44
  */
45
45
  export declare function MainShell({ sessionState, onNavigate, }: MainShellProps): React.ReactElement;
46
- //# sourceMappingURL=MainShell.d.ts.map
@@ -270,4 +270,3 @@ export function MainShell({ sessionState, onNavigate, }) {
270
270
  : 'Context: none — /sync'
271
271
  : 'Not initialized — /init' })] }));
272
272
  }
273
- //# sourceMappingURL=MainShell.js.map
@@ -26,4 +26,3 @@ export interface RunScreenProps {
26
26
  onCancel: () => void;
27
27
  }
28
28
  export declare function RunScreen({ featureName, projectRoot, sessionState, onComplete, onCancel, }: RunScreenProps): React.ReactElement;
29
- //# sourceMappingURL=RunScreen.d.ts.map
@@ -164,12 +164,20 @@ export function RunScreen({ featureName, projectRoot, sessionState, onComplete,
164
164
  setIsStarting(false);
165
165
  return;
166
166
  }
167
+ const reviewMode = config.loop.reviewMode ?? 'manual';
168
+ if (reviewMode !== 'manual' && reviewMode !== 'auto') {
169
+ setError(`Invalid reviewMode '${reviewMode}'. Allowed values are 'manual' or 'auto'.`);
170
+ setIsStarting(false);
171
+ return;
172
+ }
167
173
  const logPath = `/tmp/ralph-loop-${featureName}.log`;
168
174
  const logFd = openSync(logPath, 'a');
169
175
  const args = [
170
176
  featureName,
171
177
  String(config.loop.maxIterations),
172
178
  String(config.loop.maxE2eAttempts),
179
+ '--review-mode',
180
+ reviewMode,
173
181
  ];
174
182
  const child = spawn('bash', [scriptPath, ...args], {
175
183
  cwd: dirname(scriptPath),
@@ -249,4 +257,3 @@ export function RunScreen({ featureName, projectRoot, sessionState, onComplete,
249
257
  const phaseLine = isStarting ? 'Starting...' : status.phase;
250
258
  return (_jsxs(Box, { flexDirection: "column", padding: 1, children: [error && (_jsx(Box, { marginTop: 1, children: _jsxs(Text, { color: theme.colors.error, children: ["Error: ", error] }) })), !error && (_jsxs(_Fragment, { children: [_jsxs(Box, { marginTop: 1, flexDirection: "row", children: [_jsx(Text, { children: "Phase: " }), _jsx(Text, { color: colors.yellow, children: phaseLine }), _jsx(Text, { dimColor: true, children: theme.statusLine.separator }), _jsx(Text, { children: "Iter: " }), _jsx(Text, { color: colors.green, children: status.iteration }), _jsxs(Text, { dimColor: true, children: ["/", status.maxIterations || maxIterationsRef.current || '-'] }), _jsx(Text, { dimColor: true, children: theme.statusLine.separator }), _jsx(Text, { children: "Branch: " }), _jsx(Text, { color: colors.blue, children: branch })] }), _jsxs(Box, { marginTop: 1, flexDirection: "row", children: [_jsx(Text, { children: "Tokens: " }), _jsx(Text, { color: colors.pink, children: formatNumber(totalTokens) }), _jsxs(Text, { dimColor: true, children: [" (in:", formatNumber(status.tokensInput), " out:", formatNumber(status.tokensOutput), ")"] }), _jsx(Text, { dimColor: true, children: theme.statusLine.separator }), _jsxs(Text, { dimColor: true, children: ["Elapsed: ", formatDuration(startTimeRef.current)] })] }), _jsxs(Box, { marginTop: 1, flexDirection: "column", children: [_jsxs(Box, { flexDirection: "row", alignItems: "center", gap: 1, children: [_jsx(Text, { bold: true, children: "Implementation:" }), _jsx(ProgressBar, { percent: percentTasks }), _jsxs(Text, { children: [percentTasks, "%"] }), _jsxs(Text, { color: colors.green, children: ["\u2713 ", tasks.tasksDone] }), _jsxs(Text, { color: colors.yellow, children: ["\u25CB ", tasks.tasksPending] })] }), totalE2e > 0 && (_jsxs(Box, { flexDirection: "row", alignItems: "center", gap: 1, children: [_jsx(Text, { bold: true, children: "E2E Tests:" }), _jsx(ProgressBar, { percent: percentE2e }), _jsxs(Text, { children: [percentE2e, "%"] }), _jsxs(Text, { color: colors.green, children: ["\u2713 ", tasks.e2eDone] }), _jsxs(Text, { color: colors.yellow, children: ["\u25CB ", tasks.e2ePending] })] })), _jsxs(Box, { flexDirection: "row", alignItems: "center", gap: 1, marginTop: 1, children: [_jsx(Text, { bold: true, children: "Overall:" }), _jsx(ProgressBar, { percent: percentAll }), _jsxs(Text, { children: [percentAll, "%"] }), _jsxs(Text, { color: colors.green, children: ["\u2713 ", doneAll] }), _jsxs(Text, { color: colors.yellow, children: ["\u25CB ", totalAll - doneAll] })] })] }), _jsx(Box, { marginTop: 1, children: _jsxs(Text, { dimColor: true, children: ["Tip: /monitor ", featureName, " in another terminal for details"] }) }), _jsx(Box, { children: _jsx(Text, { dimColor: true, children: "Press Ctrl+C to stop the loop" }) })] })), showConfirm && (_jsx(Box, { marginTop: 1, children: _jsx(Confirm, { message: stopRequestedRef.current ? 'Stopping loop...' : 'Stop the feature loop?', onConfirm: handleConfirm, onCancel: () => setShowConfirm(false), initialValue: false }) })), _jsx(FooterStatusBar, { action: "Run Loop", phase: phaseLine, path: featureName })] }));
251
259
  }
252
- //# sourceMappingURL=RunScreen.js.map
@@ -42,4 +42,3 @@ export interface WelcomeScreenProps {
42
42
  * ```
43
43
  */
44
44
  export declare function WelcomeScreen({ provider, model, version, isInitialized, onContinue, }: WelcomeScreenProps): React.ReactElement;
45
- //# sourceMappingURL=WelcomeScreen.d.ts.map
@@ -52,4 +52,3 @@ export function WelcomeScreen({ provider, model, version, isInitialized, onConti
52
52
  const statusColor = isInitialized ? colors.green : colors.orange;
53
53
  return (_jsxs(Box, { flexDirection: "column", padding: 1, children: [_jsx(WiggumBanner, {}), _jsxs(Box, { marginTop: 1, flexDirection: "row", children: [_jsxs(Text, { color: colors.pink, children: ["v", versionDisplay] }), _jsx(Text, { dimColor: true, children: separator }), provider ? (_jsx(Text, { color: colors.blue, children: modelDisplay })) : (_jsx(Text, { color: colors.orange, children: modelDisplay })), _jsx(Text, { dimColor: true, children: separator }), _jsx(Text, { color: statusColor, children: statusText })] }), _jsx(Box, { marginTop: 2, children: _jsxs(Text, { dimColor: true, children: ["Tip: ", isInitialized ? '/new <feature> to create spec' : '/init to set up', ", /help for commands"] }) })] }));
54
54
  }
55
- //# sourceMappingURL=WelcomeScreen.js.map
@@ -11,4 +11,3 @@ export { MainShell } from './MainShell.js';
11
11
  export type { MainShellProps, NavigationTarget, NavigationProps } from './MainShell.js';
12
12
  export { RunScreen } from './RunScreen.js';
13
13
  export type { RunScreenProps, RunSummary } from './RunScreen.js';
14
- //# sourceMappingURL=index.d.ts.map
@@ -6,4 +6,3 @@ export { InitScreen } from './InitScreen.js';
6
6
  export { WelcomeScreen } from './WelcomeScreen.js';
7
7
  export { MainShell } from './MainShell.js';
8
8
  export { RunScreen } from './RunScreen.js';
9
- //# sourceMappingURL=index.js.map
@@ -117,4 +117,3 @@ export declare function getColor(name: ColorName): string;
117
117
  * Get phase character by status
118
118
  */
119
119
  export declare function getPhaseChar(status: PhaseStatus): string;
120
- //# sourceMappingURL=theme.d.ts.map
package/dist/tui/theme.js CHANGED
@@ -113,4 +113,3 @@ export function getColor(name) {
113
113
  export function getPhaseChar(status) {
114
114
  return phase[status];
115
115
  }
116
- //# sourceMappingURL=theme.js.map
@@ -39,4 +39,3 @@ export type InterviewAnswer = {
39
39
  * Map selected option IDs to their labels, falling back to raw IDs for unmatched entries
40
40
  */
41
41
  export declare function resolveOptionLabels(options: readonly InterviewOption[], selectedIds: readonly string[]): string[];
42
- //# sourceMappingURL=interview.d.ts.map
@@ -10,4 +10,3 @@ export function resolveOptionLabels(options, selectedIds) {
10
10
  return option?.label ?? id;
11
11
  });
12
12
  }
13
- //# sourceMappingURL=interview.js.map
@@ -123,4 +123,3 @@ export declare function moveCursorByWordLeft(value: string, cursorIndex: number)
123
123
  * ```
124
124
  */
125
125
  export declare function moveCursorByWordRight(value: string, cursorIndex: number): number;
126
- //# sourceMappingURL=input-utils.d.ts.map
@@ -175,4 +175,3 @@ export function moveCursorByWordRight(value, cursorIndex) {
175
175
  }
176
176
  return idx;
177
177
  }
178
- //# sourceMappingURL=input-utils.js.map
@@ -35,4 +35,3 @@ export declare function getGitBranch(projectRoot: string): string;
35
35
  * Format number with K/M suffix.
36
36
  */
37
37
  export declare function formatNumber(num: number): string;
38
- //# sourceMappingURL=loop-status.d.ts.map
@@ -27,7 +27,9 @@ export function detectPhase(feature) {
27
27
  return 'E2E Testing';
28
28
  if (isProcessRunning('PROMPT_verify.md'))
29
29
  return 'Verification';
30
- if (isProcessRunning('PROMPT_review.md'))
30
+ if (isProcessRunning('PROMPT_review_manual.md'))
31
+ return 'PR Review';
32
+ if (isProcessRunning('PROMPT_review_auto.md'))
31
33
  return 'PR Review';
32
34
  if (isProcessRunning('PROMPT.md'))
33
35
  return 'Implementation';
@@ -147,4 +149,3 @@ export function formatNumber(num) {
147
149
  }
148
150
  return String(num);
149
151
  }
150
- //# sourceMappingURL=loop-status.js.map
@@ -92,4 +92,3 @@ export declare function nextStepsBox(steps: Array<{
92
92
  */
93
93
  export declare const PASSWORD_MASK_LENGTH = 32;
94
94
  export declare const PASSWORD_MASK: string;
95
- //# sourceMappingURL=colors.d.ts.map
@@ -203,4 +203,3 @@ export function nextStepsBox(steps) {
203
203
  */
204
204
  export const PASSWORD_MASK_LENGTH = 32;
205
205
  export const PASSWORD_MASK = '▪'.repeat(PASSWORD_MASK_LENGTH);
206
- //# sourceMappingURL=colors.js.map
@@ -48,6 +48,7 @@ export interface LoopConfig {
48
48
  maxE2eAttempts: number;
49
49
  defaultModel: string;
50
50
  planningModel: string;
51
+ reviewMode: 'manual' | 'auto';
51
52
  }
52
53
  /**
53
54
  * Full ralph.config.cjs structure
@@ -92,4 +93,3 @@ export declare function getScriptsDir(projectRoot: string): Promise<string>;
92
93
  * Get loop settings with defaults
93
94
  */
94
95
  export declare function getLoopSettings(projectRoot: string): Promise<LoopConfig>;
95
- //# sourceMappingURL=config.d.ts.map
@@ -45,6 +45,7 @@ export const DEFAULT_CONFIG = {
45
45
  maxE2eAttempts: 5,
46
46
  defaultModel: 'sonnet',
47
47
  planningModel: 'opus',
48
+ reviewMode: 'manual',
48
49
  },
49
50
  };
50
51
  /**
@@ -143,6 +144,6 @@ export async function getLoopSettings(projectRoot) {
143
144
  maxE2eAttempts: config?.loop?.maxE2eAttempts || DEFAULT_CONFIG.loop.maxE2eAttempts,
144
145
  defaultModel: config?.loop?.defaultModel || DEFAULT_CONFIG.loop.defaultModel,
145
146
  planningModel: config?.loop?.planningModel || DEFAULT_CONFIG.loop.planningModel,
147
+ reviewMode: config?.loop?.reviewMode || DEFAULT_CONFIG.loop.reviewMode,
146
148
  };
147
149
  }
148
- //# sourceMappingURL=config.js.map
@@ -35,4 +35,3 @@ export declare function writeKeysToEnvFile(filePath: string, keys: Record<string
35
35
  * - Malformed lines are skipped without aborting.
36
36
  */
37
37
  export declare function loadApiKeysFromEnvLocal(): void;
38
- //# sourceMappingURL=env.d.ts.map
package/dist/utils/env.js CHANGED
@@ -115,4 +115,3 @@ export function loadApiKeysFromEnvLocal() {
115
115
  logger.debug(`Failed to load env file: ${err instanceof Error ? err.message : String(err)}`);
116
116
  }
117
117
  }
118
- //# sourceMappingURL=env.js.map
@@ -6,4 +6,3 @@ export declare function displayHeader(): void;
6
6
  * Display a minimal header (for subcommands)
7
7
  */
8
8
  export declare function displayMinimalHeader(): void;
9
- //# sourceMappingURL=header.d.ts.map
@@ -44,4 +44,3 @@ export function displayMinimalHeader() {
44
44
  console.log(simpson.yellow('Wiggum CLI') + simpson.brown(' │ ') + 'AI-powered Ralph development loop');
45
45
  console.log('');
46
46
  }
47
- //# sourceMappingURL=header.js.map
@@ -11,4 +11,3 @@ export declare function repairJson(text: string): string;
11
11
  * Tries to fix common issues before parsing
12
12
  */
13
13
  export declare function parseJsonSafe<T>(text: string): T | null;
14
- //# sourceMappingURL=json-repair.d.ts.map
@@ -143,4 +143,3 @@ export function parseJsonSafe(text) {
143
143
  }
144
144
  return null;
145
145
  }
146
- //# sourceMappingURL=json-repair.js.map
@@ -8,4 +8,3 @@ export declare const logger: {
8
8
  error(message: string): void;
9
9
  debug(message: string): void;
10
10
  };
11
- //# sourceMappingURL=logger.d.ts.map
@@ -21,4 +21,3 @@ export const logger = {
21
21
  }
22
22
  },
23
23
  };
24
- //# sourceMappingURL=logger.js.map
@@ -71,4 +71,3 @@ export declare class ShimmerSpinner {
71
71
  * Create a shimmer spinner instance
72
72
  */
73
73
  export declare function createShimmerSpinner(options?: ShimmerSpinnerOptions): ShimmerSpinner;
74
- //# sourceMappingURL=spinner.d.ts.map
@@ -205,4 +205,3 @@ export class ShimmerSpinner {
205
205
  export function createShimmerSpinner(options) {
206
206
  return new ShimmerSpinner(options);
207
207
  }
208
- //# sourceMappingURL=spinner.js.map
@@ -27,4 +27,3 @@ export declare function maybeTraced<T extends (...args: unknown[]) => unknown>(f
27
27
  type?: string;
28
28
  name?: string;
29
29
  }): T;
30
- //# sourceMappingURL=tracing.d.ts.map
@@ -100,4 +100,3 @@ export function maybeTraced(fn, options = {}) {
100
100
  name: options.name || fn.name || 'anonymous',
101
101
  });
102
102
  }
103
- //# sourceMappingURL=tracing.js.map
@@ -58,4 +58,3 @@ export declare function clearThinking(): void;
58
58
  * Format bytes for display
59
59
  */
60
60
  export declare function formatBytes(bytes: number): string;
61
- //# sourceMappingURL=tui.d.ts.map
package/dist/utils/tui.js CHANGED
@@ -211,4 +211,3 @@ export function formatBytes(bytes) {
211
211
  return `${(bytes / 1024).toFixed(1)}KB`;
212
212
  return `${(bytes / (1024 * 1024)).toFixed(1)}MB`;
213
213
  }
214
- //# sourceMappingURL=tui.js.map
@@ -18,4 +18,3 @@ export declare function checkForUpdates(): Promise<UpdateInfo | null>;
18
18
  */
19
19
  export declare function notifyIfUpdateAvailable(): Promise<void>;
20
20
  export {};
21
- //# sourceMappingURL=update-check.d.ts.map
@@ -146,4 +146,3 @@ export async function notifyIfUpdateAvailable() {
146
146
  // Fail silently - don't interrupt user workflow
147
147
  }
148
148
  }
149
- //# sourceMappingURL=update-check.js.map
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "wiggum-cli",
3
- "version": "0.11.26",
3
+ "version": "0.12.1",
4
4
  "description": "AI-powered feature development loop CLI",
5
5
  "type": "module",
6
6
  "main": "dist/index.js",
@@ -9,8 +9,7 @@
9
9
  "bin",
10
10
  "src/templates",
11
11
  "LICENSE",
12
- "README.md",
13
- "CONTRIBUTING.md"
12
+ "README.md"
14
13
  ],
15
14
  "bin": {
16
15
  "wiggum": "bin/ralph.js"
@@ -22,7 +21,8 @@
22
21
  "start": "node bin/ralph.js",
23
22
  "test": "vitest run",
24
23
  "test:watch": "vitest",
25
- "prepublishOnly": "npm run build"
24
+ "typecheck": "tsc --noEmit",
25
+ "prepublishOnly": "npm run build && npm test"
26
26
  },
27
27
  "keywords": [
28
28
  "cli",
@@ -39,7 +39,6 @@
39
39
  "@ai-sdk/anthropic": "^3.0.15",
40
40
  "@ai-sdk/openai": "^3.0.12",
41
41
  "@braintrust/otel": "^0.2.0",
42
- "@clack/prompts": "^0.7.0",
43
42
  "@upstash/context7-tools-ai-sdk": "^0.2.1",
44
43
  "ai": "^6.0.41",
45
44
  "braintrust": "^2.0.2",
@@ -55,6 +54,7 @@
55
54
  "devDependencies": {
56
55
  "@types/node": "^20.10.0",
57
56
  "@types/react": "^19.2.9",
57
+ "@vitest/coverage-v8": "^4.0.18",
58
58
  "ink-testing-library": "^4.0.0",
59
59
  "typescript": "^5.3.0",
60
60
  "vitest": "^4.0.17"
@@ -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
  };