@qduc/term2 0.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (621) hide show
  1. package/LICENSE +21 -0
  2. package/dist/agent.d.ts +19 -0
  3. package/dist/agent.d.ts.map +1 -0
  4. package/dist/agent.js +143 -0
  5. package/dist/agent.js.map +1 -0
  6. package/dist/app.d.ts +22 -0
  7. package/dist/app.d.ts.map +1 -0
  8. package/dist/app.js +403 -0
  9. package/dist/app.js.map +1 -0
  10. package/dist/app.model-command-feedback.test.d.ts +2 -0
  11. package/dist/app.model-command-feedback.test.d.ts.map +1 -0
  12. package/dist/app.model-command-feedback.test.js +19 -0
  13. package/dist/app.model-command-feedback.test.js.map +1 -0
  14. package/dist/app.parseInput.test.d.ts +2 -0
  15. package/dist/app.parseInput.test.d.ts.map +1 -0
  16. package/dist/app.parseInput.test.js +97 -0
  17. package/dist/app.parseInput.test.js.map +1 -0
  18. package/dist/cli.d.ts +3 -0
  19. package/dist/cli.d.ts.map +1 -0
  20. package/dist/cli.js +241 -0
  21. package/dist/cli.js.map +1 -0
  22. package/dist/components/ApprovalPrompt.d.ts +10 -0
  23. package/dist/components/ApprovalPrompt.d.ts.map +1 -0
  24. package/dist/components/ApprovalPrompt.js +163 -0
  25. package/dist/components/ApprovalPrompt.js.map +1 -0
  26. package/dist/components/Banner.d.ts +9 -0
  27. package/dist/components/Banner.d.ts.map +1 -0
  28. package/dist/components/Banner.js +86 -0
  29. package/dist/components/Banner.js.map +1 -0
  30. package/dist/components/BottomArea.d.ts +33 -0
  31. package/dist/components/BottomArea.d.ts.map +1 -0
  32. package/dist/components/BottomArea.js +31 -0
  33. package/dist/components/BottomArea.js.map +1 -0
  34. package/dist/components/BottomArea.test.d.ts +2 -0
  35. package/dist/components/BottomArea.test.d.ts.map +1 -0
  36. package/dist/components/BottomArea.test.js +73 -0
  37. package/dist/components/BottomArea.test.js.map +1 -0
  38. package/dist/components/ChatMessage.d.ts +7 -0
  39. package/dist/components/ChatMessage.d.ts.map +1 -0
  40. package/dist/components/ChatMessage.js +10 -0
  41. package/dist/components/ChatMessage.js.map +1 -0
  42. package/dist/components/CommandMessage.d.ts +15 -0
  43. package/dist/components/CommandMessage.d.ts.map +1 -0
  44. package/dist/components/CommandMessage.js +188 -0
  45. package/dist/components/CommandMessage.js.map +1 -0
  46. package/dist/components/CommandMessage.test.d.ts +2 -0
  47. package/dist/components/CommandMessage.test.d.ts.map +1 -0
  48. package/dist/components/CommandMessage.test.js +35 -0
  49. package/dist/components/CommandMessage.test.js.map +1 -0
  50. package/dist/components/ErrorBoundary.d.ts +27 -0
  51. package/dist/components/ErrorBoundary.d.ts.map +1 -0
  52. package/dist/components/ErrorBoundary.js +77 -0
  53. package/dist/components/ErrorBoundary.js.map +1 -0
  54. package/dist/components/ErrorBoundary.test.d.ts +2 -0
  55. package/dist/components/ErrorBoundary.test.d.ts.map +1 -0
  56. package/dist/components/ErrorBoundary.test.js +32 -0
  57. package/dist/components/ErrorBoundary.test.js.map +1 -0
  58. package/dist/components/Input/PopupManager.d.ts +42 -0
  59. package/dist/components/Input/PopupManager.d.ts.map +1 -0
  60. package/dist/components/Input/PopupManager.js +13 -0
  61. package/dist/components/Input/PopupManager.js.map +1 -0
  62. package/dist/components/InputBox.d.ts +18 -0
  63. package/dist/components/InputBox.d.ts.map +1 -0
  64. package/dist/components/InputBox.js +384 -0
  65. package/dist/components/InputBox.js.map +1 -0
  66. package/dist/components/InputBox.menu-logic.test.d.ts +2 -0
  67. package/dist/components/InputBox.menu-logic.test.d.ts.map +1 -0
  68. package/dist/components/InputBox.menu-logic.test.js +151 -0
  69. package/dist/components/InputBox.menu-logic.test.js.map +1 -0
  70. package/dist/components/InputBox.test.d.ts +2 -0
  71. package/dist/components/InputBox.test.d.ts.map +1 -0
  72. package/dist/components/InputBox.test.js +91 -0
  73. package/dist/components/InputBox.test.js.map +1 -0
  74. package/dist/components/LiveResponse.d.ts +13 -0
  75. package/dist/components/LiveResponse.d.ts.map +1 -0
  76. package/dist/components/LiveResponse.js +16 -0
  77. package/dist/components/LiveResponse.js.map +1 -0
  78. package/dist/components/MarkdownRenderer.d.ts +8 -0
  79. package/dist/components/MarkdownRenderer.d.ts.map +1 -0
  80. package/dist/components/MarkdownRenderer.js +225 -0
  81. package/dist/components/MarkdownRenderer.js.map +1 -0
  82. package/dist/components/MentorMode.test.d.ts +2 -0
  83. package/dist/components/MentorMode.test.d.ts.map +1 -0
  84. package/dist/components/MentorMode.test.js.map +1 -0
  85. package/dist/components/MessageList.d.ts +7 -0
  86. package/dist/components/MessageList.d.ts.map +1 -0
  87. package/dist/components/MessageList.js +29 -0
  88. package/dist/components/MessageList.js.map +1 -0
  89. package/dist/components/MessageList.test.d.ts +2 -0
  90. package/dist/components/MessageList.test.d.ts.map +1 -0
  91. package/dist/components/MessageList.test.js +15 -0
  92. package/dist/components/MessageList.test.js.map +1 -0
  93. package/dist/components/ModelSelectionMenu.d.ts +18 -0
  94. package/dist/components/ModelSelectionMenu.d.ts.map +1 -0
  95. package/dist/components/ModelSelectionMenu.js +91 -0
  96. package/dist/components/ModelSelectionMenu.js.map +1 -0
  97. package/dist/components/ModelSelectionMenu.test.d.ts +2 -0
  98. package/dist/components/ModelSelectionMenu.test.d.ts.map +1 -0
  99. package/dist/components/ModelSelectionMenu.test.js +83 -0
  100. package/dist/components/ModelSelectionMenu.test.js.map +1 -0
  101. package/dist/components/PathSelectionMenu.d.ts +12 -0
  102. package/dist/components/PathSelectionMenu.d.ts.map +1 -0
  103. package/dist/components/PathSelectionMenu.js +42 -0
  104. package/dist/components/PathSelectionMenu.js.map +1 -0
  105. package/dist/components/SettingsSelectionMenu.d.ts +9 -0
  106. package/dist/components/SettingsSelectionMenu.d.ts.map +1 -0
  107. package/dist/components/SettingsSelectionMenu.js +21 -0
  108. package/dist/components/SettingsSelectionMenu.js.map +1 -0
  109. package/dist/components/SlashCommandMenu.d.ts +15 -0
  110. package/dist/components/SlashCommandMenu.d.ts.map +1 -0
  111. package/dist/components/SlashCommandMenu.js +20 -0
  112. package/dist/components/SlashCommandMenu.js.map +1 -0
  113. package/dist/components/StatusBar.d.ts +11 -0
  114. package/dist/components/StatusBar.d.ts.map +1 -0
  115. package/dist/components/StatusBar.js +59 -0
  116. package/dist/components/StatusBar.js.map +1 -0
  117. package/dist/components/TextInput.d.ts +42 -0
  118. package/dist/components/TextInput.d.ts.map +1 -0
  119. package/dist/components/TextInput.js +397 -0
  120. package/dist/components/TextInput.js.map +1 -0
  121. package/dist/components/TextInput.test.d.ts +2 -0
  122. package/dist/components/TextInput.test.d.ts.map +1 -0
  123. package/dist/components/TextInput.test.js +75 -0
  124. package/dist/components/TextInput.test.js.map +1 -0
  125. package/dist/context/InputContext.d.ts +31 -0
  126. package/dist/context/InputContext.d.ts.map +1 -0
  127. package/dist/context/InputContext.js +36 -0
  128. package/dist/context/InputContext.js.map +1 -0
  129. package/dist/context/InputContext.stability.test.d.ts +2 -0
  130. package/dist/context/InputContext.stability.test.d.ts.map +1 -0
  131. package/dist/context/InputContext.stability.test.js +28 -0
  132. package/dist/context/InputContext.stability.test.js.map +1 -0
  133. package/dist/context/InputContext.test.d.ts +2 -0
  134. package/dist/context/InputContext.test.d.ts.map +1 -0
  135. package/dist/context/InputContext.test.js +168 -0
  136. package/dist/context/InputContext.test.js.map +1 -0
  137. package/dist/debug-schema.d.ts +2 -0
  138. package/dist/debug-schema.d.ts.map +1 -0
  139. package/dist/debug-schema.js +22 -0
  140. package/dist/debug-schema.js.map +1 -0
  141. package/dist/hooks/use-conversation.d.ts +78 -0
  142. package/dist/hooks/use-conversation.d.ts.map +1 -0
  143. package/dist/hooks/use-conversation.js +1017 -0
  144. package/dist/hooks/use-conversation.js.map +1 -0
  145. package/dist/hooks/use-input-history.d.ts +16 -0
  146. package/dist/hooks/use-input-history.d.ts.map +1 -0
  147. package/dist/hooks/use-input-history.js +71 -0
  148. package/dist/hooks/use-input-history.js.map +1 -0
  149. package/dist/hooks/use-model-selection.d.ts +27 -0
  150. package/dist/hooks/use-model-selection.d.ts.map +1 -0
  151. package/dist/hooks/use-model-selection.js +187 -0
  152. package/dist/hooks/use-model-selection.js.map +1 -0
  153. package/dist/hooks/use-model-selection.test.d.ts +2 -0
  154. package/dist/hooks/use-model-selection.test.d.ts.map +1 -0
  155. package/dist/hooks/use-model-selection.test.js +28 -0
  156. package/dist/hooks/use-model-selection.test.js.map +1 -0
  157. package/dist/hooks/use-path-completion.d.ts +22 -0
  158. package/dist/hooks/use-path-completion.d.ts.map +1 -0
  159. package/dist/hooks/use-path-completion.js +153 -0
  160. package/dist/hooks/use-path-completion.js.map +1 -0
  161. package/dist/hooks/use-path-completion.test.d.ts +2 -0
  162. package/dist/hooks/use-path-completion.test.d.ts.map +1 -0
  163. package/dist/hooks/use-path-completion.test.js +29 -0
  164. package/dist/hooks/use-path-completion.test.js.map +1 -0
  165. package/dist/hooks/use-setting.d.ts +7 -0
  166. package/dist/hooks/use-setting.d.ts.map +1 -0
  167. package/dist/hooks/use-setting.js +35 -0
  168. package/dist/hooks/use-setting.js.map +1 -0
  169. package/dist/hooks/use-settings-completion.d.ts +23 -0
  170. package/dist/hooks/use-settings-completion.d.ts.map +1 -0
  171. package/dist/hooks/use-settings-completion.js +164 -0
  172. package/dist/hooks/use-settings-completion.js.map +1 -0
  173. package/dist/hooks/use-settings-completion.test.d.ts +2 -0
  174. package/dist/hooks/use-settings-completion.test.d.ts.map +1 -0
  175. package/dist/hooks/use-settings-completion.test.js +334 -0
  176. package/dist/hooks/use-settings-completion.test.js.map +1 -0
  177. package/dist/hooks/use-slash-commands.d.ts +21 -0
  178. package/dist/hooks/use-slash-commands.d.ts.map +1 -0
  179. package/dist/hooks/use-slash-commands.js +87 -0
  180. package/dist/hooks/use-slash-commands.js.map +1 -0
  181. package/dist/hooks/use-slash-commands.test.d.ts +2 -0
  182. package/dist/hooks/use-slash-commands.test.d.ts.map +1 -0
  183. package/dist/hooks/use-slash-commands.test.js +246 -0
  184. package/dist/hooks/use-slash-commands.test.js.map +1 -0
  185. package/dist/lib/editor-impl.d.ts +23 -0
  186. package/dist/lib/editor-impl.d.ts.map +1 -0
  187. package/dist/lib/editor-impl.js +235 -0
  188. package/dist/lib/editor-impl.js.map +1 -0
  189. package/dist/lib/openai-agent-client.chat.test.d.ts +2 -0
  190. package/dist/lib/openai-agent-client.chat.test.d.ts.map +1 -0
  191. package/dist/lib/openai-agent-client.chat.test.js +68 -0
  192. package/dist/lib/openai-agent-client.chat.test.js.map +1 -0
  193. package/dist/lib/openai-agent-client.d.ts +48 -0
  194. package/dist/lib/openai-agent-client.d.ts.map +1 -0
  195. package/dist/lib/openai-agent-client.js +653 -0
  196. package/dist/lib/openai-agent-client.js.map +1 -0
  197. package/dist/lib/openai-agent-client.test.d.ts +2 -0
  198. package/dist/lib/openai-agent-client.test.d.ts.map +1 -0
  199. package/dist/lib/openai-agent-client.test.js +181 -0
  200. package/dist/lib/openai-agent-client.test.js.map +1 -0
  201. package/dist/lib/shell.d.ts +7 -0
  202. package/dist/lib/shell.d.ts.map +1 -0
  203. package/dist/lib/shell.js +56 -0
  204. package/dist/lib/shell.js.map +1 -0
  205. package/dist/lib/tool-invoke.d.ts +4 -0
  206. package/dist/lib/tool-invoke.d.ts.map +1 -0
  207. package/dist/lib/tool-invoke.js +26 -0
  208. package/dist/lib/tool-invoke.js.map +1 -0
  209. package/dist/lib/tool-invoke.test.d.ts +2 -0
  210. package/dist/lib/tool-invoke.test.d.ts.map +1 -0
  211. package/dist/lib/tool-invoke.test.js +19 -0
  212. package/dist/lib/tool-invoke.test.js.map +1 -0
  213. package/dist/no-singleton-imports.test.d.ts +2 -0
  214. package/dist/no-singleton-imports.test.d.ts.map +1 -0
  215. package/dist/no-singleton-imports.test.js +30 -0
  216. package/dist/no-singleton-imports.test.js.map +1 -0
  217. package/dist/prompts/anthropic.md +79 -0
  218. package/dist/prompts/codex.md +97 -0
  219. package/dist/prompts/default.md +77 -0
  220. package/dist/prompts/default.md.bak +77 -0
  221. package/dist/prompts/gpt-5.md +318 -0
  222. package/dist/prompts/lite.md +29 -0
  223. package/dist/prompts/simple-mentor.md +207 -0
  224. package/dist/prompts/simple.md +189 -0
  225. package/dist/providers/index.d.ts +5 -0
  226. package/dist/providers/index.d.ts.map +1 -0
  227. package/dist/providers/index.js +8 -0
  228. package/dist/providers/index.js.map +1 -0
  229. package/dist/providers/openai-compatible/api.d.ts +17 -0
  230. package/dist/providers/openai-compatible/api.d.ts.map +1 -0
  231. package/dist/providers/openai-compatible/api.js +58 -0
  232. package/dist/providers/openai-compatible/api.js.map +1 -0
  233. package/dist/providers/openai-compatible/model.d.ts +17 -0
  234. package/dist/providers/openai-compatible/model.d.ts.map +1 -0
  235. package/dist/providers/openai-compatible/model.js +435 -0
  236. package/dist/providers/openai-compatible/model.js.map +1 -0
  237. package/dist/providers/openai-compatible/provider.d.ts +22 -0
  238. package/dist/providers/openai-compatible/provider.d.ts.map +1 -0
  239. package/dist/providers/openai-compatible/provider.js +43 -0
  240. package/dist/providers/openai-compatible/provider.js.map +1 -0
  241. package/dist/providers/openai-compatible/utils.d.ts +3 -0
  242. package/dist/providers/openai-compatible/utils.d.ts.map +1 -0
  243. package/dist/providers/openai-compatible/utils.js +11 -0
  244. package/dist/providers/openai-compatible/utils.js.map +1 -0
  245. package/dist/providers/openai-compatible.provider.d.ts +8 -0
  246. package/dist/providers/openai-compatible.provider.d.ts.map +1 -0
  247. package/dist/providers/openai-compatible.provider.js +71 -0
  248. package/dist/providers/openai-compatible.provider.js.map +1 -0
  249. package/dist/providers/openai.provider.d.ts +2 -0
  250. package/dist/providers/openai.provider.d.ts.map +1 -0
  251. package/dist/providers/openai.provider.js +36 -0
  252. package/dist/providers/openai.provider.js.map +1 -0
  253. package/dist/providers/openrouter/api.d.ts +39 -0
  254. package/dist/providers/openrouter/api.d.ts.map +1 -0
  255. package/dist/providers/openrouter/api.js +172 -0
  256. package/dist/providers/openrouter/api.js.map +1 -0
  257. package/dist/providers/openrouter/converters.d.ts +8 -0
  258. package/dist/providers/openrouter/converters.d.ts.map +1 -0
  259. package/dist/providers/openrouter/converters.js +382 -0
  260. package/dist/providers/openrouter/converters.js.map +1 -0
  261. package/dist/providers/openrouter/converters.test.d.ts +2 -0
  262. package/dist/providers/openrouter/converters.test.d.ts.map +1 -0
  263. package/dist/providers/openrouter/converters.test.js +158 -0
  264. package/dist/providers/openrouter/converters.test.js.map +1 -0
  265. package/dist/providers/openrouter/index.d.ts +4 -0
  266. package/dist/providers/openrouter/index.d.ts.map +1 -0
  267. package/dist/providers/openrouter/index.js +4 -0
  268. package/dist/providers/openrouter/index.js.map +1 -0
  269. package/dist/providers/openrouter/model.d.ts +14 -0
  270. package/dist/providers/openrouter/model.d.ts.map +1 -0
  271. package/dist/providers/openrouter/model.js +485 -0
  272. package/dist/providers/openrouter/model.js.map +1 -0
  273. package/dist/providers/openrouter/provider.d.ts +15 -0
  274. package/dist/providers/openrouter/provider.d.ts.map +1 -0
  275. package/dist/providers/openrouter/provider.js +21 -0
  276. package/dist/providers/openrouter/provider.js.map +1 -0
  277. package/dist/providers/openrouter/utils.d.ts +10 -0
  278. package/dist/providers/openrouter/utils.d.ts.map +1 -0
  279. package/dist/providers/openrouter/utils.js +27 -0
  280. package/dist/providers/openrouter/utils.js.map +1 -0
  281. package/dist/providers/openrouter.api.retry.test.d.ts +2 -0
  282. package/dist/providers/openrouter.api.retry.test.d.ts.map +1 -0
  283. package/dist/providers/openrouter.api.retry.test.js +148 -0
  284. package/dist/providers/openrouter.api.retry.test.js.map +1 -0
  285. package/dist/providers/openrouter.d.ts +2 -0
  286. package/dist/providers/openrouter.d.ts.map +1 -0
  287. package/dist/providers/openrouter.history.test.d.ts +2 -0
  288. package/dist/providers/openrouter.history.test.d.ts.map +1 -0
  289. package/dist/providers/openrouter.history.test.js +533 -0
  290. package/dist/providers/openrouter.history.test.js.map +1 -0
  291. package/dist/providers/openrouter.js +4 -0
  292. package/dist/providers/openrouter.js.map +1 -0
  293. package/dist/providers/openrouter.provider.createRunner.test.d.ts +2 -0
  294. package/dist/providers/openrouter.provider.createRunner.test.d.ts.map +1 -0
  295. package/dist/providers/openrouter.provider.createRunner.test.js +23 -0
  296. package/dist/providers/openrouter.provider.createRunner.test.js.map +1 -0
  297. package/dist/providers/openrouter.provider.d.ts +2 -0
  298. package/dist/providers/openrouter.provider.d.ts.map +1 -0
  299. package/dist/providers/openrouter.provider.js +56 -0
  300. package/dist/providers/openrouter.provider.js.map +1 -0
  301. package/dist/providers/openrouter.test.d.ts +2 -0
  302. package/dist/providers/openrouter.test.d.ts.map +1 -0
  303. package/dist/providers/openrouter.test.js +1382 -0
  304. package/dist/providers/openrouter.test.js.map +1 -0
  305. package/dist/providers/registry.d.ts +65 -0
  306. package/dist/providers/registry.d.ts.map +1 -0
  307. package/dist/providers/registry.js +44 -0
  308. package/dist/providers/registry.js.map +1 -0
  309. package/dist/providers/registry.test.d.ts +2 -0
  310. package/dist/providers/registry.test.d.ts.map +1 -0
  311. package/dist/providers/registry.test.js +76 -0
  312. package/dist/providers/registry.test.js.map +1 -0
  313. package/dist/providers/web-search/index.d.ts +8 -0
  314. package/dist/providers/web-search/index.d.ts.map +1 -0
  315. package/dist/providers/web-search/index.js +9 -0
  316. package/dist/providers/web-search/index.js.map +1 -0
  317. package/dist/providers/web-search/registry.d.ts +35 -0
  318. package/dist/providers/web-search/registry.d.ts.map +1 -0
  319. package/dist/providers/web-search/registry.js +56 -0
  320. package/dist/providers/web-search/registry.js.map +1 -0
  321. package/dist/providers/web-search/registry.test.d.ts +2 -0
  322. package/dist/providers/web-search/registry.test.d.ts.map +1 -0
  323. package/dist/providers/web-search/registry.test.js +105 -0
  324. package/dist/providers/web-search/registry.test.js.map +1 -0
  325. package/dist/providers/web-search/tavily.provider.d.ts +15 -0
  326. package/dist/providers/web-search/tavily.provider.d.ts.map +1 -0
  327. package/dist/providers/web-search/tavily.provider.js +69 -0
  328. package/dist/providers/web-search/tavily.provider.js.map +1 -0
  329. package/dist/providers/web-search/tavily.provider.test.d.ts +2 -0
  330. package/dist/providers/web-search/tavily.provider.test.d.ts.map +1 -0
  331. package/dist/providers/web-search/tavily.provider.test.js +67 -0
  332. package/dist/providers/web-search/tavily.provider.test.js.map +1 -0
  333. package/dist/providers/web-search/types.d.ts +55 -0
  334. package/dist/providers/web-search/types.d.ts.map +1 -0
  335. package/dist/providers/web-search/types.js +6 -0
  336. package/dist/providers/web-search/types.js.map +1 -0
  337. package/dist/safety-checker.js +57 -0
  338. package/dist/services/conversation-events.d.ts +76 -0
  339. package/dist/services/conversation-events.d.ts.map +1 -0
  340. package/dist/services/conversation-events.js +2 -0
  341. package/dist/services/conversation-events.js.map +1 -0
  342. package/dist/services/conversation-service.d.ts +31 -0
  343. package/dist/services/conversation-service.d.ts.map +1 -0
  344. package/dist/services/conversation-service.js +46 -0
  345. package/dist/services/conversation-service.js.map +1 -0
  346. package/dist/services/conversation-service.test.js +190 -0
  347. package/dist/services/conversation-session.d.ts +99 -0
  348. package/dist/services/conversation-session.d.ts.map +1 -0
  349. package/dist/services/conversation-session.js +978 -0
  350. package/dist/services/conversation-session.js.map +1 -0
  351. package/dist/services/conversation-store.d.ts +24 -0
  352. package/dist/services/conversation-store.d.ts.map +1 -0
  353. package/dist/services/conversation-store.js +216 -0
  354. package/dist/services/conversation-store.js.map +1 -0
  355. package/dist/services/conversation-store.test.d.ts +2 -0
  356. package/dist/services/conversation-store.test.d.ts.map +1 -0
  357. package/dist/services/conversation-store.test.js +167 -0
  358. package/dist/services/conversation-store.test.js.map +1 -0
  359. package/dist/services/execution-context.d.ts +10 -0
  360. package/dist/services/execution-context.d.ts.map +1 -0
  361. package/dist/services/execution-context.js +22 -0
  362. package/dist/services/execution-context.js.map +1 -0
  363. package/dist/services/execution-context.test.d.ts +2 -0
  364. package/dist/services/execution-context.test.d.ts.map +1 -0
  365. package/dist/services/execution-context.test.js +49 -0
  366. package/dist/services/execution-context.test.js.map +1 -0
  367. package/dist/services/file-service.d.ts +12 -0
  368. package/dist/services/file-service.d.ts.map +1 -0
  369. package/dist/services/file-service.js +90 -0
  370. package/dist/services/file-service.js.map +1 -0
  371. package/dist/services/history-service.d.ts +39 -0
  372. package/dist/services/history-service.d.ts.map +1 -0
  373. package/dist/services/history-service.js +152 -0
  374. package/dist/services/history-service.js.map +1 -0
  375. package/dist/services/logging-service.d.ts +75 -0
  376. package/dist/services/logging-service.d.ts.map +1 -0
  377. package/dist/services/logging-service.js +343 -0
  378. package/dist/services/logging-service.js.map +1 -0
  379. package/dist/services/model-service.d.ts +15 -0
  380. package/dist/services/model-service.d.ts.map +1 -0
  381. package/dist/services/model-service.js +46 -0
  382. package/dist/services/model-service.js.map +1 -0
  383. package/dist/services/model-service.test.d.ts +2 -0
  384. package/dist/services/model-service.test.d.ts.map +1 -0
  385. package/dist/services/model-service.test.js +128 -0
  386. package/dist/services/model-service.test.js.map +1 -0
  387. package/dist/services/service-interfaces.d.ts +33 -0
  388. package/dist/services/service-interfaces.d.ts.map +1 -0
  389. package/dist/services/service-interfaces.js +2 -0
  390. package/dist/services/service-interfaces.js.map +1 -0
  391. package/dist/services/settings-service.d.ts +316 -0
  392. package/dist/services/settings-service.d.ts.map +1 -0
  393. package/dist/services/settings-service.js +1128 -0
  394. package/dist/services/settings-service.js.map +1 -0
  395. package/dist/services/settings-service.mock.d.ts +20 -0
  396. package/dist/services/settings-service.mock.d.ts.map +1 -0
  397. package/dist/services/settings-service.mock.js +55 -0
  398. package/dist/services/settings-service.mock.js.map +1 -0
  399. package/dist/services/singleton-deprecation.test.d.ts +2 -0
  400. package/dist/services/singleton-deprecation.test.d.ts.map +1 -0
  401. package/dist/services/singleton-deprecation.test.js +59 -0
  402. package/dist/services/singleton-deprecation.test.js.map +1 -0
  403. package/dist/services/ssh-service.d.ts +32 -0
  404. package/dist/services/ssh-service.d.ts.map +1 -0
  405. package/dist/services/ssh-service.js +119 -0
  406. package/dist/services/ssh-service.js.map +1 -0
  407. package/dist/services/ssh-service.test.d.ts +2 -0
  408. package/dist/services/ssh-service.test.d.ts.map +1 -0
  409. package/dist/services/ssh-service.test.js +269 -0
  410. package/dist/services/ssh-service.test.js.map +1 -0
  411. package/dist/test-search-tool.d.ts +2 -0
  412. package/dist/test-search-tool.d.ts.map +1 -0
  413. package/dist/test-search-tool.js +36 -0
  414. package/dist/test-search-tool.js.map +1 -0
  415. package/dist/tools/apply-patch.d.ts +28 -0
  416. package/dist/tools/apply-patch.d.ts.map +1 -0
  417. package/dist/tools/apply-patch.js +399 -0
  418. package/dist/tools/apply-patch.js.map +1 -0
  419. package/dist/tools/apply-patch.test.d.ts +2 -0
  420. package/dist/tools/apply-patch.test.d.ts.map +1 -0
  421. package/dist/tools/apply-patch.test.js +155 -0
  422. package/dist/tools/apply-patch.test.js.map +1 -0
  423. package/dist/tools/ask-mentor.d.ts +11 -0
  424. package/dist/tools/ask-mentor.d.ts.map +1 -0
  425. package/dist/tools/ask-mentor.js +52 -0
  426. package/dist/tools/ask-mentor.js.map +1 -0
  427. package/dist/tools/ask-mentor.test.d.ts +2 -0
  428. package/dist/tools/ask-mentor.test.d.ts.map +1 -0
  429. package/dist/tools/ask-mentor.test.js +47 -0
  430. package/dist/tools/ask-mentor.test.js.map +1 -0
  431. package/dist/tools/bash.d.ts +10 -0
  432. package/dist/tools/bash.d.ts.map +1 -0
  433. package/dist/tools/bash.js +55 -0
  434. package/dist/tools/bash.js.map +1 -0
  435. package/dist/tools/find-files.d.ts +15 -0
  436. package/dist/tools/find-files.d.ts.map +1 -0
  437. package/dist/tools/find-files.js +179 -0
  438. package/dist/tools/find-files.js.map +1 -0
  439. package/dist/tools/find-files.test.d.ts +2 -0
  440. package/dist/tools/find-files.test.d.ts.map +1 -0
  441. package/dist/tools/find-files.test.js +131 -0
  442. package/dist/tools/find-files.test.js.map +1 -0
  443. package/dist/tools/format-helpers.d.ts +34 -0
  444. package/dist/tools/format-helpers.d.ts.map +1 -0
  445. package/dist/tools/format-helpers.js +131 -0
  446. package/dist/tools/format-helpers.js.map +1 -0
  447. package/dist/tools/grep.d.ts +16 -0
  448. package/dist/tools/grep.d.ts.map +1 -0
  449. package/dist/tools/grep.js +211 -0
  450. package/dist/tools/grep.js.map +1 -0
  451. package/dist/tools/read-file.d.ts +15 -0
  452. package/dist/tools/read-file.d.ts.map +1 -0
  453. package/dist/tools/read-file.js +114 -0
  454. package/dist/tools/read-file.js.map +1 -0
  455. package/dist/tools/read-file.test.d.ts +2 -0
  456. package/dist/tools/read-file.test.d.ts.map +1 -0
  457. package/dist/tools/read-file.test.js +122 -0
  458. package/dist/tools/read-file.test.js.map +1 -0
  459. package/dist/tools/search-replace.d.ts +19 -0
  460. package/dist/tools/search-replace.d.ts.map +1 -0
  461. package/dist/tools/search-replace.js +411 -0
  462. package/dist/tools/search-replace.js.map +1 -0
  463. package/dist/tools/search-replace.test.d.ts +2 -0
  464. package/dist/tools/search-replace.test.d.ts.map +1 -0
  465. package/dist/tools/search-replace.test.js +302 -0
  466. package/dist/tools/search-replace.test.js.map +1 -0
  467. package/dist/tools/search.d.ts +15 -0
  468. package/dist/tools/search.d.ts.map +1 -0
  469. package/dist/tools/search.js +143 -0
  470. package/dist/tools/search.js.map +1 -0
  471. package/dist/tools/shell.d.ts +19 -0
  472. package/dist/tools/shell.d.ts.map +1 -0
  473. package/dist/tools/shell.js +278 -0
  474. package/dist/tools/shell.js.map +1 -0
  475. package/dist/tools/tool-execution-context.d.ts +7 -0
  476. package/dist/tools/tool-execution-context.d.ts.map +1 -0
  477. package/dist/tools/tool-execution-context.js +7 -0
  478. package/dist/tools/tool-execution-context.js.map +1 -0
  479. package/dist/tools/types.d.ts +30 -0
  480. package/dist/tools/types.d.ts.map +1 -0
  481. package/dist/tools/types.js +2 -0
  482. package/dist/tools/types.js.map +1 -0
  483. package/dist/tools/utils.d.ts +12 -0
  484. package/dist/tools/utils.d.ts.map +1 -0
  485. package/dist/tools/utils.js +19 -0
  486. package/dist/tools/utils.js.map +1 -0
  487. package/dist/tools/web-search.d.ts +29 -0
  488. package/dist/tools/web-search.d.ts.map +1 -0
  489. package/dist/tools/web-search.js +106 -0
  490. package/dist/tools/web-search.js.map +1 -0
  491. package/dist/tools/web-search.test.d.ts +2 -0
  492. package/dist/tools/web-search.test.d.ts.map +1 -0
  493. package/dist/tools/web-search.test.js +176 -0
  494. package/dist/tools/web-search.test.js.map +1 -0
  495. package/dist/utils/command-logger.d.ts +11 -0
  496. package/dist/utils/command-logger.d.ts.map +1 -0
  497. package/dist/utils/command-logger.js +34 -0
  498. package/dist/utils/command-logger.js.map +1 -0
  499. package/dist/utils/command-safety/constants.d.ts +21 -0
  500. package/dist/utils/command-safety/constants.d.ts.map +1 -0
  501. package/dist/utils/command-safety/constants.js +245 -0
  502. package/dist/utils/command-safety/constants.js.map +1 -0
  503. package/dist/utils/command-safety/find-helpers.d.ts +15 -0
  504. package/dist/utils/command-safety/find-helpers.d.ts.map +1 -0
  505. package/dist/utils/command-safety/find-helpers.js +218 -0
  506. package/dist/utils/command-safety/find-helpers.js.map +1 -0
  507. package/dist/utils/command-safety/handlers/find-handler.d.ts +6 -0
  508. package/dist/utils/command-safety/handlers/find-handler.d.ts.map +1 -0
  509. package/dist/utils/command-safety/handlers/find-handler.js +113 -0
  510. package/dist/utils/command-safety/handlers/find-handler.js.map +1 -0
  511. package/dist/utils/command-safety/handlers/git-handler.d.ts +6 -0
  512. package/dist/utils/command-safety/handlers/git-handler.d.ts.map +1 -0
  513. package/dist/utils/command-safety/handlers/git-handler.js +68 -0
  514. package/dist/utils/command-safety/handlers/git-handler.js.map +1 -0
  515. package/dist/utils/command-safety/handlers/index.d.ts +13 -0
  516. package/dist/utils/command-safety/handlers/index.d.ts.map +1 -0
  517. package/dist/utils/command-safety/handlers/index.js +20 -0
  518. package/dist/utils/command-safety/handlers/index.js.map +1 -0
  519. package/dist/utils/command-safety/handlers/sed-handler.d.ts +6 -0
  520. package/dist/utils/command-safety/handlers/sed-handler.d.ts.map +1 -0
  521. package/dist/utils/command-safety/handlers/sed-handler.js +94 -0
  522. package/dist/utils/command-safety/handlers/sed-handler.js.map +1 -0
  523. package/dist/utils/command-safety/handlers/types.d.ts +36 -0
  524. package/dist/utils/command-safety/handlers/types.d.ts.map +1 -0
  525. package/dist/utils/command-safety/handlers/types.js +2 -0
  526. package/dist/utils/command-safety/handlers/types.js.map +1 -0
  527. package/dist/utils/command-safety/index.d.ts +14 -0
  528. package/dist/utils/command-safety/index.d.ts.map +1 -0
  529. package/dist/utils/command-safety/index.js +183 -0
  530. package/dist/utils/command-safety/index.js.map +1 -0
  531. package/dist/utils/command-safety/path-analysis.d.ts +4 -0
  532. package/dist/utils/command-safety/path-analysis.d.ts.map +1 -0
  533. package/dist/utils/command-safety/path-analysis.js +153 -0
  534. package/dist/utils/command-safety/path-analysis.js.map +1 -0
  535. package/dist/utils/command-safety/utils.d.ts +2 -0
  536. package/dist/utils/command-safety/utils.d.ts.map +1 -0
  537. package/dist/utils/command-safety/utils.js +22 -0
  538. package/dist/utils/command-safety/utils.js.map +1 -0
  539. package/dist/utils/command-safety.d.ts +21 -0
  540. package/dist/utils/command-safety.d.ts.map +1 -0
  541. package/dist/utils/command-safety.find.test.d.ts +2 -0
  542. package/dist/utils/command-safety.find.test.d.ts.map +1 -0
  543. package/dist/utils/command-safety.find.test.js +342 -0
  544. package/dist/utils/command-safety.find.test.js.map +1 -0
  545. package/dist/utils/command-safety.js +702 -0
  546. package/dist/utils/command-safety.js.map +1 -0
  547. package/dist/utils/command-safety.path.test.d.ts +2 -0
  548. package/dist/utils/command-safety.path.test.d.ts.map +1 -0
  549. package/dist/utils/command-safety.path.test.js +360 -0
  550. package/dist/utils/command-safety.path.test.js.map +1 -0
  551. package/dist/utils/diff.d.ts +2 -0
  552. package/dist/utils/diff.d.ts.map +1 -0
  553. package/dist/utils/diff.js +44 -0
  554. package/dist/utils/diff.js.map +1 -0
  555. package/dist/utils/diff.test.d.ts +2 -0
  556. package/dist/utils/diff.test.d.ts.map +1 -0
  557. package/dist/utils/diff.test.js +85 -0
  558. package/dist/utils/diff.test.js.map +1 -0
  559. package/dist/utils/error-helpers.d.ts +6 -0
  560. package/dist/utils/error-helpers.d.ts.map +1 -0
  561. package/dist/utils/error-helpers.js +46 -0
  562. package/dist/utils/error-helpers.js.map +1 -0
  563. package/dist/utils/error-helpers.test.d.ts +2 -0
  564. package/dist/utils/error-helpers.test.d.ts.map +1 -0
  565. package/dist/utils/error-helpers.test.js +152 -0
  566. package/dist/utils/error-helpers.test.js.map +1 -0
  567. package/dist/utils/execute-shell.d.ts +15 -0
  568. package/dist/utils/execute-shell.d.ts.map +1 -0
  569. package/dist/utils/execute-shell.js +34 -0
  570. package/dist/utils/execute-shell.js.map +1 -0
  571. package/dist/utils/execute-shell.test.d.ts +2 -0
  572. package/dist/utils/execute-shell.test.d.ts.map +1 -0
  573. package/dist/utils/execute-shell.test.js +20 -0
  574. package/dist/utils/execute-shell.test.js.map +1 -0
  575. package/dist/utils/extract-command-messages.d.ts +5 -0
  576. package/dist/utils/extract-command-messages.d.ts.map +1 -0
  577. package/dist/utils/extract-command-messages.js +140 -0
  578. package/dist/utils/extract-command-messages.js.map +1 -0
  579. package/dist/utils/extract-command-messages.repro.test.d.ts +2 -0
  580. package/dist/utils/extract-command-messages.repro.test.d.ts.map +1 -0
  581. package/dist/utils/extract-command-messages.repro.test.js +31 -0
  582. package/dist/utils/extract-command-messages.repro.test.js.map +1 -0
  583. package/dist/utils/extract-command-messages.test.js +57 -0
  584. package/dist/utils/message-buffer.d.ts +2 -0
  585. package/dist/utils/message-buffer.d.ts.map +1 -0
  586. package/dist/utils/message-buffer.js +15 -0
  587. package/dist/utils/message-buffer.js.map +1 -0
  588. package/dist/utils/message-buffer.test.d.ts +2 -0
  589. package/dist/utils/message-buffer.test.d.ts.map +1 -0
  590. package/dist/utils/message-buffer.test.js +17 -0
  591. package/dist/utils/message-buffer.test.js.map +1 -0
  592. package/dist/utils/output-trim.d.ts +31 -0
  593. package/dist/utils/output-trim.d.ts.map +1 -0
  594. package/dist/utils/output-trim.js +71 -0
  595. package/dist/utils/output-trim.js.map +1 -0
  596. package/dist/utils/provider-credentials.d.ts +10 -0
  597. package/dist/utils/provider-credentials.d.ts.map +1 -0
  598. package/dist/utils/provider-credentials.js +22 -0
  599. package/dist/utils/provider-credentials.js.map +1 -0
  600. package/dist/utils/settings-command.d.ts +13 -0
  601. package/dist/utils/settings-command.d.ts.map +1 -0
  602. package/dist/utils/settings-command.js +173 -0
  603. package/dist/utils/settings-command.js.map +1 -0
  604. package/dist/utils/ssh-config-parser.d.ts +21 -0
  605. package/dist/utils/ssh-config-parser.d.ts.map +1 -0
  606. package/dist/utils/ssh-config-parser.js +89 -0
  607. package/dist/utils/ssh-config-parser.js.map +1 -0
  608. package/dist/utils/ssh-config-parser.test.d.ts +2 -0
  609. package/dist/utils/ssh-config-parser.test.d.ts.map +1 -0
  610. package/dist/utils/ssh-config-parser.test.js +153 -0
  611. package/dist/utils/ssh-config-parser.test.js.map +1 -0
  612. package/dist/utils/streaming-updater.d.ts +7 -0
  613. package/dist/utils/streaming-updater.d.ts.map +1 -0
  614. package/dist/utils/streaming-updater.js +41 -0
  615. package/dist/utils/streaming-updater.js.map +1 -0
  616. package/dist/utils/throttle.d.ts +7 -0
  617. package/dist/utils/throttle.d.ts.map +1 -0
  618. package/dist/utils/throttle.js +49 -0
  619. package/dist/utils/throttle.js.map +1 -0
  620. package/package.json +108 -0
  621. package/readme.md +428 -0
@@ -0,0 +1,41 @@
1
+ import { createThrottledFunction } from './throttle.js';
2
+ export const createStreamingUpdateCoordinator = (onUpdate, intervalMs) => {
3
+ let lastEmitted = null;
4
+ const throttled = createThrottledFunction((...args) => {
5
+ if (lastEmitted && args.length === lastEmitted.length) {
6
+ let isDuplicate = true;
7
+ for (let i = 0; i < args.length; i += 1) {
8
+ if (args[i] !== lastEmitted[i]) {
9
+ isDuplicate = false;
10
+ break;
11
+ }
12
+ }
13
+ if (isDuplicate) {
14
+ return;
15
+ }
16
+ }
17
+ lastEmitted = args;
18
+ onUpdate(...args);
19
+ }, intervalMs);
20
+ const push = (...args) => {
21
+ if (lastEmitted && args.length === lastEmitted.length) {
22
+ let isDuplicate = true;
23
+ for (let i = 0; i < args.length; i += 1) {
24
+ if (args[i] !== lastEmitted[i]) {
25
+ isDuplicate = false;
26
+ break;
27
+ }
28
+ }
29
+ if (isDuplicate) {
30
+ return;
31
+ }
32
+ }
33
+ throttled.throttled(...args);
34
+ };
35
+ return {
36
+ push,
37
+ flush: throttled.flush,
38
+ cancel: throttled.cancel,
39
+ };
40
+ };
41
+ //# sourceMappingURL=streaming-updater.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"streaming-updater.js","sourceRoot":"","sources":["../../source/utils/streaming-updater.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,uBAAuB,EAAC,MAAM,eAAe,CAAC;AAQtD,MAAM,CAAC,MAAM,gCAAgC,GAAG,CAC5C,QAAiC,EACjC,UAAkB,EACc,EAAE;IAClC,IAAI,WAAW,GAAgB,IAAI,CAAC;IAEpC,MAAM,SAAS,GAAG,uBAAuB,CAAC,CAAC,GAAG,IAAU,EAAE,EAAE;QACxD,IAAI,WAAW,IAAI,IAAI,CAAC,MAAM,KAAK,WAAW,CAAC,MAAM,EAAE,CAAC;YACpD,IAAI,WAAW,GAAG,IAAI,CAAC;YACvB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC;gBACtC,IAAI,IAAI,CAAC,CAAC,CAAC,KAAK,WAAW,CAAC,CAAC,CAAC,EAAE,CAAC;oBAC7B,WAAW,GAAG,KAAK,CAAC;oBACpB,MAAM;gBACV,CAAC;YACL,CAAC;YACD,IAAI,WAAW,EAAE,CAAC;gBACd,OAAO;YACX,CAAC;QACL,CAAC;QACD,WAAW,GAAG,IAAI,CAAC;QACnB,QAAQ,CAAC,GAAG,IAAI,CAAC,CAAC;IACtB,CAAC,EAAE,UAAU,CAAC,CAAC;IAEf,MAAM,IAAI,GAAG,CAAC,GAAG,IAAU,EAAE,EAAE;QAC3B,IAAI,WAAW,IAAI,IAAI,CAAC,MAAM,KAAK,WAAW,CAAC,MAAM,EAAE,CAAC;YACpD,IAAI,WAAW,GAAG,IAAI,CAAC;YACvB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC;gBACtC,IAAI,IAAI,CAAC,CAAC,CAAC,KAAK,WAAW,CAAC,CAAC,CAAC,EAAE,CAAC;oBAC7B,WAAW,GAAG,KAAK,CAAC;oBACpB,MAAM;gBACV,CAAC;YACL,CAAC;YACD,IAAI,WAAW,EAAE,CAAC;gBACd,OAAO;YACX,CAAC;QACL,CAAC;QACD,SAAS,CAAC,SAAS,CAAC,GAAG,IAAI,CAAC,CAAC;IACjC,CAAC,CAAC;IAEF,OAAO;QACH,IAAI;QACJ,KAAK,EAAE,SAAS,CAAC,KAAK;QACtB,MAAM,EAAE,SAAS,CAAC,MAAM;KAC3B,CAAC;AACN,CAAC,CAAC"}
@@ -0,0 +1,7 @@
1
+ export type ThrottledFunction<Args extends unknown[]> = {
2
+ throttled: (...args: Args) => void;
3
+ flush: () => void;
4
+ cancel: () => void;
5
+ };
6
+ export declare const createThrottledFunction: <Args extends unknown[]>(fn: (...args: Args) => void, intervalMs: number) => ThrottledFunction<Args>;
7
+ //# sourceMappingURL=throttle.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"throttle.d.ts","sourceRoot":"","sources":["../../source/utils/throttle.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,iBAAiB,CAAC,IAAI,SAAS,OAAO,EAAE,IAAI;IACpD,SAAS,EAAE,CAAC,GAAG,IAAI,EAAE,IAAI,KAAK,IAAI,CAAC;IACnC,KAAK,EAAE,MAAM,IAAI,CAAC;IAClB,MAAM,EAAE,MAAM,IAAI,CAAC;CACtB,CAAC;AAEF,eAAO,MAAM,uBAAuB,GAAI,IAAI,SAAS,OAAO,EAAE,EAC1D,IAAI,CAAC,GAAG,IAAI,EAAE,IAAI,KAAK,IAAI,EAC3B,YAAY,MAAM,KACnB,iBAAiB,CAAC,IAAI,CAkDxB,CAAC"}
@@ -0,0 +1,49 @@
1
+ export const createThrottledFunction = (fn, intervalMs) => {
2
+ let lastCallTime = 0;
3
+ let timeout = null;
4
+ let pendingArgs = null;
5
+ const invoke = () => {
6
+ if (!pendingArgs)
7
+ return;
8
+ const args = pendingArgs;
9
+ pendingArgs = null;
10
+ lastCallTime = Date.now();
11
+ fn(...args);
12
+ };
13
+ const schedule = (delayMs) => {
14
+ if (timeout)
15
+ return;
16
+ timeout = setTimeout(() => {
17
+ timeout = null;
18
+ invoke();
19
+ }, delayMs);
20
+ };
21
+ const throttled = (...args) => {
22
+ pendingArgs = args;
23
+ if (timeout)
24
+ return;
25
+ const now = Date.now();
26
+ const elapsed = now - lastCallTime;
27
+ if (elapsed >= intervalMs) {
28
+ invoke();
29
+ return;
30
+ }
31
+ schedule(intervalMs - elapsed);
32
+ };
33
+ const flush = () => {
34
+ if (timeout) {
35
+ clearTimeout(timeout);
36
+ timeout = null;
37
+ }
38
+ invoke();
39
+ };
40
+ const cancel = () => {
41
+ if (timeout) {
42
+ clearTimeout(timeout);
43
+ timeout = null;
44
+ }
45
+ pendingArgs = null;
46
+ };
47
+ return { throttled, flush, cancel };
48
+ };
49
+ //# sourceMappingURL=throttle.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"throttle.js","sourceRoot":"","sources":["../../source/utils/throttle.ts"],"names":[],"mappings":"AAMA,MAAM,CAAC,MAAM,uBAAuB,GAAG,CACnC,EAA2B,EAC3B,UAAkB,EACK,EAAE;IACzB,IAAI,YAAY,GAAG,CAAC,CAAC;IACrB,IAAI,OAAO,GAAyC,IAAI,CAAC;IACzD,IAAI,WAAW,GAAgB,IAAI,CAAC;IAEpC,MAAM,MAAM,GAAG,GAAG,EAAE;QAChB,IAAI,CAAC,WAAW;YAAE,OAAO;QACzB,MAAM,IAAI,GAAG,WAAW,CAAC;QACzB,WAAW,GAAG,IAAI,CAAC;QACnB,YAAY,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;QAC1B,EAAE,CAAC,GAAG,IAAI,CAAC,CAAC;IAChB,CAAC,CAAC;IAEF,MAAM,QAAQ,GAAG,CAAC,OAAe,EAAE,EAAE;QACjC,IAAI,OAAO;YAAE,OAAO;QACpB,OAAO,GAAG,UAAU,CAAC,GAAG,EAAE;YACtB,OAAO,GAAG,IAAI,CAAC;YACf,MAAM,EAAE,CAAC;QACb,CAAC,EAAE,OAAO,CAAC,CAAC;IAChB,CAAC,CAAC;IAEF,MAAM,SAAS,GAAG,CAAC,GAAG,IAAU,EAAE,EAAE;QAChC,WAAW,GAAG,IAAI,CAAC;QACnB,IAAI,OAAO;YAAE,OAAO;QACpB,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;QACvB,MAAM,OAAO,GAAG,GAAG,GAAG,YAAY,CAAC;QACnC,IAAI,OAAO,IAAI,UAAU,EAAE,CAAC;YACxB,MAAM,EAAE,CAAC;YACT,OAAO;QACX,CAAC;QACD,QAAQ,CAAC,UAAU,GAAG,OAAO,CAAC,CAAC;IACnC,CAAC,CAAC;IAEF,MAAM,KAAK,GAAG,GAAG,EAAE;QACf,IAAI,OAAO,EAAE,CAAC;YACV,YAAY,CAAC,OAAO,CAAC,CAAC;YACtB,OAAO,GAAG,IAAI,CAAC;QACnB,CAAC;QACD,MAAM,EAAE,CAAC;IACb,CAAC,CAAC;IAEF,MAAM,MAAM,GAAG,GAAG,EAAE;QAChB,IAAI,OAAO,EAAE,CAAC;YACV,YAAY,CAAC,OAAO,CAAC,CAAC;YACtB,OAAO,GAAG,IAAI,CAAC;QACnB,CAAC;QACD,WAAW,GAAG,IAAI,CAAC;IACvB,CAAC,CAAC;IAEF,OAAO,EAAC,SAAS,EAAE,KAAK,EAAE,MAAM,EAAC,CAAC;AACtC,CAAC,CAAC"}
package/package.json ADDED
@@ -0,0 +1,108 @@
1
+ {
2
+ "name": "@qduc/term2",
3
+ "version": "0.1.0",
4
+ "description": "A terminal-based AI assistant that can help you get things done on your computer",
5
+ "license": "MIT",
6
+ "author": "qduc",
7
+ "keywords": [
8
+ "ai",
9
+ "assistant",
10
+ "cli",
11
+ "terminal",
12
+ "openai",
13
+ "agent",
14
+ "chat",
15
+ "gpt"
16
+ ],
17
+ "repository": {
18
+ "type": "git",
19
+ "url": "https://github.com/qduc/term2.git"
20
+ },
21
+ "homepage": "https://github.com/qduc/term2",
22
+ "bugs": {
23
+ "url": "https://github.com/qduc/term2/issues"
24
+ },
25
+ "bin": {
26
+ "term2": "dist/cli.js"
27
+ },
28
+ "type": "module",
29
+ "engines": {
30
+ "node": ">=16"
31
+ },
32
+ "scripts": {
33
+ "start": "node dist/cli.js",
34
+ "build": "tsc && npm run post-build",
35
+ "dev": "tsc --watch",
36
+ "test": "DISABLE_LOGGING=1 ava --reporter=min | grep -v '✔'",
37
+ "test:verbose": "tsc && ava",
38
+ "lint": "prettier --check .",
39
+ "lint-fix": "prettier --write .",
40
+ "post-build": "cp -r source/prompts dist/",
41
+ "prepublishOnly": "npm run build && npm test",
42
+ "logs": "node tools/log_viewer/src/server.js"
43
+ },
44
+ "files": [
45
+ "dist"
46
+ ],
47
+ "dependencies": {
48
+ "@openai/agents": "^0.3.3",
49
+ "@types/ssh2": "^1.15.5",
50
+ "bash-parser": "^0.5.0",
51
+ "env-paths": "^3.0.0",
52
+ "fast-glob": "^3.3.2",
53
+ "fuse.js": "^7.0.0",
54
+ "ignore": "^5.3.2",
55
+ "ink": "^6.5.1",
56
+ "ink-prompt": "^0.1.7",
57
+ "marked": "^17.0.1",
58
+ "meow": "^11.0.0",
59
+ "openai": "^6.9.1",
60
+ "react": "^19.0.0",
61
+ "ssh2": "^1.17.0",
62
+ "winston": "^3.18.3",
63
+ "winston-daily-rotate-file": "^5.0.0",
64
+ "zod": "^4.1.13"
65
+ },
66
+ "devDependencies": {
67
+ "@ava/typescript": "^6.0.0",
68
+ "@babel/cli": "^7.21.0",
69
+ "@babel/preset-react": "^7.18.6",
70
+ "@types/env-paths": "^1.0.2",
71
+ "@types/marked": "^5.0.2",
72
+ "@types/node": "^24.10.1",
73
+ "@types/react": "^19.0.0",
74
+ "ava": "^6.4.1",
75
+ "chalk": "^5.2.0",
76
+ "eslint-config-xo-react": "^0.27.0",
77
+ "eslint-plugin-react": "^7.32.2",
78
+ "eslint-plugin-react-hooks": "^4.6.0",
79
+ "import-jsx": "^5.0.0",
80
+ "ink-testing-library": "^4.0.0",
81
+ "prettier": "^2.8.7",
82
+ "tsx": "^4.20.6",
83
+ "typescript": "^5.9.3"
84
+ },
85
+ "ava": {
86
+ "environmentVariables": {
87
+ "NODE_NO_WARNINGS": "1",
88
+ "DISABLE_LOGGING": "1"
89
+ },
90
+ "typescript": {
91
+ "rewritePaths": {
92
+ "source/": "dist/"
93
+ },
94
+ "compile": "tsc"
95
+ }
96
+ },
97
+ "xo": {
98
+ "extends": "xo-react",
99
+ "prettier": true,
100
+ "ignores": [
101
+ "**/*.test.js"
102
+ ],
103
+ "rules": {
104
+ "react/prop-types": "off",
105
+ "unicorn/expiring-todo-comments": "off"
106
+ }
107
+ }
108
+ }
package/readme.md ADDED
@@ -0,0 +1,428 @@
1
+ # term2
2
+
3
+ [![npm version](https://img.shields.io/npm/v/term2.svg)](https://www.npmjs.com/package/term2)
4
+ [![License: MIT](https://img.shields.io/badge/License-MIT-blue.svg)](https://opensource.org/licenses/MIT)
5
+ [![Node.js Version](https://img.shields.io/node/v/term2.svg)](https://nodejs.org)
6
+
7
+ A powerful terminal-based AI assistant that helps you get things done on your computer through natural conversation.
8
+
9
+ ## Features
10
+
11
+ - 🤖 **Multi-Provider Support** - Works with OpenAI, OpenRouter, and OpenAI-compatible APIs
12
+ - 🔒 **Safe Execution** - Every command requires your explicit approval with diff preview
13
+ - 🛠️ **Advanced Tools** - Shell execution, file patching, search/replace, grep, find files, file reading, web search, and mentor consultation
14
+ - 💬 **Slash Commands** - Quick actions like `/clear`, `/quit`, `/model`, `/setting` for easy control
15
+ - 📝 **Smart Context** - The assistant understands your environment and provides relevant help
16
+ - 🎯 **Streaming Responses** - See the AI's thoughts and reasoning in real-time
17
+ - 🧠 **Reasoning Effort Control** - Configurable reasoning levels (minimal to high) for O1/O3 models
18
+ - ⚡ **Command History** - Navigate previous inputs with arrow keys
19
+ - 🎨 **Markdown Rendering** - Formatted code blocks and text in the terminal
20
+ - 🔄 **Retry Logic** - Automatic recovery from tool hallucinations and upstream errors
21
+ - 🌐 **SSH Mode** - Execute commands and edit files on remote servers over SSH
22
+
23
+ ## Demo
24
+
25
+ <!-- Add a demo GIF or screenshot here -->
26
+
27
+ ```
28
+ $ term2
29
+ You: What files are in my current directory?
30
+ Assistant: I'll list the files for you.
31
+
32
+ 📋 Command to execute:
33
+ ls -la
34
+
35
+ Approve? (y/n): y
36
+ ...
37
+ ```
38
+
39
+ ## Installation
40
+
41
+ **Requirements:**
42
+
43
+ - Node.js 16 or higher
44
+ - An API key from OpenAI, OpenRouter, or any OpenAI-compatible provider
45
+
46
+ Install globally via npm:
47
+
48
+ ```bash
49
+ npm install --global term2
50
+ ```
51
+
52
+ Set your API key as an environment variable:
53
+
54
+ ```bash
55
+ # For OpenAI (default)
56
+ export OPENAI_API_KEY="your-api-key-here"
57
+
58
+ # For OpenRouter
59
+ export TERM2_AGENT_PROVIDER="openrouter"
60
+ export TERM2_AGENT_OPENROUTER_API_KEY="your-openrouter-key"
61
+ ```
62
+
63
+ To make it permanent, add the export to your shell configuration file (`~/.bashrc`, `~/.zshrc`, or `~/.profile`).
64
+
65
+ ## Usage
66
+
67
+ Start the assistant:
68
+
69
+ ```bash
70
+ term2
71
+ ```
72
+
73
+ Then simply chat with the AI! Type your question or request, press Enter, and the assistant will help you.
74
+
75
+ ### Basic Examples
76
+
77
+ ```
78
+ "What files are in my current directory?"
79
+ "Show me my git status"
80
+ "Create a backup of my documents folder"
81
+ "What's using port 3000?"
82
+ ```
83
+
84
+ ### Advanced Examples
85
+
86
+ ```
87
+ "Find all TODO comments in my JavaScript files"
88
+ "Help me debug why my server won't start on port 8080"
89
+ "Create a new React component called UserProfile"
90
+ "Show me the disk usage of my home directory"
91
+ "What processes are consuming the most memory?"
92
+ "Search for the word 'config' in all .json files"
93
+ ```
94
+
95
+ ### Command Line Options
96
+
97
+ ```bash
98
+ term2 # Start with default model (gpt-5.1)
99
+ term2 -m gpt-4o # Use a specific model
100
+ term2 --model gpt-4o-mini # Use GPT-4o mini for faster/cheaper responses
101
+ term2 -r high # Set reasoning effort to high (for O1/O3 models)
102
+ term2 --reasoning medium # Set reasoning effort to medium
103
+ term2 --lite # Start in lite mode (session-only, minimal context)
104
+
105
+ # SSH Mode - execute on remote servers
106
+ term2 --ssh user@host --remote-dir /path/to/project
107
+ term2 --ssh deploy@server.com --remote-dir /var/www/app --ssh-port 2222
108
+
109
+ # Combine SSH with lite mode for remote terminal assistance
110
+ term2 --ssh user@host --remote-dir /path --lite
111
+ ```
112
+
113
+ ### Slash Commands
114
+
115
+ While in the chat, you can use these commands:
116
+
117
+ - `/clear` - Clear the conversation history
118
+ - `/quit` - Exit the application
119
+ - `/model [model-name]` - Switch to a different model
120
+ - `/mentor` - Toggle mentor mode (collaborative mode with mentor model)
121
+ - `/lite` - Toggle lite mode (minimal context, session-only)
122
+ - `/settings [key] [value]` - Modify runtime settings (e.g., `/settings agent.temperature 0.7`)
123
+
124
+ ## Configuration
125
+
126
+ term2 stores its configuration in:
127
+
128
+ - **macOS**: `~/Library/Logs/term2-nodejs/settings.json`
129
+ - **Linux**: `~/.local/state/term2-nodejs/settings.json`
130
+
131
+ You can also configure settings via environment variables (prefix with `TERM2_`):
132
+
133
+ ```bash
134
+ # Agent settings
135
+ export TERM2_AGENT_MODEL="gpt-4o"
136
+ export TERM2_AGENT_PROVIDER="openai" # or "openrouter"
137
+ export TERM2_AGENT_REASONING_EFFORT="medium" # none, minimal, low, medium, high, default
138
+ export TERM2_AGENT_TEMPERATURE="0.7" # 0.0 to 2.0
139
+ export TERM2_AGENT_MAX_TURNS="100"
140
+ export TERM2_AGENT_RETRY_ATTEMPTS="2"
141
+
142
+ # Provider-specific settings
143
+ export TERM2_AGENT_OPENROUTER_API_KEY="your-key"
144
+
145
+ # Tool settings
146
+ export TERM2_SHELL_TIMEOUT="180000"
147
+ export TERM2_SHELL_MAX_OUTPUT_LINES="1000"
148
+
149
+ # Web Search settings
150
+ export TAVILY_API_KEY="tvly-..." # Your Tavily API key
151
+ export TERM2_WEBSEARCH_PROVIDER="tavily" # Web search provider (default: tavily)
152
+
153
+ # App settings
154
+ export TERM2_APP_MODE="default" # or "edit" for automatic patch approval
155
+
156
+ # SSH settings (alternative to CLI flags)
157
+ export TERM2_SSH_HOST="user@server.com"
158
+ export TERM2_SSH_PORT="22"
159
+ export TERM2_SSH_REMOTE_DIR="/path/to/project"
160
+ ```
161
+
162
+ ## How It Works
163
+
164
+ 1. You type a message and press Enter
165
+ 2. The AI analyzes your request and determines if it needs to execute commands
166
+ 3. If a command is needed, you'll see a preview and approval prompt
167
+ 4. After approval, the command runs and results are shown
168
+ 5. The AI uses the results to provide a helpful response
169
+ 6. You stay in full control - reject any command with 'n'
170
+
171
+ ## SSH Mode
172
+
173
+ 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.
174
+
175
+ ### Requirements
176
+
177
+ - SSH agent running with your keys loaded (`ssh-add`)
178
+ - SSH access to the target server
179
+ - `--remote-dir` is required to specify the working directory (optional in lite mode - will auto-detect)
180
+
181
+ ### Usage
182
+
183
+ ```bash
184
+ # Basic usage
185
+ term2 --ssh user@hostname --remote-dir /path/to/project
186
+
187
+ # With custom SSH port
188
+ term2 --ssh user@hostname --remote-dir /path/to/project --ssh-port 2222
189
+
190
+ # With lite mode (auto-detects remote directory)
191
+ term2 --ssh user@hostname --lite
192
+ ```
193
+
194
+ ### How It Works
195
+
196
+ When SSH mode is enabled:
197
+ 1. term2 establishes an SSH connection using your SSH agent for authentication
198
+ 2. All shell commands are executed on the remote server via SSH
199
+ 3. File operations (read, write, patch) are performed remotely using shell commands (`cat`, heredocs)
200
+ 4. The working directory is set to `--remote-dir` on the remote server
201
+ 5. The connection is automatically closed when you exit term2
202
+
203
+ ### Combining with Lite Mode
204
+
205
+ SSH mode works seamlessly with lite mode for lightweight remote terminal assistance:
206
+
207
+ ```bash
208
+ term2 --ssh user@host --remote-dir /path/to/project --lite
209
+ ```
210
+
211
+ This combination provides:
212
+ - Remote command execution over SSH
213
+ - Read-only tools (grep, find_files, read_file) for exploration
214
+ - Minimal context and faster responses
215
+ - No file editing tools (safer for production servers)
216
+
217
+ ### Limitations
218
+
219
+ - Authentication is via SSH agent only (no password prompts)
220
+ - Binary file operations are not supported (text files only)
221
+ - Large file transfers may be slower than local operations
222
+
223
+ ## Safety Features
224
+
225
+ - **Command Approval** - Every destructive operation requires your explicit confirmation
226
+ - **Diff Preview** - See exact file changes before approving patches or edits
227
+ - **Risk Analysis** - Dangerous operations (like `rm -rf`, `git push --force`) are flagged
228
+ - **Path Safety** - Operations on sensitive directories require extra caution
229
+ - **Dry-Run Validation** - Patches are validated before approval to prevent errors
230
+ - **No Hidden Actions** - All tool usage is transparent and visible
231
+ - **Retry Limits** - Automatic abort after consecutive tool failures (default: 3)
232
+
233
+ ## Available Tools
234
+
235
+ The AI assistant has access to these tools to help you:
236
+
237
+ ### Shell Tool
238
+ Execute shell commands with safety validation:
239
+ - Detects dangerous patterns (`rm -rf`, force operations)
240
+ - Validates paths to prevent operations on sensitive directories
241
+ - Configurable timeout and output limits
242
+ - Requires explicit approval before execution
243
+
244
+ ### Apply Patch Tool
245
+ Apply file changes using unified diff format:
246
+ - Create new files or update existing ones
247
+ - Dry-run validation before approval
248
+ - Clear diff preview showing exact changes
249
+ - Supports "edit mode" for automatic approval
250
+
251
+ ### Search & Replace Tool
252
+ Find and replace text in files:
253
+ - Exact match with fallback to line-by-line matching
254
+ - Diff generation for user preview
255
+ - Single or multiple replacements
256
+ - Requires approval before making changes
257
+
258
+ ### Grep Tool
259
+ Search codebase for patterns:
260
+ - Uses ripgrep when available (fast!)
261
+ - Supports regex patterns
262
+ - Respects .gitignore
263
+ - Read-only operation (no approval needed)
264
+
265
+ ### Ask Mentor Tool
266
+ Consult a smarter model for advice:
267
+ - Query a different/better model for complex questions
268
+ - Configurable mentor model via settings
269
+ - Useful for getting second opinions
270
+
271
+ ### Find Files Tool
272
+ Search for files in the workspace:
273
+ - High-performance file search using `fd`
274
+ - Supports glob patterns and exclusions
275
+ - Respects `.gitignore` by default
276
+
277
+ ### Read File Tool
278
+ Read file contents with precision:
279
+ - Read entire files or specific line ranges
280
+ - Optimizes context usage for large files
281
+ - Support for reading multiple files
282
+
283
+ ### Web Search Tool
284
+ Search the web for information:
285
+ - Uses Tavily API by default for web search
286
+ - Converts results to markdown for readability
287
+ - Pluggable architecture ready to swap in other providers (Serper, Brave, etc.)
288
+ - Read-only operation (no approval needed)
289
+ - Requires `TAVILY_API_KEY` environment variable or settings configuration
290
+
291
+
292
+ ## Supported Models
293
+
294
+ term2 works with multiple AI providers:
295
+
296
+ ### OpenAI (default)
297
+ - `gpt-5.2` (latest)
298
+ - `gpt-5.1` (default)
299
+ - `gpt-5`
300
+ - `gpt-5-mini`
301
+ - `gpt-4.1`
302
+ - `gpt-4.1-mini`
303
+ - `gpt-4o`
304
+ - `gpt-4o-mini`
305
+ - `o3` (supports reasoning effort)
306
+ - `o3-mini` (supports reasoning effort)
307
+ - `o1` (supports reasoning effort)
308
+
309
+ ### OpenRouter
310
+ Access hundreds of models through OpenRouter including:
311
+ - Claude models (Anthropic)
312
+ - Gemini models (Google)
313
+ - Open-source models (Deepseek, GLM, Minimax, Devstral, etc.)
314
+
315
+ Set `TERM2_AGENT_PROVIDER="openrouter"` to use OpenRouter.
316
+
317
+ ### OpenAI-Compatible
318
+ Any OpenAI-compatible API endpoint can be configured through runtime settings.
319
+
320
+ ## Development
321
+
322
+ Want to contribute or run from source?
323
+
324
+ ```bash
325
+ # Clone the repository
326
+ git clone https://github.com/qduc/term2.git
327
+ cd term2
328
+
329
+ # Install dependencies
330
+ npm install
331
+
332
+ # Run in development mode
333
+ npm run dev
334
+
335
+ # Run tests
336
+ npm test
337
+
338
+ # Build
339
+ npm run build
340
+ ```
341
+
342
+ ## Troubleshooting
343
+
344
+ ### "OPENAI_API_KEY not set"
345
+
346
+ Make sure you've exported your OpenAI API key:
347
+
348
+ ```bash
349
+ export OPENAI_API_KEY="sk-..."
350
+ ```
351
+
352
+ ### Command not found: term2
353
+
354
+ After installation, you may need to restart your terminal or run:
355
+
356
+ ```bash
357
+ source ~/.bashrc # or ~/.zshrc
358
+ ```
359
+
360
+ ### Permission denied
361
+
362
+ If you get permission errors during global installation, use:
363
+
364
+ ```bash
365
+ sudo npm install --global term2
366
+ ```
367
+
368
+ Or configure npm to install globally without sudo: https://docs.npmjs.com/resolving-eacces-permissions-errors-when-installing-packages-globally
369
+
370
+ ### SSH connection failed
371
+
372
+ Make sure your SSH agent is running and has your keys loaded:
373
+
374
+ ```bash
375
+ # Start SSH agent if not running
376
+ eval "$(ssh-agent -s)"
377
+
378
+ # Add your SSH key
379
+ ssh-add ~/.ssh/id_rsa
380
+
381
+ # Verify the key is loaded
382
+ ssh-add -l
383
+ ```
384
+
385
+ Also verify you can connect manually: `ssh user@hostname`
386
+
387
+ ### SSH mode: "remote-dir is required"
388
+
389
+ When using `--ssh` without `--lite`, you must also specify `--remote-dir`:
390
+
391
+ ```bash
392
+ term2 --ssh user@host --remote-dir /home/user/project
393
+ ```
394
+
395
+ With `--lite` mode, `--remote-dir` is optional and will auto-detect:
396
+
397
+ ```bash
398
+ term2 --ssh user@host --lite
399
+ ```
400
+
401
+ ## Tips
402
+
403
+ - The assistant won't run dangerous commands without your approval
404
+ - You can reject any command by pressing 'n' when prompted
405
+ - Press Ctrl+C to exit the chat at any time
406
+ - Use arrow keys to navigate through your command history
407
+ - Be specific in your requests for better results
408
+
409
+ ## License
410
+
411
+ MIT License - see [LICENSE](LICENSE) file for details
412
+
413
+ ## Contributing
414
+
415
+ Contributions are welcome! Please feel free to submit a Pull Request or open an Issue on [GitHub](https://github.com/qduc/term2).
416
+
417
+ ## Acknowledgments
418
+
419
+ Built with:
420
+
421
+ - [OpenAI Agents SDK](https://github.com/openai/openai-agents-js)
422
+ - [Ink](https://github.com/vadimdemedes/ink) - React for CLI
423
+ - [TypeScript](https://www.typescriptlang.org/)
424
+ - [ssh2](https://github.com/mscdex/ssh2) - SSH client for Node.js
425
+
426
+ ---
427
+
428
+ Made with ❤️ by [qduc](https://github.com/qduc)