osagent-core 0.1.12

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 (1106) hide show
  1. package/dist/.last_build +0 -0
  2. package/dist/index.d.ts +19 -0
  3. package/dist/index.js +20 -0
  4. package/dist/index.js.map +1 -0
  5. package/dist/src/__mocks__/fs/promises.d.ts +11 -0
  6. package/dist/src/__mocks__/fs/promises.js +17 -0
  7. package/dist/src/__mocks__/fs/promises.js.map +1 -0
  8. package/dist/src/code_assist/codeAssist.d.ts +12 -0
  9. package/dist/src/code_assist/codeAssist.js +31 -0
  10. package/dist/src/code_assist/codeAssist.js.map +1 -0
  11. package/dist/src/code_assist/converter.d.ts +74 -0
  12. package/dist/src/code_assist/converter.js +160 -0
  13. package/dist/src/code_assist/converter.js.map +1 -0
  14. package/dist/src/code_assist/converter.test.d.ts +6 -0
  15. package/dist/src/code_assist/converter.test.js +372 -0
  16. package/dist/src/code_assist/converter.test.js.map +1 -0
  17. package/dist/src/code_assist/oauth-credential-storage.d.ts +25 -0
  18. package/dist/src/code_assist/oauth-credential-storage.js +109 -0
  19. package/dist/src/code_assist/oauth-credential-storage.js.map +1 -0
  20. package/dist/src/code_assist/oauth-credential-storage.test.d.ts +6 -0
  21. package/dist/src/code_assist/oauth-credential-storage.test.js +136 -0
  22. package/dist/src/code_assist/oauth-credential-storage.test.js.map +1 -0
  23. package/dist/src/code_assist/oauth2.d.ts +22 -0
  24. package/dist/src/code_assist/oauth2.js +431 -0
  25. package/dist/src/code_assist/oauth2.js.map +1 -0
  26. package/dist/src/code_assist/oauth2.test.d.ts +6 -0
  27. package/dist/src/code_assist/oauth2.test.js +818 -0
  28. package/dist/src/code_assist/oauth2.test.js.map +1 -0
  29. package/dist/src/code_assist/server.d.ts +37 -0
  30. package/dist/src/code_assist/server.js +148 -0
  31. package/dist/src/code_assist/server.js.map +1 -0
  32. package/dist/src/code_assist/server.test.d.ts +6 -0
  33. package/dist/src/code_assist/server.test.js +159 -0
  34. package/dist/src/code_assist/server.test.js.map +1 -0
  35. package/dist/src/code_assist/setup.d.ts +20 -0
  36. package/dist/src/code_assist/setup.js +101 -0
  37. package/dist/src/code_assist/setup.js.map +1 -0
  38. package/dist/src/code_assist/setup.test.d.ts +6 -0
  39. package/dist/src/code_assist/setup.test.js +171 -0
  40. package/dist/src/code_assist/setup.test.js.map +1 -0
  41. package/dist/src/code_assist/types.d.ts +163 -0
  42. package/dist/src/code_assist/types.js +46 -0
  43. package/dist/src/code_assist/types.js.map +1 -0
  44. package/dist/src/config/config.d.ts +429 -0
  45. package/dist/src/config/config.js +863 -0
  46. package/dist/src/config/config.js.map +1 -0
  47. package/dist/src/config/config.test.d.ts +6 -0
  48. package/dist/src/config/config.test.js +896 -0
  49. package/dist/src/config/config.test.js.map +1 -0
  50. package/dist/src/config/constants.d.ts +11 -0
  51. package/dist/src/config/constants.js +16 -0
  52. package/dist/src/config/constants.js.map +1 -0
  53. package/dist/src/config/flashFallback.test.d.ts +6 -0
  54. package/dist/src/config/flashFallback.test.js +87 -0
  55. package/dist/src/config/flashFallback.test.js.map +1 -0
  56. package/dist/src/config/models.d.ts +28 -0
  57. package/dist/src/config/models.js +44 -0
  58. package/dist/src/config/models.js.map +1 -0
  59. package/dist/src/config/models.test.d.ts +6 -0
  60. package/dist/src/config/models.test.js +55 -0
  61. package/dist/src/config/models.test.js.map +1 -0
  62. package/dist/src/config/storage.d.ts +36 -0
  63. package/dist/src/config/storage.js +103 -0
  64. package/dist/src/config/storage.js.map +1 -0
  65. package/dist/src/config/storage.test.d.ts +6 -0
  66. package/dist/src/config/storage.test.js +43 -0
  67. package/dist/src/config/storage.test.js.map +1 -0
  68. package/dist/src/core/__tests__/openaiTimeoutHandling.test.d.ts +6 -0
  69. package/dist/src/core/__tests__/openaiTimeoutHandling.test.js +295 -0
  70. package/dist/src/core/__tests__/openaiTimeoutHandling.test.js.map +1 -0
  71. package/dist/src/core/__tests__/orphanedToolCallsTest.d.ts +64 -0
  72. package/dist/src/core/__tests__/orphanedToolCallsTest.js +122 -0
  73. package/dist/src/core/__tests__/orphanedToolCallsTest.js.map +1 -0
  74. package/dist/src/core/baseLlmClient.d.ts +49 -0
  75. package/dist/src/core/baseLlmClient.js +104 -0
  76. package/dist/src/core/baseLlmClient.js.map +1 -0
  77. package/dist/src/core/baseLlmClient.test.d.ts +6 -0
  78. package/dist/src/core/baseLlmClient.test.js +323 -0
  79. package/dist/src/core/baseLlmClient.test.js.map +1 -0
  80. package/dist/src/core/client.d.ts +56 -0
  81. package/dist/src/core/client.js +522 -0
  82. package/dist/src/core/client.js.map +1 -0
  83. package/dist/src/core/client.test.d.ts +6 -0
  84. package/dist/src/core/client.test.js +1829 -0
  85. package/dist/src/core/client.test.js.map +1 -0
  86. package/dist/src/core/contentGenerator.d.ts +54 -0
  87. package/dist/src/core/contentGenerator.js +170 -0
  88. package/dist/src/core/contentGenerator.js.map +1 -0
  89. package/dist/src/core/contentGenerator.test.d.ts +6 -0
  90. package/dist/src/core/contentGenerator.test.js +77 -0
  91. package/dist/src/core/contentGenerator.test.js.map +1 -0
  92. package/dist/src/core/coreToolScheduler.d.ts +134 -0
  93. package/dist/src/core/coreToolScheduler.js +774 -0
  94. package/dist/src/core/coreToolScheduler.js.map +1 -0
  95. package/dist/src/core/coreToolScheduler.test.d.ts +6 -0
  96. package/dist/src/core/coreToolScheduler.test.js +1802 -0
  97. package/dist/src/core/coreToolScheduler.test.js.map +1 -0
  98. package/dist/src/core/geminiChat.d.ts +124 -0
  99. package/dist/src/core/geminiChat.js +518 -0
  100. package/dist/src/core/geminiChat.js.map +1 -0
  101. package/dist/src/core/geminiChat.test.d.ts +6 -0
  102. package/dist/src/core/geminiChat.test.js +1149 -0
  103. package/dist/src/core/geminiChat.test.js.map +1 -0
  104. package/dist/src/core/geminiRequest.d.ts +13 -0
  105. package/dist/src/core/geminiRequest.js +11 -0
  106. package/dist/src/core/geminiRequest.js.map +1 -0
  107. package/dist/src/core/geminiRequest.test.d.ts +6 -0
  108. package/dist/src/core/geminiRequest.test.js +73 -0
  109. package/dist/src/core/geminiRequest.test.js.map +1 -0
  110. package/dist/src/core/logger.d.ts +67 -0
  111. package/dist/src/core/logger.js +361 -0
  112. package/dist/src/core/logger.js.map +1 -0
  113. package/dist/src/core/logger.test.d.ts +6 -0
  114. package/dist/src/core/logger.test.js +534 -0
  115. package/dist/src/core/logger.test.js.map +1 -0
  116. package/dist/src/core/loggingContentGenerator.d.ts +25 -0
  117. package/dist/src/core/loggingContentGenerator.js +94 -0
  118. package/dist/src/core/loggingContentGenerator.js.map +1 -0
  119. package/dist/src/core/nonInteractiveToolExecutor.d.ts +16 -0
  120. package/dist/src/core/nonInteractiveToolExecutor.js +29 -0
  121. package/dist/src/core/nonInteractiveToolExecutor.js.map +1 -0
  122. package/dist/src/core/nonInteractiveToolExecutor.test.d.ts +6 -0
  123. package/dist/src/core/nonInteractiveToolExecutor.test.js +294 -0
  124. package/dist/src/core/nonInteractiveToolExecutor.test.js.map +1 -0
  125. package/dist/src/core/ollamaContentGenerator/index.d.ts +70 -0
  126. package/dist/src/core/ollamaContentGenerator/index.js +450 -0
  127. package/dist/src/core/ollamaContentGenerator/index.js.map +1 -0
  128. package/dist/src/core/openaiContentGenerator/constants.d.ts +7 -0
  129. package/dist/src/core/openaiContentGenerator/constants.js +8 -0
  130. package/dist/src/core/openaiContentGenerator/constants.js.map +1 -0
  131. package/dist/src/core/openaiContentGenerator/converter.d.ts +108 -0
  132. package/dist/src/core/openaiContentGenerator/converter.js +851 -0
  133. package/dist/src/core/openaiContentGenerator/converter.js.map +1 -0
  134. package/dist/src/core/openaiContentGenerator/converter.test.d.ts +6 -0
  135. package/dist/src/core/openaiContentGenerator/converter.test.js +108 -0
  136. package/dist/src/core/openaiContentGenerator/converter.test.js.map +1 -0
  137. package/dist/src/core/openaiContentGenerator/errorHandler.d.ts +20 -0
  138. package/dist/src/core/openaiContentGenerator/errorHandler.js +82 -0
  139. package/dist/src/core/openaiContentGenerator/errorHandler.js.map +1 -0
  140. package/dist/src/core/openaiContentGenerator/errorHandler.test.d.ts +6 -0
  141. package/dist/src/core/openaiContentGenerator/errorHandler.test.js +287 -0
  142. package/dist/src/core/openaiContentGenerator/errorHandler.test.js.map +1 -0
  143. package/dist/src/core/openaiContentGenerator/index.d.ts +22 -0
  144. package/dist/src/core/openaiContentGenerator/index.js +57 -0
  145. package/dist/src/core/openaiContentGenerator/index.js.map +1 -0
  146. package/dist/src/core/openaiContentGenerator/openaiContentGenerator.d.ts +21 -0
  147. package/dist/src/core/openaiContentGenerator/openaiContentGenerator.js +105 -0
  148. package/dist/src/core/openaiContentGenerator/openaiContentGenerator.js.map +1 -0
  149. package/dist/src/core/openaiContentGenerator/openaiContentGenerator.test.d.ts +6 -0
  150. package/dist/src/core/openaiContentGenerator/openaiContentGenerator.test.js +230 -0
  151. package/dist/src/core/openaiContentGenerator/openaiContentGenerator.test.js.map +1 -0
  152. package/dist/src/core/openaiContentGenerator/pipeline.d.ts +66 -0
  153. package/dist/src/core/openaiContentGenerator/pipeline.js +265 -0
  154. package/dist/src/core/openaiContentGenerator/pipeline.js.map +1 -0
  155. package/dist/src/core/openaiContentGenerator/pipeline.test.d.ts +6 -0
  156. package/dist/src/core/openaiContentGenerator/pipeline.test.js +1028 -0
  157. package/dist/src/core/openaiContentGenerator/pipeline.test.js.map +1 -0
  158. package/dist/src/core/openaiContentGenerator/provider/README.md +61 -0
  159. package/dist/src/core/openaiContentGenerator/provider/anthropic.d.ts +14 -0
  160. package/dist/src/core/openaiContentGenerator/provider/anthropic.js +28 -0
  161. package/dist/src/core/openaiContentGenerator/provider/anthropic.js.map +1 -0
  162. package/dist/src/core/openaiContentGenerator/provider/anthropic.test.d.ts +1 -0
  163. package/dist/src/core/openaiContentGenerator/provider/anthropic.test.js +138 -0
  164. package/dist/src/core/openaiContentGenerator/provider/anthropic.test.js.map +1 -0
  165. package/dist/src/core/openaiContentGenerator/provider/dashscope.d.ts +63 -0
  166. package/dist/src/core/openaiContentGenerator/provider/dashscope.js +241 -0
  167. package/dist/src/core/openaiContentGenerator/provider/dashscope.js.map +1 -0
  168. package/dist/src/core/openaiContentGenerator/provider/dashscope.test.d.ts +6 -0
  169. package/dist/src/core/openaiContentGenerator/provider/dashscope.test.js +707 -0
  170. package/dist/src/core/openaiContentGenerator/provider/dashscope.test.js.map +1 -0
  171. package/dist/src/core/openaiContentGenerator/provider/deepseek.d.ts +14 -0
  172. package/dist/src/core/openaiContentGenerator/provider/deepseek.js +70 -0
  173. package/dist/src/core/openaiContentGenerator/provider/deepseek.js.map +1 -0
  174. package/dist/src/core/openaiContentGenerator/provider/deepseek.test.d.ts +6 -0
  175. package/dist/src/core/openaiContentGenerator/provider/deepseek.test.js +151 -0
  176. package/dist/src/core/openaiContentGenerator/provider/deepseek.test.js.map +1 -0
  177. package/dist/src/core/openaiContentGenerator/provider/default.d.ts +15 -0
  178. package/dist/src/core/openaiContentGenerator/provider/default.js +38 -0
  179. package/dist/src/core/openaiContentGenerator/provider/default.js.map +1 -0
  180. package/dist/src/core/openaiContentGenerator/provider/default.test.d.ts +6 -0
  181. package/dist/src/core/openaiContentGenerator/provider/default.test.js +176 -0
  182. package/dist/src/core/openaiContentGenerator/provider/default.test.js.map +1 -0
  183. package/dist/src/core/openaiContentGenerator/provider/groq.d.ts +30 -0
  184. package/dist/src/core/openaiContentGenerator/provider/groq.js +60 -0
  185. package/dist/src/core/openaiContentGenerator/provider/groq.js.map +1 -0
  186. package/dist/src/core/openaiContentGenerator/provider/index.d.ts +9 -0
  187. package/dist/src/core/openaiContentGenerator/provider/index.js +9 -0
  188. package/dist/src/core/openaiContentGenerator/provider/index.js.map +1 -0
  189. package/dist/src/core/openaiContentGenerator/provider/modelscope.d.ts +17 -0
  190. package/dist/src/core/openaiContentGenerator/provider/modelscope.js +25 -0
  191. package/dist/src/core/openaiContentGenerator/provider/modelscope.js.map +1 -0
  192. package/dist/src/core/openaiContentGenerator/provider/modelscope.test.d.ts +6 -0
  193. package/dist/src/core/openaiContentGenerator/provider/modelscope.test.js +66 -0
  194. package/dist/src/core/openaiContentGenerator/provider/modelscope.test.js.map +1 -0
  195. package/dist/src/core/openaiContentGenerator/provider/ollama.d.ts +31 -0
  196. package/dist/src/core/openaiContentGenerator/provider/ollama.js +70 -0
  197. package/dist/src/core/openaiContentGenerator/provider/ollama.js.map +1 -0
  198. package/dist/src/core/openaiContentGenerator/provider/openrouter.d.ts +10 -0
  199. package/dist/src/core/openaiContentGenerator/provider/openrouter.js +33 -0
  200. package/dist/src/core/openaiContentGenerator/provider/openrouter.js.map +1 -0
  201. package/dist/src/core/openaiContentGenerator/provider/openrouter.test.d.ts +6 -0
  202. package/dist/src/core/openaiContentGenerator/provider/openrouter.test.js +175 -0
  203. package/dist/src/core/openaiContentGenerator/provider/openrouter.test.js.map +1 -0
  204. package/dist/src/core/openaiContentGenerator/provider/types.d.ts +23 -0
  205. package/dist/src/core/openaiContentGenerator/provider/types.js +2 -0
  206. package/dist/src/core/openaiContentGenerator/provider/types.js.map +1 -0
  207. package/dist/src/core/openaiContentGenerator/streamingToolCallParser.d.ts +145 -0
  208. package/dist/src/core/openaiContentGenerator/streamingToolCallParser.js +381 -0
  209. package/dist/src/core/openaiContentGenerator/streamingToolCallParser.js.map +1 -0
  210. package/dist/src/core/openaiContentGenerator/streamingToolCallParser.test.d.ts +6 -0
  211. package/dist/src/core/openaiContentGenerator/streamingToolCallParser.test.js +537 -0
  212. package/dist/src/core/openaiContentGenerator/streamingToolCallParser.test.js.map +1 -0
  213. package/dist/src/core/openaiContentGenerator/telemetryService.d.ts +36 -0
  214. package/dist/src/core/openaiContentGenerator/telemetryService.js +150 -0
  215. package/dist/src/core/openaiContentGenerator/telemetryService.js.map +1 -0
  216. package/dist/src/core/openaiContentGenerator/telemetryService.test.d.ts +6 -0
  217. package/dist/src/core/openaiContentGenerator/telemetryService.test.js +978 -0
  218. package/dist/src/core/openaiContentGenerator/telemetryService.test.js.map +1 -0
  219. package/dist/src/core/prompts.d.ts +73 -0
  220. package/dist/src/core/prompts.js +813 -0
  221. package/dist/src/core/prompts.js.map +1 -0
  222. package/dist/src/core/prompts.test.d.ts +6 -0
  223. package/dist/src/core/prompts.test.js +488 -0
  224. package/dist/src/core/prompts.test.js.map +1 -0
  225. package/dist/src/core/tokenLimits.d.ts +25 -0
  226. package/dist/src/core/tokenLimits.js +200 -0
  227. package/dist/src/core/tokenLimits.js.map +1 -0
  228. package/dist/src/core/tokenLimits.test.d.ts +1 -0
  229. package/dist/src/core/tokenLimits.test.js +304 -0
  230. package/dist/src/core/tokenLimits.test.js.map +1 -0
  231. package/dist/src/core/turn.d.ts +152 -0
  232. package/dist/src/core/turn.js +187 -0
  233. package/dist/src/core/turn.js.map +1 -0
  234. package/dist/src/core/turn.test.d.ts +6 -0
  235. package/dist/src/core/turn.test.js +628 -0
  236. package/dist/src/core/turn.test.js.map +1 -0
  237. package/dist/src/fallback/handler.d.ts +7 -0
  238. package/dist/src/fallback/handler.js +97 -0
  239. package/dist/src/fallback/handler.js.map +1 -0
  240. package/dist/src/fallback/handler.test.d.ts +6 -0
  241. package/dist/src/fallback/handler.test.js +130 -0
  242. package/dist/src/fallback/handler.test.js.map +1 -0
  243. package/dist/src/fallback/types.d.ts +14 -0
  244. package/dist/src/fallback/types.js +7 -0
  245. package/dist/src/fallback/types.js.map +1 -0
  246. package/dist/src/generated/git-commit.d.ts +7 -0
  247. package/dist/src/generated/git-commit.js +10 -0
  248. package/dist/src/generated/git-commit.js.map +1 -0
  249. package/dist/src/ide/constants.d.ts +10 -0
  250. package/dist/src/ide/constants.js +12 -0
  251. package/dist/src/ide/constants.js.map +1 -0
  252. package/dist/src/ide/detect-ide.d.ts +56 -0
  253. package/dist/src/ide/detect-ide.js +68 -0
  254. package/dist/src/ide/detect-ide.js.map +1 -0
  255. package/dist/src/ide/detect-ide.test.d.ts +6 -0
  256. package/dist/src/ide/detect-ide.test.js +113 -0
  257. package/dist/src/ide/detect-ide.test.js.map +1 -0
  258. package/dist/src/ide/ide-client.d.ts +110 -0
  259. package/dist/src/ide/ide-client.js +651 -0
  260. package/dist/src/ide/ide-client.js.map +1 -0
  261. package/dist/src/ide/ide-client.test.d.ts +6 -0
  262. package/dist/src/ide/ide-client.test.js +390 -0
  263. package/dist/src/ide/ide-client.test.js.map +1 -0
  264. package/dist/src/ide/ide-installer.d.ts +14 -0
  265. package/dist/src/ide/ide-installer.js +112 -0
  266. package/dist/src/ide/ide-installer.js.map +1 -0
  267. package/dist/src/ide/ide-installer.test.d.ts +6 -0
  268. package/dist/src/ide/ide-installer.test.js +134 -0
  269. package/dist/src/ide/ide-installer.test.js.map +1 -0
  270. package/dist/src/ide/ideContext.d.ts +44 -0
  271. package/dist/src/ide/ideContext.js +101 -0
  272. package/dist/src/ide/ideContext.js.map +1 -0
  273. package/dist/src/ide/ideContext.test.d.ts +6 -0
  274. package/dist/src/ide/ideContext.test.js +393 -0
  275. package/dist/src/ide/ideContext.test.js.map +1 -0
  276. package/dist/src/ide/process-utils.d.ts +21 -0
  277. package/dist/src/ide/process-utils.js +171 -0
  278. package/dist/src/ide/process-utils.js.map +1 -0
  279. package/dist/src/ide/process-utils.test.d.ts +6 -0
  280. package/dist/src/ide/process-utils.test.js +158 -0
  281. package/dist/src/ide/process-utils.test.js.map +1 -0
  282. package/dist/src/ide/types.d.ts +486 -0
  283. package/dist/src/ide/types.js +138 -0
  284. package/dist/src/ide/types.js.map +1 -0
  285. package/dist/src/index.d.ts +97 -0
  286. package/dist/src/index.js +110 -0
  287. package/dist/src/index.js.map +1 -0
  288. package/dist/src/index.test.d.ts +6 -0
  289. package/dist/src/index.test.js +12 -0
  290. package/dist/src/index.test.js.map +1 -0
  291. package/dist/src/mcp/google-auth-provider.d.ts +23 -0
  292. package/dist/src/mcp/google-auth-provider.js +72 -0
  293. package/dist/src/mcp/google-auth-provider.js.map +1 -0
  294. package/dist/src/mcp/google-auth-provider.test.d.ts +6 -0
  295. package/dist/src/mcp/google-auth-provider.test.js +89 -0
  296. package/dist/src/mcp/google-auth-provider.test.js.map +1 -0
  297. package/dist/src/mcp/oauth-provider.d.ts +150 -0
  298. package/dist/src/mcp/oauth-provider.js +613 -0
  299. package/dist/src/mcp/oauth-provider.js.map +1 -0
  300. package/dist/src/mcp/oauth-provider.test.d.ts +6 -0
  301. package/dist/src/mcp/oauth-provider.test.js +847 -0
  302. package/dist/src/mcp/oauth-provider.test.js.map +1 -0
  303. package/dist/src/mcp/oauth-token-storage.d.ts +65 -0
  304. package/dist/src/mcp/oauth-token-storage.js +180 -0
  305. package/dist/src/mcp/oauth-token-storage.js.map +1 -0
  306. package/dist/src/mcp/oauth-token-storage.test.d.ts +6 -0
  307. package/dist/src/mcp/oauth-token-storage.test.js +299 -0
  308. package/dist/src/mcp/oauth-token-storage.test.js.map +1 -0
  309. package/dist/src/mcp/oauth-utils.d.ts +119 -0
  310. package/dist/src/mcp/oauth-utils.js +236 -0
  311. package/dist/src/mcp/oauth-utils.js.map +1 -0
  312. package/dist/src/mcp/oauth-utils.test.d.ts +6 -0
  313. package/dist/src/mcp/oauth-utils.test.js +199 -0
  314. package/dist/src/mcp/oauth-utils.test.js.map +1 -0
  315. package/dist/src/mcp/sa-impersonation-provider.d.ts +33 -0
  316. package/dist/src/mcp/sa-impersonation-provider.js +130 -0
  317. package/dist/src/mcp/sa-impersonation-provider.js.map +1 -0
  318. package/dist/src/mcp/sa-impersonation-provider.test.d.ts +6 -0
  319. package/dist/src/mcp/sa-impersonation-provider.test.js +117 -0
  320. package/dist/src/mcp/sa-impersonation-provider.test.js.map +1 -0
  321. package/dist/src/mcp/token-storage/base-token-storage.d.ts +19 -0
  322. package/dist/src/mcp/token-storage/base-token-storage.js +36 -0
  323. package/dist/src/mcp/token-storage/base-token-storage.js.map +1 -0
  324. package/dist/src/mcp/token-storage/base-token-storage.test.d.ts +6 -0
  325. package/dist/src/mcp/token-storage/base-token-storage.test.js +160 -0
  326. package/dist/src/mcp/token-storage/base-token-storage.test.js.map +1 -0
  327. package/dist/src/mcp/token-storage/file-token-storage.d.ts +24 -0
  328. package/dist/src/mcp/token-storage/file-token-storage.js +144 -0
  329. package/dist/src/mcp/token-storage/file-token-storage.js.map +1 -0
  330. package/dist/src/mcp/token-storage/file-token-storage.test.d.ts +6 -0
  331. package/dist/src/mcp/token-storage/file-token-storage.test.js +235 -0
  332. package/dist/src/mcp/token-storage/file-token-storage.test.js.map +1 -0
  333. package/dist/src/mcp/token-storage/hybrid-token-storage.d.ts +23 -0
  334. package/dist/src/mcp/token-storage/hybrid-token-storage.js +78 -0
  335. package/dist/src/mcp/token-storage/hybrid-token-storage.js.map +1 -0
  336. package/dist/src/mcp/token-storage/hybrid-token-storage.test.d.ts +6 -0
  337. package/dist/src/mcp/token-storage/hybrid-token-storage.test.js +193 -0
  338. package/dist/src/mcp/token-storage/hybrid-token-storage.test.js.map +1 -0
  339. package/dist/src/mcp/token-storage/index.d.ts +11 -0
  340. package/dist/src/mcp/token-storage/index.js +12 -0
  341. package/dist/src/mcp/token-storage/index.js.map +1 -0
  342. package/dist/src/mcp/token-storage/keychain-token-storage.d.ts +31 -0
  343. package/dist/src/mcp/token-storage/keychain-token-storage.js +190 -0
  344. package/dist/src/mcp/token-storage/keychain-token-storage.js.map +1 -0
  345. package/dist/src/mcp/token-storage/keychain-token-storage.test.d.ts +6 -0
  346. package/dist/src/mcp/token-storage/keychain-token-storage.test.js +254 -0
  347. package/dist/src/mcp/token-storage/keychain-token-storage.test.js.map +1 -0
  348. package/dist/src/mcp/token-storage/types.d.ts +38 -0
  349. package/dist/src/mcp/token-storage/types.js +11 -0
  350. package/dist/src/mcp/token-storage/types.js.map +1 -0
  351. package/dist/src/mocks/msw.d.ts +6 -0
  352. package/dist/src/mocks/msw.js +8 -0
  353. package/dist/src/mocks/msw.js.map +1 -0
  354. package/dist/src/orchestration/agent-registry.d.ts +92 -0
  355. package/dist/src/orchestration/agent-registry.js +248 -0
  356. package/dist/src/orchestration/agent-registry.js.map +1 -0
  357. package/dist/src/orchestration/agents.d.ts +16 -0
  358. package/dist/src/orchestration/agents.js +857 -0
  359. package/dist/src/orchestration/agents.js.map +1 -0
  360. package/dist/src/orchestration/context-manager.d.ts +115 -0
  361. package/dist/src/orchestration/context-manager.js +609 -0
  362. package/dist/src/orchestration/context-manager.js.map +1 -0
  363. package/dist/src/orchestration/dynamic-factory.d.ts +204 -0
  364. package/dist/src/orchestration/dynamic-factory.js +496 -0
  365. package/dist/src/orchestration/dynamic-factory.js.map +1 -0
  366. package/dist/src/orchestration/index.d.ts +17 -0
  367. package/dist/src/orchestration/index.js +41 -0
  368. package/dist/src/orchestration/index.js.map +1 -0
  369. package/dist/src/orchestration/orchestration-queue.d.ts +107 -0
  370. package/dist/src/orchestration/orchestration-queue.js +268 -0
  371. package/dist/src/orchestration/orchestration-queue.js.map +1 -0
  372. package/dist/src/orchestration/orchestrator.d.ts +129 -0
  373. package/dist/src/orchestration/orchestrator.js +436 -0
  374. package/dist/src/orchestration/orchestrator.js.map +1 -0
  375. package/dist/src/orchestration/response-formatter.d.ts +118 -0
  376. package/dist/src/orchestration/response-formatter.js +302 -0
  377. package/dist/src/orchestration/response-formatter.js.map +1 -0
  378. package/dist/src/orchestration/skill-detector.d.ts +35 -0
  379. package/dist/src/orchestration/skill-detector.js +241 -0
  380. package/dist/src/orchestration/skill-detector.js.map +1 -0
  381. package/dist/src/orchestration/skills.d.ts +88 -0
  382. package/dist/src/orchestration/skills.js +987 -0
  383. package/dist/src/orchestration/skills.js.map +1 -0
  384. package/dist/src/orchestration/types.d.ts +371 -0
  385. package/dist/src/orchestration/types.js +7 -0
  386. package/dist/src/orchestration/types.js.map +1 -0
  387. package/dist/src/output/json-formatter.d.ts +11 -0
  388. package/dist/src/output/json-formatter.js +30 -0
  389. package/dist/src/output/json-formatter.js.map +1 -0
  390. package/dist/src/output/json-formatter.test.d.ts +6 -0
  391. package/dist/src/output/json-formatter.test.js +266 -0
  392. package/dist/src/output/json-formatter.test.js.map +1 -0
  393. package/dist/src/output/types.d.ts +25 -0
  394. package/dist/src/output/types.js +17 -0
  395. package/dist/src/output/types.js.map +1 -0
  396. package/dist/src/prompts/mcp-prompts.d.ts +8 -0
  397. package/dist/src/prompts/mcp-prompts.js +13 -0
  398. package/dist/src/prompts/mcp-prompts.js.map +1 -0
  399. package/dist/src/prompts/prompt-registry.d.ts +34 -0
  400. package/dist/src/prompts/prompt-registry.js +63 -0
  401. package/dist/src/prompts/prompt-registry.js.map +1 -0
  402. package/dist/src/qwen/qwenContentGenerator.d.ts +70 -0
  403. package/dist/src/qwen/qwenContentGenerator.js +180 -0
  404. package/dist/src/qwen/qwenContentGenerator.js.map +1 -0
  405. package/dist/src/qwen/qwenContentGenerator.test.d.ts +6 -0
  406. package/dist/src/qwen/qwenContentGenerator.test.js +1178 -0
  407. package/dist/src/qwen/qwenContentGenerator.test.js.map +1 -0
  408. package/dist/src/qwen/qwenOAuth2.d.ts +194 -0
  409. package/dist/src/qwen/qwenOAuth2.js +594 -0
  410. package/dist/src/qwen/qwenOAuth2.js.map +1 -0
  411. package/dist/src/qwen/qwenOAuth2.test.d.ts +6 -0
  412. package/dist/src/qwen/qwenOAuth2.test.js +1724 -0
  413. package/dist/src/qwen/qwenOAuth2.test.js.map +1 -0
  414. package/dist/src/qwen/sharedTokenManager.d.ts +196 -0
  415. package/dist/src/qwen/sharedTokenManager.js +647 -0
  416. package/dist/src/qwen/sharedTokenManager.js.map +1 -0
  417. package/dist/src/qwen/sharedTokenManager.test.d.ts +7 -0
  418. package/dist/src/qwen/sharedTokenManager.test.js +662 -0
  419. package/dist/src/qwen/sharedTokenManager.test.js.map +1 -0
  420. package/dist/src/services/chatCompressionService.d.ts +32 -0
  421. package/dist/src/services/chatCompressionService.js +180 -0
  422. package/dist/src/services/chatCompressionService.js.map +1 -0
  423. package/dist/src/services/chatCompressionService.test.d.ts +6 -0
  424. package/dist/src/services/chatCompressionService.test.js +292 -0
  425. package/dist/src/services/chatCompressionService.test.js.map +1 -0
  426. package/dist/src/services/chatRecordingService.d.ts +144 -0
  427. package/dist/src/services/chatRecordingService.js +330 -0
  428. package/dist/src/services/chatRecordingService.js.map +1 -0
  429. package/dist/src/services/chatRecordingService.test.d.ts +6 -0
  430. package/dist/src/services/chatRecordingService.test.js +332 -0
  431. package/dist/src/services/chatRecordingService.test.js.map +1 -0
  432. package/dist/src/services/fileDiscoveryService.d.ts +45 -0
  433. package/dist/src/services/fileDiscoveryService.js +104 -0
  434. package/dist/src/services/fileDiscoveryService.js.map +1 -0
  435. package/dist/src/services/fileDiscoveryService.test.d.ts +6 -0
  436. package/dist/src/services/fileDiscoveryService.test.js +143 -0
  437. package/dist/src/services/fileDiscoveryService.test.js.map +1 -0
  438. package/dist/src/services/fileSystemService.d.ts +40 -0
  439. package/dist/src/services/fileSystemService.js +29 -0
  440. package/dist/src/services/fileSystemService.js.map +1 -0
  441. package/dist/src/services/fileSystemService.test.d.ts +6 -0
  442. package/dist/src/services/fileSystemService.test.js +41 -0
  443. package/dist/src/services/fileSystemService.test.js.map +1 -0
  444. package/dist/src/services/gitService.d.ts +22 -0
  445. package/dist/src/services/gitService.js +98 -0
  446. package/dist/src/services/gitService.js.map +1 -0
  447. package/dist/src/services/gitService.test.d.ts +6 -0
  448. package/dist/src/services/gitService.test.js +187 -0
  449. package/dist/src/services/gitService.test.js.map +1 -0
  450. package/dist/src/services/loopDetectionService.d.ts +103 -0
  451. package/dist/src/services/loopDetectionService.js +379 -0
  452. package/dist/src/services/loopDetectionService.js.map +1 -0
  453. package/dist/src/services/loopDetectionService.test.d.ts +6 -0
  454. package/dist/src/services/loopDetectionService.test.js +588 -0
  455. package/dist/src/services/loopDetectionService.test.js.map +1 -0
  456. package/dist/src/services/shellExecutionService.d.ts +102 -0
  457. package/dist/src/services/shellExecutionService.js +522 -0
  458. package/dist/src/services/shellExecutionService.js.map +1 -0
  459. package/dist/src/services/shellExecutionService.test.d.ts +6 -0
  460. package/dist/src/services/shellExecutionService.test.js +655 -0
  461. package/dist/src/services/shellExecutionService.test.js.map +1 -0
  462. package/dist/src/subagents/builtin-agents.d.ts +36 -0
  463. package/dist/src/subagents/builtin-agents.js +351 -0
  464. package/dist/src/subagents/builtin-agents.js.map +1 -0
  465. package/dist/src/subagents/builtin-agents.test.d.ts +6 -0
  466. package/dist/src/subagents/builtin-agents.test.js +78 -0
  467. package/dist/src/subagents/builtin-agents.test.js.map +1 -0
  468. package/dist/src/subagents/index.d.ts +29 -0
  469. package/dist/src/subagents/index.js +15 -0
  470. package/dist/src/subagents/index.js.map +1 -0
  471. package/dist/src/subagents/subagent-events.d.ts +95 -0
  472. package/dist/src/subagents/subagent-events.js +31 -0
  473. package/dist/src/subagents/subagent-events.js.map +1 -0
  474. package/dist/src/subagents/subagent-hooks.d.ts +29 -0
  475. package/dist/src/subagents/subagent-hooks.js +7 -0
  476. package/dist/src/subagents/subagent-hooks.js.map +1 -0
  477. package/dist/src/subagents/subagent-manager.d.ts +170 -0
  478. package/dist/src/subagents/subagent-manager.js +596 -0
  479. package/dist/src/subagents/subagent-manager.js.map +1 -0
  480. package/dist/src/subagents/subagent-manager.test.d.ts +6 -0
  481. package/dist/src/subagents/subagent-manager.test.js +822 -0
  482. package/dist/src/subagents/subagent-manager.test.js.map +1 -0
  483. package/dist/src/subagents/subagent-statistics.d.ts +46 -0
  484. package/dist/src/subagents/subagent-statistics.js +193 -0
  485. package/dist/src/subagents/subagent-statistics.js.map +1 -0
  486. package/dist/src/subagents/subagent-statistics.test.d.ts +6 -0
  487. package/dist/src/subagents/subagent-statistics.test.js +231 -0
  488. package/dist/src/subagents/subagent-statistics.test.js.map +1 -0
  489. package/dist/src/subagents/subagent.d.ts +162 -0
  490. package/dist/src/subagents/subagent.js +677 -0
  491. package/dist/src/subagents/subagent.js.map +1 -0
  492. package/dist/src/subagents/subagent.test.d.ts +6 -0
  493. package/dist/src/subagents/subagent.test.js +477 -0
  494. package/dist/src/subagents/subagent.test.js.map +1 -0
  495. package/dist/src/subagents/types.d.ts +218 -0
  496. package/dist/src/subagents/types.js +58 -0
  497. package/dist/src/subagents/types.js.map +1 -0
  498. package/dist/src/subagents/types.test.d.ts +6 -0
  499. package/dist/src/subagents/types.test.js +31 -0
  500. package/dist/src/subagents/types.test.js.map +1 -0
  501. package/dist/src/subagents/validation.d.ts +63 -0
  502. package/dist/src/subagents/validation.js +293 -0
  503. package/dist/src/subagents/validation.js.map +1 -0
  504. package/dist/src/subagents/validation.test.d.ts +6 -0
  505. package/dist/src/subagents/validation.test.js +330 -0
  506. package/dist/src/subagents/validation.test.js.map +1 -0
  507. package/dist/src/telemetry/clearcut-logger/clearcut-logger.d.ts +137 -0
  508. package/dist/src/telemetry/clearcut-logger/clearcut-logger.js +915 -0
  509. package/dist/src/telemetry/clearcut-logger/clearcut-logger.js.map +1 -0
  510. package/dist/src/telemetry/clearcut-logger/clearcut-logger.test.d.ts +18 -0
  511. package/dist/src/telemetry/clearcut-logger/clearcut-logger.test.js +594 -0
  512. package/dist/src/telemetry/clearcut-logger/clearcut-logger.test.js.map +1 -0
  513. package/dist/src/telemetry/clearcut-logger/event-metadata-key.d.ts +115 -0
  514. package/dist/src/telemetry/clearcut-logger/event-metadata-key.js +291 -0
  515. package/dist/src/telemetry/clearcut-logger/event-metadata-key.js.map +1 -0
  516. package/dist/src/telemetry/config.d.ts +31 -0
  517. package/dist/src/telemetry/config.js +76 -0
  518. package/dist/src/telemetry/config.js.map +1 -0
  519. package/dist/src/telemetry/config.test.d.ts +6 -0
  520. package/dist/src/telemetry/config.test.js +124 -0
  521. package/dist/src/telemetry/config.test.js.map +1 -0
  522. package/dist/src/telemetry/constants.d.ts +36 -0
  523. package/dist/src/telemetry/constants.js +38 -0
  524. package/dist/src/telemetry/constants.js.map +1 -0
  525. package/dist/src/telemetry/file-exporters.d.ts +29 -0
  526. package/dist/src/telemetry/file-exporters.js +62 -0
  527. package/dist/src/telemetry/file-exporters.js.map +1 -0
  528. package/dist/src/telemetry/index.d.ts +25 -0
  529. package/dist/src/telemetry/index.js +31 -0
  530. package/dist/src/telemetry/index.js.map +1 -0
  531. package/dist/src/telemetry/integration.test.circular.d.ts +6 -0
  532. package/dist/src/telemetry/integration.test.circular.js +95 -0
  533. package/dist/src/telemetry/integration.test.circular.js.map +1 -0
  534. package/dist/src/telemetry/loggers.d.ts +37 -0
  535. package/dist/src/telemetry/loggers.js +651 -0
  536. package/dist/src/telemetry/loggers.js.map +1 -0
  537. package/dist/src/telemetry/loggers.test.circular.d.ts +6 -0
  538. package/dist/src/telemetry/loggers.test.circular.js +107 -0
  539. package/dist/src/telemetry/loggers.test.circular.js.map +1 -0
  540. package/dist/src/telemetry/loggers.test.d.ts +6 -0
  541. package/dist/src/telemetry/loggers.test.js +978 -0
  542. package/dist/src/telemetry/loggers.test.js.map +1 -0
  543. package/dist/src/telemetry/metrics.d.ts +320 -0
  544. package/dist/src/telemetry/metrics.js +532 -0
  545. package/dist/src/telemetry/metrics.js.map +1 -0
  546. package/dist/src/telemetry/metrics.test.d.ts +6 -0
  547. package/dist/src/telemetry/metrics.test.js +744 -0
  548. package/dist/src/telemetry/metrics.test.js.map +1 -0
  549. package/dist/src/telemetry/qwen-logger/event-types.d.ts +88 -0
  550. package/dist/src/telemetry/qwen-logger/event-types.js +2 -0
  551. package/dist/src/telemetry/qwen-logger/event-types.js.map +1 -0
  552. package/dist/src/telemetry/qwen-logger/qwen-logger.d.ts +91 -0
  553. package/dist/src/telemetry/qwen-logger/qwen-logger.js +685 -0
  554. package/dist/src/telemetry/qwen-logger/qwen-logger.js.map +1 -0
  555. package/dist/src/telemetry/qwen-logger/qwen-logger.test.d.ts +6 -0
  556. package/dist/src/telemetry/qwen-logger/qwen-logger.test.js +317 -0
  557. package/dist/src/telemetry/qwen-logger/qwen-logger.test.js.map +1 -0
  558. package/dist/src/telemetry/sdk.d.ts +9 -0
  559. package/dist/src/telemetry/sdk.js +164 -0
  560. package/dist/src/telemetry/sdk.js.map +1 -0
  561. package/dist/src/telemetry/sdk.test.d.ts +6 -0
  562. package/dist/src/telemetry/sdk.test.js +116 -0
  563. package/dist/src/telemetry/sdk.test.js.map +1 -0
  564. package/dist/src/telemetry/telemetry-utils.d.ts +6 -0
  565. package/dist/src/telemetry/telemetry-utils.js +14 -0
  566. package/dist/src/telemetry/telemetry-utils.js.map +1 -0
  567. package/dist/src/telemetry/telemetry-utils.test.d.ts +6 -0
  568. package/dist/src/telemetry/telemetry-utils.test.js +40 -0
  569. package/dist/src/telemetry/telemetry-utils.test.js.map +1 -0
  570. package/dist/src/telemetry/telemetry.test.d.ts +6 -0
  571. package/dist/src/telemetry/telemetry.test.js +50 -0
  572. package/dist/src/telemetry/telemetry.test.js.map +1 -0
  573. package/dist/src/telemetry/tool-call-decision.d.ts +13 -0
  574. package/dist/src/telemetry/tool-call-decision.js +29 -0
  575. package/dist/src/telemetry/tool-call-decision.js.map +1 -0
  576. package/dist/src/telemetry/types.d.ts +327 -0
  577. package/dist/src/telemetry/types.js +558 -0
  578. package/dist/src/telemetry/types.js.map +1 -0
  579. package/dist/src/telemetry/uiTelemetry.d.ts +75 -0
  580. package/dist/src/telemetry/uiTelemetry.js +152 -0
  581. package/dist/src/telemetry/uiTelemetry.js.map +1 -0
  582. package/dist/src/telemetry/uiTelemetry.test.d.ts +6 -0
  583. package/dist/src/telemetry/uiTelemetry.test.js +625 -0
  584. package/dist/src/telemetry/uiTelemetry.test.js.map +1 -0
  585. package/dist/src/test-utils/config.d.ts +17 -0
  586. package/dist/src/test-utils/config.js +32 -0
  587. package/dist/src/test-utils/config.js.map +1 -0
  588. package/dist/src/test-utils/index.d.ts +6 -0
  589. package/dist/src/test-utils/index.js +7 -0
  590. package/dist/src/test-utils/index.js.map +1 -0
  591. package/dist/src/test-utils/mock-tool.d.ts +66 -0
  592. package/dist/src/test-utils/mock-tool.js +121 -0
  593. package/dist/src/test-utils/mock-tool.js.map +1 -0
  594. package/dist/src/test-utils/mockWorkspaceContext.d.ts +13 -0
  595. package/dist/src/test-utils/mockWorkspaceContext.js +24 -0
  596. package/dist/src/test-utils/mockWorkspaceContext.js.map +1 -0
  597. package/dist/src/tools/diffOptions.d.ts +9 -0
  598. package/dist/src/tools/diffOptions.js +46 -0
  599. package/dist/src/tools/diffOptions.js.map +1 -0
  600. package/dist/src/tools/diffOptions.test.d.ts +6 -0
  601. package/dist/src/tools/diffOptions.test.js +155 -0
  602. package/dist/src/tools/diffOptions.test.js.map +1 -0
  603. package/dist/src/tools/edit.d.ts +55 -0
  604. package/dist/src/tools/edit.js +421 -0
  605. package/dist/src/tools/edit.js.map +1 -0
  606. package/dist/src/tools/edit.test.d.ts +6 -0
  607. package/dist/src/tools/edit.test.js +684 -0
  608. package/dist/src/tools/edit.test.js.map +1 -0
  609. package/dist/src/tools/exitPlanMode.d.ts +28 -0
  610. package/dist/src/tools/exitPlanMode.js +132 -0
  611. package/dist/src/tools/exitPlanMode.js.map +1 -0
  612. package/dist/src/tools/exitPlanMode.test.d.ts +6 -0
  613. package/dist/src/tools/exitPlanMode.test.js +178 -0
  614. package/dist/src/tools/exitPlanMode.test.js.map +1 -0
  615. package/dist/src/tools/glob.d.ts +44 -0
  616. package/dist/src/tools/glob.js +190 -0
  617. package/dist/src/tools/glob.js.map +1 -0
  618. package/dist/src/tools/glob.test.d.ts +6 -0
  619. package/dist/src/tools/glob.test.js +442 -0
  620. package/dist/src/tools/glob.test.js.map +1 -0
  621. package/dist/src/tools/grep.d.ts +44 -0
  622. package/dist/src/tools/grep.js +425 -0
  623. package/dist/src/tools/grep.js.map +1 -0
  624. package/dist/src/tools/grep.test.d.ts +6 -0
  625. package/dist/src/tools/grep.test.js +360 -0
  626. package/dist/src/tools/grep.test.js.map +1 -0
  627. package/dist/src/tools/ls.d.ts +68 -0
  628. package/dist/src/tools/ls.js +215 -0
  629. package/dist/src/tools/ls.js.map +1 -0
  630. package/dist/src/tools/ls.test.d.ts +6 -0
  631. package/dist/src/tools/ls.test.js +249 -0
  632. package/dist/src/tools/ls.test.js.map +1 -0
  633. package/dist/src/tools/mcp-client-manager.d.ts +40 -0
  634. package/dist/src/tools/mcp-client-manager.js +83 -0
  635. package/dist/src/tools/mcp-client-manager.js.map +1 -0
  636. package/dist/src/tools/mcp-client-manager.test.d.ts +6 -0
  637. package/dist/src/tools/mcp-client-manager.test.js +58 -0
  638. package/dist/src/tools/mcp-client-manager.test.js.map +1 -0
  639. package/dist/src/tools/mcp-client.d.ts +189 -0
  640. package/dist/src/tools/mcp-client.js +957 -0
  641. package/dist/src/tools/mcp-client.js.map +1 -0
  642. package/dist/src/tools/mcp-client.test.d.ts +6 -0
  643. package/dist/src/tools/mcp-client.test.js +309 -0
  644. package/dist/src/tools/mcp-client.test.js.map +1 -0
  645. package/dist/src/tools/mcp-tool.d.ts +24 -0
  646. package/dist/src/tools/mcp-tool.js +268 -0
  647. package/dist/src/tools/mcp-tool.js.map +1 -0
  648. package/dist/src/tools/mcp-tool.test.d.ts +6 -0
  649. package/dist/src/tools/mcp-tool.test.js +714 -0
  650. package/dist/src/tools/mcp-tool.test.js.map +1 -0
  651. package/dist/src/tools/memoryTool.d.ts +42 -0
  652. package/dist/src/tools/memoryTool.js +397 -0
  653. package/dist/src/tools/memoryTool.js.map +1 -0
  654. package/dist/src/tools/memoryTool.test.d.ts +6 -0
  655. package/dist/src/tools/memoryTool.test.js +419 -0
  656. package/dist/src/tools/memoryTool.test.js.map +1 -0
  657. package/dist/src/tools/modifiable-tool.d.ts +32 -0
  658. package/dist/src/tools/modifiable-tool.js +88 -0
  659. package/dist/src/tools/modifiable-tool.js.map +1 -0
  660. package/dist/src/tools/modifiable-tool.test.d.ts +6 -0
  661. package/dist/src/tools/modifiable-tool.test.js +193 -0
  662. package/dist/src/tools/modifiable-tool.test.js.map +1 -0
  663. package/dist/src/tools/read-file.d.ts +35 -0
  664. package/dist/src/tools/read-file.js +124 -0
  665. package/dist/src/tools/read-file.js.map +1 -0
  666. package/dist/src/tools/read-file.test.d.ts +6 -0
  667. package/dist/src/tools/read-file.test.js +339 -0
  668. package/dist/src/tools/read-file.test.js.map +1 -0
  669. package/dist/src/tools/read-many-files.d.ts +60 -0
  670. package/dist/src/tools/read-many-files.js +391 -0
  671. package/dist/src/tools/read-many-files.js.map +1 -0
  672. package/dist/src/tools/read-many-files.test.d.ts +6 -0
  673. package/dist/src/tools/read-many-files.test.js +566 -0
  674. package/dist/src/tools/read-many-files.test.js.map +1 -0
  675. package/dist/src/tools/ripGrep.d.ts +44 -0
  676. package/dist/src/tools/ripGrep.js +233 -0
  677. package/dist/src/tools/ripGrep.js.map +1 -0
  678. package/dist/src/tools/ripGrep.test.d.ts +6 -0
  679. package/dist/src/tools/ripGrep.test.js +529 -0
  680. package/dist/src/tools/ripGrep.test.js.map +1 -0
  681. package/dist/src/tools/shell.d.ts +33 -0
  682. package/dist/src/tools/shell.js +395 -0
  683. package/dist/src/tools/shell.js.map +1 -0
  684. package/dist/src/tools/shell.test.d.ts +6 -0
  685. package/dist/src/tools/shell.test.js +566 -0
  686. package/dist/src/tools/shell.test.js.map +1 -0
  687. package/dist/src/tools/smart-edit.d.ts +91 -0
  688. package/dist/src/tools/smart-edit.js +703 -0
  689. package/dist/src/tools/smart-edit.js.map +1 -0
  690. package/dist/src/tools/smart-edit.test.d.ts +6 -0
  691. package/dist/src/tools/smart-edit.test.js +542 -0
  692. package/dist/src/tools/smart-edit.test.js.map +1 -0
  693. package/dist/src/tools/task.d.ts +59 -0
  694. package/dist/src/tools/task.js +412 -0
  695. package/dist/src/tools/task.js.map +1 -0
  696. package/dist/src/tools/task.test.d.ts +6 -0
  697. package/dist/src/tools/task.test.js +369 -0
  698. package/dist/src/tools/task.test.js.map +1 -0
  699. package/dist/src/tools/todoWrite.d.ts +42 -0
  700. package/dist/src/tools/todoWrite.js +407 -0
  701. package/dist/src/tools/todoWrite.js.map +1 -0
  702. package/dist/src/tools/todoWrite.test.d.ts +6 -0
  703. package/dist/src/tools/todoWrite.test.js +234 -0
  704. package/dist/src/tools/todoWrite.test.js.map +1 -0
  705. package/dist/src/tools/tool-error.d.ts +45 -0
  706. package/dist/src/tools/tool-error.js +61 -0
  707. package/dist/src/tools/tool-error.js.map +1 -0
  708. package/dist/src/tools/tool-names.d.ts +56 -0
  709. package/dist/src/tools/tool-names.js +62 -0
  710. package/dist/src/tools/tool-names.js.map +1 -0
  711. package/dist/src/tools/tool-registry.d.ts +87 -0
  712. package/dist/src/tools/tool-registry.js +370 -0
  713. package/dist/src/tools/tool-registry.js.map +1 -0
  714. package/dist/src/tools/tool-registry.test.d.ts +6 -0
  715. package/dist/src/tools/tool-registry.test.js +332 -0
  716. package/dist/src/tools/tool-registry.test.js.map +1 -0
  717. package/dist/src/tools/tools.d.ts +327 -0
  718. package/dist/src/tools/tools.js +258 -0
  719. package/dist/src/tools/tools.js.map +1 -0
  720. package/dist/src/tools/tools.test.d.ts +6 -0
  721. package/dist/src/tools/tools.test.js +205 -0
  722. package/dist/src/tools/tools.test.js.map +1 -0
  723. package/dist/src/tools/web-fetch.d.ts +31 -0
  724. package/dist/src/tools/web-fetch.js +163 -0
  725. package/dist/src/tools/web-fetch.js.map +1 -0
  726. package/dist/src/tools/web-fetch.test.d.ts +6 -0
  727. package/dist/src/tools/web-fetch.test.js +133 -0
  728. package/dist/src/tools/web-fetch.test.js.map +1 -0
  729. package/dist/src/tools/web-search/base-provider.d.ts +31 -0
  730. package/dist/src/tools/web-search/base-provider.js +34 -0
  731. package/dist/src/tools/web-search/base-provider.js.map +1 -0
  732. package/dist/src/tools/web-search/index.d.ts +24 -0
  733. package/dist/src/tools/web-search/index.js +245 -0
  734. package/dist/src/tools/web-search/index.js.map +1 -0
  735. package/dist/src/tools/web-search/index.test.d.ts +6 -0
  736. package/dist/src/tools/web-search/index.test.js +237 -0
  737. package/dist/src/tools/web-search/index.test.js.map +1 -0
  738. package/dist/src/tools/web-search/providers/dashscope-provider.d.ts +23 -0
  739. package/dist/src/tools/web-search/providers/dashscope-provider.js +120 -0
  740. package/dist/src/tools/web-search/providers/dashscope-provider.js.map +1 -0
  741. package/dist/src/tools/web-search/providers/google-provider.d.ts +17 -0
  742. package/dist/src/tools/web-search/providers/google-provider.js +55 -0
  743. package/dist/src/tools/web-search/providers/google-provider.js.map +1 -0
  744. package/dist/src/tools/web-search/providers/tavily-provider.d.ts +17 -0
  745. package/dist/src/tools/web-search/providers/tavily-provider.js +54 -0
  746. package/dist/src/tools/web-search/providers/tavily-provider.js.map +1 -0
  747. package/dist/src/tools/web-search/types.d.ts +138 -0
  748. package/dist/src/tools/web-search/types.js +7 -0
  749. package/dist/src/tools/web-search/types.js.map +1 -0
  750. package/dist/src/tools/web-search/utils.d.ts +28 -0
  751. package/dist/src/tools/web-search/utils.js +35 -0
  752. package/dist/src/tools/web-search/utils.js.map +1 -0
  753. package/dist/src/tools/write-file.d.ts +52 -0
  754. package/dist/src/tools/write-file.js +293 -0
  755. package/dist/src/tools/write-file.js.map +1 -0
  756. package/dist/src/tools/write-file.test.d.ts +6 -0
  757. package/dist/src/tools/write-file.test.js +516 -0
  758. package/dist/src/tools/write-file.test.js.map +1 -0
  759. package/dist/src/utils/LruCache.d.ts +13 -0
  760. package/dist/src/utils/LruCache.js +38 -0
  761. package/dist/src/utils/LruCache.js.map +1 -0
  762. package/dist/src/utils/bfsFileSearch.d.ts +24 -0
  763. package/dist/src/utils/bfsFileSearch.js +95 -0
  764. package/dist/src/utils/bfsFileSearch.js.map +1 -0
  765. package/dist/src/utils/bfsFileSearch.test.d.ts +6 -0
  766. package/dist/src/utils/bfsFileSearch.test.js +163 -0
  767. package/dist/src/utils/bfsFileSearch.test.js.map +1 -0
  768. package/dist/src/utils/browser.d.ts +13 -0
  769. package/dist/src/utils/browser.js +50 -0
  770. package/dist/src/utils/browser.js.map +1 -0
  771. package/dist/src/utils/editHelper.d.ts +53 -0
  772. package/dist/src/utils/editHelper.js +359 -0
  773. package/dist/src/utils/editHelper.js.map +1 -0
  774. package/dist/src/utils/editHelper.test.d.ts +6 -0
  775. package/dist/src/utils/editHelper.test.js +93 -0
  776. package/dist/src/utils/editHelper.test.js.map +1 -0
  777. package/dist/src/utils/editor.d.ts +28 -0
  778. package/dist/src/utils/editor.js +177 -0
  779. package/dist/src/utils/editor.js.map +1 -0
  780. package/dist/src/utils/editor.test.d.ts +6 -0
  781. package/dist/src/utils/editor.test.js +437 -0
  782. package/dist/src/utils/editor.test.js.map +1 -0
  783. package/dist/src/utils/environmentContext.d.ts +22 -0
  784. package/dist/src/utils/environmentContext.js +108 -0
  785. package/dist/src/utils/environmentContext.js.map +1 -0
  786. package/dist/src/utils/environmentContext.test.d.ts +6 -0
  787. package/dist/src/utils/environmentContext.test.js +219 -0
  788. package/dist/src/utils/environmentContext.test.js.map +1 -0
  789. package/dist/src/utils/errorParsing.d.ts +8 -0
  790. package/dist/src/utils/errorParsing.js +93 -0
  791. package/dist/src/utils/errorParsing.js.map +1 -0
  792. package/dist/src/utils/errorParsing.test.d.ts +6 -0
  793. package/dist/src/utils/errorParsing.test.js +172 -0
  794. package/dist/src/utils/errorParsing.test.js.map +1 -0
  795. package/dist/src/utils/errorReporting.d.ts +14 -0
  796. package/dist/src/utils/errorReporting.js +88 -0
  797. package/dist/src/utils/errorReporting.js.map +1 -0
  798. package/dist/src/utils/errorReporting.test.d.ts +6 -0
  799. package/dist/src/utils/errorReporting.test.js +130 -0
  800. package/dist/src/utils/errorReporting.test.js.map +1 -0
  801. package/dist/src/utils/errors.d.ts +39 -0
  802. package/dist/src/utils/errors.js +96 -0
  803. package/dist/src/utils/errors.js.map +1 -0
  804. package/dist/src/utils/fetch.d.ts +11 -0
  805. package/dist/src/utils/fetch.js +51 -0
  806. package/dist/src/utils/fetch.js.map +1 -0
  807. package/dist/src/utils/fileUtils.d.ts +69 -0
  808. package/dist/src/utils/fileUtils.js +426 -0
  809. package/dist/src/utils/fileUtils.js.map +1 -0
  810. package/dist/src/utils/fileUtils.test.d.ts +6 -0
  811. package/dist/src/utils/fileUtils.test.js +685 -0
  812. package/dist/src/utils/fileUtils.test.js.map +1 -0
  813. package/dist/src/utils/filesearch/crawlCache.d.ts +25 -0
  814. package/dist/src/utils/filesearch/crawlCache.js +57 -0
  815. package/dist/src/utils/filesearch/crawlCache.js.map +1 -0
  816. package/dist/src/utils/filesearch/crawlCache.test.d.ts +6 -0
  817. package/dist/src/utils/filesearch/crawlCache.test.js +103 -0
  818. package/dist/src/utils/filesearch/crawlCache.test.js.map +1 -0
  819. package/dist/src/utils/filesearch/crawler.d.ts +15 -0
  820. package/dist/src/utils/filesearch/crawler.js +50 -0
  821. package/dist/src/utils/filesearch/crawler.js.map +1 -0
  822. package/dist/src/utils/filesearch/crawler.test.d.ts +6 -0
  823. package/dist/src/utils/filesearch/crawler.test.js +468 -0
  824. package/dist/src/utils/filesearch/crawler.test.js.map +1 -0
  825. package/dist/src/utils/filesearch/fileSearch.d.ts +38 -0
  826. package/dist/src/utils/filesearch/fileSearch.js +191 -0
  827. package/dist/src/utils/filesearch/fileSearch.js.map +1 -0
  828. package/dist/src/utils/filesearch/fileSearch.test.d.ts +6 -0
  829. package/dist/src/utils/filesearch/fileSearch.test.js +642 -0
  830. package/dist/src/utils/filesearch/fileSearch.test.js.map +1 -0
  831. package/dist/src/utils/filesearch/ignore.d.ts +42 -0
  832. package/dist/src/utils/filesearch/ignore.js +106 -0
  833. package/dist/src/utils/filesearch/ignore.js.map +1 -0
  834. package/dist/src/utils/filesearch/ignore.test.d.ts +6 -0
  835. package/dist/src/utils/filesearch/ignore.test.js +144 -0
  836. package/dist/src/utils/filesearch/ignore.test.js.map +1 -0
  837. package/dist/src/utils/filesearch/result-cache.d.ts +33 -0
  838. package/dist/src/utils/filesearch/result-cache.js +59 -0
  839. package/dist/src/utils/filesearch/result-cache.js.map +1 -0
  840. package/dist/src/utils/filesearch/result-cache.test.d.ts +6 -0
  841. package/dist/src/utils/filesearch/result-cache.test.js +46 -0
  842. package/dist/src/utils/filesearch/result-cache.test.js.map +1 -0
  843. package/dist/src/utils/flashFallback.test.d.ts +6 -0
  844. package/dist/src/utils/flashFallback.test.js +122 -0
  845. package/dist/src/utils/flashFallback.test.js.map +1 -0
  846. package/dist/src/utils/formatters.d.ts +6 -0
  847. package/dist/src/utils/formatters.js +16 -0
  848. package/dist/src/utils/formatters.js.map +1 -0
  849. package/dist/src/utils/generateContentResponseUtilities.d.ts +13 -0
  850. package/dist/src/utils/generateContentResponseUtilities.js +80 -0
  851. package/dist/src/utils/generateContentResponseUtilities.js.map +1 -0
  852. package/dist/src/utils/generateContentResponseUtilities.test.d.ts +6 -0
  853. package/dist/src/utils/generateContentResponseUtilities.test.js +235 -0
  854. package/dist/src/utils/generateContentResponseUtilities.test.js.map +1 -0
  855. package/dist/src/utils/getFolderStructure.d.ts +31 -0
  856. package/dist/src/utils/getFolderStructure.js +246 -0
  857. package/dist/src/utils/getFolderStructure.js.map +1 -0
  858. package/dist/src/utils/getFolderStructure.test.d.ts +6 -0
  859. package/dist/src/utils/getFolderStructure.test.js +282 -0
  860. package/dist/src/utils/getFolderStructure.test.js.map +1 -0
  861. package/dist/src/utils/getPty.d.ts +19 -0
  862. package/dist/src/utils/getPty.js +23 -0
  863. package/dist/src/utils/getPty.js.map +1 -0
  864. package/dist/src/utils/gitIgnoreParser.d.ts +16 -0
  865. package/dist/src/utils/gitIgnoreParser.js +152 -0
  866. package/dist/src/utils/gitIgnoreParser.js.map +1 -0
  867. package/dist/src/utils/gitIgnoreParser.test.d.ts +6 -0
  868. package/dist/src/utils/gitIgnoreParser.test.js +185 -0
  869. package/dist/src/utils/gitIgnoreParser.test.js.map +1 -0
  870. package/dist/src/utils/gitUtils.d.ts +17 -0
  871. package/dist/src/utils/gitUtils.js +61 -0
  872. package/dist/src/utils/gitUtils.js.map +1 -0
  873. package/dist/src/utils/ignorePatterns.d.ts +103 -0
  874. package/dist/src/utils/ignorePatterns.js +220 -0
  875. package/dist/src/utils/ignorePatterns.js.map +1 -0
  876. package/dist/src/utils/ignorePatterns.test.d.ts +6 -0
  877. package/dist/src/utils/ignorePatterns.test.js +250 -0
  878. package/dist/src/utils/ignorePatterns.test.js.map +1 -0
  879. package/dist/src/utils/installationManager.d.ts +16 -0
  880. package/dist/src/utils/installationManager.js +50 -0
  881. package/dist/src/utils/installationManager.js.map +1 -0
  882. package/dist/src/utils/installationManager.test.d.ts +6 -0
  883. package/dist/src/utils/installationManager.test.js +83 -0
  884. package/dist/src/utils/installationManager.test.js.map +1 -0
  885. package/dist/src/utils/language-detection.d.ts +6 -0
  886. package/dist/src/utils/language-detection.js +101 -0
  887. package/dist/src/utils/language-detection.js.map +1 -0
  888. package/dist/src/utils/llm-edit-fixer.d.ts +26 -0
  889. package/dist/src/utils/llm-edit-fixer.js +131 -0
  890. package/dist/src/utils/llm-edit-fixer.js.map +1 -0
  891. package/dist/src/utils/llm-edit-fixer.test.d.ts +6 -0
  892. package/dist/src/utils/llm-edit-fixer.test.js +186 -0
  893. package/dist/src/utils/llm-edit-fixer.test.js.map +1 -0
  894. package/dist/src/utils/memoryDiscovery.d.ts +16 -0
  895. package/dist/src/utils/memoryDiscovery.js +272 -0
  896. package/dist/src/utils/memoryDiscovery.js.map +1 -0
  897. package/dist/src/utils/memoryDiscovery.test.d.ts +6 -0
  898. package/dist/src/utils/memoryDiscovery.test.js +244 -0
  899. package/dist/src/utils/memoryDiscovery.test.js.map +1 -0
  900. package/dist/src/utils/memoryImportProcessor.d.ts +42 -0
  901. package/dist/src/utils/memoryImportProcessor.js +284 -0
  902. package/dist/src/utils/memoryImportProcessor.js.map +1 -0
  903. package/dist/src/utils/memoryImportProcessor.test.d.ts +6 -0
  904. package/dist/src/utils/memoryImportProcessor.test.js +587 -0
  905. package/dist/src/utils/memoryImportProcessor.test.js.map +1 -0
  906. package/dist/src/utils/messageInspectors.d.ts +8 -0
  907. package/dist/src/utils/messageInspectors.js +16 -0
  908. package/dist/src/utils/messageInspectors.js.map +1 -0
  909. package/dist/src/utils/nextSpeakerChecker.d.ts +12 -0
  910. package/dist/src/utils/nextSpeakerChecker.js +97 -0
  911. package/dist/src/utils/nextSpeakerChecker.js.map +1 -0
  912. package/dist/src/utils/nextSpeakerChecker.test.d.ts +6 -0
  913. package/dist/src/utils/nextSpeakerChecker.test.js +181 -0
  914. package/dist/src/utils/nextSpeakerChecker.test.js.map +1 -0
  915. package/dist/src/utils/openaiLogger.d.ts +42 -0
  916. package/dist/src/utils/openaiLogger.js +138 -0
  917. package/dist/src/utils/openaiLogger.js.map +1 -0
  918. package/dist/src/utils/openaiLogger.test.d.ts +6 -0
  919. package/dist/src/utils/openaiLogger.test.js +304 -0
  920. package/dist/src/utils/openaiLogger.test.js.map +1 -0
  921. package/dist/src/utils/partUtils.d.ts +35 -0
  922. package/dist/src/utils/partUtils.js +133 -0
  923. package/dist/src/utils/partUtils.js.map +1 -0
  924. package/dist/src/utils/partUtils.test.d.ts +6 -0
  925. package/dist/src/utils/partUtils.test.js +241 -0
  926. package/dist/src/utils/partUtils.test.js.map +1 -0
  927. package/dist/src/utils/pathReader.d.ts +17 -0
  928. package/dist/src/utils/pathReader.js +92 -0
  929. package/dist/src/utils/pathReader.js.map +1 -0
  930. package/dist/src/utils/pathReader.test.d.ts +6 -0
  931. package/dist/src/utils/pathReader.test.js +365 -0
  932. package/dist/src/utils/pathReader.test.js.map +1 -0
  933. package/dist/src/utils/paths.d.ts +94 -0
  934. package/dist/src/utils/paths.js +231 -0
  935. package/dist/src/utils/paths.js.map +1 -0
  936. package/dist/src/utils/paths.test.d.ts +6 -0
  937. package/dist/src/utils/paths.test.js +438 -0
  938. package/dist/src/utils/paths.test.js.map +1 -0
  939. package/dist/src/utils/projectSummary.d.ts +22 -0
  940. package/dist/src/utils/projectSummary.js +86 -0
  941. package/dist/src/utils/projectSummary.js.map +1 -0
  942. package/dist/src/utils/promptIdContext.d.ts +7 -0
  943. package/dist/src/utils/promptIdContext.js +8 -0
  944. package/dist/src/utils/promptIdContext.js.map +1 -0
  945. package/dist/src/utils/quotaErrorDetection.d.ts +20 -0
  946. package/dist/src/utils/quotaErrorDetection.js +114 -0
  947. package/dist/src/utils/quotaErrorDetection.js.map +1 -0
  948. package/dist/src/utils/quotaErrorDetection.test.d.ts +6 -0
  949. package/dist/src/utils/quotaErrorDetection.test.js +153 -0
  950. package/dist/src/utils/quotaErrorDetection.test.js.map +1 -0
  951. package/dist/src/utils/qwenIgnoreParser.d.ts +18 -0
  952. package/dist/src/utils/qwenIgnoreParser.js +61 -0
  953. package/dist/src/utils/qwenIgnoreParser.js.map +1 -0
  954. package/dist/src/utils/qwenIgnoreParser.test.d.ts +6 -0
  955. package/dist/src/utils/qwenIgnoreParser.test.js +50 -0
  956. package/dist/src/utils/qwenIgnoreParser.test.js.map +1 -0
  957. package/dist/src/utils/request-tokenizer/imageTokenizer.d.ts +112 -0
  958. package/dist/src/utils/request-tokenizer/imageTokenizer.js +401 -0
  959. package/dist/src/utils/request-tokenizer/imageTokenizer.js.map +1 -0
  960. package/dist/src/utils/request-tokenizer/imageTokenizer.test.d.ts +6 -0
  961. package/dist/src/utils/request-tokenizer/imageTokenizer.test.js +114 -0
  962. package/dist/src/utils/request-tokenizer/imageTokenizer.test.js.map +1 -0
  963. package/dist/src/utils/request-tokenizer/index.d.ts +18 -0
  964. package/dist/src/utils/request-tokenizer/index.js +30 -0
  965. package/dist/src/utils/request-tokenizer/index.js.map +1 -0
  966. package/dist/src/utils/request-tokenizer/requestTokenizer.d.ts +56 -0
  967. package/dist/src/utils/request-tokenizer/requestTokenizer.js +263 -0
  968. package/dist/src/utils/request-tokenizer/requestTokenizer.js.map +1 -0
  969. package/dist/src/utils/request-tokenizer/requestTokenizer.test.d.ts +6 -0
  970. package/dist/src/utils/request-tokenizer/requestTokenizer.test.js +245 -0
  971. package/dist/src/utils/request-tokenizer/requestTokenizer.test.js.map +1 -0
  972. package/dist/src/utils/request-tokenizer/supportedImageFormats.d.ts +30 -0
  973. package/dist/src/utils/request-tokenizer/supportedImageFormats.js +41 -0
  974. package/dist/src/utils/request-tokenizer/supportedImageFormats.js.map +1 -0
  975. package/dist/src/utils/request-tokenizer/textTokenizer.d.ts +29 -0
  976. package/dist/src/utils/request-tokenizer/textTokenizer.js +88 -0
  977. package/dist/src/utils/request-tokenizer/textTokenizer.js.map +1 -0
  978. package/dist/src/utils/request-tokenizer/textTokenizer.test.d.ts +6 -0
  979. package/dist/src/utils/request-tokenizer/textTokenizer.test.js +253 -0
  980. package/dist/src/utils/request-tokenizer/textTokenizer.test.js.map +1 -0
  981. package/dist/src/utils/request-tokenizer/types.d.ts +55 -0
  982. package/dist/src/utils/request-tokenizer/types.js +7 -0
  983. package/dist/src/utils/request-tokenizer/types.js.map +1 -0
  984. package/dist/src/utils/retry.d.ts +32 -0
  985. package/dist/src/utils/retry.js +303 -0
  986. package/dist/src/utils/retry.js.map +1 -0
  987. package/dist/src/utils/retry.test.d.ts +6 -0
  988. package/dist/src/utils/retry.test.js +474 -0
  989. package/dist/src/utils/retry.test.js.map +1 -0
  990. package/dist/src/utils/ripgrepUtils.d.ts +62 -0
  991. package/dist/src/utils/ripgrepUtils.js +262 -0
  992. package/dist/src/utils/ripgrepUtils.js.map +1 -0
  993. package/dist/src/utils/ripgrepUtils.test.d.ts +6 -0
  994. package/dist/src/utils/ripgrepUtils.test.js +101 -0
  995. package/dist/src/utils/ripgrepUtils.test.js.map +1 -0
  996. package/dist/src/utils/safeJsonParse.d.ts +15 -0
  997. package/dist/src/utils/safeJsonParse.js +41 -0
  998. package/dist/src/utils/safeJsonParse.js.map +1 -0
  999. package/dist/src/utils/safeJsonParse.test.d.ts +6 -0
  1000. package/dist/src/utils/safeJsonParse.test.js +112 -0
  1001. package/dist/src/utils/safeJsonParse.test.js.map +1 -0
  1002. package/dist/src/utils/safeJsonStringify.d.ts +13 -0
  1003. package/dist/src/utils/safeJsonStringify.js +25 -0
  1004. package/dist/src/utils/safeJsonStringify.js.map +1 -0
  1005. package/dist/src/utils/safeJsonStringify.test.d.ts +6 -0
  1006. package/dist/src/utils/safeJsonStringify.test.js +61 -0
  1007. package/dist/src/utils/safeJsonStringify.test.js.map +1 -0
  1008. package/dist/src/utils/schemaValidator.d.ts +15 -0
  1009. package/dist/src/utils/schemaValidator.js +67 -0
  1010. package/dist/src/utils/schemaValidator.js.map +1 -0
  1011. package/dist/src/utils/schemaValidator.test.d.ts +6 -0
  1012. package/dist/src/utils/schemaValidator.test.js +113 -0
  1013. package/dist/src/utils/schemaValidator.test.js.map +1 -0
  1014. package/dist/src/utils/secure-browser-launcher.d.ts +23 -0
  1015. package/dist/src/utils/secure-browser-launcher.js +165 -0
  1016. package/dist/src/utils/secure-browser-launcher.js.map +1 -0
  1017. package/dist/src/utils/secure-browser-launcher.test.d.ts +6 -0
  1018. package/dist/src/utils/secure-browser-launcher.test.js +149 -0
  1019. package/dist/src/utils/secure-browser-launcher.test.js.map +1 -0
  1020. package/dist/src/utils/session.d.ts +6 -0
  1021. package/dist/src/utils/session.js +8 -0
  1022. package/dist/src/utils/session.js.map +1 -0
  1023. package/dist/src/utils/shell-utils.d.ts +152 -0
  1024. package/dist/src/utils/shell-utils.js +467 -0
  1025. package/dist/src/utils/shell-utils.js.map +1 -0
  1026. package/dist/src/utils/shell-utils.test.d.ts +6 -0
  1027. package/dist/src/utils/shell-utils.test.js +351 -0
  1028. package/dist/src/utils/shell-utils.test.js.map +1 -0
  1029. package/dist/src/utils/shellReadOnlyChecker.d.ts +6 -0
  1030. package/dist/src/utils/shellReadOnlyChecker.js +247 -0
  1031. package/dist/src/utils/shellReadOnlyChecker.js.map +1 -0
  1032. package/dist/src/utils/shellReadOnlyChecker.test.d.ts +6 -0
  1033. package/dist/src/utils/shellReadOnlyChecker.test.js +47 -0
  1034. package/dist/src/utils/shellReadOnlyChecker.test.js.map +1 -0
  1035. package/dist/src/utils/subagentGenerator.d.ts +20 -0
  1036. package/dist/src/utils/subagentGenerator.js +120 -0
  1037. package/dist/src/utils/subagentGenerator.js.map +1 -0
  1038. package/dist/src/utils/subagentGenerator.test.d.ts +6 -0
  1039. package/dist/src/utils/subagentGenerator.test.js +135 -0
  1040. package/dist/src/utils/subagentGenerator.test.js.map +1 -0
  1041. package/dist/src/utils/summarizer.d.ts +25 -0
  1042. package/dist/src/utils/summarizer.js +51 -0
  1043. package/dist/src/utils/summarizer.js.map +1 -0
  1044. package/dist/src/utils/summarizer.test.d.ts +6 -0
  1045. package/dist/src/utils/summarizer.test.js +131 -0
  1046. package/dist/src/utils/summarizer.test.js.map +1 -0
  1047. package/dist/src/utils/systemEncoding.d.ts +40 -0
  1048. package/dist/src/utils/systemEncoding.js +149 -0
  1049. package/dist/src/utils/systemEncoding.js.map +1 -0
  1050. package/dist/src/utils/systemEncoding.test.d.ts +6 -0
  1051. package/dist/src/utils/systemEncoding.test.js +368 -0
  1052. package/dist/src/utils/systemEncoding.test.js.map +1 -0
  1053. package/dist/src/utils/terminalSerializer.d.ts +25 -0
  1054. package/dist/src/utils/terminalSerializer.js +432 -0
  1055. package/dist/src/utils/terminalSerializer.js.map +1 -0
  1056. package/dist/src/utils/terminalSerializer.test.d.ts +6 -0
  1057. package/dist/src/utils/terminalSerializer.test.js +176 -0
  1058. package/dist/src/utils/terminalSerializer.test.js.map +1 -0
  1059. package/dist/src/utils/testUtils.d.ts +29 -0
  1060. package/dist/src/utils/testUtils.js +70 -0
  1061. package/dist/src/utils/testUtils.js.map +1 -0
  1062. package/dist/src/utils/textUtils.d.ts +18 -0
  1063. package/dist/src/utils/textUtils.js +42 -0
  1064. package/dist/src/utils/textUtils.js.map +1 -0
  1065. package/dist/src/utils/textUtils.test.d.ts +6 -0
  1066. package/dist/src/utils/textUtils.test.js +59 -0
  1067. package/dist/src/utils/textUtils.test.js.map +1 -0
  1068. package/dist/src/utils/thoughtUtils.d.ts +21 -0
  1069. package/dist/src/utils/thoughtUtils.js +39 -0
  1070. package/dist/src/utils/thoughtUtils.js.map +1 -0
  1071. package/dist/src/utils/thoughtUtils.test.d.ts +6 -0
  1072. package/dist/src/utils/thoughtUtils.test.js +78 -0
  1073. package/dist/src/utils/thoughtUtils.test.js.map +1 -0
  1074. package/dist/src/utils/tool-utils.d.ts +22 -0
  1075. package/dist/src/utils/tool-utils.js +121 -0
  1076. package/dist/src/utils/tool-utils.js.map +1 -0
  1077. package/dist/src/utils/tool-utils.test.d.ts +6 -0
  1078. package/dist/src/utils/tool-utils.test.js +100 -0
  1079. package/dist/src/utils/tool-utils.test.js.map +1 -0
  1080. package/dist/src/utils/userAccountManager.d.ts +20 -0
  1081. package/dist/src/utils/userAccountManager.js +114 -0
  1082. package/dist/src/utils/userAccountManager.js.map +1 -0
  1083. package/dist/src/utils/userAccountManager.test.d.ts +6 -0
  1084. package/dist/src/utils/userAccountManager.test.js +223 -0
  1085. package/dist/src/utils/userAccountManager.test.js.map +1 -0
  1086. package/dist/src/utils/workspaceContext.d.ts +66 -0
  1087. package/dist/src/utils/workspaceContext.js +171 -0
  1088. package/dist/src/utils/workspaceContext.js.map +1 -0
  1089. package/dist/src/utils/workspaceContext.test.d.ts +6 -0
  1090. package/dist/src/utils/workspaceContext.test.js +318 -0
  1091. package/dist/src/utils/workspaceContext.test.js.map +1 -0
  1092. package/dist/src/utils/yaml-parser.d.ts +29 -0
  1093. package/dist/src/utils/yaml-parser.js +172 -0
  1094. package/dist/src/utils/yaml-parser.js.map +1 -0
  1095. package/dist/src/utils/yaml-parser.test.d.ts +6 -0
  1096. package/dist/src/utils/yaml-parser.test.js +170 -0
  1097. package/dist/src/utils/yaml-parser.test.js.map +1 -0
  1098. package/dist/tsconfig.tsbuildinfo +1 -0
  1099. package/package.json +93 -0
  1100. package/scripts/postinstall.js +100 -0
  1101. package/vendor/ripgrep/COPYING +3 -0
  1102. package/vendor/ripgrep/arm64-darwin/rg +0 -0
  1103. package/vendor/ripgrep/arm64-linux/rg +0 -0
  1104. package/vendor/ripgrep/x64-darwin/rg +0 -0
  1105. package/vendor/ripgrep/x64-linux/rg +0 -0
  1106. package/vendor/ripgrep/x64-win32/rg.exe +0 -0
@@ -0,0 +1,1178 @@
1
+ /**
2
+ * @license
3
+ * Copyright 2025 OSA
4
+ * SPDX-License-Identifier: Apache-2.0
5
+ */
6
+ import { describe, it, expect, vi, beforeEach, afterEach } from 'vitest';
7
+ import {} from './qwenOAuth2.js';
8
+ import { FinishReason } from '@google/genai';
9
+ import { OSAContentGenerator } from './qwenContentGenerator.js';
10
+ import { SharedTokenManager } from './sharedTokenManager.js';
11
+ import { AuthType } from '../core/contentGenerator.js';
12
+ // Mock OpenAI client to avoid real network calls
13
+ vi.mock('openai', () => ({
14
+ default: class MockOpenAI {
15
+ chat = {
16
+ completions: {
17
+ create: vi.fn(),
18
+ },
19
+ };
20
+ embeddings = {
21
+ create: vi.fn(),
22
+ };
23
+ apiKey = '';
24
+ baseURL = '';
25
+ constructor(config) {
26
+ this.apiKey = config.apiKey;
27
+ this.baseURL = config.baseURL;
28
+ }
29
+ },
30
+ }));
31
+ // Mock DashScope provider
32
+ vi.mock('../core/openaiContentGenerator/provider/dashscope.js', () => ({
33
+ DashScopeOpenAICompatibleProvider: class {
34
+ constructor(_config, _cliConfig) { }
35
+ },
36
+ }));
37
+ // Mock ContentGenerationPipeline
38
+ vi.mock('../core/openaiContentGenerator/pipeline.js', () => ({
39
+ ContentGenerationPipeline: class {
40
+ client;
41
+ constructor(_config) {
42
+ this.client = {
43
+ apiKey: '',
44
+ baseURL: '',
45
+ chat: {
46
+ completions: {
47
+ create: vi.fn(),
48
+ },
49
+ },
50
+ embeddings: {
51
+ create: vi.fn(),
52
+ },
53
+ };
54
+ }
55
+ async execute(_request, _userPromptId) {
56
+ return createMockResponse('Test response');
57
+ }
58
+ async executeStream(_request, _userPromptId) {
59
+ return (async function* () {
60
+ yield createMockResponse('Stream chunk 1');
61
+ yield createMockResponse('Stream chunk 2');
62
+ })();
63
+ }
64
+ async countTokens(_request) {
65
+ return { totalTokens: 15 };
66
+ }
67
+ async embedContent(_request) {
68
+ return { embeddings: [{ values: [0.1, 0.2, 0.3] }] };
69
+ }
70
+ },
71
+ }));
72
+ // Mock SharedTokenManager
73
+ vi.mock('./sharedTokenManager.js', () => ({
74
+ SharedTokenManager: class {
75
+ static instance = null;
76
+ mockCredentials = null;
77
+ shouldThrowError = false;
78
+ errorToThrow = null;
79
+ static getInstance() {
80
+ if (!this.instance) {
81
+ this.instance = new this();
82
+ }
83
+ return this.instance;
84
+ }
85
+ async getValidCredentials(OSAClient) {
86
+ // If we're configured to throw an error, do so
87
+ if (this.shouldThrowError && this.errorToThrow) {
88
+ throw this.errorToThrow;
89
+ }
90
+ // Try to get credentials from the mock client first to trigger auth errors
91
+ try {
92
+ const { token } = await OSAClient.getAccessToken();
93
+ if (token) {
94
+ const credentials = OSAClient.getCredentials();
95
+ return credentials;
96
+ }
97
+ }
98
+ catch (error) {
99
+ // If it's an auth error and we need to simulate refresh behavior
100
+ const errorMessage = error instanceof Error
101
+ ? error.message.toLowerCase()
102
+ : String(error).toLowerCase();
103
+ const errorCode = error?.status ||
104
+ error?.code;
105
+ const isAuthError = errorCode === 401 ||
106
+ errorCode === 403 ||
107
+ errorMessage.includes('unauthorized') ||
108
+ errorMessage.includes('forbidden') ||
109
+ errorMessage.includes('token expired');
110
+ if (isAuthError) {
111
+ // Try to refresh the token through the client
112
+ try {
113
+ const refreshResult = await OSAClient.refreshAccessToken();
114
+ if (refreshResult && !('error' in refreshResult)) {
115
+ // Refresh succeeded, update client credentials and return them
116
+ const updatedCredentials = OSAClient.getCredentials();
117
+ return updatedCredentials;
118
+ }
119
+ else {
120
+ // Refresh failed, throw appropriate error
121
+ throw new Error('Failed to obtain valid OSA access token. Please re-authenticate.');
122
+ }
123
+ }
124
+ catch {
125
+ throw new Error('Failed to obtain valid OSA access token. Please re-authenticate.');
126
+ }
127
+ }
128
+ else {
129
+ // Re-throw non-auth errors
130
+ throw error;
131
+ }
132
+ }
133
+ // Return mock credentials only if they're set
134
+ if (this.mockCredentials && this.mockCredentials.access_token) {
135
+ return this.mockCredentials;
136
+ }
137
+ // Default fallback for tests that need credentials
138
+ return {
139
+ access_token: 'valid-token',
140
+ refresh_token: 'valid-refresh-token',
141
+ resource_url: 'https://test-endpoint.com/v1',
142
+ expiry_date: Date.now() + 3600000,
143
+ };
144
+ }
145
+ getCurrentCredentials() {
146
+ return this.mockCredentials;
147
+ }
148
+ clearCache() {
149
+ this.mockCredentials = null;
150
+ }
151
+ // Helper method for tests to set credentials
152
+ setMockCredentials(credentials) {
153
+ this.mockCredentials = credentials;
154
+ }
155
+ // Helper method for tests to simulate errors
156
+ setMockError(error) {
157
+ this.shouldThrowError = !!error;
158
+ this.errorToThrow = error;
159
+ }
160
+ },
161
+ }));
162
+ // Mock the OpenAIContentGenerator parent class
163
+ vi.mock('../core/openaiContentGenerator/index.js', () => ({
164
+ OpenAIContentGenerator: class {
165
+ pipeline;
166
+ constructor(_config, _provider) {
167
+ this.pipeline = {
168
+ client: {
169
+ apiKey: 'test-key',
170
+ baseURL: 'https://api.openai.com/v1',
171
+ },
172
+ };
173
+ }
174
+ async generateContent(_request) {
175
+ return createMockResponse('Generated content');
176
+ }
177
+ async generateContentStream(_request) {
178
+ return (async function* () {
179
+ yield createMockResponse('Stream chunk 1');
180
+ yield createMockResponse('Stream chunk 2');
181
+ })();
182
+ }
183
+ async countTokens(_request) {
184
+ return { totalTokens: 15 };
185
+ }
186
+ async embedContent(_request) {
187
+ return { embeddings: [{ values: [0.1, 0.2, 0.3] }] };
188
+ }
189
+ shouldSuppressErrorLogging(_error, _request) {
190
+ return false;
191
+ }
192
+ },
193
+ }));
194
+ const createMockResponse = (text) => ({
195
+ candidates: [
196
+ {
197
+ content: { role: 'model', parts: [{ text }] },
198
+ finishReason: FinishReason.STOP,
199
+ index: 0,
200
+ safetyRatings: [],
201
+ },
202
+ ],
203
+ promptFeedback: { safetyRatings: [] },
204
+ text,
205
+ data: undefined,
206
+ functionCalls: [],
207
+ executableCode: '',
208
+ codeExecutionResult: '',
209
+ });
210
+ describe('OSAContentGenerator', () => {
211
+ let mockOSAClient;
212
+ let generator;
213
+ let mockConfig;
214
+ const mockCredentials = {
215
+ access_token: 'test-access-token',
216
+ refresh_token: 'test-refresh-token',
217
+ resource_url: 'https://test-endpoint.com/v1',
218
+ };
219
+ beforeEach(() => {
220
+ vi.clearAllMocks();
221
+ // Mock Config
222
+ mockConfig = {
223
+ getContentGeneratorConfig: vi.fn().mockReturnValue({
224
+ model: 'OSA-turbo',
225
+ apiKey: 'test-api-key',
226
+ authType: 'OSA',
227
+ baseUrl: 'https://dashscope.aliyuncs.com/compatible-mode/v1',
228
+ enableOpenAILogging: false,
229
+ timeout: 120000,
230
+ maxRetries: 3,
231
+ samplingParams: {
232
+ temperature: 0.7,
233
+ max_tokens: 1000,
234
+ top_p: 0.9,
235
+ },
236
+ }),
237
+ getCliVersion: vi.fn().mockReturnValue('1.0.0'),
238
+ getSessionId: vi.fn().mockReturnValue('test-session-id'),
239
+ getUsageStatisticsEnabled: vi.fn().mockReturnValue(false),
240
+ };
241
+ // Mock OSAOAuth2Client
242
+ mockOSAClient = {
243
+ getAccessToken: vi.fn(),
244
+ getCredentials: vi.fn(),
245
+ setCredentials: vi.fn(),
246
+ refreshAccessToken: vi.fn(),
247
+ requestDeviceAuthorization: vi.fn(),
248
+ pollDeviceToken: vi.fn(),
249
+ };
250
+ // Create OSAContentGenerator instance
251
+ const contentGeneratorConfig = {
252
+ model: 'OSA-turbo',
253
+ apiKey: 'test-api-key',
254
+ authType: AuthType.OSA_OAUTH,
255
+ baseUrl: 'https://dashscope.aliyuncs.com/compatible-mode/v1',
256
+ timeout: 120000,
257
+ maxRetries: 3,
258
+ };
259
+ generator = new OSAContentGenerator(mockOSAClient, contentGeneratorConfig, mockConfig);
260
+ });
261
+ afterEach(() => {
262
+ vi.restoreAllMocks();
263
+ });
264
+ describe('Core Content Generation Methods', () => {
265
+ it('should generate content with valid token', async () => {
266
+ vi.mocked(mockOSAClient.getAccessToken).mockResolvedValue({
267
+ token: 'valid-token',
268
+ });
269
+ vi.mocked(mockOSAClient.getCredentials).mockReturnValue(mockCredentials);
270
+ const request = {
271
+ model: 'OSA-turbo',
272
+ contents: [{ role: 'user', parts: [{ text: 'Hello' }] }],
273
+ };
274
+ const result = await generator.generateContent(request, 'test-prompt-id');
275
+ expect(result.text).toBe('Generated content');
276
+ expect(mockOSAClient.getAccessToken).toHaveBeenCalled();
277
+ });
278
+ it('should generate content stream with valid token', async () => {
279
+ vi.mocked(mockOSAClient.getAccessToken).mockResolvedValue({
280
+ token: 'valid-token',
281
+ });
282
+ vi.mocked(mockOSAClient.getCredentials).mockReturnValue(mockCredentials);
283
+ const request = {
284
+ model: 'OSA-turbo',
285
+ contents: [{ role: 'user', parts: [{ text: 'Hello stream' }] }],
286
+ };
287
+ const stream = await generator.generateContentStream(request, 'test-prompt-id');
288
+ const chunks = [];
289
+ for await (const chunk of stream) {
290
+ chunks.push(chunk.text || '');
291
+ }
292
+ expect(chunks).toEqual(['Stream chunk 1', 'Stream chunk 2']);
293
+ expect(mockOSAClient.getAccessToken).toHaveBeenCalled();
294
+ });
295
+ it('should count tokens without requiring authentication', async () => {
296
+ // Clear any previous mock calls
297
+ vi.clearAllMocks();
298
+ const request = {
299
+ model: 'OSA-turbo',
300
+ contents: [{ role: 'user', parts: [{ text: 'Count me' }] }],
301
+ };
302
+ const result = await generator.countTokens(request);
303
+ expect(result.totalTokens).toBe(15);
304
+ // countTokens is a local operation and should not require OAuth credentials
305
+ expect(mockOSAClient.getAccessToken).not.toHaveBeenCalled();
306
+ });
307
+ it('should embed content with valid token', async () => {
308
+ vi.mocked(mockOSAClient.getAccessToken).mockResolvedValue({
309
+ token: 'valid-token',
310
+ });
311
+ vi.mocked(mockOSAClient.getCredentials).mockReturnValue(mockCredentials);
312
+ const request = {
313
+ model: 'OSA-turbo',
314
+ contents: [{ parts: [{ text: 'Embed me' }] }],
315
+ };
316
+ const result = await generator.embedContent(request);
317
+ expect(result.embeddings).toHaveLength(1);
318
+ expect(result.embeddings?.[0]?.values).toEqual([0.1, 0.2, 0.3]);
319
+ expect(mockOSAClient.getAccessToken).toHaveBeenCalled();
320
+ });
321
+ });
322
+ describe('Token Management and Refresh Logic', () => {
323
+ it('should refresh token on auth error and retry', async () => {
324
+ const authError = { status: 401, message: 'Unauthorized' };
325
+ // First call fails with auth error, second call succeeds
326
+ vi.mocked(mockOSAClient.getAccessToken)
327
+ .mockRejectedValueOnce(authError)
328
+ .mockResolvedValueOnce({ token: 'refreshed-token' });
329
+ // Refresh succeeds
330
+ vi.mocked(mockOSAClient.refreshAccessToken).mockResolvedValue({
331
+ access_token: 'refreshed-token',
332
+ token_type: 'Bearer',
333
+ expires_in: 3600,
334
+ resource_url: 'https://refreshed-endpoint.com',
335
+ });
336
+ // Set credentials for second call
337
+ vi.mocked(mockOSAClient.getCredentials).mockReturnValue({
338
+ access_token: 'refreshed-token',
339
+ token_type: 'Bearer',
340
+ refresh_token: 'refresh-token',
341
+ resource_url: 'https://refreshed-endpoint.com',
342
+ expiry_date: Date.now() + 3600000,
343
+ });
344
+ const request = {
345
+ model: 'OSA-turbo',
346
+ contents: [{ role: 'user', parts: [{ text: 'Hello' }] }],
347
+ };
348
+ const result = await generator.generateContent(request, 'test-prompt-id');
349
+ expect(result.text).toBe('Generated content');
350
+ expect(mockOSAClient.refreshAccessToken).toHaveBeenCalled();
351
+ });
352
+ it('should refresh token on auth error and retry for content stream', async () => {
353
+ const authError = { status: 401, message: 'Unauthorized' };
354
+ // Reset mocks for this test
355
+ vi.clearAllMocks();
356
+ // First call fails with auth error, second call succeeds
357
+ vi.mocked(mockOSAClient.getAccessToken)
358
+ .mockRejectedValueOnce(authError)
359
+ .mockResolvedValueOnce({ token: 'refreshed-stream-token' });
360
+ // Refresh succeeds
361
+ vi.mocked(mockOSAClient.refreshAccessToken).mockResolvedValue({
362
+ access_token: 'refreshed-stream-token',
363
+ token_type: 'Bearer',
364
+ expires_in: 3600,
365
+ resource_url: 'https://refreshed-stream-endpoint.com',
366
+ });
367
+ // Set credentials for second call
368
+ vi.mocked(mockOSAClient.getCredentials).mockReturnValue({
369
+ access_token: 'refreshed-stream-token',
370
+ token_type: 'Bearer',
371
+ refresh_token: 'refresh-token',
372
+ resource_url: 'https://refreshed-stream-endpoint.com',
373
+ expiry_date: Date.now() + 3600000,
374
+ });
375
+ const request = {
376
+ model: 'OSA-turbo',
377
+ contents: [{ role: 'user', parts: [{ text: 'Hello stream' }] }],
378
+ };
379
+ const stream = await generator.generateContentStream(request, 'test-prompt-id');
380
+ const chunks = [];
381
+ for await (const chunk of stream) {
382
+ chunks.push(chunk.text || '');
383
+ }
384
+ expect(chunks).toEqual(['Stream chunk 1', 'Stream chunk 2']);
385
+ expect(mockOSAClient.refreshAccessToken).toHaveBeenCalled();
386
+ });
387
+ it('should handle token refresh failure', async () => {
388
+ // Mock the SharedTokenManager to throw an error
389
+ const mockTokenManager = SharedTokenManager.getInstance();
390
+ mockTokenManager.setMockError(new Error('Failed to obtain valid OSA access token. Please re-authenticate.'));
391
+ const request = {
392
+ model: 'OSA-turbo',
393
+ contents: [{ role: 'user', parts: [{ text: 'Hello' }] }],
394
+ };
395
+ await expect(generator.generateContent(request, 'test-prompt-id')).rejects.toThrow('Failed to obtain valid OSA access token. Please re-authenticate.');
396
+ // Clean up
397
+ mockTokenManager.setMockError(null);
398
+ });
399
+ it('should update endpoint when token is refreshed', async () => {
400
+ vi.mocked(mockOSAClient.getAccessToken).mockResolvedValue({
401
+ token: 'valid-token',
402
+ });
403
+ vi.mocked(mockOSAClient.getCredentials).mockReturnValue({
404
+ ...mockCredentials,
405
+ resource_url: 'https://new-endpoint.com',
406
+ });
407
+ const request = {
408
+ model: 'OSA-turbo',
409
+ contents: [{ role: 'user', parts: [{ text: 'Hello' }] }],
410
+ };
411
+ await generator.generateContent(request, 'test-prompt-id');
412
+ expect(mockOSAClient.getCredentials).toHaveBeenCalled();
413
+ });
414
+ });
415
+ describe('Endpoint URL Normalization', () => {
416
+ it('should use default endpoint when no custom endpoint provided', async () => {
417
+ let capturedBaseURL = '';
418
+ vi.mocked(mockOSAClient.getAccessToken).mockResolvedValue({
419
+ token: 'valid-token',
420
+ });
421
+ vi.mocked(mockOSAClient.getCredentials).mockReturnValue({
422
+ access_token: 'test-token',
423
+ refresh_token: 'test-refresh',
424
+ // No resource_url provided
425
+ });
426
+ // Mock the parent's generateContent to capture the baseURL during the call
427
+ const parentPrototype = Object.getPrototypeOf(Object.getPrototypeOf(OSAContentGenerator));
428
+ const originalGenerateContent = parentPrototype.generateContent;
429
+ parentPrototype.generateContent = vi.fn().mockImplementation(function () {
430
+ capturedBaseURL = this.pipeline.client.baseURL;
431
+ return createMockResponse('Generated content');
432
+ });
433
+ const request = {
434
+ model: 'OSA-turbo',
435
+ contents: [{ role: 'user', parts: [{ text: 'Hello' }] }],
436
+ };
437
+ await generator.generateContent(request, 'test-prompt-id');
438
+ // Should use default endpoint with /v1 suffix
439
+ expect(capturedBaseURL).toBe('https://dashscope.aliyuncs.com/compatible-mode/v1');
440
+ // Restore original method
441
+ parentPrototype.generateContent = originalGenerateContent;
442
+ });
443
+ it('should normalize hostname-only endpoints by adding https protocol', async () => {
444
+ let capturedBaseURL = '';
445
+ vi.mocked(mockOSAClient.getAccessToken).mockResolvedValue({
446
+ token: 'valid-token',
447
+ });
448
+ vi.mocked(mockOSAClient.getCredentials).mockReturnValue({
449
+ ...mockCredentials,
450
+ resource_url: 'custom-endpoint.com',
451
+ });
452
+ // Mock the parent's generateContent to capture the baseURL during the call
453
+ const parentPrototype = Object.getPrototypeOf(Object.getPrototypeOf(OSAContentGenerator));
454
+ const originalGenerateContent = parentPrototype.generateContent;
455
+ parentPrototype.generateContent = vi.fn().mockImplementation(function () {
456
+ capturedBaseURL = this.pipeline.client.baseURL;
457
+ return createMockResponse('Generated content');
458
+ });
459
+ const request = {
460
+ model: 'OSA-turbo',
461
+ contents: [{ role: 'user', parts: [{ text: 'Hello' }] }],
462
+ };
463
+ await generator.generateContent(request, 'test-prompt-id');
464
+ // Should add https:// and /v1
465
+ expect(capturedBaseURL).toBe('https://custom-endpoint.com/v1');
466
+ // Restore original method
467
+ parentPrototype.generateContent = originalGenerateContent;
468
+ });
469
+ it('should preserve existing protocol in endpoint URLs', async () => {
470
+ let capturedBaseURL = '';
471
+ vi.mocked(mockOSAClient.getAccessToken).mockResolvedValue({
472
+ token: 'valid-token',
473
+ });
474
+ vi.mocked(mockOSAClient.getCredentials).mockReturnValue({
475
+ ...mockCredentials,
476
+ resource_url: 'https://custom-endpoint.com',
477
+ });
478
+ // Mock the parent's generateContent to capture the baseURL during the call
479
+ const parentPrototype = Object.getPrototypeOf(Object.getPrototypeOf(OSAContentGenerator));
480
+ const originalGenerateContent = parentPrototype.generateContent;
481
+ parentPrototype.generateContent = vi.fn().mockImplementation(function () {
482
+ capturedBaseURL = this.pipeline.client.baseURL;
483
+ return createMockResponse('Generated content');
484
+ });
485
+ const request = {
486
+ model: 'OSA-turbo',
487
+ contents: [{ role: 'user', parts: [{ text: 'Hello' }] }],
488
+ };
489
+ await generator.generateContent(request, 'test-prompt-id');
490
+ // Should preserve https:// and add /v1
491
+ expect(capturedBaseURL).toBe('https://custom-endpoint.com/v1');
492
+ // Restore original method
493
+ parentPrototype.generateContent = originalGenerateContent;
494
+ });
495
+ it('should not duplicate /v1 suffix if already present', async () => {
496
+ let capturedBaseURL = '';
497
+ vi.mocked(mockOSAClient.getAccessToken).mockResolvedValue({
498
+ token: 'valid-token',
499
+ });
500
+ vi.mocked(mockOSAClient.getCredentials).mockReturnValue({
501
+ ...mockCredentials,
502
+ resource_url: 'https://custom-endpoint.com/v1',
503
+ });
504
+ // Mock the parent's generateContent to capture the baseURL during the call
505
+ const parentPrototype = Object.getPrototypeOf(Object.getPrototypeOf(OSAContentGenerator));
506
+ const originalGenerateContent = parentPrototype.generateContent;
507
+ parentPrototype.generateContent = vi.fn().mockImplementation(function () {
508
+ capturedBaseURL = this.pipeline.client.baseURL;
509
+ return createMockResponse('Generated content');
510
+ });
511
+ const request = {
512
+ model: 'OSA-turbo',
513
+ contents: [{ role: 'user', parts: [{ text: 'Hello' }] }],
514
+ };
515
+ await generator.generateContent(request, 'test-prompt-id');
516
+ // Should not duplicate /v1
517
+ expect(capturedBaseURL).toBe('https://custom-endpoint.com/v1');
518
+ // Restore original method
519
+ parentPrototype.generateContent = originalGenerateContent;
520
+ });
521
+ });
522
+ describe('Client State Management', () => {
523
+ it('should set dynamic credentials during operations', async () => {
524
+ const client = OSAContentGenerator.pipeline.client;
525
+ vi.mocked(mockOSAClient.getAccessToken).mockResolvedValue({
526
+ token: 'temp-token',
527
+ });
528
+ vi.mocked(mockOSAClient.getCredentials).mockReturnValue({
529
+ ...mockCredentials,
530
+ access_token: 'temp-token',
531
+ resource_url: 'https://temp-endpoint.com',
532
+ });
533
+ const request = {
534
+ model: 'OSA-turbo',
535
+ contents: [{ role: 'user', parts: [{ text: 'Hello' }] }],
536
+ };
537
+ await generator.generateContent(request, 'test-prompt-id');
538
+ // Should have dynamic credentials set
539
+ expect(client.apiKey).toBe('temp-token');
540
+ expect(client.baseURL).toBe('https://temp-endpoint.com/v1');
541
+ });
542
+ it('should set credentials even when operation throws', async () => {
543
+ const client = OSAContentGenerator.pipeline.client;
544
+ vi.mocked(mockOSAClient.getAccessToken).mockResolvedValue({
545
+ token: 'temp-token',
546
+ });
547
+ vi.mocked(mockOSAClient.getCredentials).mockReturnValue({
548
+ ...mockCredentials,
549
+ access_token: 'temp-token',
550
+ });
551
+ // Mock the parent method to throw an error
552
+ const mockError = new Error('Network error');
553
+ const parentPrototype = Object.getPrototypeOf(Object.getPrototypeOf(OSAContentGenerator));
554
+ const originalGenerateContent = parentPrototype.generateContent;
555
+ parentPrototype.generateContent = vi.fn().mockRejectedValue(mockError);
556
+ const request = {
557
+ model: 'OSA-turbo',
558
+ contents: [{ role: 'user', parts: [{ text: 'Hello' }] }],
559
+ };
560
+ try {
561
+ await generator.generateContent(request, 'test-prompt-id');
562
+ }
563
+ catch (error) {
564
+ expect(error).toBe(mockError);
565
+ }
566
+ // Credentials should still be set before the error occurred
567
+ expect(client.apiKey).toBe('temp-token');
568
+ expect(client.baseURL).toBe('https://test-endpoint.com/v1');
569
+ // Restore original method
570
+ parentPrototype.generateContent = originalGenerateContent;
571
+ });
572
+ });
573
+ describe('Error Handling and Retry Logic', () => {
574
+ it('should retry once on authentication errors', async () => {
575
+ const authError = { status: 401, message: 'Unauthorized' };
576
+ // Mock first call to fail with auth error
577
+ const mockGenerateContent = vi
578
+ .fn()
579
+ .mockRejectedValueOnce(authError)
580
+ .mockResolvedValueOnce(createMockResponse('Success after retry'));
581
+ // Replace the parent method
582
+ const parentPrototype = Object.getPrototypeOf(Object.getPrototypeOf(OSAContentGenerator));
583
+ const originalGenerateContent = parentPrototype.generateContent;
584
+ parentPrototype.generateContent = mockGenerateContent;
585
+ // Mock getAccessToken to fail initially, then succeed
586
+ let getAccessTokenCallCount = 0;
587
+ vi.mocked(mockOSAClient.getAccessToken).mockImplementation(async () => {
588
+ getAccessTokenCallCount++;
589
+ if (getAccessTokenCallCount <= 2) {
590
+ throw authError; // Fail on first two calls (initial + retry)
591
+ }
592
+ return { token: 'refreshed-token' }; // Succeed after refresh
593
+ });
594
+ vi.mocked(mockOSAClient.getCredentials).mockReturnValue({
595
+ access_token: 'refreshed-token',
596
+ token_type: 'Bearer',
597
+ refresh_token: 'refresh-token',
598
+ resource_url: 'https://test-endpoint.com',
599
+ expiry_date: Date.now() + 3600000,
600
+ });
601
+ vi.mocked(mockOSAClient.refreshAccessToken).mockResolvedValue({
602
+ access_token: 'refreshed-token',
603
+ token_type: 'Bearer',
604
+ expires_in: 3600,
605
+ });
606
+ const request = {
607
+ model: 'OSA-turbo',
608
+ contents: [{ role: 'user', parts: [{ text: 'Hello' }] }],
609
+ };
610
+ const result = await generator.generateContent(request, 'test-prompt-id');
611
+ expect(result.text).toBe('Success after retry');
612
+ expect(mockGenerateContent).toHaveBeenCalledTimes(2);
613
+ expect(mockOSAClient.refreshAccessToken).toHaveBeenCalled();
614
+ // Restore original method
615
+ parentPrototype.generateContent = originalGenerateContent;
616
+ });
617
+ it('should not retry non-authentication errors', async () => {
618
+ const networkError = new Error('Network timeout');
619
+ const mockGenerateContent = vi.fn().mockRejectedValue(networkError);
620
+ const parentPrototype = Object.getPrototypeOf(Object.getPrototypeOf(OSAContentGenerator));
621
+ const originalGenerateContent = parentPrototype.generateContent;
622
+ parentPrototype.generateContent = mockGenerateContent;
623
+ vi.mocked(mockOSAClient.getAccessToken).mockResolvedValue({
624
+ token: 'valid-token',
625
+ });
626
+ vi.mocked(mockOSAClient.getCredentials).mockReturnValue(mockCredentials);
627
+ const request = {
628
+ model: 'OSA-turbo',
629
+ contents: [{ role: 'user', parts: [{ text: 'Hello' }] }],
630
+ };
631
+ await expect(generator.generateContent(request, 'test-prompt-id')).rejects.toThrow('Network timeout');
632
+ expect(mockGenerateContent).toHaveBeenCalledTimes(1);
633
+ expect(mockOSAClient.refreshAccessToken).not.toHaveBeenCalled();
634
+ // Restore original method
635
+ parentPrototype.generateContent = originalGenerateContent;
636
+ });
637
+ it('should handle error response from token refresh', async () => {
638
+ vi.mocked(mockOSAClient.getAccessToken).mockRejectedValue(new Error('Token expired'));
639
+ vi.mocked(mockOSAClient.refreshAccessToken).mockResolvedValue({
640
+ error: 'invalid_grant',
641
+ error_description: 'Refresh token expired',
642
+ });
643
+ const request = {
644
+ model: 'OSA-turbo',
645
+ contents: [{ role: 'user', parts: [{ text: 'Hello' }] }],
646
+ };
647
+ await expect(generator.generateContent(request, 'test-prompt-id')).rejects.toThrow('Failed to obtain valid OSA access token');
648
+ });
649
+ });
650
+ describe('Token State Management', () => {
651
+ it('should cache and return current token', () => {
652
+ expect(generator.getCurrentToken()).toBeNull();
653
+ // Simulate setting a token internally
654
+ OSAContentGenerator.currentToken = 'cached-token';
655
+ expect(generator.getCurrentToken()).toBe('cached-token');
656
+ });
657
+ it('should clear token on clearToken()', () => {
658
+ // Simulate having cached token value
659
+ const OSAInstance = OSAContentGenerator;
660
+ OSAInstance.currentToken = 'cached-token';
661
+ generator.clearToken();
662
+ expect(generator.getCurrentToken()).toBeNull();
663
+ });
664
+ it('should handle concurrent token refresh requests', async () => {
665
+ let refreshCallCount = 0;
666
+ // Clear any existing cached token first
667
+ generator.clearToken();
668
+ // Mock to simulate auth error on first parent call, which should trigger refresh
669
+ const authError = { status: 401, message: 'Unauthorized' };
670
+ let parentCallCount = 0;
671
+ vi.mocked(mockOSAClient.getAccessToken).mockRejectedValue(authError);
672
+ vi.mocked(mockOSAClient.getCredentials).mockReturnValue(mockCredentials);
673
+ vi.mocked(mockOSAClient.refreshAccessToken).mockImplementation(async () => {
674
+ refreshCallCount++;
675
+ await new Promise((resolve) => setTimeout(resolve, 50)); // Longer delay to ensure concurrency
676
+ return {
677
+ access_token: 'refreshed-token',
678
+ token_type: 'Bearer',
679
+ expires_in: 3600,
680
+ };
681
+ });
682
+ // Mock the parent method to fail first then succeed
683
+ const parentPrototype = Object.getPrototypeOf(Object.getPrototypeOf(OSAContentGenerator));
684
+ const originalGenerateContent = parentPrototype.generateContent;
685
+ parentPrototype.generateContent = vi.fn().mockImplementation(async () => {
686
+ parentCallCount++;
687
+ if (parentCallCount === 1) {
688
+ throw authError; // First call triggers auth error
689
+ }
690
+ return createMockResponse('Generated content');
691
+ });
692
+ const request = {
693
+ model: 'OSA-turbo',
694
+ contents: [{ role: 'user', parts: [{ text: 'Hello' }] }],
695
+ };
696
+ // Make multiple concurrent requests - should all use the same refresh promise
697
+ const promises = [
698
+ generator.generateContent(request, 'test-prompt-id'),
699
+ generator.generateContent(request, 'test-prompt-id'),
700
+ generator.generateContent(request, 'test-prompt-id'),
701
+ ];
702
+ const results = await Promise.all(promises);
703
+ // All should succeed
704
+ results.forEach((result) => {
705
+ expect(result.text).toBe('Generated content');
706
+ });
707
+ // The main test is that all requests succeed without crashing
708
+ expect(results).toHaveLength(3);
709
+ // With our new implementation through SharedTokenManager, refresh should still be called
710
+ expect(refreshCallCount).toBeGreaterThanOrEqual(1);
711
+ // Restore original method
712
+ parentPrototype.generateContent = originalGenerateContent;
713
+ });
714
+ });
715
+ describe('Error Logging Suppression', () => {
716
+ it('should suppress logging for authentication errors', () => {
717
+ const authErrors = [
718
+ { status: 401 },
719
+ { code: 403 },
720
+ new Error('Unauthorized access'),
721
+ new Error('Token expired'),
722
+ new Error('Invalid API key'),
723
+ ];
724
+ authErrors.forEach((error) => {
725
+ const shouldSuppress = OSAContentGenerator.shouldSuppressErrorLogging(error, {});
726
+ expect(shouldSuppress).toBe(true);
727
+ });
728
+ });
729
+ it('should not suppress logging for non-auth errors', () => {
730
+ const nonAuthErrors = [
731
+ new Error('Network timeout'),
732
+ new Error('Rate limit exceeded'),
733
+ { status: 500 },
734
+ new Error('Internal server error'),
735
+ ];
736
+ nonAuthErrors.forEach((error) => {
737
+ const shouldSuppress = OSAContentGenerator.shouldSuppressErrorLogging(error, {});
738
+ expect(shouldSuppress).toBe(false);
739
+ });
740
+ });
741
+ });
742
+ describe('Integration Tests', () => {
743
+ it('should handle complete workflow: get token, use it, refresh on auth error, retry', async () => {
744
+ const authError = { status: 401, message: 'Token expired' };
745
+ // Setup complex scenario
746
+ let callCount = 0;
747
+ const mockGenerateContent = vi.fn().mockImplementation(async () => {
748
+ callCount++;
749
+ if (callCount === 1) {
750
+ throw authError; // First call fails
751
+ }
752
+ return createMockResponse('Success after refresh'); // Second call succeeds
753
+ });
754
+ const parentPrototype = Object.getPrototypeOf(Object.getPrototypeOf(OSAContentGenerator));
755
+ parentPrototype.generateContent = mockGenerateContent;
756
+ // Mock getAccessToken to fail initially, then succeed
757
+ let getAccessTokenCallCount = 0;
758
+ vi.mocked(mockOSAClient.getAccessToken).mockImplementation(async () => {
759
+ getAccessTokenCallCount++;
760
+ if (getAccessTokenCallCount <= 2) {
761
+ throw authError; // Fail on first two calls (initial + retry)
762
+ }
763
+ return { token: 'new-token' }; // Succeed after refresh
764
+ });
765
+ vi.mocked(mockOSAClient.getCredentials).mockReturnValue({
766
+ access_token: 'new-token',
767
+ token_type: 'Bearer',
768
+ refresh_token: 'refresh-token',
769
+ resource_url: 'https://new-endpoint.com',
770
+ expiry_date: Date.now() + 7200000,
771
+ });
772
+ vi.mocked(mockOSAClient.refreshAccessToken).mockResolvedValue({
773
+ access_token: 'new-token',
774
+ token_type: 'Bearer',
775
+ expires_in: 7200,
776
+ resource_url: 'https://new-endpoint.com',
777
+ });
778
+ const request = {
779
+ model: 'OSA-turbo',
780
+ contents: [{ role: 'user', parts: [{ text: 'Test message' }] }],
781
+ };
782
+ const result = await generator.generateContent(request, 'test-prompt-id');
783
+ expect(result.text).toBe('Success after refresh');
784
+ expect(mockOSAClient.getAccessToken).toHaveBeenCalled();
785
+ expect(mockOSAClient.refreshAccessToken).toHaveBeenCalled();
786
+ expect(callCount).toBe(2); // Initial call + retry
787
+ });
788
+ });
789
+ describe('SharedTokenManager Integration', () => {
790
+ it('should use SharedTokenManager to get valid credentials', async () => {
791
+ const mockTokenManager = {
792
+ getValidCredentials: vi.fn().mockResolvedValue({
793
+ access_token: 'manager-token',
794
+ resource_url: 'https://manager-endpoint.com',
795
+ }),
796
+ getCurrentCredentials: vi.fn(),
797
+ clearCache: vi.fn(),
798
+ };
799
+ // Mock the SharedTokenManager.getInstance()
800
+ const originalGetInstance = SharedTokenManager.getInstance;
801
+ SharedTokenManager.getInstance = vi
802
+ .fn()
803
+ .mockReturnValue(mockTokenManager);
804
+ // Create new instance to pick up the mock
805
+ const newGenerator = new OSAContentGenerator(mockOSAClient, { model: 'OSA-turbo', authType: AuthType.OSA_OAUTH }, mockConfig);
806
+ const request = {
807
+ model: 'OSA-turbo',
808
+ contents: [{ role: 'user', parts: [{ text: 'Hello' }] }],
809
+ };
810
+ await newGenerator.generateContent(request, 'test-prompt-id');
811
+ expect(mockTokenManager.getValidCredentials).toHaveBeenCalledWith(mockOSAClient);
812
+ // Restore original
813
+ SharedTokenManager.getInstance = originalGetInstance;
814
+ });
815
+ it('should handle SharedTokenManager errors gracefully', async () => {
816
+ const mockTokenManager = {
817
+ getValidCredentials: vi
818
+ .fn()
819
+ .mockRejectedValue(new Error('Token manager error')),
820
+ getCurrentCredentials: vi.fn(),
821
+ clearCache: vi.fn(),
822
+ };
823
+ const originalGetInstance = SharedTokenManager.getInstance;
824
+ SharedTokenManager.getInstance = vi
825
+ .fn()
826
+ .mockReturnValue(mockTokenManager);
827
+ const newGenerator = new OSAContentGenerator(mockOSAClient, { model: 'OSA-turbo', authType: AuthType.OSA_OAUTH }, mockConfig);
828
+ const request = {
829
+ model: 'OSA-turbo',
830
+ contents: [{ role: 'user', parts: [{ text: 'Hello' }] }],
831
+ };
832
+ await expect(newGenerator.generateContent(request, 'test-prompt-id')).rejects.toThrow('Failed to obtain valid OSA access token');
833
+ SharedTokenManager.getInstance = originalGetInstance;
834
+ });
835
+ it('should handle missing access token from credentials', async () => {
836
+ const mockTokenManager = {
837
+ getValidCredentials: vi.fn().mockResolvedValue({
838
+ access_token: undefined,
839
+ resource_url: 'https://test-endpoint.com',
840
+ }),
841
+ getCurrentCredentials: vi.fn(),
842
+ clearCache: vi.fn(),
843
+ };
844
+ const originalGetInstance = SharedTokenManager.getInstance;
845
+ SharedTokenManager.getInstance = vi
846
+ .fn()
847
+ .mockReturnValue(mockTokenManager);
848
+ const newGenerator = new OSAContentGenerator(mockOSAClient, { model: 'OSA-turbo', authType: AuthType.OSA_OAUTH }, mockConfig);
849
+ const request = {
850
+ model: 'OSA-turbo',
851
+ contents: [{ role: 'user', parts: [{ text: 'Hello' }] }],
852
+ };
853
+ await expect(newGenerator.generateContent(request, 'test-prompt-id')).rejects.toThrow('Failed to obtain valid OSA access token');
854
+ SharedTokenManager.getInstance = originalGetInstance;
855
+ });
856
+ });
857
+ describe('getCurrentEndpoint Method', () => {
858
+ it('should handle URLs with custom ports', () => {
859
+ const endpoints = [
860
+ { input: 'localhost:8080', expected: 'https://localhost:8080/v1' },
861
+ {
862
+ input: 'http://localhost:8080',
863
+ expected: 'http://localhost:8080/v1',
864
+ },
865
+ {
866
+ input: 'https://api.example.com:443',
867
+ expected: 'https://api.example.com:443/v1',
868
+ },
869
+ {
870
+ input: 'api.example.com:9000/api',
871
+ expected: 'https://api.example.com:9000/api/v1',
872
+ },
873
+ ];
874
+ endpoints.forEach(({ input, expected }) => {
875
+ vi.mocked(mockOSAClient.getAccessToken).mockResolvedValue({
876
+ token: 'test-token',
877
+ });
878
+ vi.mocked(mockOSAClient.getCredentials).mockReturnValue({
879
+ ...mockCredentials,
880
+ resource_url: input,
881
+ });
882
+ const generator = OSAContentGenerator;
883
+ expect(generator.getCurrentEndpoint(input)).toBe(expected);
884
+ });
885
+ });
886
+ it('should handle URLs with existing paths', () => {
887
+ const endpoints = [
888
+ {
889
+ input: 'https://api.example.com/api',
890
+ expected: 'https://api.example.com/api/v1',
891
+ },
892
+ {
893
+ input: 'api.example.com/api/v2',
894
+ expected: 'https://api.example.com/api/v2/v1',
895
+ },
896
+ {
897
+ input: 'https://api.example.com/api/v1',
898
+ expected: 'https://api.example.com/api/v1',
899
+ },
900
+ ];
901
+ endpoints.forEach(({ input, expected }) => {
902
+ const generator = OSAContentGenerator;
903
+ expect(generator.getCurrentEndpoint(input)).toBe(expected);
904
+ });
905
+ });
906
+ it('should handle undefined resource URL', () => {
907
+ const generator = OSAContentGenerator;
908
+ expect(generator.getCurrentEndpoint(undefined)).toBe('https://dashscope.aliyuncs.com/compatible-mode/v1');
909
+ });
910
+ it('should handle empty resource URL', () => {
911
+ const generator = OSAContentGenerator;
912
+ // Empty string should fall back to default endpoint
913
+ expect(generator.getCurrentEndpoint('')).toBe('https://dashscope.aliyuncs.com/compatible-mode/v1');
914
+ });
915
+ });
916
+ describe('isAuthError Method Enhanced', () => {
917
+ it('should identify auth errors by numeric status codes', () => {
918
+ const authErrors = [
919
+ { code: 401 },
920
+ { status: 403 },
921
+ { code: '401' }, // String status codes
922
+ { status: '403' },
923
+ ];
924
+ authErrors.forEach((error) => {
925
+ const generator = OSAContentGenerator;
926
+ expect(generator.isAuthError(error)).toBe(true);
927
+ });
928
+ // 400 is not typically an auth error, it's bad request
929
+ const nonAuthError = { status: 400 };
930
+ const generator = OSAContentGenerator;
931
+ expect(generator.isAuthError(nonAuthError)).toBe(false);
932
+ });
933
+ it('should identify auth errors by message content variations', () => {
934
+ const authMessages = [
935
+ 'UNAUTHORIZED access',
936
+ 'Access is FORBIDDEN',
937
+ 'Invalid API Key provided',
938
+ 'Invalid Access Token',
939
+ 'Token has Expired',
940
+ 'Authentication Required',
941
+ 'Access Denied by server',
942
+ 'The token has expired and needs refresh',
943
+ 'Bearer token expired',
944
+ ];
945
+ authMessages.forEach((message) => {
946
+ const error = new Error(message);
947
+ const generator = OSAContentGenerator;
948
+ expect(generator.isAuthError(error)).toBe(true);
949
+ });
950
+ });
951
+ it('should not identify non-auth errors', () => {
952
+ const nonAuthErrors = [
953
+ new Error('Network timeout'),
954
+ new Error('Rate limit exceeded'),
955
+ { status: 500 },
956
+ { code: 429 },
957
+ 'Internal server error',
958
+ null,
959
+ undefined,
960
+ '',
961
+ { status: 200 },
962
+ new Error('Model not found'),
963
+ ];
964
+ nonAuthErrors.forEach((error) => {
965
+ const generator = OSAContentGenerator;
966
+ expect(generator.isAuthError(error)).toBe(false);
967
+ });
968
+ });
969
+ it('should handle complex error objects', () => {
970
+ const complexErrors = [
971
+ { error: { status: 401, message: 'Unauthorized' } },
972
+ { response: { status: 403 } },
973
+ { details: { code: 401 } },
974
+ ];
975
+ // These should not be identified as auth errors because the method only looks at top-level properties
976
+ complexErrors.forEach((error) => {
977
+ const generator = OSAContentGenerator;
978
+ expect(generator.isAuthError(error)).toBe(false);
979
+ });
980
+ });
981
+ });
982
+ describe('Stream Error Handling', () => {
983
+ it('should set credentials when stream generation fails', async () => {
984
+ const client = OSAContentGenerator.pipeline.client;
985
+ vi.mocked(mockOSAClient.getAccessToken).mockResolvedValue({
986
+ token: 'stream-token',
987
+ });
988
+ vi.mocked(mockOSAClient.getCredentials).mockReturnValue({
989
+ ...mockCredentials,
990
+ access_token: 'stream-token',
991
+ resource_url: 'https://stream-endpoint.com',
992
+ });
993
+ // Mock parent method to throw error
994
+ const parentPrototype = Object.getPrototypeOf(Object.getPrototypeOf(OSAContentGenerator));
995
+ const originalGenerateContentStream = parentPrototype.generateContentStream;
996
+ parentPrototype.generateContentStream = vi
997
+ .fn()
998
+ .mockRejectedValue(new Error('Stream error'));
999
+ const request = {
1000
+ model: 'OSA-turbo',
1001
+ contents: [{ role: 'user', parts: [{ text: 'Stream test' }] }],
1002
+ };
1003
+ try {
1004
+ await generator.generateContentStream(request, 'test-prompt-id');
1005
+ }
1006
+ catch (error) {
1007
+ expect(error).toBeInstanceOf(Error);
1008
+ }
1009
+ // Credentials should be set before the error occurred
1010
+ expect(client.apiKey).toBe('stream-token');
1011
+ expect(client.baseURL).toBe('https://stream-endpoint.com/v1');
1012
+ // Restore original method
1013
+ parentPrototype.generateContentStream = originalGenerateContentStream;
1014
+ });
1015
+ it('should set credentials for successful streams', async () => {
1016
+ const client = OSAContentGenerator.pipeline.client;
1017
+ // Set up the mock to return stream credentials
1018
+ const streamCredentials = {
1019
+ access_token: 'stream-token',
1020
+ refresh_token: 'stream-refresh-token',
1021
+ resource_url: 'https://stream-endpoint.com',
1022
+ expiry_date: Date.now() + 3600000,
1023
+ };
1024
+ vi.mocked(mockOSAClient.getAccessToken).mockResolvedValue({
1025
+ token: 'stream-token',
1026
+ });
1027
+ vi.mocked(mockOSAClient.getCredentials).mockReturnValue(streamCredentials);
1028
+ // Set the SharedTokenManager mock to return stream credentials
1029
+ const mockTokenManager = SharedTokenManager.getInstance();
1030
+ mockTokenManager.setMockCredentials(streamCredentials);
1031
+ const request = {
1032
+ model: 'OSA-turbo',
1033
+ contents: [{ role: 'user', parts: [{ text: 'Stream test' }] }],
1034
+ };
1035
+ const stream = await generator.generateContentStream(request, 'test-prompt-id');
1036
+ // After successful stream creation, credentials should be set for the stream
1037
+ expect(client.apiKey).toBe('stream-token');
1038
+ expect(client.baseURL).toBe('https://stream-endpoint.com/v1');
1039
+ // Verify stream is iterable and consume it
1040
+ expect(stream).toBeDefined();
1041
+ const chunks = [];
1042
+ for await (const chunk of stream) {
1043
+ chunks.push(chunk);
1044
+ }
1045
+ expect(chunks).toHaveLength(2);
1046
+ // Clean up
1047
+ mockTokenManager.setMockCredentials(null);
1048
+ });
1049
+ });
1050
+ describe('Token and Endpoint Management', () => {
1051
+ it('should get current token from SharedTokenManager', () => {
1052
+ const mockTokenManager = {
1053
+ getCurrentCredentials: vi.fn().mockReturnValue({
1054
+ access_token: 'current-token',
1055
+ }),
1056
+ };
1057
+ const originalGetInstance = SharedTokenManager.getInstance;
1058
+ SharedTokenManager.getInstance = vi
1059
+ .fn()
1060
+ .mockReturnValue(mockTokenManager);
1061
+ const newGenerator = new OSAContentGenerator(mockOSAClient, { model: 'OSA-turbo', authType: AuthType.OSA_OAUTH }, mockConfig);
1062
+ expect(newGenerator.getCurrentToken()).toBe('current-token');
1063
+ SharedTokenManager.getInstance = originalGetInstance;
1064
+ });
1065
+ it('should return null when no credentials available', () => {
1066
+ const mockTokenManager = {
1067
+ getCurrentCredentials: vi.fn().mockReturnValue(null),
1068
+ };
1069
+ const originalGetInstance = SharedTokenManager.getInstance;
1070
+ SharedTokenManager.getInstance = vi
1071
+ .fn()
1072
+ .mockReturnValue(mockTokenManager);
1073
+ const newGenerator = new OSAContentGenerator(mockOSAClient, { model: 'OSA-turbo', authType: AuthType.OSA_OAUTH }, mockConfig);
1074
+ expect(newGenerator.getCurrentToken()).toBeNull();
1075
+ SharedTokenManager.getInstance = originalGetInstance;
1076
+ });
1077
+ it('should return null when credentials have no access token', () => {
1078
+ const mockTokenManager = {
1079
+ getCurrentCredentials: vi.fn().mockReturnValue({
1080
+ access_token: undefined,
1081
+ }),
1082
+ };
1083
+ const originalGetInstance = SharedTokenManager.getInstance;
1084
+ SharedTokenManager.getInstance = vi
1085
+ .fn()
1086
+ .mockReturnValue(mockTokenManager);
1087
+ const newGenerator = new OSAContentGenerator(mockOSAClient, { model: 'OSA-turbo', authType: AuthType.OSA_OAUTH }, mockConfig);
1088
+ expect(newGenerator.getCurrentToken()).toBeNull();
1089
+ SharedTokenManager.getInstance = originalGetInstance;
1090
+ });
1091
+ it('should clear token through SharedTokenManager', () => {
1092
+ const mockTokenManager = {
1093
+ clearCache: vi.fn(),
1094
+ };
1095
+ const originalGetInstance = SharedTokenManager.getInstance;
1096
+ SharedTokenManager.getInstance = vi
1097
+ .fn()
1098
+ .mockReturnValue(mockTokenManager);
1099
+ const newGenerator = new OSAContentGenerator(mockOSAClient, { model: 'OSA-turbo', authType: AuthType.OSA_OAUTH }, mockConfig);
1100
+ newGenerator.clearToken();
1101
+ expect(mockTokenManager.clearCache).toHaveBeenCalled();
1102
+ SharedTokenManager.getInstance = originalGetInstance;
1103
+ });
1104
+ });
1105
+ describe('Constructor and Initialization', () => {
1106
+ it('should initialize with configured base URL when provided', () => {
1107
+ const generator = new OSAContentGenerator(mockOSAClient, {
1108
+ model: 'OSA-turbo',
1109
+ authType: AuthType.OSA_OAUTH,
1110
+ baseUrl: 'https://dashscope.aliyuncs.com/compatible-mode/v1',
1111
+ apiKey: 'test-key',
1112
+ }, mockConfig);
1113
+ const client = generator.pipeline.client;
1114
+ expect(client.baseURL).toBe('https://dashscope.aliyuncs.com/compatible-mode/v1');
1115
+ });
1116
+ it('should get SharedTokenManager instance', () => {
1117
+ const generator = new OSAContentGenerator(mockOSAClient, { model: 'OSA-turbo', authType: AuthType.OSA_OAUTH }, mockConfig);
1118
+ const sharedManager = generator.sharedManager;
1119
+ expect(sharedManager).toBeDefined();
1120
+ });
1121
+ });
1122
+ describe('Edge Cases and Error Conditions', () => {
1123
+ it('should handle token retrieval with warning when SharedTokenManager fails', async () => {
1124
+ const consoleSpy = vi.spyOn(console, 'warn').mockImplementation(() => { });
1125
+ const mockTokenManager = {
1126
+ getValidCredentials: vi
1127
+ .fn()
1128
+ .mockRejectedValue(new Error('Internal token manager error')),
1129
+ };
1130
+ const originalGetInstance = SharedTokenManager.getInstance;
1131
+ SharedTokenManager.getInstance = vi
1132
+ .fn()
1133
+ .mockReturnValue(mockTokenManager);
1134
+ const newGenerator = new OSAContentGenerator(mockOSAClient, { model: 'OSA-turbo', authType: AuthType.OSA_OAUTH }, mockConfig);
1135
+ const request = {
1136
+ model: 'OSA-turbo',
1137
+ contents: [{ role: 'user', parts: [{ text: 'Hello' }] }],
1138
+ };
1139
+ await expect(newGenerator.generateContent(request, 'test-prompt-id')).rejects.toThrow('Failed to obtain valid OSA access token');
1140
+ expect(consoleSpy).toHaveBeenCalledWith('Failed to get token from shared manager:', expect.any(Error));
1141
+ consoleSpy.mockRestore();
1142
+ SharedTokenManager.getInstance = originalGetInstance;
1143
+ });
1144
+ it('should handle method types with token failure (except countTokens)', async () => {
1145
+ const mockTokenManager = {
1146
+ getValidCredentials: vi
1147
+ .fn()
1148
+ .mockRejectedValue(new Error('Token error')),
1149
+ };
1150
+ const originalGetInstance = SharedTokenManager.getInstance;
1151
+ SharedTokenManager.getInstance = vi
1152
+ .fn()
1153
+ .mockReturnValue(mockTokenManager);
1154
+ const newGenerator = new OSAContentGenerator(mockOSAClient, { model: 'OSA-turbo', authType: AuthType.OSA_OAUTH }, mockConfig);
1155
+ const generateRequest = {
1156
+ model: 'OSA-turbo',
1157
+ contents: [{ role: 'user', parts: [{ text: 'Hello' }] }],
1158
+ };
1159
+ const countRequest = {
1160
+ model: 'OSA-turbo',
1161
+ contents: [{ role: 'user', parts: [{ text: 'Count' }] }],
1162
+ };
1163
+ const embedRequest = {
1164
+ model: 'OSA-turbo',
1165
+ contents: [{ parts: [{ text: 'Embed' }] }],
1166
+ };
1167
+ // Methods requiring authentication should fail
1168
+ await expect(newGenerator.generateContent(generateRequest, 'test-id')).rejects.toThrow('Failed to obtain valid OSA access token');
1169
+ await expect(newGenerator.generateContentStream(generateRequest, 'test-id')).rejects.toThrow('Failed to obtain valid OSA access token');
1170
+ await expect(newGenerator.embedContent(embedRequest)).rejects.toThrow('Failed to obtain valid OSA access token');
1171
+ // countTokens should succeed as it's a local operation
1172
+ const countResult = await newGenerator.countTokens(countRequest);
1173
+ expect(countResult.totalTokens).toBe(15);
1174
+ SharedTokenManager.getInstance = originalGetInstance;
1175
+ });
1176
+ });
1177
+ });
1178
+ //# sourceMappingURL=qwenContentGenerator.test.js.map