@vybestack/llxprt-code-core 0.1.15 → 0.1.16-hotfix1

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 (358) 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 +36 -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/mcp/oauth-utils.js +12 -4
  81. package/dist/src/mcp/oauth-utils.js.map +1 -1
  82. package/dist/src/parsers/TextToolCallParser.d.ts +1 -0
  83. package/dist/src/parsers/TextToolCallParser.js +45 -3
  84. package/dist/src/parsers/TextToolCallParser.js.map +1 -1
  85. package/dist/src/parsers/TextToolCallParser.multibyte.test.d.ts +1 -0
  86. package/dist/src/parsers/TextToolCallParser.multibyte.test.js +42 -0
  87. package/dist/src/parsers/TextToolCallParser.multibyte.test.js.map +1 -0
  88. package/dist/src/prompt-config/TemplateEngine.d.ts +35 -0
  89. package/dist/src/prompt-config/TemplateEngine.js +149 -0
  90. package/dist/src/prompt-config/TemplateEngine.js.map +1 -0
  91. package/dist/src/prompt-config/TemplateEngine.test.d.ts +1 -0
  92. package/dist/src/prompt-config/TemplateEngine.test.js +494 -0
  93. package/dist/src/prompt-config/TemplateEngine.test.js.map +1 -0
  94. package/dist/src/prompt-config/defaults/compression.md +58 -0
  95. package/dist/src/prompt-config/defaults/core-defaults.d.ts +5 -0
  96. package/dist/src/prompt-config/defaults/core-defaults.js +332 -0
  97. package/dist/src/prompt-config/defaults/core-defaults.js.map +1 -0
  98. package/dist/src/prompt-config/defaults/core.md +267 -0
  99. package/dist/src/prompt-config/defaults/env/git-repository.md +15 -0
  100. package/dist/src/prompt-config/defaults/env/ide-mode.md +3 -0
  101. package/dist/src/prompt-config/defaults/env/macos-seatbelt.md +3 -0
  102. package/dist/src/prompt-config/defaults/env/outside-of-sandbox.md +3 -0
  103. package/dist/src/prompt-config/defaults/env/sandbox.md +3 -0
  104. package/dist/src/prompt-config/defaults/index.d.ts +14 -0
  105. package/dist/src/prompt-config/defaults/index.js +21 -0
  106. package/dist/src/prompt-config/defaults/index.js.map +1 -0
  107. package/dist/src/prompt-config/defaults/provider-defaults.d.ts +5 -0
  108. package/dist/src/prompt-config/defaults/provider-defaults.js +26 -0
  109. package/dist/src/prompt-config/defaults/provider-defaults.js.map +1 -0
  110. package/dist/src/prompt-config/defaults/providers/gemini/models/gemini-2.5-flash/core.md +10 -0
  111. package/dist/src/prompt-config/defaults/service-defaults.d.ts +5 -0
  112. package/dist/src/prompt-config/defaults/service-defaults.js +52 -0
  113. package/dist/src/prompt-config/defaults/service-defaults.js.map +1 -0
  114. package/dist/src/prompt-config/defaults/tool-defaults.d.ts +5 -0
  115. package/dist/src/prompt-config/defaults/tool-defaults.js +81 -0
  116. package/dist/src/prompt-config/defaults/tool-defaults.js.map +1 -0
  117. package/dist/src/prompt-config/defaults/tools/edit.md +2 -0
  118. package/dist/src/prompt-config/defaults/tools/glob.md +2 -0
  119. package/dist/src/prompt-config/defaults/tools/grep.md +2 -0
  120. package/dist/src/prompt-config/defaults/tools/ls.md +1 -0
  121. package/dist/src/prompt-config/defaults/tools/memory.md +1 -0
  122. package/dist/src/prompt-config/defaults/tools/read-file.md +4 -0
  123. package/dist/src/prompt-config/defaults/tools/read-many-files.md +2 -0
  124. package/dist/src/prompt-config/defaults/tools/shell.md +5 -0
  125. package/dist/src/prompt-config/defaults/tools/todo-read.md +3 -0
  126. package/dist/src/prompt-config/defaults/tools/todo-write.md +50 -0
  127. package/dist/src/prompt-config/defaults/tools/web-fetch.md +3 -0
  128. package/dist/src/prompt-config/defaults/tools/web-search.md +3 -0
  129. package/dist/src/prompt-config/defaults/tools/write-file.md +4 -0
  130. package/dist/src/prompt-config/index.d.ts +16 -0
  131. package/dist/src/prompt-config/index.js +11 -0
  132. package/dist/src/prompt-config/index.js.map +1 -0
  133. package/dist/src/prompt-config/prompt-cache.d.ts +72 -0
  134. package/dist/src/prompt-config/prompt-cache.js +271 -0
  135. package/dist/src/prompt-config/prompt-cache.js.map +1 -0
  136. package/dist/src/prompt-config/prompt-cache.test.d.ts +6 -0
  137. package/dist/src/prompt-config/prompt-cache.test.js +437 -0
  138. package/dist/src/prompt-config/prompt-cache.test.js.map +1 -0
  139. package/dist/src/prompt-config/prompt-installer.d.ts +118 -0
  140. package/dist/src/prompt-config/prompt-installer.js +723 -0
  141. package/dist/src/prompt-config/prompt-installer.js.map +1 -0
  142. package/dist/src/prompt-config/prompt-installer.test.d.ts +7 -0
  143. package/dist/src/prompt-config/prompt-installer.test.js +503 -0
  144. package/dist/src/prompt-config/prompt-installer.test.js.map +1 -0
  145. package/dist/src/prompt-config/prompt-loader.d.ts +49 -0
  146. package/dist/src/prompt-config/prompt-loader.js +331 -0
  147. package/dist/src/prompt-config/prompt-loader.js.map +1 -0
  148. package/dist/src/prompt-config/prompt-loader.test.d.ts +5 -0
  149. package/dist/src/prompt-config/prompt-loader.test.js +413 -0
  150. package/dist/src/prompt-config/prompt-loader.test.js.map +1 -0
  151. package/dist/src/prompt-config/prompt-resolver.d.ts +74 -0
  152. package/dist/src/prompt-config/prompt-resolver.js +600 -0
  153. package/dist/src/prompt-config/prompt-resolver.js.map +1 -0
  154. package/dist/src/prompt-config/prompt-resolver.test.d.ts +1 -0
  155. package/dist/src/prompt-config/prompt-resolver.test.js +529 -0
  156. package/dist/src/prompt-config/prompt-resolver.test.js.map +1 -0
  157. package/dist/src/prompt-config/prompt-service.d.ts +108 -0
  158. package/dist/src/prompt-config/prompt-service.js +435 -0
  159. package/dist/src/prompt-config/prompt-service.js.map +1 -0
  160. package/dist/src/prompt-config/prompt-service.test.d.ts +1 -0
  161. package/dist/src/prompt-config/prompt-service.test.js +811 -0
  162. package/dist/src/prompt-config/prompt-service.test.js.map +1 -0
  163. package/dist/src/prompt-config/types.d.ts +30 -0
  164. package/dist/src/prompt-config/types.js +10 -0
  165. package/dist/src/prompt-config/types.js.map +1 -0
  166. package/dist/src/providers/IProvider.d.ts +10 -0
  167. package/dist/src/providers/anthropic/AnthropicProvider.d.ts +14 -1
  168. package/dist/src/providers/anthropic/AnthropicProvider.js +28 -2
  169. package/dist/src/providers/anthropic/AnthropicProvider.js.map +1 -1
  170. package/dist/src/providers/anthropic/AnthropicProvider.modelParams.test.d.ts +1 -0
  171. package/dist/src/providers/anthropic/AnthropicProvider.modelParams.test.js +48 -0
  172. package/dist/src/providers/anthropic/AnthropicProvider.modelParams.test.js.map +1 -0
  173. package/dist/src/providers/anthropic/AnthropicProvider.test.js +2 -1
  174. package/dist/src/providers/anthropic/AnthropicProvider.test.js.map +1 -1
  175. package/dist/src/providers/gemini/GeminiProvider.d.ts +11 -2
  176. package/dist/src/providers/gemini/GeminiProvider.integration.test.js +1 -1
  177. package/dist/src/providers/gemini/GeminiProvider.js +34 -9
  178. package/dist/src/providers/gemini/GeminiProvider.js.map +1 -1
  179. package/dist/src/providers/openai/OpenAIProvider.d.ts +11 -0
  180. package/dist/src/providers/openai/OpenAIProvider.js +100 -31
  181. package/dist/src/providers/openai/OpenAIProvider.js.map +1 -1
  182. package/dist/src/providers/openai/OpenAIProvider.responses.test.js +27 -3
  183. package/dist/src/providers/openai/OpenAIProvider.responses.test.js.map +1 -1
  184. package/dist/src/providers/openai/OpenAIProvider.shouldUseResponses.test.js +2 -1
  185. package/dist/src/providers/openai/OpenAIProvider.shouldUseResponses.test.js.map +1 -1
  186. package/dist/src/providers/openai/OpenAIProvider.stateful.integration.test.js +1 -1
  187. package/dist/src/providers/openai/OpenAIProvider.stateful.integration.test.js.map +1 -1
  188. package/dist/src/providers/openai/OpenAIProvider.test.js +307 -7
  189. package/dist/src/providers/openai/OpenAIProvider.test.js.map +1 -1
  190. package/dist/src/providers/openai/buildResponsesRequest.js +19 -2
  191. package/dist/src/providers/openai/buildResponsesRequest.js.map +1 -1
  192. package/dist/src/providers/test-utils/providerTestConfig.d.ts +21 -0
  193. package/dist/src/providers/test-utils/providerTestConfig.js +23 -0
  194. package/dist/src/providers/test-utils/providerTestConfig.js.map +1 -0
  195. package/dist/src/providers/types/IProviderConfig.d.ts +6 -0
  196. package/dist/src/services/loopDetectionService.d.ts +9 -0
  197. package/dist/src/services/loopDetectionService.js +44 -12
  198. package/dist/src/services/loopDetectionService.js.map +1 -1
  199. package/dist/src/services/shellExecutionService.d.ts +1 -37
  200. package/dist/src/services/shellExecutionService.js +24 -55
  201. package/dist/src/services/shellExecutionService.js.map +1 -1
  202. package/dist/src/{providers/IProviderConfig.js → services/shellExecutionService.multibyte.test.d.ts} +0 -1
  203. package/dist/src/services/shellExecutionService.multibyte.test.js +72 -0
  204. package/dist/src/services/shellExecutionService.multibyte.test.js.map +1 -0
  205. package/dist/src/services/shellExecutionService.test.js +11 -5
  206. package/dist/src/services/shellExecutionService.test.js.map +1 -1
  207. package/dist/src/services/shellExecutionService.windows.multibyte.test.d.ts +6 -0
  208. package/dist/src/services/shellExecutionService.windows.multibyte.test.js +98 -0
  209. package/dist/src/services/shellExecutionService.windows.multibyte.test.js.map +1 -0
  210. package/dist/src/services/shellExecutionService.windows.test.d.ts +6 -0
  211. package/dist/src/services/shellExecutionService.windows.test.js +79 -0
  212. package/dist/src/services/shellExecutionService.windows.test.js.map +1 -0
  213. package/dist/src/telemetry/clearcut-logger/clearcut-logger.d.ts +3 -2
  214. package/dist/src/telemetry/clearcut-logger/clearcut-logger.js +22 -3
  215. package/dist/src/telemetry/clearcut-logger/clearcut-logger.js.map +1 -1
  216. package/dist/src/telemetry/clearcut-logger/event-metadata-key.d.ts +4 -1
  217. package/dist/src/telemetry/clearcut-logger/event-metadata-key.js +12 -0
  218. package/dist/src/telemetry/clearcut-logger/event-metadata-key.js.map +1 -1
  219. package/dist/src/telemetry/constants.d.ts +1 -1
  220. package/dist/src/telemetry/constants.js +1 -1
  221. package/dist/src/telemetry/constants.js.map +1 -1
  222. package/dist/src/telemetry/file-exporters.d.ts +2 -2
  223. package/dist/src/telemetry/file-exporters.js +47 -20
  224. package/dist/src/telemetry/file-exporters.js.map +1 -1
  225. package/dist/src/telemetry/loggers.d.ts +2 -2
  226. package/dist/src/telemetry/loggers.js +13 -6
  227. package/dist/src/telemetry/loggers.js.map +1 -1
  228. package/dist/src/telemetry/loggers.test.circular.js +2 -0
  229. package/dist/src/telemetry/loggers.test.circular.js.map +1 -1
  230. package/dist/src/telemetry/loggers.test.js +8 -3
  231. package/dist/src/telemetry/loggers.test.js.map +1 -1
  232. package/dist/src/telemetry/sdk.d.ts +1 -1
  233. package/dist/src/telemetry/sdk.js +71 -73
  234. package/dist/src/telemetry/sdk.js.map +1 -1
  235. package/dist/src/telemetry/telemetry.test.js +7 -5
  236. package/dist/src/telemetry/telemetry.test.js.map +1 -1
  237. package/dist/src/telemetry/types.d.ts +12 -4
  238. package/dist/src/telemetry/types.js +18 -4
  239. package/dist/src/telemetry/types.js.map +1 -1
  240. package/dist/src/telemetry/uiTelemetry.test.js +3 -0
  241. package/dist/src/telemetry/uiTelemetry.test.js.map +1 -1
  242. package/dist/src/test-utils/mockWorkspaceContext.d.ts +13 -0
  243. package/dist/src/test-utils/mockWorkspaceContext.js +24 -0
  244. package/dist/src/test-utils/mockWorkspaceContext.js.map +1 -0
  245. package/dist/src/tools/edit.js +27 -3
  246. package/dist/src/tools/edit.js.map +1 -1
  247. package/dist/src/tools/edit.test.js +104 -1
  248. package/dist/src/tools/edit.test.js.map +1 -1
  249. package/dist/src/tools/glob.js +53 -17
  250. package/dist/src/tools/glob.js.map +1 -1
  251. package/dist/src/tools/glob.test.js +25 -2
  252. package/dist/src/tools/glob.test.js.map +1 -1
  253. package/dist/src/tools/grep.d.ts +1 -1
  254. package/dist/src/tools/grep.js +81 -29
  255. package/dist/src/tools/grep.js.map +1 -1
  256. package/dist/src/tools/grep.test.js +72 -5
  257. package/dist/src/tools/grep.test.js.map +1 -1
  258. package/dist/src/tools/ls.js +4 -3
  259. package/dist/src/tools/ls.js.map +1 -1
  260. package/dist/src/tools/ls.test.d.ts +6 -0
  261. package/dist/src/tools/ls.test.js +356 -0
  262. package/dist/src/tools/ls.test.js.map +1 -0
  263. package/dist/src/tools/mcp-client.js +32 -11
  264. package/dist/src/tools/mcp-client.js.map +1 -1
  265. package/dist/src/tools/mcp-client.test.js +34 -0
  266. package/dist/src/tools/mcp-client.test.js.map +1 -1
  267. package/dist/src/tools/memoryTool.d.ts +17 -2
  268. package/dist/src/tools/memoryTool.js +130 -13
  269. package/dist/src/tools/memoryTool.js.map +1 -1
  270. package/dist/src/tools/memoryTool.test.js +88 -3
  271. package/dist/src/tools/memoryTool.test.js.map +1 -1
  272. package/dist/src/tools/read-file.js +8 -6
  273. package/dist/src/tools/read-file.js.map +1 -1
  274. package/dist/src/tools/read-file.test.js +30 -2
  275. package/dist/src/tools/read-file.test.js.map +1 -1
  276. package/dist/src/tools/read-many-files.js +22 -12
  277. package/dist/src/tools/read-many-files.js.map +1 -1
  278. package/dist/src/tools/read-many-files.test.js +35 -2
  279. package/dist/src/tools/read-many-files.test.js.map +1 -1
  280. package/dist/src/tools/shell.js +16 -0
  281. package/dist/src/tools/shell.js.map +1 -1
  282. package/dist/src/tools/shell.multibyte.test.d.ts +6 -0
  283. package/dist/src/tools/shell.multibyte.test.js +74 -0
  284. package/dist/src/tools/shell.multibyte.test.js.map +1 -0
  285. package/dist/src/tools/shell.test.js +33 -1
  286. package/dist/src/tools/shell.test.js.map +1 -1
  287. package/dist/src/tools/tool-error.d.ts +22 -0
  288. package/dist/src/tools/tool-error.js +27 -0
  289. package/dist/src/tools/tool-error.js.map +1 -0
  290. package/dist/src/tools/tool-registry.test.js +8 -0
  291. package/dist/src/tools/tool-registry.test.js.map +1 -1
  292. package/dist/src/tools/tools.d.ts +8 -0
  293. package/dist/src/tools/tools.js.map +1 -1
  294. package/dist/src/tools/write-file.js +5 -3
  295. package/dist/src/tools/write-file.js.map +1 -1
  296. package/dist/src/tools/write-file.test.js +36 -2
  297. package/dist/src/tools/write-file.test.js.map +1 -1
  298. package/dist/src/types/modelParams.d.ts +62 -0
  299. package/dist/src/types/modelParams.js +7 -0
  300. package/dist/src/types/modelParams.js.map +1 -0
  301. package/dist/src/utils/bfsFileSearch.test.js +4 -2
  302. package/dist/src/utils/bfsFileSearch.test.js.map +1 -1
  303. package/dist/src/utils/editCorrector.js +2 -2
  304. package/dist/src/utils/editCorrector.js.map +1 -1
  305. package/dist/src/utils/editor.d.ts +1 -1
  306. package/dist/src/utils/editor.js +9 -0
  307. package/dist/src/utils/editor.js.map +1 -1
  308. package/dist/src/utils/editor.test.js +21 -1
  309. package/dist/src/utils/editor.test.js.map +1 -1
  310. package/dist/src/utils/fileUtils.js +12 -1
  311. package/dist/src/utils/fileUtils.js.map +1 -1
  312. package/dist/src/utils/fileUtils.test.js +29 -1
  313. package/dist/src/utils/fileUtils.test.js.map +1 -1
  314. package/dist/src/utils/flashFallback.integration.test.js +8 -0
  315. package/dist/src/utils/flashFallback.integration.test.js.map +1 -1
  316. package/dist/src/utils/memoryDiscovery.d.ts +1 -1
  317. package/dist/src/utils/memoryDiscovery.js +61 -73
  318. package/dist/src/utils/memoryDiscovery.js.map +1 -1
  319. package/dist/src/utils/memoryDiscovery.test.js +4 -3
  320. package/dist/src/utils/memoryDiscovery.test.js.map +1 -1
  321. package/dist/src/utils/memoryImportProcessor.d.ts +19 -12
  322. package/dist/src/utils/memoryImportProcessor.js +241 -82
  323. package/dist/src/utils/memoryImportProcessor.js.map +1 -1
  324. package/dist/src/utils/memoryImportProcessor.test.js +595 -50
  325. package/dist/src/utils/memoryImportProcessor.test.js.map +1 -1
  326. package/dist/src/utils/nextSpeakerChecker.js +10 -25
  327. package/dist/src/utils/nextSpeakerChecker.js.map +1 -1
  328. package/dist/src/utils/nextSpeakerChecker.test.js +6 -2
  329. package/dist/src/utils/nextSpeakerChecker.test.js.map +1 -1
  330. package/dist/src/utils/sanitization.d.ts +20 -0
  331. package/dist/src/utils/sanitization.js +66 -0
  332. package/dist/src/utils/sanitization.js.map +1 -0
  333. package/dist/src/utils/sanitization.test.d.ts +6 -0
  334. package/dist/src/utils/sanitization.test.js +81 -0
  335. package/dist/src/utils/sanitization.test.js.map +1 -0
  336. package/dist/src/utils/secure-browser-launcher.d.ts +23 -0
  337. package/dist/src/utils/secure-browser-launcher.js +164 -0
  338. package/dist/src/utils/secure-browser-launcher.js.map +1 -0
  339. package/dist/src/utils/secure-browser-launcher.test.d.ts +6 -0
  340. package/dist/src/utils/secure-browser-launcher.test.js +149 -0
  341. package/dist/src/utils/secure-browser-launcher.test.js.map +1 -0
  342. package/dist/src/utils/summarizer.js +2 -2
  343. package/dist/src/utils/summarizer.js.map +1 -1
  344. package/dist/src/utils/unicodeUtils.d.ts +44 -0
  345. package/dist/src/utils/unicodeUtils.js +93 -0
  346. package/dist/src/utils/unicodeUtils.js.map +1 -0
  347. package/dist/src/utils/unicodeUtils.test.d.ts +6 -0
  348. package/dist/src/utils/unicodeUtils.test.js +120 -0
  349. package/dist/src/utils/unicodeUtils.test.js.map +1 -0
  350. package/dist/src/utils/workspaceContext.d.ts +47 -0
  351. package/dist/src/utils/workspaceContext.js +106 -0
  352. package/dist/src/utils/workspaceContext.js.map +1 -0
  353. package/dist/src/utils/workspaceContext.test.d.ts +6 -0
  354. package/dist/src/utils/workspaceContext.test.js +209 -0
  355. package/dist/src/utils/workspaceContext.test.js.map +1 -0
  356. package/package.json +2 -1
  357. package/dist/src/providers/IProviderConfig.d.ts +0 -31
  358. package/dist/src/providers/IProviderConfig.js.map +0 -1
@@ -0,0 +1,529 @@
1
+ import { describe, it, expect, beforeEach, afterEach } from 'vitest';
2
+ import * as fs from 'node:fs/promises';
3
+ import * as path from 'node:path';
4
+ import * as os from 'node:os';
5
+ import { PromptResolver } from './prompt-resolver.js';
6
+ // Helper to check if we're on Windows
7
+ const isWindows = () => os.platform() === 'win32';
8
+ describe('PromptResolver', () => {
9
+ let tempDir;
10
+ let resolver;
11
+ beforeEach(async () => {
12
+ // Create a temporary directory for testing
13
+ tempDir = await fs.mkdtemp(path.join(os.tmpdir(), 'prompt-resolver-test-'));
14
+ resolver = new PromptResolver();
15
+ });
16
+ afterEach(async () => {
17
+ // Clean up temporary directory
18
+ await fs.rm(tempDir, { recursive: true, force: true });
19
+ });
20
+ describe('resolveFile', () => {
21
+ it('should return not found when file does not exist', () => {
22
+ const context = {
23
+ provider: 'openai',
24
+ model: 'gpt-4',
25
+ };
26
+ const result = resolver.resolveFile(tempDir, 'core.md', context);
27
+ expect(result.found).toBe(false);
28
+ expect(result.path).toBeNull();
29
+ expect(result.source).toBeNull();
30
+ });
31
+ it('should find file at base level when no provider/model specified', async () => {
32
+ // Create test file structure
33
+ await fs.writeFile(path.join(tempDir, 'core.md'), 'base content');
34
+ const context = {};
35
+ const result = resolver.resolveFile(tempDir, 'core.md', context);
36
+ expect(result.found).toBe(true);
37
+ expect(result.path).toBe(path.join(tempDir, 'core.md'));
38
+ expect(result.source).toBe('base');
39
+ });
40
+ it('should find provider-specific file over base file', async () => {
41
+ // Create test file structure
42
+ await fs.writeFile(path.join(tempDir, 'core.md'), 'base content');
43
+ await fs.mkdir(path.join(tempDir, 'providers'), { recursive: true });
44
+ await fs.mkdir(path.join(tempDir, 'providers', 'openai'), {
45
+ recursive: true,
46
+ });
47
+ await fs.writeFile(path.join(tempDir, 'providers', 'openai', 'core.md'), 'provider content');
48
+ const context = {
49
+ provider: 'openai',
50
+ };
51
+ const result = resolver.resolveFile(tempDir, 'core.md', context);
52
+ expect(result.found).toBe(true);
53
+ expect(result.path).toBe(path.join(tempDir, 'providers', 'openai', 'core.md'));
54
+ expect(result.source).toBe('provider');
55
+ });
56
+ it('should find model-specific file over provider and base files', async () => {
57
+ // Create test file structure
58
+ await fs.writeFile(path.join(tempDir, 'core.md'), 'base content');
59
+ await fs.mkdir(path.join(tempDir, 'providers', 'openai', 'models', 'gpt-4'), { recursive: true });
60
+ await fs.writeFile(path.join(tempDir, 'providers', 'openai', 'core.md'), 'provider content');
61
+ await fs.writeFile(path.join(tempDir, 'providers', 'openai', 'models', 'gpt-4', 'core.md'), 'model content');
62
+ const context = {
63
+ provider: 'openai',
64
+ model: 'gpt-4',
65
+ };
66
+ const result = resolver.resolveFile(tempDir, 'core.md', context);
67
+ expect(result.found).toBe(true);
68
+ expect(result.path).toBe(path.join(tempDir, 'providers', 'openai', 'models', 'gpt-4', 'core.md'));
69
+ expect(result.source).toBe('model');
70
+ });
71
+ it('should handle nested relative paths correctly', async () => {
72
+ // Create test file structure
73
+ await fs.mkdir(path.join(tempDir, 'tools'), { recursive: true });
74
+ await fs.writeFile(path.join(tempDir, 'tools', 'read-file.md'), 'base tool content');
75
+ const context = {};
76
+ const result = resolver.resolveFile(tempDir, 'tools/read-file.md', context);
77
+ expect(result.found).toBe(true);
78
+ expect(result.path).toBe(path.join(tempDir, 'tools', 'read-file.md'));
79
+ expect(result.source).toBe('base');
80
+ });
81
+ it('should reject paths with directory traversal attempts', () => {
82
+ const context = {};
83
+ const result = resolver.resolveFile(tempDir, '../../../etc/passwd', context);
84
+ expect(result.found).toBe(false);
85
+ expect(result.path).toBeNull();
86
+ expect(result.source).toBeNull();
87
+ });
88
+ it('should handle provider names with special characters', async () => {
89
+ // Create test file structure with sanitized provider name
90
+ await fs.mkdir(path.join(tempDir, 'providers', 'anthropic-claude'), {
91
+ recursive: true,
92
+ });
93
+ await fs.writeFile(path.join(tempDir, 'providers', 'anthropic-claude', 'core.md'), 'provider content');
94
+ const context = {
95
+ provider: 'anthropic/claude',
96
+ };
97
+ const result = resolver.resolveFile(tempDir, 'core.md', context);
98
+ expect(result.found).toBe(true);
99
+ expect(result.path).toBe(path.join(tempDir, 'providers', 'anthropic-claude', 'core.md'));
100
+ expect(result.source).toBe('provider');
101
+ });
102
+ it('should handle very long model names by truncating', async () => {
103
+ const longModelName = 'a'.repeat(300);
104
+ const truncatedModelName = 'a'.repeat(255);
105
+ // Create test file structure with truncated model name
106
+ await fs.mkdir(path.join(tempDir, 'providers', 'openai', 'models', truncatedModelName), { recursive: true });
107
+ await fs.writeFile(path.join(tempDir, 'providers', 'openai', 'models', truncatedModelName, 'core.md'), 'model content');
108
+ const context = {
109
+ provider: 'openai',
110
+ model: longModelName,
111
+ };
112
+ const result = resolver.resolveFile(tempDir, 'core.md', context);
113
+ expect(result.found).toBe(true);
114
+ expect(result.path).toBe(path.join(tempDir, 'providers', 'openai', 'models', truncatedModelName, 'core.md'));
115
+ expect(result.source).toBe('model');
116
+ });
117
+ it('should handle case insensitive provider names', async () => {
118
+ // Create test file structure with lowercase provider name
119
+ await fs.mkdir(path.join(tempDir, 'providers', 'openai'), {
120
+ recursive: true,
121
+ });
122
+ await fs.writeFile(path.join(tempDir, 'providers', 'openai', 'core.md'), 'provider content');
123
+ const context = {
124
+ provider: 'OpenAI',
125
+ };
126
+ const result = resolver.resolveFile(tempDir, 'core.md', context);
127
+ expect(result.found).toBe(true);
128
+ expect(result.path).toBe(path.join(tempDir, 'providers', 'openai', 'core.md'));
129
+ expect(result.source).toBe('provider');
130
+ });
131
+ it('should return not found for non-existent base directory', () => {
132
+ const context = {};
133
+ const result = resolver.resolveFile('/non/existent/path', 'core.md', context);
134
+ expect(result.found).toBe(false);
135
+ expect(result.path).toBeNull();
136
+ expect(result.source).toBeNull();
137
+ });
138
+ it('should return not found for empty relative path', () => {
139
+ const context = {};
140
+ const result = resolver.resolveFile(tempDir, '', context);
141
+ expect(result.found).toBe(false);
142
+ expect(result.path).toBeNull();
143
+ expect(result.source).toBeNull();
144
+ });
145
+ it('should handle null context gracefully', async () => {
146
+ await fs.writeFile(path.join(tempDir, 'core.md'), 'base content');
147
+ const result = resolver.resolveFile(tempDir, 'core.md', null);
148
+ expect(result.found).toBe(true);
149
+ expect(result.path).toBe(path.join(tempDir, 'core.md'));
150
+ expect(result.source).toBe('base');
151
+ });
152
+ });
153
+ describe('resolveAllFiles', () => {
154
+ it('should return empty array when no files exist', () => {
155
+ const context = {
156
+ provider: 'openai',
157
+ model: 'gpt-4',
158
+ enabledTools: ['ReadFile', 'WriteFile'],
159
+ environment: {
160
+ isGitRepository: true,
161
+ isSandboxed: false,
162
+ hasIdeCompanion: false,
163
+ },
164
+ };
165
+ const result = resolver.resolveAllFiles(tempDir, context);
166
+ expect(result).toEqual([]);
167
+ });
168
+ it('should resolve core.md file', async () => {
169
+ await fs.writeFile(path.join(tempDir, 'core.md'), 'core content');
170
+ const context = {
171
+ provider: 'openai',
172
+ model: 'gpt-4',
173
+ enabledTools: [],
174
+ environment: {
175
+ isGitRepository: false,
176
+ isSandboxed: false,
177
+ hasIdeCompanion: false,
178
+ },
179
+ };
180
+ const result = resolver.resolveAllFiles(tempDir, context);
181
+ expect(result).toHaveLength(1);
182
+ expect(result[0].type).toBe('core');
183
+ expect(result[0].path).toBe(path.join(tempDir, 'core.md'));
184
+ expect(result[0].source).toBe('base');
185
+ });
186
+ it('should resolve environment prompts based on context', async () => {
187
+ // Create environment prompt files
188
+ await fs.mkdir(path.join(tempDir, 'env'), { recursive: true });
189
+ await fs.writeFile(path.join(tempDir, 'env', 'git-repository.md'), 'git content');
190
+ await fs.writeFile(path.join(tempDir, 'env', 'sandbox.md'), 'sandbox content');
191
+ await fs.writeFile(path.join(tempDir, 'env', 'ide-mode.md'), 'ide content');
192
+ const context = {
193
+ provider: 'openai',
194
+ model: 'gpt-4',
195
+ enabledTools: [],
196
+ environment: {
197
+ isGitRepository: true,
198
+ isSandboxed: true,
199
+ hasIdeCompanion: true,
200
+ },
201
+ };
202
+ const result = resolver.resolveAllFiles(tempDir, context);
203
+ expect(result).toHaveLength(3);
204
+ expect(result.map((f) => f.path)).toContain(path.join(tempDir, 'env', 'git-repository.md'));
205
+ expect(result.map((f) => f.path)).toContain(path.join(tempDir, 'env', 'sandbox.md'));
206
+ expect(result.map((f) => f.path)).toContain(path.join(tempDir, 'env', 'ide-mode.md'));
207
+ });
208
+ it('should resolve tool prompts with kebab-case conversion', async () => {
209
+ // Create tool prompt files
210
+ await fs.mkdir(path.join(tempDir, 'tools'), { recursive: true });
211
+ await fs.writeFile(path.join(tempDir, 'tools', 'read-file.md'), 'read file content');
212
+ await fs.writeFile(path.join(tempDir, 'tools', 'write-file.md'), 'write file content');
213
+ const context = {
214
+ provider: 'openai',
215
+ model: 'gpt-4',
216
+ enabledTools: ['ReadFile', 'WriteFile'],
217
+ environment: {
218
+ isGitRepository: false,
219
+ isSandboxed: false,
220
+ hasIdeCompanion: false,
221
+ },
222
+ };
223
+ const result = resolver.resolveAllFiles(tempDir, context);
224
+ expect(result).toHaveLength(2);
225
+ const toolPaths = result
226
+ .filter((f) => f.type === 'tool')
227
+ .map((f) => f.path);
228
+ expect(toolPaths).toContain(path.join(tempDir, 'tools', 'read-file.md'));
229
+ expect(toolPaths).toContain(path.join(tempDir, 'tools', 'write-file.md'));
230
+ });
231
+ it('should use hierarchical resolution for all file types', async () => {
232
+ // Create base and provider-specific files
233
+ await fs.mkdir(path.join(tempDir, 'tools'), { recursive: true });
234
+ await fs.mkdir(path.join(tempDir, 'providers', 'openai', 'tools'), {
235
+ recursive: true,
236
+ });
237
+ await fs.writeFile(path.join(tempDir, 'core.md'), 'base core');
238
+ await fs.writeFile(path.join(tempDir, 'providers', 'openai', 'core.md'), 'provider core');
239
+ await fs.writeFile(path.join(tempDir, 'tools', 'read-file.md'), 'base tool');
240
+ await fs.writeFile(path.join(tempDir, 'providers', 'openai', 'tools', 'read-file.md'), 'provider tool');
241
+ const context = {
242
+ provider: 'openai',
243
+ model: 'gpt-4',
244
+ enabledTools: ['ReadFile'],
245
+ environment: {
246
+ isGitRepository: false,
247
+ isSandboxed: false,
248
+ hasIdeCompanion: false,
249
+ },
250
+ };
251
+ const result = resolver.resolveAllFiles(tempDir, context);
252
+ expect(result).toHaveLength(2); // core.md and read-file.md
253
+ expect(result[0].type).toBe('core');
254
+ expect(result[0].path).toBe(path.join(tempDir, 'providers', 'openai', 'core.md'));
255
+ expect(result[0].source).toBe('provider');
256
+ expect(result[1].type).toBe('tool');
257
+ expect(result[1].path).toBe(path.join(tempDir, 'providers', 'openai', 'tools', 'read-file.md'));
258
+ expect(result[1].source).toBe('provider');
259
+ });
260
+ it('should handle missing tool prompts gracefully', async () => {
261
+ // Only create core.md, no tool files
262
+ await fs.writeFile(path.join(tempDir, 'core.md'), 'core content');
263
+ const context = {
264
+ provider: 'openai',
265
+ model: 'gpt-4',
266
+ enabledTools: ['NonExistentTool'],
267
+ environment: {
268
+ isGitRepository: false,
269
+ isSandboxed: false,
270
+ hasIdeCompanion: false,
271
+ },
272
+ };
273
+ const result = resolver.resolveAllFiles(tempDir, context);
274
+ expect(result).toHaveLength(1); // Only core.md
275
+ expect(result[0].type).toBe('core');
276
+ expect(result[0].path).toBe(path.join(tempDir, 'core.md'));
277
+ });
278
+ it('should handle null inputs gracefully', () => {
279
+ const result = resolver.resolveAllFiles(null, null);
280
+ expect(result).toEqual([]);
281
+ });
282
+ });
283
+ describe('sanitizePathComponent', () => {
284
+ it('should return component unchanged if already valid', () => {
285
+ expect(resolver.sanitizePathComponent('openai')).toBe('openai');
286
+ });
287
+ it('should convert to lowercase', () => {
288
+ expect(resolver.sanitizePathComponent('OpenAI')).toBe('openai');
289
+ });
290
+ it('should replace special characters with hyphens', () => {
291
+ expect(resolver.sanitizePathComponent('anthropic/claude')).toBe('anthropic-claude');
292
+ });
293
+ it('should collapse multiple special characters to single hyphen', () => {
294
+ expect(resolver.sanitizePathComponent('model@#$%name')).toBe('model-name');
295
+ });
296
+ it('should remove leading and trailing hyphens', () => {
297
+ expect(resolver.sanitizePathComponent('-leading-trailing-')).toBe('leading-trailing');
298
+ });
299
+ it('should truncate to 255 characters', () => {
300
+ const longName = 'a'.repeat(300);
301
+ expect(resolver.sanitizePathComponent(longName)).toBe('a'.repeat(255));
302
+ });
303
+ it('should handle reserved names', () => {
304
+ expect(resolver.sanitizePathComponent('con')).toBe('reserved-con');
305
+ expect(resolver.sanitizePathComponent('prn')).toBe('reserved-prn');
306
+ expect(resolver.sanitizePathComponent('aux')).toBe('reserved-aux');
307
+ expect(resolver.sanitizePathComponent('nul')).toBe('reserved-nul');
308
+ expect(resolver.sanitizePathComponent('.')).toBe('reserved-.');
309
+ expect(resolver.sanitizePathComponent('..')).toBe('reserved-..');
310
+ });
311
+ it('should return "unknown" for empty result after sanitization', () => {
312
+ expect(resolver.sanitizePathComponent('!!!')).toBe('unknown');
313
+ });
314
+ it('should handle null and empty inputs', () => {
315
+ expect(resolver.sanitizePathComponent(null)).toBe('');
316
+ expect(resolver.sanitizePathComponent('')).toBe('');
317
+ });
318
+ });
319
+ describe('convertToKebabCase', () => {
320
+ it('should convert PascalCase to kebab-case', () => {
321
+ expect(resolver.convertToKebabCase('ReadFile')).toBe('read-file');
322
+ });
323
+ it('should convert PascalCase variants to kebab-case', () => {
324
+ expect(resolver.convertToKebabCase('ReadFile')).toBe('read-file');
325
+ expect(resolver.convertToKebabCase('WriteFile')).toBe('write-file');
326
+ expect(resolver.convertToKebabCase('TodoWrite')).toBe('todo-write');
327
+ });
328
+ it('should convert camelCase to kebab-case', () => {
329
+ expect(resolver.convertToKebabCase('readFile')).toBe('read-file');
330
+ expect(resolver.convertToKebabCase('parseJSON')).toBe('parse-json');
331
+ });
332
+ it('should handle all uppercase specially', () => {
333
+ expect(resolver.convertToKebabCase('HTTP')).toBe('http');
334
+ expect(resolver.convertToKebabCase('API')).toBe('api');
335
+ });
336
+ it('should handle mixed case with acronyms', () => {
337
+ expect(resolver.convertToKebabCase('HTTPRequest')).toBe('http-request');
338
+ expect(resolver.convertToKebabCase('XMLParser')).toBe('xml-parser');
339
+ });
340
+ it('should handle single letter words', () => {
341
+ expect(resolver.convertToKebabCase('S3')).toBe('s-3');
342
+ expect(resolver.convertToKebabCase('io')).toBe('io');
343
+ });
344
+ it('should handle numbers in names', () => {
345
+ expect(resolver.convertToKebabCase('Base64Encode')).toBe('base-64-encode');
346
+ expect(resolver.convertToKebabCase('SHA256')).toBe('sha-256');
347
+ });
348
+ it('should skip non-alphanumeric characters', () => {
349
+ expect(resolver.convertToKebabCase('Read_File')).toBe('read-file');
350
+ expect(resolver.convertToKebabCase('Read.File')).toBe('read-file');
351
+ });
352
+ it('should clean up multiple consecutive hyphens', () => {
353
+ expect(resolver.convertToKebabCase('Read__File')).toBe('read-file');
354
+ });
355
+ it('should handle null and empty inputs', () => {
356
+ expect(resolver.convertToKebabCase(null)).toBe('');
357
+ expect(resolver.convertToKebabCase('')).toBe('');
358
+ });
359
+ });
360
+ describe('listAvailableFiles', () => {
361
+ it('should return empty array for empty directory', () => {
362
+ const result = resolver.listAvailableFiles(tempDir, 'all');
363
+ expect(result).toEqual([]);
364
+ });
365
+ it('should list all files when type is "all"', async () => {
366
+ // Create test file structure
367
+ await fs.writeFile(path.join(tempDir, 'core.md'), 'core content');
368
+ await fs.mkdir(path.join(tempDir, 'env'), { recursive: true });
369
+ await fs.writeFile(path.join(tempDir, 'env', 'git-repository.md'), 'git content');
370
+ await fs.mkdir(path.join(tempDir, 'tools'), { recursive: true });
371
+ await fs.writeFile(path.join(tempDir, 'tools', 'read-file.md'), 'tool content');
372
+ const result = resolver.listAvailableFiles(tempDir, 'all');
373
+ expect(result).toHaveLength(3);
374
+ expect(result.map((f) => f.path)).toContain('core.md');
375
+ expect(result.map((f) => f.path)).toContain('env/git-repository.md');
376
+ expect(result.map((f) => f.path)).toContain('tools/read-file.md');
377
+ });
378
+ it('should filter by file type', async () => {
379
+ // Create test file structure
380
+ await fs.writeFile(path.join(tempDir, 'core.md'), 'core content');
381
+ await fs.mkdir(path.join(tempDir, 'env'), { recursive: true });
382
+ await fs.writeFile(path.join(tempDir, 'env', 'git-repository.md'), 'git content');
383
+ await fs.mkdir(path.join(tempDir, 'tools'), { recursive: true });
384
+ await fs.writeFile(path.join(tempDir, 'tools', 'read-file.md'), 'tool content');
385
+ const coreResult = resolver.listAvailableFiles(tempDir, 'core');
386
+ expect(coreResult).toHaveLength(1);
387
+ expect(coreResult[0].path).toBe('core.md');
388
+ const envResult = resolver.listAvailableFiles(tempDir, 'env');
389
+ expect(envResult).toHaveLength(1);
390
+ expect(envResult[0].path).toBe('env/git-repository.md');
391
+ const toolResult = resolver.listAvailableFiles(tempDir, 'tool');
392
+ expect(toolResult).toHaveLength(1);
393
+ expect(toolResult[0].path).toBe('tools/read-file.md');
394
+ });
395
+ it('should include provider overrides', async () => {
396
+ // Create test file structure with provider overrides
397
+ await fs.writeFile(path.join(tempDir, 'core.md'), 'base core');
398
+ await fs.mkdir(path.join(tempDir, 'providers', 'openai'), {
399
+ recursive: true,
400
+ });
401
+ await fs.writeFile(path.join(tempDir, 'providers', 'openai', 'core.md'), 'provider core');
402
+ const result = resolver.listAvailableFiles(tempDir, 'all');
403
+ expect(result).toHaveLength(2);
404
+ expect(result.find((f) => f.path === 'core.md' && f.source === 'base')).toBeTruthy();
405
+ expect(result.find((f) => f.path === 'providers/openai/core.md' && f.source === 'provider')).toBeTruthy();
406
+ });
407
+ it('should handle invalid file type by defaulting to "all"', async () => {
408
+ await fs.writeFile(path.join(tempDir, 'core.md'), 'core content');
409
+ const result = resolver.listAvailableFiles(tempDir, 'invalid');
410
+ expect(result).toHaveLength(1);
411
+ expect(result[0].path).toBe('core.md');
412
+ });
413
+ it('should skip non-markdown files', async () => {
414
+ await fs.writeFile(path.join(tempDir, 'core.md'), 'core content');
415
+ await fs.writeFile(path.join(tempDir, 'readme.txt'), 'text content');
416
+ await fs.mkdir(path.join(tempDir, 'tools'), { recursive: true });
417
+ await fs.writeFile(path.join(tempDir, 'tools', 'config.json'), 'json content');
418
+ const result = resolver.listAvailableFiles(tempDir, 'all');
419
+ expect(result).toHaveLength(1);
420
+ expect(result[0].path).toBe('core.md');
421
+ expect(result.find((f) => f.path.includes('readme.txt'))).toBeUndefined();
422
+ expect(result.find((f) => f.path.includes('config.json'))).toBeUndefined();
423
+ });
424
+ it('should handle non-existent base directory', () => {
425
+ const result = resolver.listAvailableFiles('/non/existent/path', 'all');
426
+ expect(result).toEqual([]);
427
+ });
428
+ it('should handle permission errors gracefully', async () => {
429
+ // Create a directory with restricted permissions
430
+ const restrictedDir = path.join(tempDir, 'restricted');
431
+ await fs.mkdir(restrictedDir, { mode: 0o000 });
432
+ const result = resolver.listAvailableFiles(tempDir, 'all');
433
+ // Should still return results from accessible directories
434
+ expect(result).toBeDefined();
435
+ expect(Array.isArray(result)).toBe(true);
436
+ // Cleanup
437
+ await fs.chmod(restrictedDir, 0o755);
438
+ });
439
+ });
440
+ describe('validateFileStructure', () => {
441
+ it('should report missing core.md as error', () => {
442
+ const result = resolver.validateFileStructure(tempDir);
443
+ expect(result.isValid).toBe(false);
444
+ expect(result.errors).toContain('Missing required core.md file');
445
+ });
446
+ it('should validate a correct file structure', async () => {
447
+ // Create valid file structure
448
+ await fs.writeFile(path.join(tempDir, 'core.md'), 'core content');
449
+ await fs.mkdir(path.join(tempDir, 'env'), { recursive: true });
450
+ await fs.mkdir(path.join(tempDir, 'tools'), { recursive: true });
451
+ const result = resolver.validateFileStructure(tempDir);
452
+ expect(result.isValid).toBe(true);
453
+ expect(result.errors).toHaveLength(0);
454
+ expect(result.warnings).toHaveLength(0);
455
+ });
456
+ it('should report error for missing base directory', () => {
457
+ const result = resolver.validateFileStructure('/non/existent/path');
458
+ expect(result.isValid).toBe(false);
459
+ expect(result.errors).toContain('Base directory does not exist');
460
+ });
461
+ it('should report error when base path is not a directory', async () => {
462
+ const filePath = path.join(tempDir, 'not-a-directory');
463
+ await fs.writeFile(filePath, 'file content');
464
+ const result = resolver.validateFileStructure(filePath);
465
+ expect(result.isValid).toBe(false);
466
+ expect(result.errors).toContain('Base path is not a directory');
467
+ });
468
+ it('should report error for missing core.md', async () => {
469
+ await fs.mkdir(path.join(tempDir, 'env'), { recursive: true });
470
+ await fs.mkdir(path.join(tempDir, 'tools'), { recursive: true });
471
+ const result = resolver.validateFileStructure(tempDir);
472
+ expect(result.isValid).toBe(false);
473
+ expect(result.errors).toContain('Missing required core.md file');
474
+ });
475
+ it('should report warnings for missing directories', async () => {
476
+ await fs.writeFile(path.join(tempDir, 'core.md'), 'core content');
477
+ // Don't create env or tools directories
478
+ const result = resolver.validateFileStructure(tempDir);
479
+ expect(result.isValid).toBe(true);
480
+ expect(result.errors).toHaveLength(0);
481
+ expect(result.warnings).toContain('Missing directory: env');
482
+ expect(result.warnings).toContain('Missing directory: tools');
483
+ });
484
+ it('should report warnings for non-markdown files', async () => {
485
+ await fs.writeFile(path.join(tempDir, 'core.md'), 'core content');
486
+ await fs.writeFile(path.join(tempDir, 'readme.txt'), 'text content');
487
+ await fs.mkdir(path.join(tempDir, 'tools'), { recursive: true });
488
+ await fs.writeFile(path.join(tempDir, 'tools', 'config.json'), 'json content');
489
+ const result = resolver.validateFileStructure(tempDir);
490
+ expect(result.isValid).toBe(true);
491
+ expect(result.warnings.some((w) => w.includes('Non-markdown file found'))).toBe(true);
492
+ expect(result.warnings.some((w) => w.includes('readme.txt'))).toBe(true);
493
+ expect(result.warnings.some((w) => w.includes('config.json'))).toBe(true);
494
+ });
495
+ it('should report warnings for large files', async () => {
496
+ await fs.writeFile(path.join(tempDir, 'core.md'), 'core content');
497
+ // Create a large file (>10MB)
498
+ const largeContent = 'x'.repeat(11 * 1024 * 1024);
499
+ await fs.mkdir(path.join(tempDir, 'tools'), { recursive: true });
500
+ await fs.writeFile(path.join(tempDir, 'tools', 'large.md'), largeContent);
501
+ const result = resolver.validateFileStructure(tempDir);
502
+ expect(result.isValid).toBe(true);
503
+ expect(result.warnings.some((w) => w.includes('Large file found') && w.includes('large.md'))).toBe(true);
504
+ });
505
+ it('should report warnings for invalid filenames', async () => {
506
+ await fs.writeFile(path.join(tempDir, 'core.md'), 'core content');
507
+ await fs.mkdir(path.join(tempDir, 'tools'), { recursive: true });
508
+ await fs.writeFile(path.join(tempDir, 'tools', 'file@#$.md'), 'content');
509
+ const result = resolver.validateFileStructure(tempDir);
510
+ expect(result.isValid).toBe(true);
511
+ expect(result.warnings.some((w) => w.includes('Invalid filename') && w.includes('file@#$.md'))).toBe(true);
512
+ });
513
+ it('should check read permissions on core.md', async () => {
514
+ // Skip permission tests on Windows
515
+ if (isWindows()) {
516
+ expect(true).toBe(true); // Placeholder assertion
517
+ return;
518
+ }
519
+ await fs.writeFile(path.join(tempDir, 'core.md'), 'core content');
520
+ await fs.chmod(path.join(tempDir, 'core.md'), 0o000);
521
+ const result = resolver.validateFileStructure(tempDir);
522
+ expect(result.isValid).toBe(false);
523
+ expect(result.errors).toContain('Cannot read core.md - check permissions');
524
+ // Cleanup
525
+ await fs.chmod(path.join(tempDir, 'core.md'), 0o644);
526
+ });
527
+ });
528
+ });
529
+ //# sourceMappingURL=prompt-resolver.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"prompt-resolver.test.js","sourceRoot":"","sources":["../../../src/prompt-config/prompt-resolver.test.ts"],"names":[],"mappings":"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"}