@vybestack/llxprt-code-core 0.1.19-alpha → 0.1.19-gamma

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 (553) hide show
  1. package/README.md +49 -2
  2. package/dist/index.d.ts +6 -0
  3. package/dist/index.js +5 -0
  4. package/dist/index.js.map +1 -1
  5. package/dist/src/auth/anthropic-device-flow.d.ts +53 -0
  6. package/dist/src/auth/anthropic-device-flow.js +208 -0
  7. package/dist/src/auth/anthropic-device-flow.js.map +1 -0
  8. package/dist/src/auth/precedence.d.ts +55 -0
  9. package/dist/src/auth/precedence.js +211 -0
  10. package/dist/src/auth/precedence.js.map +1 -0
  11. package/dist/src/auth/qwen-device-flow.d.ts +45 -0
  12. package/dist/src/auth/qwen-device-flow.js +179 -0
  13. package/dist/src/auth/qwen-device-flow.js.map +1 -0
  14. package/dist/src/auth/token-store.d.ts +66 -0
  15. package/dist/src/auth/token-store.js +151 -0
  16. package/dist/src/auth/token-store.js.map +1 -0
  17. package/dist/src/auth/types.d.ts +130 -0
  18. package/dist/src/auth/types.js +60 -0
  19. package/dist/src/auth/types.js.map +1 -0
  20. package/dist/src/code_assist/converter.d.ts +2 -1
  21. package/dist/src/code_assist/converter.js +1 -1
  22. package/dist/src/code_assist/converter.js.map +1 -1
  23. package/dist/src/code_assist/oauth2.js +2 -1
  24. package/dist/src/code_assist/oauth2.js.map +1 -1
  25. package/dist/src/config/config.d.ts +61 -2
  26. package/dist/src/config/config.js +134 -4
  27. package/dist/src/config/config.js.map +1 -1
  28. package/dist/src/config/endpoints.d.ts +60 -0
  29. package/dist/src/config/endpoints.js +126 -0
  30. package/dist/src/config/endpoints.js.map +1 -0
  31. package/dist/src/config/profileManager.d.ts +14 -4
  32. package/dist/src/config/profileManager.js +90 -11
  33. package/dist/src/config/profileManager.js.map +1 -1
  34. package/dist/src/core/client.js +9 -12
  35. package/dist/src/core/client.js.map +1 -1
  36. package/dist/src/core/contentGenerator.d.ts +4 -1
  37. package/dist/src/core/contentGenerator.js +3 -0
  38. package/dist/src/core/contentGenerator.js.map +1 -1
  39. package/dist/src/core/logger.d.ts +1 -0
  40. package/dist/src/core/logger.js +18 -0
  41. package/dist/src/core/logger.js.map +1 -1
  42. package/dist/src/core/loggingContentGenerator.d.ts +24 -0
  43. package/dist/src/core/loggingContentGenerator.js +89 -0
  44. package/dist/src/core/loggingContentGenerator.js.map +1 -0
  45. package/dist/src/core/nonInteractiveToolExecutor.js +17 -0
  46. package/dist/src/core/nonInteractiveToolExecutor.js.map +1 -1
  47. package/dist/src/core/subagent.js +12 -10
  48. package/dist/src/core/subagent.js.map +1 -1
  49. package/dist/src/ide/ide-client.d.ts +1 -1
  50. package/dist/src/ide/ide-client.js +21 -7
  51. package/dist/src/ide/ide-client.js.map +1 -1
  52. package/dist/src/index.d.ts +11 -0
  53. package/dist/src/index.js +12 -0
  54. package/dist/src/index.js.map +1 -1
  55. package/dist/src/providers/BaseProvider.d.ts +149 -0
  56. package/dist/src/providers/BaseProvider.js +315 -0
  57. package/dist/src/providers/BaseProvider.js.map +1 -0
  58. package/dist/src/providers/IProvider.d.ts +1 -0
  59. package/dist/src/providers/IProviderManager.d.ts +5 -0
  60. package/dist/src/providers/LoggingProviderWrapper.d.ts +54 -0
  61. package/dist/src/providers/LoggingProviderWrapper.js +350 -0
  62. package/dist/src/providers/LoggingProviderWrapper.js.map +1 -0
  63. package/dist/src/providers/ProviderManager.d.ts +20 -1
  64. package/dist/src/providers/ProviderManager.js +236 -14
  65. package/dist/src/providers/ProviderManager.js.map +1 -1
  66. package/dist/src/providers/anthropic/AnthropicProvider.d.ts +20 -6
  67. package/dist/src/providers/anthropic/AnthropicProvider.js +172 -26
  68. package/dist/src/providers/anthropic/AnthropicProvider.js.map +1 -1
  69. package/dist/src/providers/gemini/GeminiProvider.d.ts +16 -7
  70. package/dist/src/providers/gemini/GeminiProvider.js +163 -148
  71. package/dist/src/providers/gemini/GeminiProvider.js.map +1 -1
  72. package/dist/src/providers/logging/ProviderContentExtractor.d.ts +27 -0
  73. package/dist/src/providers/logging/ProviderContentExtractor.js +198 -0
  74. package/dist/src/providers/logging/ProviderContentExtractor.js.map +1 -0
  75. package/dist/src/providers/logging/ProviderPerformanceTracker.d.ts +43 -0
  76. package/dist/src/providers/logging/ProviderPerformanceTracker.js +98 -0
  77. package/dist/src/providers/logging/ProviderPerformanceTracker.js.map +1 -0
  78. package/dist/src/providers/openai/OpenAIProvider.d.ts +53 -6
  79. package/dist/src/providers/openai/OpenAIProvider.js +373 -40
  80. package/dist/src/providers/openai/OpenAIProvider.js.map +1 -1
  81. package/dist/src/providers/openai/RESPONSES_API_MODELS.d.ts +1 -1
  82. package/dist/src/providers/openai/RESPONSES_API_MODELS.js +1 -0
  83. package/dist/src/providers/openai/RESPONSES_API_MODELS.js.map +1 -1
  84. package/dist/src/providers/openai/syntheticToolResponses.d.ts +52 -0
  85. package/dist/src/providers/openai/syntheticToolResponses.js +129 -0
  86. package/dist/src/providers/openai/syntheticToolResponses.js.map +1 -0
  87. package/dist/src/providers/types.d.ts +47 -0
  88. package/dist/src/services/git-stats-service.d.ts +32 -0
  89. package/dist/src/services/git-stats-service.js +22 -0
  90. package/dist/src/services/git-stats-service.js.map +1 -0
  91. package/dist/src/services/loopDetectionService.js +10 -6
  92. package/dist/src/services/loopDetectionService.js.map +1 -1
  93. package/dist/src/services/shellExecutionService.js +44 -8
  94. package/dist/src/services/shellExecutionService.js.map +1 -1
  95. package/dist/src/settings/SettingsService.d.ts +32 -0
  96. package/dist/src/settings/SettingsService.js +204 -0
  97. package/dist/src/settings/SettingsService.js.map +1 -0
  98. package/dist/src/settings/settingsServiceInstance.d.ts +12 -0
  99. package/dist/src/settings/settingsServiceInstance.js +24 -0
  100. package/dist/src/settings/settingsServiceInstance.js.map +1 -0
  101. package/dist/src/settings/types.d.ts +141 -0
  102. package/dist/src/settings/types.js +5 -0
  103. package/dist/src/settings/types.js.map +1 -0
  104. package/dist/src/storage/ConversationFileWriter.d.ts +16 -0
  105. package/dist/src/storage/ConversationFileWriter.js +69 -0
  106. package/dist/src/storage/ConversationFileWriter.js.map +1 -0
  107. package/dist/src/telemetry/clearcut-logger/clearcut-logger.d.ts +8 -0
  108. package/dist/src/telemetry/clearcut-logger/clearcut-logger.js +56 -3
  109. package/dist/src/telemetry/clearcut-logger/clearcut-logger.js.map +1 -1
  110. package/dist/src/telemetry/clearcut-logger/event-metadata-key.d.ts +5 -1
  111. package/dist/src/telemetry/clearcut-logger/event-metadata-key.js +11 -0
  112. package/dist/src/telemetry/clearcut-logger/event-metadata-key.js.map +1 -1
  113. package/dist/src/telemetry/constants.d.ts +5 -0
  114. package/dist/src/telemetry/constants.js +5 -0
  115. package/dist/src/telemetry/constants.js.map +1 -1
  116. package/dist/src/telemetry/loggers.d.ts +5 -1
  117. package/dist/src/telemetry/loggers.js +87 -1
  118. package/dist/src/telemetry/loggers.js.map +1 -1
  119. package/dist/src/telemetry/metrics.d.ts +2 -1
  120. package/dist/src/telemetry/metrics.js +7 -1
  121. package/dist/src/telemetry/metrics.js.map +1 -1
  122. package/dist/src/telemetry/tool-call-decision.d.ts +13 -0
  123. package/dist/src/telemetry/tool-call-decision.js +29 -0
  124. package/dist/src/telemetry/tool-call-decision.js.map +1 -0
  125. package/dist/src/telemetry/types.d.ts +56 -1
  126. package/dist/src/telemetry/types.js +123 -0
  127. package/dist/src/telemetry/types.js.map +1 -1
  128. package/dist/src/telemetry/uiTelemetry.d.ts +2 -1
  129. package/dist/src/telemetry/uiTelemetry.js +1 -1
  130. package/dist/src/telemetry/uiTelemetry.js.map +1 -1
  131. package/dist/src/tools/diffOptions.d.ts +2 -0
  132. package/dist/src/tools/diffOptions.js +28 -0
  133. package/dist/src/tools/diffOptions.js.map +1 -1
  134. package/dist/src/tools/edit.d.ts +4 -0
  135. package/dist/src/tools/edit.js +38 -8
  136. package/dist/src/tools/edit.js.map +1 -1
  137. package/dist/src/tools/mcp-client.d.ts +4 -3
  138. package/dist/src/tools/mcp-client.js +23 -6
  139. package/dist/src/tools/mcp-client.js.map +1 -1
  140. package/dist/src/tools/read-file.js +34 -2
  141. package/dist/src/tools/read-file.js.map +1 -1
  142. package/dist/src/tools/todo-pause.d.ts +22 -0
  143. package/dist/src/tools/todo-pause.js +93 -0
  144. package/dist/src/tools/todo-pause.js.map +1 -0
  145. package/dist/src/tools/tool-error.d.ts +4 -0
  146. package/dist/src/tools/tool-error.js +4 -0
  147. package/dist/src/tools/tool-error.js.map +1 -1
  148. package/dist/src/tools/tool-registry.js +3 -3
  149. package/dist/src/tools/tool-registry.js.map +1 -1
  150. package/dist/src/tools/tools.d.ts +7 -0
  151. package/dist/src/tools/tools.js.map +1 -1
  152. package/dist/src/tools/write-file.d.ts +4 -0
  153. package/dist/src/tools/write-file.js +90 -16
  154. package/dist/src/tools/write-file.js.map +1 -1
  155. package/dist/src/types/modelParams.d.ts +2 -0
  156. package/dist/src/utils/environmentContext.js +1 -1
  157. package/dist/src/utils/errors.d.ts +3 -0
  158. package/dist/src/utils/errors.js +6 -0
  159. package/dist/src/utils/errors.js.map +1 -1
  160. package/dist/src/utils/fileUtils.d.ts +7 -0
  161. package/dist/src/utils/fileUtils.js +9 -0
  162. package/dist/src/utils/fileUtils.js.map +1 -1
  163. package/package.json +4 -2
  164. package/dist/src/code_assist/converter.test.d.ts +0 -6
  165. package/dist/src/code_assist/converter.test.js +0 -232
  166. package/dist/src/code_assist/converter.test.js.map +0 -1
  167. package/dist/src/code_assist/oauth2.test.d.ts +0 -6
  168. package/dist/src/code_assist/oauth2.test.js +0 -370
  169. package/dist/src/code_assist/oauth2.test.js.map +0 -1
  170. package/dist/src/code_assist/server.test.d.ts +0 -6
  171. package/dist/src/code_assist/server.test.js +0 -131
  172. package/dist/src/code_assist/server.test.js.map +0 -1
  173. package/dist/src/code_assist/setup.test.d.ts +0 -6
  174. package/dist/src/code_assist/setup.test.js +0 -65
  175. package/dist/src/code_assist/setup.test.js.map +0 -1
  176. package/dist/src/config/config.alwaysAllow.test.d.ts +0 -6
  177. package/dist/src/config/config.alwaysAllow.test.js +0 -84
  178. package/dist/src/config/config.alwaysAllow.test.js.map +0 -1
  179. package/dist/src/config/config.test.d.ts +0 -6
  180. package/dist/src/config/config.test.js +0 -369
  181. package/dist/src/config/config.test.js.map +0 -1
  182. package/dist/src/config/flashFallback.test.d.ts +0 -6
  183. package/dist/src/config/flashFallback.test.js +0 -91
  184. package/dist/src/config/flashFallback.test.js.map +0 -1
  185. package/dist/src/core/client.test.d.ts +0 -6
  186. package/dist/src/core/client.test.js +0 -1322
  187. package/dist/src/core/client.test.js.map +0 -1
  188. package/dist/src/core/contentGenerator.test.d.ts +0 -6
  189. package/dist/src/core/contentGenerator.test.js +0 -103
  190. package/dist/src/core/contentGenerator.test.js.map +0 -1
  191. package/dist/src/core/coreToolScheduler.test.d.ts +0 -6
  192. package/dist/src/core/coreToolScheduler.test.js +0 -637
  193. package/dist/src/core/coreToolScheduler.test.js.map +0 -1
  194. package/dist/src/core/geminiChat.test.d.ts +0 -6
  195. package/dist/src/core/geminiChat.test.js +0 -425
  196. package/dist/src/core/geminiChat.test.js.map +0 -1
  197. package/dist/src/core/googleGenAIWrapper.test.d.ts +0 -6
  198. package/dist/src/core/googleGenAIWrapper.test.js +0 -104
  199. package/dist/src/core/googleGenAIWrapper.test.js.map +0 -1
  200. package/dist/src/core/logger.test.d.ts +0 -6
  201. package/dist/src/core/logger.test.js +0 -438
  202. package/dist/src/core/logger.test.js.map +0 -1
  203. package/dist/src/core/nonInteractiveToolExecutor.test.d.ts +0 -6
  204. package/dist/src/core/nonInteractiveToolExecutor.test.js +0 -165
  205. package/dist/src/core/nonInteractiveToolExecutor.test.js.map +0 -1
  206. package/dist/src/core/prompts-async.test.d.ts +0 -6
  207. package/dist/src/core/prompts-async.test.js +0 -115
  208. package/dist/src/core/prompts-async.test.js.map +0 -1
  209. package/dist/src/core/prompts.test.d.ts +0 -6
  210. package/dist/src/core/prompts.test.js +0 -68
  211. package/dist/src/core/prompts.test.js.map +0 -1
  212. package/dist/src/core/subagent.test.d.ts +0 -6
  213. package/dist/src/core/subagent.test.js +0 -519
  214. package/dist/src/core/subagent.test.js.map +0 -1
  215. package/dist/src/core/tokenLimits.test.d.ts +0 -6
  216. package/dist/src/core/tokenLimits.test.js +0 -66
  217. package/dist/src/core/tokenLimits.test.js.map +0 -1
  218. package/dist/src/core/turn.test.d.ts +0 -6
  219. package/dist/src/core/turn.test.js +0 -366
  220. package/dist/src/core/turn.test.js.map +0 -1
  221. package/dist/src/hooks/tool-render-suppression-hook.test.d.ts +0 -6
  222. package/dist/src/hooks/tool-render-suppression-hook.test.js +0 -59
  223. package/dist/src/hooks/tool-render-suppression-hook.test.js.map +0 -1
  224. package/dist/src/ide/ide-installer.test.d.ts +0 -6
  225. package/dist/src/ide/ide-installer.test.js +0 -55
  226. package/dist/src/ide/ide-installer.test.js.map +0 -1
  227. package/dist/src/ide/ideContext.test.d.ts +0 -6
  228. package/dist/src/ide/ideContext.test.js +0 -265
  229. package/dist/src/ide/ideContext.test.js.map +0 -1
  230. package/dist/src/index.test.d.ts +0 -6
  231. package/dist/src/index.test.js +0 -12
  232. package/dist/src/index.test.js.map +0 -1
  233. package/dist/src/integration-tests/todo-system.test.d.ts +0 -6
  234. package/dist/src/integration-tests/todo-system.test.js +0 -46
  235. package/dist/src/integration-tests/todo-system.test.js.map +0 -1
  236. package/dist/src/mcp/google-auth-provider.test.d.ts +0 -6
  237. package/dist/src/mcp/google-auth-provider.test.js +0 -54
  238. package/dist/src/mcp/google-auth-provider.test.js.map +0 -1
  239. package/dist/src/mcp/oauth-provider.test.d.ts +0 -6
  240. package/dist/src/mcp/oauth-provider.test.js +0 -602
  241. package/dist/src/mcp/oauth-provider.test.js.map +0 -1
  242. package/dist/src/mcp/oauth-token-storage.test.d.ts +0 -6
  243. package/dist/src/mcp/oauth-token-storage.test.js +0 -205
  244. package/dist/src/mcp/oauth-token-storage.test.js.map +0 -1
  245. package/dist/src/mcp/oauth-utils.test.d.ts +0 -6
  246. package/dist/src/mcp/oauth-utils.test.js +0 -144
  247. package/dist/src/mcp/oauth-utils.test.js.map +0 -1
  248. package/dist/src/parsers/TextToolCallParser.multibyte.test.d.ts +0 -1
  249. package/dist/src/parsers/TextToolCallParser.multibyte.test.js +0 -42
  250. package/dist/src/parsers/TextToolCallParser.multibyte.test.js.map +0 -1
  251. package/dist/src/parsers/TextToolCallParser.test.d.ts +0 -1
  252. package/dist/src/parsers/TextToolCallParser.test.js +0 -225
  253. package/dist/src/parsers/TextToolCallParser.test.js.map +0 -1
  254. package/dist/src/prompt-config/TemplateEngine.test.d.ts +0 -1
  255. package/dist/src/prompt-config/TemplateEngine.test.js +0 -494
  256. package/dist/src/prompt-config/TemplateEngine.test.js.map +0 -1
  257. package/dist/src/prompt-config/prompt-cache.test.d.ts +0 -6
  258. package/dist/src/prompt-config/prompt-cache.test.js +0 -437
  259. package/dist/src/prompt-config/prompt-cache.test.js.map +0 -1
  260. package/dist/src/prompt-config/prompt-installer.test.d.ts +0 -7
  261. package/dist/src/prompt-config/prompt-installer.test.js +0 -503
  262. package/dist/src/prompt-config/prompt-installer.test.js.map +0 -1
  263. package/dist/src/prompt-config/prompt-loader.test.d.ts +0 -5
  264. package/dist/src/prompt-config/prompt-loader.test.js +0 -413
  265. package/dist/src/prompt-config/prompt-loader.test.js.map +0 -1
  266. package/dist/src/prompt-config/prompt-resolver.test.d.ts +0 -1
  267. package/dist/src/prompt-config/prompt-resolver.test.js +0 -529
  268. package/dist/src/prompt-config/prompt-resolver.test.js.map +0 -1
  269. package/dist/src/prompt-config/prompt-service.test.d.ts +0 -1
  270. package/dist/src/prompt-config/prompt-service.test.js +0 -811
  271. package/dist/src/prompt-config/prompt-service.test.js.map +0 -1
  272. package/dist/src/providers/ProviderManager.gemini-switch.test.d.ts +0 -6
  273. package/dist/src/providers/ProviderManager.gemini-switch.test.js +0 -57
  274. package/dist/src/providers/ProviderManager.gemini-switch.test.js.map +0 -1
  275. package/dist/src/providers/ProviderManager.test.d.ts +0 -6
  276. package/dist/src/providers/ProviderManager.test.js +0 -284
  277. package/dist/src/providers/ProviderManager.test.js.map +0 -1
  278. package/dist/src/providers/adapters/GeminiCompatibleWrapper.test.d.ts +0 -6
  279. package/dist/src/providers/adapters/GeminiCompatibleWrapper.test.js +0 -273
  280. package/dist/src/providers/adapters/GeminiCompatibleWrapper.test.js.map +0 -1
  281. package/dist/src/providers/anthropic/AnthropicProvider.modelParams.test.d.ts +0 -1
  282. package/dist/src/providers/anthropic/AnthropicProvider.modelParams.test.js +0 -48
  283. package/dist/src/providers/anthropic/AnthropicProvider.modelParams.test.js.map +0 -1
  284. package/dist/src/providers/anthropic/AnthropicProvider.test.d.ts +0 -1
  285. package/dist/src/providers/anthropic/AnthropicProvider.test.js +0 -487
  286. package/dist/src/providers/anthropic/AnthropicProvider.test.js.map +0 -1
  287. package/dist/src/providers/gemini/GeminiProvider.integration.test.d.ts +0 -6
  288. package/dist/src/providers/gemini/GeminiProvider.integration.test.js +0 -126
  289. package/dist/src/providers/gemini/GeminiProvider.integration.test.js.map +0 -1
  290. package/dist/src/providers/gemini/GeminiProvider.test.d.ts +0 -6
  291. package/dist/src/providers/gemini/GeminiProvider.test.js +0 -136
  292. package/dist/src/providers/gemini/GeminiProvider.test.js.map +0 -1
  293. package/dist/src/providers/integration/multi-provider.integration.test.d.ts +0 -6
  294. package/dist/src/providers/integration/multi-provider.integration.test.js +0 -292
  295. package/dist/src/providers/integration/multi-provider.integration.test.js.map +0 -1
  296. package/dist/src/providers/openai/ConversationCache.accumTokens.test.d.ts +0 -1
  297. package/dist/src/providers/openai/ConversationCache.accumTokens.test.js +0 -97
  298. package/dist/src/providers/openai/ConversationCache.accumTokens.test.js.map +0 -1
  299. package/dist/src/providers/openai/ConversationCache.test.d.ts +0 -1
  300. package/dist/src/providers/openai/ConversationCache.test.js +0 -113
  301. package/dist/src/providers/openai/ConversationCache.test.js.map +0 -1
  302. package/dist/src/providers/openai/OpenAIProvider.callResponses.stateless.test.d.ts +0 -1
  303. package/dist/src/providers/openai/OpenAIProvider.callResponses.stateless.test.js +0 -189
  304. package/dist/src/providers/openai/OpenAIProvider.callResponses.stateless.test.js.map +0 -1
  305. package/dist/src/providers/openai/OpenAIProvider.integration.test.d.ts +0 -6
  306. package/dist/src/providers/openai/OpenAIProvider.integration.test.js +0 -125
  307. package/dist/src/providers/openai/OpenAIProvider.integration.test.js.map +0 -1
  308. package/dist/src/providers/openai/OpenAIProvider.responses.test.d.ts +0 -1
  309. package/dist/src/providers/openai/OpenAIProvider.responses.test.js +0 -350
  310. package/dist/src/providers/openai/OpenAIProvider.responses.test.js.map +0 -1
  311. package/dist/src/providers/openai/OpenAIProvider.responsesIntegration.test.d.ts +0 -1
  312. package/dist/src/providers/openai/OpenAIProvider.responsesIntegration.test.js +0 -213
  313. package/dist/src/providers/openai/OpenAIProvider.responsesIntegration.test.js.map +0 -1
  314. package/dist/src/providers/openai/OpenAIProvider.shouldUseResponses.test.d.ts +0 -1
  315. package/dist/src/providers/openai/OpenAIProvider.shouldUseResponses.test.js +0 -59
  316. package/dist/src/providers/openai/OpenAIProvider.shouldUseResponses.test.js.map +0 -1
  317. package/dist/src/providers/openai/OpenAIProvider.stateful.integration.test.d.ts +0 -6
  318. package/dist/src/providers/openai/OpenAIProvider.stateful.integration.test.js +0 -105
  319. package/dist/src/providers/openai/OpenAIProvider.stateful.integration.test.js.map +0 -1
  320. package/dist/src/providers/openai/OpenAIProvider.switch.test.d.ts +0 -1
  321. package/dist/src/providers/openai/OpenAIProvider.switch.test.js +0 -256
  322. package/dist/src/providers/openai/OpenAIProvider.switch.test.js.map +0 -1
  323. package/dist/src/providers/openai/OpenAIProvider.test.d.ts +0 -16
  324. package/dist/src/providers/openai/OpenAIProvider.test.js +0 -620
  325. package/dist/src/providers/openai/OpenAIProvider.test.js.map +0 -1
  326. package/dist/src/providers/openai/ResponsesContextTrim.integration.test.d.ts +0 -1
  327. package/dist/src/providers/openai/ResponsesContextTrim.integration.test.js +0 -210
  328. package/dist/src/providers/openai/ResponsesContextTrim.integration.test.js.map +0 -1
  329. package/dist/src/providers/openai/__tests__/formatArrayResponse.test.d.ts +0 -1
  330. package/dist/src/providers/openai/__tests__/formatArrayResponse.test.js +0 -65
  331. package/dist/src/providers/openai/__tests__/formatArrayResponse.test.js.map +0 -1
  332. package/dist/src/providers/openai/buildResponsesRequest.stripToolCalls.test.d.ts +0 -1
  333. package/dist/src/providers/openai/buildResponsesRequest.stripToolCalls.test.js +0 -129
  334. package/dist/src/providers/openai/buildResponsesRequest.stripToolCalls.test.js.map +0 -1
  335. package/dist/src/providers/openai/buildResponsesRequest.test.d.ts +0 -1
  336. package/dist/src/providers/openai/buildResponsesRequest.test.js +0 -406
  337. package/dist/src/providers/openai/buildResponsesRequest.test.js.map +0 -1
  338. package/dist/src/providers/openai/buildResponsesRequest.undefined.test.d.ts +0 -1
  339. package/dist/src/providers/openai/buildResponsesRequest.undefined.test.js +0 -50
  340. package/dist/src/providers/openai/buildResponsesRequest.undefined.test.js.map +0 -1
  341. package/dist/src/providers/openai/estimateRemoteTokens.test.d.ts +0 -1
  342. package/dist/src/providers/openai/estimateRemoteTokens.test.js +0 -125
  343. package/dist/src/providers/openai/estimateRemoteTokens.test.js.map +0 -1
  344. package/dist/src/providers/openai/parseResponsesStream.responsesToolCalls.test.d.ts +0 -1
  345. package/dist/src/providers/openai/parseResponsesStream.responsesToolCalls.test.js +0 -192
  346. package/dist/src/providers/openai/parseResponsesStream.responsesToolCalls.test.js.map +0 -1
  347. package/dist/src/providers/openai/parseResponsesStream.test.d.ts +0 -1
  348. package/dist/src/providers/openai/parseResponsesStream.test.js +0 -151
  349. package/dist/src/providers/openai/parseResponsesStream.test.js.map +0 -1
  350. package/dist/src/services/fileDiscoveryService.test.d.ts +0 -6
  351. package/dist/src/services/fileDiscoveryService.test.js +0 -143
  352. package/dist/src/services/fileDiscoveryService.test.js.map +0 -1
  353. package/dist/src/services/gitService.test.d.ts +0 -6
  354. package/dist/src/services/gitService.test.js +0 -209
  355. package/dist/src/services/gitService.test.js.map +0 -1
  356. package/dist/src/services/loopDetectionService.test.d.ts +0 -6
  357. package/dist/src/services/loopDetectionService.test.js +0 -345
  358. package/dist/src/services/loopDetectionService.test.js.map +0 -1
  359. package/dist/src/services/shellExecutionService.multibyte.test.d.ts +0 -6
  360. package/dist/src/services/shellExecutionService.multibyte.test.js +0 -72
  361. package/dist/src/services/shellExecutionService.multibyte.test.js.map +0 -1
  362. package/dist/src/services/shellExecutionService.test.d.ts +0 -6
  363. package/dist/src/services/shellExecutionService.test.js +0 -272
  364. package/dist/src/services/shellExecutionService.test.js.map +0 -1
  365. package/dist/src/services/shellExecutionService.windows.multibyte.test.d.ts +0 -6
  366. package/dist/src/services/shellExecutionService.windows.multibyte.test.js +0 -98
  367. package/dist/src/services/shellExecutionService.windows.multibyte.test.js.map +0 -1
  368. package/dist/src/services/shellExecutionService.windows.test.d.ts +0 -6
  369. package/dist/src/services/shellExecutionService.windows.test.js +0 -79
  370. package/dist/src/services/shellExecutionService.windows.test.js.map +0 -1
  371. package/dist/src/services/tool-call-tracker-service.test.d.ts +0 -6
  372. package/dist/src/services/tool-call-tracker-service.test.js +0 -99
  373. package/dist/src/services/tool-call-tracker-service.test.js.map +0 -1
  374. package/dist/src/telemetry/loggers.test.d.ts +0 -6
  375. package/dist/src/telemetry/loggers.test.js +0 -572
  376. package/dist/src/telemetry/loggers.test.js.map +0 -1
  377. package/dist/src/telemetry/metrics.test.d.ts +0 -6
  378. package/dist/src/telemetry/metrics.test.js +0 -162
  379. package/dist/src/telemetry/metrics.test.js.map +0 -1
  380. package/dist/src/telemetry/telemetry.test.d.ts +0 -6
  381. package/dist/src/telemetry/telemetry.test.js +0 -54
  382. package/dist/src/telemetry/telemetry.test.js.map +0 -1
  383. package/dist/src/telemetry/uiTelemetry.test.d.ts +0 -6
  384. package/dist/src/telemetry/uiTelemetry.test.js +0 -517
  385. package/dist/src/telemetry/uiTelemetry.test.js.map +0 -1
  386. package/dist/src/tools/ToolFormatter.test.d.ts +0 -16
  387. package/dist/src/tools/ToolFormatter.test.js +0 -349
  388. package/dist/src/tools/ToolFormatter.test.js.map +0 -1
  389. package/dist/src/tools/ToolFormatter.toResponsesTool.test.d.ts +0 -1
  390. package/dist/src/tools/ToolFormatter.toResponsesTool.test.js +0 -241
  391. package/dist/src/tools/ToolFormatter.toResponsesTool.test.js.map +0 -1
  392. package/dist/src/tools/edit.test.d.ts +0 -6
  393. package/dist/src/tools/edit.test.js +0 -688
  394. package/dist/src/tools/edit.test.js.map +0 -1
  395. package/dist/src/tools/glob.test.d.ts +0 -6
  396. package/dist/src/tools/glob.test.js +0 -332
  397. package/dist/src/tools/glob.test.js.map +0 -1
  398. package/dist/src/tools/grep.test.d.ts +0 -6
  399. package/dist/src/tools/grep.test.js +0 -272
  400. package/dist/src/tools/grep.test.js.map +0 -1
  401. package/dist/src/tools/ls.test.d.ts +0 -6
  402. package/dist/src/tools/ls.test.js +0 -357
  403. package/dist/src/tools/ls.test.js.map +0 -1
  404. package/dist/src/tools/mcp-client.test.d.ts +0 -6
  405. package/dist/src/tools/mcp-client.test.js +0 -575
  406. package/dist/src/tools/mcp-client.test.js.map +0 -1
  407. package/dist/src/tools/mcp-tool.test.d.ts +0 -6
  408. package/dist/src/tools/mcp-tool.test.js +0 -501
  409. package/dist/src/tools/mcp-tool.test.js.map +0 -1
  410. package/dist/src/tools/memoryTool.test.d.ts +0 -6
  411. package/dist/src/tools/memoryTool.test.js +0 -266
  412. package/dist/src/tools/memoryTool.test.js.map +0 -1
  413. package/dist/src/tools/modifiable-tool.test.d.ts +0 -6
  414. package/dist/src/tools/modifiable-tool.test.js +0 -193
  415. package/dist/src/tools/modifiable-tool.test.js.map +0 -1
  416. package/dist/src/tools/read-file.test.d.ts +0 -6
  417. package/dist/src/tools/read-file.test.js +0 -313
  418. package/dist/src/tools/read-file.test.js.map +0 -1
  419. package/dist/src/tools/read-many-files.test.d.ts +0 -6
  420. package/dist/src/tools/read-many-files.test.js +0 -644
  421. package/dist/src/tools/read-many-files.test.js.map +0 -1
  422. package/dist/src/tools/shell.multibyte.test.d.ts +0 -6
  423. package/dist/src/tools/shell.multibyte.test.js +0 -75
  424. package/dist/src/tools/shell.multibyte.test.js.map +0 -1
  425. package/dist/src/tools/shell.test.d.ts +0 -6
  426. package/dist/src/tools/shell.test.js +0 -350
  427. package/dist/src/tools/shell.test.js.map +0 -1
  428. package/dist/src/tools/todo-read.test.d.ts +0 -6
  429. package/dist/src/tools/todo-read.test.js +0 -162
  430. package/dist/src/tools/todo-read.test.js.map +0 -1
  431. package/dist/src/tools/todo-schemas.test.d.ts +0 -6
  432. package/dist/src/tools/todo-schemas.test.js +0 -341
  433. package/dist/src/tools/todo-schemas.test.js.map +0 -1
  434. package/dist/src/tools/todo-store.test.d.ts +0 -6
  435. package/dist/src/tools/todo-store.test.js +0 -169
  436. package/dist/src/tools/todo-store.test.js.map +0 -1
  437. package/dist/src/tools/todo-write.test.d.ts +0 -6
  438. package/dist/src/tools/todo-write.test.js +0 -226
  439. package/dist/src/tools/todo-write.test.js.map +0 -1
  440. package/dist/src/tools/tool-registry.test.d.ts +0 -6
  441. package/dist/src/tools/tool-registry.test.js +0 -468
  442. package/dist/src/tools/tool-registry.test.js.map +0 -1
  443. package/dist/src/tools/tools.test.d.ts +0 -6
  444. package/dist/src/tools/tools.test.js +0 -117
  445. package/dist/src/tools/tools.test.js.map +0 -1
  446. package/dist/src/tools/web-fetch.integration.test.d.ts +0 -6
  447. package/dist/src/tools/web-fetch.integration.test.js +0 -532
  448. package/dist/src/tools/web-fetch.integration.test.js.map +0 -1
  449. package/dist/src/tools/web-search.test.d.ts +0 -6
  450. package/dist/src/tools/web-search.test.js +0 -229
  451. package/dist/src/tools/web-search.test.js.map +0 -1
  452. package/dist/src/tools/write-file.test.d.ts +0 -6
  453. package/dist/src/tools/write-file.test.js +0 -464
  454. package/dist/src/tools/write-file.test.js.map +0 -1
  455. package/dist/src/utils/bfsFileSearch.test.d.ts +0 -6
  456. package/dist/src/utils/bfsFileSearch.test.js +0 -191
  457. package/dist/src/utils/bfsFileSearch.test.js.map +0 -1
  458. package/dist/src/utils/editCorrector.test.d.ts +0 -6
  459. package/dist/src/utils/editCorrector.test.js +0 -564
  460. package/dist/src/utils/editCorrector.test.js.map +0 -1
  461. package/dist/src/utils/editor.test.d.ts +0 -6
  462. package/dist/src/utils/editor.test.js +0 -445
  463. package/dist/src/utils/editor.test.js.map +0 -1
  464. package/dist/src/utils/environmentContext.test.d.ts +0 -6
  465. package/dist/src/utils/environmentContext.test.js +0 -139
  466. package/dist/src/utils/environmentContext.test.js.map +0 -1
  467. package/dist/src/utils/errorReporting.test.d.ts +0 -6
  468. package/dist/src/utils/errorReporting.test.js +0 -130
  469. package/dist/src/utils/errorReporting.test.js.map +0 -1
  470. package/dist/src/utils/fileUtils.test.d.ts +0 -6
  471. package/dist/src/utils/fileUtils.test.js +0 -363
  472. package/dist/src/utils/fileUtils.test.js.map +0 -1
  473. package/dist/src/utils/filesearch/crawlCache.test.d.ts +0 -6
  474. package/dist/src/utils/filesearch/crawlCache.test.js +0 -103
  475. package/dist/src/utils/filesearch/crawlCache.test.js.map +0 -1
  476. package/dist/src/utils/filesearch/fileSearch.test.d.ts +0 -6
  477. package/dist/src/utils/filesearch/fileSearch.test.js +0 -654
  478. package/dist/src/utils/filesearch/fileSearch.test.js.map +0 -1
  479. package/dist/src/utils/filesearch/ignore.test.d.ts +0 -6
  480. package/dist/src/utils/filesearch/ignore.test.js +0 -57
  481. package/dist/src/utils/filesearch/ignore.test.js.map +0 -1
  482. package/dist/src/utils/filesearch/result-cache.test.d.ts +0 -6
  483. package/dist/src/utils/filesearch/result-cache.test.js +0 -47
  484. package/dist/src/utils/filesearch/result-cache.test.js.map +0 -1
  485. package/dist/src/utils/flashFallback.integration.test.d.ts +0 -6
  486. package/dist/src/utils/flashFallback.integration.test.js +0 -120
  487. package/dist/src/utils/flashFallback.integration.test.js.map +0 -1
  488. package/dist/src/utils/generateContentResponseUtilities.test.d.ts +0 -6
  489. package/dist/src/utils/generateContentResponseUtilities.test.js +0 -273
  490. package/dist/src/utils/generateContentResponseUtilities.test.js.map +0 -1
  491. package/dist/src/utils/getFolderStructure.test.d.ts +0 -6
  492. package/dist/src/utils/getFolderStructure.test.js +0 -282
  493. package/dist/src/utils/getFolderStructure.test.js.map +0 -1
  494. package/dist/src/utils/gitIgnoreParser.test.d.ts +0 -6
  495. package/dist/src/utils/gitIgnoreParser.test.js +0 -154
  496. package/dist/src/utils/gitIgnoreParser.test.js.map +0 -1
  497. package/dist/src/utils/memoryDiscovery.test.d.ts +0 -6
  498. package/dist/src/utils/memoryDiscovery.test.js +0 -181
  499. package/dist/src/utils/memoryDiscovery.test.js.map +0 -1
  500. package/dist/src/utils/memoryImportProcessor.test.d.ts +0 -6
  501. package/dist/src/utils/memoryImportProcessor.test.js +0 -715
  502. package/dist/src/utils/memoryImportProcessor.test.js.map +0 -1
  503. package/dist/src/utils/nextSpeakerChecker.test.d.ts +0 -6
  504. package/dist/src/utils/nextSpeakerChecker.test.js +0 -172
  505. package/dist/src/utils/nextSpeakerChecker.test.js.map +0 -1
  506. package/dist/src/utils/partUtils.test.d.ts +0 -6
  507. package/dist/src/utils/partUtils.test.js +0 -130
  508. package/dist/src/utils/partUtils.test.js.map +0 -1
  509. package/dist/src/utils/paths.test.d.ts +0 -6
  510. package/dist/src/utils/paths.test.js +0 -153
  511. package/dist/src/utils/paths.test.js.map +0 -1
  512. package/dist/src/utils/retry.test.d.ts +0 -6
  513. package/dist/src/utils/retry.test.js +0 -322
  514. package/dist/src/utils/retry.test.js.map +0 -1
  515. package/dist/src/utils/safeJsonStringify.test.d.ts +0 -6
  516. package/dist/src/utils/safeJsonStringify.test.js +0 -61
  517. package/dist/src/utils/safeJsonStringify.test.js.map +0 -1
  518. package/dist/src/utils/sanitization.test.d.ts +0 -6
  519. package/dist/src/utils/sanitization.test.js +0 -81
  520. package/dist/src/utils/sanitization.test.js.map +0 -1
  521. package/dist/src/utils/schemaValidator.test.d.ts +0 -6
  522. package/dist/src/utils/schemaValidator.test.js +0 -146
  523. package/dist/src/utils/schemaValidator.test.js.map +0 -1
  524. package/dist/src/utils/secure-browser-launcher.test.d.ts +0 -6
  525. package/dist/src/utils/secure-browser-launcher.test.js +0 -149
  526. package/dist/src/utils/secure-browser-launcher.test.js.map +0 -1
  527. package/dist/src/utils/shell-utils.shellReplacement.test.d.ts +0 -6
  528. package/dist/src/utils/shell-utils.shellReplacement.test.js +0 -149
  529. package/dist/src/utils/shell-utils.shellReplacement.test.js.map +0 -1
  530. package/dist/src/utils/shell-utils.test.d.ts +0 -6
  531. package/dist/src/utils/shell-utils.test.js +0 -200
  532. package/dist/src/utils/shell-utils.test.js.map +0 -1
  533. package/dist/src/utils/summarizer.test.d.ts +0 -6
  534. package/dist/src/utils/summarizer.test.js +0 -131
  535. package/dist/src/utils/summarizer.test.js.map +0 -1
  536. package/dist/src/utils/systemEncoding.test.d.ts +0 -6
  537. package/dist/src/utils/systemEncoding.test.js +0 -368
  538. package/dist/src/utils/systemEncoding.test.js.map +0 -1
  539. package/dist/src/utils/toolOutputLimiter.test.d.ts +0 -6
  540. package/dist/src/utils/toolOutputLimiter.test.js +0 -164
  541. package/dist/src/utils/toolOutputLimiter.test.js.map +0 -1
  542. package/dist/src/utils/unicodeUtils.test.d.ts +0 -6
  543. package/dist/src/utils/unicodeUtils.test.js +0 -120
  544. package/dist/src/utils/unicodeUtils.test.js.map +0 -1
  545. package/dist/src/utils/user_account.test.d.ts +0 -6
  546. package/dist/src/utils/user_account.test.js +0 -153
  547. package/dist/src/utils/user_account.test.js.map +0 -1
  548. package/dist/src/utils/user_id.test.d.ts +0 -6
  549. package/dist/src/utils/user_id.test.js +0 -21
  550. package/dist/src/utils/user_id.test.js.map +0 -1
  551. package/dist/src/utils/workspaceContext.test.d.ts +0 -6
  552. package/dist/src/utils/workspaceContext.test.js +0 -209
  553. package/dist/src/utils/workspaceContext.test.js.map +0 -1
@@ -0,0 +1,32 @@
1
+ import { EventEmitter } from 'events';
2
+ import { ISettingsService, GlobalSettings, ProviderSettings, SettingsChangeEvent, EventListener, EventUnsubscribe, DiagnosticsInfo } from './types.js';
3
+ export declare class SettingsService extends EventEmitter implements ISettingsService {
4
+ private settings;
5
+ private eventEmitter;
6
+ constructor();
7
+ get(key: string): unknown;
8
+ set(key: string, value: unknown): void;
9
+ getProviderSettings(provider: string): Record<string, unknown>;
10
+ setProviderSetting(provider: string, key: string, value: unknown): void;
11
+ clear(): void;
12
+ getAllGlobalSettings(): Record<string, unknown>;
13
+ private getNestedValue;
14
+ private setNestedValue;
15
+ on(event: 'settings_changed', listener: EventListener<SettingsChangeEvent>): EventUnsubscribe;
16
+ on(eventName: string | symbol, listener: (...args: unknown[]) => void): this;
17
+ off(event: string, listener: (...args: unknown[]) => void): this;
18
+ getSettings(): Promise<GlobalSettings>;
19
+ getSettings(provider: string): Promise<ProviderSettings>;
20
+ updateSettings(changes: Partial<GlobalSettings>): Promise<void>;
21
+ updateSettings(provider: string, changes: Partial<ProviderSettings>): Promise<void>;
22
+ switchProvider(newProvider: string): Promise<void>;
23
+ exportForProfile(): Promise<{
24
+ defaultProvider: string;
25
+ providers: Record<string, ProviderSettings>;
26
+ }>;
27
+ importFromProfile(profileData: unknown): Promise<void>;
28
+ setCurrentProfileName(profileName: string | null): void;
29
+ getCurrentProfileName(): string | null;
30
+ getDiagnosticsData(): Promise<DiagnosticsInfo>;
31
+ onSettingsChanged(listener: EventListener<SettingsChangeEvent>): EventUnsubscribe;
32
+ }
@@ -0,0 +1,204 @@
1
+ import { EventEmitter } from 'events';
2
+ export class SettingsService extends EventEmitter {
3
+ settings;
4
+ eventEmitter;
5
+ constructor() {
6
+ super();
7
+ // Lines 05-14: Initialize in-memory only, no repository parameter
8
+ this.settings = {
9
+ providers: {},
10
+ global: {},
11
+ activeProvider: null,
12
+ };
13
+ this.eventEmitter = new EventEmitter();
14
+ }
15
+ // Lines 16-23: Direct synchronous access to settings object
16
+ get(key) {
17
+ if (key.includes('.')) {
18
+ return this.getNestedValue(this.settings, key);
19
+ }
20
+ return this.settings.global[key];
21
+ }
22
+ // Lines 25-38: Store old value, update in-memory object, emit change event, NO file writes
23
+ set(key, value) {
24
+ const oldValue = this.get(key);
25
+ if (key.includes('.')) {
26
+ this.setNestedValue(this.settings, key, value);
27
+ }
28
+ else {
29
+ this.settings.global[key] = value;
30
+ }
31
+ this.eventEmitter.emit('change', {
32
+ key,
33
+ oldValue,
34
+ newValue: value,
35
+ });
36
+ }
37
+ // Lines 40-54: Provider-specific methods - direct manipulation of settings.providers
38
+ getProviderSettings(provider) {
39
+ return this.settings.providers[provider] || {};
40
+ }
41
+ setProviderSetting(provider, key, value) {
42
+ if (!this.settings.providers[provider]) {
43
+ this.settings.providers[provider] = {};
44
+ }
45
+ const oldValue = this.settings.providers[provider][key];
46
+ this.settings.providers[provider][key] = value;
47
+ this.eventEmitter.emit('provider-change', {
48
+ provider,
49
+ key,
50
+ oldValue,
51
+ newValue: value,
52
+ });
53
+ }
54
+ // Lines 56-64: Clear method - reset to empty state, emit cleared event
55
+ clear() {
56
+ this.settings = {
57
+ providers: {},
58
+ global: {},
59
+ activeProvider: null,
60
+ };
61
+ this.eventEmitter.emit('cleared');
62
+ }
63
+ // Public method to get all global settings
64
+ getAllGlobalSettings() {
65
+ return { ...this.settings.global };
66
+ }
67
+ // Helper methods for nested key support
68
+ getNestedValue(obj, key) {
69
+ const keys = key.split('.');
70
+ let current = obj;
71
+ for (const k of keys) {
72
+ if (current && typeof current === 'object' && k in current) {
73
+ current = current[k];
74
+ }
75
+ else {
76
+ return undefined;
77
+ }
78
+ }
79
+ return current;
80
+ }
81
+ setNestedValue(obj, key, value) {
82
+ const keys = key.split('.');
83
+ let current = obj;
84
+ for (let i = 0; i < keys.length - 1; i++) {
85
+ const k = keys[i];
86
+ if (!current[k] || typeof current[k] !== 'object') {
87
+ current[k] = {};
88
+ }
89
+ current = current[k];
90
+ }
91
+ current[keys[keys.length - 1]] = value;
92
+ }
93
+ on(event, listener) {
94
+ if (event === 'settings_changed') {
95
+ return this.onSettingsChanged(listener);
96
+ }
97
+ this.eventEmitter.on(event, listener);
98
+ return this;
99
+ }
100
+ off(event, listener) {
101
+ this.eventEmitter.off(event, listener);
102
+ return this;
103
+ }
104
+ getSettings(provider) {
105
+ if (provider === undefined) {
106
+ return Promise.resolve({
107
+ providers: this.settings.providers,
108
+ });
109
+ }
110
+ return Promise.resolve(this.getProviderSettings(provider));
111
+ }
112
+ updateSettings(providerOrChanges, changes) {
113
+ if (typeof providerOrChanges === 'string' && changes) {
114
+ // Provider-specific update
115
+ for (const [key, value] of Object.entries(changes)) {
116
+ this.setProviderSetting(providerOrChanges, key, value);
117
+ }
118
+ }
119
+ else if (providerOrChanges && typeof providerOrChanges === 'object') {
120
+ // Global update
121
+ for (const [key, value] of Object.entries(providerOrChanges)) {
122
+ this.set(key, value);
123
+ }
124
+ }
125
+ return Promise.resolve();
126
+ }
127
+ switchProvider(newProvider) {
128
+ this.set('activeProvider', newProvider);
129
+ return Promise.resolve();
130
+ }
131
+ exportForProfile() {
132
+ // Get activeProvider from global settings first, then fallback to direct field or default
133
+ const activeProvider = this.settings.global.activeProvider ||
134
+ this.settings.activeProvider ||
135
+ 'openai';
136
+ return Promise.resolve({
137
+ defaultProvider: activeProvider,
138
+ providers: this.settings.providers,
139
+ });
140
+ }
141
+ importFromProfile(profileData) {
142
+ // Don't clear ALL settings - just clear provider settings
143
+ // Keep global settings like activeProvider if it's already set correctly
144
+ this.settings.providers = {};
145
+ // Import profile data
146
+ if (profileData && typeof profileData === 'object') {
147
+ const data = profileData;
148
+ // Set the active provider
149
+ if (data.defaultProvider) {
150
+ this.set('activeProvider', data.defaultProvider);
151
+ this.settings.activeProvider = data.defaultProvider;
152
+ }
153
+ // Import provider settings
154
+ if (data.providers) {
155
+ for (const [provider, settings] of Object.entries(data.providers)) {
156
+ if (settings && typeof settings === 'object') {
157
+ for (const [key, value] of Object.entries(settings)) {
158
+ this.setProviderSetting(provider, key, value);
159
+ }
160
+ }
161
+ }
162
+ }
163
+ }
164
+ return Promise.resolve();
165
+ }
166
+ setCurrentProfileName(profileName) {
167
+ this.set('currentProfile', profileName);
168
+ }
169
+ getCurrentProfileName() {
170
+ return this.get('currentProfile');
171
+ }
172
+ getDiagnosticsData() {
173
+ // Get activeProvider from global settings (set via set() method) or fallback to direct field or default
174
+ const activeProvider = this.settings.global.activeProvider ||
175
+ this.settings.activeProvider ||
176
+ 'openai';
177
+ const providerSettings = this.getProviderSettings(activeProvider);
178
+ // Get the model from provider settings, fallback to 'unknown' if not set
179
+ const model = providerSettings.model || 'unknown';
180
+ // Extract model parameters from provider settings (exclude 'model' itself)
181
+ const modelParams = {};
182
+ for (const [key, value] of Object.entries(providerSettings)) {
183
+ if (key !== 'model' && value !== undefined) {
184
+ modelParams[key] = value;
185
+ }
186
+ }
187
+ return Promise.resolve({
188
+ provider: activeProvider,
189
+ model,
190
+ profile: this.getCurrentProfileName(),
191
+ providerSettings,
192
+ ephemeralSettings: this.settings.global,
193
+ modelParams,
194
+ allSettings: {
195
+ providers: this.settings.providers,
196
+ },
197
+ });
198
+ }
199
+ onSettingsChanged(listener) {
200
+ this.eventEmitter.on('settings_changed', listener);
201
+ return () => this.eventEmitter.removeListener('settings_changed', listener);
202
+ }
203
+ }
204
+ //# sourceMappingURL=SettingsService.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"SettingsService.js","sourceRoot":"","sources":["../../../src/settings/SettingsService.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,12 @@
1
+ /**
2
+ * Centralized SettingsService singleton instance
3
+ */
4
+ import { SettingsService } from './SettingsService.js';
5
+ /**
6
+ * Get or create the global SettingsService singleton instance
7
+ */
8
+ export declare function getSettingsService(): SettingsService;
9
+ /**
10
+ * Reset the settings service instance (for testing)
11
+ */
12
+ export declare function resetSettingsService(): void;
@@ -0,0 +1,24 @@
1
+ /**
2
+ * Centralized SettingsService singleton instance
3
+ */
4
+ import { SettingsService } from './SettingsService.js';
5
+ let settingsServiceInstance = null;
6
+ /**
7
+ * Get or create the global SettingsService singleton instance
8
+ */
9
+ export function getSettingsService() {
10
+ if (!settingsServiceInstance) {
11
+ settingsServiceInstance = new SettingsService();
12
+ }
13
+ return settingsServiceInstance;
14
+ }
15
+ /**
16
+ * Reset the settings service instance (for testing)
17
+ */
18
+ export function resetSettingsService() {
19
+ if (settingsServiceInstance) {
20
+ settingsServiceInstance.clear();
21
+ }
22
+ settingsServiceInstance = null;
23
+ }
24
+ //# sourceMappingURL=settingsServiceInstance.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"settingsServiceInstance.js","sourceRoot":"","sources":["../../../src/settings/settingsServiceInstance.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAC;AAEvD,IAAI,uBAAuB,GAA2B,IAAI,CAAC;AAE3D;;GAEG;AACH,MAAM,UAAU,kBAAkB;IAChC,IAAI,CAAC,uBAAuB,EAAE,CAAC;QAC7B,uBAAuB,GAAG,IAAI,eAAe,EAAE,CAAC;IAClD,CAAC;IAED,OAAO,uBAAuB,CAAC;AACjC,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,oBAAoB;IAClC,IAAI,uBAAuB,EAAE,CAAC;QAC5B,uBAAuB,CAAC,KAAK,EAAE,CAAC;IAClC,CAAC;IACD,uBAAuB,GAAG,IAAI,CAAC;AACjC,CAAC"}
@@ -0,0 +1,141 @@
1
+ /**
2
+ * Settings service interfaces and types
3
+ */
4
+ /**
5
+ * Global settings schema matching the specification
6
+ */
7
+ export interface GlobalSettings {
8
+ defaultProvider?: string;
9
+ providers: Record<string, ProviderSettings>;
10
+ ui?: UISettings | null;
11
+ telemetry?: TelemetrySettings;
12
+ advanced?: AdvancedSettings;
13
+ }
14
+ /**
15
+ * Provider-specific settings
16
+ */
17
+ export interface ProviderSettings {
18
+ enabled: boolean;
19
+ apiKey?: string;
20
+ baseUrl?: string;
21
+ model?: string;
22
+ maxTokens?: number;
23
+ temperature?: number;
24
+ toolFormat?: 'auto' | 'openai' | 'qwen' | 'hermes' | 'xml' | 'anthropic' | 'deepseek' | 'gemma' | 'llama';
25
+ [key: string]: unknown;
26
+ }
27
+ /**
28
+ * UI-related settings
29
+ */
30
+ export interface UISettings {
31
+ theme?: 'light' | 'dark' | 'auto';
32
+ fontSize?: number;
33
+ compactMode?: boolean;
34
+ }
35
+ /**
36
+ * Telemetry settings
37
+ */
38
+ export interface TelemetrySettings {
39
+ enabled: boolean;
40
+ level?: 'minimal' | 'standard' | 'detailed';
41
+ }
42
+ /**
43
+ * Advanced settings
44
+ */
45
+ export interface AdvancedSettings {
46
+ debug?: boolean;
47
+ logLevel?: 'error' | 'warn' | 'info' | 'debug';
48
+ maxRetries?: number;
49
+ timeout?: number;
50
+ }
51
+ /**
52
+ * Event emitted when settings change
53
+ */
54
+ export interface SettingsChangeEvent {
55
+ type: 'settings_changed';
56
+ changes: Partial<GlobalSettings>;
57
+ timestamp: Date;
58
+ }
59
+ /**
60
+ * Event listener function type
61
+ */
62
+ export type EventListener<T = unknown> = (event: T) => void;
63
+ /**
64
+ * Event unsubscribe function type
65
+ */
66
+ export type EventUnsubscribe = () => void;
67
+ /**
68
+ * Comprehensive diagnostics information from SettingsService
69
+ */
70
+ export interface DiagnosticsInfo {
71
+ provider: string;
72
+ model: string;
73
+ profile: string | null;
74
+ providerSettings: ProviderSettings;
75
+ ephemeralSettings: Record<string, unknown>;
76
+ modelParams: Record<string, unknown>;
77
+ allSettings: GlobalSettings;
78
+ }
79
+ /**
80
+ * Settings service interface
81
+ */
82
+ export interface ISettingsService {
83
+ /**
84
+ * Get current global settings
85
+ */
86
+ getSettings(): Promise<GlobalSettings>;
87
+ getSettings(provider: string): Promise<ProviderSettings>;
88
+ /**
89
+ * Update global settings (partial update)
90
+ */
91
+ updateSettings(updates: Partial<GlobalSettings>): Promise<void>;
92
+ updateSettings(provider: string, updates: Partial<ProviderSettings>): Promise<void>;
93
+ /**
94
+ * Switch to a different provider and update settings
95
+ */
96
+ switchProvider(providerId: string): Promise<void>;
97
+ /**
98
+ * Subscribe to settings change events
99
+ */
100
+ onSettingsChanged(listener: EventListener<SettingsChangeEvent>): EventUnsubscribe;
101
+ /**
102
+ * Subscribe to settings change events (legacy method)
103
+ */
104
+ on(event: 'settings_changed', listener: EventListener<SettingsChangeEvent>): EventUnsubscribe;
105
+ /**
106
+ * Emit a settings change event
107
+ */
108
+ emit(event: 'settings_changed', data: SettingsChangeEvent): void;
109
+ /**
110
+ * Get comprehensive diagnostics data from centralized source
111
+ */
112
+ getDiagnosticsData?(): Promise<DiagnosticsInfo>;
113
+ /**
114
+ * Export current settings for profile storage
115
+ */
116
+ exportForProfile?(): Promise<{
117
+ defaultProvider: string;
118
+ providers: Record<string, ProviderSettings>;
119
+ ui?: UISettings;
120
+ telemetry?: TelemetrySettings;
121
+ advanced?: AdvancedSettings;
122
+ }>;
123
+ /**
124
+ * Import settings from profile data
125
+ */
126
+ importFromProfile?(profileData: {
127
+ defaultProvider: string;
128
+ providers: Record<string, ProviderSettings>;
129
+ ui?: UISettings;
130
+ telemetry?: TelemetrySettings;
131
+ advanced?: AdvancedSettings;
132
+ }): Promise<void>;
133
+ /**
134
+ * Set the current profile name (for tracking)
135
+ */
136
+ setCurrentProfileName?(profileName: string | null): void;
137
+ /**
138
+ * Get the current profile name
139
+ */
140
+ getCurrentProfileName?(): string | null;
141
+ }
@@ -0,0 +1,5 @@
1
+ /**
2
+ * Settings service interfaces and types
3
+ */
4
+ export {};
5
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../../../src/settings/types.ts"],"names":[],"mappings":"AAAA;;GAEG"}
@@ -0,0 +1,16 @@
1
+ /**
2
+ * @license
3
+ * Copyright 2025 Vybestack LLC
4
+ * SPDX-License-Identifier: Apache-2.0
5
+ */
6
+ export declare class ConversationFileWriter {
7
+ private logPath;
8
+ private currentLogFile;
9
+ constructor(logPath?: string);
10
+ private ensureLogDirectory;
11
+ writeEntry(entry: Record<string, unknown>): void;
12
+ writeRequest(provider: string, messages: unknown[], context?: Record<string, unknown>): void;
13
+ writeResponse(provider: string, response: unknown, metadata?: Record<string, unknown>): void;
14
+ writeToolCall(provider: string, toolName: string, context?: Record<string, unknown>): void;
15
+ }
16
+ export declare function getConversationFileWriter(logPath?: string): ConversationFileWriter;
@@ -0,0 +1,69 @@
1
+ /**
2
+ * @license
3
+ * Copyright 2025 Vybestack LLC
4
+ * SPDX-License-Identifier: Apache-2.0
5
+ */
6
+ import * as fs from 'fs';
7
+ import * as path from 'path';
8
+ import * as os from 'os';
9
+ export class ConversationFileWriter {
10
+ logPath;
11
+ currentLogFile;
12
+ constructor(logPath) {
13
+ this.logPath =
14
+ logPath || path.join(os.homedir(), '.llxprt', 'conversations');
15
+ this.currentLogFile = path.join(this.logPath, `conversation-${new Date().toISOString().split('T')[0]}.jsonl`);
16
+ this.ensureLogDirectory();
17
+ }
18
+ ensureLogDirectory() {
19
+ if (!fs.existsSync(this.logPath)) {
20
+ fs.mkdirSync(this.logPath, { recursive: true });
21
+ }
22
+ }
23
+ writeEntry(entry) {
24
+ try {
25
+ const logEntry = {
26
+ timestamp: new Date().toISOString(),
27
+ ...entry,
28
+ };
29
+ const line = JSON.stringify(logEntry) + '\n';
30
+ fs.appendFileSync(this.currentLogFile, line);
31
+ }
32
+ catch (error) {
33
+ console.error('Failed to write log entry:', error);
34
+ }
35
+ }
36
+ writeRequest(provider, messages, context) {
37
+ this.writeEntry({
38
+ type: 'request',
39
+ provider,
40
+ messages,
41
+ context,
42
+ });
43
+ }
44
+ writeResponse(provider, response, metadata) {
45
+ this.writeEntry({
46
+ type: 'response',
47
+ provider,
48
+ response,
49
+ metadata,
50
+ });
51
+ }
52
+ writeToolCall(provider, toolName, context) {
53
+ this.writeEntry({
54
+ type: 'tool_call',
55
+ provider,
56
+ tool: toolName,
57
+ ...context,
58
+ });
59
+ }
60
+ }
61
+ // Singleton instance
62
+ let fileWriter = null;
63
+ export function getConversationFileWriter(logPath) {
64
+ if (!fileWriter) {
65
+ fileWriter = new ConversationFileWriter(logPath);
66
+ }
67
+ return fileWriter;
68
+ }
69
+ //# sourceMappingURL=ConversationFileWriter.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ConversationFileWriter.js","sourceRoot":"","sources":["../../../src/storage/ConversationFileWriter.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,KAAK,EAAE,MAAM,IAAI,CAAC;AACzB,OAAO,KAAK,IAAI,MAAM,MAAM,CAAC;AAC7B,OAAO,KAAK,EAAE,MAAM,IAAI,CAAC;AAEzB,MAAM,OAAO,sBAAsB;IACzB,OAAO,CAAS;IAChB,cAAc,CAAS;IAE/B,YAAY,OAAgB;QAC1B,IAAI,CAAC,OAAO;YACV,OAAO,IAAI,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,OAAO,EAAE,EAAE,SAAS,EAAE,eAAe,CAAC,CAAC;QACjE,IAAI,CAAC,cAAc,GAAG,IAAI,CAAC,IAAI,CAC7B,IAAI,CAAC,OAAO,EACZ,gBAAgB,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,QAAQ,CAC/D,CAAC;QACF,IAAI,CAAC,kBAAkB,EAAE,CAAC;IAC5B,CAAC;IAEO,kBAAkB;QACxB,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,IAAI,CAAC,OAAO,CAAC,EAAE,CAAC;YACjC,EAAE,CAAC,SAAS,CAAC,IAAI,CAAC,OAAO,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;QAClD,CAAC;IACH,CAAC;IAED,UAAU,CAAC,KAA8B;QACvC,IAAI,CAAC;YACH,MAAM,QAAQ,GAAG;gBACf,SAAS,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;gBACnC,GAAG,KAAK;aACT,CAAC;YACF,MAAM,IAAI,GAAG,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,GAAG,IAAI,CAAC;YAC7C,EAAE,CAAC,cAAc,CAAC,IAAI,CAAC,cAAc,EAAE,IAAI,CAAC,CAAC;QAC/C,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,OAAO,CAAC,KAAK,CAAC,4BAA4B,EAAE,KAAK,CAAC,CAAC;QACrD,CAAC;IACH,CAAC;IAED,YAAY,CACV,QAAgB,EAChB,QAAmB,EACnB,OAAiC;QAEjC,IAAI,CAAC,UAAU,CAAC;YACd,IAAI,EAAE,SAAS;YACf,QAAQ;YACR,QAAQ;YACR,OAAO;SACR,CAAC,CAAC;IACL,CAAC;IAED,aAAa,CACX,QAAgB,EAChB,QAAiB,EACjB,QAAkC;QAElC,IAAI,CAAC,UAAU,CAAC;YACd,IAAI,EAAE,UAAU;YAChB,QAAQ;YACR,QAAQ;YACR,QAAQ;SACT,CAAC,CAAC;IACL,CAAC;IAED,aAAa,CACX,QAAgB,EAChB,QAAgB,EAChB,OAAiC;QAEjC,IAAI,CAAC,UAAU,CAAC;YACd,IAAI,EAAE,WAAW;YACjB,QAAQ;YACR,IAAI,EAAE,QAAQ;YACd,GAAG,OAAO;SACX,CAAC,CAAC;IACL,CAAC;CACF;AAED,qBAAqB;AACrB,IAAI,UAAU,GAAkC,IAAI,CAAC;AAErD,MAAM,UAAU,yBAAyB,CACvC,OAAgB;IAEhB,IAAI,CAAC,UAAU,EAAE,CAAC;QAChB,UAAU,GAAG,IAAI,sBAAsB,CAAC,OAAO,CAAC,CAAC;IACnD,CAAC;IACD,OAAO,UAAU,CAAC;AACpB,CAAC"}
@@ -10,14 +10,21 @@ import { Config } from '../../config/config.js';
10
10
  export interface LogResponse {
11
11
  nextRequestWaitMs?: number;
12
12
  }
13
+ export interface LogEventEntry {
14
+ event_time_ms: number;
15
+ source_extension_json: string;
16
+ }
13
17
  export declare class ClearcutLogger {
14
18
  private static instance;
15
19
  private config?;
16
20
  private readonly events;
17
21
  private last_flush_time;
18
22
  private flush_interval_ms;
23
+ private max_events;
24
+ private max_retry_events;
19
25
  private constructor();
20
26
  static getInstance(_config?: Config): ClearcutLogger | undefined;
27
+ static clearInstance(): void;
21
28
  enqueueLogEvent(event: any): void;
22
29
  createLogEvent(name: string, data: object[]): object;
23
30
  flushIfNeeded(): void;
@@ -36,5 +43,6 @@ export declare class ClearcutLogger {
36
43
  logMalformedJsonResponseEvent(event: MalformedJsonResponseEvent): void;
37
44
  logEndSessionEvent(event: EndSessionEvent): void;
38
45
  getProxyAgent(): HttpsProxyAgent<string> | undefined;
46
+ private requeueFailedEvents;
39
47
  shutdown(): void;
40
48
  }
@@ -31,10 +31,33 @@ const malformed_json_response_event_name = 'malformed_json_response';
31
31
  export class ClearcutLogger {
32
32
  static instance;
33
33
  config;
34
- // eslint-disable-next-line @typescript-eslint/no-explicit-any -- Clearcut expects this format.
35
- events = [];
34
+ // Telemetry is disabled - this is just a stub to maintain API compatibility
35
+ events = {
36
+ items: [],
37
+ toArray() {
38
+ return this.items;
39
+ },
40
+ get size() {
41
+ return this.items.length;
42
+ },
43
+ push(item) {
44
+ this.items.push(item);
45
+ if (this.items.length > 1000) {
46
+ // max_events
47
+ this.items.shift();
48
+ }
49
+ },
50
+ splice(start, deleteCount) {
51
+ return this.items.splice(start, deleteCount);
52
+ },
53
+ unshift(item) {
54
+ this.items.unshift(item);
55
+ },
56
+ };
36
57
  last_flush_time = Date.now();
37
58
  flush_interval_ms = 1000 * 60; // Wait at least a minute before flushing events.
59
+ max_events = 1000; // Maximum number of events to keep in memory
60
+ max_retry_events = 100; // Maximum number of events to retry
38
61
  constructor(config) {
39
62
  this.config = config;
40
63
  }
@@ -50,6 +73,10 @@ export class ClearcutLogger {
50
73
  return ClearcutLogger.instance;
51
74
  */
52
75
  }
76
+ static clearInstance() {
77
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
78
+ delete ClearcutLogger.instance;
79
+ }
53
80
  // eslint-disable-next-line @typescript-eslint/no-explicit-any -- Clearcut expects this format.
54
81
  enqueueLogEvent(event) {
55
82
  this.events.push([
@@ -95,7 +122,7 @@ export class ClearcutLogger {
95
122
  if (this.config?.getDebugMode()) {
96
123
  console.log('Flushing log events to Clearcut.');
97
124
  }
98
- const eventsToSend = [...this.events];
125
+ const eventsToSend = [...this.events.items];
99
126
  if (eventsToSend.length === 0) {
100
127
  return {};
101
128
  }
@@ -314,6 +341,22 @@ export class ClearcutLogger {
314
341
  value: JSON.stringify(event.error_type),
315
342
  },
316
343
  ];
344
+ if (event.metadata) {
345
+ const metadataMapping = {
346
+ ai_added_lines: EventMetadataKey.GEMINI_CLI_AI_ADDED_LINES,
347
+ ai_removed_lines: EventMetadataKey.GEMINI_CLI_AI_REMOVED_LINES,
348
+ user_added_lines: EventMetadataKey.GEMINI_CLI_USER_ADDED_LINES,
349
+ user_removed_lines: EventMetadataKey.GEMINI_CLI_USER_REMOVED_LINES,
350
+ };
351
+ for (const [key, gemini_cli_key] of Object.entries(metadataMapping)) {
352
+ if (event.metadata[key] !== undefined) {
353
+ data.push({
354
+ gemini_cli_key,
355
+ value: JSON.stringify(event.metadata[key]),
356
+ });
357
+ }
358
+ }
359
+ }
317
360
  const logEvent = this.createLogEvent(tool_call_event_name, data);
318
361
  this.enqueueLogEvent(logEvent);
319
362
  this.flushIfNeeded();
@@ -516,6 +559,16 @@ export class ClearcutLogger {
516
559
  throw new Error('Unsupported proxy type');
517
560
  }
518
561
  }
562
+ requeueFailedEvents(failedEvents) {
563
+ const availableSpace = this.max_events - this.events.size;
564
+ const eventsToRequeue = Math.min(failedEvents.length, availableSpace, this.max_retry_events);
565
+ if (eventsToRequeue > 0) {
566
+ const startIndex = Math.max(0, failedEvents.length - eventsToRequeue);
567
+ for (let i = failedEvents.length - 1; i >= startIndex; i--) {
568
+ this.events.unshift(failedEvents[i]);
569
+ }
570
+ }
571
+ }
519
572
  shutdown() {
520
573
  const event = new EndSessionEvent(this.config);
521
574
  this.logEndSessionEvent(event);