@vybestack/llxprt-code-core 0.1.15 → 0.1.16

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 (354) hide show
  1. package/README.md +37 -2
  2. package/dist/src/code_assist/converter.d.ts +2 -1
  3. package/dist/src/code_assist/converter.js +2 -1
  4. package/dist/src/code_assist/converter.js.map +1 -1
  5. package/dist/src/code_assist/converter.test.js +13 -10
  6. package/dist/src/code_assist/converter.test.js.map +1 -1
  7. package/dist/src/code_assist/server.d.ts +2 -2
  8. package/dist/src/code_assist/server.js +4 -4
  9. package/dist/src/code_assist/server.js.map +1 -1
  10. package/dist/src/code_assist/server.test.js +9 -9
  11. package/dist/src/code_assist/server.test.js.map +1 -1
  12. package/dist/src/code_assist/setup.js +1 -1
  13. package/dist/src/code_assist/setup.js.map +1 -1
  14. package/dist/src/code_assist/setup.test.js +2 -2
  15. package/dist/src/code_assist/setup.test.js.map +1 -1
  16. package/dist/src/config/config.d.ts +22 -4
  17. package/dist/src/config/config.js +58 -10
  18. package/dist/src/config/config.js.map +1 -1
  19. package/dist/src/config/config.test.js +28 -0
  20. package/dist/src/config/config.test.js.map +1 -1
  21. package/dist/src/config/flashFallback.test.js +11 -1
  22. package/dist/src/config/flashFallback.test.js.map +1 -1
  23. package/dist/src/config/models.js.map +1 -1
  24. package/dist/src/config/profileManager.d.ts +42 -0
  25. package/dist/src/config/profileManager.js +114 -0
  26. package/dist/src/config/profileManager.js.map +1 -0
  27. package/dist/src/core/client.d.ts +11 -1
  28. package/dist/src/core/client.js +86 -30
  29. package/dist/src/core/client.js.map +1 -1
  30. package/dist/src/core/client.test.d.ts +1 -1
  31. package/dist/src/core/client.test.js +95 -28
  32. package/dist/src/core/client.test.js.map +1 -1
  33. package/dist/src/core/contentGenerator.d.ts +2 -2
  34. package/dist/src/core/contentGenerator.js.map +1 -1
  35. package/dist/src/core/coreToolScheduler.js +39 -15
  36. package/dist/src/core/coreToolScheduler.js.map +1 -1
  37. package/dist/src/core/coreToolScheduler.test.js +14 -17
  38. package/dist/src/core/coreToolScheduler.test.js.map +1 -1
  39. package/dist/src/core/geminiChat.js +34 -2
  40. package/dist/src/core/geminiChat.js.map +1 -1
  41. package/dist/src/core/geminiChat.test.js +2 -2
  42. package/dist/src/core/geminiChat.test.js.map +1 -1
  43. package/dist/src/core/nonInteractiveToolExecutor.js +11 -3
  44. package/dist/src/core/nonInteractiveToolExecutor.js.map +1 -1
  45. package/dist/src/core/nonInteractiveToolExecutor.test.js +5 -2
  46. package/dist/src/core/nonInteractiveToolExecutor.test.js.map +1 -1
  47. package/dist/src/core/prompts-async.test.d.ts +6 -0
  48. package/dist/src/core/prompts-async.test.js +115 -0
  49. package/dist/src/core/prompts-async.test.js.map +1 -0
  50. package/dist/src/core/prompts.d.ts +8 -1
  51. package/dist/src/core/prompts.js +97 -377
  52. package/dist/src/core/prompts.js.map +1 -1
  53. package/dist/src/core/prompts.test.js +46 -192
  54. package/dist/src/core/prompts.test.js.map +1 -1
  55. package/dist/src/core/tokenLimits.d.ts +1 -1
  56. package/dist/src/core/tokenLimits.js +5 -1
  57. package/dist/src/core/tokenLimits.js.map +1 -1
  58. package/dist/src/core/turn.d.ts +3 -0
  59. package/dist/src/core/turn.js +3 -0
  60. package/dist/src/core/turn.js.map +1 -1
  61. package/dist/src/ide/detect-ide.d.ts +10 -0
  62. package/dist/src/ide/detect-ide.js +24 -0
  63. package/dist/src/ide/detect-ide.js.map +1 -0
  64. package/dist/src/ide/ide-client.d.ts +11 -1
  65. package/dist/src/ide/ide-client.js +37 -1
  66. package/dist/src/ide/ide-client.js.map +1 -1
  67. package/dist/src/ide/ide-installer.d.ts +15 -0
  68. package/dist/src/ide/ide-installer.js +111 -0
  69. package/dist/src/ide/ide-installer.js.map +1 -0
  70. package/dist/src/ide/ide-installer.test.d.ts +6 -0
  71. package/dist/src/ide/ide-installer.test.js +78 -0
  72. package/dist/src/ide/ide-installer.test.js.map +1 -0
  73. package/dist/src/index.d.ts +9 -0
  74. package/dist/src/index.js +11 -0
  75. package/dist/src/index.js.map +1 -1
  76. package/dist/src/mcp/oauth-provider.js +3 -3
  77. package/dist/src/mcp/oauth-provider.js.map +1 -1
  78. package/dist/src/mcp/oauth-provider.test.js +9 -8
  79. package/dist/src/mcp/oauth-provider.test.js.map +1 -1
  80. package/dist/src/parsers/TextToolCallParser.d.ts +1 -0
  81. package/dist/src/parsers/TextToolCallParser.js +45 -3
  82. package/dist/src/parsers/TextToolCallParser.js.map +1 -1
  83. package/dist/src/parsers/TextToolCallParser.multibyte.test.d.ts +1 -0
  84. package/dist/src/parsers/TextToolCallParser.multibyte.test.js +42 -0
  85. package/dist/src/parsers/TextToolCallParser.multibyte.test.js.map +1 -0
  86. package/dist/src/prompt-config/TemplateEngine.d.ts +35 -0
  87. package/dist/src/prompt-config/TemplateEngine.js +149 -0
  88. package/dist/src/prompt-config/TemplateEngine.js.map +1 -0
  89. package/dist/src/prompt-config/TemplateEngine.test.d.ts +1 -0
  90. package/dist/src/prompt-config/TemplateEngine.test.js +494 -0
  91. package/dist/src/prompt-config/TemplateEngine.test.js.map +1 -0
  92. package/dist/src/prompt-config/defaults/compression.md +58 -0
  93. package/dist/src/prompt-config/defaults/core-defaults.d.ts +5 -0
  94. package/dist/src/prompt-config/defaults/core-defaults.js +332 -0
  95. package/dist/src/prompt-config/defaults/core-defaults.js.map +1 -0
  96. package/dist/src/prompt-config/defaults/core.md +267 -0
  97. package/dist/src/prompt-config/defaults/env/git-repository.md +15 -0
  98. package/dist/src/prompt-config/defaults/env/ide-mode.md +3 -0
  99. package/dist/src/prompt-config/defaults/env/macos-seatbelt.md +3 -0
  100. package/dist/src/prompt-config/defaults/env/outside-of-sandbox.md +3 -0
  101. package/dist/src/prompt-config/defaults/env/sandbox.md +3 -0
  102. package/dist/src/prompt-config/defaults/index.d.ts +14 -0
  103. package/dist/src/prompt-config/defaults/index.js +21 -0
  104. package/dist/src/prompt-config/defaults/index.js.map +1 -0
  105. package/dist/src/prompt-config/defaults/provider-defaults.d.ts +5 -0
  106. package/dist/src/prompt-config/defaults/provider-defaults.js +26 -0
  107. package/dist/src/prompt-config/defaults/provider-defaults.js.map +1 -0
  108. package/dist/src/prompt-config/defaults/providers/gemini/models/gemini-2.5-flash/core.md +10 -0
  109. package/dist/src/prompt-config/defaults/service-defaults.d.ts +5 -0
  110. package/dist/src/prompt-config/defaults/service-defaults.js +52 -0
  111. package/dist/src/prompt-config/defaults/service-defaults.js.map +1 -0
  112. package/dist/src/prompt-config/defaults/tool-defaults.d.ts +5 -0
  113. package/dist/src/prompt-config/defaults/tool-defaults.js +81 -0
  114. package/dist/src/prompt-config/defaults/tool-defaults.js.map +1 -0
  115. package/dist/src/prompt-config/defaults/tools/edit.md +2 -0
  116. package/dist/src/prompt-config/defaults/tools/glob.md +2 -0
  117. package/dist/src/prompt-config/defaults/tools/grep.md +2 -0
  118. package/dist/src/prompt-config/defaults/tools/ls.md +1 -0
  119. package/dist/src/prompt-config/defaults/tools/memory.md +1 -0
  120. package/dist/src/prompt-config/defaults/tools/read-file.md +4 -0
  121. package/dist/src/prompt-config/defaults/tools/read-many-files.md +2 -0
  122. package/dist/src/prompt-config/defaults/tools/shell.md +5 -0
  123. package/dist/src/prompt-config/defaults/tools/todo-read.md +3 -0
  124. package/dist/src/prompt-config/defaults/tools/todo-write.md +50 -0
  125. package/dist/src/prompt-config/defaults/tools/web-fetch.md +3 -0
  126. package/dist/src/prompt-config/defaults/tools/web-search.md +3 -0
  127. package/dist/src/prompt-config/defaults/tools/write-file.md +4 -0
  128. package/dist/src/prompt-config/index.d.ts +16 -0
  129. package/dist/src/prompt-config/index.js +11 -0
  130. package/dist/src/prompt-config/index.js.map +1 -0
  131. package/dist/src/prompt-config/prompt-cache.d.ts +72 -0
  132. package/dist/src/prompt-config/prompt-cache.js +271 -0
  133. package/dist/src/prompt-config/prompt-cache.js.map +1 -0
  134. package/dist/src/prompt-config/prompt-cache.test.d.ts +6 -0
  135. package/dist/src/prompt-config/prompt-cache.test.js +437 -0
  136. package/dist/src/prompt-config/prompt-cache.test.js.map +1 -0
  137. package/dist/src/prompt-config/prompt-installer.d.ts +118 -0
  138. package/dist/src/prompt-config/prompt-installer.js +723 -0
  139. package/dist/src/prompt-config/prompt-installer.js.map +1 -0
  140. package/dist/src/prompt-config/prompt-installer.test.d.ts +7 -0
  141. package/dist/src/prompt-config/prompt-installer.test.js +503 -0
  142. package/dist/src/prompt-config/prompt-installer.test.js.map +1 -0
  143. package/dist/src/prompt-config/prompt-loader.d.ts +49 -0
  144. package/dist/src/prompt-config/prompt-loader.js +331 -0
  145. package/dist/src/prompt-config/prompt-loader.js.map +1 -0
  146. package/dist/src/prompt-config/prompt-loader.test.d.ts +5 -0
  147. package/dist/src/prompt-config/prompt-loader.test.js +413 -0
  148. package/dist/src/prompt-config/prompt-loader.test.js.map +1 -0
  149. package/dist/src/prompt-config/prompt-resolver.d.ts +74 -0
  150. package/dist/src/prompt-config/prompt-resolver.js +600 -0
  151. package/dist/src/prompt-config/prompt-resolver.js.map +1 -0
  152. package/dist/src/prompt-config/prompt-resolver.test.d.ts +1 -0
  153. package/dist/src/prompt-config/prompt-resolver.test.js +529 -0
  154. package/dist/src/prompt-config/prompt-resolver.test.js.map +1 -0
  155. package/dist/src/prompt-config/prompt-service.d.ts +108 -0
  156. package/dist/src/prompt-config/prompt-service.js +435 -0
  157. package/dist/src/prompt-config/prompt-service.js.map +1 -0
  158. package/dist/src/prompt-config/prompt-service.test.d.ts +1 -0
  159. package/dist/src/prompt-config/prompt-service.test.js +811 -0
  160. package/dist/src/prompt-config/prompt-service.test.js.map +1 -0
  161. package/dist/src/prompt-config/types.d.ts +30 -0
  162. package/dist/src/prompt-config/types.js +10 -0
  163. package/dist/src/prompt-config/types.js.map +1 -0
  164. package/dist/src/providers/IProvider.d.ts +10 -0
  165. package/dist/src/providers/anthropic/AnthropicProvider.d.ts +14 -1
  166. package/dist/src/providers/anthropic/AnthropicProvider.js +28 -2
  167. package/dist/src/providers/anthropic/AnthropicProvider.js.map +1 -1
  168. package/dist/src/providers/anthropic/AnthropicProvider.modelParams.test.d.ts +1 -0
  169. package/dist/src/providers/anthropic/AnthropicProvider.modelParams.test.js +48 -0
  170. package/dist/src/providers/anthropic/AnthropicProvider.modelParams.test.js.map +1 -0
  171. package/dist/src/providers/anthropic/AnthropicProvider.test.js +2 -1
  172. package/dist/src/providers/anthropic/AnthropicProvider.test.js.map +1 -1
  173. package/dist/src/providers/gemini/GeminiProvider.d.ts +11 -2
  174. package/dist/src/providers/gemini/GeminiProvider.integration.test.js +1 -1
  175. package/dist/src/providers/gemini/GeminiProvider.js +34 -9
  176. package/dist/src/providers/gemini/GeminiProvider.js.map +1 -1
  177. package/dist/src/providers/openai/OpenAIProvider.d.ts +11 -0
  178. package/dist/src/providers/openai/OpenAIProvider.js +100 -31
  179. package/dist/src/providers/openai/OpenAIProvider.js.map +1 -1
  180. package/dist/src/providers/openai/OpenAIProvider.responses.test.js +27 -3
  181. package/dist/src/providers/openai/OpenAIProvider.responses.test.js.map +1 -1
  182. package/dist/src/providers/openai/OpenAIProvider.shouldUseResponses.test.js +2 -1
  183. package/dist/src/providers/openai/OpenAIProvider.shouldUseResponses.test.js.map +1 -1
  184. package/dist/src/providers/openai/OpenAIProvider.test.js +307 -7
  185. package/dist/src/providers/openai/OpenAIProvider.test.js.map +1 -1
  186. package/dist/src/providers/openai/buildResponsesRequest.js +19 -2
  187. package/dist/src/providers/openai/buildResponsesRequest.js.map +1 -1
  188. package/dist/src/providers/test-utils/providerTestConfig.d.ts +21 -0
  189. package/dist/src/providers/test-utils/providerTestConfig.js +23 -0
  190. package/dist/src/providers/test-utils/providerTestConfig.js.map +1 -0
  191. package/dist/src/providers/types/IProviderConfig.d.ts +6 -0
  192. package/dist/src/services/loopDetectionService.d.ts +9 -0
  193. package/dist/src/services/loopDetectionService.js +44 -12
  194. package/dist/src/services/loopDetectionService.js.map +1 -1
  195. package/dist/src/services/shellExecutionService.d.ts +1 -37
  196. package/dist/src/services/shellExecutionService.js +24 -55
  197. package/dist/src/services/shellExecutionService.js.map +1 -1
  198. package/dist/src/{providers/IProviderConfig.js → services/shellExecutionService.multibyte.test.d.ts} +0 -1
  199. package/dist/src/services/shellExecutionService.multibyte.test.js +72 -0
  200. package/dist/src/services/shellExecutionService.multibyte.test.js.map +1 -0
  201. package/dist/src/services/shellExecutionService.test.js +11 -5
  202. package/dist/src/services/shellExecutionService.test.js.map +1 -1
  203. package/dist/src/services/shellExecutionService.windows.multibyte.test.d.ts +6 -0
  204. package/dist/src/services/shellExecutionService.windows.multibyte.test.js +98 -0
  205. package/dist/src/services/shellExecutionService.windows.multibyte.test.js.map +1 -0
  206. package/dist/src/services/shellExecutionService.windows.test.d.ts +6 -0
  207. package/dist/src/services/shellExecutionService.windows.test.js +79 -0
  208. package/dist/src/services/shellExecutionService.windows.test.js.map +1 -0
  209. package/dist/src/telemetry/clearcut-logger/clearcut-logger.d.ts +3 -2
  210. package/dist/src/telemetry/clearcut-logger/clearcut-logger.js +22 -3
  211. package/dist/src/telemetry/clearcut-logger/clearcut-logger.js.map +1 -1
  212. package/dist/src/telemetry/clearcut-logger/event-metadata-key.d.ts +4 -1
  213. package/dist/src/telemetry/clearcut-logger/event-metadata-key.js +12 -0
  214. package/dist/src/telemetry/clearcut-logger/event-metadata-key.js.map +1 -1
  215. package/dist/src/telemetry/constants.d.ts +1 -1
  216. package/dist/src/telemetry/constants.js +1 -1
  217. package/dist/src/telemetry/constants.js.map +1 -1
  218. package/dist/src/telemetry/file-exporters.d.ts +2 -2
  219. package/dist/src/telemetry/file-exporters.js +47 -20
  220. package/dist/src/telemetry/file-exporters.js.map +1 -1
  221. package/dist/src/telemetry/loggers.d.ts +2 -2
  222. package/dist/src/telemetry/loggers.js +13 -6
  223. package/dist/src/telemetry/loggers.js.map +1 -1
  224. package/dist/src/telemetry/loggers.test.circular.js +2 -0
  225. package/dist/src/telemetry/loggers.test.circular.js.map +1 -1
  226. package/dist/src/telemetry/loggers.test.js +8 -3
  227. package/dist/src/telemetry/loggers.test.js.map +1 -1
  228. package/dist/src/telemetry/sdk.d.ts +1 -1
  229. package/dist/src/telemetry/sdk.js +71 -73
  230. package/dist/src/telemetry/sdk.js.map +1 -1
  231. package/dist/src/telemetry/telemetry.test.js +7 -5
  232. package/dist/src/telemetry/telemetry.test.js.map +1 -1
  233. package/dist/src/telemetry/types.d.ts +12 -4
  234. package/dist/src/telemetry/types.js +18 -4
  235. package/dist/src/telemetry/types.js.map +1 -1
  236. package/dist/src/telemetry/uiTelemetry.test.js +3 -0
  237. package/dist/src/telemetry/uiTelemetry.test.js.map +1 -1
  238. package/dist/src/test-utils/mockWorkspaceContext.d.ts +13 -0
  239. package/dist/src/test-utils/mockWorkspaceContext.js +24 -0
  240. package/dist/src/test-utils/mockWorkspaceContext.js.map +1 -0
  241. package/dist/src/tools/edit.js +27 -3
  242. package/dist/src/tools/edit.js.map +1 -1
  243. package/dist/src/tools/edit.test.js +104 -1
  244. package/dist/src/tools/edit.test.js.map +1 -1
  245. package/dist/src/tools/glob.js +53 -17
  246. package/dist/src/tools/glob.js.map +1 -1
  247. package/dist/src/tools/glob.test.js +25 -2
  248. package/dist/src/tools/glob.test.js.map +1 -1
  249. package/dist/src/tools/grep.d.ts +1 -1
  250. package/dist/src/tools/grep.js +81 -29
  251. package/dist/src/tools/grep.js.map +1 -1
  252. package/dist/src/tools/grep.test.js +72 -5
  253. package/dist/src/tools/grep.test.js.map +1 -1
  254. package/dist/src/tools/ls.js +4 -3
  255. package/dist/src/tools/ls.js.map +1 -1
  256. package/dist/src/tools/ls.test.d.ts +6 -0
  257. package/dist/src/tools/ls.test.js +356 -0
  258. package/dist/src/tools/ls.test.js.map +1 -0
  259. package/dist/src/tools/mcp-client.js +8 -3
  260. package/dist/src/tools/mcp-client.js.map +1 -1
  261. package/dist/src/tools/mcp-client.test.js +34 -0
  262. package/dist/src/tools/mcp-client.test.js.map +1 -1
  263. package/dist/src/tools/memoryTool.d.ts +17 -2
  264. package/dist/src/tools/memoryTool.js +130 -13
  265. package/dist/src/tools/memoryTool.js.map +1 -1
  266. package/dist/src/tools/memoryTool.test.js +88 -3
  267. package/dist/src/tools/memoryTool.test.js.map +1 -1
  268. package/dist/src/tools/read-file.js +8 -6
  269. package/dist/src/tools/read-file.js.map +1 -1
  270. package/dist/src/tools/read-file.test.js +30 -2
  271. package/dist/src/tools/read-file.test.js.map +1 -1
  272. package/dist/src/tools/read-many-files.js +22 -12
  273. package/dist/src/tools/read-many-files.js.map +1 -1
  274. package/dist/src/tools/read-many-files.test.js +35 -2
  275. package/dist/src/tools/read-many-files.test.js.map +1 -1
  276. package/dist/src/tools/shell.js +16 -0
  277. package/dist/src/tools/shell.js.map +1 -1
  278. package/dist/src/tools/shell.multibyte.test.d.ts +6 -0
  279. package/dist/src/tools/shell.multibyte.test.js +74 -0
  280. package/dist/src/tools/shell.multibyte.test.js.map +1 -0
  281. package/dist/src/tools/shell.test.js +33 -1
  282. package/dist/src/tools/shell.test.js.map +1 -1
  283. package/dist/src/tools/tool-error.d.ts +22 -0
  284. package/dist/src/tools/tool-error.js +27 -0
  285. package/dist/src/tools/tool-error.js.map +1 -0
  286. package/dist/src/tools/tool-registry.test.js +8 -0
  287. package/dist/src/tools/tool-registry.test.js.map +1 -1
  288. package/dist/src/tools/tools.d.ts +8 -0
  289. package/dist/src/tools/tools.js.map +1 -1
  290. package/dist/src/tools/write-file.js +5 -3
  291. package/dist/src/tools/write-file.js.map +1 -1
  292. package/dist/src/tools/write-file.test.js +36 -2
  293. package/dist/src/tools/write-file.test.js.map +1 -1
  294. package/dist/src/types/modelParams.d.ts +62 -0
  295. package/dist/src/types/modelParams.js +7 -0
  296. package/dist/src/types/modelParams.js.map +1 -0
  297. package/dist/src/utils/bfsFileSearch.test.js +4 -2
  298. package/dist/src/utils/bfsFileSearch.test.js.map +1 -1
  299. package/dist/src/utils/editCorrector.js +2 -2
  300. package/dist/src/utils/editCorrector.js.map +1 -1
  301. package/dist/src/utils/editor.d.ts +1 -1
  302. package/dist/src/utils/editor.js +9 -0
  303. package/dist/src/utils/editor.js.map +1 -1
  304. package/dist/src/utils/editor.test.js +21 -1
  305. package/dist/src/utils/editor.test.js.map +1 -1
  306. package/dist/src/utils/fileUtils.js +12 -1
  307. package/dist/src/utils/fileUtils.js.map +1 -1
  308. package/dist/src/utils/fileUtils.test.js +29 -1
  309. package/dist/src/utils/fileUtils.test.js.map +1 -1
  310. package/dist/src/utils/flashFallback.integration.test.js +8 -0
  311. package/dist/src/utils/flashFallback.integration.test.js.map +1 -1
  312. package/dist/src/utils/memoryDiscovery.d.ts +1 -1
  313. package/dist/src/utils/memoryDiscovery.js +61 -73
  314. package/dist/src/utils/memoryDiscovery.js.map +1 -1
  315. package/dist/src/utils/memoryDiscovery.test.js +4 -3
  316. package/dist/src/utils/memoryDiscovery.test.js.map +1 -1
  317. package/dist/src/utils/memoryImportProcessor.d.ts +19 -12
  318. package/dist/src/utils/memoryImportProcessor.js +241 -82
  319. package/dist/src/utils/memoryImportProcessor.js.map +1 -1
  320. package/dist/src/utils/memoryImportProcessor.test.js +595 -50
  321. package/dist/src/utils/memoryImportProcessor.test.js.map +1 -1
  322. package/dist/src/utils/nextSpeakerChecker.js +10 -25
  323. package/dist/src/utils/nextSpeakerChecker.js.map +1 -1
  324. package/dist/src/utils/nextSpeakerChecker.test.js +6 -2
  325. package/dist/src/utils/nextSpeakerChecker.test.js.map +1 -1
  326. package/dist/src/utils/sanitization.d.ts +20 -0
  327. package/dist/src/utils/sanitization.js +66 -0
  328. package/dist/src/utils/sanitization.js.map +1 -0
  329. package/dist/src/utils/sanitization.test.d.ts +6 -0
  330. package/dist/src/utils/sanitization.test.js +81 -0
  331. package/dist/src/utils/sanitization.test.js.map +1 -0
  332. package/dist/src/utils/secure-browser-launcher.d.ts +23 -0
  333. package/dist/src/utils/secure-browser-launcher.js +164 -0
  334. package/dist/src/utils/secure-browser-launcher.js.map +1 -0
  335. package/dist/src/utils/secure-browser-launcher.test.d.ts +6 -0
  336. package/dist/src/utils/secure-browser-launcher.test.js +149 -0
  337. package/dist/src/utils/secure-browser-launcher.test.js.map +1 -0
  338. package/dist/src/utils/summarizer.js +2 -2
  339. package/dist/src/utils/summarizer.js.map +1 -1
  340. package/dist/src/utils/unicodeUtils.d.ts +44 -0
  341. package/dist/src/utils/unicodeUtils.js +93 -0
  342. package/dist/src/utils/unicodeUtils.js.map +1 -0
  343. package/dist/src/utils/unicodeUtils.test.d.ts +6 -0
  344. package/dist/src/utils/unicodeUtils.test.js +120 -0
  345. package/dist/src/utils/unicodeUtils.test.js.map +1 -0
  346. package/dist/src/utils/workspaceContext.d.ts +47 -0
  347. package/dist/src/utils/workspaceContext.js +106 -0
  348. package/dist/src/utils/workspaceContext.js.map +1 -0
  349. package/dist/src/utils/workspaceContext.test.d.ts +6 -0
  350. package/dist/src/utils/workspaceContext.test.js +209 -0
  351. package/dist/src/utils/workspaceContext.test.js.map +1 -0
  352. package/package.json +2 -1
  353. package/dist/src/providers/IProviderConfig.d.ts +0 -31
  354. package/dist/src/providers/IProviderConfig.js.map +0 -1
@@ -16,6 +16,7 @@
16
16
  import { describe, it, expect, vi, beforeEach } from 'vitest';
17
17
  import { OpenAIProvider } from './OpenAIProvider.js';
18
18
  import { ContentGeneratorRole } from '../ContentGeneratorRole.js';
19
+ import { TEST_PROVIDER_CONFIG } from '../test-utils/providerTestConfig.js';
19
20
  // Mock OpenAI module
20
21
  vi.mock('openai', () => ({
21
22
  default: vi.fn().mockImplementation(() => ({
@@ -32,13 +33,16 @@ vi.mock('openai', () => ({
32
33
  describe('OpenAIProvider', () => {
33
34
  let provider;
34
35
  let mockOpenAIInstance;
36
+ let capturedApiParams;
35
37
  beforeEach(() => {
36
38
  vi.clearAllMocks();
37
- provider = new OpenAIProvider('test-api-key');
39
+ provider = new OpenAIProvider('test-api-key', undefined, TEST_PROVIDER_CONFIG);
38
40
  // Set a model that doesn't use the Responses API
39
41
  provider.setModel('gpt-3.5-turbo');
40
42
  // Get the mocked OpenAI instance (typed as unknown then cast)
41
43
  mockOpenAIInstance = provider.openai; // Cast for test
44
+ // Reset captured params
45
+ capturedApiParams = undefined;
42
46
  });
43
47
  describe('generateChatCompletion with usage tracking', () => {
44
48
  it('should include stream_options with include_usage', async () => {
@@ -57,18 +61,22 @@ describe('OpenAIProvider', () => {
57
61
  };
58
62
  },
59
63
  };
60
- mockOpenAIInstance.chat.completions.create.mockResolvedValue(mockStream);
64
+ // Capture the parameters passed to the API
65
+ mockOpenAIInstance.chat.completions.create.mockImplementation(async (params) => {
66
+ capturedApiParams = params;
67
+ return mockStream;
68
+ });
61
69
  const messages = [{ role: ContentGeneratorRole.USER, content: 'Hi' }];
62
70
  const generator = provider.generateChatCompletion(messages);
63
71
  const results = [];
64
72
  for await (const chunk of generator) {
65
73
  results.push(chunk);
66
74
  }
67
- // Verify stream_options was passed
68
- expect(mockOpenAIInstance.chat.completions.create).toHaveBeenCalledWith(expect.objectContaining({
69
- stream: true,
70
- stream_options: { include_usage: true },
71
- }));
75
+ // Test the actual parameters that would be sent to the API
76
+ expect(capturedApiParams).toBeDefined();
77
+ const apiParams = capturedApiParams;
78
+ expect(apiParams.stream).toBe(true);
79
+ expect(apiParams.stream_options).toEqual({ include_usage: true });
72
80
  });
73
81
  it('should yield usage data when provided in stream', async () => {
74
82
  const mockStream = {
@@ -210,5 +218,297 @@ describe('OpenAIProvider', () => {
210
218
  expect(provider.baseURL).toBe(newUrl);
211
219
  });
212
220
  });
221
+ describe('model parameters functionality', () => {
222
+ describe('setting and getting model parameters', () => {
223
+ it('should store model parameters when set', () => {
224
+ // When I set model parameters
225
+ provider.setModelParams({ temperature: 0.7 });
226
+ // Then they should be retrievable
227
+ const params = provider.getModelParams();
228
+ expect(params).toEqual({ temperature: 0.7 });
229
+ });
230
+ it('should return undefined when no model parameters are set', () => {
231
+ // Given a fresh provider with no parameters set
232
+ const freshProvider = new OpenAIProvider('test-key', undefined, TEST_PROVIDER_CONFIG);
233
+ // When I get model parameters
234
+ const params = freshProvider.getModelParams();
235
+ // Then it should return undefined
236
+ expect(params).toBeUndefined();
237
+ });
238
+ it('should merge new parameters with existing ones instead of replacing', () => {
239
+ // Given I have set some initial parameters
240
+ provider.setModelParams({ temperature: 0.7, max_tokens: 1000 });
241
+ // When I set additional parameters
242
+ provider.setModelParams({ top_p: 0.9, temperature: 0.5 });
243
+ // Then all parameters should be merged with new values overriding old
244
+ const params = provider.getModelParams();
245
+ expect(params).toEqual({
246
+ temperature: 0.5, // Updated value
247
+ max_tokens: 1000, // Retained from first call
248
+ top_p: 0.9, // New parameter
249
+ });
250
+ });
251
+ it('should accept any parameter names without validation', () => {
252
+ // When I set various parameter types including unknown ones
253
+ provider.setModelParams({
254
+ temperature: 0.8,
255
+ max_tokens: 2048,
256
+ top_p: 0.95,
257
+ unknown_param: 'should_work',
258
+ nested_object: { key: 'value' },
259
+ numeric_string: '123',
260
+ });
261
+ // Then all parameters should be stored as-is
262
+ const params = provider.getModelParams();
263
+ expect(params).toEqual({
264
+ temperature: 0.8,
265
+ max_tokens: 2048,
266
+ top_p: 0.95,
267
+ unknown_param: 'should_work',
268
+ nested_object: { key: 'value' },
269
+ numeric_string: '123',
270
+ });
271
+ });
272
+ });
273
+ describe('passing parameters to OpenAI API', () => {
274
+ it('should include model parameters in chat completions API call', async () => {
275
+ // Given I have set model parameters
276
+ provider.setModelParams({
277
+ temperature: 0.7,
278
+ max_tokens: 2000,
279
+ top_p: 0.9,
280
+ });
281
+ // And the API returns a response
282
+ const mockStream = {
283
+ async *[Symbol.asyncIterator]() {
284
+ yield {
285
+ choices: [{ delta: { content: 'Response' } }],
286
+ };
287
+ },
288
+ };
289
+ // Capture the parameters passed to the API
290
+ let localCapturedParams;
291
+ mockOpenAIInstance.chat.completions.create.mockImplementation(async (params) => {
292
+ localCapturedParams = params;
293
+ return mockStream;
294
+ });
295
+ // When I generate a chat completion
296
+ const messages = [
297
+ { role: ContentGeneratorRole.USER, content: 'Hello' },
298
+ ];
299
+ const generator = provider.generateChatCompletion(messages);
300
+ const results = [];
301
+ for await (const chunk of generator) {
302
+ results.push(chunk);
303
+ }
304
+ // Then the API should receive the model parameters
305
+ expect(localCapturedParams).toBeDefined();
306
+ const apiParams = localCapturedParams;
307
+ expect(apiParams.temperature).toBe(0.7);
308
+ expect(apiParams.max_tokens).toBe(2000);
309
+ expect(apiParams.top_p).toBe(0.9);
310
+ expect(apiParams.model).toBe('gpt-3.5-turbo');
311
+ expect(apiParams.messages).toEqual(messages);
312
+ expect(apiParams.stream).toBe(true);
313
+ expect(apiParams.stream_options).toEqual({ include_usage: true });
314
+ });
315
+ it('should make API calls without parameters when none are set', async () => {
316
+ // Given no model parameters are set (fresh provider)
317
+ const freshProvider = new OpenAIProvider('test-key', undefined, TEST_PROVIDER_CONFIG);
318
+ freshProvider.setModel('gpt-3.5-turbo');
319
+ const freshMockInstance = freshProvider.openai;
320
+ // And the API returns a response
321
+ const mockStream = {
322
+ async *[Symbol.asyncIterator]() {
323
+ yield {
324
+ choices: [{ delta: { content: 'Response' } }],
325
+ };
326
+ },
327
+ };
328
+ // Capture the parameters passed to the API
329
+ let localCapturedParams;
330
+ freshMockInstance.chat.completions.create.mockImplementation(async (params) => {
331
+ localCapturedParams = params;
332
+ return mockStream;
333
+ });
334
+ // When I generate a chat completion
335
+ const messages = [
336
+ { role: ContentGeneratorRole.USER, content: 'Hello' },
337
+ ];
338
+ const generator = freshProvider.generateChatCompletion(messages);
339
+ const results = [];
340
+ for await (const chunk of generator) {
341
+ results.push(chunk);
342
+ }
343
+ // Then the API should be called without extra parameters
344
+ expect(localCapturedParams).toBeDefined();
345
+ const apiParams = localCapturedParams;
346
+ expect(apiParams).not.toHaveProperty('temperature');
347
+ expect(apiParams).not.toHaveProperty('max_tokens');
348
+ expect(apiParams).not.toHaveProperty('top_p');
349
+ });
350
+ it('should pass multiple model parameters correctly to the API', async () => {
351
+ // Given I have set multiple diverse parameters
352
+ provider.setModelParams({
353
+ temperature: 0.5,
354
+ max_tokens: 4096,
355
+ top_p: 0.95,
356
+ presence_penalty: 0.1,
357
+ frequency_penalty: 0.2,
358
+ seed: 12345,
359
+ });
360
+ // And the API returns a response
361
+ const mockStream = {
362
+ async *[Symbol.asyncIterator]() {
363
+ yield {
364
+ choices: [{ delta: { content: 'Response' } }],
365
+ };
366
+ },
367
+ };
368
+ // Capture the parameters passed to the API
369
+ let localCapturedParams;
370
+ mockOpenAIInstance.chat.completions.create.mockImplementation(async (params) => {
371
+ localCapturedParams = params;
372
+ return mockStream;
373
+ });
374
+ // When I generate a chat completion
375
+ const messages = [{ role: ContentGeneratorRole.USER, content: 'Test' }];
376
+ const generator = provider.generateChatCompletion(messages);
377
+ for await (const _chunk of generator) {
378
+ // consume the generator
379
+ }
380
+ // Then all parameters should be passed to the API
381
+ expect(localCapturedParams).toBeDefined();
382
+ const apiParams = localCapturedParams;
383
+ expect(apiParams.temperature).toBe(0.5);
384
+ expect(apiParams.max_tokens).toBe(4096);
385
+ expect(apiParams.top_p).toBe(0.95);
386
+ expect(apiParams.presence_penalty).toBe(0.1);
387
+ expect(apiParams.frequency_penalty).toBe(0.2);
388
+ expect(apiParams.seed).toBe(12345);
389
+ });
390
+ it('should pass unknown parameters through to the API without validation', async () => {
391
+ // Given I set parameters that might not be standard OpenAI params
392
+ provider.setModelParams({
393
+ custom_param: 'custom_value',
394
+ experimental_feature: true,
395
+ vendor_specific: { nested: 'data' },
396
+ });
397
+ // And the API returns a response
398
+ const mockStream = {
399
+ async *[Symbol.asyncIterator]() {
400
+ yield {
401
+ choices: [{ delta: { content: 'Response' } }],
402
+ };
403
+ },
404
+ };
405
+ // Capture the parameters passed to the API
406
+ let localCapturedParams;
407
+ mockOpenAIInstance.chat.completions.create.mockImplementation(async (params) => {
408
+ localCapturedParams = params;
409
+ return mockStream;
410
+ });
411
+ // When I generate a chat completion
412
+ const messages = [{ role: ContentGeneratorRole.USER, content: 'Test' }];
413
+ const generator = provider.generateChatCompletion(messages);
414
+ for await (const _chunk of generator) {
415
+ // consume the generator
416
+ }
417
+ // Then unknown parameters should be passed through
418
+ expect(localCapturedParams).toBeDefined();
419
+ const apiParams = localCapturedParams;
420
+ expect(apiParams.custom_param).toBe('custom_value');
421
+ expect(apiParams.experimental_feature).toBe(true);
422
+ expect(apiParams.vendor_specific).toEqual({ nested: 'data' });
423
+ });
424
+ it('should use model parameters across multiple API calls', async () => {
425
+ // Given I set model parameters once
426
+ provider.setModelParams({ temperature: 0.8 });
427
+ // And the API returns responses
428
+ const mockStream = {
429
+ async *[Symbol.asyncIterator]() {
430
+ yield {
431
+ choices: [{ delta: { content: 'Response' } }],
432
+ };
433
+ },
434
+ };
435
+ // Capture parameters from multiple calls
436
+ const capturedParamsArray = [];
437
+ mockOpenAIInstance.chat.completions.create.mockImplementation(async (params) => {
438
+ capturedParamsArray.push(params);
439
+ return mockStream;
440
+ });
441
+ // When I make multiple API calls
442
+ const messages = [
443
+ { role: ContentGeneratorRole.USER, content: 'Hello' },
444
+ ];
445
+ // First call
446
+ const generator1 = provider.generateChatCompletion(messages);
447
+ for await (const _chunk of generator1) {
448
+ // consume
449
+ }
450
+ // Second call
451
+ const generator2 = provider.generateChatCompletion(messages);
452
+ for await (const _chunk of generator2) {
453
+ // consume
454
+ }
455
+ // Then both calls should include the parameters
456
+ expect(capturedParamsArray).toHaveLength(2);
457
+ const firstCallParams = capturedParamsArray[0];
458
+ const secondCallParams = capturedParamsArray[1];
459
+ expect(firstCallParams.temperature).toBe(0.8);
460
+ expect(secondCallParams.temperature).toBe(0.8);
461
+ });
462
+ it('should work correctly with common OpenAI parameters', async () => {
463
+ // Given I set common OpenAI parameters
464
+ provider.setModelParams({
465
+ temperature: 0.7, // Controls randomness
466
+ max_tokens: 2048, // Maximum response length
467
+ top_p: 0.9, // Nucleus sampling
468
+ presence_penalty: 0.5, // Penalize repeated topics
469
+ frequency_penalty: 0.3, // Penalize repeated tokens
470
+ });
471
+ // And the API returns a response
472
+ const mockStream = {
473
+ async *[Symbol.asyncIterator]() {
474
+ yield {
475
+ choices: [{ delta: { content: 'Creative response' } }],
476
+ };
477
+ },
478
+ };
479
+ // Capture the parameters passed to the API
480
+ let localCapturedParams;
481
+ mockOpenAIInstance.chat.completions.create.mockImplementation(async (params) => {
482
+ localCapturedParams = params;
483
+ return mockStream;
484
+ });
485
+ // When I generate a chat completion
486
+ const messages = [
487
+ {
488
+ role: ContentGeneratorRole.USER,
489
+ content: 'Write something creative',
490
+ },
491
+ ];
492
+ const generator = provider.generateChatCompletion(messages);
493
+ const results = [];
494
+ for await (const chunk of generator) {
495
+ results.push(chunk);
496
+ }
497
+ // Then the response should be generated with all parameters
498
+ expect(results[0]).toMatchObject({
499
+ role: ContentGeneratorRole.ASSISTANT,
500
+ content: 'Creative response',
501
+ });
502
+ // And all parameters should have been passed to the API
503
+ expect(localCapturedParams).toBeDefined();
504
+ const apiParams = localCapturedParams;
505
+ expect(apiParams.temperature).toBe(0.7);
506
+ expect(apiParams.max_tokens).toBe(2048);
507
+ expect(apiParams.top_p).toBe(0.9);
508
+ expect(apiParams.presence_penalty).toBe(0.5);
509
+ expect(apiParams.frequency_penalty).toBe(0.3);
510
+ });
511
+ });
512
+ });
213
513
  });
214
514
  //# sourceMappingURL=OpenAIProvider.test.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"OpenAIProvider.test.js","sourceRoot":"","sources":["../../../../src/providers/openai/OpenAIProvider.test.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"OpenAIProvider.test.js","sourceRoot":"","sources":["../../../../src/providers/openai/OpenAIProvider.test.ts"],"names":[],"mappings":"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"}
@@ -1,3 +1,4 @@
1
+ import { ensureJsonSafe, hasUnicodeReplacements, } from '../../utils/unicodeUtils.js';
1
2
  const MAX_TOOLS = 16;
2
3
  const MAX_JSON_SIZE_KB = 32;
3
4
  export function buildResponsesRequest(params) {
@@ -85,10 +86,18 @@ export function buildResponsesRequest(params) {
85
86
  }
86
87
  // Extract function call outputs from tool messages
87
88
  if (msg.role === 'tool' && msg.tool_call_id && msg.content) {
89
+ // Sanitize content to ensure it's safe for JSON/API transmission
90
+ let sanitizedContent = msg.content;
91
+ if (hasUnicodeReplacements(msg.content)) {
92
+ if (process.env.DEBUG) {
93
+ console.warn('[buildResponsesRequest] Tool output contains Unicode replacement characters (U+FFFD), sanitizing...');
94
+ }
95
+ sanitizedContent = ensureJsonSafe(msg.content);
96
+ }
88
97
  functionCallOutputs.push({
89
98
  type: 'function_call_output',
90
99
  call_id: msg.tool_call_id,
91
- output: msg.content,
100
+ output: sanitizedContent,
92
101
  });
93
102
  }
94
103
  });
@@ -101,9 +110,17 @@ export function buildResponsesRequest(params) {
101
110
  const { tool_calls: _tool_calls, tool_call_id: _tool_call_id, usage, ...cleanMsg } = msg;
102
111
  // Ensure role is valid for Responses API
103
112
  const validRole = cleanMsg.role;
113
+ // Sanitize content for safe API transmission
114
+ let sanitizedContent = cleanMsg.content;
115
+ if (hasUnicodeReplacements(cleanMsg.content)) {
116
+ if (process.env.DEBUG) {
117
+ console.warn(`[buildResponsesRequest] Message content contains Unicode replacement characters (U+FFFD), sanitizing...`);
118
+ }
119
+ sanitizedContent = ensureJsonSafe(cleanMsg.content);
120
+ }
104
121
  return {
105
122
  role: validRole,
106
- content: cleanMsg.content,
123
+ content: sanitizedContent,
107
124
  ...(usage ? { usage } : {}), // Preserve usage data if present
108
125
  };
109
126
  })
@@ -1 +1 @@
1
- {"version":3,"file":"buildResponsesRequest.js","sourceRoot":"","sources":["../../../../src/providers/openai/buildResponsesRequest.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"buildResponsesRequest.js","sourceRoot":"","sources":["../../../../src/providers/openai/buildResponsesRequest.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,21 @@
1
+ /**
2
+ * Copyright 2025 Vybestack LLC
3
+ *
4
+ * Licensed under the Apache License, Version 2.0 (the "License");
5
+ * you may not use this file except in compliance with the License.
6
+ * You may obtain a copy of the License at
7
+ *
8
+ * http://www.apache.org/licenses/LICENSE-2.0
9
+ *
10
+ * Unless required by applicable law or agreed to in writing, software
11
+ * distributed under the License is distributed on an "AS IS" BASIS,
12
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13
+ * See the License for the specific language governing permissions and
14
+ * limitations under the License.
15
+ */
16
+ import { IProviderConfig } from '../types/IProviderConfig.js';
17
+ /**
18
+ * Test configuration for providers that allows browser environment
19
+ * for jsdom testing environments.
20
+ */
21
+ export declare const TEST_PROVIDER_CONFIG: IProviderConfig;
@@ -0,0 +1,23 @@
1
+ /**
2
+ * Copyright 2025 Vybestack LLC
3
+ *
4
+ * Licensed under the Apache License, Version 2.0 (the "License");
5
+ * you may not use this file except in compliance with the License.
6
+ * You may obtain a copy of the License at
7
+ *
8
+ * http://www.apache.org/licenses/LICENSE-2.0
9
+ *
10
+ * Unless required by applicable law or agreed to in writing, software
11
+ * distributed under the License is distributed on an "AS IS" BASIS,
12
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13
+ * See the License for the specific language governing permissions and
14
+ * limitations under the License.
15
+ */
16
+ /**
17
+ * Test configuration for providers that allows browser environment
18
+ * for jsdom testing environments.
19
+ */
20
+ export const TEST_PROVIDER_CONFIG = {
21
+ allowBrowserEnvironment: true,
22
+ };
23
+ //# sourceMappingURL=providerTestConfig.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"providerTestConfig.js","sourceRoot":"","sources":["../../../../src/providers/test-utils/providerTestConfig.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AAIH;;;GAGG;AACH,MAAM,CAAC,MAAM,oBAAoB,GAAoB;IACnD,uBAAuB,EAAE,IAAI;CAC9B,CAAC"}
@@ -99,4 +99,10 @@ export interface IProviderConfig {
99
99
  * This allows for flexibility when different providers need unique settings.
100
100
  */
101
101
  providerSpecific?: Record<string, unknown>;
102
+ /**
103
+ * Whether to allow browser environment for the provider client.
104
+ * This is typically needed for testing environments that use jsdom.
105
+ * Defaults to false for security reasons.
106
+ */
107
+ allowBrowserEnvironment?: boolean;
102
108
  }
@@ -12,6 +12,7 @@ import { Config } from '../config/config.js';
12
12
  export declare class LoopDetectionService {
13
13
  private readonly config;
14
14
  private promptId;
15
+ private promptService;
15
16
  private lastToolCallKey;
16
17
  private toolCallRepetitionCount;
17
18
  private streamContentHistory;
@@ -23,6 +24,14 @@ export declare class LoopDetectionService {
23
24
  private llmCheckInterval;
24
25
  private lastCheckTurn;
25
26
  constructor(config: Config);
27
+ /**
28
+ * Get the loop detection prompt from the prompt service
29
+ */
30
+ private getLoopDetectionPrompt;
31
+ /**
32
+ * Fallback prompt if the prompt service is not available
33
+ */
34
+ private getFallbackLoopDetectionPrompt;
26
35
  private getToolCallKey;
27
36
  /**
28
37
  * Processes a stream event and checks for loop conditions.
@@ -9,6 +9,9 @@ import { logLoopDetected } from '../telemetry/loggers.js';
9
9
  import { LoopDetectedEvent, LoopType } from '../telemetry/types.js';
10
10
  import { DEFAULT_GEMINI_FLASH_MODEL } from '../config/config.js';
11
11
  import { Type } from '@google/genai';
12
+ import { PromptService } from '../prompt-config/prompt-service.js';
13
+ import path from 'node:path';
14
+ import os from 'node:os';
12
15
  const TOOL_CALL_LOOP_THRESHOLD = 10;
13
16
  const CONTENT_LOOP_THRESHOLD = 15;
14
17
  const CONTENT_CHUNK_SIZE = 50;
@@ -43,6 +46,7 @@ const MAX_LLM_CHECK_INTERVAL = 15;
43
46
  export class LoopDetectionService {
44
47
  config;
45
48
  promptId = '';
49
+ promptService = null;
46
50
  // Tool call tracking
47
51
  lastToolCallKey = null;
48
52
  toolCallRepetitionCount = 0;
@@ -59,6 +63,45 @@ export class LoopDetectionService {
59
63
  constructor(config) {
60
64
  this.config = config;
61
65
  }
66
+ /**
67
+ * Get the loop detection prompt from the prompt service
68
+ */
69
+ async getLoopDetectionPrompt() {
70
+ if (!this.promptService) {
71
+ const baseDir = process.env.LLXPRT_PROMPTS_DIR ||
72
+ path.join(os.homedir(), '.llxprt', 'prompts');
73
+ this.promptService = new PromptService({
74
+ baseDir,
75
+ debugMode: process.env.DEBUG === 'true',
76
+ });
77
+ await this.promptService.initialize();
78
+ }
79
+ try {
80
+ return await this.promptService.loadPrompt('services/loop-detection.md');
81
+ }
82
+ catch (error) {
83
+ // Fall back to default if file loading fails
84
+ console.warn('Failed to load loop detection prompt from file, using fallback:', error);
85
+ return this.getFallbackLoopDetectionPrompt();
86
+ }
87
+ }
88
+ /**
89
+ * Fallback prompt if the prompt service is not available
90
+ */
91
+ getFallbackLoopDetectionPrompt() {
92
+ return `You are a sophisticated AI diagnostic agent specializing in identifying when a conversational AI is stuck in an unproductive state. Your task is to analyze the provided conversation history and determine if the assistant has ceased to make meaningful progress.
93
+
94
+ An unproductive state is characterized by one or more of the following patterns over the last 5 or more assistant turns:
95
+
96
+ Repetitive Actions: The assistant repeats the same tool calls or conversational responses a decent number of times. This includes simple loops (e.g., tool_A, tool_A, tool_A) and alternating patterns (e.g., tool_A, tool_B, tool_A, tool_B, ...).
97
+
98
+ Cognitive Loop: The assistant seems unable to determine the next logical step. It might express confusion, repeatedly ask the same questions, or generate responses that don't logically follow from the previous turns, indicating it's stuck and not advancing the task.
99
+
100
+ Crucially, differentiate between a true unproductive state and legitimate, incremental progress.
101
+ For example, a series of 'tool_A' or 'tool_B' tool calls that make small, distinct changes to the same file (like adding docstrings to functions one by one) is considered forward progress and is NOT a loop. A loop would be repeatedly replacing the same text with the same content, or cycling between a small set of files with no net change.
102
+
103
+ Please analyze the conversation history to determine the possibility that the conversation is stuck in a repetitive, non-productive state.`;
104
+ }
62
105
  getToolCallKey(toolCall) {
63
106
  const argsString = JSON.stringify(toolCall.args);
64
107
  const keyString = `${toolCall.name}:${argsString}`;
@@ -249,18 +292,7 @@ export class LoopDetectionService {
249
292
  .getGeminiClient()
250
293
  .getHistory()
251
294
  .slice(-LLM_LOOP_CHECK_HISTORY_COUNT);
252
- const prompt = `You are a sophisticated AI diagnostic agent specializing in identifying when a conversational AI is stuck in an unproductive state. Your task is to analyze the provided conversation history and determine if the assistant has ceased to make meaningful progress.
253
-
254
- An unproductive state is characterized by one or more of the following patterns over the last 5 or more assistant turns:
255
-
256
- Repetitive Actions: The assistant repeats the same tool calls or conversational responses a decent number of times. This includes simple loops (e.g., tool_A, tool_A, tool_A) and alternating patterns (e.g., tool_A, tool_B, tool_A, tool_B, ...).
257
-
258
- Cognitive Loop: The assistant seems unable to determine the next logical step. It might express confusion, repeatedly ask the same questions, or generate responses that don't logically follow from the previous turns, indicating it's stuck and not advancing the task.
259
-
260
- Crucially, differentiate between a true unproductive state and legitimate, incremental progress.
261
- For example, a series of 'tool_A' or 'tool_B' tool calls that make small, distinct changes to the same file (like adding docstrings to functions one by one) is considered forward progress and is NOT a loop. A loop would be repeatedly replacing the same text with the same content, or cycling between a small set of files with no net change.
262
-
263
- Please analyze the conversation history to determine the possibility that the conversation is stuck in a repetitive, non-productive state.`;
295
+ const prompt = await this.getLoopDetectionPrompt();
264
296
  const contents = [
265
297
  ...recentHistory,
266
298
  { role: 'user', parts: [{ text: prompt }] },