@office-ai/aioncli-core 0.2.3 → 0.18.4

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 (1051) hide show
  1. package/dist/index.d.ts +16 -3
  2. package/dist/index.js +15 -3
  3. package/dist/index.js.map +1 -1
  4. package/dist/src/agents/codebase-investigator.d.ts +46 -0
  5. package/dist/src/agents/codebase-investigator.js +132 -0
  6. package/dist/src/agents/codebase-investigator.js.map +1 -0
  7. package/dist/src/agents/codebase-investigator.test.js +35 -0
  8. package/dist/src/agents/codebase-investigator.test.js.map +1 -0
  9. package/dist/src/agents/executor.d.ts +114 -0
  10. package/dist/src/agents/executor.js +779 -0
  11. package/dist/src/agents/executor.js.map +1 -0
  12. package/dist/src/agents/executor.test.js +1362 -0
  13. package/dist/src/agents/executor.test.js.map +1 -0
  14. package/dist/src/agents/invocation.d.ts +46 -0
  15. package/dist/src/agents/invocation.js +102 -0
  16. package/dist/src/agents/invocation.js.map +1 -0
  17. package/dist/src/agents/invocation.test.js +215 -0
  18. package/dist/src/agents/invocation.test.js.map +1 -0
  19. package/dist/src/agents/registry.d.ts +40 -0
  20. package/dist/src/agents/registry.js +105 -0
  21. package/dist/src/agents/registry.js.map +1 -0
  22. package/dist/src/agents/registry.test.d.ts +6 -0
  23. package/dist/src/agents/registry.test.js +160 -0
  24. package/dist/src/agents/registry.test.js.map +1 -0
  25. package/dist/src/agents/schema-utils.d.ts +39 -0
  26. package/dist/src/agents/schema-utils.js +57 -0
  27. package/dist/src/agents/schema-utils.js.map +1 -0
  28. package/dist/src/agents/schema-utils.test.d.ts +6 -0
  29. package/dist/src/agents/schema-utils.test.js +144 -0
  30. package/dist/src/agents/schema-utils.test.js.map +1 -0
  31. package/dist/src/agents/subagent-tool-wrapper.d.ts +38 -0
  32. package/dist/src/agents/subagent-tool-wrapper.js +48 -0
  33. package/dist/src/agents/subagent-tool-wrapper.js.map +1 -0
  34. package/dist/src/agents/subagent-tool-wrapper.test.d.ts +6 -0
  35. package/dist/src/agents/subagent-tool-wrapper.test.js +110 -0
  36. package/dist/src/agents/subagent-tool-wrapper.test.js.map +1 -0
  37. package/dist/src/agents/types.d.ts +146 -0
  38. package/dist/src/agents/types.js +19 -0
  39. package/dist/src/agents/types.js.map +1 -0
  40. package/dist/src/agents/utils.d.ts +15 -0
  41. package/dist/src/agents/utils.js +29 -0
  42. package/dist/src/agents/utils.js.map +1 -0
  43. package/dist/src/agents/utils.test.d.ts +6 -0
  44. package/dist/src/agents/utils.test.js +87 -0
  45. package/dist/src/agents/utils.test.js.map +1 -0
  46. package/dist/src/code_assist/codeAssist.d.ts +6 -3
  47. package/dist/src/code_assist/codeAssist.js +13 -1
  48. package/dist/src/code_assist/codeAssist.js.map +1 -1
  49. package/dist/src/code_assist/codeAssist.test.d.ts +6 -0
  50. package/dist/src/code_assist/codeAssist.test.js +99 -0
  51. package/dist/src/code_assist/codeAssist.test.js.map +1 -0
  52. package/dist/src/code_assist/converter.d.ts +5 -1
  53. package/dist/src/code_assist/converter.js +39 -5
  54. package/dist/src/code_assist/converter.js.map +1 -1
  55. package/dist/src/code_assist/converter.test.js +112 -0
  56. package/dist/src/code_assist/converter.test.js.map +1 -1
  57. package/dist/src/code_assist/experiments/client_metadata.d.ts +12 -0
  58. package/dist/src/code_assist/experiments/client_metadata.js +50 -0
  59. package/dist/src/code_assist/experiments/client_metadata.js.map +1 -0
  60. package/dist/src/code_assist/experiments/client_metadata.test.d.ts +6 -0
  61. package/dist/src/code_assist/experiments/client_metadata.test.js +99 -0
  62. package/dist/src/code_assist/experiments/client_metadata.test.js.map +1 -0
  63. package/dist/src/code_assist/experiments/experiments.d.ts +17 -0
  64. package/dist/src/code_assist/experiments/experiments.js +36 -0
  65. package/dist/src/code_assist/experiments/experiments.js.map +1 -0
  66. package/dist/src/code_assist/experiments/experiments.test.d.ts +6 -0
  67. package/dist/src/code_assist/experiments/experiments.test.js +92 -0
  68. package/dist/src/code_assist/experiments/experiments.test.js.map +1 -0
  69. package/dist/src/code_assist/experiments/flagNames.d.ts +13 -0
  70. package/dist/src/code_assist/experiments/flagNames.js +13 -0
  71. package/dist/src/code_assist/experiments/flagNames.js.map +1 -0
  72. package/dist/src/code_assist/experiments/types.d.ts +35 -0
  73. package/dist/src/code_assist/experiments/types.js +7 -0
  74. package/dist/src/code_assist/experiments/types.js.map +1 -0
  75. package/dist/src/code_assist/oauth-credential-storage.d.ts +25 -0
  76. package/dist/src/code_assist/oauth-credential-storage.js +110 -0
  77. package/dist/src/code_assist/oauth-credential-storage.js.map +1 -0
  78. package/dist/src/code_assist/oauth-credential-storage.test.d.ts +6 -0
  79. package/dist/src/code_assist/oauth-credential-storage.test.js +198 -0
  80. package/dist/src/code_assist/oauth-credential-storage.test.js.map +1 -0
  81. package/dist/src/code_assist/oauth2.d.ts +3 -3
  82. package/dist/src/code_assist/oauth2.js +252 -125
  83. package/dist/src/code_assist/oauth2.js.map +1 -1
  84. package/dist/src/code_assist/oauth2.test.js +788 -350
  85. package/dist/src/code_assist/oauth2.test.js.map +1 -1
  86. package/dist/src/code_assist/server.d.ts +8 -6
  87. package/dist/src/code_assist/server.js +41 -10
  88. package/dist/src/code_assist/server.js.map +1 -1
  89. package/dist/src/code_assist/server.test.js +151 -28
  90. package/dist/src/code_assist/server.test.js.map +1 -1
  91. package/dist/src/code_assist/setup.d.ts +2 -2
  92. package/dist/src/code_assist/setup.js +5 -3
  93. package/dist/src/code_assist/setup.js.map +1 -1
  94. package/dist/src/code_assist/setup.test.js.map +1 -1
  95. package/dist/src/code_assist/types.d.ts +18 -3
  96. package/dist/src/code_assist/types.js.map +1 -1
  97. package/dist/src/commands/extensions.d.ts +7 -0
  98. package/dist/src/commands/extensions.js +9 -0
  99. package/dist/src/commands/extensions.js.map +1 -0
  100. package/dist/src/commands/extensions.test.d.ts +6 -0
  101. package/dist/src/commands/extensions.test.js +19 -0
  102. package/dist/src/commands/extensions.test.js.map +1 -0
  103. package/dist/src/config/config.d.ts +282 -60
  104. package/dist/src/config/config.js +677 -129
  105. package/dist/src/config/config.js.map +1 -1
  106. package/dist/src/config/config.test.js +1020 -146
  107. package/dist/src/config/config.test.js.map +1 -1
  108. package/dist/src/config/constants.d.ts +11 -0
  109. package/dist/src/config/constants.js +16 -0
  110. package/dist/src/config/constants.js.map +1 -0
  111. package/dist/src/config/defaultModelConfigs.d.ts +7 -0
  112. package/dist/src/config/defaultModelConfigs.js +185 -0
  113. package/dist/src/config/defaultModelConfigs.js.map +1 -0
  114. package/dist/src/config/models.d.ts +37 -0
  115. package/dist/src/config/models.js +72 -0
  116. package/dist/src/config/models.js.map +1 -1
  117. package/dist/src/config/models.test.d.ts +6 -0
  118. package/dist/src/config/models.test.js +116 -0
  119. package/dist/src/config/models.test.js.map +1 -0
  120. package/dist/src/config/storage.d.ts +36 -0
  121. package/dist/src/config/storage.js +115 -0
  122. package/dist/src/config/storage.js.map +1 -0
  123. package/dist/src/config/storage.test.d.ts +6 -0
  124. package/dist/src/config/storage.test.js +48 -0
  125. package/dist/src/config/storage.test.js.map +1 -0
  126. package/dist/src/confirmation-bus/index.d.ts +7 -0
  127. package/dist/src/confirmation-bus/index.js +8 -0
  128. package/dist/src/confirmation-bus/index.js.map +1 -0
  129. package/dist/src/confirmation-bus/message-bus.d.ts +18 -0
  130. package/dist/src/confirmation-bus/message-bus.js +87 -0
  131. package/dist/src/confirmation-bus/message-bus.js.map +1 -0
  132. package/dist/src/confirmation-bus/message-bus.test.d.ts +6 -0
  133. package/dist/src/confirmation-bus/message-bus.test.js +170 -0
  134. package/dist/src/confirmation-bus/message-bus.test.js.map +1 -0
  135. package/dist/src/confirmation-bus/types.d.ts +49 -0
  136. package/dist/src/confirmation-bus/types.js +16 -0
  137. package/dist/src/confirmation-bus/types.js.map +1 -0
  138. package/dist/src/core/apiKeyCredentialStorage.d.ts +17 -0
  139. package/dist/src/core/apiKeyCredentialStorage.js +64 -0
  140. package/dist/src/core/apiKeyCredentialStorage.js.map +1 -0
  141. package/dist/src/core/apiKeyCredentialStorage.test.d.ts +6 -0
  142. package/dist/src/core/apiKeyCredentialStorage.test.js +71 -0
  143. package/dist/src/core/apiKeyCredentialStorage.test.js.map +1 -0
  144. package/dist/src/core/baseLlmClient.d.ts +50 -0
  145. package/dist/src/core/baseLlmClient.js +185 -0
  146. package/dist/src/core/baseLlmClient.js.map +1 -0
  147. package/dist/src/core/baseLlmClient.test.d.ts +6 -0
  148. package/dist/src/core/baseLlmClient.test.js +311 -0
  149. package/dist/src/core/baseLlmClient.test.js.map +1 -0
  150. package/dist/src/core/client.d.ts +30 -42
  151. package/dist/src/core/client.js +178 -477
  152. package/dist/src/core/client.js.map +1 -1
  153. package/dist/src/core/client.test.js +739 -617
  154. package/dist/src/core/client.test.js.map +1 -1
  155. package/dist/src/core/contentGenerator.d.ts +7 -6
  156. package/dist/src/core/contentGenerator.js +59 -45
  157. package/dist/src/core/contentGenerator.js.map +1 -1
  158. package/dist/src/core/contentGenerator.test.js +50 -4
  159. package/dist/src/core/contentGenerator.test.js.map +1 -1
  160. package/dist/src/core/coreToolScheduler.d.ts +28 -11
  161. package/dist/src/core/coreToolScheduler.js +493 -161
  162. package/dist/src/core/coreToolScheduler.js.map +1 -1
  163. package/dist/src/core/coreToolScheduler.test.js +995 -163
  164. package/dist/src/core/coreToolScheduler.test.js.map +1 -1
  165. package/dist/src/core/fakeContentGenerator.d.ts +33 -0
  166. package/dist/src/core/fakeContentGenerator.js +58 -0
  167. package/dist/src/core/fakeContentGenerator.js.map +1 -0
  168. package/dist/src/core/fakeContentGenerator.test.d.ts +6 -0
  169. package/dist/src/core/fakeContentGenerator.test.js +127 -0
  170. package/dist/src/core/fakeContentGenerator.test.js.map +1 -0
  171. package/dist/src/core/geminiChat.d.ts +61 -55
  172. package/dist/src/core/geminiChat.js +388 -366
  173. package/dist/src/core/geminiChat.js.map +1 -1
  174. package/dist/src/core/geminiChat.test.js +1600 -355
  175. package/dist/src/core/geminiChat.test.js.map +1 -1
  176. package/dist/src/core/geminiRequest.js +1 -0
  177. package/dist/src/core/geminiRequest.js.map +1 -1
  178. package/dist/src/core/logger.d.ts +11 -4
  179. package/dist/src/core/logger.js +39 -30
  180. package/dist/src/core/logger.js.map +1 -1
  181. package/dist/src/core/logger.test.js +62 -45
  182. package/dist/src/core/logger.test.js.map +1 -1
  183. package/dist/src/core/loggingContentGenerator.d.ts +4 -3
  184. package/dist/src/core/loggingContentGenerator.js +116 -37
  185. package/dist/src/core/loggingContentGenerator.js.map +1 -1
  186. package/dist/src/core/loggingContentGenerator.test.d.ts +6 -0
  187. package/dist/src/core/loggingContentGenerator.test.js +180 -0
  188. package/dist/src/core/loggingContentGenerator.test.js.map +1 -0
  189. package/dist/src/core/nonInteractiveToolExecutor.d.ts +4 -5
  190. package/dist/src/core/nonInteractiveToolExecutor.js +17 -120
  191. package/dist/src/core/nonInteractiveToolExecutor.js.map +1 -1
  192. package/dist/src/core/nonInteractiveToolExecutor.test.js +168 -84
  193. package/dist/src/core/nonInteractiveToolExecutor.test.js.map +1 -1
  194. package/dist/src/core/openaiContentGenerator.d.ts +4 -3
  195. package/dist/src/core/openaiContentGenerator.js +49 -19
  196. package/dist/src/core/openaiContentGenerator.js.map +1 -1
  197. package/dist/src/core/openaiContentGenerator.test.js +1 -0
  198. package/dist/src/core/openaiContentGenerator.test.js.map +1 -1
  199. package/dist/src/core/prompts.d.ts +7 -1
  200. package/dist/src/core/prompts.js +198 -195
  201. package/dist/src/core/prompts.js.map +1 -1
  202. package/dist/src/core/prompts.test.js +172 -104
  203. package/dist/src/core/prompts.test.js.map +1 -1
  204. package/dist/src/core/recordingContentGenerator.d.ts +18 -0
  205. package/dist/src/core/recordingContentGenerator.js +77 -0
  206. package/dist/src/core/recordingContentGenerator.js.map +1 -0
  207. package/dist/src/core/recordingContentGenerator.test.d.ts +6 -0
  208. package/dist/src/core/recordingContentGenerator.test.js +101 -0
  209. package/dist/src/core/recordingContentGenerator.test.js.map +1 -0
  210. package/dist/src/core/subagent.d.ts +24 -18
  211. package/dist/src/core/subagent.js +125 -90
  212. package/dist/src/core/subagent.js.map +1 -1
  213. package/dist/src/core/subagent.test.js +59 -44
  214. package/dist/src/core/subagent.test.js.map +1 -1
  215. package/dist/src/core/tokenLimits.test.d.ts +6 -0
  216. package/dist/src/core/tokenLimits.test.js +26 -0
  217. package/dist/src/core/tokenLimits.test.js.map +1 -0
  218. package/dist/src/core/turn.d.ts +57 -13
  219. package/dist/src/core/turn.js +79 -35
  220. package/dist/src/core/turn.js.map +1 -1
  221. package/dist/src/core/turn.test.js +373 -120
  222. package/dist/src/core/turn.test.js.map +1 -1
  223. package/dist/src/fallback/handler.d.ts +7 -0
  224. package/dist/src/fallback/handler.js +181 -0
  225. package/dist/src/fallback/handler.js.map +1 -0
  226. package/dist/src/fallback/handler.test.d.ts +6 -0
  227. package/dist/src/fallback/handler.test.js +245 -0
  228. package/dist/src/fallback/handler.test.js.map +1 -0
  229. package/dist/src/fallback/types.d.ts +14 -0
  230. package/dist/src/fallback/types.js +7 -0
  231. package/dist/src/fallback/types.js.map +1 -0
  232. package/dist/src/generated/git-commit.d.ts +2 -2
  233. package/dist/src/generated/git-commit.js +2 -2
  234. package/dist/src/generated/git-commit.js.map +1 -1
  235. package/dist/src/hooks/hookAggregator.d.ts +68 -0
  236. package/dist/src/hooks/hookAggregator.js +262 -0
  237. package/dist/src/hooks/hookAggregator.js.map +1 -0
  238. package/dist/src/hooks/hookAggregator.test.d.ts +6 -0
  239. package/dist/src/hooks/hookAggregator.test.js +387 -0
  240. package/dist/src/hooks/hookAggregator.test.js.map +1 -0
  241. package/dist/src/hooks/hookPlanner.d.ts +46 -0
  242. package/dist/src/hooks/hookPlanner.js +108 -0
  243. package/dist/src/hooks/hookPlanner.js.map +1 -0
  244. package/dist/src/hooks/hookPlanner.test.d.ts +6 -0
  245. package/dist/src/hooks/hookPlanner.test.js +255 -0
  246. package/dist/src/hooks/hookPlanner.test.js.map +1 -0
  247. package/dist/src/hooks/hookRegistry.d.ts +87 -0
  248. package/dist/src/hooks/hookRegistry.js +198 -0
  249. package/dist/src/hooks/hookRegistry.js.map +1 -0
  250. package/dist/src/hooks/hookRegistry.test.d.ts +6 -0
  251. package/dist/src/hooks/hookRegistry.test.js +341 -0
  252. package/dist/src/hooks/hookRegistry.test.js.map +1 -0
  253. package/dist/src/hooks/hookRunner.d.ts +42 -0
  254. package/dist/src/hooks/hookRunner.js +272 -0
  255. package/dist/src/hooks/hookRunner.js.map +1 -0
  256. package/dist/src/hooks/hookRunner.test.d.ts +6 -0
  257. package/dist/src/hooks/hookRunner.test.js +468 -0
  258. package/dist/src/hooks/hookRunner.test.js.map +1 -0
  259. package/dist/src/hooks/hookTranslator.d.ts +113 -0
  260. package/dist/src/hooks/hookTranslator.js +232 -0
  261. package/dist/src/hooks/hookTranslator.js.map +1 -0
  262. package/dist/src/hooks/hookTranslator.test.d.ts +6 -0
  263. package/dist/src/hooks/hookTranslator.test.js +192 -0
  264. package/dist/src/hooks/hookTranslator.test.js.map +1 -0
  265. package/dist/src/hooks/types.d.ts +384 -0
  266. package/dist/src/hooks/types.js +284 -0
  267. package/dist/src/hooks/types.js.map +1 -0
  268. package/dist/src/hooks/types.test.d.ts +6 -0
  269. package/dist/src/hooks/types.test.js +313 -0
  270. package/dist/src/hooks/types.test.js.map +1 -0
  271. package/dist/src/ide/constants.d.ts +3 -0
  272. package/dist/src/ide/constants.js +3 -0
  273. package/dist/src/ide/constants.js.map +1 -1
  274. package/dist/src/ide/detect-ide.d.ts +52 -12
  275. package/dist/src/ide/detect-ide.js +51 -65
  276. package/dist/src/ide/detect-ide.js.map +1 -1
  277. package/dist/src/ide/detect-ide.test.js +95 -52
  278. package/dist/src/ide/detect-ide.test.js.map +1 -1
  279. package/dist/src/ide/ide-client.d.ts +72 -24
  280. package/dist/src/ide/ide-client.js +380 -84
  281. package/dist/src/ide/ide-client.js.map +1 -1
  282. package/dist/src/ide/ide-client.test.js +539 -35
  283. package/dist/src/ide/ide-client.test.js.map +1 -1
  284. package/dist/src/ide/ide-installer.d.ts +2 -2
  285. package/dist/src/ide/ide-installer.js +93 -35
  286. package/dist/src/ide/ide-installer.js.map +1 -1
  287. package/dist/src/ide/ide-installer.test.js +157 -26
  288. package/dist/src/ide/ide-installer.test.js.map +1 -1
  289. package/dist/src/ide/ideContext.d.ts +35 -365
  290. package/dist/src/ide/ideContext.js +60 -106
  291. package/dist/src/ide/ideContext.js.map +1 -1
  292. package/dist/src/ide/ideContext.test.js +152 -24
  293. package/dist/src/ide/ideContext.test.js.map +1 -1
  294. package/dist/src/ide/process-utils.d.ts +7 -5
  295. package/dist/src/ide/process-utils.js +108 -67
  296. package/dist/src/ide/process-utils.js.map +1 -1
  297. package/dist/src/ide/process-utils.test.d.ts +6 -0
  298. package/dist/src/ide/process-utils.test.js +151 -0
  299. package/dist/src/ide/process-utils.test.js.map +1 -0
  300. package/dist/src/ide/types.d.ts +486 -0
  301. package/dist/src/ide/types.js +138 -0
  302. package/dist/src/ide/types.js.map +1 -0
  303. package/dist/src/index.d.ts +41 -2
  304. package/dist/src/index.js +44 -2
  305. package/dist/src/index.js.map +1 -1
  306. package/dist/src/mcp/google-auth-provider.d.ts +5 -3
  307. package/dist/src/mcp/google-auth-provider.js +21 -3
  308. package/dist/src/mcp/google-auth-provider.js.map +1 -1
  309. package/dist/src/mcp/google-auth-provider.test.js +42 -9
  310. package/dist/src/mcp/google-auth-provider.test.js.map +1 -1
  311. package/dist/src/mcp/oauth-provider.d.ts +25 -18
  312. package/dist/src/mcp/oauth-provider.js +194 -97
  313. package/dist/src/mcp/oauth-provider.js.map +1 -1
  314. package/dist/src/mcp/oauth-provider.test.js +581 -39
  315. package/dist/src/mcp/oauth-provider.test.js.map +1 -1
  316. package/dist/src/mcp/oauth-token-storage.d.ts +14 -32
  317. package/dist/src/mcp/oauth-token-storage.js +58 -28
  318. package/dist/src/mcp/oauth-token-storage.js.map +1 -1
  319. package/dist/src/mcp/oauth-token-storage.test.js +262 -162
  320. package/dist/src/mcp/oauth-token-storage.test.js.map +1 -1
  321. package/dist/src/mcp/oauth-utils.d.ts +16 -1
  322. package/dist/src/mcp/oauth-utils.js +68 -33
  323. package/dist/src/mcp/oauth-utils.js.map +1 -1
  324. package/dist/src/mcp/oauth-utils.test.js +86 -3
  325. package/dist/src/mcp/oauth-utils.test.js.map +1 -1
  326. package/dist/src/mcp/sa-impersonation-provider.d.ts +27 -0
  327. package/dist/src/mcp/sa-impersonation-provider.js +113 -0
  328. package/dist/src/mcp/sa-impersonation-provider.js.map +1 -0
  329. package/dist/src/mcp/sa-impersonation-provider.test.d.ts +6 -0
  330. package/dist/src/mcp/sa-impersonation-provider.test.js +117 -0
  331. package/dist/src/mcp/sa-impersonation-provider.test.js.map +1 -0
  332. package/dist/src/mcp/token-storage/base-token-storage.d.ts +19 -0
  333. package/dist/src/mcp/token-storage/base-token-storage.js +36 -0
  334. package/dist/src/mcp/token-storage/base-token-storage.js.map +1 -0
  335. package/dist/src/mcp/token-storage/base-token-storage.test.d.ts +6 -0
  336. package/dist/src/mcp/token-storage/base-token-storage.test.js +151 -0
  337. package/dist/src/mcp/token-storage/base-token-storage.test.js.map +1 -0
  338. package/dist/src/mcp/token-storage/file-token-storage.d.ts +24 -0
  339. package/dist/src/mcp/token-storage/file-token-storage.js +145 -0
  340. package/dist/src/mcp/token-storage/file-token-storage.js.map +1 -0
  341. package/dist/src/mcp/token-storage/file-token-storage.test.d.ts +6 -0
  342. package/dist/src/mcp/token-storage/file-token-storage.test.js +238 -0
  343. package/dist/src/mcp/token-storage/file-token-storage.test.js.map +1 -0
  344. package/dist/src/mcp/token-storage/hybrid-token-storage.d.ts +23 -0
  345. package/dist/src/mcp/token-storage/hybrid-token-storage.js +78 -0
  346. package/dist/src/mcp/token-storage/hybrid-token-storage.js.map +1 -0
  347. package/dist/src/mcp/token-storage/hybrid-token-storage.test.d.ts +6 -0
  348. package/dist/src/mcp/token-storage/hybrid-token-storage.test.js +193 -0
  349. package/dist/src/mcp/token-storage/hybrid-token-storage.test.js.map +1 -0
  350. package/dist/src/mcp/token-storage/index.d.ts +11 -0
  351. package/dist/src/mcp/token-storage/index.js +12 -0
  352. package/dist/src/mcp/token-storage/index.js.map +1 -0
  353. package/dist/src/mcp/token-storage/keychain-token-storage.d.ts +35 -0
  354. package/dist/src/mcp/token-storage/keychain-token-storage.js +246 -0
  355. package/dist/src/mcp/token-storage/keychain-token-storage.js.map +1 -0
  356. package/dist/src/mcp/token-storage/keychain-token-storage.test.d.ts +6 -0
  357. package/dist/src/mcp/token-storage/keychain-token-storage.test.js +305 -0
  358. package/dist/src/mcp/token-storage/keychain-token-storage.test.js.map +1 -0
  359. package/dist/src/mcp/token-storage/types.d.ts +44 -0
  360. package/dist/src/mcp/token-storage/types.js +11 -0
  361. package/dist/src/mcp/token-storage/types.js.map +1 -0
  362. package/dist/src/output/json-formatter.d.ts +11 -0
  363. package/dist/src/output/json-formatter.js +30 -0
  364. package/dist/src/output/json-formatter.js.map +1 -0
  365. package/dist/src/output/json-formatter.test.d.ts +6 -0
  366. package/dist/src/output/json-formatter.test.js +266 -0
  367. package/dist/src/output/json-formatter.test.js.map +1 -0
  368. package/dist/src/output/stream-json-formatter.d.ts +32 -0
  369. package/dist/src/output/stream-json-formatter.js +52 -0
  370. package/dist/src/output/stream-json-formatter.js.map +1 -0
  371. package/dist/src/output/stream-json-formatter.test.d.ts +6 -0
  372. package/dist/src/output/stream-json-formatter.test.js +479 -0
  373. package/dist/src/output/stream-json-formatter.test.js.map +1 -0
  374. package/dist/src/output/types.d.ts +82 -0
  375. package/dist/src/output/types.js +22 -0
  376. package/dist/src/output/types.js.map +1 -0
  377. package/dist/src/policy/config.d.ts +31 -0
  378. package/dist/src/policy/config.js +199 -0
  379. package/dist/src/policy/config.js.map +1 -0
  380. package/dist/src/policy/config.test.d.ts +6 -0
  381. package/dist/src/policy/config.test.js +538 -0
  382. package/dist/src/policy/config.test.js.map +1 -0
  383. package/dist/src/policy/index.d.ts +9 -0
  384. package/dist/src/policy/index.js +10 -0
  385. package/dist/src/policy/index.js.map +1 -0
  386. package/dist/src/policy/policies/discovered.toml +8 -0
  387. package/dist/src/policy/policies/read-only.toml +56 -0
  388. package/dist/src/policy/policies/write.toml +73 -0
  389. package/dist/src/policy/policies/yolo.toml +31 -0
  390. package/dist/src/policy/policy-engine.d.ts +39 -0
  391. package/dist/src/policy/policy-engine.js +158 -0
  392. package/dist/src/policy/policy-engine.js.map +1 -0
  393. package/dist/src/policy/policy-engine.test.d.ts +6 -0
  394. package/dist/src/policy/policy-engine.test.js +899 -0
  395. package/dist/src/policy/policy-engine.test.js.map +1 -0
  396. package/dist/src/policy/stable-stringify.d.ts +58 -0
  397. package/dist/src/policy/stable-stringify.js +122 -0
  398. package/dist/src/policy/stable-stringify.js.map +1 -0
  399. package/dist/src/policy/toml-loader.d.ts +47 -0
  400. package/dist/src/policy/toml-loader.js +411 -0
  401. package/dist/src/policy/toml-loader.js.map +1 -0
  402. package/dist/src/policy/toml-loader.test.d.ts +6 -0
  403. package/dist/src/policy/toml-loader.test.js +376 -0
  404. package/dist/src/policy/toml-loader.test.js.map +1 -0
  405. package/dist/src/policy/types.d.ts +130 -0
  406. package/dist/src/policy/types.js +22 -0
  407. package/dist/src/policy/types.js.map +1 -0
  408. package/dist/src/prompts/mcp-prompts.d.ts +2 -2
  409. package/dist/src/prompts/mcp-prompts.test.d.ts +6 -0
  410. package/dist/src/prompts/mcp-prompts.test.js +39 -0
  411. package/dist/src/prompts/mcp-prompts.test.js.map +1 -0
  412. package/dist/src/prompts/prompt-registry.d.ts +1 -1
  413. package/dist/src/prompts/prompt-registry.js +2 -1
  414. package/dist/src/prompts/prompt-registry.js.map +1 -1
  415. package/dist/src/prompts/prompt-registry.test.d.ts +6 -0
  416. package/dist/src/prompts/prompt-registry.test.js +96 -0
  417. package/dist/src/prompts/prompt-registry.test.js.map +1 -0
  418. package/dist/src/routing/modelRouterService.d.ts +23 -0
  419. package/dist/src/routing/modelRouterService.js +85 -0
  420. package/dist/src/routing/modelRouterService.js.map +1 -0
  421. package/dist/src/routing/modelRouterService.test.d.ts +6 -0
  422. package/dist/src/routing/modelRouterService.test.js +160 -0
  423. package/dist/src/routing/modelRouterService.test.js.map +1 -0
  424. package/dist/src/routing/routingStrategy.d.ts +62 -0
  425. package/dist/src/routing/routingStrategy.js +7 -0
  426. package/dist/src/routing/routingStrategy.js.map +1 -0
  427. package/dist/src/routing/strategies/classifierStrategy.d.ts +12 -0
  428. package/dist/src/routing/strategies/classifierStrategy.js +166 -0
  429. package/dist/src/routing/strategies/classifierStrategy.js.map +1 -0
  430. package/dist/src/routing/strategies/classifierStrategy.test.d.ts +6 -0
  431. package/dist/src/routing/strategies/classifierStrategy.test.js +196 -0
  432. package/dist/src/routing/strategies/classifierStrategy.test.js.map +1 -0
  433. package/dist/src/routing/strategies/compositeStrategy.d.ts +26 -0
  434. package/dist/src/routing/strategies/compositeStrategy.js +68 -0
  435. package/dist/src/routing/strategies/compositeStrategy.js.map +1 -0
  436. package/dist/src/routing/strategies/compositeStrategy.test.d.ts +6 -0
  437. package/dist/src/routing/strategies/compositeStrategy.test.js +123 -0
  438. package/dist/src/routing/strategies/compositeStrategy.test.js.map +1 -0
  439. package/dist/src/routing/strategies/defaultStrategy.d.ts +12 -0
  440. package/dist/src/routing/strategies/defaultStrategy.js +20 -0
  441. package/dist/src/routing/strategies/defaultStrategy.js.map +1 -0
  442. package/dist/src/routing/strategies/defaultStrategy.test.d.ts +6 -0
  443. package/dist/src/routing/strategies/defaultStrategy.test.js +26 -0
  444. package/dist/src/routing/strategies/defaultStrategy.test.js.map +1 -0
  445. package/dist/src/routing/strategies/fallbackStrategy.d.ts +12 -0
  446. package/dist/src/routing/strategies/fallbackStrategy.js +25 -0
  447. package/dist/src/routing/strategies/fallbackStrategy.js.map +1 -0
  448. package/dist/src/routing/strategies/fallbackStrategy.test.d.ts +6 -0
  449. package/dist/src/routing/strategies/fallbackStrategy.test.js +59 -0
  450. package/dist/src/routing/strategies/fallbackStrategy.test.js.map +1 -0
  451. package/dist/src/routing/strategies/overrideStrategy.d.ts +15 -0
  452. package/dist/src/routing/strategies/overrideStrategy.js +28 -0
  453. package/dist/src/routing/strategies/overrideStrategy.js.map +1 -0
  454. package/dist/src/routing/strategies/overrideStrategy.test.d.ts +6 -0
  455. package/dist/src/routing/strategies/overrideStrategy.test.js +45 -0
  456. package/dist/src/routing/strategies/overrideStrategy.test.js.map +1 -0
  457. package/dist/src/safety/built-in.d.ts +21 -0
  458. package/dist/src/safety/built-in.js +106 -0
  459. package/dist/src/safety/built-in.js.map +1 -0
  460. package/dist/src/safety/built-in.test.d.ts +6 -0
  461. package/dist/src/safety/built-in.test.js +199 -0
  462. package/dist/src/safety/built-in.test.js.map +1 -0
  463. package/dist/src/safety/checker-runner.d.ts +48 -0
  464. package/dist/src/safety/checker-runner.js +208 -0
  465. package/dist/src/safety/checker-runner.js.map +1 -0
  466. package/dist/src/safety/checker-runner.test.d.ts +6 -0
  467. package/dist/src/safety/checker-runner.test.js +238 -0
  468. package/dist/src/safety/checker-runner.test.js.map +1 -0
  469. package/dist/src/safety/context-builder.d.ts +23 -0
  470. package/dist/src/safety/context-builder.js +47 -0
  471. package/dist/src/safety/context-builder.js.map +1 -0
  472. package/dist/src/safety/context-builder.test.d.ts +6 -0
  473. package/dist/src/safety/context-builder.test.js +49 -0
  474. package/dist/src/safety/context-builder.test.js.map +1 -0
  475. package/dist/src/safety/protocol.d.ts +88 -0
  476. package/dist/src/safety/protocol.js +15 -0
  477. package/dist/src/safety/protocol.js.map +1 -0
  478. package/dist/src/safety/registry.d.ts +26 -0
  479. package/dist/src/safety/registry.js +65 -0
  480. package/dist/src/safety/registry.js.map +1 -0
  481. package/dist/src/safety/registry.test.d.ts +6 -0
  482. package/dist/src/safety/registry.test.js +31 -0
  483. package/dist/src/safety/registry.test.js.map +1 -0
  484. package/dist/src/services/chatCompressionService.d.ts +32 -0
  485. package/dist/src/services/chatCompressionService.js +162 -0
  486. package/dist/src/services/chatCompressionService.js.map +1 -0
  487. package/dist/src/services/chatCompressionService.test.d.ts +6 -0
  488. package/dist/src/services/chatCompressionService.test.js +210 -0
  489. package/dist/src/services/chatCompressionService.test.js.map +1 -0
  490. package/dist/src/services/chatRecordingService.d.ts +10 -15
  491. package/dist/src/services/chatRecordingService.js +43 -29
  492. package/dist/src/services/chatRecordingService.js.map +1 -1
  493. package/dist/src/services/chatRecordingService.test.js +69 -25
  494. package/dist/src/services/chatRecordingService.test.js.map +1 -1
  495. package/dist/src/services/fileDiscoveryService.d.ts +8 -10
  496. package/dist/src/services/fileDiscoveryService.js +31 -53
  497. package/dist/src/services/fileDiscoveryService.js.map +1 -1
  498. package/dist/src/services/fileDiscoveryService.test.js +94 -14
  499. package/dist/src/services/fileDiscoveryService.test.js.map +1 -1
  500. package/dist/src/services/fileSystemService.d.ts +9 -0
  501. package/dist/src/services/fileSystemService.js +12 -1
  502. package/dist/src/services/fileSystemService.js.map +1 -1
  503. package/dist/src/services/fileSystemService.test.js +1 -1
  504. package/dist/src/services/fileSystemService.test.js.map +1 -1
  505. package/dist/src/services/gitService.d.ts +3 -1
  506. package/dist/src/services/gitService.js +30 -24
  507. package/dist/src/services/gitService.js.map +1 -1
  508. package/dist/src/services/gitService.test.js +30 -37
  509. package/dist/src/services/gitService.test.js.map +1 -1
  510. package/dist/src/services/loopDetectionService.d.ts +12 -3
  511. package/dist/src/services/loopDetectionService.js +148 -55
  512. package/dist/src/services/loopDetectionService.js.map +1 -1
  513. package/dist/src/services/loopDetectionService.test.js +280 -21
  514. package/dist/src/services/loopDetectionService.test.js.map +1 -1
  515. package/dist/src/services/modelConfig.golden.test.d.ts +6 -0
  516. package/dist/src/services/modelConfig.golden.test.js +42 -0
  517. package/dist/src/services/modelConfig.golden.test.js.map +1 -0
  518. package/dist/src/services/modelConfig.integration.test.d.ts +6 -0
  519. package/dist/src/services/modelConfig.integration.test.js +247 -0
  520. package/dist/src/services/modelConfig.integration.test.js.map +1 -0
  521. package/dist/src/services/modelConfigService.d.ts +48 -0
  522. package/dist/src/services/modelConfigService.js +151 -0
  523. package/dist/src/services/modelConfigService.js.map +1 -0
  524. package/dist/src/services/modelConfigService.test.d.ts +6 -0
  525. package/dist/src/services/modelConfigService.test.js +531 -0
  526. package/dist/src/services/modelConfigService.test.js.map +1 -0
  527. package/dist/src/services/shellExecutionService.d.ts +37 -2
  528. package/dist/src/services/shellExecutionService.js +361 -67
  529. package/dist/src/services/shellExecutionService.js.map +1 -1
  530. package/dist/src/services/shellExecutionService.test.js +333 -71
  531. package/dist/src/services/shellExecutionService.test.js.map +1 -1
  532. package/dist/src/services/test-data/resolved-aliases.golden.json +202 -0
  533. package/dist/src/telemetry/activity-detector.d.ts +41 -0
  534. package/dist/src/telemetry/activity-detector.js +61 -0
  535. package/dist/src/telemetry/activity-detector.js.map +1 -0
  536. package/dist/src/telemetry/activity-detector.test.d.ts +6 -0
  537. package/dist/src/telemetry/activity-detector.test.js +136 -0
  538. package/dist/src/telemetry/activity-detector.test.js.map +1 -0
  539. package/dist/src/telemetry/activity-monitor.d.ts +116 -0
  540. package/dist/src/telemetry/activity-monitor.js +209 -0
  541. package/dist/src/telemetry/activity-monitor.js.map +1 -0
  542. package/dist/src/telemetry/activity-monitor.test.d.ts +6 -0
  543. package/dist/src/telemetry/activity-monitor.test.js +251 -0
  544. package/dist/src/telemetry/activity-monitor.test.js.map +1 -0
  545. package/dist/src/telemetry/activity-types.d.ts +19 -0
  546. package/dist/src/telemetry/activity-types.js +21 -0
  547. package/dist/src/telemetry/activity-types.js.map +1 -0
  548. package/dist/src/telemetry/clearcut-logger/clearcut-logger.d.ts +53 -5
  549. package/dist/src/telemetry/clearcut-logger/clearcut-logger.js +581 -56
  550. package/dist/src/telemetry/clearcut-logger/clearcut-logger.js.map +1 -1
  551. package/dist/src/telemetry/clearcut-logger/clearcut-logger.test.d.ts +2 -0
  552. package/dist/src/telemetry/clearcut-logger/clearcut-logger.test.js +467 -31
  553. package/dist/src/telemetry/clearcut-logger/clearcut-logger.test.js.map +1 -1
  554. package/dist/src/telemetry/clearcut-logger/event-metadata-key.d.ts +75 -4
  555. package/dist/src/telemetry/clearcut-logger/event-metadata-key.js +182 -6
  556. package/dist/src/telemetry/clearcut-logger/event-metadata-key.js.map +1 -1
  557. package/dist/src/telemetry/config.d.ts +31 -0
  558. package/dist/src/telemetry/config.js +76 -0
  559. package/dist/src/telemetry/config.js.map +1 -0
  560. package/dist/src/telemetry/config.test.d.ts +6 -0
  561. package/dist/src/telemetry/config.test.js +124 -0
  562. package/dist/src/telemetry/config.test.js.map +1 -0
  563. package/dist/src/telemetry/constants.d.ts +0 -18
  564. package/dist/src/telemetry/constants.js +0 -18
  565. package/dist/src/telemetry/constants.js.map +1 -1
  566. package/dist/src/telemetry/file-exporters.d.ts +5 -4
  567. package/dist/src/telemetry/file-exporters.js +1 -1
  568. package/dist/src/telemetry/file-exporters.js.map +1 -1
  569. package/dist/src/telemetry/gcp-exporters.d.ts +34 -0
  570. package/dist/src/telemetry/gcp-exporters.js +116 -0
  571. package/dist/src/telemetry/gcp-exporters.js.map +1 -0
  572. package/dist/src/telemetry/gcp-exporters.test.d.ts +6 -0
  573. package/dist/src/telemetry/gcp-exporters.test.js +318 -0
  574. package/dist/src/telemetry/gcp-exporters.test.js.map +1 -0
  575. package/dist/src/telemetry/high-water-mark-tracker.d.ts +43 -0
  576. package/dist/src/telemetry/high-water-mark-tracker.js +88 -0
  577. package/dist/src/telemetry/high-water-mark-tracker.js.map +1 -0
  578. package/dist/src/telemetry/high-water-mark-tracker.test.d.ts +6 -0
  579. package/dist/src/telemetry/high-water-mark-tracker.test.js +152 -0
  580. package/dist/src/telemetry/high-water-mark-tracker.test.js.map +1 -0
  581. package/dist/src/telemetry/index.d.ts +16 -2
  582. package/dist/src/telemetry/index.js +25 -2
  583. package/dist/src/telemetry/index.js.map +1 -1
  584. package/dist/src/telemetry/loggers.d.ts +25 -3
  585. package/dist/src/telemetry/loggers.js +333 -154
  586. package/dist/src/telemetry/loggers.js.map +1 -1
  587. package/dist/src/telemetry/loggers.test.circular.js +3 -4
  588. package/dist/src/telemetry/loggers.test.circular.js.map +1 -1
  589. package/dist/src/telemetry/loggers.test.js +868 -63
  590. package/dist/src/telemetry/loggers.test.js.map +1 -1
  591. package/dist/src/telemetry/memory-monitor.d.ts +149 -0
  592. package/dist/src/telemetry/memory-monitor.js +335 -0
  593. package/dist/src/telemetry/memory-monitor.js.map +1 -0
  594. package/dist/src/telemetry/memory-monitor.test.d.ts +6 -0
  595. package/dist/src/telemetry/memory-monitor.test.js +472 -0
  596. package/dist/src/telemetry/memory-monitor.test.js.map +1 -0
  597. package/dist/src/telemetry/metrics.d.ts +498 -11
  598. package/dist/src/telemetry/metrics.js +729 -84
  599. package/dist/src/telemetry/metrics.js.map +1 -1
  600. package/dist/src/telemetry/metrics.test.js +964 -101
  601. package/dist/src/telemetry/metrics.test.js.map +1 -1
  602. package/dist/src/telemetry/rate-limiter.d.ts +48 -0
  603. package/dist/src/telemetry/rate-limiter.js +100 -0
  604. package/dist/src/telemetry/rate-limiter.js.map +1 -0
  605. package/dist/src/telemetry/rate-limiter.test.d.ts +6 -0
  606. package/dist/src/telemetry/rate-limiter.test.js +207 -0
  607. package/dist/src/telemetry/rate-limiter.test.js.map +1 -0
  608. package/dist/src/telemetry/sdk.d.ts +1 -1
  609. package/dist/src/telemetry/sdk.js +23 -4
  610. package/dist/src/telemetry/sdk.js.map +1 -1
  611. package/dist/src/telemetry/sdk.test.js +108 -0
  612. package/dist/src/telemetry/sdk.test.js.map +1 -1
  613. package/dist/src/telemetry/semantic.d.ts +82 -0
  614. package/dist/src/telemetry/semantic.js +269 -0
  615. package/dist/src/telemetry/semantic.js.map +1 -0
  616. package/dist/src/telemetry/semantic.test.d.ts +6 -0
  617. package/dist/src/telemetry/semantic.test.js +387 -0
  618. package/dist/src/telemetry/semantic.test.js.map +1 -0
  619. package/dist/src/telemetry/telemetry-utils.d.ts +6 -0
  620. package/dist/src/telemetry/telemetry-utils.js +14 -0
  621. package/dist/src/telemetry/telemetry-utils.js.map +1 -0
  622. package/dist/src/telemetry/telemetry-utils.test.d.ts +6 -0
  623. package/dist/src/telemetry/telemetry-utils.test.js +41 -0
  624. package/dist/src/telemetry/telemetry-utils.test.js.map +1 -0
  625. package/dist/src/telemetry/telemetryAttributes.d.ts +8 -0
  626. package/dist/src/telemetry/telemetryAttributes.js +19 -0
  627. package/dist/src/telemetry/telemetryAttributes.js.map +1 -0
  628. package/dist/src/telemetry/trace.d.ts +46 -0
  629. package/dist/src/telemetry/trace.js +121 -0
  630. package/dist/src/telemetry/trace.js.map +1 -0
  631. package/dist/src/telemetry/types.d.ts +351 -25
  632. package/dist/src/telemetry/types.js +1071 -63
  633. package/dist/src/telemetry/types.js.map +1 -1
  634. package/dist/src/telemetry/uiTelemetry.d.ts +4 -4
  635. package/dist/src/telemetry/uiTelemetry.js +14 -15
  636. package/dist/src/telemetry/uiTelemetry.js.map +1 -1
  637. package/dist/src/telemetry/uiTelemetry.test.js +122 -96
  638. package/dist/src/telemetry/uiTelemetry.test.js.map +1 -1
  639. package/dist/src/test-utils/config.d.ts +3 -2
  640. package/dist/src/test-utils/config.js +1 -1
  641. package/dist/src/test-utils/config.js.map +1 -1
  642. package/dist/src/test-utils/index.d.ts +6 -0
  643. package/dist/src/test-utils/index.js +7 -0
  644. package/dist/src/test-utils/index.js.map +1 -0
  645. package/dist/src/test-utils/mock-tool.d.ts +66 -0
  646. package/dist/src/test-utils/{tools.js → mock-tool.js} +45 -29
  647. package/dist/src/test-utils/mock-tool.js.map +1 -0
  648. package/dist/src/test-utils/mockWorkspaceContext.d.ts +1 -1
  649. package/dist/src/tools/base-tool-invocation.test.d.ts +6 -0
  650. package/dist/src/tools/base-tool-invocation.test.js +85 -0
  651. package/dist/src/tools/base-tool-invocation.test.js.map +1 -0
  652. package/dist/src/tools/diffOptions.d.ts +1 -1
  653. package/dist/src/tools/diffOptions.js +21 -13
  654. package/dist/src/tools/diffOptions.js.map +1 -1
  655. package/dist/src/tools/diffOptions.test.js +58 -22
  656. package/dist/src/tools/diffOptions.test.js.map +1 -1
  657. package/dist/src/tools/edit.d.ts +10 -8
  658. package/dist/src/tools/edit.js +100 -79
  659. package/dist/src/tools/edit.js.map +1 -1
  660. package/dist/src/tools/edit.test.js +429 -163
  661. package/dist/src/tools/edit.test.js.map +1 -1
  662. package/dist/src/tools/glob.d.ts +11 -5
  663. package/dist/src/tools/glob.js +58 -42
  664. package/dist/src/tools/glob.js.map +1 -1
  665. package/dist/src/tools/glob.test.js +249 -166
  666. package/dist/src/tools/glob.test.js.map +1 -1
  667. package/dist/src/tools/grep.d.ts +7 -5
  668. package/dist/src/tools/grep.js +66 -40
  669. package/dist/src/tools/grep.js.map +1 -1
  670. package/dist/src/tools/grep.test.js +41 -15
  671. package/dist/src/tools/grep.test.js.map +1 -1
  672. package/dist/src/tools/ls.d.ts +7 -5
  673. package/dist/src/tools/ls.js +54 -68
  674. package/dist/src/tools/ls.js.map +1 -1
  675. package/dist/src/tools/ls.test.js +150 -293
  676. package/dist/src/tools/ls.test.js.map +1 -1
  677. package/dist/src/tools/mcp-client-manager.d.ts +52 -12
  678. package/dist/src/tools/mcp-client-manager.js +196 -27
  679. package/dist/src/tools/mcp-client-manager.js.map +1 -1
  680. package/dist/src/tools/mcp-client-manager.test.js +139 -13
  681. package/dist/src/tools/mcp-client-manager.test.js.map +1 -1
  682. package/dist/src/tools/mcp-client.d.ts +28 -24
  683. package/dist/src/tools/mcp-client.js +338 -351
  684. package/dist/src/tools/mcp-client.js.map +1 -1
  685. package/dist/src/tools/mcp-client.test.js +380 -193
  686. package/dist/src/tools/mcp-client.test.js.map +1 -1
  687. package/dist/src/tools/mcp-tool.d.ts +11 -5
  688. package/dist/src/tools/mcp-tool.js +66 -17
  689. package/dist/src/tools/mcp-tool.js.map +1 -1
  690. package/dist/src/tools/mcp-tool.test.js +278 -211
  691. package/dist/src/tools/mcp-tool.test.js.map +1 -1
  692. package/dist/src/tools/memoryTool.d.ts +10 -7
  693. package/dist/src/tools/memoryTool.js +28 -49
  694. package/dist/src/tools/memoryTool.js.map +1 -1
  695. package/dist/src/tools/memoryTool.test.js +26 -13
  696. package/dist/src/tools/memoryTool.test.js.map +1 -1
  697. package/dist/src/tools/message-bus-integration.test.d.ts +6 -0
  698. package/dist/src/tools/message-bus-integration.test.js +196 -0
  699. package/dist/src/tools/message-bus-integration.test.js.map +1 -0
  700. package/dist/src/tools/modifiable-tool.d.ts +7 -3
  701. package/dist/src/tools/modifiable-tool.js +41 -19
  702. package/dist/src/tools/modifiable-tool.js.map +1 -1
  703. package/dist/src/tools/modifiable-tool.test.js +70 -35
  704. package/dist/src/tools/modifiable-tool.test.js.map +1 -1
  705. package/dist/src/tools/read-file.d.ts +9 -7
  706. package/dist/src/tools/read-file.js +39 -60
  707. package/dist/src/tools/read-file.js.map +1 -1
  708. package/dist/src/tools/read-file.test.js +103 -36
  709. package/dist/src/tools/read-file.test.js.map +1 -1
  710. package/dist/src/tools/read-many-files.d.ts +9 -14
  711. package/dist/src/tools/read-many-files.js +71 -155
  712. package/dist/src/tools/read-many-files.js.map +1 -1
  713. package/dist/src/tools/read-many-files.test.js +98 -44
  714. package/dist/src/tools/read-many-files.test.js.map +1 -1
  715. package/dist/src/tools/ripGrep.d.ts +73 -0
  716. package/dist/src/tools/ripGrep.js +395 -0
  717. package/dist/src/tools/ripGrep.js.map +1 -0
  718. package/dist/src/tools/ripGrep.test.d.ts +6 -0
  719. package/dist/src/tools/ripGrep.test.js +1305 -0
  720. package/dist/src/tools/ripGrep.test.js.map +1 -0
  721. package/dist/src/tools/shell.d.ts +19 -6
  722. package/dist/src/tools/shell.js +92 -56
  723. package/dist/src/tools/shell.js.map +1 -1
  724. package/dist/src/tools/shell.test.js +176 -103
  725. package/dist/src/tools/shell.test.js.map +1 -1
  726. package/dist/src/tools/smart-edit.d.ts +78 -0
  727. package/dist/src/tools/smart-edit.js +717 -0
  728. package/dist/src/tools/smart-edit.js.map +1 -0
  729. package/dist/src/tools/smart-edit.test.d.ts +6 -0
  730. package/dist/src/tools/smart-edit.test.js +592 -0
  731. package/dist/src/tools/smart-edit.test.js.map +1 -0
  732. package/dist/src/tools/tool-error.d.ts +39 -1
  733. package/dist/src/tools/tool-error.js +54 -0
  734. package/dist/src/tools/tool-error.js.map +1 -1
  735. package/dist/src/tools/tool-names.d.ts +17 -0
  736. package/dist/src/tools/tool-names.js +21 -0
  737. package/dist/src/tools/tool-names.js.map +1 -0
  738. package/dist/src/tools/tool-registry.d.ts +38 -20
  739. package/dist/src/tools/tool-registry.js +134 -77
  740. package/dist/src/tools/tool-registry.js.map +1 -1
  741. package/dist/src/tools/tool-registry.test.js +218 -58
  742. package/dist/src/tools/tool-registry.test.js.map +1 -1
  743. package/dist/src/tools/tools.d.ts +49 -17
  744. package/dist/src/tools/tools.js +150 -8
  745. package/dist/src/tools/tools.js.map +1 -1
  746. package/dist/src/tools/tools.test.js +1 -2
  747. package/dist/src/tools/tools.test.js.map +1 -1
  748. package/dist/src/tools/web-fetch.d.ts +14 -5
  749. package/dist/src/tools/web-fetch.js +90 -44
  750. package/dist/src/tools/web-fetch.js.map +1 -1
  751. package/dist/src/tools/web-fetch.test.js +388 -20
  752. package/dist/src/tools/web-fetch.test.js.map +1 -1
  753. package/dist/src/tools/web-search.d.ts +8 -6
  754. package/dist/src/tools/web-search.js +40 -15
  755. package/dist/src/tools/web-search.js.map +1 -1
  756. package/dist/src/tools/web-search.test.js +75 -1
  757. package/dist/src/tools/web-search.test.js.map +1 -1
  758. package/dist/src/tools/write-file.d.ts +7 -5
  759. package/dist/src/tools/write-file.js +54 -54
  760. package/dist/src/tools/write-file.js.map +1 -1
  761. package/dist/src/tools/write-file.test.js +237 -146
  762. package/dist/src/tools/write-file.test.js.map +1 -1
  763. package/dist/src/tools/write-todos.d.ts +50 -0
  764. package/dist/src/tools/write-todos.js +193 -0
  765. package/dist/src/tools/write-todos.js.map +1 -0
  766. package/dist/src/tools/write-todos.test.d.ts +6 -0
  767. package/dist/src/tools/write-todos.test.js +89 -0
  768. package/dist/src/tools/write-todos.test.js.map +1 -0
  769. package/dist/src/utils/bfsFileSearch.d.ts +2 -2
  770. package/dist/src/utils/bfsFileSearch.js +16 -9
  771. package/dist/src/utils/bfsFileSearch.js.map +1 -1
  772. package/dist/src/utils/bfsFileSearch.test.js +3 -3
  773. package/dist/src/utils/bfsFileSearch.test.js.map +1 -1
  774. package/dist/src/utils/channel.d.ts +19 -0
  775. package/dist/src/utils/channel.js +49 -0
  776. package/dist/src/utils/channel.js.map +1 -0
  777. package/dist/src/utils/channel.test.d.ts +6 -0
  778. package/dist/src/utils/channel.test.js +170 -0
  779. package/dist/src/utils/channel.test.js.map +1 -0
  780. package/dist/src/utils/debugLogger.d.ts +25 -0
  781. package/dist/src/utils/debugLogger.js +33 -0
  782. package/dist/src/utils/debugLogger.js.map +1 -0
  783. package/dist/src/utils/debugLogger.test.d.ts +6 -0
  784. package/dist/src/utils/debugLogger.test.js +69 -0
  785. package/dist/src/utils/debugLogger.test.js.map +1 -0
  786. package/dist/src/utils/delay.d.ts +16 -0
  787. package/dist/src/utils/delay.js +43 -0
  788. package/dist/src/utils/delay.js.map +1 -0
  789. package/dist/src/utils/delay.test.d.ts +6 -0
  790. package/dist/src/utils/delay.test.js +88 -0
  791. package/dist/src/utils/delay.test.js.map +1 -0
  792. package/dist/src/utils/editCorrector.d.ts +9 -8
  793. package/dist/src/utils/editCorrector.js +62 -34
  794. package/dist/src/utils/editCorrector.js.map +1 -1
  795. package/dist/src/utils/editCorrector.test.js +52 -87
  796. package/dist/src/utils/editCorrector.test.js.map +1 -1
  797. package/dist/src/utils/editor.d.ts +4 -2
  798. package/dist/src/utils/editor.js +56 -55
  799. package/dist/src/utils/editor.js.map +1 -1
  800. package/dist/src/utils/editor.test.js +47 -88
  801. package/dist/src/utils/editor.test.js.map +1 -1
  802. package/dist/src/utils/environmentContext.d.ts +3 -2
  803. package/dist/src/utils/environmentContext.js +20 -33
  804. package/dist/src/utils/environmentContext.js.map +1 -1
  805. package/dist/src/utils/environmentContext.test.js +6 -34
  806. package/dist/src/utils/environmentContext.test.js.map +1 -1
  807. package/dist/src/utils/errorParsing.d.ts +1 -1
  808. package/dist/src/utils/errorParsing.js +5 -33
  809. package/dist/src/utils/errorParsing.js.map +1 -1
  810. package/dist/src/utils/errorParsing.test.js +0 -88
  811. package/dist/src/utils/errorParsing.test.js.map +1 -1
  812. package/dist/src/utils/errorReporting.d.ts +1 -1
  813. package/dist/src/utils/errors.d.ts +28 -0
  814. package/dist/src/utils/errors.js +48 -0
  815. package/dist/src/utils/errors.js.map +1 -1
  816. package/dist/src/utils/events.d.ts +121 -0
  817. package/dist/src/utils/events.js +84 -0
  818. package/dist/src/utils/events.js.map +1 -0
  819. package/dist/src/utils/events.test.d.ts +6 -0
  820. package/dist/src/utils/events.test.js +212 -0
  821. package/dist/src/utils/events.test.js.map +1 -0
  822. package/dist/src/utils/extensionLoader.d.ts +86 -0
  823. package/dist/src/utils/extensionLoader.js +208 -0
  824. package/dist/src/utils/extensionLoader.js.map +1 -0
  825. package/dist/src/utils/extensionLoader.test.d.ts +6 -0
  826. package/dist/src/utils/extensionLoader.test.js +154 -0
  827. package/dist/src/utils/extensionLoader.test.js.map +1 -0
  828. package/dist/src/utils/fetch.d.ts +1 -0
  829. package/dist/src/utils/fetch.js +5 -1
  830. package/dist/src/utils/fetch.js.map +1 -1
  831. package/dist/src/utils/fileUtils.d.ts +28 -12
  832. package/dist/src/utils/fileUtils.js +204 -81
  833. package/dist/src/utils/fileUtils.js.map +1 -1
  834. package/dist/src/utils/fileUtils.test.js +426 -82
  835. package/dist/src/utils/fileUtils.test.js.map +1 -1
  836. package/dist/src/utils/filesearch/crawler.d.ts +1 -1
  837. package/dist/src/utils/filesearch/crawler.test.js +2 -2
  838. package/dist/src/utils/filesearch/crawler.test.js.map +1 -1
  839. package/dist/src/utils/filesearch/fileSearch.d.ts +1 -0
  840. package/dist/src/utils/filesearch/fileSearch.js +14 -9
  841. package/dist/src/utils/filesearch/fileSearch.js.map +1 -1
  842. package/dist/src/utils/filesearch/fileSearch.test.js +90 -0
  843. package/dist/src/utils/filesearch/fileSearch.test.js.map +1 -1
  844. package/dist/src/utils/flashFallback.test.d.ts +6 -0
  845. package/dist/src/utils/flashFallback.test.js +103 -0
  846. package/dist/src/utils/flashFallback.test.js.map +1 -0
  847. package/dist/src/utils/formatters.d.ts +1 -0
  848. package/dist/src/utils/formatters.js +2 -1
  849. package/dist/src/utils/formatters.js.map +1 -1
  850. package/dist/src/utils/formatters.test.d.ts +6 -0
  851. package/dist/src/utils/formatters.test.js +26 -0
  852. package/dist/src/utils/formatters.test.js.map +1 -0
  853. package/dist/src/utils/geminiIgnoreParser.d.ts +18 -0
  854. package/dist/src/utils/geminiIgnoreParser.js +61 -0
  855. package/dist/src/utils/geminiIgnoreParser.js.map +1 -0
  856. package/dist/src/utils/geminiIgnoreParser.test.d.ts +6 -0
  857. package/dist/src/utils/geminiIgnoreParser.test.js +50 -0
  858. package/dist/src/utils/geminiIgnoreParser.test.js.map +1 -0
  859. package/dist/src/utils/generateContentResponseUtilities.d.ts +1 -2
  860. package/dist/src/utils/generateContentResponseUtilities.js +1 -13
  861. package/dist/src/utils/generateContentResponseUtilities.js.map +1 -1
  862. package/dist/src/utils/generateContentResponseUtilities.test.js +2 -40
  863. package/dist/src/utils/generateContentResponseUtilities.test.js.map +1 -1
  864. package/dist/src/utils/getFolderStructure.d.ts +2 -2
  865. package/dist/src/utils/getFolderStructure.js +12 -20
  866. package/dist/src/utils/getFolderStructure.js.map +1 -1
  867. package/dist/src/utils/getFolderStructure.test.js +11 -10
  868. package/dist/src/utils/getFolderStructure.test.js.map +1 -1
  869. package/dist/src/utils/gitIgnoreParser.d.ts +7 -8
  870. package/dist/src/utils/gitIgnoreParser.js +145 -36
  871. package/dist/src/utils/gitIgnoreParser.js.map +1 -1
  872. package/dist/src/utils/gitIgnoreParser.test.js +127 -38
  873. package/dist/src/utils/gitIgnoreParser.test.js.map +1 -1
  874. package/dist/src/utils/gitUtils.js +2 -2
  875. package/dist/src/utils/gitUtils.js.map +1 -1
  876. package/dist/src/utils/googleErrors.d.ts +104 -0
  877. package/dist/src/utils/googleErrors.js +152 -0
  878. package/dist/src/utils/googleErrors.js.map +1 -0
  879. package/dist/src/utils/googleErrors.test.d.ts +6 -0
  880. package/dist/src/utils/googleErrors.test.js +301 -0
  881. package/dist/src/utils/googleErrors.test.js.map +1 -0
  882. package/dist/src/utils/googleQuotaErrors.d.ts +37 -0
  883. package/dist/src/utils/googleQuotaErrors.js +157 -0
  884. package/dist/src/utils/googleQuotaErrors.js.map +1 -0
  885. package/dist/src/utils/googleQuotaErrors.test.d.ts +6 -0
  886. package/dist/src/utils/googleQuotaErrors.test.js +311 -0
  887. package/dist/src/utils/googleQuotaErrors.test.js.map +1 -0
  888. package/dist/src/utils/httpErrors.d.ts +18 -0
  889. package/dist/src/utils/httpErrors.js +36 -0
  890. package/dist/src/utils/httpErrors.js.map +1 -0
  891. package/dist/src/utils/ignorePatterns.d.ts +103 -0
  892. package/dist/src/utils/ignorePatterns.js +220 -0
  893. package/dist/src/utils/ignorePatterns.js.map +1 -0
  894. package/dist/src/utils/ignorePatterns.test.d.ts +6 -0
  895. package/dist/src/utils/ignorePatterns.test.js +246 -0
  896. package/dist/src/utils/ignorePatterns.test.js.map +1 -0
  897. package/dist/src/utils/installationManager.d.ts +16 -0
  898. package/dist/src/utils/installationManager.js +51 -0
  899. package/dist/src/utils/installationManager.js.map +1 -0
  900. package/dist/src/utils/installationManager.test.d.ts +6 -0
  901. package/dist/src/utils/installationManager.test.js +85 -0
  902. package/dist/src/utils/installationManager.test.js.map +1 -0
  903. package/dist/src/utils/language-detection.d.ts +6 -0
  904. package/dist/src/utils/language-detection.js +101 -0
  905. package/dist/src/utils/language-detection.js.map +1 -0
  906. package/dist/src/utils/llm-edit-fixer.d.ts +26 -0
  907. package/dist/src/utils/llm-edit-fixer.js +155 -0
  908. package/dist/src/utils/llm-edit-fixer.js.map +1 -0
  909. package/dist/src/utils/llm-edit-fixer.test.d.ts +6 -0
  910. package/dist/src/utils/llm-edit-fixer.test.js +223 -0
  911. package/dist/src/utils/llm-edit-fixer.test.js.map +1 -0
  912. package/dist/src/utils/memoryDiscovery.d.ts +26 -6
  913. package/dist/src/utils/memoryDiscovery.js +239 -40
  914. package/dist/src/utils/memoryDiscovery.js.map +1 -1
  915. package/dist/src/utils/memoryDiscovery.test.js +365 -44
  916. package/dist/src/utils/memoryDiscovery.test.js.map +1 -1
  917. package/dist/src/utils/memoryImportProcessor.js +19 -25
  918. package/dist/src/utils/memoryImportProcessor.js.map +1 -1
  919. package/dist/src/utils/memoryImportProcessor.test.js +24 -155
  920. package/dist/src/utils/memoryImportProcessor.test.js.map +1 -1
  921. package/dist/src/utils/messageInspectors.d.ts +1 -1
  922. package/dist/src/utils/nextSpeakerChecker.d.ts +3 -3
  923. package/dist/src/utils/nextSpeakerChecker.js +10 -4
  924. package/dist/src/utils/nextSpeakerChecker.js.map +1 -1
  925. package/dist/src/utils/nextSpeakerChecker.test.js +85 -66
  926. package/dist/src/utils/nextSpeakerChecker.test.js.map +1 -1
  927. package/dist/src/utils/package.d.ts +12 -0
  928. package/dist/src/utils/package.js +15 -0
  929. package/dist/src/utils/package.js.map +1 -0
  930. package/dist/src/utils/partUtils.d.ts +22 -1
  931. package/dist/src/utils/partUtils.js +68 -0
  932. package/dist/src/utils/partUtils.js.map +1 -1
  933. package/dist/src/utils/partUtils.test.js +112 -1
  934. package/dist/src/utils/partUtils.test.js.map +1 -1
  935. package/dist/src/utils/pathCorrector.d.ts +25 -0
  936. package/dist/src/utils/pathCorrector.js +33 -0
  937. package/dist/src/utils/pathCorrector.js.map +1 -0
  938. package/dist/src/utils/pathCorrector.test.d.ts +6 -0
  939. package/dist/src/utils/pathCorrector.test.js +83 -0
  940. package/dist/src/utils/pathCorrector.test.js.map +1 -0
  941. package/dist/src/utils/pathReader.d.ts +17 -0
  942. package/dist/src/utils/pathReader.js +92 -0
  943. package/dist/src/utils/pathReader.js.map +1 -0
  944. package/dist/src/utils/pathReader.test.d.ts +6 -0
  945. package/dist/src/utils/pathReader.test.js +406 -0
  946. package/dist/src/utils/pathReader.test.js.map +1 -0
  947. package/dist/src/utils/paths.d.ts +1 -18
  948. package/dist/src/utils/paths.js +133 -57
  949. package/dist/src/utils/paths.js.map +1 -1
  950. package/dist/src/utils/paths.test.js +200 -68
  951. package/dist/src/utils/paths.test.js.map +1 -1
  952. package/dist/src/utils/promptIdContext.d.ts +7 -0
  953. package/dist/src/utils/promptIdContext.js +8 -0
  954. package/dist/src/utils/promptIdContext.js.map +1 -0
  955. package/dist/src/utils/quotaErrorDetection.d.ts +1 -3
  956. package/dist/src/utils/quotaErrorDetection.js +0 -46
  957. package/dist/src/utils/quotaErrorDetection.js.map +1 -1
  958. package/dist/src/utils/retry.d.ts +5 -10
  959. package/dist/src/utils/retry.js +114 -197
  960. package/dist/src/utils/retry.js.map +1 -1
  961. package/dist/src/utils/retry.test.js +196 -130
  962. package/dist/src/utils/retry.test.js.map +1 -1
  963. package/dist/src/utils/safeJsonStringify.d.ts +4 -4
  964. package/dist/src/utils/safeJsonStringify.js +31 -7
  965. package/dist/src/utils/safeJsonStringify.js.map +1 -1
  966. package/dist/src/utils/schemaValidator.js +15 -1
  967. package/dist/src/utils/schemaValidator.js.map +1 -1
  968. package/dist/src/utils/schemaValidator.test.d.ts +6 -0
  969. package/dist/src/utils/schemaValidator.test.js +113 -0
  970. package/dist/src/utils/schemaValidator.test.js.map +1 -0
  971. package/dist/src/utils/session.js +1 -1
  972. package/dist/src/utils/session.js.map +1 -1
  973. package/dist/src/utils/shell-utils.d.ts +21 -3
  974. package/dist/src/utils/shell-utils.js +427 -159
  975. package/dist/src/utils/shell-utils.js.map +1 -1
  976. package/dist/src/utils/shell-utils.test.js +250 -59
  977. package/dist/src/utils/shell-utils.test.js.map +1 -1
  978. package/dist/src/utils/stdio.d.ts +32 -0
  979. package/dist/src/utils/stdio.js +85 -0
  980. package/dist/src/utils/stdio.js.map +1 -0
  981. package/dist/src/utils/stdio.test.d.ts +6 -0
  982. package/dist/src/utils/stdio.test.js +47 -0
  983. package/dist/src/utils/stdio.test.js.map +1 -0
  984. package/dist/src/utils/summarizer.d.ts +6 -4
  985. package/dist/src/utils/summarizer.js +8 -9
  986. package/dist/src/utils/summarizer.js.map +1 -1
  987. package/dist/src/utils/summarizer.test.js +32 -12
  988. package/dist/src/utils/summarizer.test.js.map +1 -1
  989. package/dist/src/utils/systemEncoding.js +7 -6
  990. package/dist/src/utils/systemEncoding.js.map +1 -1
  991. package/dist/src/utils/systemEncoding.test.js +4 -3
  992. package/dist/src/utils/systemEncoding.test.js.map +1 -1
  993. package/dist/src/utils/terminal.d.ts +14 -0
  994. package/dist/src/utils/terminal.js +38 -0
  995. package/dist/src/utils/terminal.js.map +1 -0
  996. package/dist/src/utils/terminalSerializer.d.ts +25 -0
  997. package/dist/src/utils/terminalSerializer.js +432 -0
  998. package/dist/src/utils/terminalSerializer.js.map +1 -0
  999. package/dist/src/utils/terminalSerializer.test.d.ts +6 -0
  1000. package/dist/src/utils/terminalSerializer.test.js +176 -0
  1001. package/dist/src/utils/terminalSerializer.test.js.map +1 -0
  1002. package/dist/src/utils/textUtils.d.ts +5 -0
  1003. package/dist/src/utils/textUtils.js +14 -0
  1004. package/dist/src/utils/textUtils.js.map +1 -1
  1005. package/dist/src/utils/textUtils.test.d.ts +6 -0
  1006. package/dist/src/utils/textUtils.test.js +59 -0
  1007. package/dist/src/utils/textUtils.test.js.map +1 -0
  1008. package/dist/src/utils/thoughtUtils.d.ts +21 -0
  1009. package/dist/src/utils/thoughtUtils.js +39 -0
  1010. package/dist/src/utils/thoughtUtils.js.map +1 -0
  1011. package/dist/src/utils/thoughtUtils.test.d.ts +6 -0
  1012. package/dist/src/utils/thoughtUtils.test.js +78 -0
  1013. package/dist/src/utils/thoughtUtils.test.js.map +1 -0
  1014. package/dist/src/utils/tool-utils.d.ts +19 -0
  1015. package/dist/src/utils/tool-utils.js +67 -0
  1016. package/dist/src/utils/tool-utils.js.map +1 -0
  1017. package/dist/src/utils/tool-utils.test.d.ts +6 -0
  1018. package/dist/src/utils/tool-utils.test.js +69 -0
  1019. package/dist/src/utils/tool-utils.test.js.map +1 -0
  1020. package/dist/src/utils/userAccountManager.d.ts +20 -0
  1021. package/dist/src/utils/userAccountManager.js +115 -0
  1022. package/dist/src/utils/userAccountManager.js.map +1 -0
  1023. package/dist/src/utils/userAccountManager.test.d.ts +6 -0
  1024. package/dist/src/utils/{user_account.test.js → userAccountManager.test.js} +41 -36
  1025. package/dist/src/utils/userAccountManager.test.js.map +1 -0
  1026. package/dist/src/utils/workspaceContext.d.ts +4 -3
  1027. package/dist/src/utils/workspaceContext.js +23 -17
  1028. package/dist/src/utils/workspaceContext.js.map +1 -1
  1029. package/dist/src/utils/workspaceContext.test.js +45 -19
  1030. package/dist/src/utils/workspaceContext.test.js.map +1 -1
  1031. package/dist/tsconfig.tsbuildinfo +1 -1
  1032. package/package.json +24 -10
  1033. package/dist/src/core/modelCheck.d.ts +0 -14
  1034. package/dist/src/core/modelCheck.js +0 -62
  1035. package/dist/src/core/modelCheck.js.map +0 -1
  1036. package/dist/src/test-utils/tools.d.ts +0 -44
  1037. package/dist/src/test-utils/tools.js.map +0 -1
  1038. package/dist/src/utils/flashFallback.integration.test.js +0 -118
  1039. package/dist/src/utils/flashFallback.integration.test.js.map +0 -1
  1040. package/dist/src/utils/user_account.d.ts +0 -9
  1041. package/dist/src/utils/user_account.js +0 -109
  1042. package/dist/src/utils/user_account.js.map +0 -1
  1043. package/dist/src/utils/user_account.test.js.map +0 -1
  1044. package/dist/src/utils/user_id.d.ts +0 -11
  1045. package/dist/src/utils/user_id.js +0 -49
  1046. package/dist/src/utils/user_id.js.map +0 -1
  1047. package/dist/src/utils/user_id.test.js +0 -21
  1048. package/dist/src/utils/user_id.test.js.map +0 -1
  1049. /package/dist/src/{utils/flashFallback.integration.test.d.ts → agents/codebase-investigator.test.d.ts} +0 -0
  1050. /package/dist/src/{utils/user_account.test.d.ts → agents/executor.test.d.ts} +0 -0
  1051. /package/dist/src/{utils/user_id.test.d.ts → agents/invocation.test.d.ts} +0 -0
@@ -10,12 +10,33 @@ vi.mock('../utils/secure-browser-launcher.js', () => ({
10
10
  openBrowserSecurely: mockOpenBrowserSecurely,
11
11
  }));
12
12
  vi.mock('node:crypto');
13
- vi.mock('./oauth-token-storage.js');
13
+ vi.mock('./oauth-token-storage.js', () => {
14
+ const mockSaveToken = vi.fn();
15
+ const mockGetCredentials = vi.fn();
16
+ const mockIsTokenExpired = vi.fn();
17
+ const mockdeleteCredentials = vi.fn();
18
+ return {
19
+ MCPOAuthTokenStorage: vi.fn(() => ({
20
+ saveToken: mockSaveToken,
21
+ getCredentials: mockGetCredentials,
22
+ isTokenExpired: mockIsTokenExpired,
23
+ deleteCredentials: mockdeleteCredentials,
24
+ })),
25
+ };
26
+ });
27
+ vi.mock('../utils/events.js', () => ({
28
+ coreEvents: {
29
+ emitFeedback: vi.fn(),
30
+ emitConsoleLog: vi.fn(),
31
+ },
32
+ }));
14
33
  import { describe, it, expect, beforeEach, afterEach } from 'vitest';
15
34
  import * as http from 'node:http';
16
35
  import * as crypto from 'node:crypto';
17
- import { MCPOAuthProvider, } from './oauth-provider.js';
36
+ import { MCPOAuthProvider } from './oauth-provider.js';
18
37
  import { MCPOAuthTokenStorage } from './oauth-token-storage.js';
38
+ import { OAuthUtils, } from './oauth-utils.js';
39
+ import { coreEvents } from '../utils/events.js';
19
40
  // Mock fetch globally
20
41
  const mockFetch = vi.fn();
21
42
  global.fetch = mockFetch;
@@ -49,11 +70,12 @@ const createMockResponse = (options) => {
49
70
  }
50
71
  return response;
51
72
  };
52
- // Define a reusable mock server with .listen, .close, and .on methods
73
+ // Define a reusable mock server with .listen, .close, .on, and .address methods
53
74
  const mockHttpServer = {
54
75
  listen: vi.fn(),
55
76
  close: vi.fn(),
56
77
  on: vi.fn(),
78
+ address: vi.fn(() => ({ address: 'localhost', family: 'IPv4', port: 7777 })),
57
79
  };
58
80
  vi.mock('node:http', () => ({
59
81
  createServer: vi.fn(() => mockHttpServer),
@@ -112,8 +134,9 @@ describe('MCPOAuthProvider', () => {
112
134
  return Buffer.alloc(size);
113
135
  });
114
136
  // Mock token storage
115
- vi.mocked(MCPOAuthTokenStorage.saveToken).mockResolvedValue(undefined);
116
- vi.mocked(MCPOAuthTokenStorage.getToken).mockResolvedValue(null);
137
+ const tokenStorage = new MCPOAuthTokenStorage();
138
+ vi.mocked(tokenStorage.saveToken).mockResolvedValue(undefined);
139
+ vi.mocked(tokenStorage.getCredentials).mockResolvedValue(null);
117
140
  });
118
141
  afterEach(() => {
119
142
  vi.restoreAllMocks();
@@ -147,7 +170,8 @@ describe('MCPOAuthProvider', () => {
147
170
  text: JSON.stringify(mockTokenResponse),
148
171
  json: mockTokenResponse,
149
172
  }));
150
- const result = await MCPOAuthProvider.authenticate('test-server', mockConfig);
173
+ const authProvider = new MCPOAuthProvider();
174
+ const result = await authProvider.authenticate('test-server', mockConfig);
151
175
  expect(result).toEqual({
152
176
  accessToken: 'access_token_123',
153
177
  refreshToken: 'refresh_token_456',
@@ -156,7 +180,8 @@ describe('MCPOAuthProvider', () => {
156
180
  expiresAt: expect.any(Number),
157
181
  });
158
182
  expect(mockOpenBrowserSecurely).toHaveBeenCalledWith(expect.stringContaining('authorize'));
159
- expect(MCPOAuthTokenStorage.saveToken).toHaveBeenCalledWith('test-server', expect.objectContaining({ accessToken: 'access_token_123' }), 'test-client-id', 'https://auth.example.com/token', undefined);
183
+ const tokenStorage = new MCPOAuthTokenStorage();
184
+ expect(tokenStorage.saveToken).toHaveBeenCalledWith('test-server', expect.objectContaining({ accessToken: 'access_token_123' }), 'test-client-id', 'https://auth.example.com/token', undefined);
160
185
  });
161
186
  it('should handle OAuth discovery when no authorization URL provided', async () => {
162
187
  // Use a mutable config object
@@ -219,7 +244,8 @@ describe('MCPOAuthProvider', () => {
219
244
  text: JSON.stringify(mockTokenResponse),
220
245
  json: mockTokenResponse,
221
246
  }));
222
- const result = await MCPOAuthProvider.authenticate('test-server', configWithoutAuth, 'https://api.example.com');
247
+ const authProvider = new MCPOAuthProvider();
248
+ const result = await authProvider.authenticate('test-server', configWithoutAuth, 'https://api.example.com');
223
249
  expect(result).toBeDefined();
224
250
  expect(mockFetch).toHaveBeenCalledWith('https://discovered.auth.com/token', expect.objectContaining({
225
251
  method: 'POST',
@@ -228,7 +254,61 @@ describe('MCPOAuthProvider', () => {
228
254
  }),
229
255
  }));
230
256
  });
231
- it('should perform dynamic client registration when no client ID provided', async () => {
257
+ it('should perform dynamic client registration when no client ID is provided but registration URL is provided', async () => {
258
+ const configWithoutClient = {
259
+ ...mockConfig,
260
+ registrationUrl: 'https://auth.example.com/register',
261
+ };
262
+ delete configWithoutClient.clientId;
263
+ const mockRegistrationResponse = {
264
+ client_id: 'dynamic_client_id',
265
+ client_secret: 'dynamic_client_secret',
266
+ redirect_uris: ['http://localhost:7777/oauth/callback'],
267
+ grant_types: ['authorization_code', 'refresh_token'],
268
+ response_types: ['code'],
269
+ token_endpoint_auth_method: 'none',
270
+ };
271
+ mockFetch.mockResolvedValueOnce(createMockResponse({
272
+ ok: true,
273
+ contentType: 'application/json',
274
+ text: JSON.stringify(mockRegistrationResponse),
275
+ json: mockRegistrationResponse,
276
+ }));
277
+ // Setup callback handler
278
+ let callbackHandler;
279
+ vi.mocked(http.createServer).mockImplementation((handler) => {
280
+ callbackHandler = handler;
281
+ return mockHttpServer;
282
+ });
283
+ mockHttpServer.listen.mockImplementation((port, callback) => {
284
+ callback?.();
285
+ setTimeout(() => {
286
+ const mockReq = {
287
+ url: '/oauth/callback?code=auth_code_123&state=bW9ja19zdGF0ZV8xNl9ieXRlcw',
288
+ };
289
+ const mockRes = {
290
+ writeHead: vi.fn(),
291
+ end: vi.fn(),
292
+ };
293
+ callbackHandler(mockReq, mockRes);
294
+ }, 10);
295
+ });
296
+ // Mock token exchange
297
+ mockFetch.mockResolvedValueOnce(createMockResponse({
298
+ ok: true,
299
+ contentType: 'application/json',
300
+ text: JSON.stringify(mockTokenResponse),
301
+ json: mockTokenResponse,
302
+ }));
303
+ const authProvider = new MCPOAuthProvider();
304
+ const result = await authProvider.authenticate('test-server', configWithoutClient);
305
+ expect(result).toBeDefined();
306
+ expect(mockFetch).toHaveBeenCalledWith('https://auth.example.com/register', expect.objectContaining({
307
+ method: 'POST',
308
+ headers: { 'Content-Type': 'application/json' },
309
+ }));
310
+ });
311
+ it('should perform OAuth discovery and dynamic client registration when no client ID or registration URL provided', async () => {
232
312
  const configWithoutClient = { ...mockConfig };
233
313
  delete configWithoutClient.clientId;
234
314
  const mockRegistrationResponse = {
@@ -240,6 +320,7 @@ describe('MCPOAuthProvider', () => {
240
320
  token_endpoint_auth_method: 'none',
241
321
  };
242
322
  const mockAuthServerMetadata = {
323
+ issuer: 'https://auth.example.com',
243
324
  authorization_endpoint: 'https://auth.example.com/authorize',
244
325
  token_endpoint: 'https://auth.example.com/token',
245
326
  registration_endpoint: 'https://auth.example.com/register',
@@ -283,7 +364,89 @@ describe('MCPOAuthProvider', () => {
283
364
  text: JSON.stringify(mockTokenResponse),
284
365
  json: mockTokenResponse,
285
366
  }));
286
- const result = await MCPOAuthProvider.authenticate('test-server', configWithoutClient);
367
+ const authProvider = new MCPOAuthProvider();
368
+ const result = await authProvider.authenticate('test-server', configWithoutClient);
369
+ expect(result).toBeDefined();
370
+ expect(mockFetch).toHaveBeenCalledWith('https://auth.example.com/register', expect.objectContaining({
371
+ method: 'POST',
372
+ headers: { 'Content-Type': 'application/json' },
373
+ }));
374
+ });
375
+ it('should perform OAuth discovery once and dynamic client registration when no client ID, authorization URL or registration URL provided', async () => {
376
+ const configWithoutClientAndAuthorizationUrl = {
377
+ ...mockConfig,
378
+ };
379
+ delete configWithoutClientAndAuthorizationUrl.clientId;
380
+ delete configWithoutClientAndAuthorizationUrl.authorizationUrl;
381
+ const mockResourceMetadata = {
382
+ resource: 'https://api.example.com',
383
+ authorization_servers: ['https://auth.example.com'],
384
+ };
385
+ const mockAuthServerMetadata = {
386
+ issuer: 'https://auth.example.com',
387
+ authorization_endpoint: 'https://auth.example.com/authorize',
388
+ token_endpoint: 'https://auth.example.com/token',
389
+ registration_endpoint: 'https://auth.example.com/register',
390
+ };
391
+ const mockRegistrationResponse = {
392
+ client_id: 'dynamic_client_id',
393
+ client_secret: 'dynamic_client_secret',
394
+ redirect_uris: ['http://localhost:7777/oauth/callback'],
395
+ grant_types: ['authorization_code', 'refresh_token'],
396
+ response_types: ['code'],
397
+ token_endpoint_auth_method: 'none',
398
+ };
399
+ mockFetch
400
+ .mockResolvedValueOnce(createMockResponse({
401
+ ok: true,
402
+ status: 200,
403
+ }))
404
+ .mockResolvedValueOnce(createMockResponse({
405
+ ok: true,
406
+ contentType: 'application/json',
407
+ text: JSON.stringify(mockResourceMetadata),
408
+ json: mockResourceMetadata,
409
+ }))
410
+ .mockResolvedValueOnce(createMockResponse({
411
+ ok: true,
412
+ contentType: 'application/json',
413
+ text: JSON.stringify(mockAuthServerMetadata),
414
+ json: mockAuthServerMetadata,
415
+ }))
416
+ .mockResolvedValueOnce(createMockResponse({
417
+ ok: true,
418
+ contentType: 'application/json',
419
+ text: JSON.stringify(mockRegistrationResponse),
420
+ json: mockRegistrationResponse,
421
+ }));
422
+ // Setup callback handler
423
+ let callbackHandler;
424
+ vi.mocked(http.createServer).mockImplementation((handler) => {
425
+ callbackHandler = handler;
426
+ return mockHttpServer;
427
+ });
428
+ mockHttpServer.listen.mockImplementation((port, callback) => {
429
+ callback?.();
430
+ setTimeout(() => {
431
+ const mockReq = {
432
+ url: '/oauth/callback?code=auth_code_123&state=bW9ja19zdGF0ZV8xNl9ieXRlcw',
433
+ };
434
+ const mockRes = {
435
+ writeHead: vi.fn(),
436
+ end: vi.fn(),
437
+ };
438
+ callbackHandler(mockReq, mockRes);
439
+ }, 10);
440
+ });
441
+ // Mock token exchange
442
+ mockFetch.mockResolvedValueOnce(createMockResponse({
443
+ ok: true,
444
+ contentType: 'application/json',
445
+ text: JSON.stringify(mockTokenResponse),
446
+ json: mockTokenResponse,
447
+ }));
448
+ const authProvider = new MCPOAuthProvider();
449
+ const result = await authProvider.authenticate('test-server', configWithoutClientAndAuthorizationUrl, 'https://api.example.com');
287
450
  expect(result).toBeDefined();
288
451
  expect(mockFetch).toHaveBeenCalledWith('https://auth.example.com/register', expect.objectContaining({
289
452
  method: 'POST',
@@ -309,7 +472,8 @@ describe('MCPOAuthProvider', () => {
309
472
  callbackHandler(mockReq, mockRes);
310
473
  }, 10);
311
474
  });
312
- await expect(MCPOAuthProvider.authenticate('test-server', mockConfig)).rejects.toThrow('OAuth error: access_denied');
475
+ const authProvider = new MCPOAuthProvider();
476
+ await expect(authProvider.authenticate('test-server', mockConfig)).rejects.toThrow('OAuth error: access_denied');
313
477
  });
314
478
  it('should handle state mismatch in callback', async () => {
315
479
  let callbackHandler;
@@ -330,7 +494,8 @@ describe('MCPOAuthProvider', () => {
330
494
  callbackHandler(mockReq, mockRes);
331
495
  }, 10);
332
496
  });
333
- await expect(MCPOAuthProvider.authenticate('test-server', mockConfig)).rejects.toThrow('State mismatch - possible CSRF attack');
497
+ const authProvider = new MCPOAuthProvider();
498
+ await expect(authProvider.authenticate('test-server', mockConfig)).rejects.toThrow('State mismatch - possible CSRF attack');
334
499
  });
335
500
  it('should handle token exchange failure', async () => {
336
501
  let callbackHandler;
@@ -357,7 +522,185 @@ describe('MCPOAuthProvider', () => {
357
522
  contentType: 'application/x-www-form-urlencoded',
358
523
  text: 'error=invalid_grant&error_description=Invalid grant',
359
524
  }));
360
- await expect(MCPOAuthProvider.authenticate('test-server', mockConfig)).rejects.toThrow('Token exchange failed: invalid_grant - Invalid grant');
525
+ const authProvider = new MCPOAuthProvider();
526
+ await expect(authProvider.authenticate('test-server', mockConfig)).rejects.toThrow('Token exchange failed: invalid_grant - Invalid grant');
527
+ });
528
+ it('should handle OAuth discovery failure', async () => {
529
+ const configWithoutAuth = { ...mockConfig };
530
+ delete configWithoutAuth.authorizationUrl;
531
+ delete configWithoutAuth.tokenUrl;
532
+ mockFetch.mockResolvedValueOnce(createMockResponse({
533
+ ok: false,
534
+ status: 404,
535
+ }));
536
+ const authProvider = new MCPOAuthProvider();
537
+ await expect(authProvider.authenticate('test-server', configWithoutAuth, 'https://api.example.com')).rejects.toThrow('Failed to discover OAuth configuration from MCP server');
538
+ });
539
+ it('should handle authorization server metadata discovery failure', async () => {
540
+ const configWithoutClient = { ...mockConfig };
541
+ delete configWithoutClient.clientId;
542
+ mockFetch.mockResolvedValue(createMockResponse({
543
+ ok: false,
544
+ status: 404,
545
+ }));
546
+ // Prevent callback server from hanging the test
547
+ mockHttpServer.listen.mockImplementation((port, callback) => {
548
+ callback?.();
549
+ });
550
+ const authProvider = new MCPOAuthProvider();
551
+ await expect(authProvider.authenticate('test-server', configWithoutClient)).rejects.toThrow('Failed to fetch authorization server metadata for client registration');
552
+ });
553
+ it('should handle invalid callback request', async () => {
554
+ let callbackHandler;
555
+ vi.mocked(http.createServer).mockImplementation((handler) => {
556
+ callbackHandler = handler;
557
+ return mockHttpServer;
558
+ });
559
+ mockHttpServer.listen.mockImplementation((port, callback) => {
560
+ callback?.();
561
+ setTimeout(() => {
562
+ const mockReq = {
563
+ url: '/invalid-path',
564
+ };
565
+ const mockRes = {
566
+ writeHead: vi.fn(),
567
+ end: vi.fn(),
568
+ };
569
+ callbackHandler(mockReq, mockRes);
570
+ }, 0);
571
+ });
572
+ const authProvider = new MCPOAuthProvider();
573
+ // The test will timeout if the server does not handle the invalid request correctly.
574
+ // We are testing that the server does not hang.
575
+ await Promise.race([
576
+ authProvider.authenticate('test-server', mockConfig),
577
+ new Promise((resolve) => setTimeout(resolve, 1000)),
578
+ ]);
579
+ });
580
+ it('should handle token exchange failure with non-json response', async () => {
581
+ let callbackHandler;
582
+ vi.mocked(http.createServer).mockImplementation((handler) => {
583
+ callbackHandler = handler;
584
+ return mockHttpServer;
585
+ });
586
+ mockHttpServer.listen.mockImplementation((port, callback) => {
587
+ callback?.();
588
+ setTimeout(() => {
589
+ const mockReq = {
590
+ url: '/oauth/callback?code=auth_code_123&state=bW9ja19zdGF0ZV8xNl9ieXRlcw',
591
+ };
592
+ const mockRes = {
593
+ writeHead: vi.fn(),
594
+ end: vi.fn(),
595
+ };
596
+ callbackHandler(mockReq, mockRes);
597
+ }, 10);
598
+ });
599
+ mockFetch.mockResolvedValueOnce(createMockResponse({
600
+ ok: false,
601
+ status: 500,
602
+ contentType: 'text/html',
603
+ text: 'Internal Server Error',
604
+ }));
605
+ const authProvider = new MCPOAuthProvider();
606
+ await expect(authProvider.authenticate('test-server', mockConfig)).rejects.toThrow('Token exchange failed: 500 - Internal Server Error');
607
+ });
608
+ it('should handle token exchange with unexpected content type', async () => {
609
+ let callbackHandler;
610
+ vi.mocked(http.createServer).mockImplementation((handler) => {
611
+ callbackHandler = handler;
612
+ return mockHttpServer;
613
+ });
614
+ mockHttpServer.listen.mockImplementation((port, callback) => {
615
+ callback?.();
616
+ setTimeout(() => {
617
+ const mockReq = {
618
+ url: '/oauth/callback?code=auth_code_123&state=bW9ja19zdGF0ZV8xNl9ieXRlcw',
619
+ };
620
+ const mockRes = {
621
+ writeHead: vi.fn(),
622
+ end: vi.fn(),
623
+ };
624
+ callbackHandler(mockReq, mockRes);
625
+ }, 10);
626
+ });
627
+ mockFetch.mockResolvedValueOnce(createMockResponse({
628
+ ok: true,
629
+ contentType: 'text/plain',
630
+ text: 'access_token=plain_text_token',
631
+ }));
632
+ const authProvider = new MCPOAuthProvider();
633
+ const result = await authProvider.authenticate('test-server', mockConfig);
634
+ expect(result.accessToken).toBe('plain_text_token');
635
+ });
636
+ it('should handle refresh token failure with non-json response', async () => {
637
+ mockFetch.mockResolvedValueOnce(createMockResponse({
638
+ ok: false,
639
+ status: 500,
640
+ contentType: 'text/html',
641
+ text: 'Internal Server Error',
642
+ }));
643
+ const authProvider = new MCPOAuthProvider();
644
+ await expect(authProvider.refreshAccessToken(mockConfig, 'invalid_refresh_token', 'https://auth.example.com/token')).rejects.toThrow('Token refresh failed: 500 - Internal Server Error');
645
+ });
646
+ it('should handle refresh token with unexpected content type', async () => {
647
+ mockFetch.mockResolvedValueOnce(createMockResponse({
648
+ ok: true,
649
+ contentType: 'text/plain',
650
+ text: 'access_token=plain_text_token',
651
+ }));
652
+ const authProvider = new MCPOAuthProvider();
653
+ const result = await authProvider.refreshAccessToken(mockConfig, 'refresh_token', 'https://auth.example.com/token');
654
+ expect(result.access_token).toBe('plain_text_token');
655
+ });
656
+ it('should continue authentication when browser fails to open', async () => {
657
+ mockOpenBrowserSecurely.mockRejectedValue(new Error('Browser not found'));
658
+ let callbackHandler;
659
+ vi.mocked(http.createServer).mockImplementation((handler) => {
660
+ callbackHandler = handler;
661
+ return mockHttpServer;
662
+ });
663
+ mockHttpServer.listen.mockImplementation((port, callback) => {
664
+ callback?.();
665
+ setTimeout(() => {
666
+ const mockReq = {
667
+ url: '/oauth/callback?code=auth_code_123&state=bW9ja19zdGF0ZV8xNl9ieXRlcw',
668
+ };
669
+ const mockRes = {
670
+ writeHead: vi.fn(),
671
+ end: vi.fn(),
672
+ };
673
+ callbackHandler(mockReq, mockRes);
674
+ }, 10);
675
+ });
676
+ mockFetch.mockResolvedValueOnce(createMockResponse({
677
+ ok: true,
678
+ contentType: 'application/json',
679
+ text: JSON.stringify(mockTokenResponse),
680
+ json: mockTokenResponse,
681
+ }));
682
+ const authProvider = new MCPOAuthProvider();
683
+ const result = await authProvider.authenticate('test-server', mockConfig);
684
+ expect(result).toBeDefined();
685
+ });
686
+ it('should return null when token is expired and no refresh token is available', async () => {
687
+ const expiredCredentials = {
688
+ serverName: 'test-server',
689
+ token: {
690
+ ...mockToken,
691
+ refreshToken: undefined,
692
+ expiresAt: Date.now() - 3600000,
693
+ },
694
+ clientId: 'test-client-id',
695
+ tokenUrl: 'https://auth.example.com/token',
696
+ updatedAt: Date.now(),
697
+ };
698
+ const tokenStorage = new MCPOAuthTokenStorage();
699
+ vi.mocked(tokenStorage.getCredentials).mockResolvedValue(expiredCredentials);
700
+ vi.mocked(tokenStorage.isTokenExpired).mockReturnValue(true);
701
+ const authProvider = new MCPOAuthProvider();
702
+ const result = await authProvider.getValidToken('test-server', mockConfig);
703
+ expect(result).toBeNull();
361
704
  });
362
705
  it('should handle callback timeout', async () => {
363
706
  vi.mocked(http.createServer).mockImplementation(() => mockHttpServer);
@@ -374,7 +717,8 @@ describe('MCPOAuthProvider', () => {
374
717
  }
375
718
  return originalSetTimeout(callback, 0);
376
719
  });
377
- await expect(MCPOAuthProvider.authenticate('test-server', mockConfig)).rejects.toThrow('OAuth callback timeout');
720
+ const authProvider = new MCPOAuthProvider();
721
+ await expect(authProvider.authenticate('test-server', mockConfig)).rejects.toThrow('OAuth callback timeout');
378
722
  global.setTimeout = originalSetTimeout;
379
723
  });
380
724
  });
@@ -392,7 +736,8 @@ describe('MCPOAuthProvider', () => {
392
736
  text: JSON.stringify(refreshResponse),
393
737
  json: refreshResponse,
394
738
  }));
395
- const result = await MCPOAuthProvider.refreshAccessToken(mockConfig, 'old_refresh_token', 'https://auth.example.com/token');
739
+ const authProvider = new MCPOAuthProvider();
740
+ const result = await authProvider.refreshAccessToken(mockConfig, 'old_refresh_token', 'https://auth.example.com/token');
396
741
  expect(result).toEqual(refreshResponse);
397
742
  expect(mockFetch).toHaveBeenCalledWith('https://auth.example.com/token', expect.objectContaining({
398
743
  method: 'POST',
@@ -410,7 +755,8 @@ describe('MCPOAuthProvider', () => {
410
755
  text: JSON.stringify(mockTokenResponse),
411
756
  json: mockTokenResponse,
412
757
  }));
413
- await MCPOAuthProvider.refreshAccessToken(mockConfig, 'refresh_token', 'https://auth.example.com/token');
758
+ const authProvider = new MCPOAuthProvider();
759
+ await authProvider.refreshAccessToken(mockConfig, 'refresh_token', 'https://auth.example.com/token');
414
760
  const fetchCall = mockFetch.mock.calls[0];
415
761
  expect(fetchCall[1].body).toContain('client_secret=test-client-secret');
416
762
  });
@@ -421,7 +767,8 @@ describe('MCPOAuthProvider', () => {
421
767
  contentType: 'application/x-www-form-urlencoded',
422
768
  text: 'error=invalid_request&error_description=Invalid refresh token',
423
769
  }));
424
- await expect(MCPOAuthProvider.refreshAccessToken(mockConfig, 'invalid_refresh_token', 'https://auth.example.com/token')).rejects.toThrow('Token refresh failed: invalid_request - Invalid refresh token');
770
+ const authProvider = new MCPOAuthProvider();
771
+ await expect(authProvider.refreshAccessToken(mockConfig, 'invalid_refresh_token', 'https://auth.example.com/token')).rejects.toThrow('Token refresh failed: invalid_request - Invalid refresh token');
425
772
  });
426
773
  });
427
774
  describe('getValidToken', () => {
@@ -433,9 +780,11 @@ describe('MCPOAuthProvider', () => {
433
780
  tokenUrl: 'https://auth.example.com/token',
434
781
  updatedAt: Date.now(),
435
782
  };
436
- vi.mocked(MCPOAuthTokenStorage.getToken).mockResolvedValue(validCredentials);
437
- vi.mocked(MCPOAuthTokenStorage.isTokenExpired).mockReturnValue(false);
438
- const result = await MCPOAuthProvider.getValidToken('test-server', mockConfig);
783
+ const tokenStorage = new MCPOAuthTokenStorage();
784
+ vi.mocked(tokenStorage.getCredentials).mockResolvedValue(validCredentials);
785
+ vi.mocked(tokenStorage.isTokenExpired).mockReturnValue(false);
786
+ const authProvider = new MCPOAuthProvider();
787
+ const result = await authProvider.getValidToken('test-server', mockConfig);
439
788
  expect(result).toBe('access_token_123');
440
789
  });
441
790
  it('should refresh expired token and return new token', async () => {
@@ -446,8 +795,9 @@ describe('MCPOAuthProvider', () => {
446
795
  tokenUrl: 'https://auth.example.com/token',
447
796
  updatedAt: Date.now(),
448
797
  };
449
- vi.mocked(MCPOAuthTokenStorage.getToken).mockResolvedValue(expiredCredentials);
450
- vi.mocked(MCPOAuthTokenStorage.isTokenExpired).mockReturnValue(true);
798
+ const tokenStorage = new MCPOAuthTokenStorage();
799
+ vi.mocked(tokenStorage.getCredentials).mockResolvedValue(expiredCredentials);
800
+ vi.mocked(tokenStorage.isTokenExpired).mockReturnValue(true);
451
801
  const refreshResponse = {
452
802
  access_token: 'new_access_token',
453
803
  token_type: 'Bearer',
@@ -460,13 +810,16 @@ describe('MCPOAuthProvider', () => {
460
810
  text: JSON.stringify(refreshResponse),
461
811
  json: refreshResponse,
462
812
  }));
463
- const result = await MCPOAuthProvider.getValidToken('test-server', mockConfig);
813
+ const authProvider = new MCPOAuthProvider();
814
+ const result = await authProvider.getValidToken('test-server', mockConfig);
464
815
  expect(result).toBe('new_access_token');
465
- expect(MCPOAuthTokenStorage.saveToken).toHaveBeenCalledWith('test-server', expect.objectContaining({ accessToken: 'new_access_token' }), 'test-client-id', 'https://auth.example.com/token', undefined);
816
+ expect(tokenStorage.saveToken).toHaveBeenCalledWith('test-server', expect.objectContaining({ accessToken: 'new_access_token' }), 'test-client-id', 'https://auth.example.com/token', undefined);
466
817
  });
467
818
  it('should return null when no credentials exist', async () => {
468
- vi.mocked(MCPOAuthTokenStorage.getToken).mockResolvedValue(null);
469
- const result = await MCPOAuthProvider.getValidToken('test-server', mockConfig);
819
+ const tokenStorage = new MCPOAuthTokenStorage();
820
+ vi.mocked(tokenStorage.getCredentials).mockResolvedValue(null);
821
+ const authProvider = new MCPOAuthProvider();
822
+ const result = await authProvider.getValidToken('test-server', mockConfig);
470
823
  expect(result).toBeNull();
471
824
  });
472
825
  it('should handle refresh failure and remove invalid token', async () => {
@@ -477,19 +830,21 @@ describe('MCPOAuthProvider', () => {
477
830
  tokenUrl: 'https://auth.example.com/token',
478
831
  updatedAt: Date.now(),
479
832
  };
480
- vi.mocked(MCPOAuthTokenStorage.getToken).mockResolvedValue(expiredCredentials);
481
- vi.mocked(MCPOAuthTokenStorage.isTokenExpired).mockReturnValue(true);
482
- vi.mocked(MCPOAuthTokenStorage.removeToken).mockResolvedValue(undefined);
833
+ const tokenStorage = new MCPOAuthTokenStorage();
834
+ vi.mocked(tokenStorage.getCredentials).mockResolvedValue(expiredCredentials);
835
+ vi.mocked(tokenStorage.isTokenExpired).mockReturnValue(true);
836
+ vi.mocked(tokenStorage.deleteCredentials).mockResolvedValue(undefined);
483
837
  mockFetch.mockResolvedValueOnce(createMockResponse({
484
838
  ok: false,
485
839
  status: 400,
486
840
  contentType: 'application/x-www-form-urlencoded',
487
841
  text: 'error=invalid_request&error_description=Invalid refresh token',
488
842
  }));
489
- const result = await MCPOAuthProvider.getValidToken('test-server', mockConfig);
843
+ const authProvider = new MCPOAuthProvider();
844
+ const result = await authProvider.getValidToken('test-server', mockConfig);
490
845
  expect(result).toBeNull();
491
- expect(MCPOAuthTokenStorage.removeToken).toHaveBeenCalledWith('test-server');
492
- expect(console.error).toHaveBeenCalledWith(expect.stringContaining('Failed to refresh token'));
846
+ expect(tokenStorage.deleteCredentials).toHaveBeenCalledWith('test-server');
847
+ expect(coreEvents.emitFeedback).toHaveBeenCalledWith('error', expect.stringContaining('Failed to refresh auth token'), expect.any(Error));
493
848
  });
494
849
  it('should return null for token without refresh capability', async () => {
495
850
  const tokenWithoutRefresh = {
@@ -503,9 +858,11 @@ describe('MCPOAuthProvider', () => {
503
858
  tokenUrl: 'https://auth.example.com/token',
504
859
  updatedAt: Date.now(),
505
860
  };
506
- vi.mocked(MCPOAuthTokenStorage.getToken).mockResolvedValue(tokenWithoutRefresh);
507
- vi.mocked(MCPOAuthTokenStorage.isTokenExpired).mockReturnValue(true);
508
- const result = await MCPOAuthProvider.getValidToken('test-server', mockConfig);
861
+ const tokenStorage = new MCPOAuthTokenStorage();
862
+ vi.mocked(tokenStorage.getCredentials).mockResolvedValue(tokenWithoutRefresh);
863
+ vi.mocked(tokenStorage.isTokenExpired).mockReturnValue(true);
864
+ const authProvider = new MCPOAuthProvider();
865
+ const result = await authProvider.getValidToken('test-server', mockConfig);
509
866
  expect(result).toBeNull();
510
867
  });
511
868
  });
@@ -537,7 +894,8 @@ describe('MCPOAuthProvider', () => {
537
894
  text: JSON.stringify(mockTokenResponse),
538
895
  json: mockTokenResponse,
539
896
  }));
540
- await MCPOAuthProvider.authenticate('test-server', mockConfig);
897
+ const authProvider = new MCPOAuthProvider();
898
+ await authProvider.authenticate('test-server', mockConfig);
541
899
  expect(crypto.randomBytes).toHaveBeenCalledWith(32); // code verifier
542
900
  expect(crypto.randomBytes).toHaveBeenCalledWith(16); // state
543
901
  expect(crypto.createHash).toHaveBeenCalledWith('sha256');
@@ -575,7 +933,8 @@ describe('MCPOAuthProvider', () => {
575
933
  text: JSON.stringify(mockTokenResponse),
576
934
  json: mockTokenResponse,
577
935
  }));
578
- await MCPOAuthProvider.authenticate('test-server', mockConfig, 'https://auth.example.com');
936
+ const authProvider = new MCPOAuthProvider();
937
+ await authProvider.authenticate('test-server', mockConfig, 'https://auth.example.com');
579
938
  expect(capturedUrl).toBeDefined();
580
939
  expect(capturedUrl).toContain('response_type=code');
581
940
  expect(capturedUrl).toContain('client_id=test-client-id');
@@ -620,7 +979,8 @@ describe('MCPOAuthProvider', () => {
620
979
  ...mockConfig,
621
980
  authorizationUrl: 'https://auth.example.com/authorize?audience=1234',
622
981
  };
623
- await MCPOAuthProvider.authenticate('test-server', configWithParamsInUrl);
982
+ const authProvider = new MCPOAuthProvider();
983
+ await authProvider.authenticate('test-server', configWithParamsInUrl);
624
984
  const url = new URL(capturedUrl);
625
985
  expect(url.searchParams.get('audience')).toBe('1234');
626
986
  expect(url.searchParams.get('client_id')).toBe('test-client-id');
@@ -661,12 +1021,194 @@ describe('MCPOAuthProvider', () => {
661
1021
  ...mockConfig,
662
1022
  authorizationUrl: 'https://auth.example.com/authorize#login',
663
1023
  };
664
- await MCPOAuthProvider.authenticate('test-server', configWithFragment);
1024
+ const authProvider = new MCPOAuthProvider();
1025
+ await authProvider.authenticate('test-server', configWithFragment);
665
1026
  const url = new URL(capturedUrl);
666
1027
  expect(url.searchParams.get('client_id')).toBe('test-client-id');
667
1028
  expect(url.hash).toBe('#login');
668
1029
  expect(url.pathname).toBe('/authorize');
669
1030
  });
1031
+ it('should use user-configured scopes over discovered scopes', async () => {
1032
+ let capturedUrl;
1033
+ mockOpenBrowserSecurely.mockImplementation((url) => {
1034
+ capturedUrl = url;
1035
+ return Promise.resolve();
1036
+ });
1037
+ const configWithUserScopes = {
1038
+ ...mockConfig,
1039
+ clientId: 'test-client-id',
1040
+ clientSecret: 'test-client-secret',
1041
+ scopes: ['user-scope'],
1042
+ };
1043
+ delete configWithUserScopes.authorizationUrl;
1044
+ delete configWithUserScopes.tokenUrl;
1045
+ const mockResourceMetadata = {
1046
+ authorization_servers: ['https://discovered.auth.com'],
1047
+ };
1048
+ const mockAuthServerMetadata = {
1049
+ authorization_endpoint: 'https://discovered.auth.com/authorize',
1050
+ token_endpoint: 'https://discovered.auth.com/token',
1051
+ scopes_supported: ['discovered-scope'],
1052
+ };
1053
+ mockFetch
1054
+ .mockResolvedValueOnce(createMockResponse({ ok: true, status: 200 }))
1055
+ .mockResolvedValueOnce(createMockResponse({
1056
+ ok: true,
1057
+ contentType: 'application/json',
1058
+ text: JSON.stringify(mockResourceMetadata),
1059
+ json: mockResourceMetadata,
1060
+ }))
1061
+ .mockResolvedValueOnce(createMockResponse({
1062
+ ok: true,
1063
+ contentType: 'application/json',
1064
+ text: JSON.stringify(mockAuthServerMetadata),
1065
+ json: mockAuthServerMetadata,
1066
+ }));
1067
+ // Setup callback handler
1068
+ let callbackHandler;
1069
+ vi.mocked(http.createServer).mockImplementation((handler) => {
1070
+ callbackHandler = handler;
1071
+ return mockHttpServer;
1072
+ });
1073
+ mockHttpServer.listen.mockImplementation((port, callback) => {
1074
+ callback?.();
1075
+ setTimeout(() => {
1076
+ const mockReq = {
1077
+ url: '/oauth/callback?code=auth_code&state=bW9ja19zdGF0ZV8xNl9ieXRlcw',
1078
+ };
1079
+ const mockRes = { writeHead: vi.fn(), end: vi.fn() };
1080
+ callbackHandler(mockReq, mockRes);
1081
+ }, 10);
1082
+ });
1083
+ // Mock token exchange
1084
+ mockFetch.mockResolvedValueOnce(createMockResponse({
1085
+ ok: true,
1086
+ contentType: 'application/json',
1087
+ text: JSON.stringify(mockTokenResponse),
1088
+ json: mockTokenResponse,
1089
+ }));
1090
+ const authProvider = new MCPOAuthProvider();
1091
+ await authProvider.authenticate('test-server', configWithUserScopes, 'https://api.example.com');
1092
+ expect(capturedUrl).toBeDefined();
1093
+ const url = new URL(capturedUrl);
1094
+ expect(url.searchParams.get('scope')).toBe('user-scope');
1095
+ });
1096
+ it('should use discovered scopes when no user-configured scopes are provided', async () => {
1097
+ let capturedUrl;
1098
+ mockOpenBrowserSecurely.mockImplementation((url) => {
1099
+ capturedUrl = url;
1100
+ return Promise.resolve();
1101
+ });
1102
+ const configWithoutScopes = {
1103
+ ...mockConfig,
1104
+ clientId: 'test-client-id',
1105
+ clientSecret: 'test-client-secret',
1106
+ };
1107
+ delete configWithoutScopes.scopes;
1108
+ delete configWithoutScopes.authorizationUrl;
1109
+ delete configWithoutScopes.tokenUrl;
1110
+ const mockResourceMetadata = {
1111
+ authorization_servers: ['https://discovered.auth.com'],
1112
+ };
1113
+ const mockAuthServerMetadata = {
1114
+ authorization_endpoint: 'https://discovered.auth.com/authorize',
1115
+ token_endpoint: 'https://discovered.auth.com/token',
1116
+ scopes_supported: ['discovered-scope-1', 'discovered-scope-2'],
1117
+ };
1118
+ mockFetch
1119
+ .mockResolvedValueOnce(createMockResponse({ ok: true, status: 200 }))
1120
+ .mockResolvedValueOnce(createMockResponse({
1121
+ ok: true,
1122
+ contentType: 'application/json',
1123
+ text: JSON.stringify(mockResourceMetadata),
1124
+ json: mockResourceMetadata,
1125
+ }))
1126
+ .mockResolvedValueOnce(createMockResponse({
1127
+ ok: true,
1128
+ contentType: 'application/json',
1129
+ text: JSON.stringify(mockAuthServerMetadata),
1130
+ json: mockAuthServerMetadata,
1131
+ }));
1132
+ // Setup callback handler
1133
+ let callbackHandler;
1134
+ vi.mocked(http.createServer).mockImplementation((handler) => {
1135
+ callbackHandler = handler;
1136
+ return mockHttpServer;
1137
+ });
1138
+ mockHttpServer.listen.mockImplementation((port, callback) => {
1139
+ callback?.();
1140
+ setTimeout(() => {
1141
+ const mockReq = {
1142
+ url: '/oauth/callback?code=auth_code&state=bW9ja19zdGF0ZV8xNl9ieXRlcw',
1143
+ };
1144
+ const mockRes = { writeHead: vi.fn(), end: vi.fn() };
1145
+ callbackHandler(mockReq, mockRes);
1146
+ }, 10);
1147
+ });
1148
+ // Mock token exchange
1149
+ mockFetch.mockResolvedValueOnce(createMockResponse({
1150
+ ok: true,
1151
+ contentType: 'application/json',
1152
+ text: JSON.stringify(mockTokenResponse),
1153
+ json: mockTokenResponse,
1154
+ }));
1155
+ const authProvider = new MCPOAuthProvider();
1156
+ await authProvider.authenticate('test-server', configWithoutScopes, 'https://api.example.com');
1157
+ expect(capturedUrl).toBeDefined();
1158
+ const url = new URL(capturedUrl);
1159
+ expect(url.searchParams.get('scope')).toBe('discovered-scope-1 discovered-scope-2');
1160
+ });
1161
+ });
1162
+ describe('issuer discovery conformance', () => {
1163
+ const registrationMetadata = {
1164
+ issuer: 'http://localhost:8888/realms/my-realm',
1165
+ authorization_endpoint: 'http://localhost:8888/realms/my-realm/protocol/openid-connect/auth',
1166
+ token_endpoint: 'http://localhost:8888/realms/my-realm/protocol/openid-connect/token',
1167
+ registration_endpoint: 'http://localhost:8888/realms/my-realm/clients-registrations/openid-connect',
1168
+ };
1169
+ it('falls back to path-based issuer when origin discovery fails', async () => {
1170
+ const authProvider = new MCPOAuthProvider();
1171
+ const providerWithAccess = authProvider;
1172
+ vi.spyOn(OAuthUtils, 'discoverAuthorizationServerMetadata').mockImplementation(async (issuer) => {
1173
+ if (issuer === 'http://localhost:8888/realms/my-realm') {
1174
+ return registrationMetadata;
1175
+ }
1176
+ return null;
1177
+ });
1178
+ const result = await providerWithAccess.discoverAuthServerMetadataForRegistration('http://localhost:8888/realms/my-realm/protocol/openid-connect/auth');
1179
+ expect(vi.mocked(OAuthUtils.discoverAuthorizationServerMetadata).mock.calls).toEqual([
1180
+ ['http://localhost:8888'],
1181
+ ['http://localhost:8888/realms/my-realm'],
1182
+ ]);
1183
+ expect(result.issuerUrl).toBe('http://localhost:8888/realms/my-realm');
1184
+ expect(result.metadata).toBe(registrationMetadata);
1185
+ });
1186
+ it('trims versioned segments from authorization endpoints', async () => {
1187
+ const authProvider = new MCPOAuthProvider();
1188
+ const providerWithAccess = authProvider;
1189
+ const oktaMetadata = {
1190
+ issuer: 'https://auth.okta.local/oauth2/default',
1191
+ authorization_endpoint: 'https://auth.okta.local/oauth2/default/v1/authorize',
1192
+ token_endpoint: 'https://auth.okta.local/oauth2/default/v1/token',
1193
+ registration_endpoint: 'https://auth.okta.local/oauth2/default/v1/register',
1194
+ };
1195
+ const attempts = [];
1196
+ vi.spyOn(OAuthUtils, 'discoverAuthorizationServerMetadata').mockImplementation(async (issuer) => {
1197
+ attempts.push(issuer);
1198
+ if (issuer === 'https://auth.okta.local/oauth2/default') {
1199
+ return oktaMetadata;
1200
+ }
1201
+ return null;
1202
+ });
1203
+ const result = await providerWithAccess.discoverAuthServerMetadataForRegistration('https://auth.okta.local/oauth2/default/v1/authorize');
1204
+ expect(attempts).toEqual([
1205
+ 'https://auth.okta.local',
1206
+ 'https://auth.okta.local/oauth2/default/v1',
1207
+ 'https://auth.okta.local/oauth2/default',
1208
+ ]);
1209
+ expect(result.issuerUrl).toBe('https://auth.okta.local/oauth2/default');
1210
+ expect(result.metadata).toBe(oktaMetadata);
1211
+ });
670
1212
  });
671
1213
  });
672
1214
  //# sourceMappingURL=oauth-provider.test.js.map