@qduc/term2 0.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (621) hide show
  1. package/LICENSE +21 -0
  2. package/dist/agent.d.ts +19 -0
  3. package/dist/agent.d.ts.map +1 -0
  4. package/dist/agent.js +143 -0
  5. package/dist/agent.js.map +1 -0
  6. package/dist/app.d.ts +22 -0
  7. package/dist/app.d.ts.map +1 -0
  8. package/dist/app.js +403 -0
  9. package/dist/app.js.map +1 -0
  10. package/dist/app.model-command-feedback.test.d.ts +2 -0
  11. package/dist/app.model-command-feedback.test.d.ts.map +1 -0
  12. package/dist/app.model-command-feedback.test.js +19 -0
  13. package/dist/app.model-command-feedback.test.js.map +1 -0
  14. package/dist/app.parseInput.test.d.ts +2 -0
  15. package/dist/app.parseInput.test.d.ts.map +1 -0
  16. package/dist/app.parseInput.test.js +97 -0
  17. package/dist/app.parseInput.test.js.map +1 -0
  18. package/dist/cli.d.ts +3 -0
  19. package/dist/cli.d.ts.map +1 -0
  20. package/dist/cli.js +241 -0
  21. package/dist/cli.js.map +1 -0
  22. package/dist/components/ApprovalPrompt.d.ts +10 -0
  23. package/dist/components/ApprovalPrompt.d.ts.map +1 -0
  24. package/dist/components/ApprovalPrompt.js +163 -0
  25. package/dist/components/ApprovalPrompt.js.map +1 -0
  26. package/dist/components/Banner.d.ts +9 -0
  27. package/dist/components/Banner.d.ts.map +1 -0
  28. package/dist/components/Banner.js +86 -0
  29. package/dist/components/Banner.js.map +1 -0
  30. package/dist/components/BottomArea.d.ts +33 -0
  31. package/dist/components/BottomArea.d.ts.map +1 -0
  32. package/dist/components/BottomArea.js +31 -0
  33. package/dist/components/BottomArea.js.map +1 -0
  34. package/dist/components/BottomArea.test.d.ts +2 -0
  35. package/dist/components/BottomArea.test.d.ts.map +1 -0
  36. package/dist/components/BottomArea.test.js +73 -0
  37. package/dist/components/BottomArea.test.js.map +1 -0
  38. package/dist/components/ChatMessage.d.ts +7 -0
  39. package/dist/components/ChatMessage.d.ts.map +1 -0
  40. package/dist/components/ChatMessage.js +10 -0
  41. package/dist/components/ChatMessage.js.map +1 -0
  42. package/dist/components/CommandMessage.d.ts +15 -0
  43. package/dist/components/CommandMessage.d.ts.map +1 -0
  44. package/dist/components/CommandMessage.js +188 -0
  45. package/dist/components/CommandMessage.js.map +1 -0
  46. package/dist/components/CommandMessage.test.d.ts +2 -0
  47. package/dist/components/CommandMessage.test.d.ts.map +1 -0
  48. package/dist/components/CommandMessage.test.js +35 -0
  49. package/dist/components/CommandMessage.test.js.map +1 -0
  50. package/dist/components/ErrorBoundary.d.ts +27 -0
  51. package/dist/components/ErrorBoundary.d.ts.map +1 -0
  52. package/dist/components/ErrorBoundary.js +77 -0
  53. package/dist/components/ErrorBoundary.js.map +1 -0
  54. package/dist/components/ErrorBoundary.test.d.ts +2 -0
  55. package/dist/components/ErrorBoundary.test.d.ts.map +1 -0
  56. package/dist/components/ErrorBoundary.test.js +32 -0
  57. package/dist/components/ErrorBoundary.test.js.map +1 -0
  58. package/dist/components/Input/PopupManager.d.ts +42 -0
  59. package/dist/components/Input/PopupManager.d.ts.map +1 -0
  60. package/dist/components/Input/PopupManager.js +13 -0
  61. package/dist/components/Input/PopupManager.js.map +1 -0
  62. package/dist/components/InputBox.d.ts +18 -0
  63. package/dist/components/InputBox.d.ts.map +1 -0
  64. package/dist/components/InputBox.js +384 -0
  65. package/dist/components/InputBox.js.map +1 -0
  66. package/dist/components/InputBox.menu-logic.test.d.ts +2 -0
  67. package/dist/components/InputBox.menu-logic.test.d.ts.map +1 -0
  68. package/dist/components/InputBox.menu-logic.test.js +151 -0
  69. package/dist/components/InputBox.menu-logic.test.js.map +1 -0
  70. package/dist/components/InputBox.test.d.ts +2 -0
  71. package/dist/components/InputBox.test.d.ts.map +1 -0
  72. package/dist/components/InputBox.test.js +91 -0
  73. package/dist/components/InputBox.test.js.map +1 -0
  74. package/dist/components/LiveResponse.d.ts +13 -0
  75. package/dist/components/LiveResponse.d.ts.map +1 -0
  76. package/dist/components/LiveResponse.js +16 -0
  77. package/dist/components/LiveResponse.js.map +1 -0
  78. package/dist/components/MarkdownRenderer.d.ts +8 -0
  79. package/dist/components/MarkdownRenderer.d.ts.map +1 -0
  80. package/dist/components/MarkdownRenderer.js +225 -0
  81. package/dist/components/MarkdownRenderer.js.map +1 -0
  82. package/dist/components/MentorMode.test.d.ts +2 -0
  83. package/dist/components/MentorMode.test.d.ts.map +1 -0
  84. package/dist/components/MentorMode.test.js.map +1 -0
  85. package/dist/components/MessageList.d.ts +7 -0
  86. package/dist/components/MessageList.d.ts.map +1 -0
  87. package/dist/components/MessageList.js +29 -0
  88. package/dist/components/MessageList.js.map +1 -0
  89. package/dist/components/MessageList.test.d.ts +2 -0
  90. package/dist/components/MessageList.test.d.ts.map +1 -0
  91. package/dist/components/MessageList.test.js +15 -0
  92. package/dist/components/MessageList.test.js.map +1 -0
  93. package/dist/components/ModelSelectionMenu.d.ts +18 -0
  94. package/dist/components/ModelSelectionMenu.d.ts.map +1 -0
  95. package/dist/components/ModelSelectionMenu.js +91 -0
  96. package/dist/components/ModelSelectionMenu.js.map +1 -0
  97. package/dist/components/ModelSelectionMenu.test.d.ts +2 -0
  98. package/dist/components/ModelSelectionMenu.test.d.ts.map +1 -0
  99. package/dist/components/ModelSelectionMenu.test.js +83 -0
  100. package/dist/components/ModelSelectionMenu.test.js.map +1 -0
  101. package/dist/components/PathSelectionMenu.d.ts +12 -0
  102. package/dist/components/PathSelectionMenu.d.ts.map +1 -0
  103. package/dist/components/PathSelectionMenu.js +42 -0
  104. package/dist/components/PathSelectionMenu.js.map +1 -0
  105. package/dist/components/SettingsSelectionMenu.d.ts +9 -0
  106. package/dist/components/SettingsSelectionMenu.d.ts.map +1 -0
  107. package/dist/components/SettingsSelectionMenu.js +21 -0
  108. package/dist/components/SettingsSelectionMenu.js.map +1 -0
  109. package/dist/components/SlashCommandMenu.d.ts +15 -0
  110. package/dist/components/SlashCommandMenu.d.ts.map +1 -0
  111. package/dist/components/SlashCommandMenu.js +20 -0
  112. package/dist/components/SlashCommandMenu.js.map +1 -0
  113. package/dist/components/StatusBar.d.ts +11 -0
  114. package/dist/components/StatusBar.d.ts.map +1 -0
  115. package/dist/components/StatusBar.js +59 -0
  116. package/dist/components/StatusBar.js.map +1 -0
  117. package/dist/components/TextInput.d.ts +42 -0
  118. package/dist/components/TextInput.d.ts.map +1 -0
  119. package/dist/components/TextInput.js +397 -0
  120. package/dist/components/TextInput.js.map +1 -0
  121. package/dist/components/TextInput.test.d.ts +2 -0
  122. package/dist/components/TextInput.test.d.ts.map +1 -0
  123. package/dist/components/TextInput.test.js +75 -0
  124. package/dist/components/TextInput.test.js.map +1 -0
  125. package/dist/context/InputContext.d.ts +31 -0
  126. package/dist/context/InputContext.d.ts.map +1 -0
  127. package/dist/context/InputContext.js +36 -0
  128. package/dist/context/InputContext.js.map +1 -0
  129. package/dist/context/InputContext.stability.test.d.ts +2 -0
  130. package/dist/context/InputContext.stability.test.d.ts.map +1 -0
  131. package/dist/context/InputContext.stability.test.js +28 -0
  132. package/dist/context/InputContext.stability.test.js.map +1 -0
  133. package/dist/context/InputContext.test.d.ts +2 -0
  134. package/dist/context/InputContext.test.d.ts.map +1 -0
  135. package/dist/context/InputContext.test.js +168 -0
  136. package/dist/context/InputContext.test.js.map +1 -0
  137. package/dist/debug-schema.d.ts +2 -0
  138. package/dist/debug-schema.d.ts.map +1 -0
  139. package/dist/debug-schema.js +22 -0
  140. package/dist/debug-schema.js.map +1 -0
  141. package/dist/hooks/use-conversation.d.ts +78 -0
  142. package/dist/hooks/use-conversation.d.ts.map +1 -0
  143. package/dist/hooks/use-conversation.js +1017 -0
  144. package/dist/hooks/use-conversation.js.map +1 -0
  145. package/dist/hooks/use-input-history.d.ts +16 -0
  146. package/dist/hooks/use-input-history.d.ts.map +1 -0
  147. package/dist/hooks/use-input-history.js +71 -0
  148. package/dist/hooks/use-input-history.js.map +1 -0
  149. package/dist/hooks/use-model-selection.d.ts +27 -0
  150. package/dist/hooks/use-model-selection.d.ts.map +1 -0
  151. package/dist/hooks/use-model-selection.js +187 -0
  152. package/dist/hooks/use-model-selection.js.map +1 -0
  153. package/dist/hooks/use-model-selection.test.d.ts +2 -0
  154. package/dist/hooks/use-model-selection.test.d.ts.map +1 -0
  155. package/dist/hooks/use-model-selection.test.js +28 -0
  156. package/dist/hooks/use-model-selection.test.js.map +1 -0
  157. package/dist/hooks/use-path-completion.d.ts +22 -0
  158. package/dist/hooks/use-path-completion.d.ts.map +1 -0
  159. package/dist/hooks/use-path-completion.js +153 -0
  160. package/dist/hooks/use-path-completion.js.map +1 -0
  161. package/dist/hooks/use-path-completion.test.d.ts +2 -0
  162. package/dist/hooks/use-path-completion.test.d.ts.map +1 -0
  163. package/dist/hooks/use-path-completion.test.js +29 -0
  164. package/dist/hooks/use-path-completion.test.js.map +1 -0
  165. package/dist/hooks/use-setting.d.ts +7 -0
  166. package/dist/hooks/use-setting.d.ts.map +1 -0
  167. package/dist/hooks/use-setting.js +35 -0
  168. package/dist/hooks/use-setting.js.map +1 -0
  169. package/dist/hooks/use-settings-completion.d.ts +23 -0
  170. package/dist/hooks/use-settings-completion.d.ts.map +1 -0
  171. package/dist/hooks/use-settings-completion.js +164 -0
  172. package/dist/hooks/use-settings-completion.js.map +1 -0
  173. package/dist/hooks/use-settings-completion.test.d.ts +2 -0
  174. package/dist/hooks/use-settings-completion.test.d.ts.map +1 -0
  175. package/dist/hooks/use-settings-completion.test.js +334 -0
  176. package/dist/hooks/use-settings-completion.test.js.map +1 -0
  177. package/dist/hooks/use-slash-commands.d.ts +21 -0
  178. package/dist/hooks/use-slash-commands.d.ts.map +1 -0
  179. package/dist/hooks/use-slash-commands.js +87 -0
  180. package/dist/hooks/use-slash-commands.js.map +1 -0
  181. package/dist/hooks/use-slash-commands.test.d.ts +2 -0
  182. package/dist/hooks/use-slash-commands.test.d.ts.map +1 -0
  183. package/dist/hooks/use-slash-commands.test.js +246 -0
  184. package/dist/hooks/use-slash-commands.test.js.map +1 -0
  185. package/dist/lib/editor-impl.d.ts +23 -0
  186. package/dist/lib/editor-impl.d.ts.map +1 -0
  187. package/dist/lib/editor-impl.js +235 -0
  188. package/dist/lib/editor-impl.js.map +1 -0
  189. package/dist/lib/openai-agent-client.chat.test.d.ts +2 -0
  190. package/dist/lib/openai-agent-client.chat.test.d.ts.map +1 -0
  191. package/dist/lib/openai-agent-client.chat.test.js +68 -0
  192. package/dist/lib/openai-agent-client.chat.test.js.map +1 -0
  193. package/dist/lib/openai-agent-client.d.ts +48 -0
  194. package/dist/lib/openai-agent-client.d.ts.map +1 -0
  195. package/dist/lib/openai-agent-client.js +653 -0
  196. package/dist/lib/openai-agent-client.js.map +1 -0
  197. package/dist/lib/openai-agent-client.test.d.ts +2 -0
  198. package/dist/lib/openai-agent-client.test.d.ts.map +1 -0
  199. package/dist/lib/openai-agent-client.test.js +181 -0
  200. package/dist/lib/openai-agent-client.test.js.map +1 -0
  201. package/dist/lib/shell.d.ts +7 -0
  202. package/dist/lib/shell.d.ts.map +1 -0
  203. package/dist/lib/shell.js +56 -0
  204. package/dist/lib/shell.js.map +1 -0
  205. package/dist/lib/tool-invoke.d.ts +4 -0
  206. package/dist/lib/tool-invoke.d.ts.map +1 -0
  207. package/dist/lib/tool-invoke.js +26 -0
  208. package/dist/lib/tool-invoke.js.map +1 -0
  209. package/dist/lib/tool-invoke.test.d.ts +2 -0
  210. package/dist/lib/tool-invoke.test.d.ts.map +1 -0
  211. package/dist/lib/tool-invoke.test.js +19 -0
  212. package/dist/lib/tool-invoke.test.js.map +1 -0
  213. package/dist/no-singleton-imports.test.d.ts +2 -0
  214. package/dist/no-singleton-imports.test.d.ts.map +1 -0
  215. package/dist/no-singleton-imports.test.js +30 -0
  216. package/dist/no-singleton-imports.test.js.map +1 -0
  217. package/dist/prompts/anthropic.md +79 -0
  218. package/dist/prompts/codex.md +97 -0
  219. package/dist/prompts/default.md +77 -0
  220. package/dist/prompts/default.md.bak +77 -0
  221. package/dist/prompts/gpt-5.md +318 -0
  222. package/dist/prompts/lite.md +29 -0
  223. package/dist/prompts/simple-mentor.md +207 -0
  224. package/dist/prompts/simple.md +189 -0
  225. package/dist/providers/index.d.ts +5 -0
  226. package/dist/providers/index.d.ts.map +1 -0
  227. package/dist/providers/index.js +8 -0
  228. package/dist/providers/index.js.map +1 -0
  229. package/dist/providers/openai-compatible/api.d.ts +17 -0
  230. package/dist/providers/openai-compatible/api.d.ts.map +1 -0
  231. package/dist/providers/openai-compatible/api.js +58 -0
  232. package/dist/providers/openai-compatible/api.js.map +1 -0
  233. package/dist/providers/openai-compatible/model.d.ts +17 -0
  234. package/dist/providers/openai-compatible/model.d.ts.map +1 -0
  235. package/dist/providers/openai-compatible/model.js +435 -0
  236. package/dist/providers/openai-compatible/model.js.map +1 -0
  237. package/dist/providers/openai-compatible/provider.d.ts +22 -0
  238. package/dist/providers/openai-compatible/provider.d.ts.map +1 -0
  239. package/dist/providers/openai-compatible/provider.js +43 -0
  240. package/dist/providers/openai-compatible/provider.js.map +1 -0
  241. package/dist/providers/openai-compatible/utils.d.ts +3 -0
  242. package/dist/providers/openai-compatible/utils.d.ts.map +1 -0
  243. package/dist/providers/openai-compatible/utils.js +11 -0
  244. package/dist/providers/openai-compatible/utils.js.map +1 -0
  245. package/dist/providers/openai-compatible.provider.d.ts +8 -0
  246. package/dist/providers/openai-compatible.provider.d.ts.map +1 -0
  247. package/dist/providers/openai-compatible.provider.js +71 -0
  248. package/dist/providers/openai-compatible.provider.js.map +1 -0
  249. package/dist/providers/openai.provider.d.ts +2 -0
  250. package/dist/providers/openai.provider.d.ts.map +1 -0
  251. package/dist/providers/openai.provider.js +36 -0
  252. package/dist/providers/openai.provider.js.map +1 -0
  253. package/dist/providers/openrouter/api.d.ts +39 -0
  254. package/dist/providers/openrouter/api.d.ts.map +1 -0
  255. package/dist/providers/openrouter/api.js +172 -0
  256. package/dist/providers/openrouter/api.js.map +1 -0
  257. package/dist/providers/openrouter/converters.d.ts +8 -0
  258. package/dist/providers/openrouter/converters.d.ts.map +1 -0
  259. package/dist/providers/openrouter/converters.js +382 -0
  260. package/dist/providers/openrouter/converters.js.map +1 -0
  261. package/dist/providers/openrouter/converters.test.d.ts +2 -0
  262. package/dist/providers/openrouter/converters.test.d.ts.map +1 -0
  263. package/dist/providers/openrouter/converters.test.js +158 -0
  264. package/dist/providers/openrouter/converters.test.js.map +1 -0
  265. package/dist/providers/openrouter/index.d.ts +4 -0
  266. package/dist/providers/openrouter/index.d.ts.map +1 -0
  267. package/dist/providers/openrouter/index.js +4 -0
  268. package/dist/providers/openrouter/index.js.map +1 -0
  269. package/dist/providers/openrouter/model.d.ts +14 -0
  270. package/dist/providers/openrouter/model.d.ts.map +1 -0
  271. package/dist/providers/openrouter/model.js +485 -0
  272. package/dist/providers/openrouter/model.js.map +1 -0
  273. package/dist/providers/openrouter/provider.d.ts +15 -0
  274. package/dist/providers/openrouter/provider.d.ts.map +1 -0
  275. package/dist/providers/openrouter/provider.js +21 -0
  276. package/dist/providers/openrouter/provider.js.map +1 -0
  277. package/dist/providers/openrouter/utils.d.ts +10 -0
  278. package/dist/providers/openrouter/utils.d.ts.map +1 -0
  279. package/dist/providers/openrouter/utils.js +27 -0
  280. package/dist/providers/openrouter/utils.js.map +1 -0
  281. package/dist/providers/openrouter.api.retry.test.d.ts +2 -0
  282. package/dist/providers/openrouter.api.retry.test.d.ts.map +1 -0
  283. package/dist/providers/openrouter.api.retry.test.js +148 -0
  284. package/dist/providers/openrouter.api.retry.test.js.map +1 -0
  285. package/dist/providers/openrouter.d.ts +2 -0
  286. package/dist/providers/openrouter.d.ts.map +1 -0
  287. package/dist/providers/openrouter.history.test.d.ts +2 -0
  288. package/dist/providers/openrouter.history.test.d.ts.map +1 -0
  289. package/dist/providers/openrouter.history.test.js +533 -0
  290. package/dist/providers/openrouter.history.test.js.map +1 -0
  291. package/dist/providers/openrouter.js +4 -0
  292. package/dist/providers/openrouter.js.map +1 -0
  293. package/dist/providers/openrouter.provider.createRunner.test.d.ts +2 -0
  294. package/dist/providers/openrouter.provider.createRunner.test.d.ts.map +1 -0
  295. package/dist/providers/openrouter.provider.createRunner.test.js +23 -0
  296. package/dist/providers/openrouter.provider.createRunner.test.js.map +1 -0
  297. package/dist/providers/openrouter.provider.d.ts +2 -0
  298. package/dist/providers/openrouter.provider.d.ts.map +1 -0
  299. package/dist/providers/openrouter.provider.js +56 -0
  300. package/dist/providers/openrouter.provider.js.map +1 -0
  301. package/dist/providers/openrouter.test.d.ts +2 -0
  302. package/dist/providers/openrouter.test.d.ts.map +1 -0
  303. package/dist/providers/openrouter.test.js +1382 -0
  304. package/dist/providers/openrouter.test.js.map +1 -0
  305. package/dist/providers/registry.d.ts +65 -0
  306. package/dist/providers/registry.d.ts.map +1 -0
  307. package/dist/providers/registry.js +44 -0
  308. package/dist/providers/registry.js.map +1 -0
  309. package/dist/providers/registry.test.d.ts +2 -0
  310. package/dist/providers/registry.test.d.ts.map +1 -0
  311. package/dist/providers/registry.test.js +76 -0
  312. package/dist/providers/registry.test.js.map +1 -0
  313. package/dist/providers/web-search/index.d.ts +8 -0
  314. package/dist/providers/web-search/index.d.ts.map +1 -0
  315. package/dist/providers/web-search/index.js +9 -0
  316. package/dist/providers/web-search/index.js.map +1 -0
  317. package/dist/providers/web-search/registry.d.ts +35 -0
  318. package/dist/providers/web-search/registry.d.ts.map +1 -0
  319. package/dist/providers/web-search/registry.js +56 -0
  320. package/dist/providers/web-search/registry.js.map +1 -0
  321. package/dist/providers/web-search/registry.test.d.ts +2 -0
  322. package/dist/providers/web-search/registry.test.d.ts.map +1 -0
  323. package/dist/providers/web-search/registry.test.js +105 -0
  324. package/dist/providers/web-search/registry.test.js.map +1 -0
  325. package/dist/providers/web-search/tavily.provider.d.ts +15 -0
  326. package/dist/providers/web-search/tavily.provider.d.ts.map +1 -0
  327. package/dist/providers/web-search/tavily.provider.js +69 -0
  328. package/dist/providers/web-search/tavily.provider.js.map +1 -0
  329. package/dist/providers/web-search/tavily.provider.test.d.ts +2 -0
  330. package/dist/providers/web-search/tavily.provider.test.d.ts.map +1 -0
  331. package/dist/providers/web-search/tavily.provider.test.js +67 -0
  332. package/dist/providers/web-search/tavily.provider.test.js.map +1 -0
  333. package/dist/providers/web-search/types.d.ts +55 -0
  334. package/dist/providers/web-search/types.d.ts.map +1 -0
  335. package/dist/providers/web-search/types.js +6 -0
  336. package/dist/providers/web-search/types.js.map +1 -0
  337. package/dist/safety-checker.js +57 -0
  338. package/dist/services/conversation-events.d.ts +76 -0
  339. package/dist/services/conversation-events.d.ts.map +1 -0
  340. package/dist/services/conversation-events.js +2 -0
  341. package/dist/services/conversation-events.js.map +1 -0
  342. package/dist/services/conversation-service.d.ts +31 -0
  343. package/dist/services/conversation-service.d.ts.map +1 -0
  344. package/dist/services/conversation-service.js +46 -0
  345. package/dist/services/conversation-service.js.map +1 -0
  346. package/dist/services/conversation-service.test.js +190 -0
  347. package/dist/services/conversation-session.d.ts +99 -0
  348. package/dist/services/conversation-session.d.ts.map +1 -0
  349. package/dist/services/conversation-session.js +978 -0
  350. package/dist/services/conversation-session.js.map +1 -0
  351. package/dist/services/conversation-store.d.ts +24 -0
  352. package/dist/services/conversation-store.d.ts.map +1 -0
  353. package/dist/services/conversation-store.js +216 -0
  354. package/dist/services/conversation-store.js.map +1 -0
  355. package/dist/services/conversation-store.test.d.ts +2 -0
  356. package/dist/services/conversation-store.test.d.ts.map +1 -0
  357. package/dist/services/conversation-store.test.js +167 -0
  358. package/dist/services/conversation-store.test.js.map +1 -0
  359. package/dist/services/execution-context.d.ts +10 -0
  360. package/dist/services/execution-context.d.ts.map +1 -0
  361. package/dist/services/execution-context.js +22 -0
  362. package/dist/services/execution-context.js.map +1 -0
  363. package/dist/services/execution-context.test.d.ts +2 -0
  364. package/dist/services/execution-context.test.d.ts.map +1 -0
  365. package/dist/services/execution-context.test.js +49 -0
  366. package/dist/services/execution-context.test.js.map +1 -0
  367. package/dist/services/file-service.d.ts +12 -0
  368. package/dist/services/file-service.d.ts.map +1 -0
  369. package/dist/services/file-service.js +90 -0
  370. package/dist/services/file-service.js.map +1 -0
  371. package/dist/services/history-service.d.ts +39 -0
  372. package/dist/services/history-service.d.ts.map +1 -0
  373. package/dist/services/history-service.js +152 -0
  374. package/dist/services/history-service.js.map +1 -0
  375. package/dist/services/logging-service.d.ts +75 -0
  376. package/dist/services/logging-service.d.ts.map +1 -0
  377. package/dist/services/logging-service.js +343 -0
  378. package/dist/services/logging-service.js.map +1 -0
  379. package/dist/services/model-service.d.ts +15 -0
  380. package/dist/services/model-service.d.ts.map +1 -0
  381. package/dist/services/model-service.js +46 -0
  382. package/dist/services/model-service.js.map +1 -0
  383. package/dist/services/model-service.test.d.ts +2 -0
  384. package/dist/services/model-service.test.d.ts.map +1 -0
  385. package/dist/services/model-service.test.js +128 -0
  386. package/dist/services/model-service.test.js.map +1 -0
  387. package/dist/services/service-interfaces.d.ts +33 -0
  388. package/dist/services/service-interfaces.d.ts.map +1 -0
  389. package/dist/services/service-interfaces.js +2 -0
  390. package/dist/services/service-interfaces.js.map +1 -0
  391. package/dist/services/settings-service.d.ts +316 -0
  392. package/dist/services/settings-service.d.ts.map +1 -0
  393. package/dist/services/settings-service.js +1128 -0
  394. package/dist/services/settings-service.js.map +1 -0
  395. package/dist/services/settings-service.mock.d.ts +20 -0
  396. package/dist/services/settings-service.mock.d.ts.map +1 -0
  397. package/dist/services/settings-service.mock.js +55 -0
  398. package/dist/services/settings-service.mock.js.map +1 -0
  399. package/dist/services/singleton-deprecation.test.d.ts +2 -0
  400. package/dist/services/singleton-deprecation.test.d.ts.map +1 -0
  401. package/dist/services/singleton-deprecation.test.js +59 -0
  402. package/dist/services/singleton-deprecation.test.js.map +1 -0
  403. package/dist/services/ssh-service.d.ts +32 -0
  404. package/dist/services/ssh-service.d.ts.map +1 -0
  405. package/dist/services/ssh-service.js +119 -0
  406. package/dist/services/ssh-service.js.map +1 -0
  407. package/dist/services/ssh-service.test.d.ts +2 -0
  408. package/dist/services/ssh-service.test.d.ts.map +1 -0
  409. package/dist/services/ssh-service.test.js +269 -0
  410. package/dist/services/ssh-service.test.js.map +1 -0
  411. package/dist/test-search-tool.d.ts +2 -0
  412. package/dist/test-search-tool.d.ts.map +1 -0
  413. package/dist/test-search-tool.js +36 -0
  414. package/dist/test-search-tool.js.map +1 -0
  415. package/dist/tools/apply-patch.d.ts +28 -0
  416. package/dist/tools/apply-patch.d.ts.map +1 -0
  417. package/dist/tools/apply-patch.js +399 -0
  418. package/dist/tools/apply-patch.js.map +1 -0
  419. package/dist/tools/apply-patch.test.d.ts +2 -0
  420. package/dist/tools/apply-patch.test.d.ts.map +1 -0
  421. package/dist/tools/apply-patch.test.js +155 -0
  422. package/dist/tools/apply-patch.test.js.map +1 -0
  423. package/dist/tools/ask-mentor.d.ts +11 -0
  424. package/dist/tools/ask-mentor.d.ts.map +1 -0
  425. package/dist/tools/ask-mentor.js +52 -0
  426. package/dist/tools/ask-mentor.js.map +1 -0
  427. package/dist/tools/ask-mentor.test.d.ts +2 -0
  428. package/dist/tools/ask-mentor.test.d.ts.map +1 -0
  429. package/dist/tools/ask-mentor.test.js +47 -0
  430. package/dist/tools/ask-mentor.test.js.map +1 -0
  431. package/dist/tools/bash.d.ts +10 -0
  432. package/dist/tools/bash.d.ts.map +1 -0
  433. package/dist/tools/bash.js +55 -0
  434. package/dist/tools/bash.js.map +1 -0
  435. package/dist/tools/find-files.d.ts +15 -0
  436. package/dist/tools/find-files.d.ts.map +1 -0
  437. package/dist/tools/find-files.js +179 -0
  438. package/dist/tools/find-files.js.map +1 -0
  439. package/dist/tools/find-files.test.d.ts +2 -0
  440. package/dist/tools/find-files.test.d.ts.map +1 -0
  441. package/dist/tools/find-files.test.js +131 -0
  442. package/dist/tools/find-files.test.js.map +1 -0
  443. package/dist/tools/format-helpers.d.ts +34 -0
  444. package/dist/tools/format-helpers.d.ts.map +1 -0
  445. package/dist/tools/format-helpers.js +131 -0
  446. package/dist/tools/format-helpers.js.map +1 -0
  447. package/dist/tools/grep.d.ts +16 -0
  448. package/dist/tools/grep.d.ts.map +1 -0
  449. package/dist/tools/grep.js +211 -0
  450. package/dist/tools/grep.js.map +1 -0
  451. package/dist/tools/read-file.d.ts +15 -0
  452. package/dist/tools/read-file.d.ts.map +1 -0
  453. package/dist/tools/read-file.js +114 -0
  454. package/dist/tools/read-file.js.map +1 -0
  455. package/dist/tools/read-file.test.d.ts +2 -0
  456. package/dist/tools/read-file.test.d.ts.map +1 -0
  457. package/dist/tools/read-file.test.js +122 -0
  458. package/dist/tools/read-file.test.js.map +1 -0
  459. package/dist/tools/search-replace.d.ts +19 -0
  460. package/dist/tools/search-replace.d.ts.map +1 -0
  461. package/dist/tools/search-replace.js +411 -0
  462. package/dist/tools/search-replace.js.map +1 -0
  463. package/dist/tools/search-replace.test.d.ts +2 -0
  464. package/dist/tools/search-replace.test.d.ts.map +1 -0
  465. package/dist/tools/search-replace.test.js +302 -0
  466. package/dist/tools/search-replace.test.js.map +1 -0
  467. package/dist/tools/search.d.ts +15 -0
  468. package/dist/tools/search.d.ts.map +1 -0
  469. package/dist/tools/search.js +143 -0
  470. package/dist/tools/search.js.map +1 -0
  471. package/dist/tools/shell.d.ts +19 -0
  472. package/dist/tools/shell.d.ts.map +1 -0
  473. package/dist/tools/shell.js +278 -0
  474. package/dist/tools/shell.js.map +1 -0
  475. package/dist/tools/tool-execution-context.d.ts +7 -0
  476. package/dist/tools/tool-execution-context.d.ts.map +1 -0
  477. package/dist/tools/tool-execution-context.js +7 -0
  478. package/dist/tools/tool-execution-context.js.map +1 -0
  479. package/dist/tools/types.d.ts +30 -0
  480. package/dist/tools/types.d.ts.map +1 -0
  481. package/dist/tools/types.js +2 -0
  482. package/dist/tools/types.js.map +1 -0
  483. package/dist/tools/utils.d.ts +12 -0
  484. package/dist/tools/utils.d.ts.map +1 -0
  485. package/dist/tools/utils.js +19 -0
  486. package/dist/tools/utils.js.map +1 -0
  487. package/dist/tools/web-search.d.ts +29 -0
  488. package/dist/tools/web-search.d.ts.map +1 -0
  489. package/dist/tools/web-search.js +106 -0
  490. package/dist/tools/web-search.js.map +1 -0
  491. package/dist/tools/web-search.test.d.ts +2 -0
  492. package/dist/tools/web-search.test.d.ts.map +1 -0
  493. package/dist/tools/web-search.test.js +176 -0
  494. package/dist/tools/web-search.test.js.map +1 -0
  495. package/dist/utils/command-logger.d.ts +11 -0
  496. package/dist/utils/command-logger.d.ts.map +1 -0
  497. package/dist/utils/command-logger.js +34 -0
  498. package/dist/utils/command-logger.js.map +1 -0
  499. package/dist/utils/command-safety/constants.d.ts +21 -0
  500. package/dist/utils/command-safety/constants.d.ts.map +1 -0
  501. package/dist/utils/command-safety/constants.js +245 -0
  502. package/dist/utils/command-safety/constants.js.map +1 -0
  503. package/dist/utils/command-safety/find-helpers.d.ts +15 -0
  504. package/dist/utils/command-safety/find-helpers.d.ts.map +1 -0
  505. package/dist/utils/command-safety/find-helpers.js +218 -0
  506. package/dist/utils/command-safety/find-helpers.js.map +1 -0
  507. package/dist/utils/command-safety/handlers/find-handler.d.ts +6 -0
  508. package/dist/utils/command-safety/handlers/find-handler.d.ts.map +1 -0
  509. package/dist/utils/command-safety/handlers/find-handler.js +113 -0
  510. package/dist/utils/command-safety/handlers/find-handler.js.map +1 -0
  511. package/dist/utils/command-safety/handlers/git-handler.d.ts +6 -0
  512. package/dist/utils/command-safety/handlers/git-handler.d.ts.map +1 -0
  513. package/dist/utils/command-safety/handlers/git-handler.js +68 -0
  514. package/dist/utils/command-safety/handlers/git-handler.js.map +1 -0
  515. package/dist/utils/command-safety/handlers/index.d.ts +13 -0
  516. package/dist/utils/command-safety/handlers/index.d.ts.map +1 -0
  517. package/dist/utils/command-safety/handlers/index.js +20 -0
  518. package/dist/utils/command-safety/handlers/index.js.map +1 -0
  519. package/dist/utils/command-safety/handlers/sed-handler.d.ts +6 -0
  520. package/dist/utils/command-safety/handlers/sed-handler.d.ts.map +1 -0
  521. package/dist/utils/command-safety/handlers/sed-handler.js +94 -0
  522. package/dist/utils/command-safety/handlers/sed-handler.js.map +1 -0
  523. package/dist/utils/command-safety/handlers/types.d.ts +36 -0
  524. package/dist/utils/command-safety/handlers/types.d.ts.map +1 -0
  525. package/dist/utils/command-safety/handlers/types.js +2 -0
  526. package/dist/utils/command-safety/handlers/types.js.map +1 -0
  527. package/dist/utils/command-safety/index.d.ts +14 -0
  528. package/dist/utils/command-safety/index.d.ts.map +1 -0
  529. package/dist/utils/command-safety/index.js +183 -0
  530. package/dist/utils/command-safety/index.js.map +1 -0
  531. package/dist/utils/command-safety/path-analysis.d.ts +4 -0
  532. package/dist/utils/command-safety/path-analysis.d.ts.map +1 -0
  533. package/dist/utils/command-safety/path-analysis.js +153 -0
  534. package/dist/utils/command-safety/path-analysis.js.map +1 -0
  535. package/dist/utils/command-safety/utils.d.ts +2 -0
  536. package/dist/utils/command-safety/utils.d.ts.map +1 -0
  537. package/dist/utils/command-safety/utils.js +22 -0
  538. package/dist/utils/command-safety/utils.js.map +1 -0
  539. package/dist/utils/command-safety.d.ts +21 -0
  540. package/dist/utils/command-safety.d.ts.map +1 -0
  541. package/dist/utils/command-safety.find.test.d.ts +2 -0
  542. package/dist/utils/command-safety.find.test.d.ts.map +1 -0
  543. package/dist/utils/command-safety.find.test.js +342 -0
  544. package/dist/utils/command-safety.find.test.js.map +1 -0
  545. package/dist/utils/command-safety.js +702 -0
  546. package/dist/utils/command-safety.js.map +1 -0
  547. package/dist/utils/command-safety.path.test.d.ts +2 -0
  548. package/dist/utils/command-safety.path.test.d.ts.map +1 -0
  549. package/dist/utils/command-safety.path.test.js +360 -0
  550. package/dist/utils/command-safety.path.test.js.map +1 -0
  551. package/dist/utils/diff.d.ts +2 -0
  552. package/dist/utils/diff.d.ts.map +1 -0
  553. package/dist/utils/diff.js +44 -0
  554. package/dist/utils/diff.js.map +1 -0
  555. package/dist/utils/diff.test.d.ts +2 -0
  556. package/dist/utils/diff.test.d.ts.map +1 -0
  557. package/dist/utils/diff.test.js +85 -0
  558. package/dist/utils/diff.test.js.map +1 -0
  559. package/dist/utils/error-helpers.d.ts +6 -0
  560. package/dist/utils/error-helpers.d.ts.map +1 -0
  561. package/dist/utils/error-helpers.js +46 -0
  562. package/dist/utils/error-helpers.js.map +1 -0
  563. package/dist/utils/error-helpers.test.d.ts +2 -0
  564. package/dist/utils/error-helpers.test.d.ts.map +1 -0
  565. package/dist/utils/error-helpers.test.js +152 -0
  566. package/dist/utils/error-helpers.test.js.map +1 -0
  567. package/dist/utils/execute-shell.d.ts +15 -0
  568. package/dist/utils/execute-shell.d.ts.map +1 -0
  569. package/dist/utils/execute-shell.js +34 -0
  570. package/dist/utils/execute-shell.js.map +1 -0
  571. package/dist/utils/execute-shell.test.d.ts +2 -0
  572. package/dist/utils/execute-shell.test.d.ts.map +1 -0
  573. package/dist/utils/execute-shell.test.js +20 -0
  574. package/dist/utils/execute-shell.test.js.map +1 -0
  575. package/dist/utils/extract-command-messages.d.ts +5 -0
  576. package/dist/utils/extract-command-messages.d.ts.map +1 -0
  577. package/dist/utils/extract-command-messages.js +140 -0
  578. package/dist/utils/extract-command-messages.js.map +1 -0
  579. package/dist/utils/extract-command-messages.repro.test.d.ts +2 -0
  580. package/dist/utils/extract-command-messages.repro.test.d.ts.map +1 -0
  581. package/dist/utils/extract-command-messages.repro.test.js +31 -0
  582. package/dist/utils/extract-command-messages.repro.test.js.map +1 -0
  583. package/dist/utils/extract-command-messages.test.js +57 -0
  584. package/dist/utils/message-buffer.d.ts +2 -0
  585. package/dist/utils/message-buffer.d.ts.map +1 -0
  586. package/dist/utils/message-buffer.js +15 -0
  587. package/dist/utils/message-buffer.js.map +1 -0
  588. package/dist/utils/message-buffer.test.d.ts +2 -0
  589. package/dist/utils/message-buffer.test.d.ts.map +1 -0
  590. package/dist/utils/message-buffer.test.js +17 -0
  591. package/dist/utils/message-buffer.test.js.map +1 -0
  592. package/dist/utils/output-trim.d.ts +31 -0
  593. package/dist/utils/output-trim.d.ts.map +1 -0
  594. package/dist/utils/output-trim.js +71 -0
  595. package/dist/utils/output-trim.js.map +1 -0
  596. package/dist/utils/provider-credentials.d.ts +10 -0
  597. package/dist/utils/provider-credentials.d.ts.map +1 -0
  598. package/dist/utils/provider-credentials.js +22 -0
  599. package/dist/utils/provider-credentials.js.map +1 -0
  600. package/dist/utils/settings-command.d.ts +13 -0
  601. package/dist/utils/settings-command.d.ts.map +1 -0
  602. package/dist/utils/settings-command.js +173 -0
  603. package/dist/utils/settings-command.js.map +1 -0
  604. package/dist/utils/ssh-config-parser.d.ts +21 -0
  605. package/dist/utils/ssh-config-parser.d.ts.map +1 -0
  606. package/dist/utils/ssh-config-parser.js +89 -0
  607. package/dist/utils/ssh-config-parser.js.map +1 -0
  608. package/dist/utils/ssh-config-parser.test.d.ts +2 -0
  609. package/dist/utils/ssh-config-parser.test.d.ts.map +1 -0
  610. package/dist/utils/ssh-config-parser.test.js +153 -0
  611. package/dist/utils/ssh-config-parser.test.js.map +1 -0
  612. package/dist/utils/streaming-updater.d.ts +7 -0
  613. package/dist/utils/streaming-updater.d.ts.map +1 -0
  614. package/dist/utils/streaming-updater.js +41 -0
  615. package/dist/utils/streaming-updater.js.map +1 -0
  616. package/dist/utils/throttle.d.ts +7 -0
  617. package/dist/utils/throttle.d.ts.map +1 -0
  618. package/dist/utils/throttle.js +49 -0
  619. package/dist/utils/throttle.js.map +1 -0
  620. package/package.json +108 -0
  621. package/readme.md +428 -0
@@ -0,0 +1,86 @@
1
+ import React from 'react';
2
+ import { Box, Text } from 'ink';
3
+ import { useSetting } from '../hooks/use-setting.js';
4
+ import { getProvider } from '../providers/index.js';
5
+ const Banner = ({ settingsService, isShellMode = false }) => {
6
+ const mentorMode = useSetting(settingsService, 'app.mentorMode') ?? false;
7
+ const editMode = useSetting(settingsService, 'app.editMode') ?? false;
8
+ const liteMode = useSetting(settingsService, 'app.liteMode') ?? false;
9
+ const model = useSetting(settingsService, 'agent.model');
10
+ const mentorModel = useSetting(settingsService, 'agent.mentorModel');
11
+ const providerKey = useSetting(settingsService, 'agent.provider') ?? 'openai';
12
+ const reasoningEffort = useSetting(settingsService, 'agent.reasoningEffort') ??
13
+ 'default';
14
+ const mentorReasoningEffort = useSetting(settingsService, 'agent.mentorReasoningEffort') ??
15
+ 'default';
16
+ const providerDef = getProvider(providerKey);
17
+ const providerLabel = providerDef?.label || providerKey;
18
+ const accent = '#0ed7b5';
19
+ const glow = '#fbbf24';
20
+ const slate = '#64748b';
21
+ const purple = '#a78bfa'; // Soft purple for mentor
22
+ const cyan = '#22d3ee'; // Soft cyan for provider
23
+ const lightSlate = '#94a3b8';
24
+ return (React.createElement(Box, { flexDirection: "column", borderStyle: "round", borderColor: accent, paddingX: 2, paddingY: 1 },
25
+ React.createElement(Box, { justifyContent: "space-between", alignItems: "center" },
26
+ React.createElement(Box, { alignItems: "center" },
27
+ React.createElement(Text, { color: glow, bold: true }, '▌'),
28
+ React.createElement(Text, { color: accent, bold: true },
29
+ ' ',
30
+ "term\u00B2")),
31
+ React.createElement(Box, { gap: 1 },
32
+ liteMode && isShellMode ? (React.createElement(Text, { backgroundColor: "#ca8a04", color: "white", bold: true },
33
+ ' ',
34
+ "SHELL",
35
+ ' ')) : (liteMode && (React.createElement(Text, { backgroundColor: "#059669", color: "white", bold: true },
36
+ ' ',
37
+ "LITE",
38
+ ' '))),
39
+ editMode && (React.createElement(Text, { backgroundColor: "#1d4ed8", color: "white", bold: true },
40
+ ' ',
41
+ "EDIT",
42
+ ' ')),
43
+ mentorMode && (React.createElement(Text, { backgroundColor: "#7c3aed", color: "white", bold: true },
44
+ ' ',
45
+ "MENTOR",
46
+ ' ')),
47
+ !editMode && !mentorMode && !liteMode && (React.createElement(Text, { backgroundColor: "#0f766e", color: "white", bold: true },
48
+ ' ',
49
+ "DEFAULT",
50
+ ' ')))),
51
+ React.createElement(Box, { justifyContent: "space-between", marginTop: 1, flexWrap: "wrap" },
52
+ React.createElement(Box, { flexDirection: "column", marginRight: 3 },
53
+ React.createElement(Text, { color: slate },
54
+ "Provider:",
55
+ ' ',
56
+ React.createElement(Text, { color: cyan, bold: true }, providerLabel)),
57
+ React.createElement(Box, { flexDirection: "column" },
58
+ React.createElement(Text, { color: slate },
59
+ "Model:",
60
+ ' ',
61
+ React.createElement(Text, { color: glow, bold: true }, model
62
+ ? model.length > 34
63
+ ? `${model.slice(0, 31)}…`
64
+ : model
65
+ : '—'),
66
+ reasoningEffort !== 'none' && (React.createElement(Text, { color: slate },
67
+ ' ',
68
+ React.createElement(Text, { color: lightSlate },
69
+ "(",
70
+ reasoningEffort,
71
+ ")")))),
72
+ mentorMode && mentorModel && (React.createElement(Text, { color: slate },
73
+ "Mentor:",
74
+ ' ',
75
+ React.createElement(Text, { color: purple, bold: true }, mentorModel.length > 34
76
+ ? `${mentorModel.slice(0, 31)}…`
77
+ : mentorModel),
78
+ mentorReasoningEffort !== 'none' && (React.createElement(Text, { color: slate },
79
+ ' ',
80
+ React.createElement(Text, { color: lightSlate },
81
+ "(",
82
+ mentorReasoningEffort,
83
+ ")"))))))))));
84
+ };
85
+ export default Banner;
86
+ //# sourceMappingURL=Banner.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Banner.js","sourceRoot":"","sources":["../../source/components/Banner.tsx"],"names":[],"mappings":"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"}
@@ -0,0 +1,33 @@
1
+ import { FC } from 'react';
2
+ import type { SlashCommand } from './SlashCommandMenu.js';
3
+ import type { SettingsService } from '../services/settings-service.js';
4
+ import type { LoggingService } from '../services/logging-service.js';
5
+ import type { HistoryService } from '../services/history-service.js';
6
+ import type { SSHInfo } from '../app.js';
7
+ export type PendingApproval = {
8
+ agentName: string;
9
+ toolName: string;
10
+ argumentsText: string;
11
+ rawInterruption: any;
12
+ callId?: string;
13
+ isMaxTurnsPrompt?: boolean;
14
+ };
15
+ export type BottomAreaProps = {
16
+ pendingApproval: PendingApproval | null;
17
+ waitingForApproval: boolean;
18
+ waitingForRejectionReason: boolean;
19
+ isProcessing: boolean;
20
+ isShellMode?: boolean;
21
+ onSubmit: (value: string) => Promise<void>;
22
+ slashCommands: SlashCommand[];
23
+ hasConversationHistory: boolean;
24
+ settingsService: SettingsService;
25
+ loggingService: LoggingService;
26
+ historyService: HistoryService;
27
+ onApprove: () => void;
28
+ onReject: () => void;
29
+ sshInfo?: SSHInfo;
30
+ };
31
+ declare const BottomArea: FC<BottomAreaProps>;
32
+ export default BottomArea;
33
+ //# sourceMappingURL=BottomArea.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"BottomArea.d.ts","sourceRoot":"","sources":["../../source/components/BottomArea.tsx"],"names":[],"mappings":"AAAA,OAAc,EAAC,EAAE,EAAsB,MAAM,OAAO,CAAC;AAKrD,OAAO,KAAK,EAAC,YAAY,EAAC,MAAM,uBAAuB,CAAC;AACxD,OAAO,KAAK,EAAC,eAAe,EAAC,MAAM,iCAAiC,CAAC;AACrE,OAAO,KAAK,EAAC,cAAc,EAAC,MAAM,gCAAgC,CAAC;AACnE,OAAO,KAAK,EAAC,cAAc,EAAC,MAAM,gCAAgC,CAAC;AACnE,OAAO,KAAK,EAAC,OAAO,EAAC,MAAM,WAAW,CAAC;AAEvC,MAAM,MAAM,eAAe,GAAG;IAC1B,SAAS,EAAE,MAAM,CAAC;IAClB,QAAQ,EAAE,MAAM,CAAC;IACjB,aAAa,EAAE,MAAM,CAAC;IACtB,eAAe,EAAE,GAAG,CAAC;IACrB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,gBAAgB,CAAC,EAAE,OAAO,CAAC;CAC9B,CAAC;AAEF,MAAM,MAAM,eAAe,GAAG;IAC1B,eAAe,EAAE,eAAe,GAAG,IAAI,CAAC;IACxC,kBAAkB,EAAE,OAAO,CAAC;IAC5B,yBAAyB,EAAE,OAAO,CAAC;IACnC,YAAY,EAAE,OAAO,CAAC;IACtB,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,QAAQ,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;IAC3C,aAAa,EAAE,YAAY,EAAE,CAAC;IAC9B,sBAAsB,EAAE,OAAO,CAAC;IAChC,eAAe,EAAE,eAAe,CAAC;IACjC,cAAc,EAAE,cAAc,CAAC;IAC/B,cAAc,EAAE,cAAc,CAAC;IAC/B,SAAS,EAAE,MAAM,IAAI,CAAC;IACtB,QAAQ,EAAE,MAAM,IAAI,CAAC;IACrB,OAAO,CAAC,EAAE,OAAO,CAAC;CACrB,CAAC;AAEF,QAAA,MAAM,UAAU,EAAE,EAAE,CAAC,eAAe,CAyEnC,CAAC;AAEF,eAAe,UAAU,CAAC"}
@@ -0,0 +1,31 @@
1
+ import React, { useEffect, useState } from 'react';
2
+ import { Box, Text } from 'ink';
3
+ import ApprovalPrompt from './ApprovalPrompt.js';
4
+ import InputBox from './InputBox.js';
5
+ import StatusBar from './StatusBar.js';
6
+ const BottomArea = ({ pendingApproval, waitingForApproval, waitingForRejectionReason, isProcessing, isShellMode = false, onSubmit, slashCommands, hasConversationHistory, settingsService, loggingService, historyService, onApprove, onReject, sshInfo, }) => {
7
+ const [dotCount, setDotCount] = useState(1);
8
+ useEffect(() => {
9
+ if (!isProcessing) {
10
+ setDotCount(1);
11
+ return;
12
+ }
13
+ const interval = setInterval(() => {
14
+ setDotCount(prev => (prev === 3 ? 1 : prev + 1));
15
+ }, 800);
16
+ return () => clearInterval(interval);
17
+ }, [isProcessing]);
18
+ const showApprovalPrompt = waitingForApproval &&
19
+ !isProcessing &&
20
+ !waitingForRejectionReason &&
21
+ pendingApproval;
22
+ const showInput = (!isProcessing && !waitingForApproval) || waitingForRejectionReason;
23
+ return (React.createElement(Box, { flexDirection: "column" },
24
+ showApprovalPrompt ? (React.createElement(ApprovalPrompt, { approval: pendingApproval, onApprove: onApprove, onReject: onReject })) : showInput ? (React.createElement(InputBox, { onSubmit: onSubmit, slashCommands: slashCommands, hasConversationHistory: hasConversationHistory, waitingForRejectionReason: waitingForRejectionReason, isShellMode: isShellMode, settingsService: settingsService, loggingService: loggingService, historyService: historyService })) : null,
25
+ isProcessing && (React.createElement(Text, { color: "gray", dimColor: true },
26
+ "processing",
27
+ '.'.repeat(dotCount))),
28
+ React.createElement(StatusBar, { settingsService: settingsService, isShellMode: isShellMode, sshInfo: sshInfo })));
29
+ };
30
+ export default BottomArea;
31
+ //# sourceMappingURL=BottomArea.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"BottomArea.js","sourceRoot":"","sources":["../../source/components/BottomArea.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,EAAK,SAAS,EAAE,QAAQ,EAAC,MAAM,OAAO,CAAC;AACrD,OAAO,EAAC,GAAG,EAAE,IAAI,EAAC,MAAM,KAAK,CAAC;AAC9B,OAAO,cAAc,MAAM,qBAAqB,CAAC;AACjD,OAAO,QAAQ,MAAM,eAAe,CAAC;AACrC,OAAO,SAAS,MAAM,gBAAgB,CAAC;AAiCvC,MAAM,UAAU,GAAwB,CAAC,EACrC,eAAe,EACf,kBAAkB,EAClB,yBAAyB,EACzB,YAAY,EACZ,WAAW,GAAG,KAAK,EACnB,QAAQ,EACR,aAAa,EACb,sBAAsB,EACtB,eAAe,EACf,cAAc,EACd,cAAc,EACd,SAAS,EACT,QAAQ,EACR,OAAO,GACV,EAAE,EAAE;IACD,MAAM,CAAC,QAAQ,EAAE,WAAW,CAAC,GAAG,QAAQ,CAAC,CAAC,CAAC,CAAC;IAE5C,SAAS,CAAC,GAAG,EAAE;QACX,IAAI,CAAC,YAAY,EAAE,CAAC;YAChB,WAAW,CAAC,CAAC,CAAC,CAAC;YACf,OAAO;QACX,CAAC;QAED,MAAM,QAAQ,GAAG,WAAW,CAAC,GAAG,EAAE;YAC9B,WAAW,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,IAAI,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,GAAG,CAAC,CAAC,CAAC,CAAC;QACrD,CAAC,EAAE,GAAG,CAAC,CAAC;QAER,OAAO,GAAG,EAAE,CAAC,aAAa,CAAC,QAAQ,CAAC,CAAC;IACzC,CAAC,EAAE,CAAC,YAAY,CAAC,CAAC,CAAC;IAEnB,MAAM,kBAAkB,GACpB,kBAAkB;QAClB,CAAC,YAAY;QACb,CAAC,yBAAyB;QAC1B,eAAe,CAAC;IACpB,MAAM,SAAS,GACX,CAAC,CAAC,YAAY,IAAI,CAAC,kBAAkB,CAAC,IAAI,yBAAyB,CAAC;IAExE,OAAO,CACH,oBAAC,GAAG,IAAC,aAAa,EAAC,QAAQ;QACtB,kBAAkB,CAAC,CAAC,CAAC,CAClB,oBAAC,cAAc,IACX,QAAQ,EAAE,eAAe,EACzB,SAAS,EAAE,SAAS,EACpB,QAAQ,EAAE,QAAQ,GACpB,CACL,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,CACZ,oBAAC,QAAQ,IACL,QAAQ,EAAE,QAAQ,EAClB,aAAa,EAAE,aAAa,EAC5B,sBAAsB,EAAE,sBAAsB,EAC9C,yBAAyB,EAAE,yBAAyB,EACpD,WAAW,EAAE,WAAW,EACxB,eAAe,EAAE,eAAe,EAChC,cAAc,EAAE,cAAc,EAC9B,cAAc,EAAE,cAAc,GAChC,CACL,CAAC,CAAC,CAAC,IAAI;QAEP,YAAY,IAAI,CACb,oBAAC,IAAI,IAAC,KAAK,EAAC,MAAM,EAAC,QAAQ;;YACZ,GAAG,CAAC,MAAM,CAAC,QAAQ,CAAC,CAC5B,CACV;QAED,oBAAC,SAAS,IACN,eAAe,EAAE,eAAe,EAChC,WAAW,EAAE,WAAW,EACxB,OAAO,EAAE,OAAO,GAClB,CACA,CACT,CAAC;AACN,CAAC,CAAC;AAEF,eAAe,UAAU,CAAC"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=BottomArea.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"BottomArea.test.d.ts","sourceRoot":"","sources":["../../source/components/BottomArea.test.tsx"],"names":[],"mappings":""}
@@ -0,0 +1,73 @@
1
+ import test from 'ava';
2
+ import React from 'react';
3
+ import { render } from 'ink-testing-library';
4
+ import { InputProvider } from '../context/InputContext.js';
5
+ import BottomArea from './BottomArea.js';
6
+ import { createMockSettingsService } from '../services/settings-service.mock.js';
7
+ const mockSlashCommands = [
8
+ { name: '/clear', description: 'Clear screen', action: () => { } },
9
+ ];
10
+ const baseProps = {
11
+ pendingApproval: null,
12
+ waitingForApproval: false,
13
+ waitingForRejectionReason: false,
14
+ isProcessing: false,
15
+ onSubmit: async () => { },
16
+ slashCommands: mockSlashCommands,
17
+ isShellMode: false,
18
+ hasConversationHistory: false,
19
+ settingsService: createMockSettingsService(),
20
+ loggingService: {
21
+ info: () => { },
22
+ warn: () => { },
23
+ error: () => { },
24
+ debug: () => { },
25
+ security: () => { },
26
+ setCorrelationId: () => { },
27
+ clearCorrelationId: () => { },
28
+ },
29
+ historyService: {
30
+ getMessages: () => [],
31
+ addMessage: () => { },
32
+ clear: () => { },
33
+ },
34
+ onApprove: () => { },
35
+ onReject: () => { },
36
+ };
37
+ const renderBottomArea = (props) => render(React.createElement(InputProvider, null,
38
+ React.createElement(BottomArea, { ...props })));
39
+ test('BottomArea shows input when idle', t => {
40
+ const { lastFrame } = renderBottomArea(baseProps);
41
+ const output = lastFrame() ?? '';
42
+ t.true(output.includes('❯'));
43
+ t.false(output.includes('processing'));
44
+ t.false(output.includes('Allow this action?'));
45
+ });
46
+ test('BottomArea shows approval prompt when waiting for approval', t => {
47
+ const { lastFrame } = renderBottomArea({
48
+ ...baseProps,
49
+ pendingApproval: {
50
+ agentName: 'Agent',
51
+ toolName: 'shell',
52
+ argumentsText: '{"commands":"ls"}',
53
+ rawInterruption: null,
54
+ },
55
+ waitingForApproval: true,
56
+ });
57
+ const output = lastFrame() ?? '';
58
+ t.true(output.includes('Allow this action?'));
59
+ t.true(output.includes('Approve'));
60
+ t.true(output.includes('Reject'));
61
+ t.false(output.includes('processing'));
62
+ });
63
+ test('BottomArea shows processing indicator when busy', t => {
64
+ const { lastFrame } = renderBottomArea({
65
+ ...baseProps,
66
+ isProcessing: true,
67
+ });
68
+ const output = lastFrame() ?? '';
69
+ t.true(output.includes('processing.'));
70
+ t.false(output.includes('Allow this action?'));
71
+ t.false(output.includes('❯'));
72
+ });
73
+ //# sourceMappingURL=BottomArea.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"BottomArea.test.js","sourceRoot":"","sources":["../../source/components/BottomArea.test.tsx"],"names":[],"mappings":"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"}
@@ -0,0 +1,7 @@
1
+ import React from 'react';
2
+ type Props = {
3
+ msg: any;
4
+ };
5
+ declare const _default: React.NamedExoticComponent<Props>;
6
+ export default _default;
7
+ //# sourceMappingURL=ChatMessage.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ChatMessage.d.ts","sourceRoot":"","sources":["../../source/components/ChatMessage.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAW,MAAM,OAAO,CAAC;AAIhC,KAAK,KAAK,GAAG;IACT,GAAG,EAAE,GAAG,CAAC;CACZ,CAAC;;AAsBF,wBAAuC"}
@@ -0,0 +1,10 @@
1
+ import React from 'react';
2
+ import { Box, Text } from 'ink';
3
+ import MarkdownRenderer from './MarkdownRenderer.js';
4
+ const ChatMessage = ({ msg }) => {
5
+ return (React.createElement(Box, { flexDirection: "column" }, msg.sender === 'user' ? (React.createElement(Text, { color: "blue" },
6
+ "\u276F ",
7
+ msg.text)) : msg.sender === 'system' ? (React.createElement(Text, { color: "gray", dimColor: true }, msg.text)) : msg.sender === 'reasoning' ? (React.createElement(Text, { color: "gray", dimColor: true }, msg.text)) : (React.createElement(MarkdownRenderer, null, msg.text))));
8
+ };
9
+ export default React.memo(ChatMessage);
10
+ //# sourceMappingURL=ChatMessage.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ChatMessage.js","sourceRoot":"","sources":["../../source/components/ChatMessage.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAW,MAAM,OAAO,CAAC;AAChC,OAAO,EAAC,GAAG,EAAE,IAAI,EAAC,MAAM,KAAK,CAAC;AAC9B,OAAO,gBAAgB,MAAM,uBAAuB,CAAC;AAMrD,MAAM,WAAW,GAAc,CAAC,EAAC,GAAG,EAAC,EAAE,EAAE;IACrC,OAAO,CACH,oBAAC,GAAG,IAAC,aAAa,EAAC,QAAQ,IACtB,GAAG,CAAC,MAAM,KAAK,MAAM,CAAC,CAAC,CAAC,CACrB,oBAAC,IAAI,IAAC,KAAK,EAAC,MAAM;;QAAI,GAAG,CAAC,IAAI,CAAQ,CACzC,CAAC,CAAC,CAAC,GAAG,CAAC,MAAM,KAAK,QAAQ,CAAC,CAAC,CAAC,CAC1B,oBAAC,IAAI,IAAC,KAAK,EAAC,MAAM,EAAC,QAAQ,UACtB,GAAG,CAAC,IAAI,CACN,CACV,CAAC,CAAC,CAAC,GAAG,CAAC,MAAM,KAAK,WAAW,CAAC,CAAC,CAAC,CAC7B,oBAAC,IAAI,IAAC,KAAK,EAAC,MAAM,EAAC,QAAQ,UACtB,GAAG,CAAC,IAAI,CACN,CACV,CAAC,CAAC,CAAC,CACA,oBAAC,gBAAgB,QAAE,GAAG,CAAC,IAAI,CAAoB,CAClD,CACC,CACT,CAAC;AACN,CAAC,CAAC;AAEF,eAAe,KAAK,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC"}
@@ -0,0 +1,15 @@
1
+ import React from 'react';
2
+ type Props = {
3
+ command: string;
4
+ output?: string;
5
+ status?: 'pending' | 'running' | 'completed' | 'failed';
6
+ success?: boolean | null;
7
+ failureReason?: string;
8
+ toolName?: string;
9
+ toolArgs?: any;
10
+ isApprovalRejection?: boolean;
11
+ hadApproval?: boolean;
12
+ };
13
+ declare const _default: React.NamedExoticComponent<Props>;
14
+ export default _default;
15
+ //# sourceMappingURL=CommandMessage.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"CommandMessage.d.ts","sourceRoot":"","sources":["../../source/components/CommandMessage.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAkC,MAAM,OAAO,CAAC;AAIvD,KAAK,KAAK,GAAG;IACT,OAAO,EAAE,MAAM,CAAC;IAChB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,MAAM,CAAC,EAAE,SAAS,GAAG,SAAS,GAAG,WAAW,GAAG,QAAQ,CAAC;IACxD,OAAO,CAAC,EAAE,OAAO,GAAG,IAAI,CAAC;IACzB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,QAAQ,CAAC,EAAE,GAAG,CAAC;IACf,mBAAmB,CAAC,EAAE,OAAO,CAAC;IAC9B,WAAW,CAAC,EAAE,OAAO,CAAC;CACzB,CAAC;;AAsPF,wBAA0C"}
@@ -0,0 +1,188 @@
1
+ import React, { useState, useEffect } from 'react';
2
+ import { Box, Text } from 'ink';
3
+ import { generateDiff } from '../utils/diff.js';
4
+ const DiffView = ({ diff }) => {
5
+ try {
6
+ const lines = diff.split('\n');
7
+ const maxLines = 30;
8
+ const truncated = lines.length > maxLines;
9
+ const displayLines = truncated ? lines.slice(0, maxLines) : lines;
10
+ return (React.createElement(Box, { flexDirection: "column", marginLeft: 2 },
11
+ displayLines.map((line, i) => {
12
+ let color;
13
+ if (line.startsWith('+')) {
14
+ color = 'green';
15
+ }
16
+ else if (line.startsWith('-')) {
17
+ color = 'red';
18
+ }
19
+ else if (line.startsWith('@@')) {
20
+ color = 'cyan';
21
+ }
22
+ return (React.createElement(Text, { key: i, color: color, dimColor: !color }, line));
23
+ }),
24
+ truncated && (React.createElement(Text, { dimColor: true },
25
+ "... (",
26
+ lines.length - maxLines,
27
+ " more lines)"))));
28
+ }
29
+ catch (error) {
30
+ return (React.createElement(Box, { marginLeft: 2 },
31
+ React.createElement(Text, { color: "red", dimColor: true }, "[Failed to render diff preview]")));
32
+ }
33
+ };
34
+ const formatToolArgs = (toolName, args) => {
35
+ if (!args || !toolName) {
36
+ return '';
37
+ }
38
+ const normalizedArgs = (() => {
39
+ if (typeof args !== 'string') {
40
+ return args;
41
+ }
42
+ const trimmed = args.trim();
43
+ if (!trimmed) {
44
+ return null;
45
+ }
46
+ try {
47
+ return JSON.parse(trimmed);
48
+ }
49
+ catch {
50
+ return null;
51
+ }
52
+ })();
53
+ if (!normalizedArgs || typeof normalizedArgs !== 'object') {
54
+ return '';
55
+ }
56
+ try {
57
+ // Format based on tool type to match extract-command-messages.ts
58
+ switch (toolName) {
59
+ case 'shell': {
60
+ const command = normalizedArgs.command ?? normalizedArgs.commands;
61
+ const commandText = typeof command === 'string'
62
+ ? command
63
+ : Array.isArray(command)
64
+ ? command.join(' && ')
65
+ : '';
66
+ if (typeof commandText === 'string' && commandText.trim()) {
67
+ return commandText.length > 80
68
+ ? `${commandText.slice(0, 80)}...`
69
+ : commandText;
70
+ }
71
+ return '';
72
+ }
73
+ case 'grep': {
74
+ const pattern = normalizedArgs.pattern || '';
75
+ const path = normalizedArgs.path || '.';
76
+ const parts = [`"${pattern}"`, `"${path}"`];
77
+ if (normalizedArgs.case_sensitive)
78
+ parts.push('--case-sensitive');
79
+ if (normalizedArgs.file_pattern)
80
+ parts.push(`--include "${normalizedArgs.file_pattern}"`);
81
+ if (normalizedArgs.exclude_pattern)
82
+ parts.push(`--exclude "${normalizedArgs.exclude_pattern}"`);
83
+ return parts.join(' ');
84
+ }
85
+ case 'apply_patch': {
86
+ const type = normalizedArgs.type || 'unknown';
87
+ const path = normalizedArgs.path || 'unknown';
88
+ return `${type} ${path}`;
89
+ }
90
+ case 'search_replace': {
91
+ const searchContent = normalizedArgs.search_content || '';
92
+ const replaceContent = normalizedArgs.replace_content || '';
93
+ const path = normalizedArgs.path || 'unknown';
94
+ const search = searchContent.length > 30
95
+ ? `${searchContent.slice(0, 30)}...`
96
+ : searchContent;
97
+ const replace = replaceContent.length > 30
98
+ ? `${replaceContent.slice(0, 30)}...`
99
+ : replaceContent;
100
+ return `"${search}" → "${replace}" "${path}"`;
101
+ }
102
+ case 'ask_mentor': {
103
+ const question = normalizedArgs.question || 'Unknown question';
104
+ return question.length > 80
105
+ ? `${question.slice(0, 80)}...`
106
+ : question;
107
+ }
108
+ default:
109
+ // Generic fallback for unknown tools
110
+ const entries = Object.entries(normalizedArgs);
111
+ if (entries.length === 0)
112
+ return '';
113
+ return entries
114
+ .map(([key, value]) => {
115
+ const stringValue = typeof value === 'string'
116
+ ? (value.length > 50 ? `${value.slice(0, 50)}...` : value)
117
+ : JSON.stringify(value);
118
+ return `${key}=${stringValue}`;
119
+ })
120
+ .join(' ');
121
+ }
122
+ }
123
+ catch {
124
+ return '';
125
+ }
126
+ };
127
+ const CommandMessage = ({ command, output, status, success, failureReason, toolName, toolArgs, hadApproval, }) => {
128
+ const isRunning = status === 'pending' || status === 'running';
129
+ const [isVisible, setIsVisible] = useState(!isRunning);
130
+ useEffect(() => {
131
+ if (!isRunning) {
132
+ setIsVisible(true);
133
+ return;
134
+ }
135
+ const timer = setTimeout(() => {
136
+ setIsVisible(true);
137
+ }, 1000);
138
+ return () => clearTimeout(timer);
139
+ }, [isRunning]);
140
+ if (!isVisible) {
141
+ return null;
142
+ }
143
+ const outputText = output?.trim() ? output : (isRunning ? '(running...)' : '(no output)');
144
+ const displayed = outputText && outputText !== '(no output)'
145
+ ? (() => {
146
+ const lines = (output || '').split('\n');
147
+ return lines.length > 3
148
+ ? `${lines.slice(0, 3).join('\n')}\n... (${lines.length - 3} more lines)`
149
+ : output;
150
+ })()
151
+ : outputText;
152
+ // Special handling for search_replace
153
+ if (toolName === 'search_replace' && toolArgs) {
154
+ const diff = generateDiff(toolArgs.search_content, toolArgs.replace_content);
155
+ // For search_replace that had an approval prompt (user said 'y'), only show output
156
+ if (hadApproval) {
157
+ return (React.createElement(Box, { flexDirection: "column" },
158
+ React.createElement(Text, { color: success === false ? 'red' : 'gray' }, displayed)));
159
+ }
160
+ // For auto-approved search_replace (no approval prompt), show diff + output
161
+ return (React.createElement(Box, { flexDirection: "column" },
162
+ React.createElement(Box, null,
163
+ React.createElement(Text, { color: "yellow", bold: true }, "[SEARCH & REPLACE]"),
164
+ React.createElement(Text, null,
165
+ " ",
166
+ toolArgs.path),
167
+ toolArgs.replace_all && (React.createElement(Text, { color: "magenta" }, " (all occurrences)"))),
168
+ React.createElement(DiffView, { diff: diff }),
169
+ failureReason && (React.createElement(Text, { color: "red" },
170
+ "Error: ",
171
+ failureReason)),
172
+ React.createElement(Text, { color: success === false ? 'red' : 'gray' }, displayed)));
173
+ }
174
+ const formattedArgs = toolArgs ? formatToolArgs(toolName, toolArgs) : '';
175
+ return (React.createElement(Box, { flexDirection: "column" },
176
+ React.createElement(Text, { color: success === false ? 'red' : isRunning ? 'yellow' : 'cyan' },
177
+ "$ ",
178
+ React.createElement(Text, { bold: true }, command),
179
+ isRunning && formattedArgs && command === toolName && React.createElement(Text, { color: "yellow" },
180
+ " ",
181
+ formattedArgs)),
182
+ failureReason && React.createElement(Text, { color: "red" },
183
+ "Error: ",
184
+ failureReason),
185
+ React.createElement(Text, { color: success === false ? 'red' : 'gray' }, displayed)));
186
+ };
187
+ export default React.memo(CommandMessage);
188
+ //# sourceMappingURL=CommandMessage.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"CommandMessage.js","sourceRoot":"","sources":["../../source/components/CommandMessage.tsx"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=CommandMessage.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"CommandMessage.test.d.ts","sourceRoot":"","sources":["../../source/components/CommandMessage.test.tsx"],"names":[],"mappings":""}
@@ -0,0 +1,35 @@
1
+ import test from 'ava';
2
+ import React from 'react';
3
+ import { render } from 'ink-testing-library';
4
+ import CommandMessage from './CommandMessage.js';
5
+ test('CommandMessage does not duplicate parameters when they are already in command string', async (t) => {
6
+ const props = {
7
+ command: 'shell: ls -la',
8
+ toolName: 'shell',
9
+ toolArgs: { command: 'ls -la' },
10
+ status: 'running',
11
+ };
12
+ const { lastFrame } = render(React.createElement(CommandMessage, { ...props }));
13
+ await new Promise(resolve => setTimeout(resolve, 1100));
14
+ const output = lastFrame() ?? '';
15
+ // The bug would cause "ls -la" to appear twice
16
+ // e.g. "$ shell: ls -la ls -la"
17
+ // Count occurrences of "ls -la"
18
+ const count = (output.match(/ls -la/g) || []).length;
19
+ // It should only appear once in the command line
20
+ t.is(count, 1, `Expected "ls -la" to appear once, but found ${count}. Output: ${output}`);
21
+ });
22
+ test('CommandMessage still shows arguments for unknown tools where command is just toolName', async (t) => {
23
+ const props = {
24
+ command: 'unknown_tool',
25
+ toolName: 'unknown_tool',
26
+ toolArgs: { foo: 'bar' },
27
+ status: 'running',
28
+ };
29
+ const { lastFrame } = render(React.createElement(CommandMessage, { ...props }));
30
+ await new Promise(resolve => setTimeout(resolve, 1100));
31
+ const output = lastFrame() ?? '';
32
+ t.true(output.includes('unknown_tool'));
33
+ t.true(output.includes('foo=bar'));
34
+ });
35
+ //# sourceMappingURL=CommandMessage.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"CommandMessage.test.js","sourceRoot":"","sources":["../../source/components/CommandMessage.test.tsx"],"names":[],"mappings":"AAAA,OAAO,IAAI,MAAM,KAAK,CAAC;AACvB,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,EAAC,MAAM,EAAC,MAAM,qBAAqB,CAAC;AAC3C,OAAO,cAAc,MAAM,qBAAqB,CAAC;AAEjD,IAAI,CAAC,sFAAsF,EAAE,KAAK,EAAC,CAAC,EAAC,EAAE;IACnG,MAAM,KAAK,GAAG;QACV,OAAO,EAAE,eAAe;QACxB,QAAQ,EAAE,OAAO;QACjB,QAAQ,EAAE,EAAC,OAAO,EAAE,QAAQ,EAAC;QAC7B,MAAM,EAAE,SAA2D;KACtE,CAAC;IAEF,MAAM,EAAC,SAAS,EAAC,GAAG,MAAM,CAAC,oBAAC,cAAc,OAAK,KAAK,GAAI,CAAC,CAAC;IAC1D,MAAM,IAAI,OAAO,CAAC,OAAO,CAAC,EAAE,CAAC,UAAU,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC,CAAC;IACxD,MAAM,MAAM,GAAG,SAAS,EAAE,IAAI,EAAE,CAAC;IAEjC,+CAA+C;IAC/C,gCAAgC;IAEhC,gCAAgC;IAChC,MAAM,KAAK,GAAG,CAAC,MAAM,CAAC,KAAK,CAAC,SAAS,CAAC,IAAI,EAAE,CAAC,CAAC,MAAM,CAAC;IAErD,iDAAiD;IACjD,CAAC,CAAC,EAAE,CAAC,KAAK,EAAE,CAAC,EAAE,+CAA+C,KAAK,aAAa,MAAM,EAAE,CAAC,CAAC;AAC9F,CAAC,CAAC,CAAC;AAEH,IAAI,CAAC,uFAAuF,EAAE,KAAK,EAAC,CAAC,EAAC,EAAE;IACpG,MAAM,KAAK,GAAG;QACV,OAAO,EAAE,cAAc;QACvB,QAAQ,EAAE,cAAc;QACxB,QAAQ,EAAE,EAAC,GAAG,EAAE,KAAK,EAAC;QACtB,MAAM,EAAE,SAA2D;KACtE,CAAC;IAEF,MAAM,EAAC,SAAS,EAAC,GAAG,MAAM,CAAC,oBAAC,cAAc,OAAK,KAAK,GAAI,CAAC,CAAC;IAC1D,MAAM,IAAI,OAAO,CAAC,OAAO,CAAC,EAAE,CAAC,UAAU,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC,CAAC;IACxD,MAAM,MAAM,GAAG,SAAS,EAAE,IAAI,EAAE,CAAC;IAEjC,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,cAAc,CAAC,CAAC,CAAC;IACxC,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAC,CAAC;AACvC,CAAC,CAAC,CAAC"}
@@ -0,0 +1,27 @@
1
+ import React, { Component, ReactNode } from 'react';
2
+ import type { LoggingService } from '../services/logging-service.js';
3
+ interface ErrorBoundaryProps {
4
+ children: ReactNode;
5
+ loggingService?: LoggingService;
6
+ }
7
+ interface ErrorBoundaryState {
8
+ hasError: boolean;
9
+ error: Error | null;
10
+ errorInfo: React.ErrorInfo | null;
11
+ }
12
+ /**
13
+ * Error Boundary component to catch render exceptions and prevent app crashes.
14
+ *
15
+ * When a component throws during render:
16
+ * 1. Logs the error via loggingService
17
+ * 2. Shows a minimal fallback UI with recovery instructions
18
+ * 3. Keeps the app running so the user can recover
19
+ */
20
+ export declare class ErrorBoundary extends Component<ErrorBoundaryProps, ErrorBoundaryState> {
21
+ constructor(props: ErrorBoundaryProps);
22
+ static getDerivedStateFromError(error: Error): Partial<ErrorBoundaryState>;
23
+ componentDidCatch(error: Error, errorInfo: React.ErrorInfo): void;
24
+ render(): ReactNode;
25
+ }
26
+ export {};
27
+ //# sourceMappingURL=ErrorBoundary.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ErrorBoundary.d.ts","sourceRoot":"","sources":["../../source/components/ErrorBoundary.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,EAAC,SAAS,EAAE,SAAS,EAAC,MAAM,OAAO,CAAC;AAElD,OAAO,KAAK,EAAC,cAAc,EAAC,MAAM,gCAAgC,CAAC;AAEnE,UAAU,kBAAkB;IACxB,QAAQ,EAAE,SAAS,CAAC;IACpB,cAAc,CAAC,EAAE,cAAc,CAAC;CACnC;AAED,UAAU,kBAAkB;IACxB,QAAQ,EAAE,OAAO,CAAC;IAClB,KAAK,EAAE,KAAK,GAAG,IAAI,CAAC;IACpB,SAAS,EAAE,KAAK,CAAC,SAAS,GAAG,IAAI,CAAC;CACrC;AAED;;;;;;;GAOG;AACH,qBAAa,aAAc,SAAQ,SAAS,CACxC,kBAAkB,EAClB,kBAAkB,CACrB;gBACe,KAAK,EAAE,kBAAkB;IASrC,MAAM,CAAC,wBAAwB,CAAC,KAAK,EAAE,KAAK,GAAG,OAAO,CAAC,kBAAkB,CAAC;IAQ1E,iBAAiB,CAAC,KAAK,EAAE,KAAK,EAAE,SAAS,EAAE,KAAK,CAAC,SAAS,GAAG,IAAI;IAoBjE,MAAM,IAAI,SAAS;CA8DtB"}