@qduc/term2 0.8.0 → 0.9.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (996) hide show
  1. package/README.md +397 -0
  2. package/dist/agent.d.ts +1 -9
  3. package/dist/agent.d.ts.map +1 -1
  4. package/dist/agent.js +15 -132
  5. package/dist/agent.js.map +1 -1
  6. package/dist/agent.lite-mode.test.d.ts +2 -0
  7. package/dist/agent.lite-mode.test.d.ts.map +1 -0
  8. package/dist/agent.lite-mode.test.js +39 -0
  9. package/dist/agent.lite-mode.test.js.map +1 -0
  10. package/dist/app.d.ts.map +1 -1
  11. package/dist/app.js +28 -16
  12. package/dist/app.js.map +1 -1
  13. package/dist/app.large-uncached-warning.test.js +15 -0
  14. package/dist/app.large-uncached-warning.test.js.map +1 -1
  15. package/dist/commands/effort-command.d.ts +2 -2
  16. package/dist/commands/effort-command.d.ts.map +1 -1
  17. package/dist/commands/effort-command.js +3 -3
  18. package/dist/commands/effort-command.js.map +1 -1
  19. package/dist/commands/guarded-settings-command.d.ts +2 -2
  20. package/dist/commands/guarded-settings-command.d.ts.map +1 -1
  21. package/dist/commands/guarded-settings-command.js +2 -2
  22. package/dist/commands/guarded-settings-command.js.map +1 -1
  23. package/dist/commands/model-command.d.ts +2 -2
  24. package/dist/commands/model-command.d.ts.map +1 -1
  25. package/dist/commands/model-command.js +2 -2
  26. package/dist/commands/model-command.js.map +1 -1
  27. package/dist/commands/retry-command.d.ts +2 -1
  28. package/dist/commands/retry-command.d.ts.map +1 -1
  29. package/dist/commands/retry-command.js +12 -3
  30. package/dist/commands/retry-command.js.map +1 -1
  31. package/dist/commands/skills-command.d.ts +1 -1
  32. package/dist/commands/skills-command.d.ts.map +1 -1
  33. package/dist/commands/skills-command.js +1 -1
  34. package/dist/commands/skills-command.js.map +1 -1
  35. package/dist/commands/undo-command.d.ts +2 -2
  36. package/dist/commands/undo-command.d.ts.map +1 -1
  37. package/dist/commands/undo-command.js +2 -2
  38. package/dist/commands/undo-command.js.map +1 -1
  39. package/dist/components/ApprovalPrompt.test.d.ts +2 -0
  40. package/dist/components/ApprovalPrompt.test.d.ts.map +1 -0
  41. package/dist/components/ApprovalPrompt.test.js +23 -0
  42. package/dist/components/ApprovalPrompt.test.js.map +1 -0
  43. package/dist/components/Common/MenuContainer.d.ts.map +1 -1
  44. package/dist/components/Common/MenuContainer.js.map +1 -1
  45. package/dist/components/Common/MenuContainer.test.d.ts.map +1 -1
  46. package/dist/components/Common/MenuContainer.test.js +53 -24
  47. package/dist/components/Common/MenuContainer.test.js.map +1 -1
  48. package/dist/components/Common/ScrollableTabBar.d.ts.map +1 -1
  49. package/dist/components/Common/ScrollableTabBar.js.map +1 -1
  50. package/dist/components/Common/compute-visible-tabs.d.ts.map +1 -1
  51. package/dist/components/Common/compute-visible-tabs.js.map +1 -1
  52. package/dist/components/Common/compute-visible-tabs.test.d.ts.map +1 -1
  53. package/dist/components/Common/compute-visible-tabs.test.js +28 -28
  54. package/dist/components/Common/compute-visible-tabs.test.js.map +1 -1
  55. package/dist/components/Input/PopupManager.d.ts +1 -9
  56. package/dist/components/Input/PopupManager.d.ts.map +1 -1
  57. package/dist/components/Input/PopupManager.js +8 -10
  58. package/dist/components/Input/PopupManager.js.map +1 -1
  59. package/dist/components/Input/determine-active-menu.d.ts +0 -3
  60. package/dist/components/Input/determine-active-menu.d.ts.map +1 -1
  61. package/dist/components/Input/determine-active-menu.js +2 -10
  62. package/dist/components/Input/determine-active-menu.js.map +1 -1
  63. package/dist/components/Input/input-width.d.ts.map +1 -1
  64. package/dist/components/Input/input-width.js.map +1 -1
  65. package/dist/components/Input/insertions.d.ts +0 -8
  66. package/dist/components/Input/insertions.d.ts.map +1 -1
  67. package/dist/components/Input/insertions.js +0 -12
  68. package/dist/components/Input/insertions.js.map +1 -1
  69. package/dist/components/Input/popup-key-navigation.d.ts.map +1 -1
  70. package/dist/components/Input/popup-key-navigation.js.map +1 -1
  71. package/dist/components/Input/popup-key-navigation.test.d.ts.map +1 -1
  72. package/dist/components/Input/popup-key-navigation.test.js +21 -21
  73. package/dist/components/Input/popup-key-navigation.test.js.map +1 -1
  74. package/dist/components/Input/popup-props.d.ts +1 -3
  75. package/dist/components/Input/popup-props.d.ts.map +1 -1
  76. package/dist/components/Input/popup-props.js +1 -8
  77. package/dist/components/Input/popup-props.js.map +1 -1
  78. package/dist/components/Input/popup-props.test.d.ts.map +1 -1
  79. package/dist/components/Input/popup-props.test.js +3 -10
  80. package/dist/components/Input/popup-props.test.js.map +1 -1
  81. package/dist/components/Input/triggers.d.ts +0 -1
  82. package/dist/components/Input/triggers.d.ts.map +1 -1
  83. package/dist/components/Input/triggers.js +0 -1
  84. package/dist/components/Input/triggers.js.map +1 -1
  85. package/dist/components/InputBox.d.ts.map +1 -1
  86. package/dist/components/InputBox.js +41 -12
  87. package/dist/components/InputBox.js.map +1 -1
  88. package/dist/components/LiveResponse.test.d.ts +2 -0
  89. package/dist/components/LiveResponse.test.d.ts.map +1 -0
  90. package/dist/components/LiveResponse.test.js +13 -0
  91. package/dist/components/LiveResponse.test.js.map +1 -0
  92. package/dist/components/MarkdownRenderer.d.ts.map +1 -1
  93. package/dist/components/MarkdownRenderer.js +3 -2
  94. package/dist/components/MarkdownRenderer.js.map +1 -1
  95. package/dist/components/ModelSelectionMenu.error-tabs.test.d.ts +2 -0
  96. package/dist/components/ModelSelectionMenu.error-tabs.test.d.ts.map +1 -0
  97. package/dist/components/ModelSelectionMenu.error-tabs.test.js +18 -0
  98. package/dist/components/ModelSelectionMenu.error-tabs.test.js.map +1 -0
  99. package/dist/components/TextInput.d.ts +42 -0
  100. package/dist/components/TextInput.d.ts.map +1 -0
  101. package/dist/components/TextInput.js +398 -0
  102. package/dist/components/TextInput.js.map +1 -0
  103. package/dist/components/TextInput.test.d.ts +2 -0
  104. package/dist/components/TextInput.test.d.ts.map +1 -0
  105. package/dist/components/TextInput.test.js +75 -0
  106. package/dist/components/TextInput.test.js.map +1 -0
  107. package/dist/components/__test_act.test.d.ts +2 -0
  108. package/dist/components/__test_act.test.d.ts.map +1 -0
  109. package/dist/components/__test_act.test.js +22 -0
  110. package/dist/components/__test_act.test.js.map +1 -0
  111. package/dist/components/__test_act_test.d.ts +2 -0
  112. package/dist/components/__test_act_test.d.ts.map +1 -0
  113. package/dist/components/__test_act_test.js +22 -0
  114. package/dist/components/__test_act_test.js.map +1 -0
  115. package/dist/components/act-test.test.d.ts +2 -0
  116. package/dist/components/act-test.test.d.ts.map +1 -0
  117. package/dist/components/act-test.test.js +22 -0
  118. package/dist/components/act-test.test.js.map +1 -0
  119. package/dist/components/common/MenuContainer.d.ts +19 -0
  120. package/dist/components/common/MenuContainer.d.ts.map +1 -0
  121. package/dist/components/common/MenuContainer.js +52 -0
  122. package/dist/components/common/MenuContainer.js.map +1 -0
  123. package/dist/components/common/MenuContainer.test.d.ts +2 -0
  124. package/dist/components/common/MenuContainer.test.d.ts.map +1 -0
  125. package/dist/components/common/MenuContainer.test.js +37 -0
  126. package/dist/components/common/MenuContainer.test.js.map +1 -0
  127. package/dist/components/common/ScrollableTabBar.d.ts +26 -0
  128. package/dist/components/common/ScrollableTabBar.d.ts.map +1 -0
  129. package/dist/components/common/ScrollableTabBar.js +26 -0
  130. package/dist/components/common/ScrollableTabBar.js.map +1 -0
  131. package/dist/components/common/compute-visible-tabs.d.ts +16 -0
  132. package/dist/components/common/compute-visible-tabs.d.ts.map +1 -0
  133. package/dist/components/common/compute-visible-tabs.js +53 -0
  134. package/dist/components/common/compute-visible-tabs.js.map +1 -0
  135. package/dist/components/common/compute-visible-tabs.test.d.ts +2 -0
  136. package/dist/components/common/compute-visible-tabs.test.d.ts.map +1 -0
  137. package/dist/components/common/compute-visible-tabs.test.js +97 -0
  138. package/dist/components/common/compute-visible-tabs.test.js.map +1 -0
  139. package/dist/components/input/PopupManager.d.ts +88 -0
  140. package/dist/components/input/PopupManager.d.ts.map +1 -0
  141. package/dist/components/input/PopupManager.js +21 -0
  142. package/dist/components/input/PopupManager.js.map +1 -0
  143. package/dist/components/input/determine-active-menu.d.ts +27 -0
  144. package/dist/components/input/determine-active-menu.d.ts.map +1 -0
  145. package/dist/components/input/determine-active-menu.js +81 -0
  146. package/dist/components/input/determine-active-menu.js.map +1 -0
  147. package/dist/components/input/input-width.d.ts +8 -0
  148. package/dist/components/input/input-width.d.ts.map +1 -0
  149. package/dist/components/input/input-width.js +24 -0
  150. package/dist/components/input/input-width.js.map +1 -0
  151. package/dist/components/input/insertions.d.ts +44 -0
  152. package/dist/components/input/insertions.d.ts.map +1 -0
  153. package/dist/components/input/insertions.js +67 -0
  154. package/dist/components/input/insertions.js.map +1 -0
  155. package/dist/components/input/popup-key-navigation.d.ts +18 -0
  156. package/dist/components/input/popup-key-navigation.d.ts.map +1 -0
  157. package/dist/components/input/popup-key-navigation.js +16 -0
  158. package/dist/components/input/popup-key-navigation.js.map +1 -0
  159. package/dist/components/input/popup-key-navigation.test.d.ts +2 -0
  160. package/dist/components/input/popup-key-navigation.test.d.ts.map +1 -0
  161. package/dist/components/input/popup-key-navigation.test.js +75 -0
  162. package/dist/components/input/popup-key-navigation.test.js.map +1 -0
  163. package/dist/components/input/popup-props.d.ts +24 -0
  164. package/dist/components/input/popup-props.d.ts.map +1 -0
  165. package/dist/components/input/popup-props.js +72 -0
  166. package/dist/components/input/popup-props.js.map +1 -0
  167. package/dist/components/input/popup-props.test.d.ts +2 -0
  168. package/dist/components/input/popup-props.test.d.ts.map +1 -0
  169. package/dist/components/input/popup-props.test.js +86 -0
  170. package/dist/components/input/popup-props.test.js.map +1 -0
  171. package/dist/components/input/triggers.d.ts +11 -0
  172. package/dist/components/input/triggers.d.ts.map +1 -0
  173. package/dist/components/input/triggers.js +27 -0
  174. package/dist/components/input/triggers.js.map +1 -0
  175. package/dist/components/layout/BottomArea.d.ts +2 -0
  176. package/dist/components/layout/BottomArea.d.ts.map +1 -1
  177. package/dist/components/layout/BottomArea.js +4 -2
  178. package/dist/components/layout/BottomArea.js.map +1 -1
  179. package/dist/components/layout/DiffView.d.ts.map +1 -1
  180. package/dist/components/layout/DiffView.js +33 -26
  181. package/dist/components/layout/DiffView.js.map +1 -1
  182. package/dist/components/layout/StatusBar.d.ts +2 -0
  183. package/dist/components/layout/StatusBar.d.ts.map +1 -1
  184. package/dist/components/layout/StatusBar.js +29 -8
  185. package/dist/components/layout/StatusBar.js.map +1 -1
  186. package/dist/components/menu/ModelSelectionMenu.d.ts.map +1 -1
  187. package/dist/components/menu/ModelSelectionMenu.js +1 -1
  188. package/dist/components/menu/ModelSelectionMenu.js.map +1 -1
  189. package/dist/components/message/CommandMessage.d.ts +2 -1
  190. package/dist/components/message/CommandMessage.d.ts.map +1 -1
  191. package/dist/components/message/CommandMessage.js +203 -227
  192. package/dist/components/message/CommandMessage.js.map +1 -1
  193. package/dist/components/message/MessageList.d.ts +16 -0
  194. package/dist/components/message/MessageList.d.ts.map +1 -1
  195. package/dist/components/message/MessageList.js +45 -1
  196. package/dist/components/message/MessageList.js.map +1 -1
  197. package/dist/components/message/command-message-helpers.d.ts +1 -1
  198. package/dist/components/message/command-message-helpers.d.ts.map +1 -1
  199. package/dist/components/message/command-message-helpers.js +17 -17
  200. package/dist/components/message/command-message-helpers.js.map +1 -1
  201. package/dist/components/prompt/ApprovalPrompt.ask-user.test.js +35 -12
  202. package/dist/components/prompt/ApprovalPrompt.ask-user.test.js.map +1 -1
  203. package/dist/components/prompt/ApprovalPrompt.d.ts.map +1 -1
  204. package/dist/components/prompt/ApprovalPrompt.js +124 -14
  205. package/dist/components/prompt/ApprovalPrompt.js.map +1 -1
  206. package/dist/context/InputContext.d.ts +4 -0
  207. package/dist/context/InputContext.d.ts.map +1 -1
  208. package/dist/context/InputContext.js +5 -1
  209. package/dist/context/InputContext.js.map +1 -1
  210. package/dist/contracts/conversation.d.ts +22 -0
  211. package/dist/contracts/conversation.d.ts.map +1 -1
  212. package/dist/contracts/conversation.js +11 -1
  213. package/dist/contracts/conversation.js.map +1 -1
  214. package/dist/debug_ask_mentor.d.ts +2 -0
  215. package/dist/debug_ask_mentor.d.ts.map +1 -0
  216. package/dist/debug_ask_mentor.js +73 -0
  217. package/dist/debug_ask_mentor.js.map +1 -0
  218. package/dist/hooks/conversation-ui-reducer.ask-user-bugfix.test.js +7 -7
  219. package/dist/hooks/conversation-ui-reducer.ask-user-bugfix.test.js.map +1 -1
  220. package/dist/hooks/use-app-commands.d.ts +3 -2
  221. package/dist/hooks/use-app-commands.d.ts.map +1 -1
  222. package/dist/hooks/use-app-commands.js +16 -8
  223. package/dist/hooks/use-app-commands.js.map +1 -1
  224. package/dist/hooks/use-conversation.d.ts +1 -0
  225. package/dist/hooks/use-conversation.d.ts.map +1 -1
  226. package/dist/hooks/use-conversation.js +92 -9
  227. package/dist/hooks/use-conversation.js.map +1 -1
  228. package/dist/hooks/use-conversation.max-turns-undo.test.d.ts +2 -0
  229. package/dist/hooks/use-conversation.max-turns-undo.test.d.ts.map +1 -0
  230. package/dist/hooks/use-conversation.max-turns-undo.test.js +118 -0
  231. package/dist/hooks/use-conversation.max-turns-undo.test.js.map +1 -0
  232. package/dist/hooks/use-handoff-flow.d.ts +3 -2
  233. package/dist/hooks/use-handoff-flow.d.ts.map +1 -1
  234. package/dist/hooks/use-handoff-flow.js +28 -18
  235. package/dist/hooks/use-handoff-flow.js.map +1 -1
  236. package/dist/hooks/use-mode-handlers.d.ts +2 -0
  237. package/dist/hooks/use-mode-handlers.d.ts.map +1 -1
  238. package/dist/hooks/use-mode-handlers.js +2 -2
  239. package/dist/hooks/use-mode-handlers.js.map +1 -1
  240. package/dist/hooks/use-model-selection.d.ts +1 -0
  241. package/dist/hooks/use-model-selection.d.ts.map +1 -1
  242. package/dist/hooks/use-model-selection.js +19 -5
  243. package/dist/hooks/use-model-selection.js.map +1 -1
  244. package/dist/hooks/use-path-completion.d.ts.map +1 -1
  245. package/dist/hooks/use-path-completion.js +4 -2
  246. package/dist/hooks/use-path-completion.js.map +1 -1
  247. package/dist/hooks/use-path-completion.repro.test.d.ts +2 -0
  248. package/dist/hooks/use-path-completion.repro.test.d.ts.map +1 -0
  249. package/dist/hooks/use-path-completion.repro.test.js.map +1 -0
  250. package/dist/hooks/use-pending-turn-guards.d.ts +2 -2
  251. package/dist/hooks/use-pending-turn-guards.d.ts.map +1 -1
  252. package/dist/hooks/use-pending-turn-guards.js +8 -8
  253. package/dist/hooks/use-pending-turn-guards.js.map +1 -1
  254. package/dist/hooks/use-provider-selection.d.ts.map +1 -1
  255. package/dist/hooks/use-provider-selection.js +20 -18
  256. package/dist/hooks/use-provider-selection.js.map +1 -1
  257. package/dist/hooks/use-selection.d.ts.map +1 -1
  258. package/dist/hooks/use-selection.js +5 -1
  259. package/dist/hooks/use-selection.js.map +1 -1
  260. package/dist/hooks/use-setting.d.ts.map +1 -1
  261. package/dist/hooks/use-setting.js +3 -5
  262. package/dist/hooks/use-setting.js.map +1 -1
  263. package/dist/hooks/use-settings-completion.d.ts.map +1 -1
  264. package/dist/hooks/use-settings-completion.js +19 -7
  265. package/dist/hooks/use-settings-completion.js.map +1 -1
  266. package/dist/hooks/use-settings-value-completion.d.ts.map +1 -1
  267. package/dist/hooks/use-settings-value-completion.js +13 -2
  268. package/dist/hooks/use-settings-value-completion.js.map +1 -1
  269. package/dist/hooks/use-shell-mode.d.ts +2 -2
  270. package/dist/hooks/use-shell-mode.d.ts.map +1 -1
  271. package/dist/hooks/use-shell-mode.js +5 -3
  272. package/dist/hooks/use-shell-mode.js.map +1 -1
  273. package/dist/hooks/use-skill-selection.js +3 -3
  274. package/dist/hooks/use-skill-selection.js.map +1 -1
  275. package/dist/hooks/use-slash-commands.js +3 -3
  276. package/dist/hooks/use-slash-commands.js.map +1 -1
  277. package/dist/hooks/use-terminal-width.js +2 -2
  278. package/dist/hooks/use-terminal-width.js.map +1 -1
  279. package/dist/hooks/use-undo-selection.d.ts.map +1 -1
  280. package/dist/hooks/use-undo-selection.js +3 -1
  281. package/dist/hooks/use-undo-selection.js.map +1 -1
  282. package/dist/lib/agent-chat-service.js +2 -2
  283. package/dist/lib/agent-chat-service.js.map +1 -1
  284. package/dist/lib/agent-factory.test.js +21 -0
  285. package/dist/lib/agent-factory.test.js.map +1 -1
  286. package/dist/lib/agent-run-orchestrator.js +1 -1
  287. package/dist/lib/agent-run-orchestrator.js.map +1 -1
  288. package/dist/lib/editor-impl.test.js +73 -29
  289. package/dist/lib/editor-impl.test.js.map +1 -1
  290. package/dist/lib/openai-agent-client.public-methods.test.js +9 -1
  291. package/dist/lib/openai-agent-client.public-methods.test.js.map +1 -1
  292. package/dist/lib/shell.d.ts +7 -0
  293. package/dist/lib/shell.d.ts.map +1 -0
  294. package/dist/lib/shell.js +56 -0
  295. package/dist/lib/shell.js.map +1 -0
  296. package/dist/lib/subagent-bridge.d.ts.map +1 -1
  297. package/dist/lib/subagent-bridge.js +15 -3
  298. package/dist/lib/subagent-bridge.js.map +1 -1
  299. package/dist/modes/companion/command-index.d.ts +26 -0
  300. package/dist/modes/companion/command-index.d.ts.map +1 -0
  301. package/dist/modes/companion/command-index.js +50 -0
  302. package/dist/modes/companion/command-index.js.map +1 -0
  303. package/dist/modes/companion/command-index.test.d.ts +2 -0
  304. package/dist/modes/companion/command-index.test.d.ts.map +1 -0
  305. package/dist/modes/companion/command-index.test.js +86 -0
  306. package/dist/modes/companion/command-index.test.js.map +1 -0
  307. package/dist/modes/companion/companion-app.d.ts +12 -0
  308. package/dist/modes/companion/companion-app.d.ts.map +1 -0
  309. package/dist/modes/companion/companion-app.js +297 -0
  310. package/dist/modes/companion/companion-app.js.map +1 -0
  311. package/dist/modes/companion/companion-session.d.ts +63 -0
  312. package/dist/modes/companion/companion-session.d.ts.map +1 -0
  313. package/dist/modes/companion/companion-session.js +146 -0
  314. package/dist/modes/companion/companion-session.js.map +1 -0
  315. package/dist/modes/companion/companion-session.test.d.ts +2 -0
  316. package/dist/modes/companion/companion-session.test.d.ts.map +1 -0
  317. package/dist/modes/companion/companion-session.test.js +28 -0
  318. package/dist/modes/companion/companion-session.test.js.map +1 -0
  319. package/dist/modes/companion/components/status-bar.d.ts +13 -0
  320. package/dist/modes/companion/components/status-bar.d.ts.map +1 -0
  321. package/dist/modes/companion/components/status-bar.js +26 -0
  322. package/dist/modes/companion/components/status-bar.js.map +1 -0
  323. package/dist/modes/companion/context-buffer.d.ts +65 -0
  324. package/dist/modes/companion/context-buffer.d.ts.map +1 -0
  325. package/dist/modes/companion/context-buffer.js +156 -0
  326. package/dist/modes/companion/context-buffer.js.map +1 -0
  327. package/dist/modes/companion/context-buffer.test.d.ts +2 -0
  328. package/dist/modes/companion/context-buffer.test.d.ts.map +1 -0
  329. package/dist/modes/companion/context-buffer.test.js +154 -0
  330. package/dist/modes/companion/context-buffer.test.js.map +1 -0
  331. package/dist/modes/companion/event-detector.d.ts +46 -0
  332. package/dist/modes/companion/event-detector.d.ts.map +1 -0
  333. package/dist/modes/companion/event-detector.js +169 -0
  334. package/dist/modes/companion/event-detector.js.map +1 -0
  335. package/dist/modes/companion/event-detector.test.d.ts +2 -0
  336. package/dist/modes/companion/event-detector.test.d.ts.map +1 -0
  337. package/dist/modes/companion/event-detector.test.js +121 -0
  338. package/dist/modes/companion/event-detector.test.js.map +1 -0
  339. package/dist/modes/companion/index.d.ts +33 -0
  340. package/dist/modes/companion/index.d.ts.map +1 -0
  341. package/dist/modes/companion/index.js +21 -0
  342. package/dist/modes/companion/index.js.map +1 -0
  343. package/dist/modes/companion/input-key-mapper.d.ts +3 -0
  344. package/dist/modes/companion/input-key-mapper.d.ts.map +1 -0
  345. package/dist/modes/companion/input-key-mapper.js +31 -0
  346. package/dist/modes/companion/input-key-mapper.js.map +1 -0
  347. package/dist/modes/companion/input-key-mapper.test.d.ts +2 -0
  348. package/dist/modes/companion/input-key-mapper.test.d.ts.map +1 -0
  349. package/dist/modes/companion/input-key-mapper.test.js +26 -0
  350. package/dist/modes/companion/input-key-mapper.test.js.map +1 -0
  351. package/dist/modes/companion/input-parser.d.ts +53 -0
  352. package/dist/modes/companion/input-parser.d.ts.map +1 -0
  353. package/dist/modes/companion/input-parser.js +114 -0
  354. package/dist/modes/companion/input-parser.js.map +1 -0
  355. package/dist/modes/companion/input-parser.test.d.ts +2 -0
  356. package/dist/modes/companion/input-parser.test.d.ts.map +1 -0
  357. package/dist/modes/companion/input-parser.test.js +123 -0
  358. package/dist/modes/companion/input-parser.test.js.map +1 -0
  359. package/dist/modes/companion/mode-manager.d.ts +41 -0
  360. package/dist/modes/companion/mode-manager.d.ts.map +1 -0
  361. package/dist/modes/companion/mode-manager.js +56 -0
  362. package/dist/modes/companion/mode-manager.js.map +1 -0
  363. package/dist/modes/companion/mode-manager.test.d.ts +2 -0
  364. package/dist/modes/companion/mode-manager.test.d.ts.map +1 -0
  365. package/dist/modes/companion/mode-manager.test.js +65 -0
  366. package/dist/modes/companion/mode-manager.test.js.map +1 -0
  367. package/dist/modes/companion/output-classifier.d.ts +15 -0
  368. package/dist/modes/companion/output-classifier.d.ts.map +1 -0
  369. package/dist/modes/companion/output-classifier.js +77 -0
  370. package/dist/modes/companion/output-classifier.js.map +1 -0
  371. package/dist/modes/companion/output-classifier.test.d.ts +2 -0
  372. package/dist/modes/companion/output-classifier.test.d.ts.map +1 -0
  373. package/dist/modes/companion/output-classifier.test.js +133 -0
  374. package/dist/modes/companion/output-classifier.test.js.map +1 -0
  375. package/dist/modes/companion/pty-wrapper.d.ts +46 -0
  376. package/dist/modes/companion/pty-wrapper.d.ts.map +1 -0
  377. package/dist/modes/companion/pty-wrapper.js +143 -0
  378. package/dist/modes/companion/pty-wrapper.js.map +1 -0
  379. package/dist/modes/companion/safety-classifier.d.ts +31 -0
  380. package/dist/modes/companion/safety-classifier.d.ts.map +1 -0
  381. package/dist/modes/companion/safety-classifier.js +140 -0
  382. package/dist/modes/companion/safety-classifier.js.map +1 -0
  383. package/dist/modes/companion/safety-classifier.test.d.ts +2 -0
  384. package/dist/modes/companion/safety-classifier.test.d.ts.map +1 -0
  385. package/dist/modes/companion/safety-classifier.test.js +151 -0
  386. package/dist/modes/companion/safety-classifier.test.js.map +1 -0
  387. package/dist/modes/companion/summarizer.d.ts +24 -0
  388. package/dist/modes/companion/summarizer.d.ts.map +1 -0
  389. package/dist/modes/companion/summarizer.js +132 -0
  390. package/dist/modes/companion/summarizer.js.map +1 -0
  391. package/dist/modes/companion/terminal-history.d.ts +27 -0
  392. package/dist/modes/companion/terminal-history.d.ts.map +1 -0
  393. package/dist/modes/companion/terminal-history.js +142 -0
  394. package/dist/modes/companion/terminal-history.js.map +1 -0
  395. package/dist/non-interactive.d.ts.map +1 -1
  396. package/dist/non-interactive.js +0 -2
  397. package/dist/non-interactive.js.map +1 -1
  398. package/dist/prompts/anthropic.md +1 -0
  399. package/dist/prompts/codex.md +1 -0
  400. package/dist/prompts/gpt-5-modern.md +1 -0
  401. package/dist/prompts/gpt-5.5.md +1 -0
  402. package/dist/prompts/gpt-5.md +4 -7
  403. package/dist/prompts/kimi.md +3 -1
  404. package/dist/prompts/prompt-constructor.d.ts +1 -0
  405. package/dist/prompts/prompt-constructor.d.ts.map +1 -1
  406. package/dist/prompts/prompt-constructor.js +12 -38
  407. package/dist/prompts/prompt-constructor.js.map +1 -1
  408. package/dist/prompts/prompt-constructor.test.ts +15 -36
  409. package/dist/prompts/prompt-constructor.ts +19 -47
  410. package/dist/prompts/shell-sandbox.d.ts +2 -0
  411. package/dist/prompts/shell-sandbox.d.ts.map +1 -0
  412. package/dist/prompts/shell-sandbox.js +29 -0
  413. package/dist/prompts/shell-sandbox.js.map +1 -0
  414. package/dist/prompts/shell-sandbox.md +18 -0
  415. package/dist/prompts/shell-sandbox.ts +29 -0
  416. package/dist/prompts/simple-mentor.md +215 -0
  417. package/dist/prompts/subagent-delegation.js +1 -1
  418. package/dist/prompts/subagent-delegation.ts +1 -1
  419. package/dist/providers/ai-sdk-openai-compatible.provider.d.ts +2 -0
  420. package/dist/providers/ai-sdk-openai-compatible.provider.d.ts.map +1 -1
  421. package/dist/providers/ai-sdk-openai-compatible.provider.js +8 -4
  422. package/dist/providers/ai-sdk-openai-compatible.provider.js.map +1 -1
  423. package/dist/providers/ai-sdk-openai-compatible.provider.test.js +119 -1
  424. package/dist/providers/ai-sdk-openai-compatible.provider.test.js.map +1 -1
  425. package/dist/providers/ai-sdk-openai.provider.d.ts +14 -0
  426. package/dist/providers/ai-sdk-openai.provider.d.ts.map +1 -0
  427. package/dist/providers/ai-sdk-openai.provider.js +18 -0
  428. package/dist/providers/ai-sdk-openai.provider.js.map +1 -0
  429. package/dist/providers/codex-responses-model.d.ts +1 -0
  430. package/dist/providers/codex-responses-model.d.ts.map +1 -1
  431. package/dist/providers/codex-responses-model.js +5 -4
  432. package/dist/providers/codex-responses-model.js.map +1 -1
  433. package/dist/providers/github-copilot/converters.d.ts +45 -0
  434. package/dist/providers/github-copilot/converters.d.ts.map +1 -0
  435. package/dist/providers/github-copilot/converters.js +118 -0
  436. package/dist/providers/github-copilot/converters.js.map +1 -0
  437. package/dist/providers/github-copilot/converters.test.d.ts +2 -0
  438. package/dist/providers/github-copilot/converters.test.d.ts.map +1 -0
  439. package/dist/providers/github-copilot/converters.test.js +162 -0
  440. package/dist/providers/github-copilot/converters.test.js.map +1 -0
  441. package/dist/providers/github-copilot/github-copilot.provider.d.ts +2 -0
  442. package/dist/providers/github-copilot/github-copilot.provider.d.ts.map +1 -0
  443. package/dist/providers/github-copilot/github-copilot.provider.js +75 -0
  444. package/dist/providers/github-copilot/github-copilot.provider.js.map +1 -0
  445. package/dist/providers/github-copilot/github-copilot.provider.test.d.ts +2 -0
  446. package/dist/providers/github-copilot/github-copilot.provider.test.d.ts.map +1 -0
  447. package/dist/providers/github-copilot/github-copilot.provider.test.js +26 -0
  448. package/dist/providers/github-copilot/github-copilot.provider.test.js.map +1 -0
  449. package/dist/providers/github-copilot/index.d.ts +4 -0
  450. package/dist/providers/github-copilot/index.d.ts.map +1 -0
  451. package/dist/providers/github-copilot/index.js +4 -0
  452. package/dist/providers/github-copilot/index.js.map +1 -0
  453. package/dist/providers/github-copilot/model.d.ts +24 -0
  454. package/dist/providers/github-copilot/model.d.ts.map +1 -0
  455. package/dist/providers/github-copilot/model.delta.test.d.ts +2 -0
  456. package/dist/providers/github-copilot/model.delta.test.d.ts.map +1 -0
  457. package/dist/providers/github-copilot/model.delta.test.js +15 -0
  458. package/dist/providers/github-copilot/model.delta.test.js.map +1 -0
  459. package/dist/providers/github-copilot/model.js +498 -0
  460. package/dist/providers/github-copilot/model.js.map +1 -0
  461. package/dist/providers/github-copilot/model.test.d.ts +2 -0
  462. package/dist/providers/github-copilot/model.test.d.ts.map +1 -0
  463. package/dist/providers/github-copilot/model.test.js +63 -0
  464. package/dist/providers/github-copilot/model.test.js.map +1 -0
  465. package/dist/providers/github-copilot/provider.d.ts +15 -0
  466. package/dist/providers/github-copilot/provider.d.ts.map +1 -0
  467. package/dist/providers/github-copilot/provider.js +25 -0
  468. package/dist/providers/github-copilot/provider.js.map +1 -0
  469. package/dist/providers/github-copilot/provider.test.d.ts +2 -0
  470. package/dist/providers/github-copilot/provider.test.d.ts.map +1 -0
  471. package/dist/providers/github-copilot/provider.test.js +52 -0
  472. package/dist/providers/github-copilot/provider.test.js.map +1 -0
  473. package/dist/providers/github-copilot/utils.d.ts +20 -0
  474. package/dist/providers/github-copilot/utils.d.ts.map +1 -0
  475. package/dist/providers/github-copilot/utils.js +142 -0
  476. package/dist/providers/github-copilot/utils.js.map +1 -0
  477. package/dist/providers/github-copilot/utils.test.d.ts +2 -0
  478. package/dist/providers/github-copilot/utils.test.d.ts.map +1 -0
  479. package/dist/providers/github-copilot/utils.test.js +21 -0
  480. package/dist/providers/github-copilot/utils.test.js.map +1 -0
  481. package/dist/providers/openai-compatible/api.d.ts +17 -0
  482. package/dist/providers/openai-compatible/api.d.ts.map +1 -0
  483. package/dist/providers/openai-compatible/api.js +58 -0
  484. package/dist/providers/openai-compatible/api.js.map +1 -0
  485. package/dist/providers/openai-compatible/model.d.ts +17 -0
  486. package/dist/providers/openai-compatible/model.d.ts.map +1 -0
  487. package/dist/providers/openai-compatible/model.js +473 -0
  488. package/dist/providers/openai-compatible/model.js.map +1 -0
  489. package/dist/providers/openai-compatible/provider.d.ts +22 -0
  490. package/dist/providers/openai-compatible/provider.d.ts.map +1 -0
  491. package/dist/providers/openai-compatible/provider.js +43 -0
  492. package/dist/providers/openai-compatible/provider.js.map +1 -0
  493. package/dist/providers/openai-compatible/reasoning-content.test.d.ts +2 -0
  494. package/dist/providers/openai-compatible/reasoning-content.test.d.ts.map +1 -0
  495. package/dist/providers/openai-compatible/reasoning-content.test.js +258 -0
  496. package/dist/providers/openai-compatible/reasoning-content.test.js.map +1 -0
  497. package/dist/providers/openai-compatible/utils.d.ts +3 -0
  498. package/dist/providers/openai-compatible/utils.d.ts.map +1 -0
  499. package/dist/providers/openai-compatible/utils.js +11 -0
  500. package/dist/providers/openai-compatible/utils.js.map +1 -0
  501. package/dist/providers/openai-compatible-behavior-gate.test.js +42 -1
  502. package/dist/providers/openai-compatible-behavior-gate.test.js.map +1 -1
  503. package/dist/providers/openai-compatible-middleware.js +1 -1
  504. package/dist/providers/openai-compatible-middleware.js.map +1 -1
  505. package/dist/providers/openai-compatible.provider.js +1 -1
  506. package/dist/providers/openai-compatible.provider.js.map +1 -1
  507. package/dist/providers/openrouter/api.d.ts +39 -0
  508. package/dist/providers/openrouter/api.d.ts.map +1 -0
  509. package/dist/providers/openrouter/api.js +164 -0
  510. package/dist/providers/openrouter/api.js.map +1 -0
  511. package/dist/providers/openrouter/converters.d.ts +8 -0
  512. package/dist/providers/openrouter/converters.d.ts.map +1 -0
  513. package/dist/providers/openrouter/converters.js +391 -0
  514. package/dist/providers/openrouter/converters.js.map +1 -0
  515. package/dist/providers/openrouter/converters.test.d.ts +2 -0
  516. package/dist/providers/openrouter/converters.test.d.ts.map +1 -0
  517. package/dist/providers/openrouter/converters.test.js +179 -0
  518. package/dist/providers/openrouter/converters.test.js.map +1 -0
  519. package/dist/providers/openrouter/index.d.ts +4 -0
  520. package/dist/providers/openrouter/index.d.ts.map +1 -0
  521. package/dist/providers/openrouter/index.js +4 -0
  522. package/dist/providers/openrouter/index.js.map +1 -0
  523. package/dist/providers/openrouter/model.d.ts +14 -0
  524. package/dist/providers/openrouter/model.d.ts.map +1 -0
  525. package/dist/providers/openrouter/model.js +457 -0
  526. package/dist/providers/openrouter/model.js.map +1 -0
  527. package/dist/providers/openrouter/provider.d.ts +15 -0
  528. package/dist/providers/openrouter/provider.d.ts.map +1 -0
  529. package/dist/providers/openrouter/provider.js +21 -0
  530. package/dist/providers/openrouter/provider.js.map +1 -0
  531. package/dist/providers/openrouter/reasoning-content.test.d.ts +2 -0
  532. package/dist/providers/openrouter/reasoning-content.test.d.ts.map +1 -0
  533. package/dist/providers/openrouter/reasoning-content.test.js +122 -0
  534. package/dist/providers/openrouter/reasoning-content.test.js.map +1 -0
  535. package/dist/providers/openrouter/utils.d.ts +11 -0
  536. package/dist/providers/openrouter/utils.d.ts.map +1 -0
  537. package/dist/providers/openrouter/utils.js +29 -0
  538. package/dist/providers/openrouter/utils.js.map +1 -0
  539. package/dist/providers/openrouter.api.retry.test.d.ts +2 -0
  540. package/dist/providers/openrouter.api.retry.test.d.ts.map +1 -0
  541. package/dist/providers/openrouter.api.retry.test.js +148 -0
  542. package/dist/providers/openrouter.api.retry.test.js.map +1 -0
  543. package/dist/providers/openrouter.test.d.ts +2 -0
  544. package/dist/providers/openrouter.test.d.ts.map +1 -0
  545. package/dist/providers/openrouter.test.js +1449 -0
  546. package/dist/providers/openrouter.test.js.map +1 -0
  547. package/dist/providers/protocol-client.d.ts +17 -0
  548. package/dist/providers/protocol-client.d.ts.map +1 -0
  549. package/dist/providers/protocol-client.js +57 -0
  550. package/dist/providers/protocol-client.js.map +1 -0
  551. package/dist/providers/protocol-client.test.d.ts +2 -0
  552. package/dist/providers/protocol-client.test.d.ts.map +1 -0
  553. package/dist/providers/protocol-client.test.js +55 -0
  554. package/dist/providers/protocol-client.test.js.map +1 -0
  555. package/dist/safety-checker.js +57 -0
  556. package/dist/scripts/eval-auto-approval/runner.js +1 -1
  557. package/dist/scripts/eval-auto-approval/runner.js.map +1 -1
  558. package/dist/services/approval/approval-flow-coordinator.d.ts.map +1 -1
  559. package/dist/services/approval/approval-flow-coordinator.js +43 -3
  560. package/dist/services/approval/approval-flow-coordinator.js.map +1 -1
  561. package/dist/services/approval/shell-sandbox-approval.d.ts +2 -0
  562. package/dist/services/approval/shell-sandbox-approval.d.ts.map +1 -0
  563. package/dist/services/approval/shell-sandbox-approval.js +7 -0
  564. package/dist/services/approval/shell-sandbox-approval.js.map +1 -0
  565. package/dist/services/approval/tool-approval-batch-coordinator.d.ts.map +1 -1
  566. package/dist/services/approval/tool-approval-batch-coordinator.js +4 -2
  567. package/dist/services/approval/tool-approval-batch-coordinator.js.map +1 -1
  568. package/dist/services/approval-flow-coordinator.js +1 -1
  569. package/dist/services/approval-flow-coordinator.js.map +1 -1
  570. package/dist/services/approval-state.d.ts +1 -1
  571. package/dist/services/approval-state.d.ts.map +1 -1
  572. package/dist/services/check_mock.d.ts +2 -0
  573. package/dist/services/check_mock.d.ts.map +1 -0
  574. package/dist/services/check_mock.js +22 -0
  575. package/dist/services/check_mock.js.map +1 -0
  576. package/dist/services/continuation-driver.js +1 -1
  577. package/dist/services/continuation-driver.js.map +1 -1
  578. package/dist/services/conversation/conversation-adapter.d.ts +2 -1
  579. package/dist/services/conversation/conversation-adapter.d.ts.map +1 -1
  580. package/dist/services/conversation/conversation-adapter.js +4 -1
  581. package/dist/services/conversation/conversation-adapter.js.map +1 -1
  582. package/dist/services/conversation/conversation-replay.js +1 -1
  583. package/dist/services/conversation/conversation-replay.js.map +1 -1
  584. package/dist/services/conversation/conversation-result-builder.d.ts +2 -0
  585. package/dist/services/conversation/conversation-result-builder.d.ts.map +1 -1
  586. package/dist/services/conversation/conversation-result-builder.js +31 -2
  587. package/dist/services/conversation/conversation-result-builder.js.map +1 -1
  588. package/dist/services/conversation/conversation-service.d.ts +8 -0
  589. package/dist/services/conversation/conversation-service.d.ts.map +1 -1
  590. package/dist/services/conversation/conversation-service.js +14 -0
  591. package/dist/services/conversation/conversation-service.js.map +1 -1
  592. package/dist/services/conversation/conversation-store.d.ts +13 -0
  593. package/dist/services/conversation/conversation-store.d.ts.map +1 -1
  594. package/dist/services/conversation/conversation-store.js +72 -13
  595. package/dist/services/conversation/conversation-store.js.map +1 -1
  596. package/dist/services/conversation-adapter.d.ts +3 -2
  597. package/dist/services/conversation-adapter.d.ts.map +1 -1
  598. package/dist/services/conversation-adapter.js +10 -8
  599. package/dist/services/conversation-adapter.js.map +1 -1
  600. package/dist/services/conversation-events.d.ts +1 -1
  601. package/dist/services/conversation-events.d.ts.map +1 -1
  602. package/dist/services/conversation-log-events.d.ts +1 -1
  603. package/dist/services/conversation-log-events.d.ts.map +1 -1
  604. package/dist/services/conversation-replay.d.ts +1 -1
  605. package/dist/services/conversation-replay.d.ts.map +1 -1
  606. package/dist/services/conversation-replay.js +1 -1
  607. package/dist/services/conversation-replay.js.map +1 -1
  608. package/dist/services/conversation-result-builder.d.ts +1 -1
  609. package/dist/services/conversation-result-builder.d.ts.map +1 -1
  610. package/dist/services/conversation-result-builder.js +2 -2
  611. package/dist/services/conversation-result-builder.js.map +1 -1
  612. package/dist/services/conversation-result-builder.test.js +3 -3
  613. package/dist/services/conversation-result-builder.test.js.map +1 -1
  614. package/dist/services/conversation-service.test.js +2 -2
  615. package/dist/services/conversation-service.test.js.map +1 -1
  616. package/dist/services/conversation-session-composition.d.ts +3 -1
  617. package/dist/services/conversation-session-composition.d.ts.map +1 -1
  618. package/dist/services/conversation-session-composition.js +3 -2
  619. package/dist/services/conversation-session-composition.js.map +1 -1
  620. package/dist/services/conversation-session-factory.d.ts +3 -1
  621. package/dist/services/conversation-session-factory.d.ts.map +1 -1
  622. package/dist/services/conversation-session-factory.js +7 -1
  623. package/dist/services/conversation-session-factory.js.map +1 -1
  624. package/dist/services/conversation-session.characterization.test.js +23 -13
  625. package/dist/services/conversation-session.characterization.test.js.map +1 -1
  626. package/dist/services/conversation-store.merge-modes.removed.d.ts +2 -0
  627. package/dist/services/conversation-store.merge-modes.removed.d.ts.map +1 -0
  628. package/dist/services/conversation-store.merge-modes.removed.js +2 -0
  629. package/dist/services/conversation-store.merge-modes.removed.js.map +1 -0
  630. package/dist/services/conversation-store.merge-modes.test.d.ts.map +1 -1
  631. package/dist/services/conversation-store.merge-modes.test.js +1 -160
  632. package/dist/services/conversation-store.merge-modes.test.js.map +1 -1
  633. package/dist/services/conversation-turn-runner.d.ts +2 -1
  634. package/dist/services/conversation-turn-runner.d.ts.map +1 -1
  635. package/dist/services/logging/logging-service.d.ts.map +1 -1
  636. package/dist/services/logging/logging-service.js +4 -2
  637. package/dist/services/logging/logging-service.js.map +1 -1
  638. package/dist/services/logging-service.js +1 -1
  639. package/dist/services/logging-service.js.map +1 -1
  640. package/dist/services/model-service.d.ts +1 -1
  641. package/dist/services/model-service.d.ts.map +1 -1
  642. package/dist/services/model-service.js +7 -2
  643. package/dist/services/model-service.js.map +1 -1
  644. package/dist/services/repro-error.test.d.ts +2 -0
  645. package/dist/services/repro-error.test.d.ts.map +1 -0
  646. package/dist/services/repro-error.test.js +38 -0
  647. package/dist/services/repro-error.test.js.map +1 -0
  648. package/dist/services/rtk-service.d.ts.map +1 -1
  649. package/dist/services/rtk-service.js +6 -2
  650. package/dist/services/rtk-service.js.map +1 -1
  651. package/dist/services/session/continuation-driver.test.js +169 -7
  652. package/dist/services/session/continuation-driver.test.js.map +1 -1
  653. package/dist/services/session/continuation-recovery-handler.test.js +3 -4
  654. package/dist/services/session/continuation-recovery-handler.test.js.map +1 -1
  655. package/dist/services/session/conversation-session.d.ts +1 -0
  656. package/dist/services/session/conversation-session.d.ts.map +1 -1
  657. package/dist/services/session/conversation-session.js.map +1 -1
  658. package/dist/services/session/initial-input-preparer.d.ts +1 -0
  659. package/dist/services/session/initial-input-preparer.d.ts.map +1 -1
  660. package/dist/services/session/initial-input-preparer.js +2 -1
  661. package/dist/services/session/initial-input-preparer.js.map +1 -1
  662. package/dist/services/session/initial-turn-runner.d.ts.map +1 -1
  663. package/dist/services/session/initial-turn-runner.js +11 -3
  664. package/dist/services/session/initial-turn-runner.js.map +1 -1
  665. package/dist/services/session/session-adapter-bridge.d.ts +1 -11
  666. package/dist/services/session/session-adapter-bridge.d.ts.map +1 -1
  667. package/dist/services/session/session-adapter-bridge.js +1 -10
  668. package/dist/services/session/session-adapter-bridge.js.map +1 -1
  669. package/dist/services/session/session-composition.d.ts +1 -0
  670. package/dist/services/session/session-composition.d.ts.map +1 -1
  671. package/dist/services/session/session-composition.js +1 -0
  672. package/dist/services/session/session-composition.js.map +1 -1
  673. package/dist/services/session/session-factory.d.ts +46 -3
  674. package/dist/services/session/session-factory.d.ts.map +1 -1
  675. package/dist/services/session/session-factory.js +44 -3
  676. package/dist/services/session/session-factory.js.map +1 -1
  677. package/dist/services/session/session-factory.test.js +17 -18
  678. package/dist/services/session/session-factory.test.js.map +1 -1
  679. package/dist/services/session/session-input-planner.d.ts +1 -0
  680. package/dist/services/session/session-input-planner.d.ts.map +1 -1
  681. package/dist/services/session/session-input-planner.js +30 -2
  682. package/dist/services/session/session-input-planner.js.map +1 -1
  683. package/dist/services/session/session-lifecycle.d.ts +4 -0
  684. package/dist/services/session/session-lifecycle.d.ts.map +1 -1
  685. package/dist/services/session/session-lifecycle.js +10 -0
  686. package/dist/services/session/session-lifecycle.js.map +1 -1
  687. package/dist/services/session/session-manager.d.ts +14 -0
  688. package/dist/services/session/session-manager.d.ts.map +1 -1
  689. package/dist/services/session/session-manager.js +21 -0
  690. package/dist/services/session/session-manager.js.map +1 -1
  691. package/dist/services/session/session-stream-processor.d.ts.map +1 -1
  692. package/dist/services/session/session-stream-processor.js +13 -0
  693. package/dist/services/session/session-stream-processor.js.map +1 -1
  694. package/dist/services/session/session-tool-tracker.d.ts +14 -1
  695. package/dist/services/session/session-tool-tracker.d.ts.map +1 -1
  696. package/dist/services/session/session-tool-tracker.js +20 -5
  697. package/dist/services/session/session-tool-tracker.js.map +1 -1
  698. package/dist/services/session/test-helpers/conversation-session-fixtures.d.ts +12 -0
  699. package/dist/services/session/test-helpers/conversation-session-fixtures.d.ts.map +1 -0
  700. package/dist/services/session/test-helpers/conversation-session-fixtures.js +29 -0
  701. package/dist/services/session/test-helpers/conversation-session-fixtures.js.map +1 -0
  702. package/dist/services/session/turn-attempt-factory.d.ts +1 -0
  703. package/dist/services/session/turn-attempt-factory.d.ts.map +1 -1
  704. package/dist/services/session/turn-attempt-factory.js +1 -1
  705. package/dist/services/session/turn-attempt-factory.js.map +1 -1
  706. package/dist/services/session/turn-coordinator.d.ts +3 -0
  707. package/dist/services/session/turn-coordinator.d.ts.map +1 -1
  708. package/dist/services/session/turn-coordinator.js +6 -6
  709. package/dist/services/session/turn-coordinator.js.map +1 -1
  710. package/dist/services/session/turn-executor.d.ts.map +1 -1
  711. package/dist/services/session/turn-executor.js +1 -0
  712. package/dist/services/session/turn-executor.js.map +1 -1
  713. package/dist/services/session-state-facade.d.ts +2 -2
  714. package/dist/services/session-state-facade.d.ts.map +1 -1
  715. package/dist/services/session-state-facade.js.map +1 -1
  716. package/dist/services/settings/settings-merger.d.ts.map +1 -1
  717. package/dist/services/settings/settings-merger.js +7 -5
  718. package/dist/services/settings/settings-merger.js.map +1 -1
  719. package/dist/services/settings/settings-persistence.js +1 -1
  720. package/dist/services/settings/settings-persistence.js.map +1 -1
  721. package/dist/services/settings/settings-schema.d.ts +25 -0
  722. package/dist/services/settings/settings-schema.d.ts.map +1 -1
  723. package/dist/services/settings/settings-schema.js +23 -2
  724. package/dist/services/settings/settings-schema.js.map +1 -1
  725. package/dist/services/settings/settings-sources.d.ts.map +1 -1
  726. package/dist/services/settings/settings-sources.js +5 -0
  727. package/dist/services/settings/settings-sources.js.map +1 -1
  728. package/dist/services/shell-auto-approval-evaluator.js +1 -1
  729. package/dist/services/shell-auto-approval-evaluator.js.map +1 -1
  730. package/dist/services/skills/skills-service.d.ts.map +1 -1
  731. package/dist/services/skills/skills-service.js +12 -19
  732. package/dist/services/skills/skills-service.js.map +1 -1
  733. package/dist/services/skills/skills-service.test.js +19 -0
  734. package/dist/services/skills/skills-service.test.js.map +1 -1
  735. package/dist/services/subagents/reasoning-inheritance.test.d.ts +2 -0
  736. package/dist/services/subagents/reasoning-inheritance.test.d.ts.map +1 -0
  737. package/dist/services/subagents/reasoning-inheritance.test.js +73 -0
  738. package/dist/services/subagents/reasoning-inheritance.test.js.map +1 -0
  739. package/dist/services/subagents/role-loader.js +3 -3
  740. package/dist/services/subagents/role-loader.js.map +1 -1
  741. package/dist/services/subagents/subagent-manager-abort-state.test.d.ts +2 -0
  742. package/dist/services/subagents/subagent-manager-abort-state.test.d.ts.map +1 -0
  743. package/dist/services/subagents/subagent-manager-abort-state.test.js +36 -0
  744. package/dist/services/subagents/subagent-manager-abort-state.test.js.map +1 -0
  745. package/dist/services/subagents/subagent-manager-abort.test.d.ts +2 -0
  746. package/dist/services/subagents/subagent-manager-abort.test.d.ts.map +1 -0
  747. package/dist/services/subagents/subagent-manager-abort.test.js +3 -0
  748. package/dist/services/subagents/subagent-manager-abort.test.js.map +1 -0
  749. package/dist/services/subagents/test-helpers/subagent-manager-fixtures.d.ts +35 -0
  750. package/dist/services/subagents/test-helpers/subagent-manager-fixtures.d.ts.map +1 -0
  751. package/dist/services/subagents/test-helpers/subagent-manager-fixtures.js +174 -0
  752. package/dist/services/subagents/test-helpers/subagent-manager-fixtures.js.map +1 -0
  753. package/dist/services/subagents/tool-policy.d.ts.map +1 -1
  754. package/dist/services/subagents/tool-policy.js +22 -3
  755. package/dist/services/subagents/tool-policy.js.map +1 -1
  756. package/dist/services/tool-execution-ledger.d.ts +42 -1
  757. package/dist/services/tool-execution-ledger.d.ts.map +1 -1
  758. package/dist/services/tool-execution-ledger.js +117 -1
  759. package/dist/services/tool-execution-ledger.js.map +1 -1
  760. package/dist/services/turn-item-accumulator.d.ts +1 -1
  761. package/dist/services/turn-item-accumulator.d.ts.map +1 -1
  762. package/dist/tools/agent/activate-skill.js +1 -1
  763. package/dist/tools/agent/activate-skill.js.map +1 -1
  764. package/dist/tools/agent/ask-user.d.ts.map +1 -1
  765. package/dist/tools/agent/ask-user.js +4 -15
  766. package/dist/tools/agent/ask-user.js.map +1 -1
  767. package/dist/tools/agent/ask-user.test.js +50 -11
  768. package/dist/tools/agent/ask-user.test.js.map +1 -1
  769. package/dist/tools/agent/run-subagent.d.ts.map +1 -1
  770. package/dist/tools/agent/run-subagent.js +2 -5
  771. package/dist/tools/agent/run-subagent.js.map +1 -1
  772. package/dist/tools/bash.d.ts +10 -0
  773. package/dist/tools/bash.d.ts.map +1 -0
  774. package/dist/tools/bash.js +55 -0
  775. package/dist/tools/bash.js.map +1 -0
  776. package/dist/tools/file/apply-patch.js +2 -2
  777. package/dist/tools/file/apply-patch.js.map +1 -1
  778. package/dist/tools/file/apply-patch.test.js +27 -0
  779. package/dist/tools/file/apply-patch.test.js.map +1 -1
  780. package/dist/tools/file/code-context.d.ts +27 -0
  781. package/dist/tools/file/code-context.d.ts.map +1 -0
  782. package/dist/tools/file/code-context.js +542 -0
  783. package/dist/tools/file/code-context.js.map +1 -0
  784. package/dist/tools/file/create-file.d.ts.map +1 -1
  785. package/dist/tools/file/create-file.js +2 -5
  786. package/dist/tools/file/create-file.js.map +1 -1
  787. package/dist/tools/file/create-file.test.js +24 -0
  788. package/dist/tools/file/create-file.test.js.map +1 -1
  789. package/dist/tools/file/find-files.d.ts.map +1 -1
  790. package/dist/tools/file/find-files.js +53 -28
  791. package/dist/tools/file/find-files.js.map +1 -1
  792. package/dist/tools/file/glob.d.ts +18 -0
  793. package/dist/tools/file/glob.d.ts.map +1 -0
  794. package/dist/tools/file/glob.js +216 -0
  795. package/dist/tools/file/glob.js.map +1 -0
  796. package/dist/tools/file/grep.d.ts +21 -0
  797. package/dist/tools/file/grep.d.ts.map +1 -0
  798. package/dist/tools/file/grep.js +221 -0
  799. package/dist/tools/file/grep.js.map +1 -0
  800. package/dist/tools/file/read-file.d.ts.map +1 -1
  801. package/dist/tools/file/read-file.js +24 -6
  802. package/dist/tools/file/read-file.js.map +1 -1
  803. package/dist/tools/file/search-replace.d.ts.map +1 -1
  804. package/dist/tools/file/search-replace.js +4 -6
  805. package/dist/tools/file/search-replace.js.map +1 -1
  806. package/dist/tools/file/search-replace.test.js +30 -0
  807. package/dist/tools/file/search-replace.test.js.map +1 -1
  808. package/dist/tools/format-helpers.js +0 -2
  809. package/dist/tools/format-helpers.js.map +1 -1
  810. package/dist/tools/language-providers.d.ts.map +1 -1
  811. package/dist/tools/language-providers.js +0 -379
  812. package/dist/tools/language-providers.js.map +1 -1
  813. package/dist/tools/languages/csharp.js +1 -1
  814. package/dist/tools/languages/csharp.js.map +1 -1
  815. package/dist/tools/languages/java.js +1 -1
  816. package/dist/tools/languages/java.js.map +1 -1
  817. package/dist/tools/search.d.ts.map +1 -1
  818. package/dist/tools/search.js +2 -1
  819. package/dist/tools/search.js.map +1 -1
  820. package/dist/tools/system/code-context.d.ts.map +1 -1
  821. package/dist/tools/system/code-context.js +28 -10
  822. package/dist/tools/system/code-context.js.map +1 -1
  823. package/dist/tools/system/grep.d.ts +4 -6
  824. package/dist/tools/system/grep.d.ts.map +1 -1
  825. package/dist/tools/system/grep.js +83 -50
  826. package/dist/tools/system/grep.js.map +1 -1
  827. package/dist/tools/system/shell.d.ts +10 -1
  828. package/dist/tools/system/shell.d.ts.map +1 -1
  829. package/dist/tools/system/shell.js +136 -10
  830. package/dist/tools/system/shell.js.map +1 -1
  831. package/dist/tools/types.d.ts +1 -1
  832. package/dist/tools/types.d.ts.map +1 -1
  833. package/dist/tools/utils.d.ts +4 -0
  834. package/dist/tools/utils.d.ts.map +1 -1
  835. package/dist/tools/utils.js +17 -5
  836. package/dist/tools/utils.js.map +1 -1
  837. package/dist/tools/web/web-fetch.js +1 -1
  838. package/dist/tools/web/web-fetch.js.map +1 -1
  839. package/dist/utils/command-safety/handlers/script-handler.d.ts +3 -0
  840. package/dist/utils/command-safety/handlers/script-handler.d.ts.map +1 -0
  841. package/dist/utils/command-safety/handlers/script-handler.js +92 -0
  842. package/dist/utils/command-safety/handlers/script-handler.js.map +1 -0
  843. package/dist/utils/command-safety/handlers/script-handler.test.d.ts +2 -0
  844. package/dist/utils/command-safety/handlers/script-handler.test.d.ts.map +1 -0
  845. package/dist/utils/command-safety/handlers/script-handler.test.js +44 -0
  846. package/dist/utils/command-safety/handlers/script-handler.test.js.map +1 -0
  847. package/dist/utils/command-safety/index.test.d.ts +2 -0
  848. package/dist/utils/command-safety/index.test.d.ts.map +1 -0
  849. package/dist/utils/command-safety/index.test.js +22 -0
  850. package/dist/utils/command-safety/index.test.js.map +1 -0
  851. package/dist/utils/command-safety.d.ts +21 -0
  852. package/dist/utils/command-safety.d.ts.map +1 -0
  853. package/dist/utils/command-safety.devnull.test.d.ts +2 -0
  854. package/dist/utils/command-safety.devnull.test.d.ts.map +1 -0
  855. package/dist/utils/command-safety.devnull.test.js +13 -0
  856. package/dist/utils/command-safety.devnull.test.js.map +1 -0
  857. package/dist/utils/command-safety.js +348 -0
  858. package/dist/utils/command-safety.js.map +1 -0
  859. package/dist/utils/conversation/conversation-event-handler.js +1 -1
  860. package/dist/utils/conversation/conversation-event-handler.js.map +1 -1
  861. package/dist/utils/conversation/message-utils.d.ts +5 -0
  862. package/dist/utils/conversation/message-utils.d.ts.map +1 -1
  863. package/dist/utils/conversation/message-utils.js +20 -0
  864. package/dist/utils/conversation/message-utils.js.map +1 -1
  865. package/dist/utils/conversation/test-helpers/event-handler-fixtures.d.ts +31 -0
  866. package/dist/utils/conversation/test-helpers/event-handler-fixtures.d.ts.map +1 -0
  867. package/dist/utils/conversation/test-helpers/event-handler-fixtures.js +42 -0
  868. package/dist/utils/conversation/test-helpers/event-handler-fixtures.js.map +1 -0
  869. package/dist/utils/extract-command-messages.test.js +6 -6
  870. package/dist/utils/extract-command-messages.test.js.map +1 -1
  871. package/dist/utils/output/output-trim.d.ts +1 -1
  872. package/dist/utils/output/output-trim.js +1 -1
  873. package/dist/utils/project-tree.d.ts +7 -12
  874. package/dist/utils/project-tree.d.ts.map +1 -1
  875. package/dist/utils/project-tree.js +184 -83
  876. package/dist/utils/project-tree.js.map +1 -1
  877. package/dist/utils/provider-traffic-extractor.repro.test.d.ts +2 -0
  878. package/dist/utils/provider-traffic-extractor.repro.test.d.ts.map +1 -0
  879. package/dist/utils/provider-traffic-extractor.repro.test.js.map +1 -0
  880. package/dist/utils/settings-command.d.ts +2 -2
  881. package/dist/utils/settings-command.d.ts.map +1 -1
  882. package/dist/utils/settings-command.js +2 -2
  883. package/dist/utils/settings-command.js.map +1 -1
  884. package/dist/utils/shell/command-safety/find-helpers.js +1 -1
  885. package/dist/utils/shell/command-safety/find-helpers.js.map +1 -1
  886. package/dist/utils/shell/command-safety/handlers/git-handler.js +1 -1
  887. package/dist/utils/shell/command-safety/handlers/git-handler.js.map +1 -1
  888. package/dist/utils/shell/execute-shell.d.ts +2 -0
  889. package/dist/utils/shell/execute-shell.d.ts.map +1 -1
  890. package/dist/utils/shell/execute-shell.js +9 -6
  891. package/dist/utils/shell/execute-shell.js.map +1 -1
  892. package/dist/utils/shell/sandbox/denied-read-detector.d.ts +39 -0
  893. package/dist/utils/shell/sandbox/denied-read-detector.d.ts.map +1 -0
  894. package/dist/utils/shell/sandbox/denied-read-detector.js +250 -0
  895. package/dist/utils/shell/sandbox/denied-read-detector.js.map +1 -0
  896. package/dist/utils/shell/sandbox/denied-read-stores.d.ts +74 -0
  897. package/dist/utils/shell/sandbox/denied-read-stores.d.ts.map +1 -0
  898. package/dist/utils/shell/sandbox/denied-read-stores.js +166 -0
  899. package/dist/utils/shell/sandbox/denied-read-stores.js.map +1 -0
  900. package/dist/utils/shell/sandbox/sandbox-env.d.ts +7 -0
  901. package/dist/utils/shell/sandbox/sandbox-env.d.ts.map +1 -0
  902. package/dist/utils/shell/sandbox/sandbox-env.js +40 -0
  903. package/dist/utils/shell/sandbox/sandbox-env.js.map +1 -0
  904. package/dist/utils/shell/sandbox/sandbox-policy.d.ts +41 -0
  905. package/dist/utils/shell/sandbox/sandbox-policy.d.ts.map +1 -0
  906. package/dist/utils/shell/sandbox/sandbox-policy.js +217 -0
  907. package/dist/utils/shell/sandbox/sandbox-policy.js.map +1 -0
  908. package/dist/utils/shell/sandbox/shell-sandbox-runner.d.ts +18 -0
  909. package/dist/utils/shell/sandbox/shell-sandbox-runner.d.ts.map +1 -0
  910. package/dist/utils/shell/sandbox/shell-sandbox-runner.js +58 -0
  911. package/dist/utils/shell/sandbox/shell-sandbox-runner.js.map +1 -0
  912. package/dist/utils/shell/shell-output.d.ts.map +1 -1
  913. package/dist/utils/shell/shell-output.js +8 -6
  914. package/dist/utils/shell/shell-output.js.map +1 -1
  915. package/dist/utils/shell/temp-dir.d.ts +10 -0
  916. package/dist/utils/shell/temp-dir.d.ts.map +1 -0
  917. package/dist/utils/shell/temp-dir.js +68 -0
  918. package/dist/utils/shell/temp-dir.js.map +1 -0
  919. package/dist/utils/skill-discovery-paths.d.ts +5 -0
  920. package/dist/utils/skill-discovery-paths.d.ts.map +1 -0
  921. package/dist/utils/skill-discovery-paths.js +18 -0
  922. package/dist/utils/skill-discovery-paths.js.map +1 -0
  923. package/package.json +10 -16
  924. package/dist/components/ModelSelectionMenu.debug.test.d.ts +0 -2
  925. package/dist/components/ModelSelectionMenu.debug.test.d.ts.map +0 -1
  926. package/dist/components/ModelSelectionMenu.debug.test.js.map +0 -1
  927. package/dist/hooks/conversation-ui-reducer.multi-select.test.d.ts +0 -2
  928. package/dist/hooks/conversation-ui-reducer.multi-select.test.d.ts.map +0 -1
  929. package/dist/hooks/conversation-ui-reducer.multi-select.test.js +0 -123
  930. package/dist/hooks/conversation-ui-reducer.multi-select.test.js.map +0 -1
  931. package/dist/hooks/use-conversation.ask-user-multi-select.test.d.ts +0 -2
  932. package/dist/hooks/use-conversation.ask-user-multi-select.test.d.ts.map +0 -1
  933. package/dist/hooks/use-conversation.ask-user-multi-select.test.js +0 -159
  934. package/dist/hooks/use-conversation.ask-user-multi-select.test.js.map +0 -1
  935. package/dist/inspect_zod.d.ts +0 -2
  936. package/dist/inspect_zod.d.ts.map +0 -1
  937. package/dist/inspect_zod.js +0 -16
  938. package/dist/inspect_zod.js.map +0 -1
  939. package/dist/prompts/simple_prev2.md +0 -33
  940. package/dist/services/conversation-result-resolver.d.ts +0 -25
  941. package/dist/services/conversation-result-resolver.d.ts.map +0 -1
  942. package/dist/services/conversation-result-resolver.js +0 -79
  943. package/dist/services/conversation-result-resolver.js.map +0 -1
  944. package/dist/services/conversation-result-resolver.test.d.ts +0 -2
  945. package/dist/services/conversation-result-resolver.test.d.ts.map +0 -1
  946. package/dist/services/conversation-result-resolver.test.js +0 -186
  947. package/dist/services/conversation-result-resolver.test.js.map +0 -1
  948. package/dist/services/session-state-controller.test.d.ts +0 -2
  949. package/dist/services/session-state-controller.test.d.ts.map +0 -1
  950. package/dist/services/session-state-controller.test.js +0 -125
  951. package/dist/services/session-state-controller.test.js.map +0 -1
  952. package/dist/services/turn-execution-orchestrator.d.ts +0 -79
  953. package/dist/services/turn-execution-orchestrator.d.ts.map +0 -1
  954. package/dist/services/turn-execution-orchestrator.js +0 -687
  955. package/dist/services/turn-execution-orchestrator.js.map +0 -1
  956. package/dist/services/turn-execution-orchestrator.test.d.ts +0 -2
  957. package/dist/services/turn-execution-orchestrator.test.d.ts.map +0 -1
  958. package/dist/services/turn-execution-orchestrator.test.js +0 -236
  959. package/dist/services/turn-execution-orchestrator.test.js.map +0 -1
  960. package/dist/utils/command-safety/_scratch-classify.test.d.ts +0 -2
  961. package/dist/utils/command-safety/_scratch-classify.test.d.ts.map +0 -1
  962. package/dist/utils/command-safety/_scratch-classify.test.js +0 -22
  963. package/dist/utils/command-safety/_scratch-classify.test.js.map +0 -1
  964. package/dist/utils/command-safety/scratch-classify.test.d.ts +0 -2
  965. package/dist/utils/command-safety/scratch-classify.test.d.ts.map +0 -1
  966. package/dist/utils/command-safety/scratch-classify.test.js +0 -22
  967. package/dist/utils/command-safety/scratch-classify.test.js.map +0 -1
  968. package/dist/utils/command-safety/scratch-tally.test.d.ts +0 -2
  969. package/dist/utils/command-safety/scratch-tally.test.d.ts.map +0 -1
  970. package/dist/utils/command-safety/scratch-tally.test.js +0 -68
  971. package/dist/utils/command-safety/scratch-tally.test.js.map +0 -1
  972. package/dist/utils/project-tree.test.d.ts +0 -2
  973. package/dist/utils/project-tree.test.d.ts.map +0 -1
  974. package/dist/utils/project-tree.test.js +0 -149
  975. package/dist/utils/project-tree.test.js.map +0 -1
  976. package/dist/utils/terminal-clear.d.ts +0 -7
  977. package/dist/utils/terminal-clear.d.ts.map +0 -1
  978. package/dist/utils/terminal-clear.js +0 -5
  979. package/dist/utils/terminal-clear.js.map +0 -1
  980. package/dist/utils/terminal-clear.test.d.ts +0 -2
  981. package/dist/utils/terminal-clear.test.d.ts.map +0 -1
  982. package/dist/utils/terminal-clear.test.js +0 -13
  983. package/dist/utils/terminal-clear.test.js.map +0 -1
  984. package/dist/utils/test-render.d.ts +0 -14
  985. package/dist/utils/test-render.d.ts.map +0 -1
  986. package/dist/utils/test-render.js +0 -44
  987. package/dist/utils/test-render.js.map +0 -1
  988. package/readme.md +0 -887
  989. /package/dist/components/{Input → input}/input-width.test.d.ts +0 -0
  990. /package/dist/components/{Input → input}/input-width.test.d.ts.map +0 -0
  991. /package/dist/components/{Input → input}/input-width.test.js +0 -0
  992. /package/dist/components/{Input → input}/input-width.test.js.map +0 -0
  993. /package/dist/components/{Input → input}/insertions.test.d.ts +0 -0
  994. /package/dist/components/{Input → input}/insertions.test.d.ts.map +0 -0
  995. /package/dist/components/{Input → input}/insertions.test.js +0 -0
  996. /package/dist/components/{Input → input}/insertions.test.js.map +0 -0
package/readme.md DELETED
@@ -1,887 +0,0 @@
1
- # term2
2
-
3
- [![npm version](https://img.shields.io/npm/v/@qduc/term2.svg)](https://www.npmjs.com/package/@qduc/term2)
4
- [![License: MIT](https://img.shields.io/badge/License-MIT-blue.svg)](https://opensource.org/licenses/MIT)
5
-
6
- A powerful terminal-based AI assistant that helps you get things done on your computer through natural conversation.
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
-
10
- ## Demo
11
-
12
- https://github.com/user-attachments/assets/ac960d65-f7c8-453a-9440-91f6397ae842
13
-
14
- ## Features
15
-
16
- - 🎭 **Five Operating Modes** - Standard (full-power, auto-approves patches), Lite (fast & safe), Mentor (expert model advice), Plan (read-only research/planning), and Orchestrator (delegates task execution to subagents)
17
- - 🌍 **Open Source** - MIT licensed, hackable, auditable, community-driven
18
- - 🤖 **Multi-Provider Support** - Works with OpenAI, OpenRouter, OpenAI-compatible APIs, and Vercel AI SDK providers
19
- - 🔒 **Safe Execution** - Every command requires your explicit approval with diff preview
20
- - 🛠️ **Advanced Tools** - Shell execution, file patching, search/replace (with `<...>` gap matching), grep, find files, file reading, file creation, web search, web fetching, code outline & context search, mentor consultation, and subagent invocation
21
- - 👥 **Subagent Delegation** - Spawn specialized, synchronous subagents (`explorer`, `worker`, `researcher`, `mentor`) to perform sub-tasks in parallel while conserving your main context
22
- - ⏪ **Conversation Undo & Rewind** - Undo the last turn or select any past user message to rewind the conversation state back to that point
23
- - 💾 **Conversation Resumption & Persistence** - Saved conversations are persisted using robust event logging and can be resumed later using the `--resume` flag
24
- - 💬 **Slash Commands** - Quick actions like `/clear`, `/quit`, `/model`, `/mentor`, `/lite`, `/copy`, `/auto-approve`, `/plan`, `/undo`, `/usage`, `/effort`, `/handoff`, `/retry`, and `/orchestrator` for easy control
25
- - 📝 **Smart Context** - The assistant understands your environment and provides relevant help
26
- - 🎯 **Streaming Responses** - See the AI's thoughts and reasoning in real-time
27
- - 🧠 **Reasoning Effort Control** - Configurable reasoning levels (minimal to high) for O1/O3 models
28
- - ⚡ **Command History** - Navigate previous inputs with arrow keys
29
- - 🎨 **Markdown Rendering** - Formatted code blocks, tables, and text in the terminal
30
- - 🔄 **Retry Logic** - Automatic recovery from tool hallucinations and upstream errors
31
- - 🌐 **SSH Mode** - Execute commands and edit files on remote servers over SSH
32
- - 🤖 **Non-Interactive Mode** - Run commands from the CLI without starting the full UI
33
- - ✏️ **Standard Mode** - Auto-approves file edits in your workspace for faster development (active by default)
34
- - 🛡️ **Smart Shell Auto-Approval** - A hybrid local-heuristic + LLM-based safety evaluator that auto-approves safe commands, eliminating prompt fatigue while strictly blocking risky ones (with detailed reasoning explanations)
35
- - 🖼️ **Image Pasting** - Paste images from your clipboard directly into the terminal for vision-model analysis
36
- - 📈 **Real-time Token Usage** - Live token consumption displayed during streaming
37
-
38
-
39
- ## Why term2 vs Alternatives?
40
-
41
- | | **term2** | **Claude Code** | **Warp** |
42
- | --- | --- | --- | --- |
43
- | **Open Source** | ✅ MIT | ❌ Proprietary | ✅ Open Source |
44
- | **Cost** | Pay-per-use API | $20 - $200/mo (or API) | Freemium / Paid tiers |
45
- | **AI Providers** | Any (OpenAI, OpenRouter, local) | Anthropic only | Selected models / BYOLLM |
46
- | **SSH / Remote** | ✅ Native | ✅ Yes (Remote Control/SSH) | ✅ Yes |
47
- | **Mentor Mode** | ✅ Built-in | ❌ No | ❌ No |
48
- | **Self-Hostable** | ✅ Yes | ❌ No (Requires Anthropic) | ❌ Cloud elements (Oz) |
49
-
50
- **term2 gives you:**
51
-
52
- - **Freedom** — No vendor lock-in. Use any AI provider or model you prefer.
53
- - **Transparency** — Open source means you can audit every line of code.
54
- - **Cost Control** — Pay only for API usage, no monthly subscriptions.
55
- - **Remote Work** — Troubleshoot and manage remote servers without installing anything on remote hosts.
56
- - **Safety** — Every command requires explicit approval with diff previews before execution.
57
-
58
- ## Installation
59
-
60
- **Requirements:**
61
-
62
- - Node.js 20 or higher
63
- - An API key from OpenAI, OpenRouter, or any OpenAI-compatible provider
64
-
65
- Install globally via npm:
66
-
67
- ```bash
68
- npm install --global @qduc/term2
69
- ```
70
-
71
- Set your API key as an environment variable (see [Configuration](#configuration) section for details):
72
-
73
- ```bash
74
- export OPENAI_API_KEY="your-api-key-here"
75
- ```
76
-
77
- ## Usage
78
-
79
- Start the assistant:
80
-
81
- ```bash
82
- term2 # Start in standard mode (full capabilities, auto-approves patches)
83
- term2 --lite # Start in lite mode (fast, read-only)
84
- ```
85
-
86
- Then simply chat with the AI! Type your question or request, press Enter, and the assistant will help you.
87
-
88
- **New to term2?**
89
-
90
- - Working on a codebase/project? Use standard mode: `term2`
91
- - Just need general terminal help? Use lite mode: `term2 --lite`
92
- - Tackling a complex problem? Enable mentor mode with `/mentor` command
93
-
94
- See the "Operating Modes" section below for full details.
95
-
96
- ### Basic Examples
97
-
98
- ```
99
- "What files are in my current directory?"
100
- "Show me my git status"
101
- "Create a backup of my documents folder"
102
- "What's using port 3000?"
103
- ```
104
-
105
- ### Advanced Examples
106
-
107
- ```
108
- "Find all TODO comments in my JavaScript files"
109
- "Help me debug why my server won't start on port 8080"
110
- "Create a new React component called UserProfile"
111
- "Show me the disk usage of my home directory"
112
- "What processes are consuming the most memory?"
113
- "Search for the word 'config' in all .json files"
114
- ```
115
-
116
- ### Command Line Options
117
-
118
- ```bash
119
- # Model selection
120
- term2 # Start with default model (gpt-5.1)
121
- term2 -m gpt-5.2 # Use a specific model
122
- term2 --model gpt-5-mini # Use GPT-5 mini for faster/cheaper responses
123
- term2 -r high # Set reasoning effort to high (for GPT-5 models)
124
- term2 --reasoning medium # Set reasoning effort to medium
125
-
126
- # Operating modes (see "Operating Modes" section below for details)
127
- term2 --lite # Start in lite mode for general terminal work (no codebase)
128
-
129
- # Resuming past conversations
130
- term2 --resume # Resume the last conversation session
131
- term2 -R <conversation-uuid> # Resume a specific conversation by ID
132
-
133
- # SSH Mode - execute on remote servers
134
- term2 --ssh user@host --remote-dir /path/to/project
135
- term2 --ssh deploy@server.com --remote-dir /var/www/app --ssh-port 2222
136
-
137
- # Combine SSH with lite mode for lightweight remote assistance
138
- term2 --ssh user@host --remote-dir /path --lite
139
-
140
- # Non-interactive mode
141
- term2 "how to use grep"
142
- term2 --auto-approve "list files in current directory"
143
- ```
144
-
145
- ### Slash Commands
146
-
147
- While in the chat, you can use these commands:
148
-
149
- - `/clear` - Clear the conversation history
150
- - `/quit` - Exit the application
151
- - `/model [model-name]` - Switch to a different model
152
- - `/mentor` - Toggle mentor mode
153
- - `/lite` - Toggle lite mode (requires `/clear` first if a session is active)
154
- - `/plan` - Toggle plan mode (read-only research/planning mode)
155
- - `/orchestrator` - Toggle orchestrator mode (delegates all tool-backed work to subagents; requires `/clear` first if a session is active)
156
- - `/undo [last]` - Open the conversation rewind menu, or revert the last turn immediately if `last` is specified
157
- - `/retry` - Undo the last user message and re-send it
158
- - `/usage` - Show token usage breakdown for the current session (includes subagent usage)
159
- - `/effort [level]` - Set reasoning effort for O1/O3 models (e.g. none, minimal, low, medium, high)
160
- - `/copy` - Copy the latest assistant response to the clipboard
161
- - `/handoff` - Hand off the last assistant response to another model or session
162
- - `/auto-approve [off|advisory|auto]` - Set or cycle shell auto-approval mode
163
- - `/settings [key] [value]` - Modify runtime settings (e.g., `/settings agent.temperature 0.7`)
164
-
165
-
166
- ## Operating Modes
167
-
168
- term2 offers multiple operating modes tailored to different workflows.
169
-
170
- ### Quick Reference
171
-
172
- | Mode | Toggle / Start with | Best for | Tools Available | Context |
173
- | ----------- | ------------------- | ------------------------------------ | -------------------- | ------------- |
174
- | **Standard**| `term2` | Codebase work & development | Auto-approves patches| Full codebase |
175
- | **Plan** | `/plan` | Researching and designing plans | Read-only tools | Full codebase |
176
- | **Lite** | `term2 --lite` | General terminal tasks (no codebase) | Read-only tools | None |
177
- | **Mentor** | `/mentor` | Complex codebase problems | All + mentor tool | Full codebase |
178
- | **Orchestrator**| `/orchestrator` | Delegating complex multi-step work | Subagents + read-only| Full codebase |
179
-
180
- ### Standard Mode - Rapid Development
181
-
182
- **The problem it solves:** Prompting for approval on every single file modification can slow down fast-paced development.
183
-
184
- Standard Mode automatically approves `apply_patch` operations within the workspace, allowing the assistant to write and edit code at high speed. Destructive operations (like out-of-workspace writes or terminal shell commands) still require explicit confirmation for safety.
185
-
186
- - ⚡ **High velocity** - Speeds up iterative coding cycles
187
- - 🛠️ **Workspace bounded** - Only auto-approves changes inside the active directory
188
- - 🔄 **Active by default** - Standard mode is the default mode when starting `term2` without flags; use `Shift+Tab` to cycle to Plan mode
189
-
190
- ### Plan Mode - Read-only Research & Strategy
191
-
192
- **The problem it solves:** You want the assistant to research a complex issue and propose an implementation plan without modifying the workspace or executing mutating shell commands.
193
-
194
- Plan Mode enforces a strict **read-only** safety boundary. Any state-changing commands or writing tools are blocked by the system. The assistant focuses entirely on exploring the codebase, running read-only checks, and proposing a step-by-step implementation plan.
195
-
196
- - 🔒 **Zero-risk exploration** - Securely analyze files and run logs
197
- - 📝 **Structured plans** - Grounded in current codebase files and symbols
198
- - 🔄 **Toggleable** - Switch with the `/plan` command or cycle with `Shift+Tab`
199
-
200
- ### Lite Mode - Everyday Terminal Assistant
201
-
202
- **The problem it solves:** You need a general-purpose terminal assistant for everyday system tasks—not working with a codebase or project.
203
-
204
- Lite mode is designed for general terminal work: system administration, file management, running commands, investigating logs, and SSH sessions. It's **not** for codebase/project work (no code editing tools, no project context loading). Think of it as your everyday terminal companion for non-coding tasks.
205
-
206
- **Key benefits:**
207
-
208
- - 🚀 **Fast and lightweight** - No codebase context, no project file loading, quick startup
209
- - 🔧 **General terminal tools** - Shell commands, grep, read files, find files (no code editing)
210
- - 🌐 **Perfect for SSH** - Ideal for remote server management and investigation
211
- - 🔄 **Toggleable** - Switch on/off mid-session with `/lite` command
212
- - 🐚 **Shell mode** - Press `Shift+Tab` to toggle direct shell command execution
213
-
214
- **When to use Lite mode:**
215
-
216
- - System administration and server management tasks
217
- - Investigating logs, config files, and system issues
218
- - File system navigation and organization
219
- - SSH into servers for maintenance or debugging
220
- - General terminal help when not working on a codebase
221
- - Quick command help and syntax lookups
222
-
223
- **Example:**
224
-
225
- ```bash
226
- # Everyday terminal assistant (not working with code)
227
- term2 --lite
228
-
229
- # SSH server management and investigation
230
- term2 --ssh deploy@server.com --lite
231
-
232
- # Remote server debugging
233
- term2 --ssh user@host --remote-dir /var/log --lite
234
- ```
235
-
236
- ### Mentor Mode - Collaborative Problem Solving
237
-
238
- **The problem it solves:** You're tackling a complex codebase problem and need a different perspective or expert consultation.
239
-
240
- Mentor mode gives you two AI minds working together on your codebase. Your primary AI does the reconnaissance and implementation work, while a separate (often more powerful) mentor model provides strategic guidance, challenges assumptions, and suggests alternatives. Think of it as pair programming with an expert consultant.
241
-
242
- **Key benefits:**
243
-
244
- - 🧠 **Two minds, better solutions** - Primary AI gathers context, mentor provides strategic guidance
245
- - 🔍 **Structured problem-solving** - Forces clear articulation of findings before jumping to solutions
246
- - ❓ **Challenges assumptions** - Mentor actively probes for gaps and alternative approaches
247
- - 🎯 **You stay in control** - Mentor advises, primary AI implements your decisions
248
-
249
- **How it works:**
250
-
251
- 1. You give the AI a task or problem
252
- 2. The AI does quick reconnaissance of your codebase
253
- 3. AI consults the mentor using `ask_mentor` tool with findings and questions
254
- 4. Mentor challenges assumptions and provides strategic guidance
255
- 5. AI implements the solution based on the guidance
256
-
257
- **Important:** The mentor model doesn't have direct access to your codebase. Your primary AI must share all relevant information (code snippets, file paths, findings) when consulting the mentor. This forces clear problem articulation and saves cost on the more expensive mentor model.
258
-
259
- **When to use Mentor mode:**
260
-
261
- - Architectural decisions with multiple valid approaches
262
- - "Am I missing something?" sanity checks before major refactoring
263
- - Stuck on a problem after trying multiple solutions
264
- - Designing new features that must fit existing patterns
265
- - Getting a pre-commit review of your approach
266
-
267
- **Requirements:**
268
-
269
- - Configure `agent.mentorModel` in settings (e.g., `gpt-5.5`, `claude-opus-4.6` or `gemini-3.1-pro-preview`)
270
- - Mentor model should be more capable than primary model for best results
271
- - Toggle with `/mentor` command mid-session
272
-
273
- **Example workflow:**
274
-
275
- ```
276
- You: "Add dark mode support to the app"
277
-
278
- AI: [Searches for theme infrastructure]
279
- [Finds ThemeProvider at src/context/ThemeContext.tsx]
280
-
281
- AI: [Consults mentor] "User wants dark mode. Found ThemeProvider that uses
282
- CSS variables like --background-color. Currently fixed to 'light' theme.
283
- Propose extending this provider to toggle themes. Confidence: High.
284
- Does this approach make sense?"
285
-
286
- Mentor: "Good find. Before proceeding, check:
287
- 1. Are CSS variables used consistently across all components?
288
- 2. Any third-party UI libraries that need theme integration?
289
- 3. Should theme preference persist across sessions?
290
- Missing any of these could create inconsistent theming."
291
-
292
- AI: [Does additional checks based on mentor's questions]
293
- [Implements solution addressing all concerns]
294
- ```
295
-
296
- ### Orchestrator Mode - Context-Saving Delegation
297
-
298
- **The problem it solves:** For complex, multi-step tasks, letting the main assistant execute commands and edits directly can quickly fill up the context window with long files and command outputs, leading to performance degradation and high costs.
299
-
300
- Orchestrator Mode delegates execution details to specialized subagents. In this mode, the primary assistant focuses on orchestrating the high-level plan and analyzing results. It only has access to a minimal set of read-only tools and the subagent runner tool (`run_subagent`), preventing context bloat.
301
-
302
- - 👥 **Context preservation** - Offloads execution details to child sessions
303
- - 🛠️ **Controlled workspace** - Restricts main assistant to high-level orchestration
304
- - 🔄 **Toggleable** - Switch with the `/orchestrator` command
305
-
306
- ### Switching Modes
307
-
308
- Modes represent different working styles matched to your task. You can switch modes mid-session:
309
-
310
- - `/lite` - Toggle lite mode (requires clearing history first with `/clear` if session is active)
311
- - `/mentor` - Toggle mentor mode
312
- - `/plan` - Toggle plan mode
313
- - `/orchestrator` - Toggle orchestrator mode (requires clearing history first with `/clear` if session is active)
314
- - `Shift+Tab` - Cycles between Standard and Plan modes (or toggles Shell Mode in Lite Mode)
315
- - Switch triggers handle mutual exclusions automatically (e.g. enabling Plan Mode disables other active modes like Lite, Mentor, or Orchestrator)
316
-
317
-
318
- ## SSH Mode
319
-
320
- SSH mode enables term2 to execute commands and modify files on remote servers over SSH. This is useful for managing remote deployments, debugging server issues, or working on remote development environments.
321
-
322
- ### Requirements
323
-
324
- - SSH agent running with your keys loaded (`ssh-add`)
325
- - SSH access to the target server
326
- - `--remote-dir` is required to specify the working directory (optional in lite mode - will auto-detect)
327
-
328
- ### Usage
329
-
330
- ```bash
331
- # Basic usage
332
- term2 --ssh user@hostname --remote-dir /path/to/project
333
-
334
- # With custom SSH port
335
- term2 --ssh user@hostname --remote-dir /path/to/project --ssh-port 2222
336
-
337
- # With lite mode (auto-detects remote directory)
338
- term2 --ssh user@hostname --lite
339
- ```
340
-
341
- ### How It Works
342
-
343
- When SSH mode is enabled:
344
-
345
- 1. term2 establishes an SSH connection using your SSH agent for authentication
346
- 2. All shell commands are executed on the remote server via SSH
347
- 3. File operations (read, write, patch) are performed remotely using shell commands (`cat`, heredocs)
348
- 4. The working directory is set to `--remote-dir` on the remote server
349
- 5. The connection is automatically closed when you exit term2
350
-
351
- ### Combining with Lite Mode
352
-
353
- SSH mode works seamlessly with lite mode for lightweight remote terminal assistance:
354
-
355
- ```bash
356
- term2 --ssh user@host --remote-dir /path/to/project --lite
357
- ```
358
-
359
- This combination provides:
360
-
361
- - Remote command execution over SSH
362
- - Read-only tools (grep, find_files, read_file) for exploration
363
- - Minimal context and faster responses
364
- - No file editing tools (safer for production servers)
365
-
366
- ### Limitations
367
-
368
- - Authentication is via SSH agent only (no password prompts)
369
- - Binary file operations are not supported (text files only)
370
- - Large file transfers may be slower than local operations
371
-
372
- ## Non-Interactive Mode
373
-
374
- 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.
375
-
376
- ### Usage
377
-
378
- ```bash
379
- term2 "list files in current directory"
380
- ```
381
-
382
- ### Tool Execution & Approval
383
-
384
- By default, non-interactive mode will **reject** any tool execution that requires approval (like destructive shell commands or file edits) to prevent accidents.
385
-
386
- - If a tool is rejected, the AI will respond acknowledging the rejection and may suggest how to run the command manually.
387
- - To allow tools to run automatically, use the `--auto-approve` flag.
388
-
389
- ```bash
390
- # This will fail to delete files (rejection default)
391
- term2 "delete /tmp/test-file"
392
-
393
- # This will proceed with execution
394
- term2 --auto-approve "delete /tmp/test-file"
395
- ```
396
-
397
- ### Output Redirection
398
-
399
- - **AI text response** is written to `stdout`.
400
- - **Events** (tool starts, completions, errors, approval requests) are written to `stderr`.
401
-
402
- This makes it easy to use term2 in shell scripts:
403
-
404
- ```bash
405
- # Capture the response but see events in console
406
- ANSWER=$(term2 "is there any TODO in source/cli.tsx?")
407
- echo "The answer is: $ANSWER"
408
- ```
409
-
410
- ### Standard Mode vs Lite Mode
411
-
412
- - When running **with** `--auto-approve`, term2 defaults to **Standard Mode** (full codebase context).
413
- - When running **without** `--auto-approve`, term2 defaults to **Lite Mode** (no codebase context, safe/fast).
414
-
415
- You can always override this by passing `--lite` or running in a directory without a codebase.
416
-
417
- ## Shell Auto-Approval
418
-
419
- One of the most powerful and unique safety features of `term2` is its **Smart Shell Auto-Approval** system.
420
-
421
- Instead of forcing you to manually approve every single trivial command (like `git status` or `ls`), or exposing you to the security risks of completely unchecked execution, `term2` uses a **hybrid local-heuristic + LLM-based safety evaluation engine**. This system effectively minimizes "prompt fatigue" while maintaining strong, robust safety boundaries.
422
-
423
- ### The Problem: Prompt Fatigue vs. Security Risks
424
- When using terminal-based AI assistants, you are typically forced into one of two extremes:
425
- 1. **Manual Confirmation of Everything:** The assistant halts and prompts you to approve every single read-only or diagnostic command. This breaks your flow and leads to "prompt fatigue"—where you start blindly approving everything.
426
- 2. **Full Auto-Run:** The assistant runs commands automatically. While fast, this poses severe security risks if the AI decides to run a destructive command, deletes data, or executes untrusted code.
427
-
428
- ### The Solution: Hybrid Safety Architecture
429
- `term2` solves this by introducing a dual-layer safety check before any shell command executes:
430
-
431
- ```mermaid
432
- graph TD
433
- A[Shell Command Execution Request] --> B[Layer 1: Local Heuristic Check]
434
- B -->|Risky / Red Pattern| C[Reject Auto-Approval]
435
- B -->|Safe Heuristics| D[Layer 2: LLM Task Context Check]
436
- D -->|Blocked / Unaligned / Risky| C
437
- D -->|Approved as Safe| E{Auto-Approval Mode}
438
- E -->|off| F[Prompt user for confirmation]
439
- E -->|advisory| G[Show LLM reasoning + prompt user]
440
- E -->|auto| H[Execute command automatically]
441
- C --> I[Show safety reasoning + prompt user]
442
- ```
443
-
444
- 1. **Layer 1: Local Heuristics (Safety Classification)**
445
- Before any command is sent to the LLM, a fast local analyzer checks it against known risky pattern sets. Any destructive flags, deletions (`rm`), state resets, database cleaning, network exfiltration patterns, credential access, or process termination are immediately classified as **RED**. If classified as RED, the command is blocked from auto-approval and must be manually confirmed by the user.
446
-
447
- 2. **Layer 2: LLM Task Context Check**
448
- If the command passes the local safety heuristics, it is sent to a fast, cost-efficient secondary LLM (default: `gpt-5.4-mini` or similar). The LLM is provided with:
449
- - The current **task context** (the last few turns of the active conversation).
450
- - The precise commands to evaluate.
451
-
452
- The LLM checks if the command is task-aligned, non-destructive, and low-risk. Commands that do not align with what you asked the AI to do are blocked, preventing accidental execution of out-of-context commands.
453
-
454
- 3. **Layer 3: Explanation & Reasoning**
455
- For every evaluated command, the auto-approval engine generates a concise reasoning sentence explaining what the command does, whether it aligns with the task, and why it was approved or blocked.
456
-
457
- ### Auto-Approval Modes
458
- You can toggle between three auto-approval modes mid-session using the `/auto-approve` command, the `/settings` command, or via runtime settings:
459
-
460
- * **`off` (Default):** Every command requires manual confirmation. No background LLM safety checks are performed.
461
- * **`advisory`:** Commands still require manual confirmation, but the UI displays the LLM's safety reasoning alongside the prompt. This is incredibly useful for reviewing complex or unfamiliar shell scripts before you approve them.
462
- * **`auto`:** Safe, task-aligned, and non-destructive commands are executed automatically without interrupting your flow. High-risk, destructive, or task-unaligned commands are held for manual confirmation and shown with the LLM's explanation.
463
-
464
- ### Configuration
465
- You can configure the auto-approval mode and customize which provider/model is used for safety evaluation in your `settings.json`:
466
-
467
- ```json
468
- {
469
- "shell": {
470
- "autoApproveMode": "auto"
471
- },
472
- "agent": {
473
- "autoApproveProvider": "openai",
474
- "autoApproveModel": "gpt-5.4-mini"
475
- }
476
- }
477
- ```
478
-
479
- > [!TIP]
480
- > Use a fast, lightweight model (like `gpt-5.4-mini` or `haiku`) as your `autoApproveModel` to ensure safety checks complete in milliseconds without adding noticeable latency to your terminal flow.
481
-
482
- ## Configuration
483
-
484
- term2 stores its configuration in:
485
-
486
- - **macOS**: `~/Library/Logs/term2-nodejs/settings.json`
487
- - **Linux**: `~/.local/state/term2-nodejs/settings.json`
488
-
489
- ### Environment Variables (API Keys Only)
490
-
491
- API keys should be set as environment variables for security (never commit them to git):
492
-
493
- ```bash
494
- # OpenAI (default provider)
495
- export OPENAI_API_KEY="sk-..."
496
-
497
- # OpenRouter (for Claude, Gemini, and other models)
498
- export OPENROUTER_API_KEY="sk-or-v1-..."
499
-
500
- # Web Search (Tavily — default)
501
- export TAVILY_API_KEY="tvly-..."
502
-
503
- # Web Search (Exa)
504
- export EXA_API_KEY="..."
505
- ```
506
-
507
- To make them permanent, add these exports to your shell configuration file (`~/.bashrc`, `~/.zshrc`, or `~/.profile`).
508
-
509
- ### Configuring Other Settings
510
-
511
- Settings (model, provider, temperature, etc.) can be configured via:
512
-
513
- 1. **App menu** - Use `/settings` command during a session (e.g., `/settings agent.model gpt-5.2`)
514
- 2. **Settings file** - Manually edit the JSON file:
515
- - **macOS**: `~/Library/Logs/term2-nodejs/settings.json`
516
- - **Linux**: `~/.local/state/term2-nodejs/settings.json`
517
- 3. **CLI flags** - Override for a single session (e.g., `-m gpt-5.2`)
518
-
519
- ### Provider Configuration Examples
520
-
521
- You can easily switch between providers by editing `settings.json`.
522
-
523
- **1. OpenAI (Default)**
524
-
525
- ```json
526
- {
527
- "agent": {
528
- "provider": "openai",
529
- "model": "gpt-5.5"
530
- }
531
- }
532
- ```
533
-
534
- **2. OpenRouter (Claude, Gemini, DeepSeek)**
535
- Access a wide range of models.
536
-
537
- ```json
538
- {
539
- "agent": {
540
- "provider": "openrouter",
541
- "model": "anthropic/claude-sonnet-4.6"
542
- }
543
- }
544
- ```
545
-
546
- **3. Local LLMs (Llama.cpp, LM Studio, vLLM)**
547
- Run entirely locally for privacy and zero cost. To use a local provider, add it to the `providers` list and then select it.
548
-
549
- _Llama.cpp Example:_
550
-
551
- ```json
552
- {
553
- "providers": [
554
- {
555
- "name": "llama.cpp",
556
- "type": "llama.cpp",
557
- "baseUrl": "http://127.0.0.1:8080/v1"
558
- }
559
- ],
560
- "agent": {
561
- "provider": "llama.cpp",
562
- "model": "qwen3.6-35b-a3b"
563
- }
564
- }
565
- ```
566
-
567
- _LM Studio Example:_
568
-
569
- ```json
570
- {
571
- "providers": [
572
- {
573
- "name": "lm-studio",
574
- "type": "openai-compatible",
575
- "baseUrl": "http://localhost:1234/v1"
576
- }
577
- ],
578
- "agent": {
579
- "provider": "lm-studio",
580
- "model": "local-model"
581
- }
582
- }
583
- ```
584
-
585
- **4. Other Custom Providers**
586
- You can also define custom providers for direct API integrations (which use their default base URLs if omitted) or generic OpenAI-compatible endpoints:
587
-
588
- _Anthropic Direct Example:_
589
- (Note: Ensure your `ANTHROPIC_API_KEY` is set in your environment.)
590
-
591
- ```json
592
- {
593
- "providers": [
594
- {
595
- "name": "anthropic-direct",
596
- "type": "anthropic"
597
- }
598
- ],
599
- "agent": {
600
- "provider": "anthropic-direct",
601
- "model": "claude-sonnet-4-6"
602
- }
603
- }
604
- ```
605
-
606
- _Google Gemini Direct Example:_
607
- (Note: Ensure your `GOOGLE_GENERATIVE_AI_API_KEY` is set in your environment.)
608
-
609
- ```json
610
- {
611
- "providers": [
612
- {
613
- "name": "google-direct",
614
- "type": "google"
615
- }
616
- ],
617
- "agent": {
618
- "provider": "google-direct",
619
- "model": "gemini-3.5-flash"
620
- }
621
- }
622
- ```
623
-
624
- _OpenCode Direct Example:_
625
- (Note: Ensure your `OPENCODE_API_KEY` is set in your environment.)
626
-
627
- ```json
628
- {
629
- "providers": [
630
- {
631
- "name": "opencode-direct",
632
- "type": "opencode"
633
- }
634
- ],
635
- "agent": {
636
- "provider": "opencode-direct",
637
- "model": "opencode-model"
638
- }
639
- }
640
- ```
641
-
642
- _Custom OpenAI Endpoint Example (using the OpenAI Responses API):_
643
-
644
- ```json
645
- {
646
- "providers": [
647
- {
648
- "name": "custom-openai",
649
- "type": "openai",
650
- "baseUrl": "https://api.custom-openai-proxy.com/v1",
651
- "apiKey": "your-api-key-here"
652
- }
653
- ],
654
- "agent": {
655
- "provider": "custom-openai",
656
- "model": "custom-model-name"
657
- }
658
- }
659
- ```
660
-
661
- ### General Settings
662
-
663
- Here is a comprehensive example demonstrating the most useful settings keys you can configure in `settings.json`:
664
-
665
- ```json
666
- {
667
- "agent": {
668
- "model": "gpt-5.4",
669
- "provider": "openai",
670
- "reasoningEffort": "default",
671
- "temperature": 1,
672
- "mentorModel": "gpt-5.5",
673
- "mentorProvider": "openai",
674
- "mentorReasoningEffort": "high",
675
-
676
- // Subagent model overrides (defaults to agent.model/agent.provider if unset)
677
- "subagentExplorerModel": "gpt-5.4-mini",
678
- "subagentWorkerModel": "gpt-5.3-codex",
679
- "subagentResearcherModel": "gpt-5.4-mini"
680
- },
681
- "shell": {
682
- "timeout": 120000,
683
- "maxOutputLines": 1000,
684
- "maxOutputChars": 10000,
685
- "autoApproveMode": "off",
686
- "useRtkCompression": false
687
- },
688
- "webSearch": {
689
- "provider": "tavily"
690
- },
691
- "app": {
692
- "searchViaShell": "auto",
693
- "orchestratorMode": false,
694
- "planMode": false,
695
- "mentorMode": false,
696
- "liteMode": false
697
- }
698
- }
699
- ```
700
-
701
-
702
- ## Supported Models
703
-
704
- term2 works with multiple AI providers:
705
-
706
- ### OpenAI (default)
707
-
708
- - `gpt-5.5` (latest)
709
- - `gpt-5.4`
710
- - `gpt-5.4-mini`
711
- - `gpt-5.3-codex`
712
- - `gpt-5.2`
713
- - `gpt-5.1` (default)
714
-
715
- ### OpenRouter
716
-
717
- Access hundreds of models through OpenRouter including:
718
-
719
- - Claude models (Anthropic)
720
- - Gemini models (Google)
721
- - Open-source models (Deepseek, GLM, Minimax, Devstral, etc.)
722
-
723
- Use CLI flags (`-m model-name`) or settings file to select OpenRouter models.
724
-
725
- ### OpenAI-Compatible & Local LLMs
726
-
727
- term2 can connect to any OpenAI-compatible API. This allows you to use:
728
-
729
- - **Local Models**: Run private models locally via Ollama, LM Studio, vLLM, or llama.cpp.
730
- - **Self-Hosted**: Connect to private deployments of models.
731
- - **Other Providers**: Any service offering an OpenAI-compatible endpoint (e.g., Groq, Together AI).
732
-
733
- ## Subagents
734
-
735
- For complex, multi-step tasks, the primary assistant can delegate work to specialized, synchronous **Subagents** using the `run_subagent` tool. This allows the main assistant to offload research, file modification, or exploration tasks to a separate agent context, preventing context-window bloat in the main session.
736
-
737
- Each subagent runs with its own tailored prompt and can perform operations based on its designated role:
738
-
739
- - **Explorer (`explorer`)**: Specialized in scanning files, mapping structures, and reading codebase outline.
740
- - **Worker (`worker`)**: Specialized in executing modifications, writing scripts, and running tests.
741
- - **Researcher (`researcher`)**: Specialized in web search, reading documentation, and gathering information.
742
- - **Mentor (`mentor`)**: Specialized in providing strategic guidance and high-level architectural feedback.
743
-
744
- Subagent logs and outputs stream in real-time within the terminal, allowing you to track their progress. You can configure model, provider, and reasoning effort overrides specifically for subagents in settings (e.g. `agent.subagentWorkerModel`).
745
-
746
- ## Conversation Resumption & Persistence
747
-
748
- term2 automatically saves your conversation history, settings, and provider state at the end of each session. This allows you to resume any past chat exactly where you left off.
749
-
750
- - **Auto-save**: Every active chat session is saved on exit or interrupt to your system's log directory:
751
- - **Linux**: `~/.local/state/term2-nodejs/log/conversations/`
752
- - **macOS**: `~/Library/Logs/term2-nodejs/conversations/`
753
- - **Resume Last Session**: Run `term2 --resume` to reload the most recent conversation.
754
- - **Resume Specific Session**: Use `term2 --resume <session-uuid>` to load a specific conversation history.
755
- - **Listing Sessions**: You can inspect saved sessions and their UUIDs in the log or state files.
756
-
757
- ## Safety Features
758
-
759
- - **Command Approval** - Every destructive operation requires your explicit confirmation
760
- - **Auto-Approval** - Optional LLM-based safety evaluation with advisory and auto modes for shell commands
761
- - **Diff Preview** - See exact file changes before approving patches or edits
762
- - **Risk Analysis** - Dangerous operations (like `rm -rf`, `git push --force`) are flagged
763
- - **Path Safety** - Operations on sensitive directories require extra caution
764
- - **Dry-Run Validation** - Patches are validated before approval to prevent errors
765
- - **No Hidden Actions** - All tool usage is transparent and visible
766
- - **Retry Limits** - Automatic abort after consecutive tool failures (default: 3)
767
-
768
- ## How It Works
769
-
770
- 1. You type a message and press Enter
771
- 2. The AI analyzes your request and determines if it needs to execute commands
772
- 3. If a command is needed, you'll see a preview and approval prompt
773
- 4. After approval, the command runs and results are shown
774
- 5. The AI uses the results to provide a helpful response
775
- 6. You stay in full control - reject any command with 'n'
776
-
777
- ## Development
778
-
779
- Want to contribute or run from source?
780
-
781
- ```bash
782
- # Clone the repository
783
- git clone https://github.com/qduc/term2.git
784
- cd term2
785
-
786
- # Install dependencies
787
- npm install
788
-
789
- # Run in development mode
790
- npm run dev
791
-
792
- # Run tests
793
- npm test
794
-
795
- # Build
796
- npm run build
797
- ```
798
-
799
- ## Troubleshooting
800
-
801
- ### "OPENAI_API_KEY not set"
802
-
803
- Make sure you've exported your OpenAI API key:
804
-
805
- ```bash
806
- export OPENAI_API_KEY="sk-..."
807
- ```
808
-
809
- ### Command not found: term2
810
-
811
- After installation, you may need to restart your terminal or run:
812
-
813
- ```bash
814
- source ~/.bashrc # or ~/.zshrc
815
- ```
816
-
817
- ### Permission denied
818
-
819
- If you get permission errors during global installation, use:
820
-
821
- ```bash
822
- sudo npm install --global @qduc/term2
823
- ```
824
-
825
- Or configure npm to install globally without sudo: https://docs.npmjs.com/resolving-eacces-permissions-errors-when-installing-packages-globally
826
-
827
- ### SSH connection failed
828
-
829
- Make sure your SSH agent is running and has your keys loaded:
830
-
831
- ```bash
832
- # Start SSH agent if not running
833
- eval "$(ssh-agent -s)"
834
-
835
- # Add your SSH key
836
- ssh-add ~/.ssh/id_rsa
837
-
838
- # Verify the key is loaded
839
- ssh-add -l
840
- ```
841
-
842
- Also verify you can connect manually: `ssh user@hostname`
843
-
844
- ### SSH mode: "remote-dir is required"
845
-
846
- When using `--ssh` without `--lite`, you must also specify `--remote-dir`:
847
-
848
- ```bash
849
- term2 --ssh user@host --remote-dir /home/user/project
850
- ```
851
-
852
- With `--lite` mode, `--remote-dir` is optional and will auto-detect:
853
-
854
- ```bash
855
- term2 --ssh user@host --lite
856
- ```
857
-
858
- ## Tips
859
-
860
- - **Choose the right mode** - Use lite mode for general terminal work (not codebase), standard mode for codebase work, mentor mode for complex codebase problems (see "Operating Modes" section)
861
- - The assistant won't run dangerous commands without your approval
862
- - You can reject any command by choosing 'No' when prompted
863
- - Press Ctrl+C to exit the chat at any time
864
- - Use arrow keys to navigate through your command history
865
- - Be specific in your requests for better results
866
- - Use `/mentor` to get expert consultation on difficult architectural decisions
867
- - Use `Shift+Tab` to toggle standard mode for faster file editing workflows
868
- - Use `/auto-approve` to enable LLM-based safety evaluation for faster shell command workflows
869
- - Paste images directly into the terminal when using vision-capable models
870
- - Use `--lite` flag when SSH'ing to servers for general system work without codebase context
871
-
872
- ## Contributing
873
-
874
- Contributions are welcome! Please feel free to submit a Pull Request or open an Issue on [GitHub](https://github.com/qduc/term2).
875
-
876
- ## License
877
-
878
- MIT License - see [LICENSE](LICENSE) file for details
879
-
880
- ## Acknowledgments
881
-
882
- Built with:
883
-
884
- - [OpenAI Agents SDK](https://github.com/openai/openai-agents-js)
885
- - [Ink](https://github.com/vadimdemedes/ink) - React for CLI
886
- - [TypeScript](https://www.typescriptlang.org/)
887
- - [ssh2](https://github.com/mscdex/ssh2) - SSH client for Node.js