@qduc/term2 0.2.0 → 0.3.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 (334) hide show
  1. package/dist/agent.lite-mode.test.d.ts +2 -0
  2. package/dist/agent.lite-mode.test.d.ts.map +1 -0
  3. package/dist/agent.lite-mode.test.js +39 -0
  4. package/dist/agent.lite-mode.test.js.map +1 -0
  5. package/dist/app.d.ts.map +1 -1
  6. package/dist/app.js +14 -6
  7. package/dist/app.js.map +1 -1
  8. package/dist/components/BottomArea.d.ts +3 -2
  9. package/dist/components/BottomArea.d.ts.map +1 -1
  10. package/dist/components/BottomArea.js.map +1 -1
  11. package/dist/components/Input/PopupManager.d.ts +1 -1
  12. package/dist/components/Input/PopupManager.d.ts.map +1 -1
  13. package/dist/components/Input/PopupManager.js.map +1 -1
  14. package/dist/components/Input/determine-active-menu.d.ts +2 -1
  15. package/dist/components/Input/determine-active-menu.d.ts.map +1 -1
  16. package/dist/components/Input/determine-active-menu.js +41 -28
  17. package/dist/components/Input/determine-active-menu.js.map +1 -1
  18. package/dist/components/InputBox.d.ts +3 -2
  19. package/dist/components/InputBox.d.ts.map +1 -1
  20. package/dist/components/InputBox.js +46 -11
  21. package/dist/components/InputBox.js.map +1 -1
  22. package/dist/components/InputBox.menu-logic.test.js +55 -15
  23. package/dist/components/InputBox.menu-logic.test.js.map +1 -1
  24. package/dist/components/MarkdownRenderer.d.ts.map +1 -1
  25. package/dist/components/MarkdownRenderer.js +36 -24
  26. package/dist/components/MarkdownRenderer.js.map +1 -1
  27. package/dist/components/MessageList.test.js +14 -0
  28. package/dist/components/MessageList.test.js.map +1 -1
  29. package/dist/components/ModelSelectionMenu.error-tabs.test.d.ts +2 -0
  30. package/dist/components/ModelSelectionMenu.error-tabs.test.d.ts.map +1 -0
  31. package/dist/components/ModelSelectionMenu.error-tabs.test.js +18 -0
  32. package/dist/components/ModelSelectionMenu.error-tabs.test.js.map +1 -0
  33. package/dist/components/SlashCommandMenu.d.ts +1 -6
  34. package/dist/components/SlashCommandMenu.d.ts.map +1 -1
  35. package/dist/components/SlashCommandMenu.js.map +1 -1
  36. package/dist/components/TextInput.d.ts +42 -0
  37. package/dist/components/TextInput.d.ts.map +1 -0
  38. package/dist/components/TextInput.js +398 -0
  39. package/dist/components/TextInput.js.map +1 -0
  40. package/dist/components/TextInput.test.d.ts +2 -0
  41. package/dist/components/TextInput.test.d.ts.map +1 -0
  42. package/dist/components/TextInput.test.js +75 -0
  43. package/dist/components/TextInput.test.js.map +1 -0
  44. package/dist/debug_ask_mentor.d.ts +2 -0
  45. package/dist/debug_ask_mentor.d.ts.map +1 -0
  46. package/dist/debug_ask_mentor.js +73 -0
  47. package/dist/debug_ask_mentor.js.map +1 -0
  48. package/dist/hooks/use-app-commands.d.ts +1 -1
  49. package/dist/hooks/use-app-commands.d.ts.map +1 -1
  50. package/dist/hooks/use-app-commands.js +4 -0
  51. package/dist/hooks/use-app-commands.js.map +1 -1
  52. package/dist/hooks/use-conversation.d.ts +2 -1
  53. package/dist/hooks/use-conversation.d.ts.map +1 -1
  54. package/dist/hooks/use-conversation.js +6 -4
  55. package/dist/hooks/use-conversation.js.map +1 -1
  56. package/dist/hooks/use-slash-commands.d.ts +1 -1
  57. package/dist/hooks/use-slash-commands.d.ts.map +1 -1
  58. package/dist/hooks/use-trigger-detection.d.ts +3 -1
  59. package/dist/hooks/use-trigger-detection.d.ts.map +1 -1
  60. package/dist/hooks/use-trigger-detection.js +3 -3
  61. package/dist/hooks/use-trigger-detection.js.map +1 -1
  62. package/dist/lib/openai-agent-client.d.ts +2 -1
  63. package/dist/lib/openai-agent-client.d.ts.map +1 -1
  64. package/dist/lib/openai-agent-client.js +2 -4
  65. package/dist/lib/openai-agent-client.js.map +1 -1
  66. package/dist/lib/openai-agent-client.test.js +1 -1
  67. package/dist/lib/openai-agent-client.test.js.map +1 -1
  68. package/dist/lib/retry-executor.d.ts.map +1 -1
  69. package/dist/lib/retry-executor.js +1 -2
  70. package/dist/lib/retry-executor.js.map +1 -1
  71. package/dist/lib/retry-executor.test.js +1 -2
  72. package/dist/lib/retry-executor.test.js.map +1 -1
  73. package/dist/lib/shell.d.ts +7 -0
  74. package/dist/lib/shell.d.ts.map +1 -0
  75. package/dist/lib/shell.js +56 -0
  76. package/dist/lib/shell.js.map +1 -0
  77. package/dist/modes/companion/command-index.d.ts +26 -0
  78. package/dist/modes/companion/command-index.d.ts.map +1 -0
  79. package/dist/modes/companion/command-index.js +50 -0
  80. package/dist/modes/companion/command-index.js.map +1 -0
  81. package/dist/modes/companion/command-index.test.d.ts +2 -0
  82. package/dist/modes/companion/command-index.test.d.ts.map +1 -0
  83. package/dist/modes/companion/command-index.test.js +86 -0
  84. package/dist/modes/companion/command-index.test.js.map +1 -0
  85. package/dist/modes/companion/companion-app.d.ts +12 -0
  86. package/dist/modes/companion/companion-app.d.ts.map +1 -0
  87. package/dist/modes/companion/companion-app.js +297 -0
  88. package/dist/modes/companion/companion-app.js.map +1 -0
  89. package/dist/modes/companion/companion-session.d.ts +63 -0
  90. package/dist/modes/companion/companion-session.d.ts.map +1 -0
  91. package/dist/modes/companion/companion-session.js +146 -0
  92. package/dist/modes/companion/companion-session.js.map +1 -0
  93. package/dist/modes/companion/companion-session.test.d.ts +2 -0
  94. package/dist/modes/companion/companion-session.test.d.ts.map +1 -0
  95. package/dist/modes/companion/companion-session.test.js +28 -0
  96. package/dist/modes/companion/companion-session.test.js.map +1 -0
  97. package/dist/modes/companion/components/status-bar.d.ts +13 -0
  98. package/dist/modes/companion/components/status-bar.d.ts.map +1 -0
  99. package/dist/modes/companion/components/status-bar.js +26 -0
  100. package/dist/modes/companion/components/status-bar.js.map +1 -0
  101. package/dist/modes/companion/context-buffer.d.ts +65 -0
  102. package/dist/modes/companion/context-buffer.d.ts.map +1 -0
  103. package/dist/modes/companion/context-buffer.js +156 -0
  104. package/dist/modes/companion/context-buffer.js.map +1 -0
  105. package/dist/modes/companion/context-buffer.test.d.ts +2 -0
  106. package/dist/modes/companion/context-buffer.test.d.ts.map +1 -0
  107. package/dist/modes/companion/context-buffer.test.js +154 -0
  108. package/dist/modes/companion/context-buffer.test.js.map +1 -0
  109. package/dist/modes/companion/event-detector.d.ts +46 -0
  110. package/dist/modes/companion/event-detector.d.ts.map +1 -0
  111. package/dist/modes/companion/event-detector.js +169 -0
  112. package/dist/modes/companion/event-detector.js.map +1 -0
  113. package/dist/modes/companion/event-detector.test.d.ts +2 -0
  114. package/dist/modes/companion/event-detector.test.d.ts.map +1 -0
  115. package/dist/modes/companion/event-detector.test.js +121 -0
  116. package/dist/modes/companion/event-detector.test.js.map +1 -0
  117. package/dist/modes/companion/index.d.ts +33 -0
  118. package/dist/modes/companion/index.d.ts.map +1 -0
  119. package/dist/modes/companion/index.js +21 -0
  120. package/dist/modes/companion/index.js.map +1 -0
  121. package/dist/modes/companion/input-key-mapper.d.ts +3 -0
  122. package/dist/modes/companion/input-key-mapper.d.ts.map +1 -0
  123. package/dist/modes/companion/input-key-mapper.js +31 -0
  124. package/dist/modes/companion/input-key-mapper.js.map +1 -0
  125. package/dist/modes/companion/input-key-mapper.test.d.ts +2 -0
  126. package/dist/modes/companion/input-key-mapper.test.d.ts.map +1 -0
  127. package/dist/modes/companion/input-key-mapper.test.js +26 -0
  128. package/dist/modes/companion/input-key-mapper.test.js.map +1 -0
  129. package/dist/modes/companion/input-parser.d.ts +53 -0
  130. package/dist/modes/companion/input-parser.d.ts.map +1 -0
  131. package/dist/modes/companion/input-parser.js +114 -0
  132. package/dist/modes/companion/input-parser.js.map +1 -0
  133. package/dist/modes/companion/input-parser.test.d.ts +2 -0
  134. package/dist/modes/companion/input-parser.test.d.ts.map +1 -0
  135. package/dist/modes/companion/input-parser.test.js +123 -0
  136. package/dist/modes/companion/input-parser.test.js.map +1 -0
  137. package/dist/modes/companion/mode-manager.d.ts +41 -0
  138. package/dist/modes/companion/mode-manager.d.ts.map +1 -0
  139. package/dist/modes/companion/mode-manager.js +56 -0
  140. package/dist/modes/companion/mode-manager.js.map +1 -0
  141. package/dist/modes/companion/mode-manager.test.d.ts +2 -0
  142. package/dist/modes/companion/mode-manager.test.d.ts.map +1 -0
  143. package/dist/modes/companion/mode-manager.test.js +65 -0
  144. package/dist/modes/companion/mode-manager.test.js.map +1 -0
  145. package/dist/modes/companion/output-classifier.d.ts +15 -0
  146. package/dist/modes/companion/output-classifier.d.ts.map +1 -0
  147. package/dist/modes/companion/output-classifier.js +77 -0
  148. package/dist/modes/companion/output-classifier.js.map +1 -0
  149. package/dist/modes/companion/output-classifier.test.d.ts +2 -0
  150. package/dist/modes/companion/output-classifier.test.d.ts.map +1 -0
  151. package/dist/modes/companion/output-classifier.test.js +133 -0
  152. package/dist/modes/companion/output-classifier.test.js.map +1 -0
  153. package/dist/modes/companion/pty-wrapper.d.ts +46 -0
  154. package/dist/modes/companion/pty-wrapper.d.ts.map +1 -0
  155. package/dist/modes/companion/pty-wrapper.js +143 -0
  156. package/dist/modes/companion/pty-wrapper.js.map +1 -0
  157. package/dist/modes/companion/safety-classifier.d.ts +31 -0
  158. package/dist/modes/companion/safety-classifier.d.ts.map +1 -0
  159. package/dist/modes/companion/safety-classifier.js +140 -0
  160. package/dist/modes/companion/safety-classifier.js.map +1 -0
  161. package/dist/modes/companion/safety-classifier.test.d.ts +2 -0
  162. package/dist/modes/companion/safety-classifier.test.d.ts.map +1 -0
  163. package/dist/modes/companion/safety-classifier.test.js +151 -0
  164. package/dist/modes/companion/safety-classifier.test.js.map +1 -0
  165. package/dist/modes/companion/summarizer.d.ts +24 -0
  166. package/dist/modes/companion/summarizer.d.ts.map +1 -0
  167. package/dist/modes/companion/summarizer.js +132 -0
  168. package/dist/modes/companion/summarizer.js.map +1 -0
  169. package/dist/modes/companion/terminal-history.d.ts +27 -0
  170. package/dist/modes/companion/terminal-history.d.ts.map +1 -0
  171. package/dist/modes/companion/terminal-history.js +142 -0
  172. package/dist/modes/companion/terminal-history.js.map +1 -0
  173. package/dist/prompts/simple-mentor.md +215 -0
  174. package/dist/providers/ai-sdk-openai-compatible.provider.d.ts +24 -0
  175. package/dist/providers/ai-sdk-openai-compatible.provider.d.ts.map +1 -0
  176. package/dist/providers/ai-sdk-openai-compatible.provider.js +26 -0
  177. package/dist/providers/ai-sdk-openai-compatible.provider.js.map +1 -0
  178. package/dist/providers/ai-sdk-openai-compatible.provider.test.d.ts +2 -0
  179. package/dist/providers/ai-sdk-openai-compatible.provider.test.d.ts.map +1 -0
  180. package/dist/providers/ai-sdk-openai-compatible.provider.test.js +68 -0
  181. package/dist/providers/ai-sdk-openai-compatible.provider.test.js.map +1 -0
  182. package/dist/providers/common/openai-compatible-messages.d.ts +8 -0
  183. package/dist/providers/common/openai-compatible-messages.d.ts.map +1 -0
  184. package/dist/providers/common/openai-compatible-messages.js +356 -0
  185. package/dist/providers/common/openai-compatible-messages.js.map +1 -0
  186. package/dist/providers/common/openai-compatible-messages.test.d.ts +2 -0
  187. package/dist/providers/common/openai-compatible-messages.test.d.ts.map +1 -0
  188. package/dist/providers/common/openai-compatible-messages.test.js +26 -0
  189. package/dist/providers/common/openai-compatible-messages.test.js.map +1 -0
  190. package/dist/providers/common/openai-compatible-utils.d.ts +11 -0
  191. package/dist/providers/common/openai-compatible-utils.d.ts.map +1 -0
  192. package/dist/providers/common/openai-compatible-utils.js +33 -0
  193. package/dist/providers/common/openai-compatible-utils.js.map +1 -0
  194. package/dist/providers/common/provider-errors.d.ts +13 -0
  195. package/dist/providers/common/provider-errors.d.ts.map +1 -0
  196. package/dist/providers/common/provider-errors.js +25 -0
  197. package/dist/providers/common/provider-errors.js.map +1 -0
  198. package/dist/providers/github-copilot/converters.d.ts +45 -0
  199. package/dist/providers/github-copilot/converters.d.ts.map +1 -0
  200. package/dist/providers/github-copilot/converters.js +118 -0
  201. package/dist/providers/github-copilot/converters.js.map +1 -0
  202. package/dist/providers/github-copilot/converters.test.d.ts +2 -0
  203. package/dist/providers/github-copilot/converters.test.d.ts.map +1 -0
  204. package/dist/providers/github-copilot/converters.test.js +162 -0
  205. package/dist/providers/github-copilot/converters.test.js.map +1 -0
  206. package/dist/providers/github-copilot/github-copilot.provider.d.ts +2 -0
  207. package/dist/providers/github-copilot/github-copilot.provider.d.ts.map +1 -0
  208. package/dist/providers/github-copilot/github-copilot.provider.js +75 -0
  209. package/dist/providers/github-copilot/github-copilot.provider.js.map +1 -0
  210. package/dist/providers/github-copilot/github-copilot.provider.test.d.ts +2 -0
  211. package/dist/providers/github-copilot/github-copilot.provider.test.d.ts.map +1 -0
  212. package/dist/providers/github-copilot/github-copilot.provider.test.js +26 -0
  213. package/dist/providers/github-copilot/github-copilot.provider.test.js.map +1 -0
  214. package/dist/providers/github-copilot/index.d.ts +4 -0
  215. package/dist/providers/github-copilot/index.d.ts.map +1 -0
  216. package/dist/providers/github-copilot/index.js +4 -0
  217. package/dist/providers/github-copilot/index.js.map +1 -0
  218. package/dist/providers/github-copilot/model.d.ts +24 -0
  219. package/dist/providers/github-copilot/model.d.ts.map +1 -0
  220. package/dist/providers/github-copilot/model.delta.test.d.ts +2 -0
  221. package/dist/providers/github-copilot/model.delta.test.d.ts.map +1 -0
  222. package/dist/providers/github-copilot/model.delta.test.js +15 -0
  223. package/dist/providers/github-copilot/model.delta.test.js.map +1 -0
  224. package/dist/providers/github-copilot/model.js +498 -0
  225. package/dist/providers/github-copilot/model.js.map +1 -0
  226. package/dist/providers/github-copilot/model.test.d.ts +2 -0
  227. package/dist/providers/github-copilot/model.test.d.ts.map +1 -0
  228. package/dist/providers/github-copilot/model.test.js +63 -0
  229. package/dist/providers/github-copilot/model.test.js.map +1 -0
  230. package/dist/providers/github-copilot/provider.d.ts +15 -0
  231. package/dist/providers/github-copilot/provider.d.ts.map +1 -0
  232. package/dist/providers/github-copilot/provider.js +25 -0
  233. package/dist/providers/github-copilot/provider.js.map +1 -0
  234. package/dist/providers/github-copilot/provider.test.d.ts +2 -0
  235. package/dist/providers/github-copilot/provider.test.d.ts.map +1 -0
  236. package/dist/providers/github-copilot/provider.test.js +52 -0
  237. package/dist/providers/github-copilot/provider.test.js.map +1 -0
  238. package/dist/providers/github-copilot/utils.d.ts +20 -0
  239. package/dist/providers/github-copilot/utils.d.ts.map +1 -0
  240. package/dist/providers/github-copilot/utils.js +142 -0
  241. package/dist/providers/github-copilot/utils.js.map +1 -0
  242. package/dist/providers/github-copilot/utils.test.d.ts +2 -0
  243. package/dist/providers/github-copilot/utils.test.d.ts.map +1 -0
  244. package/dist/providers/github-copilot/utils.test.js +21 -0
  245. package/dist/providers/github-copilot/utils.test.js.map +1 -0
  246. package/dist/providers/openai-compatible.provider.createRunner.test.d.ts +2 -0
  247. package/dist/providers/openai-compatible.provider.createRunner.test.d.ts.map +1 -0
  248. package/dist/providers/openai-compatible.provider.createRunner.test.js +39 -0
  249. package/dist/providers/openai-compatible.provider.createRunner.test.js.map +1 -0
  250. package/dist/providers/openai-compatible.provider.d.ts.map +1 -1
  251. package/dist/providers/openai-compatible.provider.js +18 -8
  252. package/dist/providers/openai-compatible.provider.js.map +1 -1
  253. package/dist/providers/openrouter.d.ts +1 -1
  254. package/dist/providers/openrouter.d.ts.map +1 -1
  255. package/dist/providers/openrouter.js +1 -3
  256. package/dist/providers/openrouter.js.map +1 -1
  257. package/dist/providers/openrouter.provider.createRunner.test.js +28 -0
  258. package/dist/providers/openrouter.provider.createRunner.test.js.map +1 -1
  259. package/dist/providers/openrouter.provider.js +13 -5
  260. package/dist/providers/openrouter.provider.js.map +1 -1
  261. package/dist/safety-checker.js +57 -0
  262. package/dist/scripts/eval-auto-approval/dataset.d.ts +1 -1
  263. package/dist/services/check_mock.d.ts +2 -0
  264. package/dist/services/check_mock.d.ts.map +1 -0
  265. package/dist/services/check_mock.js +22 -0
  266. package/dist/services/check_mock.js.map +1 -0
  267. package/dist/services/conversation-service.test.d.ts +2 -0
  268. package/dist/services/conversation-service.test.d.ts.map +1 -0
  269. package/dist/services/conversation-service.test.js +156 -0
  270. package/dist/services/conversation-service.test.js.map +1 -0
  271. package/dist/services/conversation-session.d.ts +3 -2
  272. package/dist/services/conversation-session.d.ts.map +1 -1
  273. package/dist/services/conversation-session.js +12 -6
  274. package/dist/services/conversation-session.js.map +1 -1
  275. package/dist/services/conversation-store.d.ts +2 -0
  276. package/dist/services/conversation-store.d.ts.map +1 -1
  277. package/dist/services/conversation-store.js +27 -0
  278. package/dist/services/conversation-store.js.map +1 -1
  279. package/dist/services/conversation-store.test.js +34 -0
  280. package/dist/services/conversation-store.test.js.map +1 -1
  281. package/dist/services/logging-contract.d.ts +3 -3
  282. package/dist/services/logging-service.d.ts.map +1 -1
  283. package/dist/services/logging-service.js +5 -1
  284. package/dist/services/logging-service.js.map +1 -1
  285. package/dist/services/model-service.test.js +1 -5
  286. package/dist/services/model-service.test.js.map +1 -1
  287. package/dist/services/settings-schema.d.ts +12 -8
  288. package/dist/services/settings-schema.d.ts.map +1 -1
  289. package/dist/services/settings-schema.js +9 -0
  290. package/dist/services/settings-schema.js.map +1 -1
  291. package/dist/slash-commands.d.ts +20 -0
  292. package/dist/slash-commands.d.ts.map +1 -0
  293. package/dist/slash-commands.js +2 -0
  294. package/dist/slash-commands.js.map +1 -0
  295. package/dist/tools/bash.d.ts +10 -0
  296. package/dist/tools/bash.d.ts.map +1 -0
  297. package/dist/tools/bash.js +55 -0
  298. package/dist/tools/bash.js.map +1 -0
  299. package/dist/types/user-turn.d.ts +16 -0
  300. package/dist/types/user-turn.d.ts.map +1 -0
  301. package/dist/types/user-turn.js +27 -0
  302. package/dist/types/user-turn.js.map +1 -0
  303. package/dist/types/user-turn.test.d.ts +2 -0
  304. package/dist/types/user-turn.test.d.ts.map +1 -0
  305. package/dist/types/user-turn.test.js +32 -0
  306. package/dist/types/user-turn.test.js.map +1 -0
  307. package/dist/utils/command-safety.d.ts +21 -0
  308. package/dist/utils/command-safety.d.ts.map +1 -0
  309. package/dist/utils/command-safety.devnull.test.d.ts +2 -0
  310. package/dist/utils/command-safety.devnull.test.d.ts.map +1 -0
  311. package/dist/utils/command-safety.devnull.test.js +13 -0
  312. package/dist/utils/command-safety.devnull.test.js.map +1 -0
  313. package/dist/utils/command-safety.js +348 -0
  314. package/dist/utils/command-safety.js.map +1 -0
  315. package/dist/utils/extract-command-messages.test.d.ts +2 -0
  316. package/dist/utils/extract-command-messages.test.d.ts.map +1 -0
  317. package/dist/utils/extract-command-messages.test.js +64 -0
  318. package/dist/utils/extract-command-messages.test.js.map +1 -0
  319. package/dist/utils/log-truncation.d.ts +7 -0
  320. package/dist/utils/log-truncation.d.ts.map +1 -0
  321. package/dist/utils/log-truncation.js +66 -0
  322. package/dist/utils/log-truncation.js.map +1 -0
  323. package/dist/utils/log-truncation.test.d.ts +2 -0
  324. package/dist/utils/log-truncation.test.d.ts.map +1 -0
  325. package/dist/utils/log-truncation.test.js +44 -0
  326. package/dist/utils/log-truncation.test.js.map +1 -0
  327. package/dist/utils/provider-traffic-extractor.repro.test.d.ts +2 -0
  328. package/dist/utils/provider-traffic-extractor.repro.test.d.ts.map +1 -0
  329. package/dist/utils/provider-traffic-extractor.repro.test.js.map +1 -0
  330. package/dist/utils/settings-command.d.ts +1 -1
  331. package/dist/utils/settings-command.d.ts.map +1 -1
  332. package/dist/utils/settings-command.js +2 -0
  333. package/dist/utils/settings-command.js.map +1 -1
  334. package/package.json +5 -2
@@ -0,0 +1,52 @@
1
+ import test from 'ava';
2
+ import { GitHubCopilotProvider, createGitHubCopilotProvider } from './provider.js';
3
+ // Mock services
4
+ const mockSettingsService = {
5
+ get: (key) => {
6
+ if (key === 'agent.model')
7
+ return 'gpt-4o';
8
+ if (key === 'agent.github-copilot.model')
9
+ return 'gpt-4o';
10
+ return undefined;
11
+ },
12
+ set: () => { },
13
+ };
14
+ const mockLoggingService = {
15
+ info: () => { },
16
+ warn: () => { },
17
+ error: () => { },
18
+ debug: () => { },
19
+ security: () => { },
20
+ setCorrelationId: () => { },
21
+ getCorrelationId: () => undefined,
22
+ clearCorrelationId: () => { },
23
+ };
24
+ test('GitHubCopilotProvider - getModel returns GitHubCopilotModel', async (t) => {
25
+ const provider = new GitHubCopilotProvider({
26
+ settingsService: mockSettingsService,
27
+ loggingService: mockLoggingService,
28
+ });
29
+ const model = await provider.getModel();
30
+ t.truthy(model);
31
+ // Check that it's our model by verifying the name property we add
32
+ t.is(model.name, 'GitHubCopilot');
33
+ });
34
+ test('GitHubCopilotProvider - getModel accepts model override', async (t) => {
35
+ const provider = new GitHubCopilotProvider({
36
+ settingsService: mockSettingsService,
37
+ loggingService: mockLoggingService,
38
+ });
39
+ const model = await provider.getModel('claude-3.5-sonnet');
40
+ t.truthy(model);
41
+ // Check that it's our model by verifying the name property we add
42
+ t.is(model.name, 'GitHubCopilot');
43
+ });
44
+ test('createGitHubCopilotProvider - factory function works', (t) => {
45
+ const provider = createGitHubCopilotProvider({
46
+ settingsService: mockSettingsService,
47
+ loggingService: mockLoggingService,
48
+ });
49
+ t.truthy(provider);
50
+ t.true(provider instanceof GitHubCopilotProvider);
51
+ });
52
+ //# sourceMappingURL=provider.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"provider.test.js","sourceRoot":"","sources":["../../../source/providers/github-copilot/provider.test.ts"],"names":[],"mappings":"AAAA,OAAO,IAAI,MAAM,KAAK,CAAC;AACvB,OAAO,EAAE,qBAAqB,EAAE,2BAA2B,EAAE,MAAM,eAAe,CAAC;AAGnF,gBAAgB;AAChB,MAAM,mBAAmB,GAAqB;IAC1C,GAAG,EAAE,CAAI,GAAW,EAAK,EAAE;QACvB,IAAI,GAAG,KAAK,aAAa;YAAE,OAAO,QAAa,CAAC;QAChD,IAAI,GAAG,KAAK,4BAA4B;YAAE,OAAO,QAAa,CAAC;QAC/D,OAAO,SAAc,CAAC;IAC1B,CAAC;IACD,GAAG,EAAE,GAAG,EAAE,GAAE,CAAC;CAChB,CAAC;AAEF,MAAM,kBAAkB,GAAoB;IACxC,IAAI,EAAE,GAAG,EAAE,GAAE,CAAC;IACd,IAAI,EAAE,GAAG,EAAE,GAAE,CAAC;IACd,KAAK,EAAE,GAAG,EAAE,GAAE,CAAC;IACf,KAAK,EAAE,GAAG,EAAE,GAAE,CAAC;IACf,QAAQ,EAAE,GAAG,EAAE,GAAE,CAAC;IAClB,gBAAgB,EAAE,GAAG,EAAE,GAAE,CAAC;IAC1B,gBAAgB,EAAE,GAAG,EAAE,CAAC,SAAS;IACjC,kBAAkB,EAAE,GAAG,EAAE,GAAE,CAAC;CAC/B,CAAC;AAEF,IAAI,CAAC,6DAA6D,EAAE,KAAK,EAAE,CAAC,EAAE,EAAE;IAC5E,MAAM,QAAQ,GAAG,IAAI,qBAAqB,CAAC;QACvC,eAAe,EAAE,mBAAmB;QACpC,cAAc,EAAE,kBAAkB;KACrC,CAAC,CAAC;IAEH,MAAM,KAAK,GAAG,MAAM,QAAQ,CAAC,QAAQ,EAAE,CAAC;IAExC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;IAChB,kEAAkE;IAClE,CAAC,CAAC,EAAE,CAAE,KAAa,CAAC,IAAI,EAAE,eAAe,CAAC,CAAC;AAC/C,CAAC,CAAC,CAAC;AAEH,IAAI,CAAC,yDAAyD,EAAE,KAAK,EAAE,CAAC,EAAE,EAAE;IACxE,MAAM,QAAQ,GAAG,IAAI,qBAAqB,CAAC;QACvC,eAAe,EAAE,mBAAmB;QACpC,cAAc,EAAE,kBAAkB;KACrC,CAAC,CAAC;IAEH,MAAM,KAAK,GAAG,MAAM,QAAQ,CAAC,QAAQ,CAAC,mBAAmB,CAAC,CAAC;IAE3D,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;IAChB,kEAAkE;IAClE,CAAC,CAAC,EAAE,CAAE,KAAa,CAAC,IAAI,EAAE,eAAe,CAAC,CAAC;AAC/C,CAAC,CAAC,CAAC;AAEH,IAAI,CAAC,sDAAsD,EAAE,CAAC,CAAC,EAAE,EAAE;IAC/D,MAAM,QAAQ,GAAG,2BAA2B,CAAC;QACzC,eAAe,EAAE,mBAAmB;QACpC,cAAc,EAAE,kBAAkB;KACrC,CAAC,CAAC;IAEH,CAAC,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;IACnB,CAAC,CAAC,IAAI,CAAC,QAAQ,YAAY,qBAAqB,CAAC,CAAC;AACtD,CAAC,CAAC,CAAC"}
@@ -0,0 +1,20 @@
1
+ /**
2
+ * Check if the GitHub Copilot CLI is available.
3
+ * Supports both standalone `copilot` command and `gh copilot` extension.
4
+ * This is the synchronous version, which may block the Event Loop.
5
+ */
6
+ export declare function isCopilotCliAvailable(): boolean;
7
+ /**
8
+ * Async version of isCopilotCliAvailable.
9
+ */
10
+ export declare function isCopilotCliAvailableAsync(): Promise<boolean>;
11
+ /**
12
+ * Verify that the CLI is authenticated.
13
+ * This is the synchronous version, which may block the Event Loop.
14
+ */
15
+ export declare function isGhAuthenticated(): boolean;
16
+ /**
17
+ * Async version of isGhAuthenticated.
18
+ */
19
+ export declare function isGhAuthenticatedAsync(): Promise<boolean>;
20
+ //# sourceMappingURL=utils.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../../../source/providers/github-copilot/utils.ts"],"names":[],"mappings":"AAQA;;;;GAIG;AACH,wBAAgB,qBAAqB,IAAI,OAAO,CA4C/C;AAED;;GAEG;AACH,wBAAsB,0BAA0B,IAAI,OAAO,CAAC,OAAO,CAAC,CA6BnE;AAOD;;;GAGG;AACH,wBAAgB,iBAAiB,IAAI,OAAO,CAgC3C;AAED;;GAEG;AACH,wBAAsB,sBAAsB,IAAI,OAAO,CAAC,OAAO,CAAC,CAsB/D"}
@@ -0,0 +1,142 @@
1
+ import { spawnSync, spawn } from 'node:child_process';
2
+ /**
3
+ * Check if the GitHub Copilot CLI is available.
4
+ * Supports both standalone `copilot` command and `gh copilot` extension.
5
+ */
6
+ let copilotAvailableCache = null;
7
+ /**
8
+ * Check if the GitHub Copilot CLI is available.
9
+ * Supports both standalone `copilot` command and `gh copilot` extension.
10
+ * This is the synchronous version, which may block the Event Loop.
11
+ */
12
+ export function isCopilotCliAvailable() {
13
+ if (copilotAvailableCache !== null) {
14
+ return copilotAvailableCache;
15
+ }
16
+ try {
17
+ // Check for standalone copilot command first
18
+ const copilotResult = spawnSync('copilot', ['--version'], {
19
+ encoding: 'utf-8',
20
+ timeout: 5000,
21
+ stdio: ['ignore', 'pipe', 'pipe'],
22
+ });
23
+ if (copilotResult.status === 0) {
24
+ copilotAvailableCache = true;
25
+ return true;
26
+ }
27
+ // Fallback: Check if gh CLI is installed
28
+ const ghResult = spawnSync('gh', ['--version'], {
29
+ encoding: 'utf-8',
30
+ timeout: 5000,
31
+ stdio: ['ignore', 'pipe', 'pipe'],
32
+ });
33
+ if (ghResult.status !== 0) {
34
+ copilotAvailableCache = false;
35
+ return false;
36
+ }
37
+ // Check if copilot extension is installed
38
+ const ghCopilotResult = spawnSync('gh', ['copilot', '--help'], {
39
+ encoding: 'utf-8',
40
+ timeout: 5000,
41
+ stdio: ['ignore', 'pipe', 'pipe'],
42
+ });
43
+ const result = ghCopilotResult.status === 0;
44
+ copilotAvailableCache = result;
45
+ return result;
46
+ }
47
+ catch {
48
+ copilotAvailableCache = false;
49
+ return false;
50
+ }
51
+ }
52
+ /**
53
+ * Async version of isCopilotCliAvailable.
54
+ */
55
+ export async function isCopilotCliAvailableAsync() {
56
+ if (copilotAvailableCache !== null) {
57
+ return copilotAvailableCache;
58
+ }
59
+ const checkCommand = (command, args) => {
60
+ return new Promise((resolve) => {
61
+ const child = spawn(command, args, { stdio: 'ignore' });
62
+ child.on('error', () => resolve(false));
63
+ child.on('close', (code) => resolve(code === 0));
64
+ });
65
+ };
66
+ // Check for standalone copilot command first
67
+ if (await checkCommand('copilot', ['--version'])) {
68
+ copilotAvailableCache = true;
69
+ return true;
70
+ }
71
+ // Fallback: Check if gh CLI is installed
72
+ if (!(await checkCommand('gh', ['--version']))) {
73
+ copilotAvailableCache = false;
74
+ return false;
75
+ }
76
+ // Check if copilot extension is installed
77
+ const result = await checkCommand('gh', ['copilot', '--help']);
78
+ copilotAvailableCache = result;
79
+ return result;
80
+ }
81
+ /**
82
+ * Verify that the CLI is authenticated.
83
+ */
84
+ let ghAuthenticatedCache = null;
85
+ /**
86
+ * Verify that the CLI is authenticated.
87
+ * This is the synchronous version, which may block the Event Loop.
88
+ */
89
+ export function isGhAuthenticated() {
90
+ if (ghAuthenticatedCache !== null) {
91
+ return ghAuthenticatedCache;
92
+ }
93
+ try {
94
+ // If we have standalone copilot, we consider it authenticated if it exists
95
+ // as there's no standardized 'auth status' for the standalone version yet.
96
+ const copilotResult = spawnSync('copilot', ['--version'], {
97
+ encoding: 'utf-8',
98
+ timeout: 5000,
99
+ stdio: ['ignore', 'pipe', 'pipe'],
100
+ });
101
+ if (copilotResult.status === 0) {
102
+ ghAuthenticatedCache = true;
103
+ return true;
104
+ }
105
+ const result = spawnSync('gh', ['auth', 'status'], {
106
+ encoding: 'utf-8',
107
+ timeout: 5000,
108
+ stdio: ['ignore', 'pipe', 'pipe'],
109
+ });
110
+ const status = result.status === 0;
111
+ ghAuthenticatedCache = status;
112
+ return status;
113
+ }
114
+ catch {
115
+ ghAuthenticatedCache = false;
116
+ return false;
117
+ }
118
+ }
119
+ /**
120
+ * Async version of isGhAuthenticated.
121
+ */
122
+ export async function isGhAuthenticatedAsync() {
123
+ if (ghAuthenticatedCache !== null) {
124
+ return ghAuthenticatedCache;
125
+ }
126
+ const checkCommand = (command, args) => {
127
+ return new Promise((resolve) => {
128
+ const child = spawn(command, args, { stdio: 'ignore' });
129
+ child.on('error', () => resolve(false));
130
+ child.on('close', (code) => resolve(code === 0));
131
+ });
132
+ };
133
+ // If we have standalone copilot, we consider it authenticated if it exists
134
+ if (await checkCommand('copilot', ['--version'])) {
135
+ ghAuthenticatedCache = true;
136
+ return true;
137
+ }
138
+ const result = await checkCommand('gh', ['auth', 'status']);
139
+ ghAuthenticatedCache = result;
140
+ return result;
141
+ }
142
+ //# sourceMappingURL=utils.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"utils.js","sourceRoot":"","sources":["../../../source/providers/github-copilot/utils.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=utils.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"utils.test.d.ts","sourceRoot":"","sources":["../../../source/providers/github-copilot/utils.test.ts"],"names":[],"mappings":""}
@@ -0,0 +1,21 @@
1
+ import test from 'ava';
2
+ import { isCopilotCliAvailable, isGhAuthenticated, isCopilotCliAvailableAsync, isGhAuthenticatedAsync, } from './utils.js';
3
+ // Note: These tests verify the function signatures work correctly.
4
+ // The actual behavior depends on the system state (whether gh CLI is installed).
5
+ test('isCopilotCliAvailable - returns boolean', (t) => {
6
+ const result = isCopilotCliAvailable();
7
+ t.is(typeof result, 'boolean');
8
+ });
9
+ test('isGhAuthenticated - returns boolean', (t) => {
10
+ const result = isGhAuthenticated();
11
+ t.is(typeof result, 'boolean');
12
+ });
13
+ test('isCopilotCliAvailableAsync - returns Promise<boolean>', async (t) => {
14
+ const result = await isCopilotCliAvailableAsync();
15
+ t.is(typeof result, 'boolean');
16
+ });
17
+ test('isGhAuthenticatedAsync - returns Promise<boolean>', async (t) => {
18
+ const result = await isGhAuthenticatedAsync();
19
+ t.is(typeof result, 'boolean');
20
+ });
21
+ //# sourceMappingURL=utils.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"utils.test.js","sourceRoot":"","sources":["../../../source/providers/github-copilot/utils.test.ts"],"names":[],"mappings":"AAAA,OAAO,IAAI,MAAM,KAAK,CAAC;AACvB,OAAO,EACH,qBAAqB,EACrB,iBAAiB,EACjB,0BAA0B,EAC1B,sBAAsB,GACzB,MAAM,YAAY,CAAC;AAEpB,mEAAmE;AACnE,iFAAiF;AAEjF,IAAI,CAAC,yCAAyC,EAAE,CAAC,CAAC,EAAE,EAAE;IAClD,MAAM,MAAM,GAAG,qBAAqB,EAAE,CAAC;IACvC,CAAC,CAAC,EAAE,CAAC,OAAO,MAAM,EAAE,SAAS,CAAC,CAAC;AACnC,CAAC,CAAC,CAAC;AAEH,IAAI,CAAC,qCAAqC,EAAE,CAAC,CAAC,EAAE,EAAE;IAC9C,MAAM,MAAM,GAAG,iBAAiB,EAAE,CAAC;IACnC,CAAC,CAAC,EAAE,CAAC,OAAO,MAAM,EAAE,SAAS,CAAC,CAAC;AACnC,CAAC,CAAC,CAAC;AAEH,IAAI,CAAC,uDAAuD,EAAE,KAAK,EAAE,CAAC,EAAE,EAAE;IACtE,MAAM,MAAM,GAAG,MAAM,0BAA0B,EAAE,CAAC;IAClD,CAAC,CAAC,EAAE,CAAC,OAAO,MAAM,EAAE,SAAS,CAAC,CAAC;AACnC,CAAC,CAAC,CAAC;AAEH,IAAI,CAAC,mDAAmD,EAAE,KAAK,EAAE,CAAC,EAAE,EAAE;IAClE,MAAM,MAAM,GAAG,MAAM,sBAAsB,EAAE,CAAC;IAC9C,CAAC,CAAC,EAAE,CAAC,OAAO,MAAM,EAAE,SAAS,CAAC,CAAC;AACnC,CAAC,CAAC,CAAC"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=openai-compatible.provider.createRunner.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"openai-compatible.provider.createRunner.test.d.ts","sourceRoot":"","sources":["../../source/providers/openai-compatible.provider.createRunner.test.ts"],"names":[],"mappings":""}
@@ -0,0 +1,39 @@
1
+ import test from 'ava';
2
+ import { createOpenAICompatibleProviderDefinition } from './openai-compatible.provider.js';
3
+ test('runtime openai-compatible createRunner returns a runner', (t) => {
4
+ const provider = createOpenAICompatibleProviderDefinition({
5
+ name: 'local-test',
6
+ baseUrl: 'http://localhost:11434',
7
+ });
8
+ const deps = {
9
+ settingsService: {
10
+ get: (key) => {
11
+ const values = {
12
+ 'agent.model': 'test-model',
13
+ providers: [
14
+ {
15
+ name: 'local-test',
16
+ baseUrl: 'http://localhost:11434',
17
+ apiKey: 'local-key',
18
+ },
19
+ ],
20
+ };
21
+ return values[key];
22
+ },
23
+ set: () => { },
24
+ },
25
+ loggingService: {
26
+ info: () => { },
27
+ warn: () => { },
28
+ error: () => { },
29
+ debug: () => { },
30
+ security: () => { },
31
+ setCorrelationId: () => { },
32
+ getCorrelationId: () => undefined,
33
+ clearCorrelationId: () => { },
34
+ },
35
+ };
36
+ const runner = provider.createRunner(deps);
37
+ t.truthy(runner);
38
+ });
39
+ //# sourceMappingURL=openai-compatible.provider.createRunner.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"openai-compatible.provider.createRunner.test.js","sourceRoot":"","sources":["../../source/providers/openai-compatible.provider.createRunner.test.ts"],"names":[],"mappings":"AAAA,OAAO,IAAI,MAAM,KAAK,CAAC;AACvB,OAAO,EAAE,wCAAwC,EAAE,MAAM,iCAAiC,CAAC;AAG3F,IAAI,CAAC,yDAAyD,EAAE,CAAC,CAAC,EAAE,EAAE;IACpE,MAAM,QAAQ,GAAG,wCAAwC,CAAC;QACxD,IAAI,EAAE,YAAY;QAClB,OAAO,EAAE,wBAAwB;KAClC,CAAC,CAAC;IAEH,MAAM,IAAI,GAAiB;QACzB,eAAe,EAAE;YACf,GAAG,EAAE,CAAU,GAAW,EAAE,EAAE;gBAC5B,MAAM,MAAM,GAAwB;oBAClC,aAAa,EAAE,YAAY;oBAC3B,SAAS,EAAE;wBACT;4BACE,IAAI,EAAE,YAAY;4BAClB,OAAO,EAAE,wBAAwB;4BACjC,MAAM,EAAE,WAAW;yBACpB;qBACF;iBACF,CAAC;gBACF,OAAO,MAAM,CAAC,GAAG,CAAM,CAAC;YAC1B,CAAC;YACD,GAAG,EAAE,GAAG,EAAE,GAAE,CAAC;SACd;QACD,cAAc,EAAE;YACd,IAAI,EAAE,GAAG,EAAE,GAAE,CAAC;YACd,IAAI,EAAE,GAAG,EAAE,GAAE,CAAC;YACd,KAAK,EAAE,GAAG,EAAE,GAAE,CAAC;YACf,KAAK,EAAE,GAAG,EAAE,GAAE,CAAC;YACf,QAAQ,EAAE,GAAG,EAAE,GAAE,CAAC;YAClB,gBAAgB,EAAE,GAAG,EAAE,GAAE,CAAC;YAC1B,gBAAgB,EAAE,GAAG,EAAE,CAAC,SAAS;YACjC,kBAAkB,EAAE,GAAG,EAAE,GAAE,CAAC;SAC7B;KACF,CAAC;IAEF,MAAM,MAAM,GAAG,QAAQ,CAAC,YAAa,CAAC,IAAI,CAAC,CAAC;IAE5C,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;AACnB,CAAC,CAAC,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"openai-compatible.provider.d.ts","sourceRoot":"","sources":["../../source/providers/openai-compatible.provider.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,kBAAkB,EAA+B,MAAM,eAAe,CAAC;AAIrF,MAAM,MAAM,oBAAoB,GAAG;IACjC,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;IAChB,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB,CAAC;AAmBF,wBAAgB,wCAAwC,CAAC,MAAM,EAAE,oBAAoB,GAAG,kBAAkB,CA2DzG"}
1
+ {"version":3,"file":"openai-compatible.provider.d.ts","sourceRoot":"","sources":["../../source/providers/openai-compatible.provider.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,kBAAkB,EAA+B,MAAM,eAAe,CAAC;AAIrF,MAAM,MAAM,oBAAoB,GAAG;IACjC,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;IAChB,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB,CAAC;AAmBF,wBAAgB,wCAAwC,CAAC,MAAM,EAAE,oBAAoB,GAAG,kBAAkB,CAwEzG"}
@@ -1,6 +1,6 @@
1
1
  import { Runner } from '@openai/agents';
2
- import { OpenAICompatibleProvider } from './openai-compatible/provider.js';
3
- import { buildOpenAICompatibleUrl, normalizeBaseUrl } from './openai-compatible/utils.js';
2
+ import { AiSdkOpenAICompatibleProvider } from './ai-sdk-openai-compatible.provider.js';
3
+ import { buildOpenAICompatibleUrl, normalizeBaseUrl } from './common/openai-compatible-utils.js';
4
4
  function findConfigFromSettings(settingsService, providerId) {
5
5
  const list = settingsService?.get?.('providers');
6
6
  if (!Array.isArray(list))
@@ -24,14 +24,24 @@ export function createOpenAICompatibleProviderDefinition(config) {
24
24
  id: providerId,
25
25
  label,
26
26
  isRuntimeDefined: true,
27
- createRunner: ({ settingsService, loggingService }) => {
27
+ createRunner: ({ settingsService }) => {
28
28
  // baseUrl/apiKey can change only with restart, but we re-resolve from
29
29
  // settings at runner creation time to respect precedence.
30
30
  return new Runner({
31
- modelProvider: new OpenAICompatibleProvider({
32
- settingsService,
33
- loggingService,
34
- providerId,
31
+ modelProvider: new AiSdkOpenAICompatibleProvider({
32
+ label,
33
+ defaultModel: settingsService.get('agent.model') || '',
34
+ resolveConfig: () => {
35
+ const resolved = findConfigFromSettings(settingsService, providerId);
36
+ if (!resolved) {
37
+ throw new Error(`Custom provider '${providerId}' is not configured. ` +
38
+ `Please add it to settings.json under \"providers\".`);
39
+ }
40
+ return {
41
+ baseURL: normalizeBaseUrl(resolved.baseUrl),
42
+ apiKey: resolved.apiKey,
43
+ };
44
+ },
35
45
  }),
36
46
  });
37
47
  },
@@ -41,7 +51,7 @@ export function createOpenAICompatibleProviderDefinition(config) {
41
51
  throw new Error(`Custom provider '${providerId}' is not configured in settings.json`);
42
52
  }
43
53
  const baseUrl = normalizeBaseUrl(resolved.baseUrl);
44
- const url = buildOpenAICompatibleUrl(baseUrl, '/v1/models');
54
+ const url = buildOpenAICompatibleUrl(baseUrl, '/models');
45
55
  const headers = {
46
56
  'Content-Type': 'application/json',
47
57
  };
@@ -1 +1 @@
1
- {"version":3,"file":"openai-compatible.provider.js","sourceRoot":"","sources":["../../source/providers/openai-compatible.provider.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,gBAAgB,CAAC;AAGxC,OAAO,EAAE,wBAAwB,EAAE,MAAM,iCAAiC,CAAC;AAC3E,OAAO,EAAE,wBAAwB,EAAE,gBAAgB,EAAE,MAAM,8BAA8B,CAAC;AAQ1F,SAAS,sBAAsB,CAAC,eAAiC,EAAE,UAAkB;IACnF,MAAM,IAAI,GAAG,eAAe,EAAE,GAAG,EAAE,CAAC,WAAW,CAAC,CAAC;IACjD,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC;QAAE,OAAO,IAAI,CAAC;IACtC,MAAM,KAAK,GAAG,IAAI,CAAC,IAAI,CAAC,CAAC,CAAM,EAAE,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,KAAK,UAAU,CAAC,CAAC;IAChE,IAAI,CAAC,KAAK;QAAE,OAAO,IAAI,CAAC;IAExB,OAAO;QACL,IAAI,EAAE,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC;QACxB,OAAO,EAAE,MAAM,CAAC,KAAK,CAAC,OAAO,CAAC;QAC9B,MAAM,EAAE,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,SAAS;KACxD,CAAC;AACJ,CAAC;AAED,SAAS,OAAO,CAAC,IAAY;IAC3B,OAAO,IAAI,CAAC;AACd,CAAC;AAED,MAAM,UAAU,wCAAwC,CAAC,MAA4B;IACnF,MAAM,UAAU,GAAG,MAAM,CAAC,IAAI,CAAC;IAC/B,MAAM,KAAK,GAAG,OAAO,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;IAEnC,OAAO;QACL,EAAE,EAAE,UAAU;QACd,KAAK;QACL,gBAAgB,EAAE,IAAI;QACtB,YAAY,EAAE,CAAC,EAAE,eAAe,EAAE,cAAc,EAAE,EAAE,EAAE;YACpD,sEAAsE;YACtE,0DAA0D;YAC1D,OAAO,IAAI,MAAM,CAAC;gBAChB,aAAa,EAAE,IAAI,wBAAwB,CAAC;oBAC1C,eAAe;oBACf,cAAc;oBACd,UAAU;iBACX,CAAC;aACH,CAAC,CAAC;QACL,CAAC;QACD,WAAW,EAAE,KAAK,EAAE,IAAkB,EAAE,YAA2B,KAAY,EAAE,EAAE;YACjF,MAAM,QAAQ,GAAG,sBAAsB,CAAC,IAAI,CAAC,eAAe,EAAE,UAAU,CAAC,CAAC;YAC1E,IAAI,CAAC,QAAQ,EAAE,CAAC;gBACd,MAAM,IAAI,KAAK,CAAC,oBAAoB,UAAU,sCAAsC,CAAC,CAAC;YACxF,CAAC;YAED,MAAM,OAAO,GAAG,gBAAgB,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC;YACnD,MAAM,GAAG,GAAG,wBAAwB,CAAC,OAAO,EAAE,YAAY,CAAC,CAAC;YAE5D,MAAM,OAAO,GAA2B;gBACtC,cAAc,EAAE,kBAAkB;aACnC,CAAC;YACF,IAAI,QAAQ,CAAC,MAAM,EAAE,CAAC;gBACpB,OAAO,CAAC,aAAa,GAAG,UAAU,QAAQ,CAAC,MAAM,EAAE,CAAC;YACtD,CAAC;YAED,MAAM,QAAQ,GAAG,MAAM,SAAS,CAAC,GAAG,EAAE,EAAE,OAAO,EAAE,CAAC,CAAC;YACnD,IAAI,CAAC,QAAQ,CAAC,EAAE,EAAE,CAAC;gBACjB,MAAM,IAAI,KAAK,CAAC,GAAG,KAAK,2BAA2B,QAAQ,CAAC,MAAM,GAAG,CAAC,CAAC;YACzE,CAAC;YAED,MAAM,IAAI,GAAG,MAAM,QAAQ,CAAC,IAAI,EAAE,CAAC;YACnC,MAAM,GAAG,GAAG,IAAI,EAAE,IAAI,IAAI,EAAE,CAAC;YAC7B,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC;gBAAE,OAAO,EAAE,CAAC;YAEnC,OAAO,GAAG;iBACP,GAAG,CAAC,CAAC,IAAS,EAAE,EAAE;gBACjB,MAAM,EAAE,GAAG,IAAI,EAAE,EAAE,IAAI,IAAI,EAAE,KAAK,IAAI,EAAE,CAAC;gBACzC,MAAM,IAAI,GAAG,IAAI,EAAE,IAAI,IAAI,IAAI,EAAE,YAAY,IAAI,IAAI,EAAE,WAAW,CAAC;gBACnE,OAAO,EAAE,CAAC,CAAC,CAAC,EAAE,EAAE,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC;YAClC,CAAC,CAAC;iBACD,MAAM,CAAC,OAAO,CAAyC,CAAC;QAC7D,CAAC;QACD,2EAA2E;QAC3E,oBAAoB,EAAE,EAAE;QACxB,YAAY,EAAE;YACZ,4BAA4B,EAAE,KAAK;YACnC,sBAAsB,EAAE,KAAK;SAC9B;KACF,CAAC;AACJ,CAAC"}
1
+ {"version":3,"file":"openai-compatible.provider.js","sourceRoot":"","sources":["../../source/providers/openai-compatible.provider.ts"],"names":[],"mappings":"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"}
@@ -1,2 +1,2 @@
1
- export * from './openrouter/index.js';
1
+ export { OpenRouterError } from './common/provider-errors.js';
2
2
  //# sourceMappingURL=openrouter.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"openrouter.d.ts","sourceRoot":"","sources":["../../source/providers/openrouter.ts"],"names":[],"mappings":"AAEA,cAAc,uBAAuB,CAAC"}
1
+ {"version":3,"file":"openrouter.d.ts","sourceRoot":"","sources":["../../source/providers/openrouter.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,MAAM,6BAA6B,CAAC"}
@@ -1,4 +1,2 @@
1
- // This file re-exports from the refactored directory structure
2
- // to maintain backward compatibility with existing imports.
3
- export * from './openrouter/index.js';
1
+ export { OpenRouterError } from './common/provider-errors.js';
4
2
  //# sourceMappingURL=openrouter.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"openrouter.js","sourceRoot":"","sources":["../../source/providers/openrouter.ts"],"names":[],"mappings":"AAAA,+DAA+D;AAC/D,4DAA4D;AAC5D,cAAc,uBAAuB,CAAC"}
1
+ {"version":3,"file":"openrouter.js","sourceRoot":"","sources":["../../source/providers/openrouter.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,MAAM,6BAA6B,CAAC"}
@@ -28,4 +28,32 @@ test('openrouter createRunner does not crash in ESM when api key is missing', (t
28
28
  // With no API key, the OpenRouter provider should opt out (null runner).
29
29
  t.is(runner, null);
30
30
  });
31
+ test('openrouter createRunner returns a runner when api key is configured', (t) => {
32
+ const provider = getProvider('openrouter');
33
+ t.truthy(provider, 'openrouter provider should be registered');
34
+ const deps = {
35
+ settingsService: {
36
+ get: (key) => {
37
+ const values = {
38
+ 'agent.openrouter.apiKey': 'sk-test',
39
+ 'agent.model': 'openrouter/auto',
40
+ };
41
+ return values[key];
42
+ },
43
+ set: () => { },
44
+ },
45
+ loggingService: {
46
+ info: () => { },
47
+ warn: () => { },
48
+ error: () => { },
49
+ debug: () => { },
50
+ security: () => { },
51
+ setCorrelationId: () => { },
52
+ getCorrelationId: () => undefined,
53
+ clearCorrelationId: () => { },
54
+ },
55
+ };
56
+ const runner = provider.createRunner(deps);
57
+ t.truthy(runner);
58
+ });
31
59
  //# sourceMappingURL=openrouter.provider.createRunner.test.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"openrouter.provider.createRunner.test.js","sourceRoot":"","sources":["../../source/providers/openrouter.provider.createRunner.test.ts"],"names":[],"mappings":"AAAA,OAAO,IAAI,MAAM,KAAK,CAAC;AACvB,OAAO,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AAGzC,IAAI,CAAC,uEAAuE,EAAE,CAAC,CAAC,EAAE,EAAE;IAClF,MAAM,QAAQ,GAAG,WAAW,CAAC,YAAY,CAAC,CAAC;IAC3C,CAAC,CAAC,MAAM,CAAC,QAAQ,EAAE,0CAA0C,CAAC,CAAC;IAC/D,CAAC,CAAC,EAAE,CAAC,OAAO,QAAQ,EAAE,YAAY,EAAE,UAAU,CAAC,CAAC;IAEhD,MAAM,IAAI,GAAiB;QACzB,eAAe,EAAE;YACf,GAAG,EAAE,GAAY,EAAE,CAAC,SAAc;YAClC,GAAG,EAAE,GAAG,EAAE,GAAE,CAAC;SACd;QACD,cAAc,EAAE;YACd,IAAI,EAAE,GAAG,EAAE,GAAE,CAAC;YACd,IAAI,EAAE,GAAG,EAAE,GAAE,CAAC;YACd,KAAK,EAAE,GAAG,EAAE,GAAE,CAAC;YACf,KAAK,EAAE,GAAG,EAAE,GAAE,CAAC;YACf,QAAQ,EAAE,GAAG,EAAE,GAAE,CAAC;YAClB,gBAAgB,EAAE,GAAG,EAAE,GAAE,CAAC;YAC1B,gBAAgB,EAAE,GAAG,EAAE,CAAC,SAAS;YACjC,kBAAkB,EAAE,GAAG,EAAE,GAAE,CAAC;SAC7B;KACF,CAAC;IAEF,0EAA0E;IAC1E,IAAI,MAAM,GAAQ,OAAO,CAAC;IAC1B,CAAC,CAAC,SAAS,CAAC,GAAG,EAAE;QACf,MAAM,GAAG,QAAS,CAAC,YAAa,CAAC,IAAI,CAAC,CAAC;IACzC,CAAC,CAAC,CAAC;IAEH,yEAAyE;IACzE,CAAC,CAAC,EAAE,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC;AACrB,CAAC,CAAC,CAAC"}
1
+ {"version":3,"file":"openrouter.provider.createRunner.test.js","sourceRoot":"","sources":["../../source/providers/openrouter.provider.createRunner.test.ts"],"names":[],"mappings":"AAAA,OAAO,IAAI,MAAM,KAAK,CAAC;AACvB,OAAO,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AAGzC,IAAI,CAAC,uEAAuE,EAAE,CAAC,CAAC,EAAE,EAAE;IAClF,MAAM,QAAQ,GAAG,WAAW,CAAC,YAAY,CAAC,CAAC;IAC3C,CAAC,CAAC,MAAM,CAAC,QAAQ,EAAE,0CAA0C,CAAC,CAAC;IAC/D,CAAC,CAAC,EAAE,CAAC,OAAO,QAAQ,EAAE,YAAY,EAAE,UAAU,CAAC,CAAC;IAEhD,MAAM,IAAI,GAAiB;QACzB,eAAe,EAAE;YACf,GAAG,EAAE,GAAY,EAAE,CAAC,SAAc;YAClC,GAAG,EAAE,GAAG,EAAE,GAAE,CAAC;SACd;QACD,cAAc,EAAE;YACd,IAAI,EAAE,GAAG,EAAE,GAAE,CAAC;YACd,IAAI,EAAE,GAAG,EAAE,GAAE,CAAC;YACd,KAAK,EAAE,GAAG,EAAE,GAAE,CAAC;YACf,KAAK,EAAE,GAAG,EAAE,GAAE,CAAC;YACf,QAAQ,EAAE,GAAG,EAAE,GAAE,CAAC;YAClB,gBAAgB,EAAE,GAAG,EAAE,GAAE,CAAC;YAC1B,gBAAgB,EAAE,GAAG,EAAE,CAAC,SAAS;YACjC,kBAAkB,EAAE,GAAG,EAAE,GAAE,CAAC;SAC7B;KACF,CAAC;IAEF,0EAA0E;IAC1E,IAAI,MAAM,GAAQ,OAAO,CAAC;IAC1B,CAAC,CAAC,SAAS,CAAC,GAAG,EAAE;QACf,MAAM,GAAG,QAAS,CAAC,YAAa,CAAC,IAAI,CAAC,CAAC;IACzC,CAAC,CAAC,CAAC;IAEH,yEAAyE;IACzE,CAAC,CAAC,EAAE,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC;AACrB,CAAC,CAAC,CAAC;AAEH,IAAI,CAAC,qEAAqE,EAAE,CAAC,CAAC,EAAE,EAAE;IAChF,MAAM,QAAQ,GAAG,WAAW,CAAC,YAAY,CAAC,CAAC;IAC3C,CAAC,CAAC,MAAM,CAAC,QAAQ,EAAE,0CAA0C,CAAC,CAAC;IAE/D,MAAM,IAAI,GAAiB;QACzB,eAAe,EAAE;YACf,GAAG,EAAE,CAAU,GAAW,EAAE,EAAE;gBAC5B,MAAM,MAAM,GAAwB;oBAClC,yBAAyB,EAAE,SAAS;oBACpC,aAAa,EAAE,iBAAiB;iBACjC,CAAC;gBACF,OAAO,MAAM,CAAC,GAAG,CAAM,CAAC;YAC1B,CAAC;YACD,GAAG,EAAE,GAAG,EAAE,GAAE,CAAC;SACd;QACD,cAAc,EAAE;YACd,IAAI,EAAE,GAAG,EAAE,GAAE,CAAC;YACd,IAAI,EAAE,GAAG,EAAE,GAAE,CAAC;YACd,KAAK,EAAE,GAAG,EAAE,GAAE,CAAC;YACf,KAAK,EAAE,GAAG,EAAE,GAAE,CAAC;YACf,QAAQ,EAAE,GAAG,EAAE,GAAE,CAAC;YAClB,gBAAgB,EAAE,GAAG,EAAE,GAAE,CAAC;YAC1B,gBAAgB,EAAE,GAAG,EAAE,CAAC,SAAS;YACjC,kBAAkB,EAAE,GAAG,EAAE,GAAE,CAAC;SAC7B;KACF,CAAC;IAEF,MAAM,MAAM,GAAG,QAAS,CAAC,YAAa,CAAC,IAAI,CAAC,CAAC;IAE7C,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;AACnB,CAAC,CAAC,CAAC"}
@@ -1,6 +1,6 @@
1
1
  import { Runner } from '@openai/agents';
2
2
  import { registerProvider } from './registry.js';
3
- import { OpenRouterProvider } from './openrouter.js';
3
+ import { AiSdkOpenAICompatibleProvider } from './ai-sdk-openai-compatible.provider.js';
4
4
  async function fetchOpenRouterModels(deps, fetchImpl = fetch) {
5
5
  const { settingsService } = deps;
6
6
  const baseUrl = settingsService.get('agent.openrouter.baseUrl') || 'https://openrouter.ai/api/v1';
@@ -31,15 +31,23 @@ async function fetchOpenRouterModels(deps, fetchImpl = fetch) {
31
31
  registerProvider({
32
32
  id: 'openrouter',
33
33
  label: 'OpenRouter',
34
- createRunner: ({ settingsService, loggingService }) => {
34
+ createRunner: ({ settingsService }) => {
35
35
  const apiKey = settingsService.get('agent.openrouter.apiKey');
36
36
  if (!apiKey) {
37
37
  return null;
38
38
  }
39
39
  return new Runner({
40
- modelProvider: new OpenRouterProvider({
41
- settingsService,
42
- loggingService,
40
+ modelProvider: new AiSdkOpenAICompatibleProvider({
41
+ label: 'OpenRouter',
42
+ defaultModel: settingsService.get('agent.model') || 'openrouter/auto',
43
+ resolveConfig: () => ({
44
+ baseURL: settingsService.get('agent.openrouter.baseUrl') || 'https://openrouter.ai/api/v1',
45
+ apiKey,
46
+ headers: {
47
+ 'HTTP-Referer': settingsService.get('agent.openrouter.referrer') || 'http://localhost',
48
+ 'X-Title': settingsService.get('agent.openrouter.title') || 'term2',
49
+ },
50
+ }),
43
51
  }),
44
52
  });
45
53
  },
@@ -1 +1 @@
1
- {"version":3,"file":"openrouter.provider.js","sourceRoot":"","sources":["../../source/providers/openrouter.provider.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,gBAAgB,CAAC;AACxC,OAAO,EAAE,gBAAgB,EAAE,MAAM,eAAe,CAAC;AAEjD,OAAO,EAAE,kBAAkB,EAAE,MAAM,iBAAiB,CAAC;AAErD,KAAK,UAAU,qBAAqB,CAClC,IAAkB,EAClB,YAA2B,KAAY;IAEvC,MAAM,EAAE,eAAe,EAAE,GAAG,IAAI,CAAC;IAEjC,MAAM,OAAO,GAAG,eAAe,CAAC,GAAG,CAAC,0BAA0B,CAAC,IAAI,8BAA8B,CAAC;IAClG,MAAM,MAAM,GAAG,eAAe,CAAC,GAAG,CAAC,yBAAyB,CAAC,CAAC;IAC9D,MAAM,OAAO,GAA2B;QACtC,cAAc,EAAE,kBAAkB;KACnC,CAAC;IACF,IAAI,MAAM,EAAE,CAAC;QACX,OAAO,CAAC,aAAa,GAAG,UAAU,MAAM,EAAE,CAAC;IAC7C,CAAC;IAED,MAAM,QAAQ,GAAG,MAAM,SAAS,CAAC,GAAG,OAAO,SAAS,EAAE,EAAE,OAAO,EAAE,CAAC,CAAC;IACnE,IAAI,CAAC,QAAQ,CAAC,EAAE,EAAE,CAAC;QACjB,MAAM,IAAI,KAAK,CAAC,qCAAqC,QAAQ,CAAC,MAAM,GAAG,CAAC,CAAC;IAC3E,CAAC;IAED,MAAM,IAAI,GAAG,MAAM,QAAQ,CAAC,IAAI,EAAE,CAAC;IACnC,MAAM,YAAY,GAAG,CAAC,IAAI,EAAE,IAAI,IAAI,EAAE,CAAC,CAAC,MAAM,CAC5C,CAAC,IAAS,EAAE,EAAE,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,EAAE,oBAAoB,CAAC,IAAI,IAAI,CAAC,oBAAoB,CAAC,QAAQ,CAAC,OAAO,CAAC,CACxG,CAAC;IAEF,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,YAAY,CAAC;QAAE,OAAO,EAAE,CAAC;IAE5C,OAAO,YAAY;SAChB,GAAG,CAAC,CAAC,IAAS,EAAE,EAAE;QACjB,MAAM,EAAE,GAAG,IAAI,EAAE,EAAE,IAAI,IAAI,EAAE,KAAK,IAAI,EAAE,CAAC;QACzC,MAAM,IAAI,GAAG,IAAI,EAAE,IAAI,IAAI,IAAI,EAAE,YAAY,IAAI,IAAI,EAAE,WAAW,CAAC;QACnE,OAAO,EAAE,CAAC,CAAC,CAAC,EAAE,EAAE,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC;IAClC,CAAC,CAAC;SACD,MAAM,CAAC,OAAO,CAAyC,CAAC;AAC7D,CAAC;AAED,+BAA+B;AAC/B,gBAAgB,CAAC;IACf,EAAE,EAAE,YAAY;IAChB,KAAK,EAAE,YAAY;IACnB,YAAY,EAAE,CAAC,EAAE,eAAe,EAAE,cAAc,EAAE,EAAE,EAAE;QACpD,MAAM,MAAM,GAAG,eAAe,CAAC,GAAG,CAAC,yBAAyB,CAAC,CAAC;QAC9D,IAAI,CAAC,MAAM,EAAE,CAAC;YACZ,OAAO,IAAI,CAAC;QACd,CAAC;QAED,OAAO,IAAI,MAAM,CAAC;YAChB,aAAa,EAAE,IAAI,kBAAkB,CAAC;gBACpC,eAAe;gBACf,cAAc;aACf,CAAC;SACH,CAAC,CAAC;IACL,CAAC;IACD,WAAW,EAAE,qBAAqB;IAClC,oBAAoB,EAAE;QACpB,yBAAyB;QACzB,0BAA0B;QAC1B,2BAA2B;QAC3B,wBAAwB;KACzB;IACD,YAAY,EAAE;QACZ,4BAA4B,EAAE,KAAK;QACnC,sBAAsB,EAAE,KAAK;KAC9B;CACF,CAAC,CAAC"}
1
+ {"version":3,"file":"openrouter.provider.js","sourceRoot":"","sources":["../../source/providers/openrouter.provider.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,57 @@
1
+ import { OpenAI } from 'openai';
2
+ const client = new OpenAI();
3
+
4
+ /**
5
+ * Evaluates if a bash command is safe to execute automatically
6
+ * @param {string} command - The bash command to evaluate
7
+ * @returns {Promise<{safe: boolean, reason: string}>}
8
+ */
9
+ export async function isSafeCommand(command) {
10
+ try {
11
+ const response = await client.chat.completions.create({
12
+ model: 'gpt-4.1-mini',
13
+ messages: [{
14
+ role: 'system',
15
+ content: `You are a security expert evaluating bash commands for safety.
16
+ Analyze if the command is safe to execute automatically without user approval.
17
+
18
+ Consider DANGEROUS:
19
+ - Commands that delete, remove, or modify files/directories (rm, rmdir, mv to overwrite, >)
20
+ - Commands that change system configuration (chmod, chown, systemctl, etc.)
21
+ - Commands that install/uninstall software (apt, yum, npm install -g, pip install, etc.)
22
+ - Commands that modify user accounts or permissions
23
+ - Commands that interact with network in destructive ways (curl with -X DELETE, wget with -O to system files)
24
+ - Commands that execute arbitrary code from network sources
25
+ - Commands with sudo or elevated privileges
26
+ - Commands that shut down or reboot the system
27
+ - Commands that modify environment permanently (.bashrc, .profile, etc.)
28
+ - Commands that access sensitive files (/etc/passwd, ~/.ssh/, etc.)
29
+
30
+ Consider SAFE:
31
+ - Read-only commands (ls, cat, head, tail, grep, find without -exec, pwd, echo, etc.)
32
+ - Non-destructive information gathering (ps, top, df, du, whoami, uname, date, etc.)
33
+ - Simple calculations or text processing (wc, sort, uniq, awk for display, sed for display)
34
+ - Git read operations (git status, git log, git diff, git branch without creation)
35
+ - Package queries without installation (npm list, pip list, apt list)
36
+ - Commands that create new files in user directories (touch, echo >, mkdir in ~/)
37
+
38
+ Respond with ONLY a JSON object: {"safe": true/false, "reason": "brief explanation"}`
39
+ }, {
40
+ role: 'user',
41
+ content: `Evaluate this command: ${command}`
42
+ }],
43
+ temperature: 0,
44
+ response_format: {
45
+ type: 'json_object'
46
+ }
47
+ });
48
+ const result = JSON.parse(response.choices[0].message.content);
49
+ return result;
50
+ } catch (error) {
51
+ // If safety check fails, default to requiring approval (safe fallback)
52
+ return {
53
+ safe: false,
54
+ reason: `Safety check failed: ${error.message}`
55
+ };
56
+ }
57
+ }
@@ -19,8 +19,8 @@ export declare const CaseSchema: z.ZodObject<{
19
19
  }>;
20
20
  category: z.ZodString;
21
21
  severity: z.ZodEnum<{
22
- medium: "medium";
23
22
  low: "low";
23
+ medium: "medium";
24
24
  high: "high";
25
25
  critical: "critical";
26
26
  }>;
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=check_mock.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"check_mock.d.ts","sourceRoot":"","sources":["../../source/services/check_mock.ts"],"names":[],"mappings":""}
@@ -0,0 +1,22 @@
1
+ import { createMockSettingsService } from './settings-service.mock.js';
2
+ console.log('--- Tesing MockSettingsService ---');
3
+ try {
4
+ // Test 1: Check if overrides work with nested object (expected to work)
5
+ const service1 = createMockSettingsService({
6
+ agent: { model: 'nested-model' }
7
+ });
8
+ console.log(`Nested override 'agent.model': ${service1.get('agent.model')}`);
9
+ // Test 2: Check if overrides work with dot notation (likely to fail based on my analysis)
10
+ const service2 = createMockSettingsService({
11
+ 'agent.model': 'flat-model'
12
+ });
13
+ console.log(`Dot-notation override 'agent.model': ${service2.get('agent.model')}`);
14
+ // Test 3: Check directory creation
15
+ // We need to inspect the settingsDir of the service.
16
+ // We can't access private 'settingsDir', but we can check the known path if we know tmpdir
17
+ // actually, let's just see if we can infer anything or just rely on code analysis for that part.
18
+ }
19
+ catch (err) {
20
+ console.error(err);
21
+ }
22
+ //# sourceMappingURL=check_mock.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"check_mock.js","sourceRoot":"","sources":["../../source/services/check_mock.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,yBAAyB,EAAE,MAAM,4BAA4B,CAAC;AAIvE,OAAO,CAAC,GAAG,CAAC,oCAAoC,CAAC,CAAC;AAElD,IAAI,CAAC;IACH,wEAAwE;IACxE,MAAM,QAAQ,GAAG,yBAAyB,CAAC;QACvC,KAAK,EAAE,EAAE,KAAK,EAAE,cAAc,EAAE;KACnC,CAAC,CAAC;IACH,OAAO,CAAC,GAAG,CAAC,kCAAkC,QAAQ,CAAC,GAAG,CAAC,aAAa,CAAC,EAAE,CAAC,CAAC;IAE7E,0FAA0F;IAC1F,MAAM,QAAQ,GAAG,yBAAyB,CAAC;QACvC,aAAa,EAAE,YAAY;KAC9B,CAAC,CAAC;IACH,OAAO,CAAC,GAAG,CAAC,wCAAwC,QAAQ,CAAC,GAAG,CAAC,aAAa,CAAC,EAAE,CAAC,CAAC;IAEnF,mCAAmC;IACnC,qDAAqD;IACrD,2FAA2F;IAC3F,iGAAiG;AAEnG,CAAC;AAAC,OAAO,GAAG,EAAE,CAAC;IACb,OAAO,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;AACrB,CAAC"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=conversation-service.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"conversation-service.test.d.ts","sourceRoot":"","sources":["../../source/services/conversation-service.test.ts"],"names":[],"mappings":""}