@qduc/term2 0.1.4 → 0.1.6

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 (575) hide show
  1. package/dist/agent.d.ts.map +1 -1
  2. package/dist/agent.js +4 -24
  3. package/dist/agent.js.map +1 -1
  4. package/dist/app.d.ts.map +1 -1
  5. package/dist/app.js +12 -33
  6. package/dist/app.js.map +1 -1
  7. package/dist/app.parseInput.test.js +4 -4
  8. package/dist/app.parseInput.test.js.map +1 -1
  9. package/dist/cli.js +44 -29
  10. package/dist/cli.js.map +1 -1
  11. package/dist/components/ApprovalPrompt.d.ts.map +1 -1
  12. package/dist/components/ApprovalPrompt.js +14 -11
  13. package/dist/components/ApprovalPrompt.js.map +1 -1
  14. package/dist/components/Banner.d.ts.map +1 -1
  15. package/dist/components/Banner.js +4 -12
  16. package/dist/components/Banner.js.map +1 -1
  17. package/dist/components/BottomArea.d.ts +2 -0
  18. package/dist/components/BottomArea.d.ts.map +1 -1
  19. package/dist/components/BottomArea.js +6 -9
  20. package/dist/components/BottomArea.js.map +1 -1
  21. package/dist/components/BottomArea.test.js +4 -6
  22. package/dist/components/BottomArea.test.js.map +1 -1
  23. package/dist/components/ChatMessage.d.ts.map +1 -1
  24. package/dist/components/ChatMessage.js.map +1 -1
  25. package/dist/components/CommandMessage.d.ts.map +1 -1
  26. package/dist/components/CommandMessage.js +19 -30
  27. package/dist/components/CommandMessage.js.map +1 -1
  28. package/dist/components/CommandMessage.test.js +2 -2
  29. package/dist/components/CommandMessage.test.js.map +1 -1
  30. package/dist/components/ErrorBoundary.d.ts.map +1 -1
  31. package/dist/components/ErrorBoundary.js +3 -9
  32. package/dist/components/ErrorBoundary.js.map +1 -1
  33. package/dist/components/ErrorBoundary.test.js +2 -2
  34. package/dist/components/ErrorBoundary.test.js.map +1 -1
  35. package/dist/components/Input/PopupManager.d.ts.map +1 -1
  36. package/dist/components/Input/PopupManager.js.map +1 -1
  37. package/dist/components/InputBox.d.ts.map +1 -1
  38. package/dist/components/InputBox.js +15 -33
  39. package/dist/components/InputBox.js.map +1 -1
  40. package/dist/components/InputBox.menu-logic.test.js +6 -7
  41. package/dist/components/InputBox.menu-logic.test.js.map +1 -1
  42. package/dist/components/InputBox.test.js +7 -9
  43. package/dist/components/InputBox.test.js.map +1 -1
  44. package/dist/components/LiveResponse.d.ts.map +1 -1
  45. package/dist/components/LiveResponse.js.map +1 -1
  46. package/dist/components/MarkdownRenderer.d.ts.map +1 -1
  47. package/dist/components/MarkdownRenderer.js +12 -12
  48. package/dist/components/MarkdownRenderer.js.map +1 -1
  49. package/dist/components/MessageList.d.ts.map +1 -1
  50. package/dist/components/MessageList.js.map +1 -1
  51. package/dist/components/MessageList.test.js +1 -1
  52. package/dist/components/MessageList.test.js.map +1 -1
  53. package/dist/components/ModelSelectionMenu.d.ts.map +1 -1
  54. package/dist/components/ModelSelectionMenu.js +35 -31
  55. package/dist/components/ModelSelectionMenu.js.map +1 -1
  56. package/dist/components/ModelSelectionMenu.test.js +9 -9
  57. package/dist/components/ModelSelectionMenu.test.js.map +1 -1
  58. package/dist/components/PathSelectionMenu.d.ts.map +1 -1
  59. package/dist/components/PathSelectionMenu.js +1 -1
  60. package/dist/components/PathSelectionMenu.js.map +1 -1
  61. package/dist/components/SettingsSelectionMenu.d.ts.map +1 -1
  62. package/dist/components/SettingsSelectionMenu.js +1 -1
  63. package/dist/components/SettingsSelectionMenu.js.map +1 -1
  64. package/dist/components/SettingsSelectionMenu.test.js +4 -4
  65. package/dist/components/SettingsSelectionMenu.test.js.map +1 -1
  66. package/dist/components/SettingsValueSelectionMenu.d.ts.map +1 -1
  67. package/dist/components/SettingsValueSelectionMenu.js +5 -6
  68. package/dist/components/SettingsValueSelectionMenu.js.map +1 -1
  69. package/dist/components/SettingsValueSelectionMenu.test.js +5 -5
  70. package/dist/components/SettingsValueSelectionMenu.test.js.map +1 -1
  71. package/dist/components/SlashCommandMenu.d.ts.map +1 -1
  72. package/dist/components/SlashCommandMenu.js +1 -1
  73. package/dist/components/SlashCommandMenu.js.map +1 -1
  74. package/dist/components/StatusBar.d.ts +2 -0
  75. package/dist/components/StatusBar.d.ts.map +1 -1
  76. package/dist/components/StatusBar.js +45 -41
  77. package/dist/components/StatusBar.js.map +1 -1
  78. package/dist/components/StatusBar.test.d.ts +2 -0
  79. package/dist/components/StatusBar.test.d.ts.map +1 -0
  80. package/dist/components/StatusBar.test.js +19 -0
  81. package/dist/components/StatusBar.test.js.map +1 -0
  82. package/dist/context/InputContext.d.ts.map +1 -1
  83. package/dist/context/InputContext.js.map +1 -1
  84. package/dist/context/InputContext.stability.test.js +1 -1
  85. package/dist/context/InputContext.stability.test.js.map +1 -1
  86. package/dist/context/InputContext.test.js +15 -15
  87. package/dist/context/InputContext.test.js.map +1 -1
  88. package/dist/hooks/use-conversation.d.ts +5 -13
  89. package/dist/hooks/use-conversation.d.ts.map +1 -1
  90. package/dist/hooks/use-conversation.js +40 -148
  91. package/dist/hooks/use-conversation.js.map +1 -1
  92. package/dist/hooks/use-input-history.d.ts.map +1 -1
  93. package/dist/hooks/use-input-history.js +1 -3
  94. package/dist/hooks/use-input-history.js.map +1 -1
  95. package/dist/hooks/use-model-selection.d.ts.map +1 -1
  96. package/dist/hooks/use-model-selection.js +9 -35
  97. package/dist/hooks/use-model-selection.js.map +1 -1
  98. package/dist/hooks/use-path-completion.d.ts.map +1 -1
  99. package/dist/hooks/use-path-completion.js +6 -6
  100. package/dist/hooks/use-path-completion.js.map +1 -1
  101. package/dist/hooks/use-setting.d.ts.map +1 -1
  102. package/dist/hooks/use-setting.js +3 -6
  103. package/dist/hooks/use-setting.js.map +1 -1
  104. package/dist/hooks/use-settings-completion.d.ts.map +1 -1
  105. package/dist/hooks/use-settings-completion.js +10 -12
  106. package/dist/hooks/use-settings-completion.js.map +1 -1
  107. package/dist/hooks/use-settings-completion.test.js +46 -46
  108. package/dist/hooks/use-settings-completion.test.js.map +1 -1
  109. package/dist/hooks/use-settings-value-completion.d.ts.map +1 -1
  110. package/dist/hooks/use-settings-value-completion.js +13 -43
  111. package/dist/hooks/use-settings-value-completion.js.map +1 -1
  112. package/dist/hooks/use-settings-value-completion.test.js +12 -18
  113. package/dist/hooks/use-settings-value-completion.test.js.map +1 -1
  114. package/dist/hooks/use-slash-commands.d.ts +1 -1
  115. package/dist/hooks/use-slash-commands.d.ts.map +1 -1
  116. package/dist/hooks/use-slash-commands.js +6 -11
  117. package/dist/hooks/use-slash-commands.js.map +1 -1
  118. package/dist/hooks/use-slash-commands.test.js +24 -24
  119. package/dist/hooks/use-slash-commands.test.js.map +1 -1
  120. package/dist/lib/editor-impl.d.ts.map +1 -1
  121. package/dist/lib/editor-impl.js +6 -16
  122. package/dist/lib/editor-impl.js.map +1 -1
  123. package/dist/lib/editor-impl.test.js.map +1 -1
  124. package/dist/lib/mentor-client.d.ts +41 -0
  125. package/dist/lib/mentor-client.d.ts.map +1 -0
  126. package/dist/lib/mentor-client.js +146 -0
  127. package/dist/lib/mentor-client.js.map +1 -0
  128. package/dist/lib/mentor-client.test.d.ts +2 -0
  129. package/dist/lib/mentor-client.test.d.ts.map +1 -0
  130. package/dist/lib/mentor-client.test.js +440 -0
  131. package/dist/lib/mentor-client.test.js.map +1 -0
  132. package/dist/lib/openai-agent-client.chat.test.js +33 -8
  133. package/dist/lib/openai-agent-client.chat.test.js.map +1 -1
  134. package/dist/lib/openai-agent-client.d.ts.map +1 -1
  135. package/dist/lib/openai-agent-client.flex-tier.test.js +5 -5
  136. package/dist/lib/openai-agent-client.flex-tier.test.js.map +1 -1
  137. package/dist/lib/openai-agent-client.js +99 -88
  138. package/dist/lib/openai-agent-client.js.map +1 -1
  139. package/dist/lib/openai-agent-client.public-methods.test.js +186 -12
  140. package/dist/lib/openai-agent-client.public-methods.test.js.map +1 -1
  141. package/dist/lib/openai-agent-client.test.js +17 -17
  142. package/dist/lib/openai-agent-client.test.js.map +1 -1
  143. package/dist/lib/retry-strategy.d.ts +43 -0
  144. package/dist/lib/retry-strategy.d.ts.map +1 -0
  145. package/dist/lib/retry-strategy.js +93 -0
  146. package/dist/lib/retry-strategy.js.map +1 -0
  147. package/dist/lib/retry-strategy.test.d.ts +2 -0
  148. package/dist/lib/retry-strategy.test.d.ts.map +1 -0
  149. package/dist/lib/retry-strategy.test.js +200 -0
  150. package/dist/lib/retry-strategy.test.js.map +1 -0
  151. package/dist/lib/tool-invoke.d.ts.map +1 -1
  152. package/dist/lib/tool-invoke.js.map +1 -1
  153. package/dist/lib/tool-invoke.test.js.map +1 -1
  154. package/dist/no-singleton-imports.test.js +1 -1
  155. package/dist/no-singleton-imports.test.js.map +1 -1
  156. package/dist/non-interactive.d.ts +20 -0
  157. package/dist/non-interactive.d.ts.map +1 -0
  158. package/dist/non-interactive.js +86 -0
  159. package/dist/non-interactive.js.map +1 -0
  160. package/dist/non-interactive.test.d.ts +2 -0
  161. package/dist/non-interactive.test.d.ts.map +1 -0
  162. package/dist/non-interactive.test.js +213 -0
  163. package/dist/non-interactive.test.js.map +1 -0
  164. package/dist/prompts/anthropic.md +11 -11
  165. package/dist/prompts/codex.md +63 -63
  166. package/dist/prompts/gpt-5.md +95 -95
  167. package/dist/prompts/mentor-addon.md +6 -5
  168. package/dist/prompts/prompt-selector.d.ts +8 -0
  169. package/dist/prompts/prompt-selector.d.ts.map +1 -0
  170. package/dist/prompts/prompt-selector.js +21 -0
  171. package/dist/prompts/prompt-selector.js.map +1 -0
  172. package/dist/prompts/prompt-selector.test.d.ts +2 -0
  173. package/dist/prompts/prompt-selector.test.d.ts.map +1 -0
  174. package/dist/prompts/prompt-selector.test.js +21 -0
  175. package/dist/prompts/prompt-selector.test.js.map +1 -0
  176. package/dist/prompts/prompt-selector.test.ts +32 -0
  177. package/dist/prompts/prompt-selector.ts +30 -0
  178. package/dist/prompts/simple.md +58 -58
  179. package/dist/providers/index.d.ts.map +1 -1
  180. package/dist/providers/index.js.map +1 -1
  181. package/dist/providers/openai-compatible/api.d.ts.map +1 -1
  182. package/dist/providers/openai-compatible/api.js.map +1 -1
  183. package/dist/providers/openai-compatible/model.d.ts.map +1 -1
  184. package/dist/providers/openai-compatible/model.js +19 -53
  185. package/dist/providers/openai-compatible/model.js.map +1 -1
  186. package/dist/providers/openai-compatible/provider.d.ts.map +1 -1
  187. package/dist/providers/openai-compatible/provider.js.map +1 -1
  188. package/dist/providers/openai-compatible/reasoning-content.test.js +2 -2
  189. package/dist/providers/openai-compatible/reasoning-content.test.js.map +1 -1
  190. package/dist/providers/openai-compatible/utils.d.ts.map +1 -1
  191. package/dist/providers/openai-compatible/utils.js.map +1 -1
  192. package/dist/providers/openai-compatible.provider.d.ts.map +1 -1
  193. package/dist/providers/openai-compatible.provider.js +5 -1
  194. package/dist/providers/openai-compatible.provider.js.map +1 -1
  195. package/dist/providers/openai.provider.js +4 -0
  196. package/dist/providers/openai.provider.js.map +1 -1
  197. package/dist/providers/openrouter/api.d.ts.map +1 -1
  198. package/dist/providers/openrouter/api.js +5 -13
  199. package/dist/providers/openrouter/api.js.map +1 -1
  200. package/dist/providers/openrouter/converters.d.ts.map +1 -1
  201. package/dist/providers/openrouter/converters.js +9 -28
  202. package/dist/providers/openrouter/converters.js.map +1 -1
  203. package/dist/providers/openrouter/converters.test.js +7 -11
  204. package/dist/providers/openrouter/converters.test.js.map +1 -1
  205. package/dist/providers/openrouter/index.d.ts.map +1 -1
  206. package/dist/providers/openrouter/index.js.map +1 -1
  207. package/dist/providers/openrouter/model.d.ts.map +1 -1
  208. package/dist/providers/openrouter/model.js +19 -55
  209. package/dist/providers/openrouter/model.js.map +1 -1
  210. package/dist/providers/openrouter/provider.d.ts.map +1 -1
  211. package/dist/providers/openrouter/provider.js.map +1 -1
  212. package/dist/providers/openrouter/reasoning-content.test.js +1 -1
  213. package/dist/providers/openrouter/reasoning-content.test.js.map +1 -1
  214. package/dist/providers/openrouter/utils.d.ts.map +1 -1
  215. package/dist/providers/openrouter/utils.js +2 -3
  216. package/dist/providers/openrouter/utils.js.map +1 -1
  217. package/dist/providers/openrouter.api.retry.test.js.map +1 -1
  218. package/dist/providers/openrouter.provider.createRunner.test.js +1 -1
  219. package/dist/providers/openrouter.provider.createRunner.test.js.map +1 -1
  220. package/dist/providers/openrouter.provider.js +6 -4
  221. package/dist/providers/openrouter.provider.js.map +1 -1
  222. package/dist/providers/openrouter.test.js +13 -17
  223. package/dist/providers/openrouter.test.js.map +1 -1
  224. package/dist/providers/registry.d.ts +5 -0
  225. package/dist/providers/registry.d.ts.map +1 -1
  226. package/dist/providers/registry.js.map +1 -1
  227. package/dist/providers/registry.test.js +11 -11
  228. package/dist/providers/registry.test.js.map +1 -1
  229. package/dist/providers/web-search/index.d.ts +1 -1
  230. package/dist/providers/web-search/index.d.ts.map +1 -1
  231. package/dist/providers/web-search/index.js.map +1 -1
  232. package/dist/providers/web-search/registry.d.ts.map +1 -1
  233. package/dist/providers/web-search/registry.js.map +1 -1
  234. package/dist/providers/web-search/registry.test.js +14 -14
  235. package/dist/providers/web-search/registry.test.js.map +1 -1
  236. package/dist/providers/web-search/tavily.provider.d.ts.map +1 -1
  237. package/dist/providers/web-search/tavily.provider.js +4 -4
  238. package/dist/providers/web-search/tavily.provider.js.map +1 -1
  239. package/dist/providers/web-search/tavily.provider.test.js +7 -7
  240. package/dist/providers/web-search/tavily.provider.test.js.map +1 -1
  241. package/dist/providers/web-search/types.d.ts.map +1 -1
  242. package/dist/scripts/extract-provider-traffic.d.ts +3 -0
  243. package/dist/scripts/extract-provider-traffic.d.ts.map +1 -0
  244. package/dist/scripts/extract-provider-traffic.js +32 -0
  245. package/dist/scripts/extract-provider-traffic.js.map +1 -0
  246. package/dist/services/approval-state.d.ts +24 -0
  247. package/dist/services/approval-state.d.ts.map +1 -0
  248. package/dist/services/approval-state.js +41 -0
  249. package/dist/services/approval-state.js.map +1 -0
  250. package/dist/services/approval-state.test.d.ts +2 -0
  251. package/dist/services/approval-state.test.d.ts.map +1 -0
  252. package/dist/services/approval-state.test.js +59 -0
  253. package/dist/services/approval-state.test.js.map +1 -0
  254. package/dist/services/command-message-streaming.d.ts +12 -0
  255. package/dist/services/command-message-streaming.d.ts.map +1 -0
  256. package/dist/services/command-message-streaming.js +68 -0
  257. package/dist/services/command-message-streaming.js.map +1 -0
  258. package/dist/services/command-message-streaming.test.d.ts +2 -0
  259. package/dist/services/command-message-streaming.test.d.ts.map +1 -0
  260. package/dist/services/command-message-streaming.test.js +78 -0
  261. package/dist/services/command-message-streaming.test.js.map +1 -0
  262. package/dist/services/conversation-events.d.ts +5 -13
  263. package/dist/services/conversation-events.d.ts.map +1 -1
  264. package/dist/services/conversation-integration.test.d.ts +2 -0
  265. package/dist/services/conversation-integration.test.d.ts.map +1 -0
  266. package/dist/services/conversation-integration.test.js +155 -0
  267. package/dist/services/conversation-integration.test.js.map +1 -0
  268. package/dist/services/conversation-result-builder.d.ts +41 -0
  269. package/dist/services/conversation-result-builder.d.ts.map +1 -0
  270. package/dist/services/conversation-result-builder.js +110 -0
  271. package/dist/services/conversation-result-builder.js.map +1 -0
  272. package/dist/services/conversation-result-builder.test.d.ts +2 -0
  273. package/dist/services/conversation-result-builder.test.d.ts.map +1 -0
  274. package/dist/services/conversation-result-builder.test.js +76 -0
  275. package/dist/services/conversation-result-builder.test.js.map +1 -0
  276. package/dist/services/conversation-service.d.ts +1 -1
  277. package/dist/services/conversation-service.d.ts.map +1 -1
  278. package/dist/services/conversation-service.js.map +1 -1
  279. package/dist/services/conversation-session-reasoning.test.js +3 -3
  280. package/dist/services/conversation-session-reasoning.test.js.map +1 -1
  281. package/dist/services/conversation-session.d.ts +7 -17
  282. package/dist/services/conversation-session.d.ts.map +1 -1
  283. package/dist/services/conversation-session.js +290 -278
  284. package/dist/services/conversation-session.js.map +1 -1
  285. package/dist/services/conversation-session.usage.test.d.ts +2 -0
  286. package/dist/services/conversation-session.usage.test.d.ts.map +1 -0
  287. package/dist/services/conversation-session.usage.test.js +59 -0
  288. package/dist/services/conversation-session.usage.test.js.map +1 -0
  289. package/dist/services/conversation-store.d.ts.map +1 -1
  290. package/dist/services/conversation-store.js +3 -9
  291. package/dist/services/conversation-store.js.map +1 -1
  292. package/dist/services/conversation-store.test.js +17 -14
  293. package/dist/services/conversation-store.test.js.map +1 -1
  294. package/dist/services/execution-context.d.ts.map +1 -1
  295. package/dist/services/execution-context.js.map +1 -1
  296. package/dist/services/execution-context.test.js +7 -7
  297. package/dist/services/execution-context.test.js.map +1 -1
  298. package/dist/services/file-service.d.ts.map +1 -1
  299. package/dist/services/file-service.js +5 -9
  300. package/dist/services/file-service.js.map +1 -1
  301. package/dist/services/history-service.d.ts.map +1 -1
  302. package/dist/services/history-service.js +3 -7
  303. package/dist/services/history-service.js.map +1 -1
  304. package/dist/services/logging-contract.d.ts +74 -0
  305. package/dist/services/logging-contract.d.ts.map +1 -0
  306. package/dist/services/logging-contract.js +157 -0
  307. package/dist/services/logging-contract.js.map +1 -0
  308. package/dist/services/logging-contract.test.d.ts +2 -0
  309. package/dist/services/logging-contract.test.d.ts.map +1 -0
  310. package/dist/services/logging-contract.test.js +66 -0
  311. package/dist/services/logging-contract.test.js.map +1 -0
  312. package/dist/services/logging-service.d.ts +5 -0
  313. package/dist/services/logging-service.d.ts.map +1 -1
  314. package/dist/services/logging-service.js +93 -21
  315. package/dist/services/logging-service.js.map +1 -1
  316. package/dist/services/model-service.d.ts.map +1 -1
  317. package/dist/services/model-service.js +2 -2
  318. package/dist/services/model-service.js.map +1 -1
  319. package/dist/services/model-service.test.js +6 -6
  320. package/dist/services/model-service.test.js.map +1 -1
  321. package/dist/services/service-interfaces.d.ts.map +1 -1
  322. package/dist/services/settings-env.d.ts +9 -0
  323. package/dist/services/settings-env.d.ts.map +1 -0
  324. package/dist/services/settings-env.js +75 -0
  325. package/dist/services/settings-env.js.map +1 -0
  326. package/dist/services/settings-env.test.d.ts +2 -0
  327. package/dist/services/settings-env.test.d.ts.map +1 -0
  328. package/dist/services/settings-env.test.js +32 -0
  329. package/dist/services/settings-env.test.js.map +1 -0
  330. package/dist/services/settings-merger.d.ts +26 -0
  331. package/dist/services/settings-merger.d.ts.map +1 -0
  332. package/dist/services/settings-merger.js +122 -0
  333. package/dist/services/settings-merger.js.map +1 -0
  334. package/dist/services/settings-merger.test.d.ts +2 -0
  335. package/dist/services/settings-merger.test.d.ts.map +1 -0
  336. package/dist/services/settings-merger.test.js +26 -0
  337. package/dist/services/settings-merger.test.js.map +1 -0
  338. package/dist/services/settings-persistence.d.ts +32 -0
  339. package/dist/services/settings-persistence.d.ts.map +1 -0
  340. package/dist/services/settings-persistence.js +134 -0
  341. package/dist/services/settings-persistence.js.map +1 -0
  342. package/dist/services/settings-persistence.test.d.ts +2 -0
  343. package/dist/services/settings-persistence.test.d.ts.map +1 -0
  344. package/dist/services/settings-persistence.test.js +51 -0
  345. package/dist/services/settings-persistence.test.js.map +1 -0
  346. package/dist/services/settings-schema.d.ts +320 -0
  347. package/dist/services/settings-schema.d.ts.map +1 -0
  348. package/dist/services/settings-schema.js +272 -0
  349. package/dist/services/settings-schema.js.map +1 -0
  350. package/dist/services/settings-service.d.ts +4 -248
  351. package/dist/services/settings-service.d.ts.map +1 -1
  352. package/dist/services/settings-service.js +45 -641
  353. package/dist/services/settings-service.js.map +1 -1
  354. package/dist/services/settings-service.mock.d.ts.map +1 -1
  355. package/dist/services/settings-service.mock.js.map +1 -1
  356. package/dist/services/singleton-deprecation.test.js +2 -2
  357. package/dist/services/singleton-deprecation.test.js.map +1 -1
  358. package/dist/services/ssh-service.d.ts.map +1 -1
  359. package/dist/services/ssh-service.js +8 -7
  360. package/dist/services/ssh-service.js.map +1 -1
  361. package/dist/services/ssh-service.test.js +15 -13
  362. package/dist/services/ssh-service.test.js.map +1 -1
  363. package/dist/services/stream-event-parsing.d.ts +4 -0
  364. package/dist/services/stream-event-parsing.d.ts.map +1 -0
  365. package/dist/services/stream-event-parsing.js +76 -0
  366. package/dist/services/stream-event-parsing.js.map +1 -0
  367. package/dist/services/stream-event-parsing.test.d.ts +2 -0
  368. package/dist/services/stream-event-parsing.test.d.ts.map +1 -0
  369. package/dist/services/stream-event-parsing.test.js +59 -0
  370. package/dist/services/stream-event-parsing.test.js.map +1 -0
  371. package/dist/services/stream-event-processor.d.ts +32 -0
  372. package/dist/services/stream-event-processor.d.ts.map +1 -0
  373. package/dist/services/stream-event-processor.js +344 -0
  374. package/dist/services/stream-event-processor.js.map +1 -0
  375. package/dist/services/stream-event-processor.test.d.ts +2 -0
  376. package/dist/services/stream-event-processor.test.d.ts.map +1 -0
  377. package/dist/services/stream-event-processor.test.js +117 -0
  378. package/dist/services/stream-event-processor.test.js.map +1 -0
  379. package/dist/tools/apply-patch.d.ts.map +1 -1
  380. package/dist/tools/apply-patch.js +45 -35
  381. package/dist/tools/apply-patch.js.map +1 -1
  382. package/dist/tools/apply-patch.test.js +23 -0
  383. package/dist/tools/apply-patch.test.js.map +1 -1
  384. package/dist/tools/ask-mentor.d.ts.map +1 -1
  385. package/dist/tools/ask-mentor.js +5 -15
  386. package/dist/tools/ask-mentor.js.map +1 -1
  387. package/dist/tools/ask-mentor.test.js +1 -1
  388. package/dist/tools/ask-mentor.test.js.map +1 -1
  389. package/dist/tools/create-file.d.ts.map +1 -1
  390. package/dist/tools/create-file.js +2 -2
  391. package/dist/tools/create-file.js.map +1 -1
  392. package/dist/tools/create-file.test.js.map +1 -1
  393. package/dist/tools/edit-healing.d.ts.map +1 -1
  394. package/dist/tools/edit-healing.js +5 -4
  395. package/dist/tools/edit-healing.js.map +1 -1
  396. package/dist/tools/edit-healing.test.js.map +1 -1
  397. package/dist/tools/find-files.d.ts +1 -0
  398. package/dist/tools/find-files.d.ts.map +1 -1
  399. package/dist/tools/find-files.js +93 -24
  400. package/dist/tools/find-files.js.map +1 -1
  401. package/dist/tools/find-files.test.js +46 -2
  402. package/dist/tools/find-files.test.js.map +1 -1
  403. package/dist/tools/format-helpers.d.ts.map +1 -1
  404. package/dist/tools/format-helpers.js +2 -6
  405. package/dist/tools/format-helpers.js.map +1 -1
  406. package/dist/tools/grep.d.ts +1 -1
  407. package/dist/tools/grep.d.ts.map +1 -1
  408. package/dist/tools/grep.js +6 -21
  409. package/dist/tools/grep.js.map +1 -1
  410. package/dist/tools/read-file.d.ts.map +1 -1
  411. package/dist/tools/read-file.js +3 -7
  412. package/dist/tools/read-file.js.map +1 -1
  413. package/dist/tools/read-file.test.js.map +1 -1
  414. package/dist/tools/search-replace.d.ts.map +1 -1
  415. package/dist/tools/search-replace.js +14 -31
  416. package/dist/tools/search-replace.js.map +1 -1
  417. package/dist/tools/search-replace.test.js.map +1 -1
  418. package/dist/tools/search.d.ts +1 -1
  419. package/dist/tools/search.d.ts.map +1 -1
  420. package/dist/tools/search.js +6 -16
  421. package/dist/tools/search.js.map +1 -1
  422. package/dist/tools/shell.d.ts +1 -1
  423. package/dist/tools/shell.d.ts.map +1 -1
  424. package/dist/tools/shell.js +25 -51
  425. package/dist/tools/shell.js.map +1 -1
  426. package/dist/tools/shell.test.d.ts +2 -0
  427. package/dist/tools/shell.test.d.ts.map +1 -0
  428. package/dist/tools/shell.test.js +70 -0
  429. package/dist/tools/shell.test.js.map +1 -0
  430. package/dist/tools/tool-names.d.ts +3 -0
  431. package/dist/tools/tool-names.d.ts.map +1 -0
  432. package/dist/tools/tool-names.js +3 -0
  433. package/dist/tools/tool-names.js.map +1 -0
  434. package/dist/tools/tool-names.test.d.ts +2 -0
  435. package/dist/tools/tool-names.test.d.ts.map +1 -0
  436. package/dist/tools/tool-names.test.js +7 -0
  437. package/dist/tools/tool-names.test.js.map +1 -0
  438. package/dist/tools/types.d.ts.map +1 -1
  439. package/dist/tools/utils.d.ts.map +1 -1
  440. package/dist/tools/utils.js +3 -8
  441. package/dist/tools/utils.js.map +1 -1
  442. package/dist/tools/web-fetch.d.ts +4 -4
  443. package/dist/tools/web-fetch.d.ts.map +1 -1
  444. package/dist/tools/web-fetch.js +32 -249
  445. package/dist/tools/web-fetch.js.map +1 -1
  446. package/dist/tools/web-fetch.test.js +3 -3
  447. package/dist/tools/web-fetch.test.js.map +1 -1
  448. package/dist/tools/web-search.d.ts.map +1 -1
  449. package/dist/tools/web-search.js +6 -10
  450. package/dist/tools/web-search.js.map +1 -1
  451. package/dist/tools/web-search.test.js +12 -14
  452. package/dist/tools/web-search.test.js.map +1 -1
  453. package/dist/types/messages.d.ts +29 -0
  454. package/dist/types/messages.d.ts.map +1 -0
  455. package/dist/types/messages.js +2 -0
  456. package/dist/types/messages.js.map +1 -0
  457. package/dist/utils/command-logger.d.ts.map +1 -1
  458. package/dist/utils/command-logger.js.map +1 -1
  459. package/dist/utils/command-safety/constants.d.ts.map +1 -1
  460. package/dist/utils/command-safety/constants.js +1 -9
  461. package/dist/utils/command-safety/constants.js.map +1 -1
  462. package/dist/utils/command-safety/find-helpers.d.ts.map +1 -1
  463. package/dist/utils/command-safety/find-helpers.js +4 -9
  464. package/dist/utils/command-safety/find-helpers.js.map +1 -1
  465. package/dist/utils/command-safety/handlers/find-handler.d.ts.map +1 -1
  466. package/dist/utils/command-safety/handlers/find-handler.js +3 -10
  467. package/dist/utils/command-safety/handlers/find-handler.js.map +1 -1
  468. package/dist/utils/command-safety/handlers/git-handler.d.ts.map +1 -1
  469. package/dist/utils/command-safety/handlers/git-handler.js +2 -4
  470. package/dist/utils/command-safety/handlers/git-handler.js.map +1 -1
  471. package/dist/utils/command-safety/handlers/index.d.ts +1 -1
  472. package/dist/utils/command-safety/handlers/index.d.ts.map +1 -1
  473. package/dist/utils/command-safety/handlers/index.js.map +1 -1
  474. package/dist/utils/command-safety/handlers/sed-handler.d.ts.map +1 -1
  475. package/dist/utils/command-safety/handlers/sed-handler.js.map +1 -1
  476. package/dist/utils/command-safety/handlers/types.d.ts.map +1 -1
  477. package/dist/utils/command-safety/index.d.ts.map +1 -1
  478. package/dist/utils/command-safety/index.js +4 -10
  479. package/dist/utils/command-safety/index.js.map +1 -1
  480. package/dist/utils/command-safety/path-analysis.d.ts.map +1 -1
  481. package/dist/utils/command-safety/path-analysis.js +9 -20
  482. package/dist/utils/command-safety/path-analysis.js.map +1 -1
  483. package/dist/utils/command-safety/utils.d.ts.map +1 -1
  484. package/dist/utils/command-safety/utils.js +1 -3
  485. package/dist/utils/command-safety/utils.js.map +1 -1
  486. package/dist/utils/command-safety.find.test.js +44 -87
  487. package/dist/utils/command-safety.find.test.js.map +1 -1
  488. package/dist/utils/command-safety.path.test.js +32 -67
  489. package/dist/utils/command-safety.path.test.js.map +1 -1
  490. package/dist/utils/conversation-event-handler.d.ts +4 -16
  491. package/dist/utils/conversation-event-handler.d.ts.map +1 -1
  492. package/dist/utils/conversation-event-handler.js +4 -8
  493. package/dist/utils/conversation-event-handler.js.map +1 -1
  494. package/dist/utils/conversation-event-handler.test.js +16 -18
  495. package/dist/utils/conversation-event-handler.test.js.map +1 -1
  496. package/dist/utils/conversation-utils.d.ts.map +1 -1
  497. package/dist/utils/conversation-utils.js +5 -8
  498. package/dist/utils/conversation-utils.js.map +1 -1
  499. package/dist/utils/conversation-utils.test.js +45 -44
  500. package/dist/utils/conversation-utils.test.js.map +1 -1
  501. package/dist/utils/diff.d.ts.map +1 -1
  502. package/dist/utils/diff.js +2 -4
  503. package/dist/utils/diff.js.map +1 -1
  504. package/dist/utils/diff.test.js +12 -12
  505. package/dist/utils/diff.test.js.map +1 -1
  506. package/dist/utils/error-helpers.d.ts.map +1 -1
  507. package/dist/utils/error-helpers.js +2 -6
  508. package/dist/utils/error-helpers.js.map +1 -1
  509. package/dist/utils/error-helpers.test.js +32 -32
  510. package/dist/utils/error-helpers.test.js.map +1 -1
  511. package/dist/utils/execute-shell.d.ts.map +1 -1
  512. package/dist/utils/execute-shell.js.map +1 -1
  513. package/dist/utils/execute-shell.test.js.map +1 -1
  514. package/dist/utils/extract-command-messages.d.ts.map +1 -1
  515. package/dist/utils/extract-command-messages.js +16 -21
  516. package/dist/utils/extract-command-messages.js.map +1 -1
  517. package/dist/utils/ink-render-options.d.ts.map +1 -1
  518. package/dist/utils/ink-render-options.js.map +1 -1
  519. package/dist/utils/log-viewer-filters.d.ts +29 -0
  520. package/dist/utils/log-viewer-filters.d.ts.map +1 -0
  521. package/dist/utils/log-viewer-filters.js +49 -0
  522. package/dist/utils/log-viewer-filters.js.map +1 -0
  523. package/dist/utils/log-viewer-filters.test.d.ts +2 -0
  524. package/dist/utils/log-viewer-filters.test.d.ts.map +1 -0
  525. package/dist/utils/log-viewer-filters.test.js +48 -0
  526. package/dist/utils/log-viewer-filters.test.js.map +1 -0
  527. package/dist/utils/message-buffer.d.ts.map +1 -1
  528. package/dist/utils/message-buffer.js.map +1 -1
  529. package/dist/utils/message-buffer.test.js +4 -4
  530. package/dist/utils/message-buffer.test.js.map +1 -1
  531. package/dist/utils/output-trim.d.ts.map +1 -1
  532. package/dist/utils/output-trim.js.map +1 -1
  533. package/dist/utils/provider-credentials.d.ts.map +1 -1
  534. package/dist/utils/provider-credentials.js +1 -1
  535. package/dist/utils/provider-credentials.js.map +1 -1
  536. package/dist/utils/provider-traffic-extractor.d.ts +18 -0
  537. package/dist/utils/provider-traffic-extractor.d.ts.map +1 -0
  538. package/dist/utils/provider-traffic-extractor.js +121 -0
  539. package/dist/utils/provider-traffic-extractor.js.map +1 -0
  540. package/dist/utils/provider-traffic-extractor.test.d.ts +2 -0
  541. package/dist/utils/provider-traffic-extractor.test.d.ts.map +1 -0
  542. package/dist/utils/provider-traffic-extractor.test.js +84 -0
  543. package/dist/utils/provider-traffic-extractor.test.js.map +1 -0
  544. package/dist/utils/settings-command.d.ts.map +1 -1
  545. package/dist/utils/settings-command.js +5 -12
  546. package/dist/utils/settings-command.js.map +1 -1
  547. package/dist/utils/ssh-config-parser.d.ts.map +1 -1
  548. package/dist/utils/ssh-config-parser.js.map +1 -1
  549. package/dist/utils/ssh-config-parser.test.js.map +1 -1
  550. package/dist/utils/streaming-session-factory.d.ts +33 -0
  551. package/dist/utils/streaming-session-factory.d.ts.map +1 -0
  552. package/dist/utils/streaming-session-factory.js +75 -0
  553. package/dist/utils/streaming-session-factory.js.map +1 -0
  554. package/dist/utils/streaming-session-factory.test.d.ts +2 -0
  555. package/dist/utils/streaming-session-factory.test.d.ts.map +1 -0
  556. package/dist/utils/streaming-session-factory.test.js +74 -0
  557. package/dist/utils/streaming-session-factory.test.js.map +1 -0
  558. package/dist/utils/streaming-updater.d.ts.map +1 -1
  559. package/dist/utils/streaming-updater.js.map +1 -1
  560. package/dist/utils/throttle.d.ts.map +1 -1
  561. package/dist/utils/throttle.js.map +1 -1
  562. package/dist/utils/token-usage.d.ts +16 -0
  563. package/dist/utils/token-usage.d.ts.map +1 -0
  564. package/dist/utils/token-usage.js +109 -0
  565. package/dist/utils/token-usage.js.map +1 -0
  566. package/dist/utils/token-usage.test.d.ts +2 -0
  567. package/dist/utils/token-usage.test.d.ts.map +1 -0
  568. package/dist/utils/token-usage.test.js +38 -0
  569. package/dist/utils/token-usage.test.js.map +1 -0
  570. package/dist/utils/trim-tool-output.d.ts +2 -0
  571. package/dist/utils/trim-tool-output.d.ts.map +1 -0
  572. package/dist/utils/trim-tool-output.js +52 -0
  573. package/dist/utils/trim-tool-output.js.map +1 -0
  574. package/package.json +117 -110
  575. package/{README.md → readme.md} +208 -136
@@ -5,31 +5,54 @@
5
5
 
6
6
  A powerful terminal-based AI assistant that helps you get things done on your computer through natural conversation.
7
7
 
8
+ **Why term2?** Unlike proprietary alternatives, term2 is **open-source (MIT)**, works with **any AI provider** (OpenAI, OpenRouter, local self-hosted, etc.), requires **no subscription**, and uniquely supports **remote server management via SSH** — all while giving you full control over what commands execute on your system.
9
+
8
10
  ## Demo
9
11
 
10
12
  https://github.com/user-attachments/assets/ac960d65-f7c8-453a-9440-91f6397ae842
11
13
 
12
14
  ## Features
13
15
 
14
- - 🎭 **Three Operating Modes** - Default (full-power), Lite (fast & safe), and Mentor (collaborative problem-solving)
15
- - 🤖 **Multi-Provider Support** - Works with OpenAI, OpenRouter, and OpenAI-compatible APIs
16
- - 🔒 **Safe Execution** - Every command requires your explicit approval with diff preview
17
- - 🛠️ **Advanced Tools** - Shell execution, file patching, search/replace, grep, find files, file reading, web search, and mentor consultation
18
- - 💬 **Slash Commands** - Quick actions like `/clear`, `/quit`, `/model`, `/mentor`, `/lite` for easy control
19
- - 📝 **Smart Context** - The assistant understands your environment and provides relevant help
20
- - 🎯 **Streaming Responses** - See the AI's thoughts and reasoning in real-time
21
- - 🧠 **Reasoning Effort Control** - Configurable reasoning levels (minimal to high) for O1/O3 models
22
- - **Command History** - Navigate previous inputs with arrow keys
23
- - 🎨 **Markdown Rendering** - Formatted code blocks and text in the terminal
24
- - 🔄 **Retry Logic** - Automatic recovery from tool hallucinations and upstream errors
25
- - 🌐 **SSH Mode** - Execute commands and edit files on remote servers over SSH
16
+ - 🎭 **Three Operating Modes** - Default (full-power), Lite (fast & safe), and Mentor (get help from a smarter model on complex problems)
17
+ - 🌍 **Open Source** - MIT licensed, hackable, auditable, community-driven
18
+ - 🤖 **Multi-Provider Support** - Works with OpenAI, OpenRouter, and OpenAI-compatible APIs
19
+ - 🔒 **Safe Execution** - Every command requires your explicit approval with diff preview
20
+ - 🛠️ **Advanced Tools** - Shell execution, file patching, search/replace, grep, find files, file reading, web search, and mentor consultation
21
+ - 💬 **Slash Commands** - Quick actions like `/clear`, `/quit`, `/model`, `/mentor`, `/lite` for easy control
22
+ - 📝 **Smart Context** - The assistant understands your environment and provides relevant help
23
+ - 🎯 **Streaming Responses** - See the AI's thoughts and reasoning in real-time
24
+ - 🧠 **Reasoning Effort Control** - Configurable reasoning levels (minimal to high) for O1/O3 models
25
+ - **Command History** - Navigate previous inputs with arrow keys
26
+ - 🎨 **Markdown Rendering** - Formatted code blocks and text in the terminal
27
+ - 🔄 **Retry Logic** - Automatic recovery from tool hallucinations and upstream errors
28
+ - 🌐 **SSH Mode** - Execute commands and edit files on remote servers over SSH
29
+ - 🤖 **Non-Interactive Mode** - Run commands from the CLI without starting the full UI
30
+
31
+ ## Why term2 vs Alternatives?
32
+
33
+ | | **term2** | Claude Code | Warp |
34
+ | ----------------- | :-----------------------------------: | :------------: | :------------------: |
35
+ | **Open Source** | ✅ MIT | ❌ Proprietary | ❌ Proprietary |
36
+ | **Cost** | Pay-per-use | $20-200/mo | Freemium |
37
+ | **AI Providers** | Any (OpenAI, OpenRouter, local, etc.) | Anthropic only | selected models only |
38
+ | **SSH Remote** | ✅ Native | ❌ No | ✅ Yes |
39
+ | **Mentor Mode** | ✅ Built-in | ❌ No | ❌ No |
40
+ | **Self-Hostable** | ✅ | ❌ | ❌ |
41
+
42
+ **term2 gives you:**
43
+
44
+ - **Freedom** — No vendor lock-in. Use any AI provider or model you prefer.
45
+ - **Transparency** — Open source means you can audit every line of code.
46
+ - **Cost Control** — Pay only for API usage, no monthly subscriptions.
47
+ - **Remote Work** — Troubleshoot and manage remote servers without installing anything on remote hosts.
48
+ - **Safety** — Every command requires explicit approval with diff previews before execution.
26
49
 
27
50
  ## Installation
28
51
 
29
52
  **Requirements:**
30
53
 
31
- - Node.js 16 or higher
32
- - An API key from OpenAI, OpenRouter, or any OpenAI-compatible provider
54
+ - Node.js 16 or higher
55
+ - An API key from OpenAI, OpenRouter, or any OpenAI-compatible provider
33
56
 
34
57
  Install globally via npm:
35
58
 
@@ -56,9 +79,9 @@ Then simply chat with the AI! Type your question or request, press Enter, and th
56
79
 
57
80
  **New to term2?**
58
81
 
59
- - Working on a codebase/project? Use default mode: `term2`
60
- - Just need general terminal help? Use lite mode: `term2 --lite`
61
- - Tackling a complex problem? Enable mentor mode with `/mentor` command
82
+ - Working on a codebase/project? Use default mode: `term2`
83
+ - Just need general terminal help? Use lite mode: `term2 --lite`
84
+ - Tackling a complex problem? Enable mentor mode with `/mentor` command
62
85
 
63
86
  See the "Operating Modes" section below for full details.
64
87
 
@@ -101,18 +124,22 @@ term2 --ssh deploy@server.com --remote-dir /var/www/app --ssh-port 2222
101
124
 
102
125
  # Combine SSH with lite mode for lightweight remote assistance
103
126
  term2 --ssh user@host --remote-dir /path --lite
127
+
128
+ # Non-interactive mode
129
+ term2 "how to use grep"
130
+ term2 --auto-approve "list files in current directory"
104
131
  ```
105
132
 
106
133
  ### Slash Commands
107
134
 
108
135
  While in the chat, you can use these commands:
109
136
 
110
- - `/clear` - Clear the conversation history
111
- - `/quit` - Exit the application
112
- - `/model [model-name]` - Switch to a different model
113
- - `/mentor` - Toggle mentor mode (see "Operating Modes" section for details)
114
- - `/lite` - Toggle lite mode (see "Operating Modes" section for details)
115
- - `/settings [key] [value]` - Modify runtime settings (e.g., `/settings agent.temperature 0.7`)
137
+ - `/clear` - Clear the conversation history
138
+ - `/quit` - Exit the application
139
+ - `/model [model-name]` - Switch to a different model
140
+ - `/mentor` - Toggle mentor mode (see "Operating Modes" section for details)
141
+ - `/lite` - Toggle lite mode (see "Operating Modes" section for details)
142
+ - `/settings [key] [value]` - Modify runtime settings (e.g., `/settings agent.temperature 0.7`)
116
143
 
117
144
  ## Operating Modes
118
145
 
@@ -134,20 +161,20 @@ Lite mode is designed for general terminal work: system administration, file man
134
161
 
135
162
  **Key benefits:**
136
163
 
137
- - 🚀 **Fast and lightweight** - No codebase context, no project file loading, quick startup
138
- - 🔧 **General terminal tools** - Shell commands, grep, read files, find files (no code editing)
139
- - 🌐 **Perfect for SSH** - Ideal for remote server management and investigation
140
- - 🔄 **Toggleable** - Switch on/off mid-session with `/lite` command
141
- - 🐚 **Shell mode** - Press Shift+Tab to toggle direct shell command execution
164
+ - 🚀 **Fast and lightweight** - No codebase context, no project file loading, quick startup
165
+ - 🔧 **General terminal tools** - Shell commands, grep, read files, find files (no code editing)
166
+ - 🌐 **Perfect for SSH** - Ideal for remote server management and investigation
167
+ - 🔄 **Toggleable** - Switch on/off mid-session with `/lite` command
168
+ - 🐚 **Shell mode** - Press Shift+Tab to toggle direct shell command execution
142
169
 
143
170
  **When to use Lite mode:**
144
171
 
145
- - System administration and server management tasks
146
- - Investigating logs, config files, and system issues
147
- - File system navigation and organization
148
- - SSH into servers for maintenance or debugging
149
- - General terminal help when not working on a codebase
150
- - Quick command help and syntax lookups
172
+ - System administration and server management tasks
173
+ - Investigating logs, config files, and system issues
174
+ - File system navigation and organization
175
+ - SSH into servers for maintenance or debugging
176
+ - General terminal help when not working on a codebase
177
+ - Quick command help and syntax lookups
151
178
 
152
179
  **Example:**
153
180
 
@@ -170,10 +197,10 @@ Mentor mode gives you two AI minds working together on your codebase. Your prima
170
197
 
171
198
  **Key benefits:**
172
199
 
173
- - 🧠 **Two minds, better solutions** - Primary AI gathers context, mentor provides strategic guidance
174
- - 🔍 **Structured problem-solving** - Forces clear articulation of findings before jumping to solutions
175
- - ❓ **Challenges assumptions** - Mentor actively probes for gaps and alternative approaches
176
- - 🎯 **You stay in control** - Mentor advises, primary AI implements your decisions
200
+ - 🧠 **Two minds, better solutions** - Primary AI gathers context, mentor provides strategic guidance
201
+ - 🔍 **Structured problem-solving** - Forces clear articulation of findings before jumping to solutions
202
+ - ❓ **Challenges assumptions** - Mentor actively probes for gaps and alternative approaches
203
+ - 🎯 **You stay in control** - Mentor advises, primary AI implements your decisions
177
204
 
178
205
  **How it works:**
179
206
 
@@ -187,17 +214,17 @@ Mentor mode gives you two AI minds working together on your codebase. Your prima
187
214
 
188
215
  **When to use Mentor mode:**
189
216
 
190
- - Architectural decisions with multiple valid approaches
191
- - "Am I missing something?" sanity checks before major refactoring
192
- - Stuck on a problem after trying multiple solutions
193
- - Designing new features that must fit existing patterns
194
- - Getting a pre-commit review of your approach
217
+ - Architectural decisions with multiple valid approaches
218
+ - "Am I missing something?" sanity checks before major refactoring
219
+ - Stuck on a problem after trying multiple solutions
220
+ - Designing new features that must fit existing patterns
221
+ - Getting a pre-commit review of your approach
195
222
 
196
223
  **Requirements:**
197
224
 
198
- - Configure `agent.mentorModel` in settings (e.g., `gpt-5.2`, `claude-opus-4.5` or `gemini-3-pro-preview`)
199
- - Mentor model should be more capable than primary model for best results
200
- - Toggle with `/mentor` command mid-session
225
+ - Configure `agent.mentorModel` in settings (e.g., `gpt-5.2`, `claude-opus-4.5` or `gemini-3-pro-preview`)
226
+ - Mentor model should be more capable than primary model for best results
227
+ - Toggle with `/mentor` command mid-session
201
228
 
202
229
  **Example workflow:**
203
230
 
@@ -226,10 +253,10 @@ AI: [Does additional checks based on mentor's questions]
226
253
 
227
254
  Modes are mutually exclusive—each represents a different working style matched to your task. You can switch modes mid-session:
228
255
 
229
- - `/lite` - Toggle lite mode (clears history when switching)
230
- - `/mentor` - Toggle mentor mode
231
- - Switching to lite mode automatically disables edit/mentor modes
232
- - Enabling edit or mentor mode automatically disables lite mode
256
+ - `/lite` - Toggle lite mode (clears history when switching)
257
+ - `/mentor` - Toggle mentor mode
258
+ - Switching to lite mode automatically disables edit/mentor modes
259
+ - Enabling edit or mentor mode automatically disables lite mode
233
260
 
234
261
  ## SSH Mode
235
262
 
@@ -237,9 +264,9 @@ SSH mode enables term2 to execute commands and modify files on remote servers ov
237
264
 
238
265
  ### Requirements
239
266
 
240
- - SSH agent running with your keys loaded (`ssh-add`)
241
- - SSH access to the target server
242
- - `--remote-dir` is required to specify the working directory (optional in lite mode - will auto-detect)
267
+ - SSH agent running with your keys loaded (`ssh-add`)
268
+ - SSH access to the target server
269
+ - `--remote-dir` is required to specify the working directory (optional in lite mode - will auto-detect)
243
270
 
244
271
  ### Usage
245
272
 
@@ -274,23 +301,68 @@ term2 --ssh user@host --remote-dir /path/to/project --lite
274
301
 
275
302
  This combination provides:
276
303
 
277
- - Remote command execution over SSH
278
- - Read-only tools (grep, find_files, read_file) for exploration
279
- - Minimal context and faster responses
280
- - No file editing tools (safer for production servers)
304
+ - Remote command execution over SSH
305
+ - Read-only tools (grep, find_files, read_file) for exploration
306
+ - Minimal context and faster responses
307
+ - No file editing tools (safer for production servers)
281
308
 
282
309
  ### Limitations
283
310
 
284
- - Authentication is via SSH agent only (no password prompts)
285
- - Binary file operations are not supported (text files only)
286
- - Large file transfers may be slower than local operations
311
+ - Authentication is via SSH agent only (no password prompts)
312
+ - Binary file operations are not supported (text files only)
313
+ - Large file transfers may be slower than local operations
314
+
315
+ ## Non-Interactive Mode
316
+
317
+ term2 can be used for one-off tasks without entering the interactive chat UI. To use non-interactive mode, simply pass your prompt as a positional argument.
318
+
319
+ ### Usage
320
+
321
+ ```bash
322
+ term2 "list files in current directory"
323
+ ```
324
+
325
+ ### Tool Execution & Approval
326
+
327
+ By default, non-interactive mode will **reject** any tool execution that requires approval (like destructive shell commands or file edits) to prevent accidents.
328
+
329
+ - If a tool is rejected, the AI will respond acknowledging the rejection and may suggest how to run the command manually.
330
+ - To allow tools to run automatically, use the `--auto-approve` flag.
331
+
332
+ ```bash
333
+ # This will fail to delete files (rejection default)
334
+ term2 "delete /tmp/test-file"
335
+
336
+ # This will proceed with execution
337
+ term2 --auto-approve "delete /tmp/test-file"
338
+ ```
339
+
340
+ ### Output Redirection
341
+
342
+ - **AI text response** is written to `stdout`.
343
+ - **Events** (tool starts, completions, errors, approval requests) are written to `stderr`.
344
+
345
+ This makes it easy to use term2 in shell scripts:
346
+
347
+ ```bash
348
+ # Capture the response but see events in console
349
+ ANSWER=$(term2 "is there any TODO in source/cli.tsx?")
350
+ echo "The answer is: $ANSWER"
351
+ ```
352
+
353
+ ### Default Mode vs Lite Mode
354
+
355
+ - When running **with** `--auto-approve`, term2 defaults to **Default Mode** (full codebase context).
356
+ - When running **without** `--auto-approve`, term2 defaults to **Lite Mode** (no codebase context, safe/fast).
357
+
358
+ You can always override this by passing `--lite` or running in a directory without a codebase.
287
359
 
288
360
  ## Configuration
289
361
 
290
362
  term2 stores its configuration in:
291
363
 
292
- - **macOS**: `~/Library/Logs/term2-nodejs/settings.json`
293
- - **Linux**: `~/.local/state/term2-nodejs/settings.json`
364
+ - **macOS**: `~/Library/Logs/term2-nodejs/settings.json`
365
+ - **Linux**: `~/.local/state/term2-nodejs/settings.json`
294
366
 
295
367
  ### Environment Variables (API Keys Only)
296
368
 
@@ -315,8 +387,8 @@ Settings (model, provider, temperature, etc.) can be configured via:
315
387
 
316
388
  1. **App menu** - Use `/settings` command during a session (e.g., `/settings agent.model gpt-5.2`)
317
389
  2. **Settings file** - Manually edit the JSON file:
318
- - **macOS**: `~/Library/Logs/term2-nodejs/settings.json`
319
- - **Linux**: `~/.local/state/term2-nodejs/settings.json`
390
+ - **macOS**: `~/Library/Logs/term2-nodejs/settings.json`
391
+ - **Linux**: `~/.local/state/term2-nodejs/settings.json`
320
392
  3. **CLI flags** - Override for a single session (e.g., `-m gpt-5.2`)
321
393
 
322
394
  ### Provider Configuration Examples
@@ -327,11 +399,11 @@ You can easily switch between providers by editing `settings.json`.
327
399
 
328
400
  ```json
329
401
  {
330
- "agent": {
331
- "provider": "openai",
332
- "model": "gpt-5.1",
333
- "temperature": 0.7
334
- }
402
+ "agent": {
403
+ "provider": "openai",
404
+ "model": "gpt-5.1",
405
+ "temperature": 0.7
406
+ }
335
407
  }
336
408
  ```
337
409
 
@@ -340,10 +412,10 @@ Access a wide range of models.
340
412
 
341
413
  ```json
342
414
  {
343
- "agent": {
344
- "provider": "openrouter",
345
- "model": "anthropic/claude-4.5-sonnet"
346
- }
415
+ "agent": {
416
+ "provider": "openrouter",
417
+ "model": "anthropic/claude-4.5-sonnet"
418
+ }
347
419
  }
348
420
  ```
349
421
 
@@ -354,16 +426,16 @@ _Llama.cpp Example:_
354
426
 
355
427
  ```json
356
428
  {
357
- "providers": [
358
- {
359
- "name": "llama.cpp",
360
- "baseUrl": "http://127.0.0.1:8080/v1"
361
- }
362
- ],
363
- "agent": {
364
- "provider": "llama.cpp",
365
- "model": "qwen3-coder"
429
+ "providers": [
430
+ {
431
+ "name": "llama.cpp",
432
+ "baseUrl": "http://127.0.0.1:8080/v1"
366
433
  }
434
+ ],
435
+ "agent": {
436
+ "provider": "llama.cpp",
437
+ "model": "qwen3-coder"
438
+ }
367
439
  }
368
440
  ```
369
441
 
@@ -371,16 +443,16 @@ _LM Studio Example:_
371
443
 
372
444
  ```json
373
445
  {
374
- "providers": [
375
- {
376
- "name": "lm-studio",
377
- "baseUrl": "http://localhost:1234/v1"
378
- }
379
- ],
380
- "agent": {
381
- "provider": "lm-studio",
382
- "model": "local-model"
446
+ "providers": [
447
+ {
448
+ "name": "lm-studio",
449
+ "baseUrl": "http://localhost:1234/v1"
383
450
  }
451
+ ],
452
+ "agent": {
453
+ "provider": "lm-studio",
454
+ "model": "local-model"
455
+ }
384
456
  }
385
457
  ```
386
458
 
@@ -388,14 +460,14 @@ _LM Studio Example:_
388
460
 
389
461
  ```json
390
462
  {
391
- "shell": {
392
- "timeout": 120000,
393
- "maxOutputLines": 1000
394
- },
395
- "agent": {
396
- "reasoningEffort": "medium",
397
- "mentorModel": "gpt-5.2"
398
- }
463
+ "shell": {
464
+ "timeout": 120000,
465
+ "maxOutputLines": 1000
466
+ },
467
+ "agent": {
468
+ "reasoningEffort": "medium",
469
+ "mentorModel": "gpt-5.2"
470
+ }
399
471
  }
400
472
  ```
401
473
 
@@ -405,25 +477,25 @@ term2 works with multiple AI providers:
405
477
 
406
478
  ### OpenAI (default)
407
479
 
408
- - `gpt-5.2` (latest)
409
- - `gpt-5.1` (default)
410
- - `gpt-5`
411
- - `gpt-5-mini`
412
- - `gpt-4.1`
413
- - `gpt-4.1-mini`
414
- - `gpt-5.1`
415
- - `gpt-5.1-mini`
416
- - `o3` (supports reasoning effort)
417
- - `o3-mini` (supports reasoning effort)
418
- - `o1` (supports reasoning effort)
480
+ - `gpt-5.2` (latest)
481
+ - `gpt-5.1` (default)
482
+ - `gpt-5`
483
+ - `gpt-5-mini`
484
+ - `gpt-4.1`
485
+ - `gpt-4.1-mini`
486
+ - `gpt-5.1`
487
+ - `gpt-5.1-mini`
488
+ - `o3` (supports reasoning effort)
489
+ - `o3-mini` (supports reasoning effort)
490
+ - `o1` (supports reasoning effort)
419
491
 
420
492
  ### OpenRouter
421
493
 
422
494
  Access hundreds of models through OpenRouter including:
423
495
 
424
- - Claude models (Anthropic)
425
- - Gemini models (Google)
426
- - Open-source models (Deepseek, GLM, Minimax, Devstral, etc.)
496
+ - Claude models (Anthropic)
497
+ - Gemini models (Google)
498
+ - Open-source models (Deepseek, GLM, Minimax, Devstral, etc.)
427
499
 
428
500
  Use CLI flags (`-m model-name`) or settings file to select OpenRouter models.
429
501
 
@@ -431,19 +503,19 @@ Use CLI flags (`-m model-name`) or settings file to select OpenRouter models.
431
503
 
432
504
  term2 can connect to any OpenAI-compatible API. This allows you to use:
433
505
 
434
- - **Local Models**: Run private models locally via Ollama, LM Studio, vLLM, or LocalAI.
435
- - **Self-Hosted**: Connect to private deployments of models.
436
- - **Other Providers**: Any service offering an OpenAI-compatible endpoint (e.g., Groq, Together AI).
506
+ - **Local Models**: Run private models locally via Ollama, LM Studio, vLLM, or LocalAI.
507
+ - **Self-Hosted**: Connect to private deployments of models.
508
+ - **Other Providers**: Any service offering an OpenAI-compatible endpoint (e.g., Groq, Together AI).
437
509
 
438
510
  ## Safety Features
439
511
 
440
- - **Command Approval** - Every destructive operation requires your explicit confirmation
441
- - **Diff Preview** - See exact file changes before approving patches or edits
442
- - **Risk Analysis** - Dangerous operations (like `rm -rf`, `git push --force`) are flagged
443
- - **Path Safety** - Operations on sensitive directories require extra caution
444
- - **Dry-Run Validation** - Patches are validated before approval to prevent errors
445
- - **No Hidden Actions** - All tool usage is transparent and visible
446
- - **Retry Limits** - Automatic abort after consecutive tool failures (default: 3)
512
+ - **Command Approval** - Every destructive operation requires your explicit confirmation
513
+ - **Diff Preview** - See exact file changes before approving patches or edits
514
+ - **Risk Analysis** - Dangerous operations (like `rm -rf`, `git push --force`) are flagged
515
+ - **Path Safety** - Operations on sensitive directories require extra caution
516
+ - **Dry-Run Validation** - Patches are validated before approval to prevent errors
517
+ - **No Hidden Actions** - All tool usage is transparent and visible
518
+ - **Retry Limits** - Automatic abort after consecutive tool failures (default: 3)
447
519
 
448
520
  ## How It Works
449
521
 
@@ -537,14 +609,14 @@ term2 --ssh user@host --lite
537
609
 
538
610
  ## Tips
539
611
 
540
- - **Choose the right mode** - Use lite mode for general terminal work (not codebase), default mode for codebase work, mentor mode for complex codebase problems (see "Operating Modes" section)
541
- - The assistant won't run dangerous commands without your approval
542
- - You can reject any command by choosing 'No' when prompted
543
- - Press Ctrl+C to exit the chat at any time
544
- - Use arrow keys to navigate through your command history
545
- - Be specific in your requests for better results
546
- - Use `/mentor` to get expert consultation on difficult architectural decisions
547
- - Use `--lite` flag when SSH'ing to servers for general system work without codebase context
612
+ - **Choose the right mode** - Use lite mode for general terminal work (not codebase), default mode for codebase work, mentor mode for complex codebase problems (see "Operating Modes" section)
613
+ - The assistant won't run dangerous commands without your approval
614
+ - You can reject any command by choosing 'No' when prompted
615
+ - Press Ctrl+C to exit the chat at any time
616
+ - Use arrow keys to navigate through your command history
617
+ - Be specific in your requests for better results
618
+ - Use `/mentor` to get expert consultation on difficult architectural decisions
619
+ - Use `--lite` flag when SSH'ing to servers for general system work without codebase context
548
620
 
549
621
  ## Contributing
550
622
 
@@ -558,11 +630,11 @@ MIT License - see [LICENSE](LICENSE) file for details
558
630
 
559
631
  Built with:
560
632
 
561
- - [OpenAI Agents SDK](https://github.com/openai/openai-agents-js)
562
- - [Ink](https://github.com/vadimdemedes/ink) - React for CLI
563
- - [TypeScript](https://www.typescriptlang.org/)
564
- - [ssh2](https://github.com/mscdex/ssh2) - SSH client for Node.js
633
+ - [OpenAI Agents SDK](https://github.com/openai/openai-agents-js)
634
+ - [Ink](https://github.com/vadimdemedes/ink) - React for CLI
635
+ - [TypeScript](https://www.typescriptlang.org/)
636
+ - [ssh2](https://github.com/mscdex/ssh2) - SSH client for Node.js
565
637
 
566
638
  ---
567
639
 
568
- Made with ❤️ by [qduc](https://github.com/qduc)
640
+ Made with ❤️ by [qduc](https://github.com/qduc)