@qduc/term2 0.3.0 → 0.4.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 (758) hide show
  1. package/dist/agent.d.ts.map +1 -1
  2. package/dist/agent.js +46 -6
  3. package/dist/agent.js.map +1 -1
  4. package/dist/agent.test.d.ts +2 -0
  5. package/dist/agent.test.d.ts.map +1 -0
  6. package/dist/agent.test.js +198 -0
  7. package/dist/agent.test.js.map +1 -0
  8. package/dist/app.d.ts +5 -0
  9. package/dist/app.d.ts.map +1 -1
  10. package/dist/app.js +30 -14
  11. package/dist/app.js.map +1 -1
  12. package/dist/app.startup-banner.test.d.ts +2 -0
  13. package/dist/app.startup-banner.test.d.ts.map +1 -0
  14. package/dist/app.startup-banner.test.js +11 -0
  15. package/dist/app.startup-banner.test.js.map +1 -0
  16. package/dist/cli.d.ts +1 -1
  17. package/dist/cli.d.ts.map +1 -1
  18. package/dist/cli.js +18 -3
  19. package/dist/cli.js.map +1 -1
  20. package/dist/components/ApprovalPrompt.d.ts.map +1 -1
  21. package/dist/components/ApprovalPrompt.js +10 -10
  22. package/dist/components/ApprovalPrompt.js.map +1 -1
  23. package/dist/components/Banner.js +1 -1
  24. package/dist/components/Banner.js.map +1 -1
  25. package/dist/components/BottomArea.d.ts.map +1 -1
  26. package/dist/components/BottomArea.js +3 -4
  27. package/dist/components/BottomArea.js.map +1 -1
  28. package/dist/components/ChatMessage.d.ts +1 -0
  29. package/dist/components/ChatMessage.d.ts.map +1 -1
  30. package/dist/components/ChatMessage.js +2 -2
  31. package/dist/components/ChatMessage.js.map +1 -1
  32. package/dist/components/CommandMessage.d.ts.map +1 -1
  33. package/dist/components/CommandMessage.js +48 -3
  34. package/dist/components/CommandMessage.js.map +1 -1
  35. package/dist/components/CommandMessage.test.js +90 -0
  36. package/dist/components/CommandMessage.test.js.map +1 -1
  37. package/dist/components/Input/PopupManager.d.ts +3 -0
  38. package/dist/components/Input/PopupManager.d.ts.map +1 -1
  39. package/dist/components/Input/PopupManager.js +2 -2
  40. package/dist/components/Input/PopupManager.js.map +1 -1
  41. package/dist/components/Input/insertions.d.ts.map +1 -1
  42. package/dist/components/Input/insertions.js +2 -2
  43. package/dist/components/Input/insertions.js.map +1 -1
  44. package/dist/components/Input/popup-key-navigation.d.ts +18 -0
  45. package/dist/components/Input/popup-key-navigation.d.ts.map +1 -0
  46. package/dist/components/Input/popup-key-navigation.js +16 -0
  47. package/dist/components/Input/popup-key-navigation.js.map +1 -0
  48. package/dist/components/Input/popup-key-navigation.test.d.ts +2 -0
  49. package/dist/components/Input/popup-key-navigation.test.d.ts.map +1 -0
  50. package/dist/components/Input/popup-key-navigation.test.js +73 -0
  51. package/dist/components/Input/popup-key-navigation.test.js.map +1 -0
  52. package/dist/components/Input/popup-props.d.ts.map +1 -1
  53. package/dist/components/Input/popup-props.js +2 -0
  54. package/dist/components/Input/popup-props.js.map +1 -1
  55. package/dist/components/Input/triggers.d.ts +1 -0
  56. package/dist/components/Input/triggers.d.ts.map +1 -1
  57. package/dist/components/Input/triggers.js +1 -0
  58. package/dist/components/Input/triggers.js.map +1 -1
  59. package/dist/components/InputBox.d.ts.map +1 -1
  60. package/dist/components/InputBox.js +130 -6
  61. package/dist/components/InputBox.js.map +1 -1
  62. package/dist/components/InputBox.test.js +42 -1
  63. package/dist/components/InputBox.test.js.map +1 -1
  64. package/dist/components/LiveResponse.d.ts +1 -3
  65. package/dist/components/LiveResponse.d.ts.map +1 -1
  66. package/dist/components/LiveResponse.js +5 -6
  67. package/dist/components/LiveResponse.js.map +1 -1
  68. package/dist/components/MarkdownRenderer.d.ts +5 -2
  69. package/dist/components/MarkdownRenderer.d.ts.map +1 -1
  70. package/dist/components/MarkdownRenderer.js +66 -45
  71. package/dist/components/MarkdownRenderer.js.map +1 -1
  72. package/dist/components/MessageList.d.ts +7 -1
  73. package/dist/components/MessageList.d.ts.map +1 -1
  74. package/dist/components/MessageList.js +98 -23
  75. package/dist/components/MessageList.js.map +1 -1
  76. package/dist/components/MessageList.test.js +177 -4
  77. package/dist/components/MessageList.test.js.map +1 -1
  78. package/dist/components/ModelSelectionMenu.d.ts.map +1 -1
  79. package/dist/components/ModelSelectionMenu.js +54 -14
  80. package/dist/components/ModelSelectionMenu.js.map +1 -1
  81. package/dist/components/PathSelectionMenu.d.ts +2 -0
  82. package/dist/components/PathSelectionMenu.d.ts.map +1 -1
  83. package/dist/components/PathSelectionMenu.js +31 -12
  84. package/dist/components/PathSelectionMenu.js.map +1 -1
  85. package/dist/components/SettingsSelectionMenu.d.ts +1 -0
  86. package/dist/components/SettingsSelectionMenu.d.ts.map +1 -1
  87. package/dist/components/SettingsSelectionMenu.js +32 -23
  88. package/dist/components/SettingsSelectionMenu.js.map +1 -1
  89. package/dist/components/SettingsSelectionMenu.scroll.test.d.ts +2 -0
  90. package/dist/components/SettingsSelectionMenu.scroll.test.d.ts.map +1 -0
  91. package/dist/components/SettingsSelectionMenu.scroll.test.js +23 -0
  92. package/dist/components/SettingsSelectionMenu.scroll.test.js.map +1 -0
  93. package/dist/components/StatusBar.d.ts.map +1 -1
  94. package/dist/components/StatusBar.js +14 -14
  95. package/dist/components/StatusBar.js.map +1 -1
  96. package/dist/components/StatusBar.test.d.ts +2 -0
  97. package/dist/components/StatusBar.test.d.ts.map +1 -0
  98. package/dist/components/StatusBar.test.js +30 -0
  99. package/dist/components/StatusBar.test.js.map +1 -0
  100. package/dist/contracts/conversation.d.ts +1 -0
  101. package/dist/contracts/conversation.d.ts.map +1 -1
  102. package/dist/env-setup.d.ts +2 -0
  103. package/dist/env-setup.d.ts.map +1 -0
  104. package/dist/env-setup.js +7 -0
  105. package/dist/env-setup.js.map +1 -0
  106. package/dist/env-setup.test.d.ts +2 -0
  107. package/dist/env-setup.test.d.ts.map +1 -0
  108. package/dist/env-setup.test.js +6 -0
  109. package/dist/env-setup.test.js.map +1 -0
  110. package/dist/hooks/path-completion-filter.d.ts +4 -0
  111. package/dist/hooks/path-completion-filter.d.ts.map +1 -0
  112. package/dist/hooks/path-completion-filter.js +27 -0
  113. package/dist/hooks/path-completion-filter.js.map +1 -0
  114. package/dist/hooks/path-completion-filter.test.d.ts +2 -0
  115. package/dist/hooks/path-completion-filter.test.d.ts.map +1 -0
  116. package/dist/hooks/path-completion-filter.test.js +100 -0
  117. package/dist/hooks/path-completion-filter.test.js.map +1 -0
  118. package/dist/hooks/use-app-commands.d.ts +3 -1
  119. package/dist/hooks/use-app-commands.d.ts.map +1 -1
  120. package/dist/hooks/use-app-commands.js +74 -6
  121. package/dist/hooks/use-app-commands.js.map +1 -1
  122. package/dist/hooks/use-app-commands.test.js +20 -3
  123. package/dist/hooks/use-app-commands.test.js.map +1 -1
  124. package/dist/hooks/use-conversation.d.ts +4 -9
  125. package/dist/hooks/use-conversation.d.ts.map +1 -1
  126. package/dist/hooks/use-conversation.js +32 -57
  127. package/dist/hooks/use-conversation.js.map +1 -1
  128. package/dist/hooks/use-mode-handlers.d.ts +3 -1
  129. package/dist/hooks/use-mode-handlers.d.ts.map +1 -1
  130. package/dist/hooks/use-mode-handlers.js +8 -0
  131. package/dist/hooks/use-mode-handlers.js.map +1 -1
  132. package/dist/hooks/use-model-selection.d.ts +1 -1
  133. package/dist/hooks/use-model-selection.d.ts.map +1 -1
  134. package/dist/hooks/use-model-selection.js +57 -21
  135. package/dist/hooks/use-model-selection.js.map +1 -1
  136. package/dist/hooks/use-model-selection.test.js +171 -9
  137. package/dist/hooks/use-model-selection.test.js.map +1 -1
  138. package/dist/hooks/use-path-completion.d.ts +1 -0
  139. package/dist/hooks/use-path-completion.d.ts.map +1 -1
  140. package/dist/hooks/use-path-completion.js +22 -17
  141. package/dist/hooks/use-path-completion.js.map +1 -1
  142. package/dist/hooks/use-settings-completion.d.ts +2 -2
  143. package/dist/hooks/use-settings-completion.d.ts.map +1 -1
  144. package/dist/hooks/use-settings-completion.js +53 -18
  145. package/dist/hooks/use-settings-completion.js.map +1 -1
  146. package/dist/hooks/use-settings-completion.scroll.test.d.ts +2 -0
  147. package/dist/hooks/use-settings-completion.scroll.test.d.ts.map +1 -0
  148. package/dist/hooks/use-settings-completion.scroll.test.js +55 -0
  149. package/dist/hooks/use-settings-completion.scroll.test.js.map +1 -0
  150. package/dist/hooks/use-settings-completion.test.js +69 -79
  151. package/dist/hooks/use-settings-completion.test.js.map +1 -1
  152. package/dist/hooks/use-settings-value-completion.d.ts +1 -2
  153. package/dist/hooks/use-settings-value-completion.d.ts.map +1 -1
  154. package/dist/hooks/use-settings-value-completion.js +47 -19
  155. package/dist/hooks/use-settings-value-completion.js.map +1 -1
  156. package/dist/hooks/use-settings-value-completion.test.js +5 -18
  157. package/dist/hooks/use-settings-value-completion.test.js.map +1 -1
  158. package/dist/hooks/use-slash-commands.d.ts +7 -0
  159. package/dist/hooks/use-slash-commands.d.ts.map +1 -1
  160. package/dist/hooks/use-slash-commands.js +20 -13
  161. package/dist/hooks/use-slash-commands.js.map +1 -1
  162. package/dist/hooks/use-slash-commands.test.js +52 -1
  163. package/dist/hooks/use-slash-commands.test.js.map +1 -1
  164. package/dist/hooks/use-trigger-detection.d.ts.map +1 -1
  165. package/dist/hooks/use-trigger-detection.js +7 -3
  166. package/dist/hooks/use-trigger-detection.js.map +1 -1
  167. package/dist/hooks/use-trigger-detection.test.d.ts +2 -0
  168. package/dist/hooks/use-trigger-detection.test.d.ts.map +1 -0
  169. package/dist/hooks/use-trigger-detection.test.js +59 -0
  170. package/dist/hooks/use-trigger-detection.test.js.map +1 -0
  171. package/dist/lib/openai-agent-client.d.ts +21 -0
  172. package/dist/lib/openai-agent-client.d.ts.map +1 -1
  173. package/dist/lib/openai-agent-client.js +52 -17
  174. package/dist/lib/openai-agent-client.js.map +1 -1
  175. package/dist/lib/openai-agent-client.test.js +63 -0
  176. package/dist/lib/openai-agent-client.test.js.map +1 -1
  177. package/dist/lib/tool-invoke.d.ts +3 -2
  178. package/dist/lib/tool-invoke.d.ts.map +1 -1
  179. package/dist/lib/tool-invoke.js +69 -4
  180. package/dist/lib/tool-invoke.js.map +1 -1
  181. package/dist/lib/tool-invoke.test.js +25 -0
  182. package/dist/lib/tool-invoke.test.js.map +1 -1
  183. package/dist/non-interactive.d.ts.map +1 -1
  184. package/dist/non-interactive.js +3 -0
  185. package/dist/non-interactive.js.map +1 -1
  186. package/dist/prompts/gpt-5-modern.md +66 -0
  187. package/dist/prompts/gpt-5.md +10 -0
  188. package/dist/prompts/lite.md +10 -27
  189. package/dist/prompts/prompt-selector.js +2 -2
  190. package/dist/prompts/prompt-selector.js.map +1 -1
  191. package/dist/prompts/prompt-selector.test.js +7 -2
  192. package/dist/prompts/prompt-selector.test.js.map +1 -1
  193. package/dist/prompts/prompt-selector.test.ts +22 -2
  194. package/dist/prompts/prompt-selector.ts +2 -2
  195. package/dist/prompts/search-via-shell.d.ts +7 -0
  196. package/dist/prompts/search-via-shell.d.ts.map +1 -0
  197. package/dist/prompts/search-via-shell.js +59 -0
  198. package/dist/prompts/search-via-shell.js.map +1 -0
  199. package/dist/prompts/search-via-shell.test.d.ts +2 -0
  200. package/dist/prompts/search-via-shell.test.d.ts.map +1 -0
  201. package/dist/prompts/search-via-shell.test.js +40 -0
  202. package/dist/prompts/search-via-shell.test.js.map +1 -0
  203. package/dist/prompts/search-via-shell.test.ts +47 -0
  204. package/dist/prompts/search-via-shell.ts +71 -0
  205. package/dist/prompts/simple.md +40 -186
  206. package/dist/providers/ai-sdk-agents-adapter.d.ts +7 -0
  207. package/dist/providers/ai-sdk-agents-adapter.d.ts.map +1 -0
  208. package/dist/providers/ai-sdk-agents-adapter.js +80 -0
  209. package/dist/providers/ai-sdk-agents-adapter.js.map +1 -0
  210. package/dist/providers/ai-sdk-agents-adapter.test.d.ts +2 -0
  211. package/dist/providers/ai-sdk-agents-adapter.test.d.ts.map +1 -0
  212. package/dist/providers/ai-sdk-agents-adapter.test.js +158 -0
  213. package/dist/providers/ai-sdk-agents-adapter.test.js.map +1 -0
  214. package/dist/providers/ai-sdk-anthropic.provider.d.ts +14 -0
  215. package/dist/providers/ai-sdk-anthropic.provider.d.ts.map +1 -0
  216. package/dist/providers/ai-sdk-anthropic.provider.js +18 -0
  217. package/dist/providers/ai-sdk-anthropic.provider.js.map +1 -0
  218. package/dist/providers/ai-sdk-google.provider.d.ts +14 -0
  219. package/dist/providers/ai-sdk-google.provider.d.ts.map +1 -0
  220. package/dist/providers/ai-sdk-google.provider.js +18 -0
  221. package/dist/providers/ai-sdk-google.provider.js.map +1 -0
  222. package/dist/providers/ai-sdk-logging-fetch.d.ts +11 -0
  223. package/dist/providers/ai-sdk-logging-fetch.d.ts.map +1 -0
  224. package/dist/providers/ai-sdk-logging-fetch.js +127 -0
  225. package/dist/providers/ai-sdk-logging-fetch.js.map +1 -0
  226. package/dist/providers/ai-sdk-logging-fetch.test.d.ts +2 -0
  227. package/dist/providers/ai-sdk-logging-fetch.test.d.ts.map +1 -0
  228. package/dist/providers/ai-sdk-logging-fetch.test.js +107 -0
  229. package/dist/providers/ai-sdk-logging-fetch.test.js.map +1 -0
  230. package/dist/providers/ai-sdk-message-normalizer.d.ts +8 -0
  231. package/dist/providers/ai-sdk-message-normalizer.d.ts.map +1 -0
  232. package/dist/providers/ai-sdk-message-normalizer.js +115 -0
  233. package/dist/providers/ai-sdk-message-normalizer.js.map +1 -0
  234. package/dist/providers/ai-sdk-message-normalizer.test.d.ts +2 -0
  235. package/dist/providers/ai-sdk-message-normalizer.test.d.ts.map +1 -0
  236. package/dist/providers/ai-sdk-message-normalizer.test.js +435 -0
  237. package/dist/providers/ai-sdk-message-normalizer.test.js.map +1 -0
  238. package/dist/providers/ai-sdk-openai-compatible.provider.d.ts +2 -0
  239. package/dist/providers/ai-sdk-openai-compatible.provider.d.ts.map +1 -1
  240. package/dist/providers/ai-sdk-openai-compatible.provider.js +3 -2
  241. package/dist/providers/ai-sdk-openai-compatible.provider.js.map +1 -1
  242. package/dist/providers/ai-sdk-openai-compatible.provider.test.js +25 -0
  243. package/dist/providers/ai-sdk-openai-compatible.provider.test.js.map +1 -1
  244. package/dist/providers/ai-sdk-openrouter.provider.d.ts +16 -0
  245. package/dist/providers/ai-sdk-openrouter.provider.d.ts.map +1 -0
  246. package/dist/providers/ai-sdk-openrouter.provider.js +21 -0
  247. package/dist/providers/ai-sdk-openrouter.provider.js.map +1 -0
  248. package/dist/providers/ai-sdk-openrouter.provider.test.d.ts +2 -0
  249. package/dist/providers/ai-sdk-openrouter.provider.test.d.ts.map +1 -0
  250. package/dist/providers/ai-sdk-openrouter.provider.test.js +93 -0
  251. package/dist/providers/ai-sdk-openrouter.provider.test.js.map +1 -0
  252. package/dist/providers/common/openai-compatible-messages.d.ts +1 -2
  253. package/dist/providers/common/openai-compatible-messages.d.ts.map +1 -1
  254. package/dist/providers/common/openai-compatible-messages.js +22 -48
  255. package/dist/providers/common/openai-compatible-messages.js.map +1 -1
  256. package/dist/providers/common/openai-compatible-messages.test.js +93 -1
  257. package/dist/providers/common/openai-compatible-messages.test.js.map +1 -1
  258. package/dist/providers/custom-provider-adapter.test.d.ts +2 -0
  259. package/dist/providers/custom-provider-adapter.test.d.ts.map +1 -0
  260. package/dist/providers/custom-provider-adapter.test.js +52 -0
  261. package/dist/providers/custom-provider-adapter.test.js.map +1 -0
  262. package/dist/providers/openai-compatible-behavior-gate.test.d.ts +2 -0
  263. package/dist/providers/openai-compatible-behavior-gate.test.d.ts.map +1 -0
  264. package/dist/providers/openai-compatible-behavior-gate.test.js +216 -0
  265. package/dist/providers/openai-compatible-behavior-gate.test.js.map +1 -0
  266. package/dist/providers/openai-compatible.provider.d.ts +10 -1
  267. package/dist/providers/openai-compatible.provider.d.ts.map +1 -1
  268. package/dist/providers/openai-compatible.provider.js +341 -31
  269. package/dist/providers/openai-compatible.provider.js.map +1 -1
  270. package/dist/providers/openai-compatible.provider.test.d.ts +2 -0
  271. package/dist/providers/openai-compatible.provider.test.d.ts.map +1 -0
  272. package/dist/providers/openai-compatible.provider.test.js +462 -0
  273. package/dist/providers/openai-compatible.provider.test.js.map +1 -0
  274. package/dist/providers/openai.provider.js +2 -1
  275. package/dist/providers/openai.provider.js.map +1 -1
  276. package/dist/providers/openai.provider.test.d.ts +2 -0
  277. package/dist/providers/openai.provider.test.d.ts.map +1 -0
  278. package/dist/providers/openai.provider.test.js +22 -0
  279. package/dist/providers/openai.provider.test.js.map +1 -0
  280. package/dist/providers/openrouter.provider.js +32 -5
  281. package/dist/providers/openrouter.provider.js.map +1 -1
  282. package/dist/scripts/eval-auto-approval/dataset.d.ts +2 -2
  283. package/dist/services/conversation-events.d.ts +3 -0
  284. package/dist/services/conversation-events.d.ts.map +1 -1
  285. package/dist/services/conversation-result-builder.d.ts.map +1 -1
  286. package/dist/services/conversation-result-builder.js +11 -1
  287. package/dist/services/conversation-result-builder.js.map +1 -1
  288. package/dist/services/conversation-result-builder.test.js +72 -0
  289. package/dist/services/conversation-result-builder.test.js.map +1 -1
  290. package/dist/services/conversation-session.d.ts +2 -1
  291. package/dist/services/conversation-session.d.ts.map +1 -1
  292. package/dist/services/conversation-session.js +30 -1
  293. package/dist/services/conversation-session.js.map +1 -1
  294. package/dist/services/file-service.js +1 -1
  295. package/dist/services/file-service.js.map +1 -1
  296. package/dist/services/logging-contract.d.ts +3 -3
  297. package/dist/services/logging-service.d.ts.map +1 -1
  298. package/dist/services/logging-service.js +18 -1
  299. package/dist/services/logging-service.js.map +1 -1
  300. package/dist/services/model-service.d.ts.map +1 -1
  301. package/dist/services/model-service.js +16 -8
  302. package/dist/services/model-service.js.map +1 -1
  303. package/dist/services/model-service.test.js +67 -1
  304. package/dist/services/model-service.test.js.map +1 -1
  305. package/dist/services/rtk-service.d.ts +23 -0
  306. package/dist/services/rtk-service.d.ts.map +1 -0
  307. package/dist/services/rtk-service.js +165 -0
  308. package/dist/services/rtk-service.js.map +1 -0
  309. package/dist/services/rtk-service.test.d.ts +2 -0
  310. package/dist/services/rtk-service.test.d.ts.map +1 -0
  311. package/dist/services/rtk-service.test.js +239 -0
  312. package/dist/services/rtk-service.test.js.map +1 -0
  313. package/dist/services/settings-persistence.d.ts +1 -0
  314. package/dist/services/settings-persistence.d.ts.map +1 -1
  315. package/dist/services/settings-persistence.js +28 -5
  316. package/dist/services/settings-persistence.js.map +1 -1
  317. package/dist/services/settings-persistence.test.js +55 -3
  318. package/dist/services/settings-persistence.test.js.map +1 -1
  319. package/dist/services/settings-schema.d.ts +55 -16
  320. package/dist/services/settings-schema.d.ts.map +1 -1
  321. package/dist/services/settings-schema.js +35 -4
  322. package/dist/services/settings-schema.js.map +1 -1
  323. package/dist/services/settings-schema.test.d.ts +2 -0
  324. package/dist/services/settings-schema.test.d.ts.map +1 -0
  325. package/dist/services/settings-schema.test.js +77 -0
  326. package/dist/services/settings-schema.test.js.map +1 -0
  327. package/dist/services/settings-service.d.ts.map +1 -1
  328. package/dist/services/settings-service.js +7 -4
  329. package/dist/services/settings-service.js.map +1 -1
  330. package/dist/services/settings-sources.d.ts.map +1 -1
  331. package/dist/services/settings-sources.js +1 -0
  332. package/dist/services/settings-sources.js.map +1 -1
  333. package/dist/services/shell-auto-approval-evaluator.d.ts +1 -1
  334. package/dist/services/shell-auto-approval-evaluator.d.ts.map +1 -1
  335. package/dist/services/shell-auto-approval-evaluator.js +8 -2
  336. package/dist/services/shell-auto-approval-evaluator.js.map +1 -1
  337. package/dist/services/stream-event-parsing.js +1 -1
  338. package/dist/services/stream-event-parsing.js.map +1 -1
  339. package/dist/services/stream-event-parsing.test.js +13 -0
  340. package/dist/services/stream-event-parsing.test.js.map +1 -1
  341. package/dist/services/stream-event-processor.d.ts.map +1 -1
  342. package/dist/services/stream-event-processor.js +10 -8
  343. package/dist/services/stream-event-processor.js.map +1 -1
  344. package/dist/services/stream-event-processor.test.js +32 -0
  345. package/dist/services/stream-event-processor.test.js.map +1 -1
  346. package/dist/services/terminal-result-collector.d.ts.map +1 -1
  347. package/dist/services/terminal-result-collector.js +1 -0
  348. package/dist/services/terminal-result-collector.js.map +1 -1
  349. package/dist/services/terminal-result-collector.test.js +22 -0
  350. package/dist/services/terminal-result-collector.test.js.map +1 -1
  351. package/dist/tools/apply-patch.d.ts +12 -4
  352. package/dist/tools/apply-patch.d.ts.map +1 -1
  353. package/dist/tools/apply-patch.js +204 -208
  354. package/dist/tools/apply-patch.js.map +1 -1
  355. package/dist/tools/apply-patch.test.js +44 -0
  356. package/dist/tools/apply-patch.test.js.map +1 -1
  357. package/dist/tools/code-context.d.ts +27 -0
  358. package/dist/tools/code-context.d.ts.map +1 -0
  359. package/dist/tools/code-context.js +512 -0
  360. package/dist/tools/code-context.js.map +1 -0
  361. package/dist/tools/code-context.test.d.ts +2 -0
  362. package/dist/tools/code-context.test.d.ts.map +1 -0
  363. package/dist/tools/code-context.test.js +368 -0
  364. package/dist/tools/code-context.test.js.map +1 -0
  365. package/dist/tools/create-file.d.ts.map +1 -1
  366. package/dist/tools/create-file.js +3 -2
  367. package/dist/tools/create-file.js.map +1 -1
  368. package/dist/tools/edit-healing.d.ts +4 -3
  369. package/dist/tools/edit-healing.d.ts.map +1 -1
  370. package/dist/tools/edit-healing.js +50 -20
  371. package/dist/tools/edit-healing.js.map +1 -1
  372. package/dist/tools/edit-healing.test.js +62 -0
  373. package/dist/tools/edit-healing.test.js.map +1 -1
  374. package/dist/tools/file-locks.d.ts +2 -0
  375. package/dist/tools/file-locks.d.ts.map +1 -0
  376. package/dist/tools/file-locks.js +21 -0
  377. package/dist/tools/file-locks.js.map +1 -0
  378. package/dist/tools/find-files.d.ts +1 -0
  379. package/dist/tools/find-files.d.ts.map +1 -1
  380. package/dist/tools/find-files.js +59 -139
  381. package/dist/tools/find-files.js.map +1 -1
  382. package/dist/tools/find-files.test.js +5 -10
  383. package/dist/tools/find-files.test.js.map +1 -1
  384. package/dist/tools/grep.d.ts +1 -0
  385. package/dist/tools/grep.d.ts.map +1 -1
  386. package/dist/tools/grep.js +10 -46
  387. package/dist/tools/grep.js.map +1 -1
  388. package/dist/tools/language-providers.d.ts +48 -0
  389. package/dist/tools/language-providers.d.ts.map +1 -0
  390. package/dist/tools/language-providers.js +244 -0
  391. package/dist/tools/language-providers.js.map +1 -0
  392. package/dist/tools/search-replace.d.ts +5 -2
  393. package/dist/tools/search-replace.d.ts.map +1 -1
  394. package/dist/tools/search-replace.js +201 -106
  395. package/dist/tools/search-replace.js.map +1 -1
  396. package/dist/tools/search-replace.test.js +111 -1
  397. package/dist/tools/search-replace.test.js.map +1 -1
  398. package/dist/tools/search.d.ts.map +1 -1
  399. package/dist/tools/search.js +5 -15
  400. package/dist/tools/search.js.map +1 -1
  401. package/dist/tools/shell.d.ts +2 -0
  402. package/dist/tools/shell.d.ts.map +1 -1
  403. package/dist/tools/shell.js +15 -7
  404. package/dist/tools/shell.js.map +1 -1
  405. package/dist/tools/shell.test.js +28 -0
  406. package/dist/tools/shell.test.js.map +1 -1
  407. package/dist/tools/tool-names.d.ts +3 -0
  408. package/dist/tools/tool-names.d.ts.map +1 -1
  409. package/dist/tools/tool-names.js +3 -0
  410. package/dist/tools/tool-names.js.map +1 -1
  411. package/dist/tools/tool-names.test.js +4 -1
  412. package/dist/tools/tool-names.test.js.map +1 -1
  413. package/dist/tools/tool-parameter-schema.test.js +18 -0
  414. package/dist/tools/tool-parameter-schema.test.js.map +1 -1
  415. package/dist/utils/command-safety/constants.d.ts.map +1 -1
  416. package/dist/utils/command-safety/constants.js +30 -5
  417. package/dist/utils/command-safety/constants.js.map +1 -1
  418. package/dist/utils/command-safety/index.d.ts.map +1 -1
  419. package/dist/utils/command-safety/index.js +3 -0
  420. package/dist/utils/command-safety/index.js.map +1 -1
  421. package/dist/utils/command-safety/path-analysis.d.ts.map +1 -1
  422. package/dist/utils/command-safety/path-analysis.js +8 -0
  423. package/dist/utils/command-safety/path-analysis.js.map +1 -1
  424. package/dist/utils/command-safety.find.test.js +1 -1
  425. package/dist/utils/command-safety.find.test.js.map +1 -1
  426. package/dist/utils/command-safety.path.test.js +14 -0
  427. package/dist/utils/command-safety.path.test.js.map +1 -1
  428. package/dist/utils/command-safety.specialized-handlers.test.d.ts +2 -0
  429. package/dist/utils/command-safety.specialized-handlers.test.d.ts.map +1 -0
  430. package/dist/utils/command-safety.specialized-handlers.test.js +20 -0
  431. package/dist/utils/command-safety.specialized-handlers.test.js.map +1 -0
  432. package/dist/utils/conversation-event-handler.d.ts +8 -6
  433. package/dist/utils/conversation-event-handler.d.ts.map +1 -1
  434. package/dist/utils/conversation-event-handler.js +166 -46
  435. package/dist/utils/conversation-event-handler.js.map +1 -1
  436. package/dist/utils/conversation-event-handler.test.js +391 -12
  437. package/dist/utils/conversation-event-handler.test.js.map +1 -1
  438. package/dist/utils/conversation-utils.d.ts +2 -0
  439. package/dist/utils/conversation-utils.d.ts.map +1 -1
  440. package/dist/utils/conversation-utils.js +2 -0
  441. package/dist/utils/conversation-utils.js.map +1 -1
  442. package/dist/utils/execute-shell.d.ts +5 -6
  443. package/dist/utils/execute-shell.d.ts.map +1 -1
  444. package/dist/utils/execute-shell.js +21 -11
  445. package/dist/utils/execute-shell.js.map +1 -1
  446. package/dist/utils/execute-shell.test.js +37 -6
  447. package/dist/utils/execute-shell.test.js.map +1 -1
  448. package/dist/utils/extract-command-messages.d.ts.map +1 -1
  449. package/dist/utils/extract-command-messages.js +4 -1
  450. package/dist/utils/extract-command-messages.js.map +1 -1
  451. package/dist/utils/flex-service-tier.d.ts +2 -0
  452. package/dist/utils/flex-service-tier.d.ts.map +1 -0
  453. package/dist/utils/flex-service-tier.js +20 -0
  454. package/dist/utils/flex-service-tier.js.map +1 -0
  455. package/dist/utils/flex-service-tier.test.d.ts +2 -0
  456. package/dist/utils/flex-service-tier.test.d.ts.map +1 -0
  457. package/dist/utils/flex-service-tier.test.js +25 -0
  458. package/dist/utils/flex-service-tier.test.js.map +1 -0
  459. package/dist/utils/log-truncation.d.ts +4 -2
  460. package/dist/utils/log-truncation.d.ts.map +1 -1
  461. package/dist/utils/log-truncation.js +143 -41
  462. package/dist/utils/log-truncation.js.map +1 -1
  463. package/dist/utils/log-truncation.test.js +131 -1
  464. package/dist/utils/log-truncation.test.js.map +1 -1
  465. package/dist/utils/project-tree.d.ts +14 -0
  466. package/dist/utils/project-tree.d.ts.map +1 -0
  467. package/dist/utils/project-tree.js +111 -0
  468. package/dist/utils/project-tree.js.map +1 -0
  469. package/dist/utils/project-tree.test.d.ts +2 -0
  470. package/dist/utils/project-tree.test.d.ts.map +1 -0
  471. package/dist/utils/project-tree.test.js +149 -0
  472. package/dist/utils/project-tree.test.js.map +1 -0
  473. package/dist/utils/provider-traffic-extractor.d.ts.map +1 -1
  474. package/dist/utils/provider-traffic-extractor.js +0 -1
  475. package/dist/utils/provider-traffic-extractor.js.map +1 -1
  476. package/dist/utils/streaming-session-factory.d.ts +1 -3
  477. package/dist/utils/streaming-session-factory.d.ts.map +1 -1
  478. package/dist/utils/streaming-session-factory.js +29 -10
  479. package/dist/utils/streaming-session-factory.js.map +1 -1
  480. package/dist/utils/streaming-session-factory.test.js +47 -15
  481. package/dist/utils/streaming-session-factory.test.js.map +1 -1
  482. package/dist/utils/subsequence-filter.d.ts +8 -0
  483. package/dist/utils/subsequence-filter.d.ts.map +1 -0
  484. package/dist/utils/subsequence-filter.js +47 -0
  485. package/dist/utils/subsequence-filter.js.map +1 -0
  486. package/dist/utils/terminal-clear.d.ts +7 -0
  487. package/dist/utils/terminal-clear.d.ts.map +1 -0
  488. package/dist/utils/terminal-clear.js +5 -0
  489. package/dist/utils/terminal-clear.js.map +1 -0
  490. package/dist/utils/terminal-clear.test.d.ts +2 -0
  491. package/dist/utils/terminal-clear.test.d.ts.map +1 -0
  492. package/dist/utils/terminal-clear.test.js +13 -0
  493. package/dist/utils/terminal-clear.test.js.map +1 -0
  494. package/dist/utils/token-usage.d.ts +13 -1
  495. package/dist/utils/token-usage.d.ts.map +1 -1
  496. package/dist/utils/token-usage.js +119 -28
  497. package/dist/utils/token-usage.js.map +1 -1
  498. package/dist/utils/token-usage.test.js +135 -3
  499. package/dist/utils/token-usage.test.js.map +1 -1
  500. package/package.json +5 -4
  501. package/readme.md +29 -24
  502. package/dist/agent.lite-mode.test.d.ts +0 -2
  503. package/dist/agent.lite-mode.test.d.ts.map +0 -1
  504. package/dist/agent.lite-mode.test.js +0 -39
  505. package/dist/agent.lite-mode.test.js.map +0 -1
  506. package/dist/components/ModelSelectionMenu.error-tabs.test.d.ts +0 -2
  507. package/dist/components/ModelSelectionMenu.error-tabs.test.d.ts.map +0 -1
  508. package/dist/components/ModelSelectionMenu.error-tabs.test.js +0 -18
  509. package/dist/components/ModelSelectionMenu.error-tabs.test.js.map +0 -1
  510. package/dist/components/TextInput.d.ts +0 -42
  511. package/dist/components/TextInput.d.ts.map +0 -1
  512. package/dist/components/TextInput.js +0 -398
  513. package/dist/components/TextInput.js.map +0 -1
  514. package/dist/components/TextInput.test.d.ts +0 -2
  515. package/dist/components/TextInput.test.d.ts.map +0 -1
  516. package/dist/components/TextInput.test.js +0 -75
  517. package/dist/components/TextInput.test.js.map +0 -1
  518. package/dist/debug_ask_mentor.d.ts +0 -2
  519. package/dist/debug_ask_mentor.d.ts.map +0 -1
  520. package/dist/debug_ask_mentor.js +0 -73
  521. package/dist/debug_ask_mentor.js.map +0 -1
  522. package/dist/lib/shell.d.ts +0 -7
  523. package/dist/lib/shell.d.ts.map +0 -1
  524. package/dist/lib/shell.js +0 -56
  525. package/dist/lib/shell.js.map +0 -1
  526. package/dist/modes/companion/command-index.d.ts +0 -26
  527. package/dist/modes/companion/command-index.d.ts.map +0 -1
  528. package/dist/modes/companion/command-index.js +0 -50
  529. package/dist/modes/companion/command-index.js.map +0 -1
  530. package/dist/modes/companion/command-index.test.d.ts +0 -2
  531. package/dist/modes/companion/command-index.test.d.ts.map +0 -1
  532. package/dist/modes/companion/command-index.test.js +0 -86
  533. package/dist/modes/companion/command-index.test.js.map +0 -1
  534. package/dist/modes/companion/companion-app.d.ts +0 -12
  535. package/dist/modes/companion/companion-app.d.ts.map +0 -1
  536. package/dist/modes/companion/companion-app.js +0 -297
  537. package/dist/modes/companion/companion-app.js.map +0 -1
  538. package/dist/modes/companion/companion-session.d.ts +0 -63
  539. package/dist/modes/companion/companion-session.d.ts.map +0 -1
  540. package/dist/modes/companion/companion-session.js +0 -146
  541. package/dist/modes/companion/companion-session.js.map +0 -1
  542. package/dist/modes/companion/companion-session.test.d.ts +0 -2
  543. package/dist/modes/companion/companion-session.test.d.ts.map +0 -1
  544. package/dist/modes/companion/companion-session.test.js +0 -28
  545. package/dist/modes/companion/companion-session.test.js.map +0 -1
  546. package/dist/modes/companion/components/status-bar.d.ts +0 -13
  547. package/dist/modes/companion/components/status-bar.d.ts.map +0 -1
  548. package/dist/modes/companion/components/status-bar.js +0 -26
  549. package/dist/modes/companion/components/status-bar.js.map +0 -1
  550. package/dist/modes/companion/context-buffer.d.ts +0 -65
  551. package/dist/modes/companion/context-buffer.d.ts.map +0 -1
  552. package/dist/modes/companion/context-buffer.js +0 -156
  553. package/dist/modes/companion/context-buffer.js.map +0 -1
  554. package/dist/modes/companion/context-buffer.test.d.ts +0 -2
  555. package/dist/modes/companion/context-buffer.test.d.ts.map +0 -1
  556. package/dist/modes/companion/context-buffer.test.js +0 -154
  557. package/dist/modes/companion/context-buffer.test.js.map +0 -1
  558. package/dist/modes/companion/event-detector.d.ts +0 -46
  559. package/dist/modes/companion/event-detector.d.ts.map +0 -1
  560. package/dist/modes/companion/event-detector.js +0 -169
  561. package/dist/modes/companion/event-detector.js.map +0 -1
  562. package/dist/modes/companion/event-detector.test.d.ts +0 -2
  563. package/dist/modes/companion/event-detector.test.d.ts.map +0 -1
  564. package/dist/modes/companion/event-detector.test.js +0 -121
  565. package/dist/modes/companion/event-detector.test.js.map +0 -1
  566. package/dist/modes/companion/index.d.ts +0 -33
  567. package/dist/modes/companion/index.d.ts.map +0 -1
  568. package/dist/modes/companion/index.js +0 -21
  569. package/dist/modes/companion/index.js.map +0 -1
  570. package/dist/modes/companion/input-key-mapper.d.ts +0 -3
  571. package/dist/modes/companion/input-key-mapper.d.ts.map +0 -1
  572. package/dist/modes/companion/input-key-mapper.js +0 -31
  573. package/dist/modes/companion/input-key-mapper.js.map +0 -1
  574. package/dist/modes/companion/input-key-mapper.test.d.ts +0 -2
  575. package/dist/modes/companion/input-key-mapper.test.d.ts.map +0 -1
  576. package/dist/modes/companion/input-key-mapper.test.js +0 -26
  577. package/dist/modes/companion/input-key-mapper.test.js.map +0 -1
  578. package/dist/modes/companion/input-parser.d.ts +0 -53
  579. package/dist/modes/companion/input-parser.d.ts.map +0 -1
  580. package/dist/modes/companion/input-parser.js +0 -114
  581. package/dist/modes/companion/input-parser.js.map +0 -1
  582. package/dist/modes/companion/input-parser.test.d.ts +0 -2
  583. package/dist/modes/companion/input-parser.test.d.ts.map +0 -1
  584. package/dist/modes/companion/input-parser.test.js +0 -123
  585. package/dist/modes/companion/input-parser.test.js.map +0 -1
  586. package/dist/modes/companion/mode-manager.d.ts +0 -41
  587. package/dist/modes/companion/mode-manager.d.ts.map +0 -1
  588. package/dist/modes/companion/mode-manager.js +0 -56
  589. package/dist/modes/companion/mode-manager.js.map +0 -1
  590. package/dist/modes/companion/mode-manager.test.d.ts +0 -2
  591. package/dist/modes/companion/mode-manager.test.d.ts.map +0 -1
  592. package/dist/modes/companion/mode-manager.test.js +0 -65
  593. package/dist/modes/companion/mode-manager.test.js.map +0 -1
  594. package/dist/modes/companion/output-classifier.d.ts +0 -15
  595. package/dist/modes/companion/output-classifier.d.ts.map +0 -1
  596. package/dist/modes/companion/output-classifier.js +0 -77
  597. package/dist/modes/companion/output-classifier.js.map +0 -1
  598. package/dist/modes/companion/output-classifier.test.d.ts +0 -2
  599. package/dist/modes/companion/output-classifier.test.d.ts.map +0 -1
  600. package/dist/modes/companion/output-classifier.test.js +0 -133
  601. package/dist/modes/companion/output-classifier.test.js.map +0 -1
  602. package/dist/modes/companion/pty-wrapper.d.ts +0 -46
  603. package/dist/modes/companion/pty-wrapper.d.ts.map +0 -1
  604. package/dist/modes/companion/pty-wrapper.js +0 -143
  605. package/dist/modes/companion/pty-wrapper.js.map +0 -1
  606. package/dist/modes/companion/safety-classifier.d.ts +0 -31
  607. package/dist/modes/companion/safety-classifier.d.ts.map +0 -1
  608. package/dist/modes/companion/safety-classifier.js +0 -140
  609. package/dist/modes/companion/safety-classifier.js.map +0 -1
  610. package/dist/modes/companion/safety-classifier.test.d.ts +0 -2
  611. package/dist/modes/companion/safety-classifier.test.d.ts.map +0 -1
  612. package/dist/modes/companion/safety-classifier.test.js +0 -151
  613. package/dist/modes/companion/safety-classifier.test.js.map +0 -1
  614. package/dist/modes/companion/summarizer.d.ts +0 -24
  615. package/dist/modes/companion/summarizer.d.ts.map +0 -1
  616. package/dist/modes/companion/summarizer.js +0 -132
  617. package/dist/modes/companion/summarizer.js.map +0 -1
  618. package/dist/modes/companion/terminal-history.d.ts +0 -27
  619. package/dist/modes/companion/terminal-history.d.ts.map +0 -1
  620. package/dist/modes/companion/terminal-history.js +0 -142
  621. package/dist/modes/companion/terminal-history.js.map +0 -1
  622. package/dist/prompts/simple-mentor.md +0 -215
  623. package/dist/providers/github-copilot/converters.d.ts +0 -45
  624. package/dist/providers/github-copilot/converters.d.ts.map +0 -1
  625. package/dist/providers/github-copilot/converters.js +0 -118
  626. package/dist/providers/github-copilot/converters.js.map +0 -1
  627. package/dist/providers/github-copilot/converters.test.d.ts +0 -2
  628. package/dist/providers/github-copilot/converters.test.d.ts.map +0 -1
  629. package/dist/providers/github-copilot/converters.test.js +0 -162
  630. package/dist/providers/github-copilot/converters.test.js.map +0 -1
  631. package/dist/providers/github-copilot/github-copilot.provider.d.ts +0 -2
  632. package/dist/providers/github-copilot/github-copilot.provider.d.ts.map +0 -1
  633. package/dist/providers/github-copilot/github-copilot.provider.js +0 -75
  634. package/dist/providers/github-copilot/github-copilot.provider.js.map +0 -1
  635. package/dist/providers/github-copilot/github-copilot.provider.test.d.ts +0 -2
  636. package/dist/providers/github-copilot/github-copilot.provider.test.d.ts.map +0 -1
  637. package/dist/providers/github-copilot/github-copilot.provider.test.js +0 -26
  638. package/dist/providers/github-copilot/github-copilot.provider.test.js.map +0 -1
  639. package/dist/providers/github-copilot/index.d.ts +0 -4
  640. package/dist/providers/github-copilot/index.d.ts.map +0 -1
  641. package/dist/providers/github-copilot/index.js +0 -4
  642. package/dist/providers/github-copilot/index.js.map +0 -1
  643. package/dist/providers/github-copilot/model.d.ts +0 -24
  644. package/dist/providers/github-copilot/model.d.ts.map +0 -1
  645. package/dist/providers/github-copilot/model.delta.test.d.ts +0 -2
  646. package/dist/providers/github-copilot/model.delta.test.d.ts.map +0 -1
  647. package/dist/providers/github-copilot/model.delta.test.js +0 -15
  648. package/dist/providers/github-copilot/model.delta.test.js.map +0 -1
  649. package/dist/providers/github-copilot/model.js +0 -498
  650. package/dist/providers/github-copilot/model.js.map +0 -1
  651. package/dist/providers/github-copilot/model.test.d.ts +0 -2
  652. package/dist/providers/github-copilot/model.test.d.ts.map +0 -1
  653. package/dist/providers/github-copilot/model.test.js +0 -63
  654. package/dist/providers/github-copilot/model.test.js.map +0 -1
  655. package/dist/providers/github-copilot/provider.d.ts +0 -15
  656. package/dist/providers/github-copilot/provider.d.ts.map +0 -1
  657. package/dist/providers/github-copilot/provider.js +0 -25
  658. package/dist/providers/github-copilot/provider.js.map +0 -1
  659. package/dist/providers/github-copilot/provider.test.d.ts +0 -2
  660. package/dist/providers/github-copilot/provider.test.d.ts.map +0 -1
  661. package/dist/providers/github-copilot/provider.test.js +0 -52
  662. package/dist/providers/github-copilot/provider.test.js.map +0 -1
  663. package/dist/providers/github-copilot/utils.d.ts +0 -20
  664. package/dist/providers/github-copilot/utils.d.ts.map +0 -1
  665. package/dist/providers/github-copilot/utils.js +0 -142
  666. package/dist/providers/github-copilot/utils.js.map +0 -1
  667. package/dist/providers/github-copilot/utils.test.d.ts +0 -2
  668. package/dist/providers/github-copilot/utils.test.d.ts.map +0 -1
  669. package/dist/providers/github-copilot/utils.test.js +0 -21
  670. package/dist/providers/github-copilot/utils.test.js.map +0 -1
  671. package/dist/providers/openai-compatible/api.d.ts +0 -17
  672. package/dist/providers/openai-compatible/api.d.ts.map +0 -1
  673. package/dist/providers/openai-compatible/api.js +0 -58
  674. package/dist/providers/openai-compatible/api.js.map +0 -1
  675. package/dist/providers/openai-compatible/model.d.ts +0 -17
  676. package/dist/providers/openai-compatible/model.d.ts.map +0 -1
  677. package/dist/providers/openai-compatible/model.js +0 -473
  678. package/dist/providers/openai-compatible/model.js.map +0 -1
  679. package/dist/providers/openai-compatible/provider.d.ts +0 -22
  680. package/dist/providers/openai-compatible/provider.d.ts.map +0 -1
  681. package/dist/providers/openai-compatible/provider.js +0 -43
  682. package/dist/providers/openai-compatible/provider.js.map +0 -1
  683. package/dist/providers/openai-compatible/reasoning-content.test.d.ts +0 -2
  684. package/dist/providers/openai-compatible/reasoning-content.test.d.ts.map +0 -1
  685. package/dist/providers/openai-compatible/reasoning-content.test.js +0 -258
  686. package/dist/providers/openai-compatible/reasoning-content.test.js.map +0 -1
  687. package/dist/providers/openai-compatible/utils.d.ts +0 -3
  688. package/dist/providers/openai-compatible/utils.d.ts.map +0 -1
  689. package/dist/providers/openai-compatible/utils.js +0 -11
  690. package/dist/providers/openai-compatible/utils.js.map +0 -1
  691. package/dist/providers/openrouter/api.d.ts +0 -39
  692. package/dist/providers/openrouter/api.d.ts.map +0 -1
  693. package/dist/providers/openrouter/api.js +0 -164
  694. package/dist/providers/openrouter/api.js.map +0 -1
  695. package/dist/providers/openrouter/converters.d.ts +0 -8
  696. package/dist/providers/openrouter/converters.d.ts.map +0 -1
  697. package/dist/providers/openrouter/converters.js +0 -391
  698. package/dist/providers/openrouter/converters.js.map +0 -1
  699. package/dist/providers/openrouter/converters.test.d.ts +0 -2
  700. package/dist/providers/openrouter/converters.test.d.ts.map +0 -1
  701. package/dist/providers/openrouter/converters.test.js +0 -179
  702. package/dist/providers/openrouter/converters.test.js.map +0 -1
  703. package/dist/providers/openrouter/index.d.ts +0 -4
  704. package/dist/providers/openrouter/index.d.ts.map +0 -1
  705. package/dist/providers/openrouter/index.js +0 -4
  706. package/dist/providers/openrouter/index.js.map +0 -1
  707. package/dist/providers/openrouter/model.d.ts +0 -14
  708. package/dist/providers/openrouter/model.d.ts.map +0 -1
  709. package/dist/providers/openrouter/model.js +0 -457
  710. package/dist/providers/openrouter/model.js.map +0 -1
  711. package/dist/providers/openrouter/provider.d.ts +0 -15
  712. package/dist/providers/openrouter/provider.d.ts.map +0 -1
  713. package/dist/providers/openrouter/provider.js +0 -21
  714. package/dist/providers/openrouter/provider.js.map +0 -1
  715. package/dist/providers/openrouter/reasoning-content.test.d.ts +0 -2
  716. package/dist/providers/openrouter/reasoning-content.test.d.ts.map +0 -1
  717. package/dist/providers/openrouter/reasoning-content.test.js +0 -122
  718. package/dist/providers/openrouter/reasoning-content.test.js.map +0 -1
  719. package/dist/providers/openrouter/utils.d.ts +0 -11
  720. package/dist/providers/openrouter/utils.d.ts.map +0 -1
  721. package/dist/providers/openrouter/utils.js +0 -29
  722. package/dist/providers/openrouter/utils.js.map +0 -1
  723. package/dist/providers/openrouter.api.retry.test.d.ts +0 -2
  724. package/dist/providers/openrouter.api.retry.test.d.ts.map +0 -1
  725. package/dist/providers/openrouter.api.retry.test.js +0 -148
  726. package/dist/providers/openrouter.api.retry.test.js.map +0 -1
  727. package/dist/providers/openrouter.test.d.ts +0 -2
  728. package/dist/providers/openrouter.test.d.ts.map +0 -1
  729. package/dist/providers/openrouter.test.js +0 -1449
  730. package/dist/providers/openrouter.test.js.map +0 -1
  731. package/dist/safety-checker.js +0 -57
  732. package/dist/services/check_mock.d.ts +0 -2
  733. package/dist/services/check_mock.d.ts.map +0 -1
  734. package/dist/services/check_mock.js +0 -22
  735. package/dist/services/check_mock.js.map +0 -1
  736. package/dist/services/conversation-service.test.d.ts +0 -2
  737. package/dist/services/conversation-service.test.d.ts.map +0 -1
  738. package/dist/services/conversation-service.test.js +0 -156
  739. package/dist/services/conversation-service.test.js.map +0 -1
  740. package/dist/tools/bash.d.ts +0 -10
  741. package/dist/tools/bash.d.ts.map +0 -1
  742. package/dist/tools/bash.js +0 -55
  743. package/dist/tools/bash.js.map +0 -1
  744. package/dist/utils/command-safety.d.ts +0 -21
  745. package/dist/utils/command-safety.d.ts.map +0 -1
  746. package/dist/utils/command-safety.devnull.test.d.ts +0 -2
  747. package/dist/utils/command-safety.devnull.test.d.ts.map +0 -1
  748. package/dist/utils/command-safety.devnull.test.js +0 -13
  749. package/dist/utils/command-safety.devnull.test.js.map +0 -1
  750. package/dist/utils/command-safety.js +0 -348
  751. package/dist/utils/command-safety.js.map +0 -1
  752. package/dist/utils/extract-command-messages.test.d.ts +0 -2
  753. package/dist/utils/extract-command-messages.test.d.ts.map +0 -1
  754. package/dist/utils/extract-command-messages.test.js +0 -64
  755. package/dist/utils/extract-command-messages.test.js.map +0 -1
  756. package/dist/utils/provider-traffic-extractor.repro.test.d.ts +0 -2
  757. package/dist/utils/provider-traffic-extractor.repro.test.d.ts.map +0 -1
  758. package/dist/utils/provider-traffic-extractor.repro.test.js.map +0 -1
@@ -1 +1 @@
1
- {"version":3,"file":"agent.d.ts","sourceRoot":"","sources":["../source/agent.ts"],"names":[],"mappings":"AAUA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAC;AAIvD,OAAO,KAAK,EAAE,gBAAgB,EAAE,eAAe,EAAE,MAAM,kCAAkC,CAAC;AAC1F,OAAO,EAAE,gBAAgB,EAAE,MAAM,iCAAiC,CAAC;AAkBnE,wBAAgB,UAAU,CACxB,eAAe,EAAE,gBAAgB,EACjC,gBAAgB,CAAC,EAAE,gBAAgB,EACnC,IAAI,UAAQ,GACX,MAAM,CAwBR;AAED,wBAAgB,qBAAqB,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAUzD;AAED,MAAM,WAAW,eAAe;IAC9B,IAAI,EAAE,MAAM,CAAC;IACb,YAAY,EAAE,MAAM,CAAC;IACrB,KAAK,EAAE,cAAc,EAAE,CAAC;IACxB,KAAK,EAAE,MAAM,CAAC;CACf;AAUD;;GAEG;AACH,eAAO,MAAM,kBAAkB,GAC7B,MAAM;IACJ,eAAe,EAAE,gBAAgB,CAAC;IAClC,cAAc,EAAE,eAAe,CAAC;IAChC,gBAAgB,CAAC,EAAE,gBAAgB,CAAC;IACpC,SAAS,CAAC,EAAE,CAAC,QAAQ,EAAE,MAAM,KAAK,OAAO,CAAC,MAAM,CAAC,CAAC;CACnD,EACD,QAAQ,MAAM,KACb,eA2FF,CAAC"}
1
+ {"version":3,"file":"agent.d.ts","sourceRoot":"","sources":["../source/agent.ts"],"names":[],"mappings":"AAWA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAC;AAIvD,OAAO,KAAK,EAAE,gBAAgB,EAAE,eAAe,EAAE,MAAM,kCAAkC,CAAC;AAC1F,OAAO,EAAE,gBAAgB,EAAE,MAAM,iCAAiC,CAAC;AAmBnE,wBAAgB,UAAU,CACxB,eAAe,EAAE,gBAAgB,EACjC,gBAAgB,CAAC,EAAE,gBAAgB,EACnC,IAAI,UAAQ,GACX,MAAM,CAwBR;AAED,wBAAgB,qBAAqB,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAUzD;AAED,MAAM,WAAW,eAAe;IAC9B,IAAI,EAAE,MAAM,CAAC;IACb,YAAY,EAAE,MAAM,CAAC;IACrB,KAAK,EAAE,cAAc,EAAE,CAAC;IACxB,KAAK,EAAE,MAAM,CAAC;CACf;AAUD;;GAEG;AACH,eAAO,MAAM,kBAAkB,GAC7B,MAAM;IACJ,eAAe,EAAE,gBAAgB,CAAC;IAClC,cAAc,EAAE,eAAe,CAAC;IAChC,gBAAgB,CAAC,EAAE,gBAAgB,CAAC;IACpC,SAAS,CAAC,EAAE,CAAC,QAAQ,EAAE,MAAM,KAAK,OAAO,CAAC,MAAM,CAAC,CAAC;CACnD,EACD,QAAQ,MAAM,KACb,eAoIF,CAAC"}
package/dist/agent.js CHANGED
@@ -8,11 +8,13 @@ import { createAskMentorToolDefinition } from './tools/ask-mentor.js';
8
8
  import { createWebSearchToolDefinition } from './tools/web-search.js';
9
9
  import { createWebFetchToolDefinition } from './tools/web-fetch.js';
10
10
  import { createCreateFileToolDefinition } from './tools/create-file.js';
11
+ import { createCodeContextSearchToolDefinition, createReadCodeOutlineToolDefinition } from './tools/code-context.js';
11
12
  import os from 'os';
12
13
  import fs from 'fs';
13
14
  import path from 'path';
14
15
  import { getPromptPath } from './prompts/prompt-selector.js';
15
16
  import { shouldPreferPatchEditingModel } from './lib/tool-selection-policy.js';
17
+ import { getSearchViaShellAddendum } from './prompts/search-via-shell.js';
16
18
  const BASE_PROMPT_PATH = path.join(import.meta.dirname, './prompts');
17
19
  function getTopLevelEntries(cwd, limit = 50) {
18
20
  try {
@@ -78,6 +80,11 @@ export const getAgentDefinition = (deps, model) => {
78
80
  throw new Error('Model cannot be undefined or empty');
79
81
  const mentorMode = settingsService.get('app.mentorMode');
80
82
  const liteMode = settingsService.get('app.liteMode');
83
+ const searchViaShell = settingsService.get('app.searchViaShell');
84
+ // Code-context tools operate on the local filesystem only; disable them for
85
+ // remote (SSH) execution where the workspace lives on another host.
86
+ const codeContextEnabled = !(executionContext?.isRemote() ?? false);
87
+ const isGpt5 = !liteMode && shouldPreferPatchEditingModel(resolvedModel);
81
88
  const promptPath = getPromptPath({ basePromptDir: BASE_PROMPT_PATH, model: resolvedModel, liteMode });
82
89
  let prompt = resolvePrompt(promptPath);
83
90
  if (mentorMode && !liteMode) {
@@ -90,6 +97,31 @@ export const getAgentDefinition = (deps, model) => {
90
97
  loggingService.error(`Failed to load mentor addon: ${e}`);
91
98
  }
92
99
  }
100
+ const codeContextDoc = codeContextEnabled
101
+ ? liteMode
102
+ ? '### Code Context Tools\n\n- `read_code_outline`: inspect file structure.\n- `code_context_search`: find related files or symbol declarations. Use `read_file` before editing.'
103
+ : '### Code Context Tools\n\n- Use `read_code_outline` for a compact file outline.\n- Use `code_context_search` for related files or symbol declarations.\n- Use `read_file` before editing.'
104
+ : '';
105
+ if (codeContextDoc) {
106
+ prompt = `${prompt}\n\n${codeContextDoc}`;
107
+ }
108
+ if (searchViaShell) {
109
+ try {
110
+ const addendum = getSearchViaShellAddendum({ executionContext });
111
+ prompt = `${prompt}\n\n${addendum}`;
112
+ }
113
+ catch (e) {
114
+ loggingService.error(`Failed to load search-via-shell addendum: ${e}`);
115
+ }
116
+ }
117
+ else {
118
+ if (!isGpt5) {
119
+ const searchToolsDoc = liteMode
120
+ ? '### Search Tools\n\n- `find_files`: locate files by name or glob.\n- `grep`: search file contents.'
121
+ : '### Search Tools\n\n- Prefer `find_files` for locating files by name or glob.\n- Prefer `grep` for searching code content or symbols.';
122
+ prompt = `${prompt}\n\n${searchToolsDoc}`;
123
+ }
124
+ }
93
125
  const envInfo = getEnvInfo(settingsService, executionContext, liteMode);
94
126
  const cwd = executionContext?.getCwd() || process.cwd();
95
127
  const tools = [
@@ -103,24 +135,32 @@ export const getAgentDefinition = (deps, model) => {
103
135
  loggingService,
104
136
  }),
105
137
  ];
138
+ if (codeContextEnabled) {
139
+ tools.push(createReadCodeOutlineToolDefinition({ executionContext }), createCodeContextSearchToolDefinition({ executionContext }));
140
+ }
106
141
  if (liteMode) {
107
142
  // Lite mode: shell + read-only tools only (no editing tools)
108
- tools.push(createGrepToolDefinition({ executionContext }), createReadFileToolDefinition({
109
- executionContext,
110
- allowOutsideWorkspace: true,
111
- }), createFindFilesToolDefinition({
143
+ if (!searchViaShell) {
144
+ tools.push(createGrepToolDefinition({ executionContext }), createFindFilesToolDefinition({
145
+ executionContext,
146
+ allowOutsideWorkspace: true,
147
+ }));
148
+ }
149
+ tools.push(createReadFileToolDefinition({
112
150
  executionContext,
113
151
  allowOutsideWorkspace: true,
114
152
  }));
115
153
  }
116
154
  else {
117
155
  // Full mode: all tools based on model
118
- const isGpt5 = shouldPreferPatchEditingModel(resolvedModel);
119
156
  if (isGpt5) {
120
157
  tools.push(createApplyPatchToolDefinition({ settingsService, loggingService, executionContext }));
121
158
  }
122
159
  else {
123
- tools.push(createGrepToolDefinition({ executionContext }), createReadFileToolDefinition({ executionContext }), createFindFilesToolDefinition({ executionContext }), createCreateFileToolDefinition({
160
+ if (!searchViaShell) {
161
+ tools.push(createGrepToolDefinition({ executionContext }), createFindFilesToolDefinition({ executionContext }));
162
+ }
163
+ tools.push(createReadFileToolDefinition({ executionContext }), createCreateFileToolDefinition({
124
164
  settingsService,
125
165
  loggingService,
126
166
  executionContext,
package/dist/agent.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"agent.js","sourceRoot":"","sources":["../source/agent.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"agent.js","sourceRoot":"","sources":["../source/agent.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,wBAAwB,EAAE,MAAM,iBAAiB,CAAC;AAC3D,OAAO,EAAE,4BAA4B,EAAE,MAAM,sBAAsB,CAAC;AACpE,OAAO,EAAE,6BAA6B,EAAE,MAAM,uBAAuB,CAAC;AACtE,OAAO,EAAE,iCAAiC,EAAE,MAAM,2BAA2B,CAAC;AAC9E,OAAO,EAAE,8BAA8B,EAAE,MAAM,wBAAwB,CAAC;AACxE,OAAO,EAAE,yBAAyB,EAAE,MAAM,kBAAkB,CAAC;AAC7D,OAAO,EAAE,6BAA6B,EAAE,MAAM,uBAAuB,CAAC;AACtE,OAAO,EAAE,6BAA6B,EAAE,MAAM,uBAAuB,CAAC;AACtE,OAAO,EAAE,4BAA4B,EAAE,MAAM,sBAAsB,CAAC;AACpE,OAAO,EAAE,8BAA8B,EAAE,MAAM,wBAAwB,CAAC;AACxE,OAAO,EAAE,qCAAqC,EAAE,mCAAmC,EAAE,MAAM,yBAAyB,CAAC;AAErH,OAAO,EAAE,MAAM,IAAI,CAAC;AACpB,OAAO,EAAE,MAAM,IAAI,CAAC;AACpB,OAAO,IAAI,MAAM,MAAM,CAAC;AAGxB,OAAO,EAAE,aAAa,EAAE,MAAM,8BAA8B,CAAC;AAC7D,OAAO,EAAE,6BAA6B,EAAE,MAAM,gCAAgC,CAAC;AAC/E,OAAO,EAAE,yBAAyB,EAAE,MAAM,+BAA+B,CAAC;AAE1E,MAAM,gBAAgB,GAAG,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,OAAO,EAAE,WAAW,CAAC,CAAC;AAErE,SAAS,kBAAkB,CAAC,GAAW,EAAE,KAAK,GAAG,EAAE;IACjD,IAAI,CAAC;QACH,MAAM,OAAO,GAAG,EAAE,CAAC,WAAW,CAAC,GAAG,EAAE,EAAE,aAAa,EAAE,IAAI,EAAE,CAAC,CAAC;QAC7D,MAAM,KAAK,GAAG,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,WAAW,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,IAAI,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC;QAC5E,MAAM,KAAK,GAAG,KAAK,CAAC,KAAK,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC;QACpC,MAAM,IAAI,GAAG,KAAK,CAAC,MAAM,GAAG,KAAK,CAAC,CAAC,CAAC,UAAU,KAAK,CAAC,MAAM,GAAG,KAAK,QAAQ,CAAC,CAAC,CAAC,EAAE,CAAC;QAChF,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC;IACjC,CAAC;IAAC,OAAO,CAAM,EAAE,CAAC;QAChB,OAAO,mBAAmB,CAAC,CAAC,OAAO,EAAE,CAAC;IACxC,CAAC;AACH,CAAC;AAED,MAAM,UAAU,UAAU,CACxB,eAAiC,EACjC,gBAAmC,EACnC,IAAI,GAAG,KAAK;IAEZ,MAAM,SAAS,GAAG,eAAe,CAAC,GAAG,CAAS,eAAe,CAAC,IAAI,SAAS,CAAC;IAC5E,MAAM,GAAG,GAAG,gBAAgB,EAAE,MAAM,EAAE,IAAI,OAAO,CAAC,GAAG,EAAE,CAAC;IACxD,MAAM,MAAM,GAAG,EAAE,CAAC,IAAI,EAAE,CAAC;IACzB,MAAM,SAAS,GAAG,EAAE,CAAC,OAAO,EAAE,CAAC;IAC/B,MAAM,UAAU,GAAG,EAAE,CAAC,QAAQ,EAAE,CAAC;IAEjC,MAAM,GAAG,GAAG,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;IAElD,IAAI,IAAI,EAAE,CAAC;QACT,kDAAkD;QAClD,OAAO,OAAO,MAAM,IAAI,SAAS,KAAK,UAAU,aAAa,SAAS,WAAW,GAAG,EAAE,CAAC;IACzF,CAAC;IAED,sHAAsH;IACtH,mFAAmF;IACnF,kFAAkF;IAClF,mCAAmC;IACnC,IAAI,QAAQ,GAAG,EAAE,CAAC;IAClB,IAAI,CAAC,gBAAgB,EAAE,QAAQ,EAAE,EAAE,CAAC;QAClC,QAAQ,GAAG,gBAAgB,kBAAkB,CAAC,GAAG,CAAC,EAAE,CAAC;IACvD,CAAC;IAED,OAAO,OAAO,MAAM,IAAI,SAAS,KAAK,UAAU,aAAa,SAAS,UAAU,GAAG,GAAG,QAAQ,WAAW,GAAG,EAAE,CAAC;AACjH,CAAC;AAED,MAAM,UAAU,qBAAqB,CAAC,GAAW;IAC/C,MAAM,UAAU,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,WAAW,CAAC,CAAC;IAC/C,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,UAAU,CAAC;QAAE,OAAO,EAAE,CAAC;IAE1C,IAAI,CAAC;QACH,MAAM,QAAQ,GAAG,EAAE,CAAC,YAAY,CAAC,UAAU,EAAE,OAAO,CAAC,CAAC,IAAI,EAAE,CAAC;QAC7D,OAAO,4BAA4B,QAAQ,EAAE,CAAC;IAChD,CAAC;IAAC,OAAO,CAAM,EAAE,CAAC;QAChB,OAAO,iCAAiC,CAAC,CAAC,OAAO,EAAE,CAAC;IACtD,CAAC;AACH,CAAC;AASD,SAAS,aAAa,CAAC,UAAkB;IACvC,IAAI,CAAC;QACH,OAAO,EAAE,CAAC,YAAY,CAAC,UAAU,EAAE,OAAO,CAAC,CAAC,IAAI,EAAE,CAAC;IACrD,CAAC;IAAC,OAAO,CAAM,EAAE,CAAC;QAChB,MAAM,IAAI,KAAK,CAAC,iCAAiC,UAAU,KAAK,CAAC,CAAC,OAAO,EAAE,CAAC,CAAC;IAC/E,CAAC;AACH,CAAC;AAED;;GAEG;AACH,MAAM,CAAC,MAAM,kBAAkB,GAAG,CAChC,IAKC,EACD,KAAc,EACG,EAAE;IACnB,MAAM,EAAE,eAAe,EAAE,cAAc,EAAE,gBAAgB,EAAE,SAAS,EAAE,GAAG,IAAI,CAAC;IAC9E,MAAM,YAAY,GAAG,eAAe,CAAC,GAAG,CAAS,aAAa,CAAC,CAAC;IAChE,MAAM,aAAa,GAAG,KAAK,EAAE,IAAI,EAAE,IAAI,YAAY,CAAC;IAEpD,IAAI,CAAC,aAAa;QAAE,MAAM,IAAI,KAAK,CAAC,oCAAoC,CAAC,CAAC;IAE1E,MAAM,UAAU,GAAG,eAAe,CAAC,GAAG,CAAU,gBAAgB,CAAC,CAAC;IAClE,MAAM,QAAQ,GAAG,eAAe,CAAC,GAAG,CAAU,cAAc,CAAC,CAAC;IAC9D,MAAM,cAAc,GAAG,eAAe,CAAC,GAAG,CAAU,oBAAoB,CAAC,CAAC;IAC1E,4EAA4E;IAC5E,oEAAoE;IACpE,MAAM,kBAAkB,GAAG,CAAC,CAAC,gBAAgB,EAAE,QAAQ,EAAE,IAAI,KAAK,CAAC,CAAC;IACpE,MAAM,MAAM,GAAG,CAAC,QAAQ,IAAI,6BAA6B,CAAC,aAAa,CAAC,CAAC;IACzE,MAAM,UAAU,GAAG,aAAa,CAAC,EAAE,aAAa,EAAE,gBAAgB,EAAE,KAAK,EAAE,aAAa,EAAE,QAAQ,EAAE,CAAC,CAAC;IACtG,IAAI,MAAM,GAAG,aAAa,CAAC,UAAU,CAAC,CAAC;IAEvC,IAAI,UAAU,IAAI,CAAC,QAAQ,EAAE,CAAC;QAC5B,MAAM,SAAS,GAAG,IAAI,CAAC,IAAI,CAAC,gBAAgB,EAAE,iBAAiB,CAAC,CAAC;QACjE,IAAI,CAAC;YACH,MAAM,KAAK,GAAG,aAAa,CAAC,SAAS,CAAC,CAAC;YACvC,MAAM,GAAG,GAAG,MAAM,OAAO,KAAK,EAAE,CAAC;QACnC,CAAC;QAAC,OAAO,CAAC,EAAE,CAAC;YACX,cAAc,CAAC,KAAK,CAAC,gCAAgC,CAAC,EAAE,CAAC,CAAC;QAC5D,CAAC;IACH,CAAC;IAED,MAAM,cAAc,GAAG,kBAAkB;QACvC,CAAC,CAAC,QAAQ;YACR,CAAC,CAAC,+KAA+K;YACjL,CAAC,CAAC,2LAA2L;QAC/L,CAAC,CAAC,EAAE,CAAC;IAEP,IAAI,cAAc,EAAE,CAAC;QACnB,MAAM,GAAG,GAAG,MAAM,OAAO,cAAc,EAAE,CAAC;IAC5C,CAAC;IAED,IAAI,cAAc,EAAE,CAAC;QACnB,IAAI,CAAC;YACH,MAAM,QAAQ,GAAG,yBAAyB,CAAC,EAAE,gBAAgB,EAAE,CAAC,CAAC;YACjE,MAAM,GAAG,GAAG,MAAM,OAAO,QAAQ,EAAE,CAAC;QACtC,CAAC;QAAC,OAAO,CAAC,EAAE,CAAC;YACX,cAAc,CAAC,KAAK,CAAC,6CAA6C,CAAC,EAAE,CAAC,CAAC;QACzE,CAAC;IACH,CAAC;SAAM,CAAC;QACN,IAAI,CAAC,MAAM,EAAE,CAAC;YACZ,MAAM,cAAc,GAAG,QAAQ;gBAC7B,CAAC,CAAC,oGAAoG;gBACtG,CAAC,CAAC,uIAAuI,CAAC;YAC5I,MAAM,GAAG,GAAG,MAAM,OAAO,cAAc,EAAE,CAAC;QAC5C,CAAC;IACH,CAAC;IAED,MAAM,OAAO,GAAG,UAAU,CAAC,eAAe,EAAE,gBAAgB,EAAE,QAAQ,CAAC,CAAC;IACxE,MAAM,GAAG,GAAG,gBAAgB,EAAE,MAAM,EAAE,IAAI,OAAO,CAAC,GAAG,EAAE,CAAC;IAExD,MAAM,KAAK,GAAqB;QAC9B,yBAAyB,CAAC,EAAE,eAAe,EAAE,cAAc,EAAE,gBAAgB,EAAE,CAAC;QAChF,6BAA6B,CAAC;YAC5B,eAAe;YACf,cAAc;SACf,CAAC;QACF,4BAA4B,CAAC;YAC3B,eAAe;YACf,cAAc;SACf,CAAC;KACH,CAAC;IAEF,IAAI,kBAAkB,EAAE,CAAC;QACvB,KAAK,CAAC,IAAI,CACR,mCAAmC,CAAC,EAAE,gBAAgB,EAAE,CAAC,EACzD,qCAAqC,CAAC,EAAE,gBAAgB,EAAE,CAAC,CAC5D,CAAC;IACJ,CAAC;IAED,IAAI,QAAQ,EAAE,CAAC;QACb,6DAA6D;QAC7D,IAAI,CAAC,cAAc,EAAE,CAAC;YACpB,KAAK,CAAC,IAAI,CACR,wBAAwB,CAAC,EAAE,gBAAgB,EAAE,CAAC,EAC9C,6BAA6B,CAAC;gBAC5B,gBAAgB;gBAChB,qBAAqB,EAAE,IAAI;aAC5B,CAAC,CACH,CAAC;QACJ,CAAC;QACD,KAAK,CAAC,IAAI,CACR,4BAA4B,CAAC;YAC3B,gBAAgB;YAChB,qBAAqB,EAAE,IAAI;SAC5B,CAAC,CACH,CAAC;IACJ,CAAC;SAAM,CAAC;QACN,sCAAsC;QACtC,IAAI,MAAM,EAAE,CAAC;YACX,KAAK,CAAC,IAAI,CAAC,8BAA8B,CAAC,EAAE,eAAe,EAAE,cAAc,EAAE,gBAAgB,EAAE,CAAC,CAAC,CAAC;QACpG,CAAC;aAAM,CAAC;YACN,IAAI,CAAC,cAAc,EAAE,CAAC;gBACpB,KAAK,CAAC,IAAI,CAAC,wBAAwB,CAAC,EAAE,gBAAgB,EAAE,CAAC,EAAE,6BAA6B,CAAC,EAAE,gBAAgB,EAAE,CAAC,CAAC,CAAC;YAClH,CAAC;YACD,KAAK,CAAC,IAAI,CACR,4BAA4B,CAAC,EAAE,gBAAgB,EAAE,CAAC,EAClD,8BAA8B,CAAC;gBAC7B,eAAe;gBACf,cAAc;gBACd,gBAAgB;aACjB,CAAC,EACF,iCAAiC,CAAC;gBAChC,eAAe;gBACf,cAAc;gBACd,gBAAgB;aACjB,CAAC,CACH,CAAC;QACJ,CAAC;QAED,mDAAmD;QACnD,MAAM,WAAW,GAAG,eAAe,CAAC,GAAG,CAAS,mBAAmB,CAAC,CAAC;QACrE,IAAI,WAAW,IAAI,SAAS,EAAE,CAAC;YAC7B,KAAK,CAAC,IAAI,CAAC,6BAA6B,CAAC,SAAS,CAAC,CAAC,CAAC;QACvD,CAAC;IACH,CAAC;IAED,wCAAwC;IACxC,qFAAqF;IACrF,MAAM,kBAAkB,GAAG,QAAQ,IAAI,gBAAgB,EAAE,QAAQ,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,qBAAqB,CAAC,GAAG,CAAC,CAAC;IAEtG,OAAO;QACL,IAAI,EAAE,oBAAoB;QAC1B,YAAY,EAAE,GAAG,MAAM,oBAAoB,OAAO,GAAG,kBAAkB,EAAE;QACzE,KAAK;QACL,KAAK,EAAE,aAAa;KACrB,CAAC;AACJ,CAAC,CAAC"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=agent.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"agent.test.d.ts","sourceRoot":"","sources":["../source/agent.test.ts"],"names":[],"mappings":""}
@@ -0,0 +1,198 @@
1
+ import test from 'ava';
2
+ import { getAgentDefinition } from './agent.js';
3
+ import { createMockSettingsService } from './services/settings-service.mock.js';
4
+ const mockLogger = {
5
+ debug: () => { },
6
+ info: () => { },
7
+ warn: () => { },
8
+ error: () => { },
9
+ setCorrelationId: () => { },
10
+ clearCorrelationId: () => { },
11
+ getCorrelationId: () => undefined,
12
+ };
13
+ test('getAgentDefinition includes grep and find_files when searchViaShell is false', (t) => {
14
+ const settingsService = createMockSettingsService({
15
+ 'app.searchViaShell': false,
16
+ 'agent.model': 'gpt-4o',
17
+ });
18
+ const definition = getAgentDefinition({
19
+ settingsService,
20
+ loggingService: mockLogger,
21
+ });
22
+ const toolNames = definition.tools.map((tool) => tool.name);
23
+ t.true(toolNames.includes('grep'));
24
+ t.true(toolNames.includes('find_files'));
25
+ t.true(toolNames.includes('read_code_outline'));
26
+ t.true(toolNames.includes('code_context_search'));
27
+ });
28
+ test('getAgentDefinition excludes grep and find_files when searchViaShell is true', (t) => {
29
+ const settingsService = createMockSettingsService({
30
+ 'app.searchViaShell': true,
31
+ 'agent.model': 'gpt-4o',
32
+ });
33
+ const definition = getAgentDefinition({
34
+ settingsService,
35
+ loggingService: mockLogger,
36
+ });
37
+ const toolNames = definition.tools.map((tool) => tool.name);
38
+ t.false(toolNames.includes('grep'));
39
+ t.false(toolNames.includes('find_files'));
40
+ t.true(toolNames.includes('read_code_outline'));
41
+ t.true(toolNames.includes('code_context_search'));
42
+ });
43
+ test('getAgentDefinition preserves read_file and editing tools when searchViaShell is true', (t) => {
44
+ const settingsService = createMockSettingsService({
45
+ 'app.searchViaShell': true,
46
+ 'agent.model': 'gpt-4o',
47
+ });
48
+ const definition = getAgentDefinition({
49
+ settingsService,
50
+ loggingService: mockLogger,
51
+ });
52
+ const toolNames = definition.tools.map((tool) => tool.name);
53
+ t.true(toolNames.includes('read_file'));
54
+ t.true(toolNames.includes('read_code_outline'));
55
+ t.true(toolNames.includes('code_context_search'));
56
+ t.true(toolNames.includes('search_replace'));
57
+ t.true(toolNames.includes('create_file'));
58
+ t.true(toolNames.includes('shell'));
59
+ });
60
+ test('getAgentDefinition excludes grep and find_files in lite mode when searchViaShell is true', (t) => {
61
+ const settingsService = createMockSettingsService({
62
+ 'app.searchViaShell': true,
63
+ 'app.liteMode': true,
64
+ 'agent.model': 'gpt-4o',
65
+ });
66
+ const definition = getAgentDefinition({
67
+ settingsService,
68
+ loggingService: mockLogger,
69
+ });
70
+ const toolNames = definition.tools.map((tool) => tool.name);
71
+ t.false(toolNames.includes('grep'));
72
+ t.false(toolNames.includes('find_files'));
73
+ t.true(toolNames.includes('read_code_outline'));
74
+ t.true(toolNames.includes('code_context_search'));
75
+ t.true(toolNames.includes('read_file'));
76
+ t.false(toolNames.includes('search_replace'));
77
+ });
78
+ test('getAgentDefinition for gpt-5 omits grep and find_files regardless of searchViaShell', (t) => {
79
+ const settingsService = createMockSettingsService({
80
+ 'app.searchViaShell': false,
81
+ 'agent.model': 'gpt-5',
82
+ });
83
+ const definition = getAgentDefinition({
84
+ settingsService,
85
+ loggingService: mockLogger,
86
+ });
87
+ const toolNames = definition.tools.map((tool) => tool.name);
88
+ t.false(toolNames.includes('grep'));
89
+ t.false(toolNames.includes('find_files'));
90
+ t.true(toolNames.includes('read_code_outline'));
91
+ t.true(toolNames.includes('code_context_search'));
92
+ t.true(toolNames.includes('apply_patch'));
93
+ });
94
+ test('getAgentDefinition appends search-via-shell addendum when enabled', (t) => {
95
+ const settingsService = createMockSettingsService({
96
+ 'app.searchViaShell': true,
97
+ 'agent.model': 'gpt-4o',
98
+ });
99
+ const definition = getAgentDefinition({
100
+ settingsService,
101
+ loggingService: mockLogger,
102
+ });
103
+ t.true(definition.instructions.includes('### Searching via the shell'));
104
+ });
105
+ test('getAgentDefinition omits dedicated search tool references from prompt when searchViaShell is true', (t) => {
106
+ const settingsService = createMockSettingsService({
107
+ 'app.searchViaShell': true,
108
+ 'agent.model': 'gpt-4o',
109
+ });
110
+ const definition = getAgentDefinition({
111
+ settingsService,
112
+ loggingService: mockLogger,
113
+ });
114
+ t.false(definition.instructions.includes('Prefer `find_files`'));
115
+ t.false(definition.instructions.includes('Prefer `grep`'));
116
+ });
117
+ test('getAgentDefinition dynamically includes dedicated search tool references when searchViaShell is false', (t) => {
118
+ const settingsService = createMockSettingsService({
119
+ 'app.searchViaShell': false,
120
+ 'agent.model': 'gpt-4o',
121
+ });
122
+ const definition = getAgentDefinition({
123
+ settingsService,
124
+ loggingService: mockLogger,
125
+ });
126
+ t.true(definition.instructions.includes('Prefer `find_files`'));
127
+ t.true(definition.instructions.includes('Prefer `grep`'));
128
+ t.true(definition.instructions.includes('read_code_outline'));
129
+ t.true(definition.instructions.includes('code_context_search'));
130
+ t.true(definition.instructions.includes('Use `read_file` before editing'));
131
+ });
132
+ test('getAgentDefinition dynamically includes code-context tool references when available', (t) => {
133
+ const settingsService = createMockSettingsService({
134
+ 'app.searchViaShell': true,
135
+ 'agent.model': 'gpt-4o',
136
+ });
137
+ const definition = getAgentDefinition({
138
+ settingsService,
139
+ loggingService: mockLogger,
140
+ });
141
+ t.true(definition.instructions.includes('read_code_outline'));
142
+ t.true(definition.instructions.includes('code_context_search'));
143
+ t.true(definition.instructions.includes('Use `read_file` before editing'));
144
+ });
145
+ test('getAgentDefinition dynamically includes code-context tool references for gpt-5 models', (t) => {
146
+ const settingsService = createMockSettingsService({
147
+ 'app.searchViaShell': false,
148
+ 'agent.model': 'gpt-5',
149
+ });
150
+ const definition = getAgentDefinition({
151
+ settingsService,
152
+ loggingService: mockLogger,
153
+ });
154
+ t.true(definition.instructions.includes('read_code_outline'));
155
+ t.true(definition.instructions.includes('code_context_search'));
156
+ });
157
+ test('getAgentDefinition uses fallback search prompt for remote execution', (t) => {
158
+ const settingsService = createMockSettingsService({
159
+ 'app.searchViaShell': true,
160
+ 'agent.model': 'gpt-4o',
161
+ });
162
+ const mockExecutionContext = {
163
+ isRemote: () => true,
164
+ getCwd: () => '/remote',
165
+ getSSHService: () => ({}),
166
+ };
167
+ const definition = getAgentDefinition({
168
+ settingsService,
169
+ loggingService: mockLogger,
170
+ executionContext: mockExecutionContext,
171
+ });
172
+ // Remote should always fallback to grep/find instructions
173
+ t.true(definition.instructions.includes('use `grep`'));
174
+ t.true(definition.instructions.includes('use `find`'));
175
+ t.false(definition.instructions.includes('use `rg` (ripgrep)'));
176
+ t.false(definition.instructions.includes('use `fd`'));
177
+ });
178
+ test('getAgentDefinition excludes code-context tools in remote (SSH) execution', (t) => {
179
+ const settingsService = createMockSettingsService({
180
+ 'app.searchViaShell': false,
181
+ 'agent.model': 'gpt-4o',
182
+ });
183
+ const mockExecutionContext = {
184
+ isRemote: () => true,
185
+ getCwd: () => '/remote',
186
+ getSSHService: () => ({}),
187
+ };
188
+ const definition = getAgentDefinition({
189
+ settingsService,
190
+ loggingService: mockLogger,
191
+ executionContext: mockExecutionContext,
192
+ });
193
+ const toolNames = definition.tools.map((tool) => tool.name);
194
+ t.false(toolNames.includes('read_code_outline'));
195
+ t.false(toolNames.includes('code_context_search'));
196
+ t.false(definition.instructions.includes('read_code_outline'));
197
+ });
198
+ //# sourceMappingURL=agent.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"agent.test.js","sourceRoot":"","sources":["../source/agent.test.ts"],"names":[],"mappings":"AAAA,OAAO,IAAI,MAAM,KAAK,CAAC;AACvB,OAAO,EAAE,kBAAkB,EAAE,MAAM,YAAY,CAAC;AAChD,OAAO,EAAE,yBAAyB,EAAE,MAAM,qCAAqC,CAAC;AAEhF,MAAM,UAAU,GAAG;IACjB,KAAK,EAAE,GAAG,EAAE,GAAE,CAAC;IACf,IAAI,EAAE,GAAG,EAAE,GAAE,CAAC;IACd,IAAI,EAAE,GAAG,EAAE,GAAE,CAAC;IACd,KAAK,EAAE,GAAG,EAAE,GAAE,CAAC;IACf,gBAAgB,EAAE,GAAG,EAAE,GAAE,CAAC;IAC1B,kBAAkB,EAAE,GAAG,EAAE,GAAE,CAAC;IAC5B,gBAAgB,EAAE,GAAG,EAAE,CAAC,SAAS;CAC3B,CAAC;AAET,IAAI,CAAC,8EAA8E,EAAE,CAAC,CAAC,EAAE,EAAE;IACzF,MAAM,eAAe,GAAG,yBAAyB,CAAC;QAChD,oBAAoB,EAAE,KAAK;QAC3B,aAAa,EAAE,QAAQ;KACxB,CAAC,CAAC;IAEH,MAAM,UAAU,GAAG,kBAAkB,CAAC;QACpC,eAAe;QACf,cAAc,EAAE,UAAU;KAC3B,CAAC,CAAC;IAEH,MAAM,SAAS,GAAG,UAAU,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAC5D,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC;IACnC,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,YAAY,CAAC,CAAC,CAAC;IACzC,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,mBAAmB,CAAC,CAAC,CAAC;IAChD,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,qBAAqB,CAAC,CAAC,CAAC;AACpD,CAAC,CAAC,CAAC;AAEH,IAAI,CAAC,6EAA6E,EAAE,CAAC,CAAC,EAAE,EAAE;IACxF,MAAM,eAAe,GAAG,yBAAyB,CAAC;QAChD,oBAAoB,EAAE,IAAI;QAC1B,aAAa,EAAE,QAAQ;KACxB,CAAC,CAAC;IAEH,MAAM,UAAU,GAAG,kBAAkB,CAAC;QACpC,eAAe;QACf,cAAc,EAAE,UAAU;KAC3B,CAAC,CAAC;IAEH,MAAM,SAAS,GAAG,UAAU,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAC5D,CAAC,CAAC,KAAK,CAAC,SAAS,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC;IACpC,CAAC,CAAC,KAAK,CAAC,SAAS,CAAC,QAAQ,CAAC,YAAY,CAAC,CAAC,CAAC;IAC1C,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,mBAAmB,CAAC,CAAC,CAAC;IAChD,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,qBAAqB,CAAC,CAAC,CAAC;AACpD,CAAC,CAAC,CAAC;AAEH,IAAI,CAAC,sFAAsF,EAAE,CAAC,CAAC,EAAE,EAAE;IACjG,MAAM,eAAe,GAAG,yBAAyB,CAAC;QAChD,oBAAoB,EAAE,IAAI;QAC1B,aAAa,EAAE,QAAQ;KACxB,CAAC,CAAC;IAEH,MAAM,UAAU,GAAG,kBAAkB,CAAC;QACpC,eAAe;QACf,cAAc,EAAE,UAAU;KAC3B,CAAC,CAAC;IAEH,MAAM,SAAS,GAAG,UAAU,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAC5D,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,WAAW,CAAC,CAAC,CAAC;IACxC,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,mBAAmB,CAAC,CAAC,CAAC;IAChD,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,qBAAqB,CAAC,CAAC,CAAC;IAClD,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,gBAAgB,CAAC,CAAC,CAAC;IAC7C,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,aAAa,CAAC,CAAC,CAAC;IAC1C,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,CAAC;AACtC,CAAC,CAAC,CAAC;AAEH,IAAI,CAAC,0FAA0F,EAAE,CAAC,CAAC,EAAE,EAAE;IACrG,MAAM,eAAe,GAAG,yBAAyB,CAAC;QAChD,oBAAoB,EAAE,IAAI;QAC1B,cAAc,EAAE,IAAI;QACpB,aAAa,EAAE,QAAQ;KACxB,CAAC,CAAC;IAEH,MAAM,UAAU,GAAG,kBAAkB,CAAC;QACpC,eAAe;QACf,cAAc,EAAE,UAAU;KAC3B,CAAC,CAAC;IAEH,MAAM,SAAS,GAAG,UAAU,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAC5D,CAAC,CAAC,KAAK,CAAC,SAAS,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC;IACpC,CAAC,CAAC,KAAK,CAAC,SAAS,CAAC,QAAQ,CAAC,YAAY,CAAC,CAAC,CAAC;IAC1C,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,mBAAmB,CAAC,CAAC,CAAC;IAChD,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,qBAAqB,CAAC,CAAC,CAAC;IAClD,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,WAAW,CAAC,CAAC,CAAC;IACxC,CAAC,CAAC,KAAK,CAAC,SAAS,CAAC,QAAQ,CAAC,gBAAgB,CAAC,CAAC,CAAC;AAChD,CAAC,CAAC,CAAC;AAEH,IAAI,CAAC,qFAAqF,EAAE,CAAC,CAAC,EAAE,EAAE;IAChG,MAAM,eAAe,GAAG,yBAAyB,CAAC;QAChD,oBAAoB,EAAE,KAAK;QAC3B,aAAa,EAAE,OAAO;KACvB,CAAC,CAAC;IAEH,MAAM,UAAU,GAAG,kBAAkB,CAAC;QACpC,eAAe;QACf,cAAc,EAAE,UAAU;KAC3B,CAAC,CAAC;IAEH,MAAM,SAAS,GAAG,UAAU,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAC5D,CAAC,CAAC,KAAK,CAAC,SAAS,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC;IACpC,CAAC,CAAC,KAAK,CAAC,SAAS,CAAC,QAAQ,CAAC,YAAY,CAAC,CAAC,CAAC;IAC1C,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,mBAAmB,CAAC,CAAC,CAAC;IAChD,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,qBAAqB,CAAC,CAAC,CAAC;IAClD,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,aAAa,CAAC,CAAC,CAAC;AAC5C,CAAC,CAAC,CAAC;AAEH,IAAI,CAAC,mEAAmE,EAAE,CAAC,CAAC,EAAE,EAAE;IAC9E,MAAM,eAAe,GAAG,yBAAyB,CAAC;QAChD,oBAAoB,EAAE,IAAI;QAC1B,aAAa,EAAE,QAAQ;KACxB,CAAC,CAAC;IAEH,MAAM,UAAU,GAAG,kBAAkB,CAAC;QACpC,eAAe;QACf,cAAc,EAAE,UAAU;KAC3B,CAAC,CAAC;IAEH,CAAC,CAAC,IAAI,CAAC,UAAU,CAAC,YAAY,CAAC,QAAQ,CAAC,6BAA6B,CAAC,CAAC,CAAC;AAC1E,CAAC,CAAC,CAAC;AAEH,IAAI,CAAC,mGAAmG,EAAE,CAAC,CAAC,EAAE,EAAE;IAC9G,MAAM,eAAe,GAAG,yBAAyB,CAAC;QAChD,oBAAoB,EAAE,IAAI;QAC1B,aAAa,EAAE,QAAQ;KACxB,CAAC,CAAC;IAEH,MAAM,UAAU,GAAG,kBAAkB,CAAC;QACpC,eAAe;QACf,cAAc,EAAE,UAAU;KAC3B,CAAC,CAAC;IAEH,CAAC,CAAC,KAAK,CAAC,UAAU,CAAC,YAAY,CAAC,QAAQ,CAAC,qBAAqB,CAAC,CAAC,CAAC;IACjE,CAAC,CAAC,KAAK,CAAC,UAAU,CAAC,YAAY,CAAC,QAAQ,CAAC,eAAe,CAAC,CAAC,CAAC;AAC7D,CAAC,CAAC,CAAC;AAEH,IAAI,CAAC,uGAAuG,EAAE,CAAC,CAAC,EAAE,EAAE;IAClH,MAAM,eAAe,GAAG,yBAAyB,CAAC;QAChD,oBAAoB,EAAE,KAAK;QAC3B,aAAa,EAAE,QAAQ;KACxB,CAAC,CAAC;IAEH,MAAM,UAAU,GAAG,kBAAkB,CAAC;QACpC,eAAe;QACf,cAAc,EAAE,UAAU;KAC3B,CAAC,CAAC;IAEH,CAAC,CAAC,IAAI,CAAC,UAAU,CAAC,YAAY,CAAC,QAAQ,CAAC,qBAAqB,CAAC,CAAC,CAAC;IAChE,CAAC,CAAC,IAAI,CAAC,UAAU,CAAC,YAAY,CAAC,QAAQ,CAAC,eAAe,CAAC,CAAC,CAAC;IAC1D,CAAC,CAAC,IAAI,CAAC,UAAU,CAAC,YAAY,CAAC,QAAQ,CAAC,mBAAmB,CAAC,CAAC,CAAC;IAC9D,CAAC,CAAC,IAAI,CAAC,UAAU,CAAC,YAAY,CAAC,QAAQ,CAAC,qBAAqB,CAAC,CAAC,CAAC;IAChE,CAAC,CAAC,IAAI,CAAC,UAAU,CAAC,YAAY,CAAC,QAAQ,CAAC,gCAAgC,CAAC,CAAC,CAAC;AAC7E,CAAC,CAAC,CAAC;AAEH,IAAI,CAAC,qFAAqF,EAAE,CAAC,CAAC,EAAE,EAAE;IAChG,MAAM,eAAe,GAAG,yBAAyB,CAAC;QAChD,oBAAoB,EAAE,IAAI;QAC1B,aAAa,EAAE,QAAQ;KACxB,CAAC,CAAC;IAEH,MAAM,UAAU,GAAG,kBAAkB,CAAC;QACpC,eAAe;QACf,cAAc,EAAE,UAAU;KAC3B,CAAC,CAAC;IAEH,CAAC,CAAC,IAAI,CAAC,UAAU,CAAC,YAAY,CAAC,QAAQ,CAAC,mBAAmB,CAAC,CAAC,CAAC;IAC9D,CAAC,CAAC,IAAI,CAAC,UAAU,CAAC,YAAY,CAAC,QAAQ,CAAC,qBAAqB,CAAC,CAAC,CAAC;IAChE,CAAC,CAAC,IAAI,CAAC,UAAU,CAAC,YAAY,CAAC,QAAQ,CAAC,gCAAgC,CAAC,CAAC,CAAC;AAC7E,CAAC,CAAC,CAAC;AAEH,IAAI,CAAC,uFAAuF,EAAE,CAAC,CAAC,EAAE,EAAE;IAClG,MAAM,eAAe,GAAG,yBAAyB,CAAC;QAChD,oBAAoB,EAAE,KAAK;QAC3B,aAAa,EAAE,OAAO;KACvB,CAAC,CAAC;IAEH,MAAM,UAAU,GAAG,kBAAkB,CAAC;QACpC,eAAe;QACf,cAAc,EAAE,UAAU;KAC3B,CAAC,CAAC;IAEH,CAAC,CAAC,IAAI,CAAC,UAAU,CAAC,YAAY,CAAC,QAAQ,CAAC,mBAAmB,CAAC,CAAC,CAAC;IAC9D,CAAC,CAAC,IAAI,CAAC,UAAU,CAAC,YAAY,CAAC,QAAQ,CAAC,qBAAqB,CAAC,CAAC,CAAC;AAClE,CAAC,CAAC,CAAC;AAEH,IAAI,CAAC,qEAAqE,EAAE,CAAC,CAAC,EAAE,EAAE;IAChF,MAAM,eAAe,GAAG,yBAAyB,CAAC;QAChD,oBAAoB,EAAE,IAAI;QAC1B,aAAa,EAAE,QAAQ;KACxB,CAAC,CAAC;IAEH,MAAM,oBAAoB,GAAG;QAC3B,QAAQ,EAAE,GAAG,EAAE,CAAC,IAAI;QACpB,MAAM,EAAE,GAAG,EAAE,CAAC,SAAS;QACvB,aAAa,EAAE,GAAG,EAAE,CAAC,CAAC,EAAE,CAAC;KACnB,CAAC;IAET,MAAM,UAAU,GAAG,kBAAkB,CAAC;QACpC,eAAe;QACf,cAAc,EAAE,UAAU;QAC1B,gBAAgB,EAAE,oBAAoB;KACvC,CAAC,CAAC;IAEH,0DAA0D;IAC1D,CAAC,CAAC,IAAI,CAAC,UAAU,CAAC,YAAY,CAAC,QAAQ,CAAC,YAAY,CAAC,CAAC,CAAC;IACvD,CAAC,CAAC,IAAI,CAAC,UAAU,CAAC,YAAY,CAAC,QAAQ,CAAC,YAAY,CAAC,CAAC,CAAC;IACvD,CAAC,CAAC,KAAK,CAAC,UAAU,CAAC,YAAY,CAAC,QAAQ,CAAC,oBAAoB,CAAC,CAAC,CAAC;IAChE,CAAC,CAAC,KAAK,CAAC,UAAU,CAAC,YAAY,CAAC,QAAQ,CAAC,UAAU,CAAC,CAAC,CAAC;AACxD,CAAC,CAAC,CAAC;AAEH,IAAI,CAAC,0EAA0E,EAAE,CAAC,CAAC,EAAE,EAAE;IACrF,MAAM,eAAe,GAAG,yBAAyB,CAAC;QAChD,oBAAoB,EAAE,KAAK;QAC3B,aAAa,EAAE,QAAQ;KACxB,CAAC,CAAC;IAEH,MAAM,oBAAoB,GAAG;QAC3B,QAAQ,EAAE,GAAG,EAAE,CAAC,IAAI;QACpB,MAAM,EAAE,GAAG,EAAE,CAAC,SAAS;QACvB,aAAa,EAAE,GAAG,EAAE,CAAC,CAAC,EAAE,CAAC;KACnB,CAAC;IAET,MAAM,UAAU,GAAG,kBAAkB,CAAC;QACpC,eAAe;QACf,cAAc,EAAE,UAAU;QAC1B,gBAAgB,EAAE,oBAAoB;KACvC,CAAC,CAAC;IAEH,MAAM,SAAS,GAAG,UAAU,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAC5D,CAAC,CAAC,KAAK,CAAC,SAAS,CAAC,QAAQ,CAAC,mBAAmB,CAAC,CAAC,CAAC;IACjD,CAAC,CAAC,KAAK,CAAC,SAAS,CAAC,QAAQ,CAAC,qBAAqB,CAAC,CAAC,CAAC;IACnD,CAAC,CAAC,KAAK,CAAC,UAAU,CAAC,YAAY,CAAC,QAAQ,CAAC,mBAAmB,CAAC,CAAC,CAAC;AACjE,CAAC,CAAC,CAAC"}
package/dist/app.d.ts CHANGED
@@ -5,6 +5,7 @@ import type { HistoryService } from './services/history-service.js';
5
5
  import type { LoggingService } from './services/logging-service.js';
6
6
  import { ISSHService } from './services/service-interfaces.js';
7
7
  import { SSHInfo } from './hooks/use-shell-mode.js';
8
+ import { type UsageAccumulator } from './utils/token-usage.js';
8
9
  interface AppProps {
9
10
  conversationService: ConversationService;
10
11
  settingsService: SettingsService;
@@ -12,7 +13,11 @@ interface AppProps {
12
13
  loggingService: LoggingService;
13
14
  sshInfo?: SSHInfo;
14
15
  sshService?: ISSHService;
16
+ usageAccumulator?: UsageAccumulator;
17
+ onPrintUsage?: () => void;
18
+ onExitUsage?: () => void;
15
19
  }
20
+ export declare const appendStartupBannerId: (ids: string[]) => string[];
16
21
  declare const App: FC<AppProps>;
17
22
  export default App;
18
23
  //# sourceMappingURL=app.d.ts.map
package/dist/app.d.ts.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"app.d.ts","sourceRoot":"","sources":["../source/app.tsx"],"names":[],"mappings":"AAAA,OAAc,EAAE,EAAE,EAA0B,MAAM,OAAO,CAAC;AAU1D,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,oCAAoC,CAAC;AAC9E,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,gCAAgC,CAAC;AACtE,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,+BAA+B,CAAC;AACpE,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,+BAA+B,CAAC;AACpE,OAAO,EAAE,WAAW,EAAE,MAAM,kCAAkC,CAAC;AAI/D,OAAO,EAAgB,OAAO,EAAE,MAAM,2BAA2B,CAAC;AAIlE,UAAU,QAAQ;IAChB,mBAAmB,EAAE,mBAAmB,CAAC;IACzC,eAAe,EAAE,eAAe,CAAC;IACjC,cAAc,EAAE,cAAc,CAAC;IAC/B,cAAc,EAAE,cAAc,CAAC;IAC/B,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,UAAU,CAAC,EAAE,WAAW,CAAC;CAC1B;AAED,QAAA,MAAM,GAAG,EAAE,EAAE,CAAC,QAAQ,CAyMrB,CAAC;AAEF,eAAe,GAAG,CAAC"}
1
+ {"version":3,"file":"app.d.ts","sourceRoot":"","sources":["../source/app.tsx"],"names":[],"mappings":"AAAA,OAAc,EAAE,EAAE,EAA6C,MAAM,OAAO,CAAC;AAQ7E,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,oCAAoC,CAAC;AAC9E,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,gCAAgC,CAAC;AACtE,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,+BAA+B,CAAC;AACpE,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,+BAA+B,CAAC;AACpE,OAAO,EAAE,WAAW,EAAE,MAAM,kCAAkC,CAAC;AAI/D,OAAO,EAAgB,OAAO,EAAE,MAAM,2BAA2B,CAAC;AAGlE,OAAO,EAAmD,KAAK,gBAAgB,EAAE,MAAM,wBAAwB,CAAC;AAEhH,UAAU,QAAQ;IAChB,mBAAmB,EAAE,mBAAmB,CAAC;IACzC,eAAe,EAAE,eAAe,CAAC;IACjC,cAAc,EAAE,cAAc,CAAC;IAC/B,cAAc,EAAE,cAAc,CAAC;IAC/B,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,UAAU,CAAC,EAAE,WAAW,CAAC;IACzB,gBAAgB,CAAC,EAAE,gBAAgB,CAAC;IACpC,YAAY,CAAC,EAAE,MAAM,IAAI,CAAC;IAC1B,WAAW,CAAC,EAAE,MAAM,IAAI,CAAC;CAC1B;AAED,eAAO,MAAM,qBAAqB,GAAI,KAAK,MAAM,EAAE,KAAG,MAAM,EAA8C,CAAC;AAE3G,QAAA,MAAM,GAAG,EAAE,EAAE,CAAC,QAAQ,CAqOrB,CAAC;AAEF,eAAe,GAAG,CAAC"}
package/dist/app.js CHANGED
@@ -1,10 +1,8 @@
1
- import React, { useCallback, useEffect } from 'react';
1
+ import React, { useCallback, useEffect, useMemo, useState } from 'react';
2
2
  import { useInputActions } from './context/InputContext.js';
3
3
  import { Box, useApp, useInput } from 'ink';
4
4
  import { useConversation } from './hooks/use-conversation.js';
5
- import Banner from './components/Banner.js';
6
- import MessageList from './components/MessageList.js';
7
- import LiveResponse from './components/LiveResponse.js';
5
+ import MessageList, { MESSAGE_HORIZONTAL_PADDING } from './components/MessageList.js';
8
6
  import BottomArea from './components/BottomArea.js';
9
7
  import { ErrorBoundary } from './components/ErrorBoundary.js';
10
8
  import { useSetting } from './hooks/use-setting.js';
@@ -13,11 +11,15 @@ import { useRuntimeSettings } from './hooks/use-runtime-settings.js';
13
11
  import { useShellMode } from './hooks/use-shell-mode.js';
14
12
  import { useAppCommands } from './hooks/use-app-commands.js';
15
13
  import { hasUserTurnContent } from './types/user-turn.js';
16
- const App = ({ conversationService, settingsService, historyService, loggingService, sshInfo, sshService, }) => {
14
+ import { createUsageAccumulator, formatSessionTokenUsage } from './utils/token-usage.js';
15
+ export const appendStartupBannerId = (ids) => [...ids, `startup-banner-${ids.length}`];
16
+ const App = ({ conversationService, settingsService, historyService, loggingService, sshInfo, sshService, usageAccumulator, onPrintUsage, onExitUsage, }) => {
17
17
  const { exit } = useApp();
18
18
  const { setInput } = useInputActions();
19
+ const [startupBannerIds, setStartupBannerIds] = useState(['startup-banner-0']);
19
20
  const liteMode = useSetting(settingsService, 'app.liteMode') ?? false;
20
- const { messages, liveResponse, lastUsage, pendingApproval, waitingForApproval, waitingForRejectionReason, setWaitingForRejectionReason, isProcessing, sendUserMessage, handleApprovalDecision, clearConversation, stopProcessing, setModel, setReasoningEffort, addSystemMessage, setTemperature, addShellMessage, } = useConversation({ conversationService, loggingService });
21
+ const sessionUsage = useMemo(() => usageAccumulator ?? createUsageAccumulator(), [usageAccumulator]);
22
+ const { messages, lastUsage, pendingApproval, waitingForApproval, waitingForRejectionReason, setWaitingForRejectionReason, isProcessing, sendUserMessage, handleApprovalDecision, clearConversation, stopProcessing, setModel, setReasoningEffort, addSystemMessage, setTemperature, addShellMessage, } = useConversation({ conversationService, loggingService, usageAccumulator: sessionUsage });
21
23
  useEffect(() => {
22
24
  conversationService.setRetryCallback(() => addSystemMessage('Retrying due to upstream error...'));
23
25
  }, [conversationService, addSystemMessage]);
@@ -37,20 +39,35 @@ const App = ({ conversationService, settingsService, historyService, loggingServ
37
39
  sshInfo,
38
40
  sshService,
39
41
  });
42
+ const refreshStartupBanner = useCallback(() => {
43
+ setStartupBannerIds(appendStartupBannerId);
44
+ }, []);
45
+ const clearConversationAndRefreshBanner = useCallback(() => {
46
+ onPrintUsage?.();
47
+ clearConversation();
48
+ refreshStartupBanner();
49
+ }, [clearConversation, onPrintUsage, refreshStartupBanner]);
50
+ const getSessionUsage = useCallback(() => formatSessionTokenUsage(sessionUsage.get()), [sessionUsage]);
51
+ const exitWithUsage = useCallback(() => {
52
+ onExitUsage?.();
53
+ exit();
54
+ }, [exit, onExitUsage]);
40
55
  const { slashCommands, toggleEditMode } = useAppCommands({
41
56
  settingsService,
42
57
  addSystemMessage,
43
58
  applyRuntimeSetting,
44
59
  setInput,
45
- clearConversation,
46
- exit,
60
+ clearConversation: clearConversationAndRefreshBanner,
61
+ getSessionUsage,
62
+ exit: exitWithUsage,
47
63
  messages,
48
64
  setModel,
49
65
  });
66
+ const hasConversationHistory = useMemo(() => messages.some((msg) => msg.sender !== 'system'), [messages]);
50
67
  // Handle Ctrl+C to exit immediately
51
68
  useInput((_input, key) => {
52
69
  if (key.ctrl && _input === 'c') {
53
- exit();
70
+ exitWithUsage();
54
71
  }
55
72
  });
56
73
  // Handle Esc to stop processing or cancel rejection reason
@@ -138,12 +155,11 @@ const App = ({ conversationService, settingsService, historyService, loggingServ
138
155
  await sendUserMessage(turn);
139
156
  };
140
157
  return (React.createElement(ErrorBoundary, { loggingService: loggingService },
141
- React.createElement(Box, { flexDirection: "column", flexGrow: 1, paddingX: 2 },
142
- React.createElement(Banner, { settingsService: settingsService, isShellMode: isShellMode }),
158
+ React.createElement(Box, { flexDirection: "column", flexGrow: 1 },
143
159
  React.createElement(Box, { flexDirection: "column", flexGrow: 1 },
144
- React.createElement(MessageList, { messages: messages }),
145
- liveResponse && liveResponse.text && React.createElement(LiveResponse, { text: liveResponse.text })),
146
- React.createElement(BottomArea, { pendingApproval: pendingApproval, waitingForApproval: waitingForApproval, waitingForRejectionReason: waitingForRejectionReason, isProcessing: isProcessing, isShellMode: isShellMode, lastUsage: lastUsage, onSubmit: handleSubmit, slashCommands: slashCommands, hasConversationHistory: messages.filter((msg) => msg.sender !== 'system').length > 0, settingsService: settingsService, loggingService: loggingService, historyService: historyService, onApprove: handleApprove, onReject: handleReject, sshInfo: sshInfo }))));
160
+ React.createElement(MessageList, { messages: messages, bannerItems: startupBannerIds, settingsService: settingsService, isShellMode: isShellMode })),
161
+ React.createElement(Box, { paddingX: MESSAGE_HORIZONTAL_PADDING },
162
+ React.createElement(BottomArea, { pendingApproval: pendingApproval, waitingForApproval: waitingForApproval, waitingForRejectionReason: waitingForRejectionReason, isProcessing: isProcessing, isShellMode: isShellMode, lastUsage: lastUsage, onSubmit: handleSubmit, slashCommands: slashCommands, hasConversationHistory: hasConversationHistory, settingsService: settingsService, loggingService: loggingService, historyService: historyService, onApprove: handleApprove, onReject: handleReject, sshInfo: sshInfo })))));
147
163
  };
148
164
  export default App;
149
165
  //# sourceMappingURL=app.js.map
package/dist/app.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"app.js","sourceRoot":"","sources":["../source/app.tsx"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"app.js","sourceRoot":"","sources":["../source/app.tsx"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=app.startup-banner.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"app.startup-banner.test.d.ts","sourceRoot":"","sources":["../source/app.startup-banner.test.ts"],"names":[],"mappings":""}
@@ -0,0 +1,11 @@
1
+ import test from 'ava';
2
+ import { appendStartupBannerId } from './app.js';
3
+ test('appendStartupBannerId appends a new stable id for each clear', (t) => {
4
+ t.deepEqual(appendStartupBannerId(['startup-banner-0']), ['startup-banner-0', 'startup-banner-1']);
5
+ t.deepEqual(appendStartupBannerId(['startup-banner-0', 'startup-banner-1']), [
6
+ 'startup-banner-0',
7
+ 'startup-banner-1',
8
+ 'startup-banner-2',
9
+ ]);
10
+ });
11
+ //# sourceMappingURL=app.startup-banner.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"app.startup-banner.test.js","sourceRoot":"","sources":["../source/app.startup-banner.test.ts"],"names":[],"mappings":"AAAA,OAAO,IAAI,MAAM,KAAK,CAAC;AACvB,OAAO,EAAE,qBAAqB,EAAE,MAAM,UAAU,CAAC;AAEjD,IAAI,CAAC,8DAA8D,EAAE,CAAC,CAAC,EAAE,EAAE;IACzE,CAAC,CAAC,SAAS,CAAC,qBAAqB,CAAC,CAAC,kBAAkB,CAAC,CAAC,EAAE,CAAC,kBAAkB,EAAE,kBAAkB,CAAC,CAAC,CAAC;IACnG,CAAC,CAAC,SAAS,CAAC,qBAAqB,CAAC,CAAC,kBAAkB,EAAE,kBAAkB,CAAC,CAAC,EAAE;QAC3E,kBAAkB;QAClB,kBAAkB;QAClB,kBAAkB;KACnB,CAAC,CAAC;AACL,CAAC,CAAC,CAAC"}
package/dist/cli.d.ts CHANGED
@@ -1,3 +1,3 @@
1
1
  #!/usr/bin/env node
2
- export {};
2
+ import './env-setup.js';
3
3
  //# sourceMappingURL=cli.d.ts.map
package/dist/cli.d.ts.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"cli.d.ts","sourceRoot":"","sources":["../source/cli.tsx"],"names":[],"mappings":""}
1
+ {"version":3,"file":"cli.d.ts","sourceRoot":"","sources":["../source/cli.tsx"],"names":[],"mappings":";AACA,OAAO,gBAAgB,CAAC"}
package/dist/cli.js CHANGED
@@ -1,4 +1,5 @@
1
1
  #!/usr/bin/env node
2
+ import './env-setup.js';
2
3
  import React from 'react';
3
4
  import { render } from 'ink';
4
5
  import meow from 'meow';
@@ -12,11 +13,24 @@ import { HistoryService } from './services/history-service.js';
12
13
  import { SSHService } from './services/ssh-service.js';
13
14
  import { ExecutionContext } from './services/execution-context.js';
14
15
  import { resolveSSHHost } from './utils/ssh-config-parser.js';
16
+ import { createUsageAccumulator, formatSessionTokenUsage } from './utils/token-usage.js';
15
17
  import os from 'os';
16
18
  import fs from 'fs';
17
19
  import path from 'path';
18
- // Global Ctrl+C handler for immediate exit
20
+ const sessionUsageAccumulator = createUsageAccumulator();
21
+ let usagePrinted = false;
22
+ const printUsage = () => {
23
+ process.stdout.write(`\n${formatSessionTokenUsage(sessionUsageAccumulator.get())}\n`);
24
+ };
25
+ const printUsageOnce = () => {
26
+ if (usagePrinted)
27
+ return;
28
+ usagePrinted = true;
29
+ printUsage();
30
+ };
31
+ // Global Ctrl+C handler for immediate exit paths outside Ink's input handling.
19
32
  process.on('SIGINT', () => {
33
+ printUsageOnce();
20
34
  process.exit(0);
21
35
  });
22
36
  const cli = meow(`
@@ -81,7 +95,7 @@ const rawModelFlag = cli.flags.model;
81
95
  const rawReasoningFlag = cli.flags.reasoning;
82
96
  const modelFlag = typeof rawModelFlag === 'string' && rawModelFlag.trim().length > 0 ? rawModelFlag.trim() : undefined;
83
97
  const reasoningEffort = typeof rawReasoningFlag === 'string' && rawReasoningFlag.trim().length > 0 ? rawReasoningFlag.trim() : undefined;
84
- const validReasoningEfforts = ['default', 'none', 'minimal', 'low', 'medium', 'high', null];
98
+ const validReasoningEfforts = ['default', 'none', 'minimal', 'low', 'medium', 'high', 'xhigh', null];
85
99
  const validatedReasoningEffort = reasoningEffort && validReasoningEfforts.includes(reasoningEffort)
86
100
  ? reasoningEffort
87
101
  : undefined;
@@ -257,7 +271,8 @@ import { patchStdoutForSynchronizedOutput } from './utils/synchronized-output.js
257
271
  // buffers the entire Ink render frame and paints it atomically.
258
272
  patchStdoutForSynchronizedOutput(process.stdout);
259
273
  const { waitUntilExit } = render((React.createElement(InputProvider, null,
260
- React.createElement(App, { conversationService: conversationService, settingsService: settings, historyService: history, loggingService: logger, sshInfo: sshInfo, sshService: sshService }))), getInkRenderOptions());
274
+ React.createElement(App, { conversationService: conversationService, settingsService: settings, historyService: history, loggingService: logger, sshInfo: sshInfo, sshService: sshService, usageAccumulator: sessionUsageAccumulator, onPrintUsage: printUsage, onExitUsage: printUsageOnce }))), getInkRenderOptions());
261
275
  await waitUntilExit();
276
+ printUsageOnce();
262
277
  process.exit(0);
263
278
  //# sourceMappingURL=cli.js.map