wiggum-cli 0.12.0 → 0.13.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (502) hide show
  1. package/dist/ai/agents/codebase-analyst.d.ts +0 -1
  2. package/dist/ai/agents/codebase-analyst.js +0 -1
  3. package/dist/ai/agents/codebase-analyzer.d.ts +0 -1
  4. package/dist/ai/agents/codebase-analyzer.js +0 -1
  5. package/dist/ai/agents/context-enricher.d.ts +0 -1
  6. package/dist/ai/agents/context-enricher.js +0 -1
  7. package/dist/ai/agents/evaluator-optimizer.d.ts +0 -1
  8. package/dist/ai/agents/evaluator-optimizer.js +0 -1
  9. package/dist/ai/agents/index.d.ts +0 -1
  10. package/dist/ai/agents/index.js +0 -1
  11. package/dist/ai/agents/mcp-detector.d.ts +0 -1
  12. package/dist/ai/agents/mcp-detector.js +0 -1
  13. package/dist/ai/agents/orchestrator.d.ts +0 -1
  14. package/dist/ai/agents/orchestrator.js +0 -1
  15. package/dist/ai/agents/planning-orchestrator.d.ts +0 -1
  16. package/dist/ai/agents/planning-orchestrator.js +0 -1
  17. package/dist/ai/agents/stack-researcher.d.ts +0 -1
  18. package/dist/ai/agents/stack-researcher.js +0 -1
  19. package/dist/ai/agents/stack-utils.d.ts +0 -1
  20. package/dist/ai/agents/stack-utils.js +0 -1
  21. package/dist/ai/agents/synthesis-agent.d.ts +0 -1
  22. package/dist/ai/agents/synthesis-agent.js +0 -1
  23. package/dist/ai/agents/tech-researcher.d.ts +0 -1
  24. package/dist/ai/agents/tech-researcher.js +0 -1
  25. package/dist/ai/agents/types.d.ts +0 -1
  26. package/dist/ai/agents/types.js +0 -1
  27. package/dist/ai/conversation/conversation-manager.d.ts +0 -1
  28. package/dist/ai/conversation/conversation-manager.js +0 -1
  29. package/dist/ai/conversation/index.d.ts +0 -1
  30. package/dist/ai/conversation/index.js +0 -1
  31. package/dist/ai/conversation/interview-tools.d.ts +0 -1
  32. package/dist/ai/conversation/interview-tools.js +0 -1
  33. package/dist/ai/conversation/spec-generator.d.ts +0 -1
  34. package/dist/ai/conversation/spec-generator.js +0 -1
  35. package/dist/ai/conversation/url-fetcher.d.ts +0 -1
  36. package/dist/ai/conversation/url-fetcher.js +0 -1
  37. package/dist/ai/enhancer.d.ts +0 -1
  38. package/dist/ai/enhancer.js +0 -1
  39. package/dist/ai/index.d.ts +0 -1
  40. package/dist/ai/index.js +0 -1
  41. package/dist/ai/prompts.d.ts +0 -1
  42. package/dist/ai/prompts.js +0 -1
  43. package/dist/ai/providers.d.ts +0 -1
  44. package/dist/ai/providers.js +0 -1
  45. package/dist/ai/tools/context7.d.ts +0 -1
  46. package/dist/ai/tools/context7.js +0 -1
  47. package/dist/ai/tools/index.d.ts +0 -1
  48. package/dist/ai/tools/index.js +0 -1
  49. package/dist/ai/tools/tavily.d.ts +0 -1
  50. package/dist/ai/tools/tavily.js +0 -1
  51. package/dist/ai/tools.d.ts +0 -1
  52. package/dist/ai/tools.js +0 -1
  53. package/dist/commands/config.d.ts +0 -1
  54. package/dist/commands/config.js +0 -1
  55. package/dist/commands/init.d.ts +0 -1
  56. package/dist/commands/init.js +0 -1
  57. package/dist/commands/monitor.d.ts +0 -1
  58. package/dist/commands/monitor.js +0 -1
  59. package/dist/commands/new.d.ts +0 -1
  60. package/dist/commands/new.js +0 -1
  61. package/dist/commands/run.d.ts +0 -1
  62. package/dist/commands/run.js +0 -1
  63. package/dist/context/convert.d.ts +0 -1
  64. package/dist/context/convert.js +0 -1
  65. package/dist/context/index.d.ts +0 -1
  66. package/dist/context/index.js +0 -1
  67. package/dist/context/storage.d.ts +0 -1
  68. package/dist/context/storage.js +0 -1
  69. package/dist/context/types.d.ts +0 -1
  70. package/dist/context/types.js +0 -1
  71. package/dist/generator/config.d.ts +0 -1
  72. package/dist/generator/config.js +0 -1
  73. package/dist/generator/index.d.ts +0 -1
  74. package/dist/generator/index.js +0 -1
  75. package/dist/generator/templates.d.ts +0 -1
  76. package/dist/generator/templates.js +0 -1
  77. package/dist/generator/writer.d.ts +0 -1
  78. package/dist/generator/writer.js +0 -1
  79. package/dist/index.d.ts +0 -1
  80. package/dist/index.js +7 -7
  81. package/dist/repl/command-parser.d.ts +0 -1
  82. package/dist/repl/command-parser.js +0 -1
  83. package/dist/repl/index.d.ts +0 -1
  84. package/dist/repl/index.js +0 -1
  85. package/dist/repl/session-state.d.ts +0 -1
  86. package/dist/repl/session-state.js +0 -1
  87. package/dist/scanner/detectors/core/framework.d.ts +0 -1
  88. package/dist/scanner/detectors/core/framework.js +0 -1
  89. package/dist/scanner/detectors/core/packageManager.d.ts +0 -1
  90. package/dist/scanner/detectors/core/packageManager.js +0 -1
  91. package/dist/scanner/detectors/core/styling.d.ts +0 -1
  92. package/dist/scanner/detectors/core/styling.js +0 -1
  93. package/dist/scanner/detectors/core/testing.d.ts +0 -1
  94. package/dist/scanner/detectors/core/testing.js +0 -1
  95. package/dist/scanner/detectors/data/api.d.ts +0 -1
  96. package/dist/scanner/detectors/data/api.js +0 -1
  97. package/dist/scanner/detectors/data/database.d.ts +0 -1
  98. package/dist/scanner/detectors/data/database.js +0 -1
  99. package/dist/scanner/detectors/data/orm.d.ts +0 -1
  100. package/dist/scanner/detectors/data/orm.js +0 -1
  101. package/dist/scanner/detectors/frontend/formHandling.d.ts +0 -1
  102. package/dist/scanner/detectors/frontend/formHandling.js +0 -1
  103. package/dist/scanner/detectors/frontend/stateManagement.d.ts +0 -1
  104. package/dist/scanner/detectors/frontend/stateManagement.js +0 -1
  105. package/dist/scanner/detectors/frontend/uiComponents.d.ts +0 -1
  106. package/dist/scanner/detectors/frontend/uiComponents.js +0 -1
  107. package/dist/scanner/detectors/infra/deployment.d.ts +0 -1
  108. package/dist/scanner/detectors/infra/deployment.js +0 -1
  109. package/dist/scanner/detectors/infra/monorepo.d.ts +0 -1
  110. package/dist/scanner/detectors/infra/monorepo.js +0 -1
  111. package/dist/scanner/detectors/mcp/mcpProject.d.ts +0 -1
  112. package/dist/scanner/detectors/mcp/mcpProject.js +0 -1
  113. package/dist/scanner/detectors/mcp/mcpServers.d.ts +0 -1
  114. package/dist/scanner/detectors/mcp/mcpServers.js +0 -1
  115. package/dist/scanner/detectors/services/analytics.d.ts +0 -1
  116. package/dist/scanner/detectors/services/analytics.js +0 -1
  117. package/dist/scanner/detectors/services/auth.d.ts +0 -1
  118. package/dist/scanner/detectors/services/auth.js +0 -1
  119. package/dist/scanner/detectors/services/email.d.ts +0 -1
  120. package/dist/scanner/detectors/services/email.js +0 -1
  121. package/dist/scanner/detectors/services/payments.d.ts +0 -1
  122. package/dist/scanner/detectors/services/payments.js +0 -1
  123. package/dist/scanner/detectors/utils.d.ts +0 -1
  124. package/dist/scanner/detectors/utils.js +0 -1
  125. package/dist/scanner/index.d.ts +0 -1
  126. package/dist/scanner/index.js +0 -1
  127. package/dist/scanner/registry.d.ts +0 -1
  128. package/dist/scanner/registry.js +0 -1
  129. package/dist/scanner/types.d.ts +0 -1
  130. package/dist/scanner/types.js +0 -1
  131. package/dist/tui/app.d.ts +12 -23
  132. package/dist/tui/app.js +130 -315
  133. package/dist/tui/components/ActionOutput.d.ts +0 -1
  134. package/dist/tui/components/ActionOutput.js +0 -1
  135. package/dist/tui/components/AppShell.d.ts +47 -0
  136. package/dist/tui/components/AppShell.js +19 -0
  137. package/dist/tui/components/ChatInput.d.ts +0 -1
  138. package/dist/tui/components/ChatInput.js +0 -1
  139. package/dist/tui/components/CommandDropdown.d.ts +0 -1
  140. package/dist/tui/components/CommandDropdown.js +0 -1
  141. package/dist/tui/components/Confirm.d.ts +0 -1
  142. package/dist/tui/components/Confirm.js +0 -1
  143. package/dist/tui/components/ErrorCard.d.ts +0 -1
  144. package/dist/tui/components/ErrorCard.js +0 -1
  145. package/dist/tui/components/FooterStatusBar.d.ts +0 -1
  146. package/dist/tui/components/FooterStatusBar.js +2 -4
  147. package/dist/tui/components/HeaderContent.d.ts +28 -0
  148. package/dist/tui/components/HeaderContent.js +16 -0
  149. package/dist/tui/components/MessageList.d.ts +9 -8
  150. package/dist/tui/components/MessageList.js +23 -18
  151. package/dist/tui/components/MultiSelect.d.ts +0 -1
  152. package/dist/tui/components/MultiSelect.js +0 -1
  153. package/dist/tui/components/PasswordInput.d.ts +0 -1
  154. package/dist/tui/components/PasswordInput.js +0 -1
  155. package/dist/tui/components/PhaseHeader.d.ts +0 -1
  156. package/dist/tui/components/PhaseHeader.js +0 -1
  157. package/dist/tui/components/RunCompletionSummary.d.ts +22 -0
  158. package/dist/tui/components/RunCompletionSummary.js +23 -0
  159. package/dist/tui/components/Select.d.ts +0 -1
  160. package/dist/tui/components/Select.js +0 -1
  161. package/dist/tui/components/SpecCompletionSummary.d.ts +47 -0
  162. package/dist/tui/components/SpecCompletionSummary.js +124 -0
  163. package/dist/tui/components/StatusLine.d.ts +0 -1
  164. package/dist/tui/components/StatusLine.js +0 -1
  165. package/dist/tui/components/StreamingText.d.ts +0 -1
  166. package/dist/tui/components/StreamingText.js +0 -1
  167. package/dist/tui/components/TipsBar.d.ts +24 -0
  168. package/dist/tui/components/TipsBar.js +23 -0
  169. package/dist/tui/components/ToolCallCard.d.ts +0 -1
  170. package/dist/tui/components/ToolCallCard.js +0 -1
  171. package/dist/tui/components/WiggumBanner.d.ts +0 -1
  172. package/dist/tui/components/WiggumBanner.js +8 -4
  173. package/dist/tui/components/WorkingIndicator.d.ts +0 -1
  174. package/dist/tui/components/WorkingIndicator.js +0 -1
  175. package/dist/tui/components/index.d.ts +0 -1
  176. package/dist/tui/components/index.js +0 -1
  177. package/dist/tui/hooks/index.d.ts +0 -1
  178. package/dist/tui/hooks/index.js +0 -1
  179. package/dist/tui/hooks/useBackgroundRuns.d.ts +52 -0
  180. package/dist/tui/hooks/useBackgroundRuns.js +121 -0
  181. package/dist/tui/hooks/useCommandHistory.d.ts +0 -1
  182. package/dist/tui/hooks/useCommandHistory.js +0 -1
  183. package/dist/tui/hooks/useInit.d.ts +0 -1
  184. package/dist/tui/hooks/useInit.js +0 -1
  185. package/dist/tui/hooks/useSpecGenerator.d.ts +0 -1
  186. package/dist/tui/hooks/useSpecGenerator.js +0 -1
  187. package/dist/tui/hooks/useSync.d.ts +0 -1
  188. package/dist/tui/hooks/useSync.js +0 -1
  189. package/dist/tui/index.d.ts +0 -1
  190. package/dist/tui/index.js +0 -1
  191. package/dist/tui/orchestration/index.d.ts +0 -1
  192. package/dist/tui/orchestration/index.js +0 -1
  193. package/dist/tui/orchestration/interview-orchestrator.d.ts +0 -1
  194. package/dist/tui/orchestration/interview-orchestrator.js +1 -2
  195. package/dist/tui/screens/InitScreen.d.ts +13 -9
  196. package/dist/tui/screens/InitScreen.js +86 -88
  197. package/dist/tui/screens/InterviewScreen.d.ts +11 -9
  198. package/dist/tui/screens/InterviewScreen.js +145 -100
  199. package/dist/tui/screens/MainShell.d.ts +13 -13
  200. package/dist/tui/screens/MainShell.js +65 -70
  201. package/dist/tui/screens/RunScreen.d.ts +17 -2
  202. package/dist/tui/screens/RunScreen.js +235 -81
  203. package/dist/tui/screens/index.d.ts +0 -3
  204. package/dist/tui/screens/index.js +0 -2
  205. package/dist/tui/theme.d.ts +0 -1
  206. package/dist/tui/theme.js +0 -1
  207. package/dist/tui/types/interview.d.ts +0 -1
  208. package/dist/tui/types/interview.js +0 -1
  209. package/dist/tui/utils/input-utils.d.ts +0 -1
  210. package/dist/tui/utils/input-utils.js +0 -1
  211. package/dist/tui/utils/loop-status.d.ts +22 -4
  212. package/dist/tui/utils/loop-status.js +65 -16
  213. package/dist/utils/colors.d.ts +0 -1
  214. package/dist/utils/colors.js +0 -1
  215. package/dist/utils/config.d.ts +0 -1
  216. package/dist/utils/config.js +0 -1
  217. package/dist/utils/env.d.ts +0 -1
  218. package/dist/utils/env.js +0 -1
  219. package/dist/utils/header.d.ts +0 -1
  220. package/dist/utils/header.js +0 -1
  221. package/dist/utils/json-repair.d.ts +0 -1
  222. package/dist/utils/json-repair.js +0 -1
  223. package/dist/utils/logger.d.ts +0 -1
  224. package/dist/utils/logger.js +0 -1
  225. package/dist/utils/spinner.d.ts +0 -1
  226. package/dist/utils/spinner.js +0 -1
  227. package/dist/utils/tracing.d.ts +0 -1
  228. package/dist/utils/tracing.js +0 -1
  229. package/dist/utils/tui.d.ts +0 -1
  230. package/dist/utils/tui.js +0 -1
  231. package/dist/utils/update-check.d.ts +0 -1
  232. package/dist/utils/update-check.js +0 -1
  233. package/package.json +6 -4
  234. package/CONTRIBUTING.md +0 -162
  235. package/dist/__test-utils__/fixtures.d.ts +0 -17
  236. package/dist/__test-utils__/fixtures.d.ts.map +0 -1
  237. package/dist/__test-utils__/fixtures.js +0 -32
  238. package/dist/__test-utils__/fixtures.js.map +0 -1
  239. package/dist/__test-utils__/ink-helpers.d.ts +0 -43
  240. package/dist/__test-utils__/ink-helpers.d.ts.map +0 -1
  241. package/dist/__test-utils__/ink-helpers.js +0 -62
  242. package/dist/__test-utils__/ink-helpers.js.map +0 -1
  243. package/dist/__test-utils__/mock-ai.d.ts +0 -99
  244. package/dist/__test-utils__/mock-ai.d.ts.map +0 -1
  245. package/dist/__test-utils__/mock-ai.js +0 -75
  246. package/dist/__test-utils__/mock-ai.js.map +0 -1
  247. package/dist/__test-utils__/mock-tracing.d.ts +0 -18
  248. package/dist/__test-utils__/mock-tracing.d.ts.map +0 -1
  249. package/dist/__test-utils__/mock-tracing.js +0 -24
  250. package/dist/__test-utils__/mock-tracing.js.map +0 -1
  251. package/dist/__test-utils__/setup.d.ts +0 -8
  252. package/dist/__test-utils__/setup.d.ts.map +0 -1
  253. package/dist/__test-utils__/setup.js +0 -21
  254. package/dist/__test-utils__/setup.js.map +0 -1
  255. package/dist/ai/agents/codebase-analyst.d.ts.map +0 -1
  256. package/dist/ai/agents/codebase-analyst.js.map +0 -1
  257. package/dist/ai/agents/codebase-analyzer.d.ts.map +0 -1
  258. package/dist/ai/agents/codebase-analyzer.js.map +0 -1
  259. package/dist/ai/agents/context-enricher.d.ts.map +0 -1
  260. package/dist/ai/agents/context-enricher.js.map +0 -1
  261. package/dist/ai/agents/evaluator-optimizer.d.ts.map +0 -1
  262. package/dist/ai/agents/evaluator-optimizer.js.map +0 -1
  263. package/dist/ai/agents/index.d.ts.map +0 -1
  264. package/dist/ai/agents/index.js.map +0 -1
  265. package/dist/ai/agents/mcp-detector.d.ts.map +0 -1
  266. package/dist/ai/agents/mcp-detector.js.map +0 -1
  267. package/dist/ai/agents/orchestrator.d.ts.map +0 -1
  268. package/dist/ai/agents/orchestrator.js.map +0 -1
  269. package/dist/ai/agents/planning-orchestrator.d.ts.map +0 -1
  270. package/dist/ai/agents/planning-orchestrator.js.map +0 -1
  271. package/dist/ai/agents/stack-researcher.d.ts.map +0 -1
  272. package/dist/ai/agents/stack-researcher.js.map +0 -1
  273. package/dist/ai/agents/stack-utils.d.ts.map +0 -1
  274. package/dist/ai/agents/stack-utils.js.map +0 -1
  275. package/dist/ai/agents/synthesis-agent.d.ts.map +0 -1
  276. package/dist/ai/agents/synthesis-agent.js.map +0 -1
  277. package/dist/ai/agents/tech-researcher.d.ts.map +0 -1
  278. package/dist/ai/agents/tech-researcher.js.map +0 -1
  279. package/dist/ai/agents/types.d.ts.map +0 -1
  280. package/dist/ai/agents/types.js.map +0 -1
  281. package/dist/ai/conversation/conversation-manager.d.ts.map +0 -1
  282. package/dist/ai/conversation/conversation-manager.js.map +0 -1
  283. package/dist/ai/conversation/index.d.ts.map +0 -1
  284. package/dist/ai/conversation/index.js.map +0 -1
  285. package/dist/ai/conversation/interview-tools.d.ts.map +0 -1
  286. package/dist/ai/conversation/interview-tools.js.map +0 -1
  287. package/dist/ai/conversation/spec-generator.d.ts.map +0 -1
  288. package/dist/ai/conversation/spec-generator.js.map +0 -1
  289. package/dist/ai/conversation/url-fetcher.d.ts.map +0 -1
  290. package/dist/ai/conversation/url-fetcher.js.map +0 -1
  291. package/dist/ai/enhancer.d.ts.map +0 -1
  292. package/dist/ai/enhancer.js.map +0 -1
  293. package/dist/ai/index.d.ts.map +0 -1
  294. package/dist/ai/index.js.map +0 -1
  295. package/dist/ai/prompts.d.ts.map +0 -1
  296. package/dist/ai/prompts.js.map +0 -1
  297. package/dist/ai/providers.d.ts.map +0 -1
  298. package/dist/ai/providers.js.map +0 -1
  299. package/dist/ai/tools/context7.d.ts.map +0 -1
  300. package/dist/ai/tools/context7.js.map +0 -1
  301. package/dist/ai/tools/index.d.ts.map +0 -1
  302. package/dist/ai/tools/index.js.map +0 -1
  303. package/dist/ai/tools/tavily.d.ts.map +0 -1
  304. package/dist/ai/tools/tavily.js.map +0 -1
  305. package/dist/ai/tools.d.ts.map +0 -1
  306. package/dist/ai/tools.js.map +0 -1
  307. package/dist/commands/config.d.ts.map +0 -1
  308. package/dist/commands/config.js.map +0 -1
  309. package/dist/commands/init.d.ts.map +0 -1
  310. package/dist/commands/init.js.map +0 -1
  311. package/dist/commands/monitor.d.ts.map +0 -1
  312. package/dist/commands/monitor.js.map +0 -1
  313. package/dist/commands/new.d.ts.map +0 -1
  314. package/dist/commands/new.js.map +0 -1
  315. package/dist/commands/run.d.ts.map +0 -1
  316. package/dist/commands/run.js.map +0 -1
  317. package/dist/context/convert.d.ts.map +0 -1
  318. package/dist/context/convert.js.map +0 -1
  319. package/dist/context/index.d.ts.map +0 -1
  320. package/dist/context/index.js.map +0 -1
  321. package/dist/context/storage.d.ts.map +0 -1
  322. package/dist/context/storage.js.map +0 -1
  323. package/dist/context/types.d.ts.map +0 -1
  324. package/dist/context/types.js.map +0 -1
  325. package/dist/generator/config.d.ts.map +0 -1
  326. package/dist/generator/config.js.map +0 -1
  327. package/dist/generator/index.d.ts.map +0 -1
  328. package/dist/generator/index.js.map +0 -1
  329. package/dist/generator/templates.d.ts.map +0 -1
  330. package/dist/generator/templates.js.map +0 -1
  331. package/dist/generator/writer.d.ts.map +0 -1
  332. package/dist/generator/writer.js.map +0 -1
  333. package/dist/index.d.ts.map +0 -1
  334. package/dist/index.js.map +0 -1
  335. package/dist/repl/command-parser.d.ts.map +0 -1
  336. package/dist/repl/command-parser.js.map +0 -1
  337. package/dist/repl/index.d.ts.map +0 -1
  338. package/dist/repl/index.js.map +0 -1
  339. package/dist/repl/session-state.d.ts.map +0 -1
  340. package/dist/repl/session-state.js.map +0 -1
  341. package/dist/scanner/detectors/core/framework.d.ts.map +0 -1
  342. package/dist/scanner/detectors/core/framework.js.map +0 -1
  343. package/dist/scanner/detectors/core/packageManager.d.ts.map +0 -1
  344. package/dist/scanner/detectors/core/packageManager.js.map +0 -1
  345. package/dist/scanner/detectors/core/styling.d.ts.map +0 -1
  346. package/dist/scanner/detectors/core/styling.js.map +0 -1
  347. package/dist/scanner/detectors/core/testing.d.ts.map +0 -1
  348. package/dist/scanner/detectors/core/testing.js.map +0 -1
  349. package/dist/scanner/detectors/data/api.d.ts.map +0 -1
  350. package/dist/scanner/detectors/data/api.js.map +0 -1
  351. package/dist/scanner/detectors/data/database.d.ts.map +0 -1
  352. package/dist/scanner/detectors/data/database.js.map +0 -1
  353. package/dist/scanner/detectors/data/orm.d.ts.map +0 -1
  354. package/dist/scanner/detectors/data/orm.js.map +0 -1
  355. package/dist/scanner/detectors/frontend/formHandling.d.ts.map +0 -1
  356. package/dist/scanner/detectors/frontend/formHandling.js.map +0 -1
  357. package/dist/scanner/detectors/frontend/stateManagement.d.ts.map +0 -1
  358. package/dist/scanner/detectors/frontend/stateManagement.js.map +0 -1
  359. package/dist/scanner/detectors/frontend/uiComponents.d.ts.map +0 -1
  360. package/dist/scanner/detectors/frontend/uiComponents.js.map +0 -1
  361. package/dist/scanner/detectors/infra/deployment.d.ts.map +0 -1
  362. package/dist/scanner/detectors/infra/deployment.js.map +0 -1
  363. package/dist/scanner/detectors/infra/monorepo.d.ts.map +0 -1
  364. package/dist/scanner/detectors/infra/monorepo.js.map +0 -1
  365. package/dist/scanner/detectors/mcp/mcpProject.d.ts.map +0 -1
  366. package/dist/scanner/detectors/mcp/mcpProject.js.map +0 -1
  367. package/dist/scanner/detectors/mcp/mcpServers.d.ts.map +0 -1
  368. package/dist/scanner/detectors/mcp/mcpServers.js.map +0 -1
  369. package/dist/scanner/detectors/services/analytics.d.ts.map +0 -1
  370. package/dist/scanner/detectors/services/analytics.js.map +0 -1
  371. package/dist/scanner/detectors/services/auth.d.ts.map +0 -1
  372. package/dist/scanner/detectors/services/auth.js.map +0 -1
  373. package/dist/scanner/detectors/services/email.d.ts.map +0 -1
  374. package/dist/scanner/detectors/services/email.js.map +0 -1
  375. package/dist/scanner/detectors/services/payments.d.ts.map +0 -1
  376. package/dist/scanner/detectors/services/payments.js.map +0 -1
  377. package/dist/scanner/detectors/utils.d.ts.map +0 -1
  378. package/dist/scanner/detectors/utils.js.map +0 -1
  379. package/dist/scanner/index.d.ts.map +0 -1
  380. package/dist/scanner/index.js.map +0 -1
  381. package/dist/scanner/registry.d.ts.map +0 -1
  382. package/dist/scanner/registry.js.map +0 -1
  383. package/dist/scanner/types.d.ts.map +0 -1
  384. package/dist/scanner/types.js.map +0 -1
  385. package/dist/tui/app.d.ts.map +0 -1
  386. package/dist/tui/app.js.map +0 -1
  387. package/dist/tui/components/ActionOutput.d.ts.map +0 -1
  388. package/dist/tui/components/ActionOutput.js.map +0 -1
  389. package/dist/tui/components/ChatInput.d.ts.map +0 -1
  390. package/dist/tui/components/ChatInput.js.map +0 -1
  391. package/dist/tui/components/ChatInput.test.d.ts +0 -2
  392. package/dist/tui/components/ChatInput.test.d.ts.map +0 -1
  393. package/dist/tui/components/ChatInput.test.js +0 -75
  394. package/dist/tui/components/ChatInput.test.js.map +0 -1
  395. package/dist/tui/components/CommandDropdown.d.ts.map +0 -1
  396. package/dist/tui/components/CommandDropdown.js.map +0 -1
  397. package/dist/tui/components/Confirm.d.ts.map +0 -1
  398. package/dist/tui/components/Confirm.js.map +0 -1
  399. package/dist/tui/components/ErrorCard.d.ts.map +0 -1
  400. package/dist/tui/components/ErrorCard.js.map +0 -1
  401. package/dist/tui/components/FooterStatusBar.d.ts.map +0 -1
  402. package/dist/tui/components/FooterStatusBar.js.map +0 -1
  403. package/dist/tui/components/MessageList.d.ts.map +0 -1
  404. package/dist/tui/components/MessageList.js.map +0 -1
  405. package/dist/tui/components/MultiSelect.d.ts.map +0 -1
  406. package/dist/tui/components/MultiSelect.js.map +0 -1
  407. package/dist/tui/components/PasswordInput.d.ts.map +0 -1
  408. package/dist/tui/components/PasswordInput.js.map +0 -1
  409. package/dist/tui/components/PhaseHeader.d.ts.map +0 -1
  410. package/dist/tui/components/PhaseHeader.js.map +0 -1
  411. package/dist/tui/components/Select.d.ts.map +0 -1
  412. package/dist/tui/components/Select.js.map +0 -1
  413. package/dist/tui/components/StatusLine.d.ts.map +0 -1
  414. package/dist/tui/components/StatusLine.js.map +0 -1
  415. package/dist/tui/components/StreamingText.d.ts.map +0 -1
  416. package/dist/tui/components/StreamingText.js.map +0 -1
  417. package/dist/tui/components/ToolCallCard.d.ts.map +0 -1
  418. package/dist/tui/components/ToolCallCard.js.map +0 -1
  419. package/dist/tui/components/WiggumBanner.d.ts.map +0 -1
  420. package/dist/tui/components/WiggumBanner.js.map +0 -1
  421. package/dist/tui/components/WorkingIndicator.d.ts.map +0 -1
  422. package/dist/tui/components/WorkingIndicator.js.map +0 -1
  423. package/dist/tui/components/WorkingIndicator.test.d.ts +0 -2
  424. package/dist/tui/components/WorkingIndicator.test.d.ts.map +0 -1
  425. package/dist/tui/components/WorkingIndicator.test.js +0 -26
  426. package/dist/tui/components/WorkingIndicator.test.js.map +0 -1
  427. package/dist/tui/components/index.d.ts.map +0 -1
  428. package/dist/tui/components/index.js.map +0 -1
  429. package/dist/tui/demo.d.ts +0 -8
  430. package/dist/tui/demo.d.ts.map +0 -1
  431. package/dist/tui/demo.js +0 -69
  432. package/dist/tui/demo.js.map +0 -1
  433. package/dist/tui/hooks/index.d.ts.map +0 -1
  434. package/dist/tui/hooks/index.js.map +0 -1
  435. package/dist/tui/hooks/useCommandHistory.d.ts.map +0 -1
  436. package/dist/tui/hooks/useCommandHistory.js.map +0 -1
  437. package/dist/tui/hooks/useInit.d.ts.map +0 -1
  438. package/dist/tui/hooks/useInit.js.map +0 -1
  439. package/dist/tui/hooks/useSpecGenerator.d.ts.map +0 -1
  440. package/dist/tui/hooks/useSpecGenerator.js.map +0 -1
  441. package/dist/tui/hooks/useSync.d.ts.map +0 -1
  442. package/dist/tui/hooks/useSync.js.map +0 -1
  443. package/dist/tui/index.d.ts.map +0 -1
  444. package/dist/tui/index.js.map +0 -1
  445. package/dist/tui/orchestration/index.d.ts.map +0 -1
  446. package/dist/tui/orchestration/index.js.map +0 -1
  447. package/dist/tui/orchestration/interview-orchestrator.d.ts.map +0 -1
  448. package/dist/tui/orchestration/interview-orchestrator.js.map +0 -1
  449. package/dist/tui/screens/InitScreen.d.ts.map +0 -1
  450. package/dist/tui/screens/InitScreen.js.map +0 -1
  451. package/dist/tui/screens/InterviewScreen.d.ts.map +0 -1
  452. package/dist/tui/screens/InterviewScreen.integration.test.d.ts +0 -7
  453. package/dist/tui/screens/InterviewScreen.integration.test.d.ts.map +0 -1
  454. package/dist/tui/screens/InterviewScreen.integration.test.js +0 -149
  455. package/dist/tui/screens/InterviewScreen.integration.test.js.map +0 -1
  456. package/dist/tui/screens/InterviewScreen.js.map +0 -1
  457. package/dist/tui/screens/MainShell.d.ts.map +0 -1
  458. package/dist/tui/screens/MainShell.js.map +0 -1
  459. package/dist/tui/screens/MainShell.test.d.ts +0 -2
  460. package/dist/tui/screens/MainShell.test.d.ts.map +0 -1
  461. package/dist/tui/screens/MainShell.test.js +0 -103
  462. package/dist/tui/screens/MainShell.test.js.map +0 -1
  463. package/dist/tui/screens/RunScreen.d.ts.map +0 -1
  464. package/dist/tui/screens/RunScreen.js.map +0 -1
  465. package/dist/tui/screens/WelcomeScreen.d.ts +0 -45
  466. package/dist/tui/screens/WelcomeScreen.d.ts.map +0 -1
  467. package/dist/tui/screens/WelcomeScreen.js +0 -55
  468. package/dist/tui/screens/WelcomeScreen.js.map +0 -1
  469. package/dist/tui/screens/WelcomeScreen.test.d.ts +0 -2
  470. package/dist/tui/screens/WelcomeScreen.test.d.ts.map +0 -1
  471. package/dist/tui/screens/WelcomeScreen.test.js +0 -51
  472. package/dist/tui/screens/WelcomeScreen.test.js.map +0 -1
  473. package/dist/tui/screens/index.d.ts.map +0 -1
  474. package/dist/tui/screens/index.js.map +0 -1
  475. package/dist/tui/theme.d.ts.map +0 -1
  476. package/dist/tui/theme.js.map +0 -1
  477. package/dist/tui/types/interview.d.ts.map +0 -1
  478. package/dist/tui/types/interview.js.map +0 -1
  479. package/dist/tui/utils/input-utils.d.ts.map +0 -1
  480. package/dist/tui/utils/input-utils.js.map +0 -1
  481. package/dist/tui/utils/loop-status.d.ts.map +0 -1
  482. package/dist/tui/utils/loop-status.js.map +0 -1
  483. package/dist/utils/colors.d.ts.map +0 -1
  484. package/dist/utils/colors.js.map +0 -1
  485. package/dist/utils/config.d.ts.map +0 -1
  486. package/dist/utils/config.js.map +0 -1
  487. package/dist/utils/env.d.ts.map +0 -1
  488. package/dist/utils/env.js.map +0 -1
  489. package/dist/utils/header.d.ts.map +0 -1
  490. package/dist/utils/header.js.map +0 -1
  491. package/dist/utils/json-repair.d.ts.map +0 -1
  492. package/dist/utils/json-repair.js.map +0 -1
  493. package/dist/utils/logger.d.ts.map +0 -1
  494. package/dist/utils/logger.js.map +0 -1
  495. package/dist/utils/spinner.d.ts.map +0 -1
  496. package/dist/utils/spinner.js.map +0 -1
  497. package/dist/utils/tracing.d.ts.map +0 -1
  498. package/dist/utils/tracing.js.map +0 -1
  499. package/dist/utils/tui.d.ts.map +0 -1
  500. package/dist/utils/tui.js.map +0 -1
  501. package/dist/utils/update-check.d.ts.map +0 -1
  502. package/dist/utils/update-check.js.map +0 -1
@@ -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
@@ -24,8 +24,6 @@ const SEPARATOR_CHAR = '\u2500';
24
24
  */
25
25
  export function FooterStatusBar(props) {
26
26
  const { stdout } = useStdout();
27
- // Screens use padding={1}, so subtract 2 to avoid wrapping on narrow terminals.
28
- const width = Math.max(1, (stdout?.columns ?? 80) - 2);
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 })] }));
27
+ const width = Math.max(1, stdout?.columns ?? 80);
28
+ return (_jsxs(Box, { flexDirection: "column", width: "100%", children: [_jsx(Box, { width: "100%", overflow: "hidden", children: _jsx(Text, { color: colors.separator, wrap: "truncate", children: SEPARATOR_CHAR.repeat(width) }) }), _jsx(StatusLine, { ...props })] }));
30
29
  }
31
- //# sourceMappingURL=FooterStatusBar.js.map
@@ -0,0 +1,28 @@
1
+ /**
2
+ * HeaderContent - Banner + status meta for the AppShell header zone
3
+ *
4
+ * Renders in a vertical column: banner on top, status metadata row below.
5
+ * Includes version badge, provider/model info, init status, and background run indicators.
6
+ */
7
+ import React from 'react';
8
+ import type { SessionState } from '../../repl/session-state.js';
9
+ import type { BackgroundRun } from '../hooks/useBackgroundRuns.js';
10
+ /**
11
+ * Props for the HeaderContent component
12
+ */
13
+ export interface HeaderContentProps {
14
+ /** CLI version string */
15
+ version: string;
16
+ /** Current session state */
17
+ sessionState: SessionState;
18
+ /** Background runs (only active ones are displayed) */
19
+ backgroundRuns?: BackgroundRun[];
20
+ /** Use compact banner for small terminals */
21
+ compact?: boolean;
22
+ }
23
+ /**
24
+ * HeaderContent component
25
+ *
26
+ * Renders the banner and status row for the AppShell header zone.
27
+ */
28
+ export declare function HeaderContent({ version, sessionState, backgroundRuns, compact, }: HeaderContentProps): React.ReactElement;
@@ -0,0 +1,16 @@
1
+ import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-runtime";
2
+ import { Box, Text } from 'ink';
3
+ import { WiggumBanner } from './WiggumBanner.js';
4
+ import { colors, theme } from '../theme.js';
5
+ /**
6
+ * HeaderContent component
7
+ *
8
+ * Renders the banner and status row for the AppShell header zone.
9
+ */
10
+ export function HeaderContent({ version, sessionState, backgroundRuns, compact = false, }) {
11
+ const activeRuns = backgroundRuns?.filter((r) => !r.completed && !r.pollError) ?? [];
12
+ const errorRuns = backgroundRuns?.filter((r) => r.pollError) ?? [];
13
+ return (_jsxs(Box, { flexDirection: "column", paddingX: 1, children: [_jsx(WiggumBanner, { compact: compact }), _jsxs(Box, { flexDirection: "row", children: [_jsxs(Text, { color: colors.pink, children: ["v", version] }), _jsx(Text, { dimColor: true, children: theme.statusLine.separator }), sessionState.provider ? (_jsxs(Text, { color: colors.blue, children: [sessionState.provider, "/", sessionState.model] })) : (_jsx(Text, { color: colors.orange, children: "not configured" })), _jsx(Text, { dimColor: true, children: theme.statusLine.separator }), _jsx(Text, { color: sessionState.initialized ? colors.green : colors.orange, children: sessionState.initialized ? 'Ready' : 'Not initialized' }), activeRuns.length > 0 && (_jsxs(_Fragment, { children: [_jsx(Text, { dimColor: true, children: theme.statusLine.separator }), _jsxs(Text, { color: colors.green, children: [theme.chars.bulletLarge, " ", activeRuns[0].featureName, activeRuns[0].lastStatus.iteration > 0
14
+ ? ` (${activeRuns[0].lastStatus.iteration}/${activeRuns[0].lastStatus.maxIterations || '?'})`
15
+ : ''] }), activeRuns.length > 1 && (_jsxs(Text, { dimColor: true, children: [" +", activeRuns.length - 1, " more"] }))] })), errorRuns.length > 0 && (_jsxs(_Fragment, { children: [_jsx(Text, { dimColor: true, children: theme.statusLine.separator }), _jsxs(Text, { color: colors.orange, children: [theme.chars.bullet, " ", errorRuns[0].featureName, " (status unknown)"] })] }))] })] }));
16
+ }
@@ -3,7 +3,7 @@
3
3
  *
4
4
  * Displays the full conversation history with clean formatting:
5
5
  * - User messages: › prefix
6
- * - Assistant messages: bullet with clean markdown-like styling
6
+ * - Assistant messages: dimmed bullet for context, bold header for questions
7
7
  * - Tool calls: Inline action indicators
8
8
  */
9
9
  import React from 'react';
@@ -44,7 +44,7 @@ export interface Message {
44
44
  export interface MessageListProps {
45
45
  /** Array of messages to display */
46
46
  messages: Message[];
47
- /** Optional max height in lines (for future scrolling support) */
47
+ /** Optional max height in lines (clips content when set) */
48
48
  maxHeight?: number;
49
49
  /** Whether tool calls should show expanded preview (default: false) */
50
50
  toolCallsExpanded?: boolean;
@@ -53,22 +53,23 @@ export interface MessageListProps {
53
53
  * MessageList component
54
54
  *
55
55
  * Displays the full conversation history with clean styling:
56
- * - User messages: `› ` prefix in blue
57
- * - Assistant messages: `● ` prefix in yellow, with inline tool cards
58
- * - System messages: dimmed text
56
+ * - User messages: `› ` prefix in green
57
+ * - Assistant messages: context with dimmed bullet, questions with bold header
58
+ * - System messages: dimmed text (phase headers in yellow bold)
59
59
  *
60
60
  * @example
61
61
  * ```tsx
62
62
  * <MessageList
63
63
  * messages={[
64
64
  * { id: '1', role: 'user', content: 'Hello' },
65
- * { id: '2', role: 'assistant', content: 'Hi! How can I help?' },
65
+ * { id: '2', role: 'assistant', content: 'Let me think about that.\n\nWhat framework do you prefer?' },
66
66
  * ]}
67
67
  * />
68
68
  * // Renders:
69
69
  * // › Hello
70
- * // Hi! How can I help?
70
+ * // Let me think about that.
71
+ * // Next question:
72
+ * // What framework do you prefer?
71
73
  * ```
72
74
  */
73
75
  export declare function MessageList({ messages, maxHeight, toolCallsExpanded, }: MessageListProps): React.ReactElement;
74
- //# sourceMappingURL=MessageList.d.ts.map
@@ -7,24 +7,24 @@ import { ToolCallCard } from './ToolCallCard.js';
7
7
  * Renders a single user message with › prefix in green
8
8
  */
9
9
  function UserMessage({ content }) {
10
- return (_jsxs(Box, { flexDirection: "row", marginY: 1, children: [_jsxs(Text, { color: theme.colors.prompt, bold: true, children: [theme.chars.prompt, ' '] }), _jsx(Text, { color: theme.colors.userText, children: content })] }));
10
+ return (_jsxs(Box, { flexDirection: "row", children: [_jsxs(Text, { color: theme.colors.prompt, bold: true, children: [theme.chars.prompt, ' '] }), _jsx(Text, { color: theme.colors.userText, children: content })] }));
11
11
  }
12
12
  /**
13
- * Renders a single assistant message with tool calls (no prefix - distinguished by color)
14
- * Differentiates between thinking/context (solid LED, italic) and questions (bold with prefix)
15
- * Preserves original paragraph order while styling differently
13
+ * Renders a single assistant message with tool calls
14
+ * Context/thinking paragraphs: dimmed bullet prefix, italic
15
+ * Question paragraphs: bold "Next question:" header, no bullet
16
16
  */
17
17
  function AssistantMessage({ content, toolCalls, isStreaming, toolCallsExpanded = false, }) {
18
18
  // Split content into paragraphs for differentiated styling
19
19
  const paragraphs = content ? content.split('\n\n').filter((p) => p.trim()) : [];
20
- return (_jsxs(Box, { flexDirection: "column", marginY: 1, children: [toolCalls && toolCalls.length > 0 && (_jsx(Box, { flexDirection: "column", marginBottom: 1, children: toolCalls.map((toolCall, index) => (_jsx(ToolCallCard, { toolName: toolCall.toolName, status: toolCall.status, input: toolCall.input, output: toolCall.output, error: toolCall.error, expanded: toolCallsExpanded }, `tool-${index}`))) })), content && !isStreaming && (_jsx(Box, { flexDirection: "column", flexGrow: 1, children: paragraphs.map((para, index) => {
20
+ return (_jsxs(Box, { flexDirection: "column", gap: 1, children: [toolCalls && toolCalls.length > 0 && (_jsx(Box, { flexDirection: "column", children: toolCalls.map((toolCall, index) => (_jsx(ToolCallCard, { toolName: toolCall.toolName, status: toolCall.status, input: toolCall.input, output: toolCall.output, error: toolCall.error, expanded: toolCallsExpanded }, `tool-${index}`))) })), content && !isStreaming && (_jsx(Box, { flexDirection: "column", flexGrow: 1, children: paragraphs.map((para, index) => {
21
21
  const isQuestion = para.trim().endsWith('?');
22
22
  if (isQuestion) {
23
23
  // Question - prominent, with "Next question:" prefix
24
- return (_jsxs(Box, { marginY: 1, flexDirection: "column", children: [_jsx(Text, { bold: true, children: "Next question:" }), _jsx(Text, { color: theme.colors.aiText, children: para })] }, index));
24
+ return (_jsxs(Box, { marginTop: 1, flexDirection: "column", children: [_jsx(Text, { bold: true, children: "Next question:" }), _jsx(Text, { color: theme.colors.aiText, children: para })] }, index));
25
25
  }
26
26
  else {
27
- // Context/thinking - solid grey LED, italic dimmed text
27
+ // Context/thinking - dimmed bullet prefix, italic dimmed text
28
28
  return (_jsxs(Box, { flexDirection: "row", children: [_jsxs(Text, { dimColor: true, children: [theme.chars.bullet, " "] }), _jsx(Text, { dimColor: true, italic: true, children: para })] }, index));
29
29
  }
30
30
  }) })), content && isStreaming && (_jsx(Box, { flexDirection: "column", flexGrow: 1, children: _jsx(StreamingText, { text: content, isStreaming: true, color: theme.colors.aiText }) }))] }));
@@ -36,43 +36,49 @@ function AssistantMessage({ content, toolCalls, isStreaming, toolCallsExpanded =
36
36
  function SystemMessage({ content }) {
37
37
  // Check if this is a phase header (e.g., "Phase 2: Goals - Describe what you want to build")
38
38
  const phaseMatch = content.match(/^Phase (\d+): (.+?) - (.+)$/);
39
+ const isSuccess = content.startsWith('\u2713');
39
40
  const isSyncFailure = content.toLowerCase().startsWith('sync failed:');
40
41
  const isSyncMessage = content.toLowerCase().startsWith('sync:');
41
42
  if (phaseMatch) {
42
43
  const [, phaseNum, phaseName, description] = phaseMatch;
43
- return (_jsxs(Box, { marginY: 1, flexDirection: "column", children: [_jsxs(Text, { color: theme.colors.brand, bold: true, children: ["Phase ", phaseNum, ": ", phaseName] }), _jsx(Text, { dimColor: true, children: description })] }));
44
+ return (_jsxs(Box, { flexDirection: "column", children: [_jsxs(Text, { color: theme.colors.brand, bold: true, children: ["Phase ", phaseNum, ": ", phaseName] }), _jsx(Text, { dimColor: true, children: description })] }));
45
+ }
46
+ if (isSuccess) {
47
+ return (_jsxs(Box, { flexDirection: "row", children: [_jsxs(Text, { color: colors.green, children: ['\u2713', " "] }), _jsx(Text, { children: content.slice(1).trimStart() })] }));
44
48
  }
45
49
  if (isSyncFailure) {
46
- return (_jsx(Box, { marginY: 1, children: _jsx(Text, { color: colors.pink, children: content }) }));
50
+ return (_jsx(Box, { children: _jsx(Text, { color: colors.pink, children: content }) }));
47
51
  }
48
52
  if (isSyncMessage) {
49
- return (_jsx(Box, { marginY: 1, children: _jsx(Text, { color: colors.blue, children: content }) }));
53
+ return (_jsx(Box, { children: _jsx(Text, { color: colors.blue, children: content }) }));
50
54
  }
51
- return (_jsx(Box, { marginY: 1, children: _jsx(Text, { dimColor: true, children: content }) }));
55
+ return (_jsx(Box, { children: _jsx(Text, { dimColor: true, children: content }) }));
52
56
  }
53
57
  /**
54
58
  * MessageList component
55
59
  *
56
60
  * Displays the full conversation history with clean styling:
57
- * - User messages: `› ` prefix in blue
58
- * - Assistant messages: `● ` prefix in yellow, with inline tool cards
59
- * - System messages: dimmed text
61
+ * - User messages: `› ` prefix in green
62
+ * - Assistant messages: context with dimmed bullet, questions with bold header
63
+ * - System messages: dimmed text (phase headers in yellow bold)
60
64
  *
61
65
  * @example
62
66
  * ```tsx
63
67
  * <MessageList
64
68
  * messages={[
65
69
  * { id: '1', role: 'user', content: 'Hello' },
66
- * { id: '2', role: 'assistant', content: 'Hi! How can I help?' },
70
+ * { id: '2', role: 'assistant', content: 'Let me think about that.\n\nWhat framework do you prefer?' },
67
71
  * ]}
68
72
  * />
69
73
  * // Renders:
70
74
  * // › Hello
71
- * // Hi! How can I help?
75
+ * // Let me think about that.
76
+ * // Next question:
77
+ * // What framework do you prefer?
72
78
  * ```
73
79
  */
74
80
  export function MessageList({ messages, maxHeight, toolCallsExpanded = false, }) {
75
- return (_jsx(Box, { flexDirection: "column", ...(maxHeight ? { height: maxHeight } : {}), children: messages.map((message) => {
81
+ return (_jsx(Box, { flexDirection: "column", gap: 1, ...(maxHeight ? { height: maxHeight } : {}), children: messages.map((message) => {
76
82
  switch (message.role) {
77
83
  case 'user':
78
84
  return _jsx(UserMessage, { content: message.content }, message.id);
@@ -83,4 +89,3 @@ export function MessageList({ messages, maxHeight, toolCallsExpanded = false, })
83
89
  }
84
90
  }) }));
85
91
  }
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
@@ -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
@@ -0,0 +1,22 @@
1
+ /**
2
+ * RunCompletionSummary - Displays run loop completion recap
3
+ *
4
+ * Shows the feature, iterations, tasks, tokens, branch, exit status,
5
+ * log tail, and "what's next" section after a feature loop completes.
6
+ */
7
+ import React from 'react';
8
+ import type { RunSummary } from '../screens/RunScreen.js';
9
+ /**
10
+ * Props for RunCompletionSummary component
11
+ */
12
+ export interface RunCompletionSummaryProps {
13
+ /** Run summary data */
14
+ summary: RunSummary;
15
+ }
16
+ /**
17
+ * RunCompletionSummary component
18
+ *
19
+ * Renders the run loop completion recap inline within the
20
+ * RunScreen content area.
21
+ */
22
+ export declare function RunCompletionSummary({ summary, }: RunCompletionSummaryProps): React.ReactElement;
@@ -0,0 +1,23 @@
1
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
+ import { Box, Text } from 'ink';
3
+ import { StatusLine } from './StatusLine.js';
4
+ import { colors, theme } from '../theme.js';
5
+ import { formatNumber } from '../utils/loop-status.js';
6
+ /**
7
+ * RunCompletionSummary component
8
+ *
9
+ * Renders the run loop completion recap inline within the
10
+ * RunScreen content area.
11
+ */
12
+ export function RunCompletionSummary({ summary, }) {
13
+ const totalTokens = summary.tokensInput + summary.tokensOutput;
14
+ const stoppedCodes = new Set([130, 143]);
15
+ const exitState = summary.exitCode === 0
16
+ ? { label: 'Complete', color: colors.green, message: 'Done. Feature loop completed successfully.' }
17
+ : stoppedCodes.has(summary.exitCode)
18
+ ? { label: 'Stopped', color: colors.orange, message: 'Stopped. Feature loop interrupted.' }
19
+ : summary.exitCodeInferred
20
+ ? { label: 'Unknown', color: colors.orange, message: `Done. Exit status uncertain (inferred code ${summary.exitCode}). Check logs for details.` }
21
+ : { label: 'Failed', color: colors.pink, message: `Done. Feature loop exited with code ${summary.exitCode}.` };
22
+ return (_jsxs(Box, { flexDirection: "column", marginY: 1, children: [_jsx(StatusLine, { action: "Run Loop", phase: exitState.label, path: summary.feature }), _jsxs(Box, { marginTop: 1, flexDirection: "column", children: [_jsx(Text, { bold: true, children: "Summary" }), _jsxs(Text, { children: ["- Feature: ", summary.feature] }), _jsxs(Text, { children: ["- Iterations: ", summary.iterations, "/", summary.maxIterations] }), _jsxs(Text, { children: ["- Tasks: ", summary.tasksDone, "/", summary.tasksTotal] }), _jsxs(Text, { children: ["- Tokens: ", formatNumber(totalTokens), " (in:", formatNumber(summary.tokensInput), " out:", formatNumber(summary.tokensOutput), ")"] }), summary.branch && summary.branch !== '-' && (_jsxs(Text, { children: ["- Branch: ", summary.branch] }))] }), _jsxs(Box, { marginTop: 1, flexDirection: "row", children: [_jsxs(Text, { color: exitState.color, children: [theme.chars.bullet, " "] }), _jsx(Text, { children: exitState.message })] }), (summary.errorTail || summary.logPath) && (_jsxs(Box, { marginTop: 1, flexDirection: "column", children: [summary.logPath && (_jsxs(Text, { dimColor: true, children: ["Log: ", summary.logPath] })), summary.errorTail && (_jsxs(Box, { marginTop: 1, flexDirection: "column", children: [_jsx(Text, { dimColor: true, children: "Last output:" }), summary.errorTail.split('\n').map((line, idx) => (_jsx(Text, { dimColor: true, children: line }, `${line}-${idx}`)))] }))] })), _jsxs(Box, { marginTop: 1, flexDirection: "column", children: [_jsx(Text, { bold: true, children: "What's next:" }), _jsxs(Box, { flexDirection: "row", gap: 1, children: [_jsx(Text, { color: colors.green, children: theme.chars.prompt }), _jsx(Text, { dimColor: true, children: "Review changes and open a PR if needed" })] }), _jsxs(Box, { flexDirection: "row", gap: 1, children: [_jsx(Text, { color: colors.green, children: theme.chars.prompt }), _jsxs(Text, { color: colors.blue, children: ["/new ", '<feature>'] }), _jsx(Text, { dimColor: true, children: "Create another feature specification" })] }), _jsxs(Box, { flexDirection: "row", gap: 1, children: [_jsx(Text, { color: colors.green, children: theme.chars.prompt }), _jsx(Text, { color: colors.blue, children: "/help" }), _jsx(Text, { dimColor: true, children: "See all commands" })] })] }), _jsx(Box, { marginTop: 1, children: _jsx(Text, { dimColor: true, children: "Press Enter or Esc to return to shell" }) })] }));
23
+ }
@@ -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
@@ -0,0 +1,47 @@
1
+ /**
2
+ * SpecCompletionSummary - Displays spec generation recap
3
+ *
4
+ * Shows the goal, key decisions, file preview, and "what's next"
5
+ * section after a spec has been generated. Extracts a recap from
6
+ * the conversation history using heuristic text analysis.
7
+ */
8
+ import React from 'react';
9
+ import type { Message } from './MessageList.js';
10
+ /**
11
+ * Props for the SpecCompletionSummary component
12
+ */
13
+ export interface SpecCompletionSummaryProps {
14
+ /** Name of the feature */
15
+ featureName: string;
16
+ /** Generated spec content */
17
+ spec: string;
18
+ /** Path where spec was saved */
19
+ specPath: string;
20
+ /** Conversation messages from the interview */
21
+ messages: Message[];
22
+ }
23
+ /** Strip filler prefixes ('you want', 'understood', 'got it') from AI recap text and capitalize. */
24
+ export declare function normalizeRecap(text: string): string;
25
+ /** Strip user speech filler and normalize decision text: add trailing period if missing, capitalize. */
26
+ export declare function normalizeUserDecision(text: string): string;
27
+ /** Truncate text to max characters with ellipsis. */
28
+ export declare function summarizeText(text: string, max?: number): string;
29
+ /** Return true if the decision string is substantive enough to display (>= 8 chars and >= 3 words). */
30
+ export declare function isUsefulDecision(entry: string): boolean;
31
+ /**
32
+ * Extract goal and key decisions from conversation messages.
33
+ *
34
+ * @returns `goalCandidate` — a one-line summary of the feature goal, and
35
+ * `decisions` — up to 4 key decisions extracted from the conversation.
36
+ */
37
+ export declare function extractRecap(messages: Message[], featureName: string): {
38
+ goalCandidate: string;
39
+ decisions: string[];
40
+ };
41
+ /**
42
+ * SpecCompletionSummary component
43
+ *
44
+ * Renders the spec generation completion recap inline within the
45
+ * InterviewScreen content area.
46
+ */
47
+ export declare function SpecCompletionSummary({ featureName, spec, specPath, messages, }: SpecCompletionSummaryProps): React.ReactElement;
@@ -0,0 +1,124 @@
1
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
+ import { Box, Text } from 'ink';
3
+ import { StatusLine } from './StatusLine.js';
4
+ import { colors, theme } from '../theme.js';
5
+ import { PHASE_CONFIGS } from '../hooks/useSpecGenerator.js';
6
+ const MAX_RECAP_SOURCE_LENGTH = 1200;
7
+ /** Strip filler prefixes ('you want', 'understood', 'got it') from AI recap text and capitalize. */
8
+ export function normalizeRecap(text) {
9
+ let result = text.trim();
10
+ result = result.replace(/^[^a-z0-9]+/i, '');
11
+ result = result.replace(/^you want\s*/i, '');
12
+ result = result.replace(/^understood[:,]?\s*/i, '');
13
+ result = result.replace(/^got it[-\u2014:]*\s*/i, '');
14
+ return result.charAt(0).toUpperCase() + result.slice(1);
15
+ }
16
+ /** Strip user speech filler and normalize decision text: add trailing period if missing, capitalize. */
17
+ export function normalizeUserDecision(text) {
18
+ let result = text.trim();
19
+ result = result.replace(/^[^a-z0-9]+/i, '');
20
+ result = result.replace(/^i (?:would like|want|need|prefer|expect) to\s*/i, '');
21
+ result = result.replace(/^i (?:would like|want|need|prefer|expect)\s*/i, '');
22
+ result = result.replace(/^please\s*/i, '');
23
+ result = result.replace(/^up to you[:,]?\s*/i, '');
24
+ result = result.replace(/^both\s*/i, 'Both ');
25
+ if (result && !/[.!?]$/.test(result)) {
26
+ result += '.';
27
+ }
28
+ return result.charAt(0).toUpperCase() + result.slice(1);
29
+ }
30
+ /** Truncate text to max characters with ellipsis. */
31
+ export function summarizeText(text, max = 160) {
32
+ if (text.length <= max)
33
+ return text;
34
+ return `${text.slice(0, max - 1)}\u2026`;
35
+ }
36
+ /** Return true if the decision string is substantive enough to display (>= 8 chars and >= 3 words). */
37
+ export function isUsefulDecision(entry) {
38
+ const normalized = entry.trim().toLowerCase();
39
+ if (normalized.length < 8)
40
+ return false;
41
+ const wordCount = normalized.split(/\s+/).length;
42
+ if (wordCount < 3)
43
+ return false;
44
+ if (['yes', 'no', 'both', 'ok', 'okay'].includes(normalized))
45
+ return false;
46
+ return true;
47
+ }
48
+ /**
49
+ * Extract goal and key decisions from conversation messages.
50
+ *
51
+ * @returns `goalCandidate` — a one-line summary of the feature goal, and
52
+ * `decisions` — up to 4 key decisions extracted from the conversation.
53
+ */
54
+ export function extractRecap(messages, featureName) {
55
+ const userMessages = messages
56
+ .filter((msg) => msg.role === 'user')
57
+ .map((msg) => msg.content.trim())
58
+ .filter((content) => content.length > 0 && content.length <= MAX_RECAP_SOURCE_LENGTH);
59
+ const nonUrlUserMessages = userMessages.filter((content) => !/^https?:\/\//i.test(content) && !/^www\./i.test(content));
60
+ const assistantParagraphs = messages
61
+ .filter((msg) => msg.role === 'assistant' && msg.content && msg.content.length <= MAX_RECAP_SOURCE_LENGTH)
62
+ .flatMap((msg) => msg.content.split('\n\n'))
63
+ .map((para) => para.replace(/\s+/g, ' ').trim())
64
+ .filter((para) => para.length > 0 && para.length <= 320);
65
+ const recapCandidates = assistantParagraphs
66
+ .map((para) => para.replace(/^[^a-z0-9]+/i, '').trim())
67
+ .filter((para) => /^(you want|understood|got it)/i.test(para))
68
+ .map((para) => para.split(/next question:/i)[0].trim())
69
+ .filter((para) => para.length > 0);
70
+ const goalCandidate = recapCandidates.length > 0
71
+ ? normalizeRecap(recapCandidates[0])
72
+ : (nonUrlUserMessages.find((content) => content.length > 20)
73
+ ? normalizeUserDecision(nonUrlUserMessages.find((content) => content.length > 20))
74
+ : (nonUrlUserMessages[0] ? normalizeUserDecision(nonUrlUserMessages[0]) : `Define "${featureName}"`));
75
+ const decisions = [];
76
+ const seen = new Set();
77
+ if (recapCandidates.length > 1) {
78
+ for (let i = 1; i < recapCandidates.length; i += 1) {
79
+ const entry = normalizeRecap(recapCandidates[i]);
80
+ const normalized = entry.toLowerCase();
81
+ if (!isUsefulDecision(entry))
82
+ continue;
83
+ if (seen.has(normalized))
84
+ continue;
85
+ decisions.push(entry);
86
+ seen.add(normalized);
87
+ if (decisions.length >= 4)
88
+ break;
89
+ }
90
+ }
91
+ else {
92
+ for (let i = nonUrlUserMessages.length - 1; i >= 0; i -= 1) {
93
+ const entry = nonUrlUserMessages[i];
94
+ const normalized = entry.toLowerCase();
95
+ if (entry === goalCandidate)
96
+ continue;
97
+ if (!isUsefulDecision(entry))
98
+ continue;
99
+ if (entry.length > 160)
100
+ continue;
101
+ if (seen.has(normalized))
102
+ continue;
103
+ decisions.unshift(normalizeUserDecision(entry));
104
+ seen.add(normalized);
105
+ if (decisions.length >= 4)
106
+ break;
107
+ }
108
+ }
109
+ return { goalCandidate, decisions };
110
+ }
111
+ /**
112
+ * SpecCompletionSummary component
113
+ *
114
+ * Renders the spec generation completion recap inline within the
115
+ * InterviewScreen content area.
116
+ */
117
+ export function SpecCompletionSummary({ featureName, spec, specPath, messages, }) {
118
+ const specLines = spec ? spec.split('\n') : [];
119
+ const totalLines = specLines.length;
120
+ const previewLines = specLines.slice(0, 5);
121
+ const remainingLines = Math.max(0, totalLines - 5);
122
+ const { goalCandidate, decisions } = extractRecap(messages, featureName);
123
+ return (_jsxs(Box, { flexDirection: "column", marginY: 1, children: [_jsx(StatusLine, { action: "New Spec", phase: `Complete (${PHASE_CONFIGS.complete.number}/${PHASE_CONFIGS.complete.number})`, path: featureName }), _jsxs(Box, { marginTop: 1, flexDirection: "column", children: [_jsx(Text, { bold: true, children: "Summary" }), _jsxs(Text, { children: ["- Goal: ", summarizeText(goalCandidate)] }), _jsxs(Text, { children: ["- Outcome: Spec written to ", specPath || `${featureName}.md`, " (", totalLines, " lines)"] })] }), decisions.length > 0 && (_jsxs(Box, { marginTop: 1, flexDirection: "column", children: [_jsx(Text, { bold: true, children: "Key decisions" }), decisions.map((decision, idx) => (_jsxs(Text, { children: [idx + 1, ". ", summarizeText(decision, 120)] }, `${decision}-${idx}`)))] })), _jsxs(Box, { marginTop: 1, flexDirection: "row", children: [_jsxs(Text, { color: colors.green, children: [theme.chars.bullet, " "] }), _jsx(Text, { bold: true, children: "Write" }), _jsxs(Text, { dimColor: true, children: ["(", specPath || `${featureName}.md`, ")"] })] }), _jsx(Box, { marginLeft: 2, children: _jsxs(Text, { dimColor: true, children: [theme.chars.lineEnd, " Wrote ", totalLines, " lines"] }) }), _jsxs(Box, { marginLeft: 4, flexDirection: "column", children: [previewLines.map((line, i) => (_jsxs(Box, { flexDirection: "row", children: [_jsxs(Text, { dimColor: true, children: [String(i + 1).padStart(4), " "] }), _jsx(Text, { dimColor: true, children: line })] }, i))), remainingLines > 0 && (_jsxs(Text, { dimColor: true, children: ['\u2026', " +", remainingLines, " lines"] }))] }), _jsxs(Box, { marginTop: 1, flexDirection: "row", children: [_jsxs(Text, { color: colors.green, children: [theme.chars.bullet, " "] }), _jsx(Text, { children: "Done. Specification generated successfully." })] }), _jsxs(Box, { marginTop: 1, flexDirection: "column", children: [_jsx(Text, { bold: true, children: "What's next:" }), _jsxs(Box, { flexDirection: "row", gap: 1, children: [_jsx(Text, { color: colors.green, children: theme.chars.prompt }), _jsx(Text, { dimColor: true, children: "Review the spec in your editor" })] }), _jsxs(Box, { flexDirection: "row", gap: 1, children: [_jsx(Text, { color: colors.green, children: theme.chars.prompt }), _jsx(Text, { color: colors.blue, children: "/help" }), _jsx(Text, { dimColor: true, children: "See all commands" })] })] }), _jsx(Box, { marginTop: 1, children: _jsx(Text, { dimColor: true, children: "Press Enter or Esc to return to shell" }) })] }));
124
+ }
@@ -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
@@ -0,0 +1,24 @@
1
+ /**
2
+ * TipsBar - Contextual hints bar
3
+ *
4
+ * Renders a single dimmed line with slash commands highlighted in blue.
5
+ */
6
+ import React from 'react';
7
+ /**
8
+ * Props for TipsBar component
9
+ */
10
+ export interface TipsBarProps {
11
+ /** Tip text - slash commands (e.g. /help) are auto-highlighted */
12
+ text: string;
13
+ }
14
+ /**
15
+ * TipsBar component
16
+ *
17
+ * Displays contextual tips with slash commands highlighted in blue.
18
+ *
19
+ * @example
20
+ * ```tsx
21
+ * <TipsBar text="Tip: /new <feature> to create spec, /help for commands" />
22
+ * ```
23
+ */
24
+ export declare function TipsBar({ text }: TipsBarProps): React.ReactElement;
@@ -0,0 +1,23 @@
1
+ import { jsx as _jsx } from "react/jsx-runtime";
2
+ import { Box, Text } from 'ink';
3
+ import { colors } from '../theme.js';
4
+ /**
5
+ * TipsBar component
6
+ *
7
+ * Displays contextual tips with slash commands highlighted in blue.
8
+ *
9
+ * @example
10
+ * ```tsx
11
+ * <TipsBar text="Tip: /new <feature> to create spec, /help for commands" />
12
+ * ```
13
+ */
14
+ export function TipsBar({ text }) {
15
+ // Split text on slash commands to highlight them
16
+ const parts = text.split(/(\/[a-zA-Z]+)/g);
17
+ return (_jsx(Box, { children: parts.map((part, i) => {
18
+ if (part.startsWith('/')) {
19
+ return _jsx(Text, { color: colors.blue, children: part }, i);
20
+ }
21
+ return _jsx(Text, { dimColor: true, children: part }, i);
22
+ }) }));
23
+ }
@@ -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