ys-code-agent 2.0.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 (373) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +252 -0
  3. package/SETUP.md +228 -0
  4. package/USAGE.md +437 -0
  5. package/dist/agent/index.d.ts +29 -0
  6. package/dist/agent/index.d.ts.map +1 -0
  7. package/dist/agent/index.js +501 -0
  8. package/dist/agent/index.js.map +1 -0
  9. package/dist/cli/agent.d.ts +10 -0
  10. package/dist/cli/agent.d.ts.map +1 -0
  11. package/dist/cli/agent.js +38 -0
  12. package/dist/cli/agent.js.map +1 -0
  13. package/dist/cli/index.cjs +19187 -0
  14. package/dist/cli/index.cjs.map +7 -0
  15. package/dist/cli/index.d.ts +2 -0
  16. package/dist/cli/index.d.ts.map +1 -0
  17. package/dist/cli/index.js +326 -0
  18. package/dist/cli/index.js.map +1 -0
  19. package/dist/cli/interactive.d.ts +14 -0
  20. package/dist/cli/interactive.d.ts.map +1 -0
  21. package/dist/cli/interactive.js +125 -0
  22. package/dist/cli/interactive.js.map +1 -0
  23. package/dist/commands/CommandRegistry.d.ts +15 -0
  24. package/dist/commands/CommandRegistry.d.ts.map +1 -0
  25. package/dist/commands/CommandRegistry.js +1311 -0
  26. package/dist/commands/CommandRegistry.js.map +1 -0
  27. package/dist/commands/handlers/agents.d.ts +5 -0
  28. package/dist/commands/handlers/agents.d.ts.map +1 -0
  29. package/dist/commands/handlers/agents.js +124 -0
  30. package/dist/commands/handlers/agents.js.map +1 -0
  31. package/dist/commands/handlers/file.d.ts +8 -0
  32. package/dist/commands/handlers/file.d.ts.map +1 -0
  33. package/dist/commands/handlers/file.js +364 -0
  34. package/dist/commands/handlers/file.js.map +1 -0
  35. package/dist/commands/handlers/git.d.ts +2 -0
  36. package/dist/commands/handlers/git.d.ts.map +1 -0
  37. package/dist/commands/handlers/git.js +343 -0
  38. package/dist/commands/handlers/git.js.map +1 -0
  39. package/dist/commands/handlers/memory.d.ts +6 -0
  40. package/dist/commands/handlers/memory.d.ts.map +1 -0
  41. package/dist/commands/handlers/memory.js +149 -0
  42. package/dist/commands/handlers/memory.js.map +1 -0
  43. package/dist/commands/index.d.ts +3 -0
  44. package/dist/commands/index.d.ts.map +1 -0
  45. package/dist/commands/index.js +2 -0
  46. package/dist/commands/index.js.map +1 -0
  47. package/dist/config/index.d.ts +25 -0
  48. package/dist/config/index.d.ts.map +1 -0
  49. package/dist/config/index.js +399 -0
  50. package/dist/config/index.js.map +1 -0
  51. package/dist/context/index.d.ts +31 -0
  52. package/dist/context/index.d.ts.map +1 -0
  53. package/dist/context/index.js +208 -0
  54. package/dist/context/index.js.map +1 -0
  55. package/dist/filesystem/index.d.ts +52 -0
  56. package/dist/filesystem/index.d.ts.map +1 -0
  57. package/dist/filesystem/index.js +481 -0
  58. package/dist/filesystem/index.js.map +1 -0
  59. package/dist/git/index.d.ts +41 -0
  60. package/dist/git/index.d.ts.map +1 -0
  61. package/dist/git/index.js +381 -0
  62. package/dist/git/index.js.map +1 -0
  63. package/dist/logger/index.d.ts +32 -0
  64. package/dist/logger/index.d.ts.map +1 -0
  65. package/dist/logger/index.js +199 -0
  66. package/dist/logger/index.js.map +1 -0
  67. package/dist/memory/index.d.ts +45 -0
  68. package/dist/memory/index.d.ts.map +1 -0
  69. package/dist/memory/index.js +147 -0
  70. package/dist/memory/index.js.map +1 -0
  71. package/dist/project/index.d.ts +14 -0
  72. package/dist/project/index.d.ts.map +1 -0
  73. package/dist/project/index.js +371 -0
  74. package/dist/project/index.js.map +1 -0
  75. package/dist/providers/anthropic.d.ts +22 -0
  76. package/dist/providers/anthropic.d.ts.map +1 -0
  77. package/dist/providers/anthropic.js +202 -0
  78. package/dist/providers/anthropic.js.map +1 -0
  79. package/dist/providers/base.d.ts +29 -0
  80. package/dist/providers/base.d.ts.map +1 -0
  81. package/dist/providers/base.js +119 -0
  82. package/dist/providers/base.js.map +1 -0
  83. package/dist/providers/custom.d.ts +8 -0
  84. package/dist/providers/custom.d.ts.map +1 -0
  85. package/dist/providers/custom.js +13 -0
  86. package/dist/providers/custom.js.map +1 -0
  87. package/dist/providers/deepseek.d.ts +8 -0
  88. package/dist/providers/deepseek.d.ts.map +1 -0
  89. package/dist/providers/deepseek.js +13 -0
  90. package/dist/providers/deepseek.js.map +1 -0
  91. package/dist/providers/gemini.d.ts +18 -0
  92. package/dist/providers/gemini.d.ts.map +1 -0
  93. package/dist/providers/gemini.js +183 -0
  94. package/dist/providers/gemini.js.map +1 -0
  95. package/dist/providers/groq.d.ts +8 -0
  96. package/dist/providers/groq.d.ts.map +1 -0
  97. package/dist/providers/groq.js +13 -0
  98. package/dist/providers/groq.js.map +1 -0
  99. package/dist/providers/index.d.ts +16 -0
  100. package/dist/providers/index.d.ts.map +1 -0
  101. package/dist/providers/index.js +50 -0
  102. package/dist/providers/index.js.map +1 -0
  103. package/dist/providers/lmstudio.d.ts +9 -0
  104. package/dist/providers/lmstudio.d.ts.map +1 -0
  105. package/dist/providers/lmstudio.js +18 -0
  106. package/dist/providers/lmstudio.js.map +1 -0
  107. package/dist/providers/ollama.d.ts +8 -0
  108. package/dist/providers/ollama.d.ts.map +1 -0
  109. package/dist/providers/ollama.js +13 -0
  110. package/dist/providers/ollama.js.map +1 -0
  111. package/dist/providers/openai.d.ts +16 -0
  112. package/dist/providers/openai.d.ts.map +1 -0
  113. package/dist/providers/openai.js +116 -0
  114. package/dist/providers/openai.js.map +1 -0
  115. package/dist/providers/openrouter.d.ts +9 -0
  116. package/dist/providers/openrouter.d.ts.map +1 -0
  117. package/dist/providers/openrouter.js +21 -0
  118. package/dist/providers/openrouter.js.map +1 -0
  119. package/dist/security/index.d.ts +28 -0
  120. package/dist/security/index.d.ts.map +1 -0
  121. package/dist/security/index.js +139 -0
  122. package/dist/security/index.js.map +1 -0
  123. package/dist/session/index.d.ts +36 -0
  124. package/dist/session/index.d.ts.map +1 -0
  125. package/dist/session/index.js +203 -0
  126. package/dist/session/index.js.map +1 -0
  127. package/dist/src/agent/index.d.ts +29 -0
  128. package/dist/src/agent/index.d.ts.map +1 -0
  129. package/dist/src/agent/index.js +504 -0
  130. package/dist/src/agent/index.js.map +1 -0
  131. package/dist/src/cli/agent.d.ts +10 -0
  132. package/dist/src/cli/agent.d.ts.map +1 -0
  133. package/dist/src/cli/agent.js +38 -0
  134. package/dist/src/cli/agent.js.map +1 -0
  135. package/dist/src/cli/index.d.ts +3 -0
  136. package/dist/src/cli/index.d.ts.map +1 -0
  137. package/dist/src/cli/index.js +327 -0
  138. package/dist/src/cli/index.js.map +1 -0
  139. package/dist/src/cli/interactive.d.ts +12 -0
  140. package/dist/src/cli/interactive.d.ts.map +1 -0
  141. package/dist/src/cli/interactive.js +202 -0
  142. package/dist/src/cli/interactive.js.map +1 -0
  143. package/dist/src/config/index.d.ts +25 -0
  144. package/dist/src/config/index.d.ts.map +1 -0
  145. package/dist/src/config/index.js +398 -0
  146. package/dist/src/config/index.js.map +1 -0
  147. package/dist/src/context/index.d.ts +31 -0
  148. package/dist/src/context/index.d.ts.map +1 -0
  149. package/dist/src/context/index.js +208 -0
  150. package/dist/src/context/index.js.map +1 -0
  151. package/dist/src/filesystem/index.d.ts +52 -0
  152. package/dist/src/filesystem/index.d.ts.map +1 -0
  153. package/dist/src/filesystem/index.js +481 -0
  154. package/dist/src/filesystem/index.js.map +1 -0
  155. package/dist/src/git/index.d.ts +41 -0
  156. package/dist/src/git/index.d.ts.map +1 -0
  157. package/dist/src/git/index.js +381 -0
  158. package/dist/src/git/index.js.map +1 -0
  159. package/dist/src/logger/index.d.ts +32 -0
  160. package/dist/src/logger/index.d.ts.map +1 -0
  161. package/dist/src/logger/index.js +199 -0
  162. package/dist/src/logger/index.js.map +1 -0
  163. package/dist/src/memory/index.d.ts +45 -0
  164. package/dist/src/memory/index.d.ts.map +1 -0
  165. package/dist/src/memory/index.js +147 -0
  166. package/dist/src/memory/index.js.map +1 -0
  167. package/dist/src/project/index.d.ts +14 -0
  168. package/dist/src/project/index.d.ts.map +1 -0
  169. package/dist/src/project/index.js +371 -0
  170. package/dist/src/project/index.js.map +1 -0
  171. package/dist/src/providers/anthropic.d.ts +22 -0
  172. package/dist/src/providers/anthropic.d.ts.map +1 -0
  173. package/dist/src/providers/anthropic.js +202 -0
  174. package/dist/src/providers/anthropic.js.map +1 -0
  175. package/dist/src/providers/base.d.ts +29 -0
  176. package/dist/src/providers/base.d.ts.map +1 -0
  177. package/dist/src/providers/base.js +112 -0
  178. package/dist/src/providers/base.js.map +1 -0
  179. package/dist/src/providers/custom.d.ts +8 -0
  180. package/dist/src/providers/custom.d.ts.map +1 -0
  181. package/dist/src/providers/custom.js +13 -0
  182. package/dist/src/providers/custom.js.map +1 -0
  183. package/dist/src/providers/deepseek.d.ts +8 -0
  184. package/dist/src/providers/deepseek.d.ts.map +1 -0
  185. package/dist/src/providers/deepseek.js +13 -0
  186. package/dist/src/providers/deepseek.js.map +1 -0
  187. package/dist/src/providers/gemini.d.ts +18 -0
  188. package/dist/src/providers/gemini.d.ts.map +1 -0
  189. package/dist/src/providers/gemini.js +183 -0
  190. package/dist/src/providers/gemini.js.map +1 -0
  191. package/dist/src/providers/groq.d.ts +8 -0
  192. package/dist/src/providers/groq.d.ts.map +1 -0
  193. package/dist/src/providers/groq.js +13 -0
  194. package/dist/src/providers/groq.js.map +1 -0
  195. package/dist/src/providers/index.d.ts +16 -0
  196. package/dist/src/providers/index.d.ts.map +1 -0
  197. package/dist/src/providers/index.js +50 -0
  198. package/dist/src/providers/index.js.map +1 -0
  199. package/dist/src/providers/lmstudio.d.ts +9 -0
  200. package/dist/src/providers/lmstudio.d.ts.map +1 -0
  201. package/dist/src/providers/lmstudio.js +18 -0
  202. package/dist/src/providers/lmstudio.js.map +1 -0
  203. package/dist/src/providers/ollama.d.ts +8 -0
  204. package/dist/src/providers/ollama.d.ts.map +1 -0
  205. package/dist/src/providers/ollama.js +13 -0
  206. package/dist/src/providers/ollama.js.map +1 -0
  207. package/dist/src/providers/openai.d.ts +16 -0
  208. package/dist/src/providers/openai.d.ts.map +1 -0
  209. package/dist/src/providers/openai.js +116 -0
  210. package/dist/src/providers/openai.js.map +1 -0
  211. package/dist/src/providers/openrouter.d.ts +9 -0
  212. package/dist/src/providers/openrouter.d.ts.map +1 -0
  213. package/dist/src/providers/openrouter.js +21 -0
  214. package/dist/src/providers/openrouter.js.map +1 -0
  215. package/dist/src/security/index.d.ts +28 -0
  216. package/dist/src/security/index.d.ts.map +1 -0
  217. package/dist/src/security/index.js +139 -0
  218. package/dist/src/security/index.js.map +1 -0
  219. package/dist/src/session/index.d.ts +36 -0
  220. package/dist/src/session/index.d.ts.map +1 -0
  221. package/dist/src/session/index.js +203 -0
  222. package/dist/src/session/index.js.map +1 -0
  223. package/dist/src/terminal/index.d.ts +27 -0
  224. package/dist/src/terminal/index.d.ts.map +1 -0
  225. package/dist/src/terminal/index.js +211 -0
  226. package/dist/src/terminal/index.js.map +1 -0
  227. package/dist/src/tools/DeleteFileTool.d.ts +7 -0
  228. package/dist/src/tools/DeleteFileTool.d.ts.map +1 -0
  229. package/dist/src/tools/DeleteFileTool.js +50 -0
  230. package/dist/src/tools/DeleteFileTool.js.map +1 -0
  231. package/dist/src/tools/DirectoryTreeTool.d.ts +7 -0
  232. package/dist/src/tools/DirectoryTreeTool.d.ts.map +1 -0
  233. package/dist/src/tools/DirectoryTreeTool.js +50 -0
  234. package/dist/src/tools/DirectoryTreeTool.js.map +1 -0
  235. package/dist/src/tools/EditFileTool.d.ts +7 -0
  236. package/dist/src/tools/EditFileTool.d.ts.map +1 -0
  237. package/dist/src/tools/EditFileTool.js +69 -0
  238. package/dist/src/tools/EditFileTool.js.map +1 -0
  239. package/dist/src/tools/GitTool.d.ts +9 -0
  240. package/dist/src/tools/GitTool.d.ts.map +1 -0
  241. package/dist/src/tools/GitTool.js +115 -0
  242. package/dist/src/tools/GitTool.js.map +1 -0
  243. package/dist/src/tools/GlobTool.d.ts +7 -0
  244. package/dist/src/tools/GlobTool.d.ts.map +1 -0
  245. package/dist/src/tools/GlobTool.js +51 -0
  246. package/dist/src/tools/GlobTool.js.map +1 -0
  247. package/dist/src/tools/MemoryTool.d.ts +9 -0
  248. package/dist/src/tools/MemoryTool.d.ts.map +1 -0
  249. package/dist/src/tools/MemoryTool.js +109 -0
  250. package/dist/src/tools/MemoryTool.js.map +1 -0
  251. package/dist/src/tools/ReadFileTool.d.ts +7 -0
  252. package/dist/src/tools/ReadFileTool.d.ts.map +1 -0
  253. package/dist/src/tools/ReadFileTool.js +75 -0
  254. package/dist/src/tools/ReadFileTool.js.map +1 -0
  255. package/dist/src/tools/SearchTool.d.ts +7 -0
  256. package/dist/src/tools/SearchTool.d.ts.map +1 -0
  257. package/dist/src/tools/SearchTool.js +67 -0
  258. package/dist/src/tools/SearchTool.js.map +1 -0
  259. package/dist/src/tools/TerminalTool.d.ts +9 -0
  260. package/dist/src/tools/TerminalTool.d.ts.map +1 -0
  261. package/dist/src/tools/TerminalTool.js +93 -0
  262. package/dist/src/tools/TerminalTool.js.map +1 -0
  263. package/dist/src/tools/WebFetchTool.d.ts +7 -0
  264. package/dist/src/tools/WebFetchTool.d.ts.map +1 -0
  265. package/dist/src/tools/WebFetchTool.js +120 -0
  266. package/dist/src/tools/WebFetchTool.js.map +1 -0
  267. package/dist/src/tools/WriteFileTool.d.ts +7 -0
  268. package/dist/src/tools/WriteFileTool.d.ts.map +1 -0
  269. package/dist/src/tools/WriteFileTool.js +46 -0
  270. package/dist/src/tools/WriteFileTool.js.map +1 -0
  271. package/dist/src/tools/base.d.ts +36 -0
  272. package/dist/src/tools/base.d.ts.map +1 -0
  273. package/dist/src/tools/base.js +159 -0
  274. package/dist/src/tools/base.js.map +1 -0
  275. package/dist/src/tools/index.d.ts +14 -0
  276. package/dist/src/tools/index.d.ts.map +1 -0
  277. package/dist/src/tools/index.js +44 -0
  278. package/dist/src/tools/index.js.map +1 -0
  279. package/dist/src/types.d.ts +315 -0
  280. package/dist/src/types.d.ts.map +1 -0
  281. package/dist/src/types.js +2 -0
  282. package/dist/src/types.js.map +1 -0
  283. package/dist/src/ui/index.d.ts +50 -0
  284. package/dist/src/ui/index.d.ts.map +1 -0
  285. package/dist/src/ui/index.js +274 -0
  286. package/dist/src/ui/index.js.map +1 -0
  287. package/dist/src/utils/index.d.ts +26 -0
  288. package/dist/src/utils/index.d.ts.map +1 -0
  289. package/dist/src/utils/index.js +248 -0
  290. package/dist/src/utils/index.js.map +1 -0
  291. package/dist/terminal/index.d.ts +27 -0
  292. package/dist/terminal/index.d.ts.map +1 -0
  293. package/dist/terminal/index.js +211 -0
  294. package/dist/terminal/index.js.map +1 -0
  295. package/dist/tools/DeleteFileTool.d.ts +7 -0
  296. package/dist/tools/DeleteFileTool.d.ts.map +1 -0
  297. package/dist/tools/DeleteFileTool.js +50 -0
  298. package/dist/tools/DeleteFileTool.js.map +1 -0
  299. package/dist/tools/DirectoryTreeTool.d.ts +7 -0
  300. package/dist/tools/DirectoryTreeTool.d.ts.map +1 -0
  301. package/dist/tools/DirectoryTreeTool.js +50 -0
  302. package/dist/tools/DirectoryTreeTool.js.map +1 -0
  303. package/dist/tools/EditFileTool.d.ts +7 -0
  304. package/dist/tools/EditFileTool.d.ts.map +1 -0
  305. package/dist/tools/EditFileTool.js +69 -0
  306. package/dist/tools/EditFileTool.js.map +1 -0
  307. package/dist/tools/GitTool.d.ts +9 -0
  308. package/dist/tools/GitTool.d.ts.map +1 -0
  309. package/dist/tools/GitTool.js +115 -0
  310. package/dist/tools/GitTool.js.map +1 -0
  311. package/dist/tools/GlobTool.d.ts +7 -0
  312. package/dist/tools/GlobTool.d.ts.map +1 -0
  313. package/dist/tools/GlobTool.js +51 -0
  314. package/dist/tools/GlobTool.js.map +1 -0
  315. package/dist/tools/MemoryTool.d.ts +9 -0
  316. package/dist/tools/MemoryTool.d.ts.map +1 -0
  317. package/dist/tools/MemoryTool.js +109 -0
  318. package/dist/tools/MemoryTool.js.map +1 -0
  319. package/dist/tools/ReadFileTool.d.ts +7 -0
  320. package/dist/tools/ReadFileTool.d.ts.map +1 -0
  321. package/dist/tools/ReadFileTool.js +75 -0
  322. package/dist/tools/ReadFileTool.js.map +1 -0
  323. package/dist/tools/SearchTool.d.ts +7 -0
  324. package/dist/tools/SearchTool.d.ts.map +1 -0
  325. package/dist/tools/SearchTool.js +67 -0
  326. package/dist/tools/SearchTool.js.map +1 -0
  327. package/dist/tools/TerminalTool.d.ts +9 -0
  328. package/dist/tools/TerminalTool.d.ts.map +1 -0
  329. package/dist/tools/TerminalTool.js +93 -0
  330. package/dist/tools/TerminalTool.js.map +1 -0
  331. package/dist/tools/WebFetchTool.d.ts +7 -0
  332. package/dist/tools/WebFetchTool.d.ts.map +1 -0
  333. package/dist/tools/WebFetchTool.js +120 -0
  334. package/dist/tools/WebFetchTool.js.map +1 -0
  335. package/dist/tools/WriteFileTool.d.ts +7 -0
  336. package/dist/tools/WriteFileTool.d.ts.map +1 -0
  337. package/dist/tools/WriteFileTool.js +46 -0
  338. package/dist/tools/WriteFileTool.js.map +1 -0
  339. package/dist/tools/base.d.ts +36 -0
  340. package/dist/tools/base.d.ts.map +1 -0
  341. package/dist/tools/base.js +159 -0
  342. package/dist/tools/base.js.map +1 -0
  343. package/dist/tools/index.d.ts +14 -0
  344. package/dist/tools/index.d.ts.map +1 -0
  345. package/dist/tools/index.js +44 -0
  346. package/dist/tools/index.js.map +1 -0
  347. package/dist/types.d.ts +315 -0
  348. package/dist/types.d.ts.map +1 -0
  349. package/dist/types.js +2 -0
  350. package/dist/types.js.map +1 -0
  351. package/dist/ui/CommandPopup.d.ts +33 -0
  352. package/dist/ui/CommandPopup.d.ts.map +1 -0
  353. package/dist/ui/CommandPopup.js +179 -0
  354. package/dist/ui/CommandPopup.js.map +1 -0
  355. package/dist/ui/WelcomeScreen.d.ts +3 -0
  356. package/dist/ui/WelcomeScreen.d.ts.map +1 -0
  357. package/dist/ui/WelcomeScreen.js +168 -0
  358. package/dist/ui/WelcomeScreen.js.map +1 -0
  359. package/dist/ui/index.d.ts +75 -0
  360. package/dist/ui/index.d.ts.map +1 -0
  361. package/dist/ui/index.js +728 -0
  362. package/dist/ui/index.js.map +1 -0
  363. package/dist/ui/phoneOptimizer.d.ts +15 -0
  364. package/dist/ui/phoneOptimizer.d.ts.map +1 -0
  365. package/dist/ui/phoneOptimizer.js +58 -0
  366. package/dist/ui/phoneOptimizer.js.map +1 -0
  367. package/dist/utils/index.d.ts +26 -0
  368. package/dist/utils/index.d.ts.map +1 -0
  369. package/dist/utils/index.js +248 -0
  370. package/dist/utils/index.js.map +1 -0
  371. package/package.json +80 -0
  372. package/scripts/build.mjs +53 -0
  373. package/scripts/setup-termux.sh +84 -0
@@ -0,0 +1 @@
1
+ {"version":3,"file":"anthropic.d.ts","sourceRoot":"","sources":["../../../src/src/providers/anthropic.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,WAAW,CAAC;AACzC,OAAO,EAAE,cAAc,EAAE,WAAW,EAAE,gBAAgB,EAAE,mBAAmB,EAAY,MAAM,aAAa,CAAC;AAE3G,qBAAa,iBAAkB,SAAQ,YAAY;gBACrC,MAAM,EAAE,cAAc,EAAE,WAAW,EAAE,WAAW;IAI5D,OAAO,IAAI,MAAM;IAIjB,OAAO,IAAI,MAAM;IAIjB,SAAS,CAAC,YAAY,IAAI,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC;IAQhD,SAAS,CAAC,gBAAgB,CAAC,QAAQ,EAAE,KAAK,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,MAAM,CAAA;KAAE,CAAC,EAAE,KAAK,CAAC,EAAE,OAAO,EAAE,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC;IA2B1H,OAAO,CAAC,eAAe;IAqBjB,QAAQ,CACZ,QAAQ,EAAE,KAAK,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,MAAM,CAAA;KAAE,CAAC,EAClD,KAAK,CAAC,EAAE,OAAO,EAAE,GAChB,OAAO,CAAC,gBAAgB,CAAC;IA4DrB,cAAc,CACnB,QAAQ,EAAE,KAAK,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,MAAM,CAAA;KAAE,CAAC,EAClD,KAAK,CAAC,EAAE,OAAO,EAAE,GAChB,cAAc,CAAC,mBAAmB,CAAC;CAiGvC"}
@@ -0,0 +1,202 @@
1
+ import { BaseProvider } from './base.js';
2
+ export class AnthropicProvider extends BaseProvider {
3
+ constructor(config, modelConfig) {
4
+ super(config, modelConfig);
5
+ }
6
+ getName() {
7
+ return 'Anthropic';
8
+ }
9
+ getType() {
10
+ return 'anthropic';
11
+ }
12
+ buildHeaders() {
13
+ return {
14
+ 'Content-Type': 'application/json',
15
+ 'x-api-key': this.getApiKey(),
16
+ 'anthropic-version': '2023-06-01',
17
+ };
18
+ }
19
+ buildRequestBody(messages, tools) {
20
+ const systemMessages = messages.filter((m) => m.role === 'system');
21
+ const chatMessages = messages.filter((m) => m.role !== 'system');
22
+ const body = {
23
+ model: this.modelConfig.model,
24
+ messages: chatMessages.map((m) => ({
25
+ role: m.role === 'assistant' ? 'assistant' : 'user',
26
+ content: m.content,
27
+ })),
28
+ max_tokens: this.modelConfig.maxTokens,
29
+ temperature: this.modelConfig.temperature,
30
+ top_p: this.modelConfig.topP,
31
+ stream: false,
32
+ };
33
+ if (systemMessages.length > 0) {
34
+ body.system = systemMessages.map((m) => ({ type: 'text', text: m.content }));
35
+ }
36
+ if (tools && tools.length > 0) {
37
+ body.tools = tools;
38
+ }
39
+ return body;
40
+ }
41
+ convertMessages(messages) {
42
+ const systemMessages = [];
43
+ const chatMessages = [];
44
+ for (const msg of messages) {
45
+ if (msg.role === 'system') {
46
+ systemMessages.push({ type: 'text', text: msg.content });
47
+ }
48
+ else {
49
+ chatMessages.push({
50
+ role: msg.role === 'assistant' ? 'assistant' : 'user',
51
+ content: msg.content,
52
+ });
53
+ }
54
+ }
55
+ return { systemMessages, chatMessages };
56
+ }
57
+ async generate(messages, tools) {
58
+ const url = `${this.config.baseUrl}/messages`;
59
+ const { systemMessages, chatMessages } = this.convertMessages(messages);
60
+ const body = {
61
+ model: this.modelConfig.model,
62
+ messages: chatMessages,
63
+ max_tokens: this.modelConfig.maxTokens,
64
+ temperature: this.modelConfig.temperature,
65
+ top_p: this.modelConfig.topP,
66
+ stream: false,
67
+ };
68
+ if (systemMessages.length > 0) {
69
+ body.system = systemMessages;
70
+ }
71
+ if (tools && tools.length > 0) {
72
+ body.tools = tools;
73
+ }
74
+ const response = await this.fetchWithRetry(url, {
75
+ method: 'POST',
76
+ headers: this.buildHeaders(),
77
+ body: JSON.stringify(body),
78
+ });
79
+ const data = await response.json();
80
+ const content = data.content || [];
81
+ let textContent = '';
82
+ const toolCalls = [];
83
+ for (const block of content) {
84
+ if (block.type === 'text') {
85
+ textContent += block.text || '';
86
+ }
87
+ else if (block.type === 'tool_use') {
88
+ toolCalls.push({
89
+ id: block.id,
90
+ name: block.name,
91
+ arguments: block.input || {},
92
+ timestamp: Date.now(),
93
+ });
94
+ }
95
+ }
96
+ const usage = data.usage || {};
97
+ return {
98
+ content: textContent,
99
+ toolCalls,
100
+ usage: {
101
+ promptTokens: usage.input_tokens || 0,
102
+ completionTokens: usage.output_tokens || 0,
103
+ totalTokens: (usage.input_tokens || 0) + (usage.output_tokens || 0),
104
+ },
105
+ finishReason: data.stop_reason || 'end_turn',
106
+ };
107
+ }
108
+ async *generateStream(messages, tools) {
109
+ const url = `${this.config.baseUrl}/messages`;
110
+ const { systemMessages, chatMessages } = this.convertMessages(messages);
111
+ const body = {
112
+ model: this.modelConfig.model,
113
+ messages: chatMessages,
114
+ max_tokens: this.modelConfig.maxTokens,
115
+ temperature: this.modelConfig.temperature,
116
+ top_p: this.modelConfig.topP,
117
+ stream: true,
118
+ };
119
+ if (systemMessages.length > 0) {
120
+ body.system = systemMessages;
121
+ }
122
+ if (tools && tools.length > 0) {
123
+ body.tools = tools;
124
+ }
125
+ const response = await this.fetchWithRetry(url, {
126
+ method: 'POST',
127
+ headers: this.buildHeaders(),
128
+ body: JSON.stringify(body),
129
+ });
130
+ const reader = response.body?.getReader();
131
+ if (!reader)
132
+ throw new Error('No response body stream available');
133
+ const decoder = new TextDecoder();
134
+ let buffer = '';
135
+ try {
136
+ while (true) {
137
+ const { done, value } = await reader.read();
138
+ if (done)
139
+ break;
140
+ buffer += decoder.decode(value, { stream: true });
141
+ const lines = buffer.split('\n');
142
+ buffer = lines.pop() || '';
143
+ for (const line of lines) {
144
+ const trimmed = line.trim();
145
+ if (!trimmed || !trimmed.startsWith('data: '))
146
+ continue;
147
+ const dataStr = trimmed.slice(6);
148
+ if (dataStr === '[DONE]') {
149
+ yield { type: 'done' };
150
+ return;
151
+ }
152
+ try {
153
+ const data = JSON.parse(dataStr);
154
+ const eventType = data.type;
155
+ if (eventType === 'content_block_delta') {
156
+ const delta = data.delta || {};
157
+ if (delta.type === 'text_delta' && delta.text) {
158
+ yield { type: 'text', content: delta.text };
159
+ }
160
+ }
161
+ else if (eventType === 'content_block_start') {
162
+ const block = data.content_block || {};
163
+ if (block.type === 'tool_use') {
164
+ yield {
165
+ type: 'tool_call',
166
+ toolCall: {
167
+ id: block.id,
168
+ name: block.name,
169
+ arguments: block.input || {},
170
+ timestamp: Date.now(),
171
+ },
172
+ };
173
+ }
174
+ }
175
+ else if (eventType === 'message_done') {
176
+ const usage = data.usage;
177
+ if (usage) {
178
+ yield {
179
+ type: 'done',
180
+ usage: {
181
+ promptTokens: usage.input_tokens || 0,
182
+ completionTokens: usage.output_tokens || 0,
183
+ totalTokens: (usage.input_tokens || 0) + (usage.output_tokens || 0),
184
+ },
185
+ };
186
+ }
187
+ else {
188
+ yield { type: 'done' };
189
+ }
190
+ }
191
+ }
192
+ catch {
193
+ }
194
+ }
195
+ }
196
+ }
197
+ finally {
198
+ reader.releaseLock();
199
+ }
200
+ }
201
+ }
202
+ //# sourceMappingURL=anthropic.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"anthropic.js","sourceRoot":"","sources":["../../../src/src/providers/anthropic.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,29 @@
1
+ import { ProviderConfig, ModelConfig, ProviderResponse, ProviderStreamChunk, ToolCall } from '../types.js';
2
+ export declare abstract class BaseProvider {
3
+ protected config: ProviderConfig;
4
+ protected modelConfig: ModelConfig;
5
+ constructor(config: ProviderConfig, modelConfig: ModelConfig);
6
+ abstract getName(): string;
7
+ abstract getType(): string;
8
+ abstract generate(messages: Array<{
9
+ role: string;
10
+ content: string;
11
+ }>, tools?: unknown[]): Promise<ProviderResponse>;
12
+ abstract generateStream(messages: Array<{
13
+ role: string;
14
+ content: string;
15
+ }>, tools?: unknown[]): AsyncGenerator<ProviderStreamChunk>;
16
+ protected getApiKey(): string;
17
+ protected buildHeaders(): Record<string, string>;
18
+ protected buildRequestBody(messages: Array<{
19
+ role: string;
20
+ content: string;
21
+ }>, tools?: unknown[]): Record<string, unknown>;
22
+ protected buildStreamBody(messages: Array<{
23
+ role: string;
24
+ content: string;
25
+ }>, tools?: unknown[]): Record<string, unknown>;
26
+ protected fetchWithRetry(url: string, options: RequestInit, retries?: number): Promise<Response>;
27
+ protected parseToolCalls(data: Record<string, unknown>): ToolCall[];
28
+ }
29
+ //# sourceMappingURL=base.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"base.d.ts","sourceRoot":"","sources":["../../../src/src/providers/base.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,WAAW,EAAE,gBAAgB,EAAE,mBAAmB,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;AAE3G,8BAAsB,YAAY;IAChC,SAAS,CAAC,MAAM,EAAE,cAAc,CAAC;IACjC,SAAS,CAAC,WAAW,EAAE,WAAW,CAAC;gBAEvB,MAAM,EAAE,cAAc,EAAE,WAAW,EAAE,WAAW;IAK5D,QAAQ,CAAC,OAAO,IAAI,MAAM;IAC1B,QAAQ,CAAC,OAAO,IAAI,MAAM;IAC1B,QAAQ,CAAC,QAAQ,CAAC,QAAQ,EAAE,KAAK,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,MAAM,CAAA;KAAE,CAAC,EAAE,KAAK,CAAC,EAAE,OAAO,EAAE,GAAG,OAAO,CAAC,gBAAgB,CAAC;IACnH,QAAQ,CAAC,cAAc,CACrB,QAAQ,EAAE,KAAK,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,MAAM,CAAA;KAAE,CAAC,EAClD,KAAK,CAAC,EAAE,OAAO,EAAE,GAChB,cAAc,CAAC,mBAAmB,CAAC;IAEtC,SAAS,CAAC,SAAS,IAAI,MAAM;IAI7B,SAAS,CAAC,YAAY,IAAI,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC;IAOhD,SAAS,CAAC,gBAAgB,CAAC,QAAQ,EAAE,KAAK,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,MAAM,CAAA;KAAE,CAAC,EAAE,KAAK,CAAC,EAAE,OAAO,EAAE,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC;IA2B1H,SAAS,CAAC,eAAe,CAAC,QAAQ,EAAE,KAAK,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,MAAM,CAAA;KAAE,CAAC,EAAE,KAAK,CAAC,EAAE,OAAO,EAAE,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC;cAMzG,cAAc,CAAC,GAAG,EAAE,MAAM,EAAE,OAAO,EAAE,WAAW,EAAE,OAAO,SAAyB,GAAG,OAAO,CAAC,QAAQ,CAAC;IAoDtH,SAAS,CAAC,cAAc,CAAC,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,QAAQ,EAAE;CA0BpE"}
@@ -0,0 +1,112 @@
1
+ export class BaseProvider {
2
+ config;
3
+ modelConfig;
4
+ constructor(config, modelConfig) {
5
+ this.config = config;
6
+ this.modelConfig = modelConfig;
7
+ }
8
+ getApiKey() {
9
+ return this.config.apiKey || process.env[`${this.config.type.toUpperCase()}_API_KEY`] || '';
10
+ }
11
+ buildHeaders() {
12
+ return {
13
+ 'Content-Type': 'application/json',
14
+ 'Authorization': `Bearer ${this.getApiKey()}`,
15
+ };
16
+ }
17
+ buildRequestBody(messages, tools) {
18
+ const body = {
19
+ model: this.modelConfig.model,
20
+ messages: messages.map((m) => ({
21
+ role: m.role,
22
+ content: m.content,
23
+ })),
24
+ temperature: this.modelConfig.temperature,
25
+ max_tokens: this.modelConfig.maxTokens,
26
+ top_p: this.modelConfig.topP,
27
+ frequency_penalty: this.modelConfig.frequencyPenalty,
28
+ presence_penalty: this.modelConfig.presencePenalty,
29
+ stream: false,
30
+ };
31
+ if (this.modelConfig.stop && this.modelConfig.stop.length > 0) {
32
+ body.stop = this.modelConfig.stop;
33
+ }
34
+ if (tools && tools.length > 0) {
35
+ body.tools = tools;
36
+ body.tool_choice = 'auto';
37
+ }
38
+ return body;
39
+ }
40
+ buildStreamBody(messages, tools) {
41
+ const body = this.buildRequestBody(messages, tools);
42
+ body.stream = true;
43
+ return body;
44
+ }
45
+ async fetchWithRetry(url, options, retries = this.config.maxRetries) {
46
+ let lastError = null;
47
+ for (let attempt = 0; attempt <= retries; attempt++) {
48
+ try {
49
+ const controller = new AbortController();
50
+ const timeoutId = setTimeout(() => controller.abort(), this.config.timeout);
51
+ const response = await fetch(url, {
52
+ ...options,
53
+ signal: controller.signal,
54
+ });
55
+ clearTimeout(timeoutId);
56
+ if (response.status === 429) {
57
+ const retryAfter = parseInt(response.headers.get('retry-after') || '5', 10);
58
+ await new Promise((resolve) => setTimeout(resolve, retryAfter * 1000));
59
+ continue;
60
+ }
61
+ if (response.status === 401) {
62
+ throw new Error('Authentication failed. Please check your API key.');
63
+ }
64
+ if (response.status === 403) {
65
+ throw new Error('Access forbidden. Your API key may not have access to this model.');
66
+ }
67
+ if (!response.ok) {
68
+ const errorText = await response.text();
69
+ throw new Error(`HTTP ${response.status}: ${errorText}`);
70
+ }
71
+ return response;
72
+ }
73
+ catch (error) {
74
+ lastError = error instanceof Error ? error : new Error(String(error));
75
+ if (error instanceof Error && error.name === 'AbortError') {
76
+ throw new Error('Request timed out');
77
+ }
78
+ if (attempt < retries) {
79
+ const delay = Math.min(1000 * Math.pow(2, attempt), 10000);
80
+ await new Promise((resolve) => setTimeout(resolve, delay));
81
+ }
82
+ }
83
+ }
84
+ throw lastError || new Error('Request failed after all retries');
85
+ }
86
+ parseToolCalls(data) {
87
+ const toolCalls = [];
88
+ const choices = data.choices;
89
+ if (!choices || choices.length === 0)
90
+ return toolCalls;
91
+ const message = choices[0].message;
92
+ if (!message)
93
+ return toolCalls;
94
+ const calls = message.tool_calls;
95
+ if (!calls)
96
+ return toolCalls;
97
+ for (const call of calls) {
98
+ try {
99
+ toolCalls.push({
100
+ id: call.id,
101
+ name: call.function ? call.function.name : '',
102
+ arguments: call.function ? JSON.parse(call.function.arguments) : {},
103
+ timestamp: Date.now(),
104
+ });
105
+ }
106
+ catch {
107
+ }
108
+ }
109
+ return toolCalls;
110
+ }
111
+ }
112
+ //# sourceMappingURL=base.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"base.js","sourceRoot":"","sources":["../../../src/src/providers/base.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,8 @@
1
+ import { OpenAIProvider } from './openai.js';
2
+ import { ProviderConfig, ModelConfig } from '../types.js';
3
+ export declare class CustomProvider extends OpenAIProvider {
4
+ constructor(config: ProviderConfig, modelConfig: ModelConfig);
5
+ getName(): string;
6
+ getType(): string;
7
+ }
8
+ //# sourceMappingURL=custom.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"custom.d.ts","sourceRoot":"","sources":["../../../src/src/providers/custom.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAC7C,OAAO,EAAE,cAAc,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAE1D,qBAAa,cAAe,SAAQ,cAAc;gBACpC,MAAM,EAAE,cAAc,EAAE,WAAW,EAAE,WAAW;IAI5D,OAAO,IAAI,MAAM;IAIjB,OAAO,IAAI,MAAM;CAGlB"}
@@ -0,0 +1,13 @@
1
+ import { OpenAIProvider } from './openai.js';
2
+ export class CustomProvider extends OpenAIProvider {
3
+ constructor(config, modelConfig) {
4
+ super(config, modelConfig);
5
+ }
6
+ getName() {
7
+ return this.config.name || 'Custom';
8
+ }
9
+ getType() {
10
+ return 'custom';
11
+ }
12
+ }
13
+ //# sourceMappingURL=custom.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"custom.js","sourceRoot":"","sources":["../../../src/src/providers/custom.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAG7C,MAAM,OAAO,cAAe,SAAQ,cAAc;IAChD,YAAY,MAAsB,EAAE,WAAwB;QAC1D,KAAK,CAAC,MAAM,EAAE,WAAW,CAAC,CAAC;IAC7B,CAAC;IAED,OAAO;QACL,OAAO,IAAI,CAAC,MAAM,CAAC,IAAI,IAAI,QAAQ,CAAC;IACtC,CAAC;IAED,OAAO;QACL,OAAO,QAAQ,CAAC;IAClB,CAAC;CACF"}
@@ -0,0 +1,8 @@
1
+ import { OpenAIProvider } from './openai.js';
2
+ import { ProviderConfig, ModelConfig } from '../types.js';
3
+ export declare class DeepSeekProvider extends OpenAIProvider {
4
+ constructor(config: ProviderConfig, modelConfig: ModelConfig);
5
+ getName(): string;
6
+ getType(): string;
7
+ }
8
+ //# sourceMappingURL=deepseek.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"deepseek.d.ts","sourceRoot":"","sources":["../../../src/src/providers/deepseek.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAC7C,OAAO,EAAE,cAAc,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAE1D,qBAAa,gBAAiB,SAAQ,cAAc;gBACtC,MAAM,EAAE,cAAc,EAAE,WAAW,EAAE,WAAW;IAI5D,OAAO,IAAI,MAAM;IAIjB,OAAO,IAAI,MAAM;CAGlB"}
@@ -0,0 +1,13 @@
1
+ import { OpenAIProvider } from './openai.js';
2
+ export class DeepSeekProvider extends OpenAIProvider {
3
+ constructor(config, modelConfig) {
4
+ super(config, modelConfig);
5
+ }
6
+ getName() {
7
+ return 'DeepSeek';
8
+ }
9
+ getType() {
10
+ return 'deepseek';
11
+ }
12
+ }
13
+ //# sourceMappingURL=deepseek.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"deepseek.js","sourceRoot":"","sources":["../../../src/src/providers/deepseek.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAG7C,MAAM,OAAO,gBAAiB,SAAQ,cAAc;IAClD,YAAY,MAAsB,EAAE,WAAwB;QAC1D,KAAK,CAAC,MAAM,EAAE,WAAW,CAAC,CAAC;IAC7B,CAAC;IAED,OAAO;QACL,OAAO,UAAU,CAAC;IACpB,CAAC;IAED,OAAO;QACL,OAAO,UAAU,CAAC;IACpB,CAAC;CACF"}
@@ -0,0 +1,18 @@
1
+ import { BaseProvider } from './base.js';
2
+ import { ProviderConfig, ModelConfig, ProviderResponse, ProviderStreamChunk } from '../types.js';
3
+ export declare class GeminiProvider extends BaseProvider {
4
+ constructor(config: ProviderConfig, modelConfig: ModelConfig);
5
+ getName(): string;
6
+ getType(): string;
7
+ protected buildHeaders(): Record<string, string>;
8
+ private convertMessages;
9
+ generate(messages: Array<{
10
+ role: string;
11
+ content: string;
12
+ }>, tools?: unknown[]): Promise<ProviderResponse>;
13
+ generateStream(messages: Array<{
14
+ role: string;
15
+ content: string;
16
+ }>, tools?: unknown[]): AsyncGenerator<ProviderStreamChunk>;
17
+ }
18
+ //# sourceMappingURL=gemini.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"gemini.d.ts","sourceRoot":"","sources":["../../../src/src/providers/gemini.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,WAAW,CAAC;AACzC,OAAO,EAAE,cAAc,EAAE,WAAW,EAAE,gBAAgB,EAAE,mBAAmB,EAAY,MAAM,aAAa,CAAC;AAE3G,qBAAa,cAAe,SAAQ,YAAY;gBAClC,MAAM,EAAE,cAAc,EAAE,WAAW,EAAE,WAAW;IAI5D,OAAO,IAAI,MAAM;IAIjB,OAAO,IAAI,MAAM;IAIjB,SAAS,CAAC,YAAY,IAAI,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC;IAMhD,OAAO,CAAC,eAAe;IAsBjB,QAAQ,CACZ,QAAQ,EAAE,KAAK,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,MAAM,CAAA;KAAE,CAAC,EAClD,KAAK,CAAC,EAAE,OAAO,EAAE,GAChB,OAAO,CAAC,gBAAgB,CAAC;IAsErB,cAAc,CACnB,QAAQ,EAAE,KAAK,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,MAAM,CAAA;KAAE,CAAC,EAClD,KAAK,CAAC,EAAE,OAAO,EAAE,GAChB,cAAc,CAAC,mBAAmB,CAAC;CA+FvC"}
@@ -0,0 +1,183 @@
1
+ import { BaseProvider } from './base.js';
2
+ export class GeminiProvider extends BaseProvider {
3
+ constructor(config, modelConfig) {
4
+ super(config, modelConfig);
5
+ }
6
+ getName() {
7
+ return 'Gemini';
8
+ }
9
+ getType() {
10
+ return 'gemini';
11
+ }
12
+ buildHeaders() {
13
+ return {
14
+ 'Content-Type': 'application/json',
15
+ };
16
+ }
17
+ convertMessages(messages) {
18
+ const contents = [];
19
+ let systemInstruction;
20
+ for (const msg of messages) {
21
+ if (msg.role === 'system') {
22
+ systemInstruction = msg.content;
23
+ }
24
+ else {
25
+ const role = msg.role === 'assistant' ? 'model' : 'user';
26
+ contents.push({
27
+ role,
28
+ parts: [{ text: msg.content }],
29
+ });
30
+ }
31
+ }
32
+ return { systemInstruction, contents };
33
+ }
34
+ async generate(messages, tools) {
35
+ const apiKey = this.getApiKey();
36
+ const url = `${this.config.baseUrl}/models/${this.modelConfig.model}:generateContent?key=${apiKey}`;
37
+ const { systemInstruction, contents } = this.convertMessages(messages);
38
+ const body = {
39
+ contents,
40
+ generationConfig: {
41
+ temperature: this.modelConfig.temperature,
42
+ maxOutputTokens: this.modelConfig.maxTokens,
43
+ topP: this.modelConfig.topP,
44
+ stopSequences: this.modelConfig.stop,
45
+ },
46
+ };
47
+ if (systemInstruction) {
48
+ body.systemInstruction = { parts: [{ text: systemInstruction }] };
49
+ }
50
+ const response = await this.fetchWithRetry(url, {
51
+ method: 'POST',
52
+ headers: this.buildHeaders(),
53
+ body: JSON.stringify(body),
54
+ });
55
+ const data = await response.json();
56
+ if (data.error) {
57
+ const err = data.error;
58
+ throw new Error(`Gemini API error: ${err.message || JSON.stringify(err)}`);
59
+ }
60
+ const candidates = data.candidates || [];
61
+ const candidate = candidates[0] || {};
62
+ const content = candidate.content || {};
63
+ const parts = content.parts || [];
64
+ let textContent = '';
65
+ const toolCalls = [];
66
+ for (const part of parts) {
67
+ if (part.text) {
68
+ textContent += part.text;
69
+ }
70
+ else if (part.functionCall) {
71
+ const fc = part.functionCall;
72
+ const args = fc.args ? (typeof fc.args === 'string' ? JSON.parse(fc.args) : fc.args) : {};
73
+ toolCalls.push({
74
+ id: `call_${Date.now()}`,
75
+ name: fc.name,
76
+ arguments: args,
77
+ timestamp: Date.now(),
78
+ });
79
+ }
80
+ }
81
+ const usageMetadata = data.usageMetadata || {};
82
+ return {
83
+ content: textContent,
84
+ toolCalls,
85
+ usage: {
86
+ promptTokens: usageMetadata.promptTokenCount || 0,
87
+ completionTokens: usageMetadata.candidatesTokenCount || 0,
88
+ totalTokens: usageMetadata.totalTokenCount || 0,
89
+ },
90
+ finishReason: candidate.finishReason || 'STOP',
91
+ };
92
+ }
93
+ async *generateStream(messages, tools) {
94
+ const apiKey = this.getApiKey();
95
+ const url = `${this.config.baseUrl}/models/${this.modelConfig.model}:streamGenerateContent?key=${apiKey}&alt=sse`;
96
+ const { systemInstruction, contents } = this.convertMessages(messages);
97
+ const body = {
98
+ contents,
99
+ generationConfig: {
100
+ temperature: this.modelConfig.temperature,
101
+ maxOutputTokens: this.modelConfig.maxTokens,
102
+ topP: this.modelConfig.topP,
103
+ stopSequences: this.modelConfig.stop,
104
+ },
105
+ };
106
+ if (systemInstruction) {
107
+ body.systemInstruction = { parts: [{ text: systemInstruction }] };
108
+ }
109
+ const response = await this.fetchWithRetry(url, {
110
+ method: 'POST',
111
+ headers: this.buildHeaders(),
112
+ body: JSON.stringify(body),
113
+ });
114
+ const reader = response.body?.getReader();
115
+ if (!reader)
116
+ throw new Error('No response body stream available');
117
+ const decoder = new TextDecoder();
118
+ let buffer = '';
119
+ try {
120
+ while (true) {
121
+ const { done, value } = await reader.read();
122
+ if (done)
123
+ break;
124
+ buffer += decoder.decode(value, { stream: true });
125
+ const lines = buffer.split('\n');
126
+ buffer = lines.pop() || '';
127
+ for (const line of lines) {
128
+ const trimmed = line.trim();
129
+ if (!trimmed || !trimmed.startsWith('data: '))
130
+ continue;
131
+ const dataStr = trimmed.slice(6);
132
+ try {
133
+ const data = JSON.parse(dataStr);
134
+ const candidates = data.candidates || [];
135
+ const candidate = candidates[0] || {};
136
+ const content = candidate.content || {};
137
+ const parts = content.parts || [];
138
+ for (const part of parts) {
139
+ if (part.text) {
140
+ yield { type: 'text', content: part.text };
141
+ }
142
+ else if (part.functionCall) {
143
+ const fc = part.functionCall;
144
+ const args = fc.args ? (typeof fc.args === 'string' ? JSON.parse(fc.args) : fc.args) : {};
145
+ yield {
146
+ type: 'tool_call',
147
+ toolCall: {
148
+ id: `call_${Date.now()}`,
149
+ name: fc.name,
150
+ arguments: args,
151
+ timestamp: Date.now(),
152
+ },
153
+ };
154
+ }
155
+ }
156
+ if (candidate.finishReason) {
157
+ const usageMetadata = data.usageMetadata;
158
+ if (usageMetadata) {
159
+ yield {
160
+ type: 'done',
161
+ usage: {
162
+ promptTokens: usageMetadata.promptTokenCount || 0,
163
+ completionTokens: usageMetadata.candidatesTokenCount || 0,
164
+ totalTokens: usageMetadata.totalTokenCount || 0,
165
+ },
166
+ };
167
+ }
168
+ else {
169
+ yield { type: 'done' };
170
+ }
171
+ }
172
+ }
173
+ catch {
174
+ }
175
+ }
176
+ }
177
+ }
178
+ finally {
179
+ reader.releaseLock();
180
+ }
181
+ }
182
+ }
183
+ //# sourceMappingURL=gemini.js.map