@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
@@ -1,503 +0,0 @@
1
- /**
2
- * Behavioral TDD tests for PromptInstaller
3
- *
4
- * These tests verify actual behavior, not mocks. They test real file operations
5
- * using temporary directories to ensure the installer works correctly.
6
- */
7
- import { describe, it, expect, beforeEach, afterEach } from 'vitest';
8
- import { PromptInstaller, REQUIRED_DIRECTORIES } from './prompt-installer.js';
9
- import * as fs from 'fs/promises';
10
- import * as path from 'path';
11
- import * as os from 'os';
12
- import { existsSync } from 'fs';
13
- // Helper to check if we're on Windows
14
- const isWindows = () => os.platform() === 'win32';
15
- describe('PromptInstaller', () => {
16
- let installer;
17
- let tempDir;
18
- let testBaseDir;
19
- beforeEach(async () => {
20
- installer = new PromptInstaller();
21
- // Create a unique temp directory for each test
22
- tempDir = await fs.mkdtemp(path.join(os.tmpdir(), 'prompt-installer-test-'));
23
- testBaseDir = path.join(tempDir, 'prompts');
24
- });
25
- afterEach(async () => {
26
- // Clean up temp directory after each test
27
- await fs.rm(tempDir, { recursive: true, force: true });
28
- });
29
- describe('expandPath', () => {
30
- it('should expand home directory ~ to actual home path', () => {
31
- const homePath = os.homedir();
32
- const result = installer.expandPath('~/test/path');
33
- expect(result).toBe(path.join(homePath, 'test/path'));
34
- });
35
- it('should expand environment variables in path', () => {
36
- process.env.TEST_VAR = '/custom/path';
37
- const result = installer.expandPath('$TEST_VAR/subdir');
38
- const expectedPath = path.normalize('/custom/path/subdir');
39
- expect(result).toBe(expectedPath);
40
- delete process.env.TEST_VAR;
41
- });
42
- it('should expand environment variables with curly braces', () => {
43
- process.env.TEST_VAR = '/custom/path';
44
- const result = installer.expandPath('${TEST_VAR}/subdir');
45
- const expectedPath = path.normalize('/custom/path/subdir');
46
- expect(result).toBe(expectedPath);
47
- delete process.env.TEST_VAR;
48
- });
49
- it('should handle multiple environment variables', () => {
50
- process.env.VAR1 = '/part1';
51
- process.env.VAR2 = 'part2';
52
- const result = installer.expandPath('$VAR1/${VAR2}/file');
53
- const expectedPath = path.normalize('/part1/part2/file');
54
- expect(result).toBe(expectedPath);
55
- delete process.env.VAR1;
56
- delete process.env.VAR2;
57
- });
58
- it('should leave unexpanded variables as-is when not found', () => {
59
- const result = installer.expandPath('$NONEXISTENT_VAR/path');
60
- expect(result).toContain('$NONEXISTENT_VAR');
61
- });
62
- it('should return empty string for null or empty input', () => {
63
- expect(installer.expandPath('')).toBe('');
64
- expect(installer.expandPath(null)).toBe('');
65
- });
66
- it('should resolve relative paths to absolute', () => {
67
- const result = installer.expandPath('relative/path');
68
- expect(path.isAbsolute(result)).toBe(true);
69
- });
70
- it('should normalize paths with redundant separators', () => {
71
- const result = installer.expandPath('/path//to///file');
72
- expect(result).toBe(path.normalize('/path/to/file'));
73
- });
74
- it('should resolve . and .. components', () => {
75
- const result = installer.expandPath('/path/to/../file/./test');
76
- expect(result).toBe(path.normalize('/path/file/test'));
77
- });
78
- });
79
- describe('install', () => {
80
- const defaultFiles = {
81
- 'core.md': '# Core Prompt\nDefault content',
82
- 'env/development.md': '# Development Environment',
83
- 'tools/git.md': '# Git Tool Prompt',
84
- 'providers/openai.md': '# OpenAI Provider',
85
- };
86
- it('should create all required directories', async () => {
87
- const result = await installer.install(testBaseDir, defaultFiles);
88
- expect(result.success).toBe(true);
89
- expect(result.errors).toHaveLength(0);
90
- // Verify all directories exist
91
- for (const dir of REQUIRED_DIRECTORIES) {
92
- const fullPath = path.join(testBaseDir, dir);
93
- expect(existsSync(fullPath)).toBe(true);
94
- }
95
- });
96
- it('should install all default files', async () => {
97
- const result = await installer.install(testBaseDir, defaultFiles);
98
- expect(result.success).toBe(true);
99
- expect(result.installed).toContain('core.md');
100
- expect(result.installed).toContain('env/development.md');
101
- expect(result.installed).toContain('tools/git.md');
102
- expect(result.installed).toContain('providers/openai.md');
103
- // Verify file contents
104
- const coreContent = await fs.readFile(path.join(testBaseDir, 'core.md'), 'utf-8');
105
- expect(coreContent).toBe('# Core Prompt\nDefault content');
106
- });
107
- it('should preserve existing user files by default', async () => {
108
- // Create existing file with custom content
109
- await fs.mkdir(testBaseDir, { recursive: true });
110
- const existingFile = path.join(testBaseDir, 'core.md');
111
- await fs.writeFile(existingFile, 'User customized content');
112
- const result = await installer.install(testBaseDir, defaultFiles);
113
- expect(result.success).toBe(true);
114
- expect(result.skipped).toContain('core.md');
115
- expect(result.installed).not.toContain('core.md');
116
- // Verify content was preserved
117
- const content = await fs.readFile(existingFile, 'utf-8');
118
- expect(content).toBe('User customized content');
119
- });
120
- it('should overwrite existing files when force option is true', async () => {
121
- // Create existing file
122
- await fs.mkdir(testBaseDir, { recursive: true });
123
- const existingFile = path.join(testBaseDir, 'core.md');
124
- await fs.writeFile(existingFile, 'Old content');
125
- const result = await installer.install(testBaseDir, defaultFiles, {
126
- force: true,
127
- });
128
- expect(result.success).toBe(true);
129
- expect(result.installed).toContain('core.md');
130
- expect(result.skipped).not.toContain('core.md');
131
- // Verify content was overwritten
132
- const content = await fs.readFile(existingFile, 'utf-8');
133
- expect(content).toBe('# Core Prompt\nDefault content');
134
- });
135
- it('should perform dry run without writing files', async () => {
136
- const result = await installer.install(testBaseDir, defaultFiles, {
137
- dryRun: true,
138
- });
139
- expect(result.success).toBe(true);
140
- expect(result.installed).toHaveLength(4);
141
- // Verify no files were actually written
142
- expect(existsSync(testBaseDir)).toBe(false);
143
- });
144
- it('should handle null baseDir by using default', async () => {
145
- const result = await installer.install(null, defaultFiles, {
146
- dryRun: true,
147
- });
148
- expect(result.success).toBe(true);
149
- expect(result.baseDir).toContain(path.join('.llxprt', 'prompts'));
150
- });
151
- it('should reject invalid base directory paths', async () => {
152
- const result = await installer.install('../../../etc/passwd', defaultFiles);
153
- expect(result.success).toBe(false);
154
- expect(result.errors).toContain('Invalid base directory');
155
- });
156
- it('should set correct file permissions', async () => {
157
- // Skip this test entirely on Windows
158
- if (isWindows()) {
159
- expect(true).toBe(true); // Placeholder assertion
160
- return;
161
- }
162
- const result = await installer.install(testBaseDir, defaultFiles);
163
- expect(result.success).toBe(true);
164
- // Check directory permissions (755)
165
- const dirStats = await fs.stat(testBaseDir);
166
- const dirMode = dirStats.mode & parseInt('777', 8);
167
- expect(dirMode).toBe(parseInt('755', 8));
168
- // Check file permissions (644)
169
- const fileStats = await fs.stat(path.join(testBaseDir, 'core.md'));
170
- const fileMode = fileStats.mode & parseInt('777', 8);
171
- expect(fileMode).toBe(parseInt('644', 8));
172
- });
173
- it('should handle permission errors gracefully', async () => {
174
- // Skip permission tests on Windows as chmod has no effect
175
- if (isWindows()) {
176
- // On Windows, create a scenario that would fail (e.g., invalid path)
177
- const result = await installer.install('/invalid:path', defaultFiles);
178
- expect(result.success).toBe(false);
179
- expect(result.errors.length).toBeGreaterThan(0);
180
- }
181
- else {
182
- // Create directory with no write permission
183
- await fs.mkdir(testBaseDir, { recursive: true, mode: 0o555 });
184
- const result = await installer.install(testBaseDir, defaultFiles);
185
- expect(result.success).toBe(false);
186
- expect(result.errors.length).toBeGreaterThan(0);
187
- expect(result.errors[0]).toContain('Permission denied');
188
- }
189
- });
190
- it('should create parent directories for nested files', async () => {
191
- const nestedFiles = {
192
- 'deeply/nested/path/file.md': 'Content',
193
- };
194
- const result = await installer.install(testBaseDir, nestedFiles);
195
- expect(result.success).toBe(true);
196
- expect(existsSync(path.join(testBaseDir, 'deeply/nested/path'))).toBe(true);
197
- expect(result.installed).toContain('deeply/nested/path/file.md');
198
- });
199
- });
200
- describe('uninstall', () => {
201
- beforeEach(async () => {
202
- // Set up test directory with some files
203
- await fs.mkdir(path.join(testBaseDir, 'env'), { recursive: true });
204
- await fs.mkdir(path.join(testBaseDir, 'tools'), { recursive: true });
205
- await fs.writeFile(path.join(testBaseDir, 'core.md'), 'Core content');
206
- await fs.writeFile(path.join(testBaseDir, 'user-custom.md'), 'User file');
207
- await fs.writeFile(path.join(testBaseDir, 'env/dev.md'), 'Dev content');
208
- });
209
- it('should remove only default files by default', async () => {
210
- const result = await installer.uninstall(testBaseDir);
211
- expect(result.success).toBe(true);
212
- expect(result.removed).toContain('core.md');
213
- expect(result.removed).not.toContain('user-custom.md');
214
- // Verify user file still exists
215
- expect(existsSync(path.join(testBaseDir, 'user-custom.md'))).toBe(true);
216
- });
217
- it('should remove all files when removeUserFiles is true', async () => {
218
- const result = await installer.uninstall(testBaseDir, {
219
- removeUserFiles: true,
220
- });
221
- expect(result.success).toBe(true);
222
- expect(result.removed).toContain('core.md');
223
- expect(result.removed).toContain('user-custom.md');
224
- // Verify all files are gone
225
- expect(existsSync(path.join(testBaseDir, 'user-custom.md'))).toBe(false);
226
- });
227
- it('should remove empty directories after file removal', async () => {
228
- const result = await installer.uninstall(testBaseDir, {
229
- removeUserFiles: true,
230
- });
231
- expect(result.success).toBe(true);
232
- expect(existsSync(testBaseDir)).toBe(false);
233
- });
234
- it('should handle dry run without removing files', async () => {
235
- const result = await installer.uninstall(testBaseDir, { dryRun: true });
236
- expect(result.success).toBe(true);
237
- expect(result.removed.length).toBeGreaterThan(0);
238
- // Verify files still exist
239
- expect(existsSync(path.join(testBaseDir, 'core.md'))).toBe(true);
240
- });
241
- it('should return success when base directory does not exist', async () => {
242
- const result = await installer.uninstall('/nonexistent/path');
243
- expect(result.success).toBe(true);
244
- expect(result.removed).toHaveLength(0);
245
- expect(result.errors).toHaveLength(0);
246
- });
247
- it('should handle null baseDir by using default', async () => {
248
- const result = await installer.uninstall(null, { dryRun: true });
249
- expect(result.success).toBe(true);
250
- });
251
- });
252
- describe('validate', () => {
253
- it('should detect missing base directory', async () => {
254
- const result = await installer.validate(testBaseDir);
255
- expect(result.isValid).toBe(false);
256
- expect(result.errors).toContain('Base directory does not exist');
257
- });
258
- it('should detect missing required directories', async () => {
259
- await fs.mkdir(testBaseDir, { recursive: true });
260
- const result = await installer.validate(testBaseDir);
261
- expect(result.isValid).toBe(false);
262
- expect(result.warnings.length).toBeGreaterThan(0);
263
- expect(result.missing).toContain('env');
264
- expect(result.missing).toContain('tools');
265
- expect(result.missing).toContain('providers');
266
- });
267
- it('should detect missing required core.md file', async () => {
268
- await fs.mkdir(path.join(testBaseDir, 'env'), { recursive: true });
269
- await fs.mkdir(path.join(testBaseDir, 'tools'), { recursive: true });
270
- await fs.mkdir(path.join(testBaseDir, 'providers'), { recursive: true });
271
- const result = await installer.validate(testBaseDir);
272
- expect(result.isValid).toBe(false);
273
- expect(result.errors).toContain('Missing required core.md');
274
- expect(result.missing).toContain('core.md');
275
- });
276
- it('should validate successful installation', async () => {
277
- // Create valid structure
278
- await fs.mkdir(path.join(testBaseDir, 'env'), { recursive: true });
279
- await fs.mkdir(path.join(testBaseDir, 'tools'), { recursive: true });
280
- await fs.mkdir(path.join(testBaseDir, 'providers'), { recursive: true });
281
- await fs.writeFile(path.join(testBaseDir, 'core.md'), 'Content');
282
- const result = await installer.validate(testBaseDir);
283
- expect(result.isValid).toBe(true);
284
- expect(result.errors).toHaveLength(0);
285
- expect(result.missing).toHaveLength(0);
286
- });
287
- it('should check directory permissions', async () => {
288
- // Skip permission tests on Windows as chmod has no effect
289
- if (isWindows()) {
290
- // On Windows, just create a directory and verify it exists
291
- await fs.mkdir(testBaseDir, { recursive: true });
292
- const result = await installer.validate(testBaseDir);
293
- // Windows directories are generally writable if they exist
294
- expect(result.warnings.length).toBeGreaterThanOrEqual(0);
295
- }
296
- else {
297
- await fs.mkdir(testBaseDir, { mode: 0o444, recursive: true });
298
- const result = await installer.validate(testBaseDir);
299
- expect(result.warnings).toContain('Cannot write to directory');
300
- }
301
- });
302
- it('should detect empty files that should have content', async () => {
303
- await fs.mkdir(testBaseDir, { recursive: true });
304
- await fs.writeFile(path.join(testBaseDir, 'core.md'), '');
305
- const result = await installer.validate(testBaseDir);
306
- expect(result.warnings).toContain('Empty file: core.md');
307
- });
308
- it('should handle null baseDir by using default', async () => {
309
- const result = await installer.validate(null);
310
- expect(result.baseDir).toContain(path.join('.llxprt', 'prompts'));
311
- });
312
- });
313
- describe('repair', () => {
314
- const defaultFiles = {
315
- 'core.md': '# Core Prompt\nDefault content',
316
- 'env/development.md': '# Development Environment',
317
- };
318
- it('should fix missing directories', async () => {
319
- await fs.mkdir(testBaseDir, { recursive: true });
320
- const result = await installer.repair(testBaseDir, defaultFiles);
321
- expect(result.success).toBe(true);
322
- expect(result.repaired).toContain('env');
323
- expect(result.repaired).toContain('tools');
324
- expect(result.repaired).toContain('providers');
325
- // Verify directories were created
326
- expect(existsSync(path.join(testBaseDir, 'env'))).toBe(true);
327
- expect(existsSync(path.join(testBaseDir, 'tools'))).toBe(true);
328
- });
329
- it('should restore missing default files', async () => {
330
- await fs.mkdir(path.join(testBaseDir, 'env'), { recursive: true });
331
- const result = await installer.repair(testBaseDir, defaultFiles);
332
- expect(result.repaired).toContain('core.md');
333
- // Verify file was restored
334
- const content = await fs.readFile(path.join(testBaseDir, 'core.md'), 'utf-8');
335
- expect(content).toBe('# Core Prompt\nDefault content');
336
- });
337
- it('should fix file permissions', async () => {
338
- await fs.mkdir(testBaseDir, { recursive: true });
339
- await fs.writeFile(path.join(testBaseDir, 'core.md'), 'Content', {
340
- mode: 0o600,
341
- });
342
- const result = await installer.repair(testBaseDir, defaultFiles);
343
- expect(result.success).toBe(true);
344
- // Skip permission checks on Windows as chmod has no effect
345
- if (!isWindows()) {
346
- // Verify permissions were fixed
347
- const stats = await fs.stat(path.join(testBaseDir, 'core.md'));
348
- const mode = stats.mode & parseInt('777', 8);
349
- expect(mode).toBe(parseInt('644', 8));
350
- }
351
- else {
352
- // On Windows, just verify the file exists
353
- expect(existsSync(path.join(testBaseDir, 'core.md'))).toBe(true);
354
- }
355
- });
356
- it('should return success immediately if already valid', async () => {
357
- // Create valid structure
358
- await fs.mkdir(path.join(testBaseDir, 'env'), { recursive: true });
359
- await fs.mkdir(path.join(testBaseDir, 'tools'), { recursive: true });
360
- await fs.mkdir(path.join(testBaseDir, 'providers'), { recursive: true });
361
- await fs.writeFile(path.join(testBaseDir, 'core.md'), 'Content');
362
- const result = await installer.repair(testBaseDir, defaultFiles);
363
- expect(result.success).toBe(true);
364
- expect(result.repaired).toHaveLength(0);
365
- });
366
- it('should report errors that could not be repaired', async () => {
367
- // Skip permission tests on Windows as chmod has no effect
368
- if (isWindows()) {
369
- // On Windows, try to create in an invalid location
370
- const result = await installer.repair('/invalid:path', defaultFiles);
371
- expect(result.success).toBe(false);
372
- expect(result.errors.length).toBeGreaterThan(0);
373
- }
374
- else {
375
- // Create directory with no write permission
376
- await fs.mkdir(testBaseDir, { recursive: true, mode: 0o555 });
377
- const result = await installer.repair(testBaseDir, defaultFiles);
378
- expect(result.success).toBe(false);
379
- expect(result.errors.length).toBeGreaterThan(0);
380
- expect(result.stillInvalid.length).toBeGreaterThan(0);
381
- }
382
- });
383
- });
384
- describe('backup', () => {
385
- beforeEach(async () => {
386
- // Create test structure to backup
387
- await fs.mkdir(path.join(testBaseDir, 'env'), { recursive: true });
388
- await fs.writeFile(path.join(testBaseDir, 'core.md'), 'Core content');
389
- await fs.writeFile(path.join(testBaseDir, 'env/dev.md'), 'Dev content');
390
- });
391
- it('should create timestamped backup directory', async () => {
392
- const backupPath = path.join(tempDir, 'backups');
393
- const result = await installer.backup(testBaseDir, backupPath);
394
- expect(result.success).toBe(true);
395
- expect(result.backupPath).toMatch(/prompt-backup-\d{8}_\d{6}/);
396
- expect(existsSync(result.backupPath)).toBe(true);
397
- });
398
- it('should copy all files to backup', async () => {
399
- const backupPath = path.join(tempDir, 'backups');
400
- const result = await installer.backup(testBaseDir, backupPath);
401
- expect(result.success).toBe(true);
402
- expect(result.fileCount).toBe(2);
403
- // Verify files were copied
404
- const backupCore = path.join(result.backupPath, 'core.md');
405
- const backupEnv = path.join(result.backupPath, 'env/dev.md');
406
- expect(existsSync(backupCore)).toBe(true);
407
- expect(existsSync(backupEnv)).toBe(true);
408
- // Verify content matches
409
- const content = await fs.readFile(backupCore, 'utf-8');
410
- expect(content).toBe('Core content');
411
- });
412
- it('should create manifest file with backup details', async () => {
413
- const backupPath = path.join(tempDir, 'backups');
414
- const result = await installer.backup(testBaseDir, backupPath);
415
- const manifestPath = path.join(result.backupPath, 'backup-manifest.json');
416
- expect(existsSync(manifestPath)).toBe(true);
417
- const manifest = JSON.parse(await fs.readFile(manifestPath, 'utf-8'));
418
- expect(manifest.sourcePath).toBe(testBaseDir);
419
- expect(manifest.fileCount).toBe(2);
420
- expect(manifest.backupDate).toBeDefined();
421
- });
422
- it('should handle non-existent source directory', async () => {
423
- const result = await installer.backup('/nonexistent/path', tempDir);
424
- expect(result.success).toBe(false);
425
- expect(result.error).toBe('Nothing to backup');
426
- });
427
- it('should handle invalid backup path', async () => {
428
- const result = await installer.backup(testBaseDir, '');
429
- expect(result.success).toBe(false);
430
- expect(result.error).toBe('Invalid backup path');
431
- });
432
- it('should calculate total backup size', async () => {
433
- const backupPath = path.join(tempDir, 'backups');
434
- const result = await installer.backup(testBaseDir, backupPath);
435
- expect(result.success).toBe(true);
436
- expect(result.totalSize).toBeGreaterThan(0);
437
- });
438
- });
439
- describe('edge cases', () => {
440
- it('should handle symbolic links in base directory', async () => {
441
- const realDir = path.join(tempDir, 'real-prompts');
442
- const symlinkDir = path.join(tempDir, 'symlink-prompts');
443
- await fs.mkdir(realDir, { recursive: true });
444
- await fs.symlink(realDir, symlinkDir);
445
- const result = await installer.install(symlinkDir, {
446
- 'test.md': 'content',
447
- });
448
- expect(result.success).toBe(true);
449
- // File should be in the real directory
450
- expect(existsSync(path.join(realDir, 'test.md'))).toBe(true);
451
- });
452
- it('should handle race conditions with idempotent operations', async () => {
453
- const files = { 'test.md': 'content' };
454
- // Run multiple installs concurrently
455
- const results = await Promise.all([
456
- installer.install(testBaseDir, files),
457
- installer.install(testBaseDir, files),
458
- installer.install(testBaseDir, files),
459
- ]);
460
- // All should succeed
461
- results.forEach((result) => {
462
- expect(result.success).toBe(true);
463
- });
464
- // File should exist only once
465
- const dirContents = await fs.readdir(testBaseDir);
466
- expect(dirContents.filter((f) => f === 'test.md')).toHaveLength(1);
467
- });
468
- it('should handle case-sensitive filesystem issues', async () => {
469
- const files = {
470
- 'Core.md': 'uppercase content',
471
- 'core.md': 'lowercase content',
472
- };
473
- const result = await installer.install(testBaseDir, files);
474
- // On case-insensitive systems, one will be skipped
475
- expect(result.success).toBe(true);
476
- expect(result.installed.length + result.skipped.length).toBe(2);
477
- });
478
- it('should clean up temp files on write failure', async () => {
479
- // Make directory read-only after creation
480
- await fs.mkdir(testBaseDir, { recursive: true });
481
- // Attempt to write a file that will fail
482
- const files = { 'test.md': 'content' };
483
- // Skip permission tests on Windows as chmod has no effect
484
- if (isWindows()) {
485
- // On Windows, simulate a failure by using an invalid path
486
- const result = await installer.install('/invalid:path', files);
487
- expect(result.success).toBe(false);
488
- return; // Skip temp file check on Windows
489
- }
490
- // Make directory read-only
491
- await fs.chmod(testBaseDir, 0o555);
492
- const result = await installer.install(testBaseDir, files);
493
- expect(result.success).toBe(false);
494
- // Reset permissions to check for temp files
495
- await fs.chmod(testBaseDir, 0o755);
496
- // No temp files should remain
497
- const contents = await fs.readdir(testBaseDir);
498
- const tempFiles = contents.filter((f) => f.includes('.tmp'));
499
- expect(tempFiles).toHaveLength(0);
500
- });
501
- });
502
- });
503
- //# sourceMappingURL=prompt-installer.test.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"prompt-installer.test.js","sourceRoot":"","sources":["../../../src/prompt-config/prompt-installer.test.ts"],"names":[],"mappings":"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"}
@@ -1,5 +0,0 @@
1
- /**
2
- * Behavioral tests for PromptLoader
3
- * These tests verify actual file I/O, compression, and environment detection behavior
4
- */
5
- export {};