@vybestack/llxprt-code-core 0.1.15 → 0.1.16

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (354) hide show
  1. package/README.md +37 -2
  2. package/dist/src/code_assist/converter.d.ts +2 -1
  3. package/dist/src/code_assist/converter.js +2 -1
  4. package/dist/src/code_assist/converter.js.map +1 -1
  5. package/dist/src/code_assist/converter.test.js +13 -10
  6. package/dist/src/code_assist/converter.test.js.map +1 -1
  7. package/dist/src/code_assist/server.d.ts +2 -2
  8. package/dist/src/code_assist/server.js +4 -4
  9. package/dist/src/code_assist/server.js.map +1 -1
  10. package/dist/src/code_assist/server.test.js +9 -9
  11. package/dist/src/code_assist/server.test.js.map +1 -1
  12. package/dist/src/code_assist/setup.js +1 -1
  13. package/dist/src/code_assist/setup.js.map +1 -1
  14. package/dist/src/code_assist/setup.test.js +2 -2
  15. package/dist/src/code_assist/setup.test.js.map +1 -1
  16. package/dist/src/config/config.d.ts +22 -4
  17. package/dist/src/config/config.js +58 -10
  18. package/dist/src/config/config.js.map +1 -1
  19. package/dist/src/config/config.test.js +28 -0
  20. package/dist/src/config/config.test.js.map +1 -1
  21. package/dist/src/config/flashFallback.test.js +11 -1
  22. package/dist/src/config/flashFallback.test.js.map +1 -1
  23. package/dist/src/config/models.js.map +1 -1
  24. package/dist/src/config/profileManager.d.ts +42 -0
  25. package/dist/src/config/profileManager.js +114 -0
  26. package/dist/src/config/profileManager.js.map +1 -0
  27. package/dist/src/core/client.d.ts +11 -1
  28. package/dist/src/core/client.js +86 -30
  29. package/dist/src/core/client.js.map +1 -1
  30. package/dist/src/core/client.test.d.ts +1 -1
  31. package/dist/src/core/client.test.js +95 -28
  32. package/dist/src/core/client.test.js.map +1 -1
  33. package/dist/src/core/contentGenerator.d.ts +2 -2
  34. package/dist/src/core/contentGenerator.js.map +1 -1
  35. package/dist/src/core/coreToolScheduler.js +39 -15
  36. package/dist/src/core/coreToolScheduler.js.map +1 -1
  37. package/dist/src/core/coreToolScheduler.test.js +14 -17
  38. package/dist/src/core/coreToolScheduler.test.js.map +1 -1
  39. package/dist/src/core/geminiChat.js +34 -2
  40. package/dist/src/core/geminiChat.js.map +1 -1
  41. package/dist/src/core/geminiChat.test.js +2 -2
  42. package/dist/src/core/geminiChat.test.js.map +1 -1
  43. package/dist/src/core/nonInteractiveToolExecutor.js +11 -3
  44. package/dist/src/core/nonInteractiveToolExecutor.js.map +1 -1
  45. package/dist/src/core/nonInteractiveToolExecutor.test.js +5 -2
  46. package/dist/src/core/nonInteractiveToolExecutor.test.js.map +1 -1
  47. package/dist/src/core/prompts-async.test.d.ts +6 -0
  48. package/dist/src/core/prompts-async.test.js +115 -0
  49. package/dist/src/core/prompts-async.test.js.map +1 -0
  50. package/dist/src/core/prompts.d.ts +8 -1
  51. package/dist/src/core/prompts.js +97 -377
  52. package/dist/src/core/prompts.js.map +1 -1
  53. package/dist/src/core/prompts.test.js +46 -192
  54. package/dist/src/core/prompts.test.js.map +1 -1
  55. package/dist/src/core/tokenLimits.d.ts +1 -1
  56. package/dist/src/core/tokenLimits.js +5 -1
  57. package/dist/src/core/tokenLimits.js.map +1 -1
  58. package/dist/src/core/turn.d.ts +3 -0
  59. package/dist/src/core/turn.js +3 -0
  60. package/dist/src/core/turn.js.map +1 -1
  61. package/dist/src/ide/detect-ide.d.ts +10 -0
  62. package/dist/src/ide/detect-ide.js +24 -0
  63. package/dist/src/ide/detect-ide.js.map +1 -0
  64. package/dist/src/ide/ide-client.d.ts +11 -1
  65. package/dist/src/ide/ide-client.js +37 -1
  66. package/dist/src/ide/ide-client.js.map +1 -1
  67. package/dist/src/ide/ide-installer.d.ts +15 -0
  68. package/dist/src/ide/ide-installer.js +111 -0
  69. package/dist/src/ide/ide-installer.js.map +1 -0
  70. package/dist/src/ide/ide-installer.test.d.ts +6 -0
  71. package/dist/src/ide/ide-installer.test.js +78 -0
  72. package/dist/src/ide/ide-installer.test.js.map +1 -0
  73. package/dist/src/index.d.ts +9 -0
  74. package/dist/src/index.js +11 -0
  75. package/dist/src/index.js.map +1 -1
  76. package/dist/src/mcp/oauth-provider.js +3 -3
  77. package/dist/src/mcp/oauth-provider.js.map +1 -1
  78. package/dist/src/mcp/oauth-provider.test.js +9 -8
  79. package/dist/src/mcp/oauth-provider.test.js.map +1 -1
  80. package/dist/src/parsers/TextToolCallParser.d.ts +1 -0
  81. package/dist/src/parsers/TextToolCallParser.js +45 -3
  82. package/dist/src/parsers/TextToolCallParser.js.map +1 -1
  83. package/dist/src/parsers/TextToolCallParser.multibyte.test.d.ts +1 -0
  84. package/dist/src/parsers/TextToolCallParser.multibyte.test.js +42 -0
  85. package/dist/src/parsers/TextToolCallParser.multibyte.test.js.map +1 -0
  86. package/dist/src/prompt-config/TemplateEngine.d.ts +35 -0
  87. package/dist/src/prompt-config/TemplateEngine.js +149 -0
  88. package/dist/src/prompt-config/TemplateEngine.js.map +1 -0
  89. package/dist/src/prompt-config/TemplateEngine.test.d.ts +1 -0
  90. package/dist/src/prompt-config/TemplateEngine.test.js +494 -0
  91. package/dist/src/prompt-config/TemplateEngine.test.js.map +1 -0
  92. package/dist/src/prompt-config/defaults/compression.md +58 -0
  93. package/dist/src/prompt-config/defaults/core-defaults.d.ts +5 -0
  94. package/dist/src/prompt-config/defaults/core-defaults.js +332 -0
  95. package/dist/src/prompt-config/defaults/core-defaults.js.map +1 -0
  96. package/dist/src/prompt-config/defaults/core.md +267 -0
  97. package/dist/src/prompt-config/defaults/env/git-repository.md +15 -0
  98. package/dist/src/prompt-config/defaults/env/ide-mode.md +3 -0
  99. package/dist/src/prompt-config/defaults/env/macos-seatbelt.md +3 -0
  100. package/dist/src/prompt-config/defaults/env/outside-of-sandbox.md +3 -0
  101. package/dist/src/prompt-config/defaults/env/sandbox.md +3 -0
  102. package/dist/src/prompt-config/defaults/index.d.ts +14 -0
  103. package/dist/src/prompt-config/defaults/index.js +21 -0
  104. package/dist/src/prompt-config/defaults/index.js.map +1 -0
  105. package/dist/src/prompt-config/defaults/provider-defaults.d.ts +5 -0
  106. package/dist/src/prompt-config/defaults/provider-defaults.js +26 -0
  107. package/dist/src/prompt-config/defaults/provider-defaults.js.map +1 -0
  108. package/dist/src/prompt-config/defaults/providers/gemini/models/gemini-2.5-flash/core.md +10 -0
  109. package/dist/src/prompt-config/defaults/service-defaults.d.ts +5 -0
  110. package/dist/src/prompt-config/defaults/service-defaults.js +52 -0
  111. package/dist/src/prompt-config/defaults/service-defaults.js.map +1 -0
  112. package/dist/src/prompt-config/defaults/tool-defaults.d.ts +5 -0
  113. package/dist/src/prompt-config/defaults/tool-defaults.js +81 -0
  114. package/dist/src/prompt-config/defaults/tool-defaults.js.map +1 -0
  115. package/dist/src/prompt-config/defaults/tools/edit.md +2 -0
  116. package/dist/src/prompt-config/defaults/tools/glob.md +2 -0
  117. package/dist/src/prompt-config/defaults/tools/grep.md +2 -0
  118. package/dist/src/prompt-config/defaults/tools/ls.md +1 -0
  119. package/dist/src/prompt-config/defaults/tools/memory.md +1 -0
  120. package/dist/src/prompt-config/defaults/tools/read-file.md +4 -0
  121. package/dist/src/prompt-config/defaults/tools/read-many-files.md +2 -0
  122. package/dist/src/prompt-config/defaults/tools/shell.md +5 -0
  123. package/dist/src/prompt-config/defaults/tools/todo-read.md +3 -0
  124. package/dist/src/prompt-config/defaults/tools/todo-write.md +50 -0
  125. package/dist/src/prompt-config/defaults/tools/web-fetch.md +3 -0
  126. package/dist/src/prompt-config/defaults/tools/web-search.md +3 -0
  127. package/dist/src/prompt-config/defaults/tools/write-file.md +4 -0
  128. package/dist/src/prompt-config/index.d.ts +16 -0
  129. package/dist/src/prompt-config/index.js +11 -0
  130. package/dist/src/prompt-config/index.js.map +1 -0
  131. package/dist/src/prompt-config/prompt-cache.d.ts +72 -0
  132. package/dist/src/prompt-config/prompt-cache.js +271 -0
  133. package/dist/src/prompt-config/prompt-cache.js.map +1 -0
  134. package/dist/src/prompt-config/prompt-cache.test.d.ts +6 -0
  135. package/dist/src/prompt-config/prompt-cache.test.js +437 -0
  136. package/dist/src/prompt-config/prompt-cache.test.js.map +1 -0
  137. package/dist/src/prompt-config/prompt-installer.d.ts +118 -0
  138. package/dist/src/prompt-config/prompt-installer.js +723 -0
  139. package/dist/src/prompt-config/prompt-installer.js.map +1 -0
  140. package/dist/src/prompt-config/prompt-installer.test.d.ts +7 -0
  141. package/dist/src/prompt-config/prompt-installer.test.js +503 -0
  142. package/dist/src/prompt-config/prompt-installer.test.js.map +1 -0
  143. package/dist/src/prompt-config/prompt-loader.d.ts +49 -0
  144. package/dist/src/prompt-config/prompt-loader.js +331 -0
  145. package/dist/src/prompt-config/prompt-loader.js.map +1 -0
  146. package/dist/src/prompt-config/prompt-loader.test.d.ts +5 -0
  147. package/dist/src/prompt-config/prompt-loader.test.js +413 -0
  148. package/dist/src/prompt-config/prompt-loader.test.js.map +1 -0
  149. package/dist/src/prompt-config/prompt-resolver.d.ts +74 -0
  150. package/dist/src/prompt-config/prompt-resolver.js +600 -0
  151. package/dist/src/prompt-config/prompt-resolver.js.map +1 -0
  152. package/dist/src/prompt-config/prompt-resolver.test.d.ts +1 -0
  153. package/dist/src/prompt-config/prompt-resolver.test.js +529 -0
  154. package/dist/src/prompt-config/prompt-resolver.test.js.map +1 -0
  155. package/dist/src/prompt-config/prompt-service.d.ts +108 -0
  156. package/dist/src/prompt-config/prompt-service.js +435 -0
  157. package/dist/src/prompt-config/prompt-service.js.map +1 -0
  158. package/dist/src/prompt-config/prompt-service.test.d.ts +1 -0
  159. package/dist/src/prompt-config/prompt-service.test.js +811 -0
  160. package/dist/src/prompt-config/prompt-service.test.js.map +1 -0
  161. package/dist/src/prompt-config/types.d.ts +30 -0
  162. package/dist/src/prompt-config/types.js +10 -0
  163. package/dist/src/prompt-config/types.js.map +1 -0
  164. package/dist/src/providers/IProvider.d.ts +10 -0
  165. package/dist/src/providers/anthropic/AnthropicProvider.d.ts +14 -1
  166. package/dist/src/providers/anthropic/AnthropicProvider.js +28 -2
  167. package/dist/src/providers/anthropic/AnthropicProvider.js.map +1 -1
  168. package/dist/src/providers/anthropic/AnthropicProvider.modelParams.test.d.ts +1 -0
  169. package/dist/src/providers/anthropic/AnthropicProvider.modelParams.test.js +48 -0
  170. package/dist/src/providers/anthropic/AnthropicProvider.modelParams.test.js.map +1 -0
  171. package/dist/src/providers/anthropic/AnthropicProvider.test.js +2 -1
  172. package/dist/src/providers/anthropic/AnthropicProvider.test.js.map +1 -1
  173. package/dist/src/providers/gemini/GeminiProvider.d.ts +11 -2
  174. package/dist/src/providers/gemini/GeminiProvider.integration.test.js +1 -1
  175. package/dist/src/providers/gemini/GeminiProvider.js +34 -9
  176. package/dist/src/providers/gemini/GeminiProvider.js.map +1 -1
  177. package/dist/src/providers/openai/OpenAIProvider.d.ts +11 -0
  178. package/dist/src/providers/openai/OpenAIProvider.js +100 -31
  179. package/dist/src/providers/openai/OpenAIProvider.js.map +1 -1
  180. package/dist/src/providers/openai/OpenAIProvider.responses.test.js +27 -3
  181. package/dist/src/providers/openai/OpenAIProvider.responses.test.js.map +1 -1
  182. package/dist/src/providers/openai/OpenAIProvider.shouldUseResponses.test.js +2 -1
  183. package/dist/src/providers/openai/OpenAIProvider.shouldUseResponses.test.js.map +1 -1
  184. package/dist/src/providers/openai/OpenAIProvider.test.js +307 -7
  185. package/dist/src/providers/openai/OpenAIProvider.test.js.map +1 -1
  186. package/dist/src/providers/openai/buildResponsesRequest.js +19 -2
  187. package/dist/src/providers/openai/buildResponsesRequest.js.map +1 -1
  188. package/dist/src/providers/test-utils/providerTestConfig.d.ts +21 -0
  189. package/dist/src/providers/test-utils/providerTestConfig.js +23 -0
  190. package/dist/src/providers/test-utils/providerTestConfig.js.map +1 -0
  191. package/dist/src/providers/types/IProviderConfig.d.ts +6 -0
  192. package/dist/src/services/loopDetectionService.d.ts +9 -0
  193. package/dist/src/services/loopDetectionService.js +44 -12
  194. package/dist/src/services/loopDetectionService.js.map +1 -1
  195. package/dist/src/services/shellExecutionService.d.ts +1 -37
  196. package/dist/src/services/shellExecutionService.js +24 -55
  197. package/dist/src/services/shellExecutionService.js.map +1 -1
  198. package/dist/src/{providers/IProviderConfig.js → services/shellExecutionService.multibyte.test.d.ts} +0 -1
  199. package/dist/src/services/shellExecutionService.multibyte.test.js +72 -0
  200. package/dist/src/services/shellExecutionService.multibyte.test.js.map +1 -0
  201. package/dist/src/services/shellExecutionService.test.js +11 -5
  202. package/dist/src/services/shellExecutionService.test.js.map +1 -1
  203. package/dist/src/services/shellExecutionService.windows.multibyte.test.d.ts +6 -0
  204. package/dist/src/services/shellExecutionService.windows.multibyte.test.js +98 -0
  205. package/dist/src/services/shellExecutionService.windows.multibyte.test.js.map +1 -0
  206. package/dist/src/services/shellExecutionService.windows.test.d.ts +6 -0
  207. package/dist/src/services/shellExecutionService.windows.test.js +79 -0
  208. package/dist/src/services/shellExecutionService.windows.test.js.map +1 -0
  209. package/dist/src/telemetry/clearcut-logger/clearcut-logger.d.ts +3 -2
  210. package/dist/src/telemetry/clearcut-logger/clearcut-logger.js +22 -3
  211. package/dist/src/telemetry/clearcut-logger/clearcut-logger.js.map +1 -1
  212. package/dist/src/telemetry/clearcut-logger/event-metadata-key.d.ts +4 -1
  213. package/dist/src/telemetry/clearcut-logger/event-metadata-key.js +12 -0
  214. package/dist/src/telemetry/clearcut-logger/event-metadata-key.js.map +1 -1
  215. package/dist/src/telemetry/constants.d.ts +1 -1
  216. package/dist/src/telemetry/constants.js +1 -1
  217. package/dist/src/telemetry/constants.js.map +1 -1
  218. package/dist/src/telemetry/file-exporters.d.ts +2 -2
  219. package/dist/src/telemetry/file-exporters.js +47 -20
  220. package/dist/src/telemetry/file-exporters.js.map +1 -1
  221. package/dist/src/telemetry/loggers.d.ts +2 -2
  222. package/dist/src/telemetry/loggers.js +13 -6
  223. package/dist/src/telemetry/loggers.js.map +1 -1
  224. package/dist/src/telemetry/loggers.test.circular.js +2 -0
  225. package/dist/src/telemetry/loggers.test.circular.js.map +1 -1
  226. package/dist/src/telemetry/loggers.test.js +8 -3
  227. package/dist/src/telemetry/loggers.test.js.map +1 -1
  228. package/dist/src/telemetry/sdk.d.ts +1 -1
  229. package/dist/src/telemetry/sdk.js +71 -73
  230. package/dist/src/telemetry/sdk.js.map +1 -1
  231. package/dist/src/telemetry/telemetry.test.js +7 -5
  232. package/dist/src/telemetry/telemetry.test.js.map +1 -1
  233. package/dist/src/telemetry/types.d.ts +12 -4
  234. package/dist/src/telemetry/types.js +18 -4
  235. package/dist/src/telemetry/types.js.map +1 -1
  236. package/dist/src/telemetry/uiTelemetry.test.js +3 -0
  237. package/dist/src/telemetry/uiTelemetry.test.js.map +1 -1
  238. package/dist/src/test-utils/mockWorkspaceContext.d.ts +13 -0
  239. package/dist/src/test-utils/mockWorkspaceContext.js +24 -0
  240. package/dist/src/test-utils/mockWorkspaceContext.js.map +1 -0
  241. package/dist/src/tools/edit.js +27 -3
  242. package/dist/src/tools/edit.js.map +1 -1
  243. package/dist/src/tools/edit.test.js +104 -1
  244. package/dist/src/tools/edit.test.js.map +1 -1
  245. package/dist/src/tools/glob.js +53 -17
  246. package/dist/src/tools/glob.js.map +1 -1
  247. package/dist/src/tools/glob.test.js +25 -2
  248. package/dist/src/tools/glob.test.js.map +1 -1
  249. package/dist/src/tools/grep.d.ts +1 -1
  250. package/dist/src/tools/grep.js +81 -29
  251. package/dist/src/tools/grep.js.map +1 -1
  252. package/dist/src/tools/grep.test.js +72 -5
  253. package/dist/src/tools/grep.test.js.map +1 -1
  254. package/dist/src/tools/ls.js +4 -3
  255. package/dist/src/tools/ls.js.map +1 -1
  256. package/dist/src/tools/ls.test.d.ts +6 -0
  257. package/dist/src/tools/ls.test.js +356 -0
  258. package/dist/src/tools/ls.test.js.map +1 -0
  259. package/dist/src/tools/mcp-client.js +8 -3
  260. package/dist/src/tools/mcp-client.js.map +1 -1
  261. package/dist/src/tools/mcp-client.test.js +34 -0
  262. package/dist/src/tools/mcp-client.test.js.map +1 -1
  263. package/dist/src/tools/memoryTool.d.ts +17 -2
  264. package/dist/src/tools/memoryTool.js +130 -13
  265. package/dist/src/tools/memoryTool.js.map +1 -1
  266. package/dist/src/tools/memoryTool.test.js +88 -3
  267. package/dist/src/tools/memoryTool.test.js.map +1 -1
  268. package/dist/src/tools/read-file.js +8 -6
  269. package/dist/src/tools/read-file.js.map +1 -1
  270. package/dist/src/tools/read-file.test.js +30 -2
  271. package/dist/src/tools/read-file.test.js.map +1 -1
  272. package/dist/src/tools/read-many-files.js +22 -12
  273. package/dist/src/tools/read-many-files.js.map +1 -1
  274. package/dist/src/tools/read-many-files.test.js +35 -2
  275. package/dist/src/tools/read-many-files.test.js.map +1 -1
  276. package/dist/src/tools/shell.js +16 -0
  277. package/dist/src/tools/shell.js.map +1 -1
  278. package/dist/src/tools/shell.multibyte.test.d.ts +6 -0
  279. package/dist/src/tools/shell.multibyte.test.js +74 -0
  280. package/dist/src/tools/shell.multibyte.test.js.map +1 -0
  281. package/dist/src/tools/shell.test.js +33 -1
  282. package/dist/src/tools/shell.test.js.map +1 -1
  283. package/dist/src/tools/tool-error.d.ts +22 -0
  284. package/dist/src/tools/tool-error.js +27 -0
  285. package/dist/src/tools/tool-error.js.map +1 -0
  286. package/dist/src/tools/tool-registry.test.js +8 -0
  287. package/dist/src/tools/tool-registry.test.js.map +1 -1
  288. package/dist/src/tools/tools.d.ts +8 -0
  289. package/dist/src/tools/tools.js.map +1 -1
  290. package/dist/src/tools/write-file.js +5 -3
  291. package/dist/src/tools/write-file.js.map +1 -1
  292. package/dist/src/tools/write-file.test.js +36 -2
  293. package/dist/src/tools/write-file.test.js.map +1 -1
  294. package/dist/src/types/modelParams.d.ts +62 -0
  295. package/dist/src/types/modelParams.js +7 -0
  296. package/dist/src/types/modelParams.js.map +1 -0
  297. package/dist/src/utils/bfsFileSearch.test.js +4 -2
  298. package/dist/src/utils/bfsFileSearch.test.js.map +1 -1
  299. package/dist/src/utils/editCorrector.js +2 -2
  300. package/dist/src/utils/editCorrector.js.map +1 -1
  301. package/dist/src/utils/editor.d.ts +1 -1
  302. package/dist/src/utils/editor.js +9 -0
  303. package/dist/src/utils/editor.js.map +1 -1
  304. package/dist/src/utils/editor.test.js +21 -1
  305. package/dist/src/utils/editor.test.js.map +1 -1
  306. package/dist/src/utils/fileUtils.js +12 -1
  307. package/dist/src/utils/fileUtils.js.map +1 -1
  308. package/dist/src/utils/fileUtils.test.js +29 -1
  309. package/dist/src/utils/fileUtils.test.js.map +1 -1
  310. package/dist/src/utils/flashFallback.integration.test.js +8 -0
  311. package/dist/src/utils/flashFallback.integration.test.js.map +1 -1
  312. package/dist/src/utils/memoryDiscovery.d.ts +1 -1
  313. package/dist/src/utils/memoryDiscovery.js +61 -73
  314. package/dist/src/utils/memoryDiscovery.js.map +1 -1
  315. package/dist/src/utils/memoryDiscovery.test.js +4 -3
  316. package/dist/src/utils/memoryDiscovery.test.js.map +1 -1
  317. package/dist/src/utils/memoryImportProcessor.d.ts +19 -12
  318. package/dist/src/utils/memoryImportProcessor.js +241 -82
  319. package/dist/src/utils/memoryImportProcessor.js.map +1 -1
  320. package/dist/src/utils/memoryImportProcessor.test.js +595 -50
  321. package/dist/src/utils/memoryImportProcessor.test.js.map +1 -1
  322. package/dist/src/utils/nextSpeakerChecker.js +10 -25
  323. package/dist/src/utils/nextSpeakerChecker.js.map +1 -1
  324. package/dist/src/utils/nextSpeakerChecker.test.js +6 -2
  325. package/dist/src/utils/nextSpeakerChecker.test.js.map +1 -1
  326. package/dist/src/utils/sanitization.d.ts +20 -0
  327. package/dist/src/utils/sanitization.js +66 -0
  328. package/dist/src/utils/sanitization.js.map +1 -0
  329. package/dist/src/utils/sanitization.test.d.ts +6 -0
  330. package/dist/src/utils/sanitization.test.js +81 -0
  331. package/dist/src/utils/sanitization.test.js.map +1 -0
  332. package/dist/src/utils/secure-browser-launcher.d.ts +23 -0
  333. package/dist/src/utils/secure-browser-launcher.js +164 -0
  334. package/dist/src/utils/secure-browser-launcher.js.map +1 -0
  335. package/dist/src/utils/secure-browser-launcher.test.d.ts +6 -0
  336. package/dist/src/utils/secure-browser-launcher.test.js +149 -0
  337. package/dist/src/utils/secure-browser-launcher.test.js.map +1 -0
  338. package/dist/src/utils/summarizer.js +2 -2
  339. package/dist/src/utils/summarizer.js.map +1 -1
  340. package/dist/src/utils/unicodeUtils.d.ts +44 -0
  341. package/dist/src/utils/unicodeUtils.js +93 -0
  342. package/dist/src/utils/unicodeUtils.js.map +1 -0
  343. package/dist/src/utils/unicodeUtils.test.d.ts +6 -0
  344. package/dist/src/utils/unicodeUtils.test.js +120 -0
  345. package/dist/src/utils/unicodeUtils.test.js.map +1 -0
  346. package/dist/src/utils/workspaceContext.d.ts +47 -0
  347. package/dist/src/utils/workspaceContext.js +106 -0
  348. package/dist/src/utils/workspaceContext.js.map +1 -0
  349. package/dist/src/utils/workspaceContext.test.d.ts +6 -0
  350. package/dist/src/utils/workspaceContext.test.js +209 -0
  351. package/dist/src/utils/workspaceContext.test.js.map +1 -0
  352. package/package.json +2 -1
  353. package/dist/src/providers/IProviderConfig.d.ts +0 -31
  354. package/dist/src/providers/IProviderConfig.js.map +0 -1
@@ -0,0 +1,437 @@
1
+ /**
2
+ * @license
3
+ * Copyright 2025 Google LLC
4
+ * SPDX-License-Identifier: Apache-2.0
5
+ */
6
+ import { describe, it, expect, beforeEach } from 'vitest';
7
+ import { PromptCache } from './prompt-cache.js';
8
+ describe('PromptCache', () => {
9
+ let cache;
10
+ const createContext = (overrides = {}) => ({
11
+ provider: 'anthropic',
12
+ model: 'claude-3',
13
+ enabledTools: ['read', 'write'],
14
+ environment: {
15
+ isGitRepository: true,
16
+ isSandboxed: false,
17
+ hasIdeCompanion: true,
18
+ },
19
+ ...overrides,
20
+ });
21
+ const createMetadata = (overrides = {}) => ({
22
+ files: ['test.txt'],
23
+ tokenCount: 100,
24
+ assemblyTimeMs: 50,
25
+ ...overrides,
26
+ });
27
+ beforeEach(() => {
28
+ cache = new PromptCache(10); // 10MB cache
29
+ });
30
+ describe('constructor', () => {
31
+ it('should initialize with default size when no size provided', () => {
32
+ const defaultCache = new PromptCache();
33
+ const stats = defaultCache.getStats();
34
+ expect(stats.maxSizeMB).toBe(100); // Default 100MB
35
+ });
36
+ it('should enforce minimum size of 100MB for invalid sizes', () => {
37
+ const zeroCache = new PromptCache(0);
38
+ const stats = zeroCache.getStats();
39
+ expect(stats.maxSizeMB).toBe(100);
40
+ });
41
+ it('should enforce maximum size of 1000MB', () => {
42
+ const largeCache = new PromptCache(2000);
43
+ const stats = largeCache.getStats();
44
+ expect(stats.maxSizeMB).toBe(1000);
45
+ });
46
+ });
47
+ describe('generateKey', () => {
48
+ it('should generate consistent keys for same context', () => {
49
+ const context = createContext();
50
+ const key1 = cache.generateKey(context);
51
+ const key2 = cache.generateKey(context);
52
+ expect(key1).toBe(key2);
53
+ });
54
+ it('should include provider and model in key', () => {
55
+ const context = createContext({
56
+ provider: 'openai',
57
+ model: 'gpt-4',
58
+ });
59
+ const key = cache.generateKey(context);
60
+ expect(key).toContain('openai');
61
+ expect(key).toContain('gpt-4');
62
+ });
63
+ it('should include sorted tools in key', () => {
64
+ const context = createContext({
65
+ enabledTools: ['write', 'read', 'grep'],
66
+ });
67
+ const key = cache.generateKey(context);
68
+ // Tools should be sorted alphabetically
69
+ expect(key).toContain('grep');
70
+ expect(key).toContain('read');
71
+ expect(key).toContain('write');
72
+ });
73
+ it('should include environment flags in key', () => {
74
+ const context = createContext({
75
+ environment: {
76
+ isGitRepository: true,
77
+ isSandboxed: true,
78
+ hasIdeCompanion: false,
79
+ },
80
+ });
81
+ const key = cache.generateKey(context);
82
+ expect(key).toContain('git');
83
+ expect(key).toContain('sandbox');
84
+ expect(key).not.toContain('ide');
85
+ });
86
+ it('should handle null or undefined context', () => {
87
+ const key = cache.generateKey(null);
88
+ expect(key).toBe('');
89
+ });
90
+ it('should handle missing context properties with defaults', () => {
91
+ const partialContext = {
92
+ provider: 'test',
93
+ };
94
+ const key = cache.generateKey(partialContext);
95
+ expect(key).toContain('test');
96
+ expect(key).toContain('unknown'); // Default model
97
+ });
98
+ it('should generate different keys for different contexts', () => {
99
+ const context1 = createContext({ provider: 'openai' });
100
+ const context2 = createContext({ provider: 'anthropic' });
101
+ const key1 = cache.generateKey(context1);
102
+ const key2 = cache.generateKey(context2);
103
+ expect(key1).not.toBe(key2);
104
+ });
105
+ });
106
+ describe('set and get operations', () => {
107
+ it('should store and retrieve a prompt', () => {
108
+ const context = createContext();
109
+ const prompt = 'Test prompt content';
110
+ const metadata = createMetadata();
111
+ cache.set(context, prompt, metadata);
112
+ const result = cache.get(context);
113
+ expect(result).not.toBeNull();
114
+ expect(result.assembledPrompt).toBe(prompt);
115
+ expect(result.metadata.files).toEqual(metadata.files);
116
+ expect(result.metadata.tokenCount).toBe(metadata.tokenCount);
117
+ expect(result.metadata.assemblyTimeMs).toBe(metadata.assemblyTimeMs);
118
+ });
119
+ it('should return null for non-existent entries', () => {
120
+ const context = createContext();
121
+ const result = cache.get(context);
122
+ expect(result).toBeNull();
123
+ });
124
+ it('should update access count and time on get', () => {
125
+ const context = createContext();
126
+ const prompt = 'Test prompt';
127
+ const metadata = createMetadata();
128
+ cache.set(context, prompt, metadata);
129
+ // First access
130
+ cache.get(context);
131
+ // Second access
132
+ cache.get(context);
133
+ const stats = cache.getStats();
134
+ expect(stats.totalAccesses).toBe(2);
135
+ });
136
+ it('should handle null or empty keys in set', () => {
137
+ const prompt = 'Test prompt';
138
+ const metadata = createMetadata();
139
+ // Should not throw, but operation should fail
140
+ cache.set(null, prompt, metadata);
141
+ expect(cache.size()).toBe(0);
142
+ });
143
+ it('should handle null content in set', () => {
144
+ const context = createContext();
145
+ const metadata = createMetadata();
146
+ cache.set(context, null, metadata);
147
+ expect(cache.has(context)).toBe(false);
148
+ });
149
+ it('should reject content larger than cache size', () => {
150
+ const context = createContext();
151
+ const largePrompt = 'x'.repeat(11 * 1024 * 1024); // 11MB
152
+ const metadata = createMetadata();
153
+ cache.set(context, largePrompt, metadata);
154
+ expect(cache.has(context)).toBe(false);
155
+ });
156
+ it('should overwrite existing entries', () => {
157
+ const context = createContext();
158
+ const prompt1 = 'First prompt';
159
+ const prompt2 = 'Second prompt';
160
+ const metadata = createMetadata();
161
+ cache.set(context, prompt1, metadata);
162
+ cache.set(context, prompt2, metadata);
163
+ const result = cache.get(context);
164
+ expect(result.assembledPrompt).toBe(prompt2);
165
+ });
166
+ });
167
+ describe('has operation', () => {
168
+ it('should return true for existing entries', () => {
169
+ const context = createContext();
170
+ cache.set(context, 'Test prompt', createMetadata());
171
+ expect(cache.has(context)).toBe(true);
172
+ });
173
+ it('should return false for non-existent entries', () => {
174
+ const context = createContext();
175
+ expect(cache.has(context)).toBe(false);
176
+ });
177
+ it('should handle null or empty keys', () => {
178
+ expect(cache.has(null)).toBe(false);
179
+ });
180
+ });
181
+ describe('LRU eviction', () => {
182
+ it('should evict least recently used entries when cache is full', () => {
183
+ const smallCache = new PromptCache(0.001); // 1KB cache
184
+ const context1 = createContext({ model: 'model1' });
185
+ const context2 = createContext({ model: 'model2' });
186
+ const context3 = createContext({ model: 'model3' });
187
+ // Each prompt is ~500 bytes
188
+ const prompt = 'x'.repeat(500);
189
+ const metadata = createMetadata();
190
+ // Add first two entries
191
+ smallCache.set(context1, prompt, metadata);
192
+ smallCache.set(context2, prompt, metadata);
193
+ // Access first entry to make it more recent
194
+ smallCache.get(context1);
195
+ // Add third entry - should evict context2
196
+ smallCache.set(context3, prompt, metadata);
197
+ expect(smallCache.has(context1)).toBe(true);
198
+ expect(smallCache.has(context2)).toBe(false); // Evicted
199
+ expect(smallCache.has(context3)).toBe(true);
200
+ });
201
+ it('should handle eviction of multiple entries to make room', () => {
202
+ const smallCache = new PromptCache(0.002); // 2KB cache
203
+ // Add several small entries
204
+ for (let i = 0; i < 10; i++) {
205
+ const context = createContext({ model: `model${i}` });
206
+ smallCache.set(context, 'x'.repeat(200), createMetadata());
207
+ }
208
+ // Add one large entry that requires evicting multiple entries
209
+ const largeContext = createContext({ model: 'large' });
210
+ smallCache.set(largeContext, 'x'.repeat(1500), createMetadata());
211
+ expect(smallCache.has(largeContext)).toBe(true);
212
+ expect(smallCache.size()).toBeLessThan(10); // Some entries were evicted
213
+ });
214
+ it('should update access order on get operations', () => {
215
+ const smallCache = new PromptCache(0.001); // 1KB cache
216
+ const context1 = createContext({ model: 'model1' });
217
+ const context2 = createContext({ model: 'model2' });
218
+ const context3 = createContext({ model: 'model3' });
219
+ const prompt = 'x'.repeat(400);
220
+ const metadata = createMetadata();
221
+ smallCache.set(context1, prompt, metadata);
222
+ smallCache.set(context2, prompt, metadata);
223
+ // Access context1 multiple times
224
+ smallCache.get(context1);
225
+ smallCache.get(context1);
226
+ // Add context3 - should evict context2, not context1
227
+ smallCache.set(context3, prompt, metadata);
228
+ expect(smallCache.has(context1)).toBe(true);
229
+ expect(smallCache.has(context2)).toBe(false);
230
+ expect(smallCache.has(context3)).toBe(true);
231
+ });
232
+ });
233
+ describe('remove operation', () => {
234
+ it('should remove existing entries', () => {
235
+ const context = createContext();
236
+ cache.set(context, 'Test prompt', createMetadata());
237
+ const key = cache.generateKey(context);
238
+ const removed = cache.remove(key);
239
+ expect(removed).toBe(true);
240
+ expect(cache.has(context)).toBe(false);
241
+ });
242
+ it('should return false for non-existent entries', () => {
243
+ const removed = cache.remove('non-existent-key');
244
+ expect(removed).toBe(false);
245
+ });
246
+ it('should handle null or empty keys', () => {
247
+ expect(cache.remove('')).toBe(false);
248
+ expect(cache.remove(null)).toBe(false);
249
+ });
250
+ it('should update cache size after removal', () => {
251
+ const context = createContext();
252
+ const prompt = 'x'.repeat(1000);
253
+ cache.set(context, prompt, createMetadata());
254
+ const statsBefore = cache.getStats();
255
+ expect(statsBefore.totalSizeMB).toBeGreaterThan(0);
256
+ const key = cache.generateKey(context);
257
+ cache.remove(key);
258
+ const statsAfter = cache.getStats();
259
+ expect(statsAfter.totalSizeMB).toBe(0);
260
+ });
261
+ });
262
+ describe('clear operation', () => {
263
+ it('should remove all entries', () => {
264
+ const context1 = createContext({ model: 'model1' });
265
+ const context2 = createContext({ model: 'model2' });
266
+ cache.set(context1, 'Prompt 1', createMetadata());
267
+ cache.set(context2, 'Prompt 2', createMetadata());
268
+ expect(cache.size()).toBe(2);
269
+ cache.clear();
270
+ expect(cache.size()).toBe(0);
271
+ expect(cache.has(context1)).toBe(false);
272
+ expect(cache.has(context2)).toBe(false);
273
+ });
274
+ it('should reset cache statistics', () => {
275
+ const context = createContext();
276
+ cache.set(context, 'Test prompt', createMetadata());
277
+ cache.get(context);
278
+ cache.clear();
279
+ const stats = cache.getStats();
280
+ expect(stats.entryCount).toBe(0);
281
+ expect(stats.totalSizeMB).toBe(0);
282
+ expect(stats.totalAccesses).toBe(0);
283
+ });
284
+ });
285
+ describe('size operation', () => {
286
+ it('should return correct entry count', () => {
287
+ expect(cache.size()).toBe(0);
288
+ const context1 = createContext({ model: 'model1' });
289
+ const context2 = createContext({ model: 'model2' });
290
+ cache.set(context1, 'Prompt 1', createMetadata());
291
+ expect(cache.size()).toBe(1);
292
+ cache.set(context2, 'Prompt 2', createMetadata());
293
+ expect(cache.size()).toBe(2);
294
+ });
295
+ });
296
+ describe('getStats operation', () => {
297
+ it('should return correct cache statistics', () => {
298
+ const stats = cache.getStats();
299
+ expect(stats.entryCount).toBe(0);
300
+ expect(stats.totalSizeMB).toBe(0);
301
+ expect(stats.maxSizeMB).toBe(10);
302
+ expect(stats.utilizationPercent).toBe(0);
303
+ expect(stats.averageEntrySizeKB).toBe(0);
304
+ expect(stats.totalAccesses).toBe(0);
305
+ expect(stats.mostAccessedKey).toBeNull();
306
+ expect(stats.mostAccessedCount).toBe(0);
307
+ });
308
+ it('should track access patterns correctly', () => {
309
+ const context1 = createContext({ model: 'model1' });
310
+ const context2 = createContext({ model: 'model2' });
311
+ cache.set(context1, 'Prompt 1', createMetadata());
312
+ cache.set(context2, 'Prompt 2', createMetadata());
313
+ // Access context1 more times
314
+ cache.get(context1);
315
+ cache.get(context1);
316
+ cache.get(context1);
317
+ cache.get(context2);
318
+ const stats = cache.getStats();
319
+ expect(stats.totalAccesses).toBe(4);
320
+ expect(stats.mostAccessedKey).toBe(cache.generateKey(context1));
321
+ expect(stats.mostAccessedCount).toBe(3);
322
+ });
323
+ it('should calculate utilization and average size correctly', () => {
324
+ const context1 = createContext({ model: 'model1' });
325
+ const context2 = createContext({ model: 'model2' });
326
+ const prompt1 = 'x'.repeat(1000); // 1KB
327
+ const prompt2 = 'x'.repeat(2000); // 2KB
328
+ cache.set(context1, prompt1, createMetadata());
329
+ cache.set(context2, prompt2, createMetadata());
330
+ const stats = cache.getStats();
331
+ expect(stats.entryCount).toBe(2);
332
+ expect(stats.totalSizeMB).toBeCloseTo(0.003, 3);
333
+ expect(stats.utilizationPercent).toBeCloseTo(0.03, 2);
334
+ expect(stats.averageEntrySizeKB).toBeCloseTo(1.5, 1);
335
+ });
336
+ });
337
+ describe('preload operation', () => {
338
+ it('should return count of contexts that would be cached', () => {
339
+ const contexts = [
340
+ createContext({ model: 'model1' }),
341
+ createContext({ model: 'model2' }),
342
+ createContext({ model: 'model3' }),
343
+ ];
344
+ const count = cache.preload(contexts);
345
+ expect(count).toBe(3);
346
+ });
347
+ it('should skip already cached contexts', () => {
348
+ const context1 = createContext({ model: 'model1' });
349
+ const context2 = createContext({ model: 'model2' });
350
+ cache.set(context1, 'Already cached', createMetadata());
351
+ const contexts = [context1, context2];
352
+ const count = cache.preload(contexts);
353
+ expect(count).toBe(1); // Only context2 would be cached
354
+ });
355
+ it('should handle empty or null contexts array', () => {
356
+ expect(cache.preload([])).toBe(0);
357
+ expect(cache.preload(null)).toBe(0);
358
+ });
359
+ it('should skip contexts that generate empty keys', () => {
360
+ const contexts = [
361
+ createContext(),
362
+ null,
363
+ createContext({ model: 'model2' }),
364
+ ];
365
+ const count = cache.preload(contexts);
366
+ expect(count).toBe(2); // Null context is skipped
367
+ });
368
+ });
369
+ describe('edge cases', () => {
370
+ it('should handle zero-size cache gracefully', () => {
371
+ const zeroCache = new PromptCache(0);
372
+ const context = createContext();
373
+ zeroCache.set(context, 'Test', createMetadata());
374
+ expect(zeroCache.has(context)).toBe(false);
375
+ expect(zeroCache.size()).toBe(0);
376
+ });
377
+ it('should handle single entry using entire cache', () => {
378
+ const smallCache = new PromptCache(0.001); // 1KB
379
+ const context = createContext();
380
+ const prompt = 'x'.repeat(900); // Just under 1KB
381
+ smallCache.set(context, prompt, createMetadata());
382
+ expect(smallCache.has(context)).toBe(true);
383
+ // Adding another entry should evict the first
384
+ const context2 = createContext({ model: 'model2' });
385
+ smallCache.set(context2, 'Small prompt', createMetadata());
386
+ expect(smallCache.has(context)).toBe(false);
387
+ expect(smallCache.has(context2)).toBe(true);
388
+ });
389
+ it('should handle rapid access pattern changes', () => {
390
+ const context1 = createContext({ model: 'model1' });
391
+ const context2 = createContext({ model: 'model2' });
392
+ const context3 = createContext({ model: 'model3' });
393
+ cache.set(context1, 'Prompt 1', createMetadata());
394
+ cache.set(context2, 'Prompt 2', createMetadata());
395
+ cache.set(context3, 'Prompt 3', createMetadata());
396
+ // Rapidly change access patterns
397
+ for (let i = 0; i < 10; i++) {
398
+ if (i % 3 === 0)
399
+ cache.get(context1);
400
+ else if (i % 3 === 1)
401
+ cache.get(context2);
402
+ else
403
+ cache.get(context3);
404
+ }
405
+ const stats = cache.getStats();
406
+ expect(stats.totalAccesses).toBe(10);
407
+ });
408
+ it('should maintain metadata immutability', () => {
409
+ const context = createContext();
410
+ const originalMetadata = createMetadata();
411
+ cache.set(context, 'Test prompt', originalMetadata);
412
+ // Modify original metadata
413
+ originalMetadata.files.push('another-file.txt');
414
+ originalMetadata.tokenCount = 999;
415
+ // Retrieved metadata should not be affected
416
+ const result = cache.get(context);
417
+ expect(result.metadata.files).toEqual(['test.txt']);
418
+ expect(result.metadata.tokenCount).toBe(100);
419
+ });
420
+ it('should handle concurrent-like access patterns', () => {
421
+ const contexts = Array.from({ length: 10 }, (_, i) => createContext({ model: `model${i}` }));
422
+ // Simulate concurrent-like access
423
+ contexts.forEach((ctx, i) => {
424
+ cache.set(ctx, `Prompt ${i}`, createMetadata());
425
+ });
426
+ // Random access pattern
427
+ for (let i = 0; i < 50; i++) {
428
+ const randomIndex = Math.floor(Math.random() * contexts.length);
429
+ cache.get(contexts[randomIndex]);
430
+ }
431
+ expect(cache.size()).toBe(10);
432
+ const stats = cache.getStats();
433
+ expect(stats.totalAccesses).toBe(50);
434
+ });
435
+ });
436
+ });
437
+ //# sourceMappingURL=prompt-cache.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"prompt-cache.test.js","sourceRoot":"","sources":["../../../src/prompt-config/prompt-cache.test.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,118 @@
1
+ /**
2
+ * Prompt Installer - Creates directory structure and installs default prompt files
3
+ * while preserving user customizations.
4
+ *
5
+ * This is a TDD stub implementation. All methods throw "Not implemented" errors.
6
+ */
7
+ import { z } from 'zod';
8
+ export declare const DEFAULT_BASE_DIR = "~/.llxprt/prompts";
9
+ export declare const REQUIRED_DIRECTORIES: readonly ["", "env", "tools", "providers"];
10
+ export interface InstallOptions {
11
+ force?: boolean;
12
+ dryRun?: boolean;
13
+ verbose?: boolean;
14
+ }
15
+ export interface InstallResult {
16
+ success: boolean;
17
+ installed: string[];
18
+ skipped: string[];
19
+ errors: string[];
20
+ baseDir?: string;
21
+ }
22
+ export interface UninstallOptions {
23
+ removeUserFiles?: boolean;
24
+ dryRun?: boolean;
25
+ }
26
+ export interface UninstallResult {
27
+ success: boolean;
28
+ removed: string[];
29
+ errors: string[];
30
+ }
31
+ export interface ValidationResult {
32
+ isValid: boolean;
33
+ errors: string[];
34
+ warnings: string[];
35
+ missing: string[];
36
+ baseDir: string;
37
+ }
38
+ export interface RepairOptions {
39
+ verbose?: boolean;
40
+ }
41
+ export interface RepairResult {
42
+ success: boolean;
43
+ repaired: string[];
44
+ errors: string[];
45
+ stillInvalid: string[];
46
+ }
47
+ export interface BackupResult {
48
+ success: boolean;
49
+ backupPath?: string;
50
+ fileCount?: number;
51
+ totalSize?: number;
52
+ error?: string;
53
+ }
54
+ export declare const DefaultsMapSchema: z.ZodRecord<z.ZodString, z.ZodString>;
55
+ export type DefaultsMap = z.infer<typeof DefaultsMapSchema>;
56
+ /**
57
+ * PromptInstaller handles installation, validation, and maintenance of prompt files
58
+ */
59
+ export declare class PromptInstaller {
60
+ /**
61
+ * Install default prompt files
62
+ * @param baseDir - Base directory for prompts (defaults to DEFAULT_BASE_DIR)
63
+ * @param defaults - Map of relative path to file content
64
+ * @param options - Installation options
65
+ * @returns Installation result with success status and details
66
+ */
67
+ install(baseDir: string | null, defaults: DefaultsMap, options?: InstallOptions): Promise<InstallResult>;
68
+ /**
69
+ * Uninstall prompt files
70
+ * @param baseDir - Base directory for prompts
71
+ * @param options - Uninstallation options
72
+ * @returns Uninstallation result with removed files
73
+ */
74
+ uninstall(baseDir: string | null, options?: UninstallOptions): Promise<UninstallResult>;
75
+ /**
76
+ * Helper method to recursively collect all files in a directory
77
+ */
78
+ private collectAllFiles;
79
+ /**
80
+ * Validate prompt installation
81
+ * @param baseDir - Base directory to validate
82
+ * @returns Validation result with issues found
83
+ */
84
+ validate(baseDir: string | null): Promise<ValidationResult>;
85
+ /**
86
+ * Repair prompt installation
87
+ * @param baseDir - Base directory to repair
88
+ * @param defaults - Map of default files to restore
89
+ * @param options - Repair options
90
+ * @returns Repair result with fixed issues
91
+ */
92
+ repair(baseDir: string | null, defaults: DefaultsMap, options?: RepairOptions): Promise<RepairResult>;
93
+ /**
94
+ * Create backup of current prompts
95
+ * @param baseDir - Base directory to backup
96
+ * @param backupPath - Where to save backup
97
+ * @returns Backup result with location and stats
98
+ */
99
+ backup(baseDir: string | null, backupPath: string): Promise<BackupResult>;
100
+ /**
101
+ * Helper method to copy a directory recursively
102
+ */
103
+ private copyDirectory;
104
+ /**
105
+ * Helper method to count files in a directory
106
+ */
107
+ private countFiles;
108
+ /**
109
+ * Helper method to fix file permissions recursively
110
+ */
111
+ private fixFilePermissions;
112
+ /**
113
+ * Expand path with home directory and environment variables
114
+ * @param path - Path to expand
115
+ * @returns Expanded absolute path
116
+ */
117
+ expandPath(inputPath: string): string;
118
+ }