@vybestack/llxprt-code-core 0.1.12

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 (448) hide show
  1. package/dist/.last_build +0 -0
  2. package/dist/index.d.ts +7 -0
  3. package/dist/index.js +8 -0
  4. package/dist/index.js.map +1 -0
  5. package/dist/src/__mocks__/fs/promises.d.ts +11 -0
  6. package/dist/src/__mocks__/fs/promises.js +17 -0
  7. package/dist/src/__mocks__/fs/promises.js.map +1 -0
  8. package/dist/src/code_assist/codeAssist.d.ts +9 -0
  9. package/dist/src/code_assist/codeAssist.js +19 -0
  10. package/dist/src/code_assist/codeAssist.js.map +1 -0
  11. package/dist/src/code_assist/converter.d.ts +68 -0
  12. package/dist/src/code_assist/converter.js +125 -0
  13. package/dist/src/code_assist/converter.js.map +1 -0
  14. package/dist/src/code_assist/converter.test.d.ts +6 -0
  15. package/dist/src/code_assist/converter.test.js +229 -0
  16. package/dist/src/code_assist/converter.test.js.map +1 -0
  17. package/dist/src/code_assist/oauth2.d.ts +20 -0
  18. package/dist/src/code_assist/oauth2.js +339 -0
  19. package/dist/src/code_assist/oauth2.js.map +1 -0
  20. package/dist/src/code_assist/oauth2.test.d.ts +6 -0
  21. package/dist/src/code_assist/oauth2.test.js +249 -0
  22. package/dist/src/code_assist/oauth2.test.js.map +1 -0
  23. package/dist/src/code_assist/server.d.ts +39 -0
  24. package/dist/src/code_assist/server.js +191 -0
  25. package/dist/src/code_assist/server.js.map +1 -0
  26. package/dist/src/code_assist/server.test.d.ts +6 -0
  27. package/dist/src/code_assist/server.test.js +123 -0
  28. package/dist/src/code_assist/server.test.js.map +1 -0
  29. package/dist/src/code_assist/setup.d.ts +15 -0
  30. package/dist/src/code_assist/setup.js +67 -0
  31. package/dist/src/code_assist/setup.js.map +1 -0
  32. package/dist/src/code_assist/setup.test.d.ts +6 -0
  33. package/dist/src/code_assist/setup.test.js +62 -0
  34. package/dist/src/code_assist/setup.test.js.map +1 -0
  35. package/dist/src/code_assist/types.d.ts +148 -0
  36. package/dist/src/code_assist/types.js +46 -0
  37. package/dist/src/code_assist/types.js.map +1 -0
  38. package/dist/src/config/config.d.ts +212 -0
  39. package/dist/src/config/config.js +454 -0
  40. package/dist/src/config/config.js.map +1 -0
  41. package/dist/src/config/config.test.d.ts +6 -0
  42. package/dist/src/config/config.test.js +291 -0
  43. package/dist/src/config/config.test.js.map +1 -0
  44. package/dist/src/config/flashFallback.test.d.ts +6 -0
  45. package/dist/src/config/flashFallback.test.js +115 -0
  46. package/dist/src/config/flashFallback.test.js.map +1 -0
  47. package/dist/src/config/models.d.ts +8 -0
  48. package/dist/src/config/models.js +9 -0
  49. package/dist/src/config/models.js.map +1 -0
  50. package/dist/src/core/client.d.ts +59 -0
  51. package/dist/src/core/client.js +503 -0
  52. package/dist/src/core/client.js.map +1 -0
  53. package/dist/src/core/client.test.d.ts +6 -0
  54. package/dist/src/core/client.test.js +1006 -0
  55. package/dist/src/core/client.test.js.map +1 -0
  56. package/dist/src/core/contentGenerator.d.ts +36 -0
  57. package/dist/src/core/contentGenerator.js +79 -0
  58. package/dist/src/core/contentGenerator.js.map +1 -0
  59. package/dist/src/core/contentGenerator.test.d.ts +6 -0
  60. package/dist/src/core/contentGenerator.test.js +92 -0
  61. package/dist/src/core/contentGenerator.test.js.map +1 -0
  62. package/dist/src/core/coreToolScheduler.d.ts +104 -0
  63. package/dist/src/core/coreToolScheduler.js +413 -0
  64. package/dist/src/core/coreToolScheduler.js.map +1 -0
  65. package/dist/src/core/coreToolScheduler.test.d.ts +6 -0
  66. package/dist/src/core/coreToolScheduler.test.js +347 -0
  67. package/dist/src/core/coreToolScheduler.test.js.map +1 -0
  68. package/dist/src/core/geminiChat.d.ts +116 -0
  69. package/dist/src/core/geminiChat.js +513 -0
  70. package/dist/src/core/geminiChat.js.map +1 -0
  71. package/dist/src/core/geminiChat.test.d.ts +6 -0
  72. package/dist/src/core/geminiChat.test.js +424 -0
  73. package/dist/src/core/geminiChat.test.js.map +1 -0
  74. package/dist/src/core/geminiRequest.d.ts +13 -0
  75. package/dist/src/core/geminiRequest.js +45 -0
  76. package/dist/src/core/geminiRequest.js.map +1 -0
  77. package/dist/src/core/geminiRequest.test.d.ts +6 -0
  78. package/dist/src/core/geminiRequest.test.js +72 -0
  79. package/dist/src/core/geminiRequest.test.js.map +1 -0
  80. package/dist/src/core/logger.d.ts +38 -0
  81. package/dist/src/core/logger.js +237 -0
  82. package/dist/src/core/logger.js.map +1 -0
  83. package/dist/src/core/logger.test.d.ts +6 -0
  84. package/dist/src/core/logger.test.js +387 -0
  85. package/dist/src/core/logger.test.js.map +1 -0
  86. package/dist/src/core/modelCheck.d.ts +14 -0
  87. package/dist/src/core/modelCheck.js +55 -0
  88. package/dist/src/core/modelCheck.js.map +1 -0
  89. package/dist/src/core/nonInteractiveToolExecutor.d.ts +12 -0
  90. package/dist/src/core/nonInteractiveToolExecutor.js +93 -0
  91. package/dist/src/core/nonInteractiveToolExecutor.js.map +1 -0
  92. package/dist/src/core/nonInteractiveToolExecutor.test.d.ts +6 -0
  93. package/dist/src/core/nonInteractiveToolExecutor.test.js +180 -0
  94. package/dist/src/core/nonInteractiveToolExecutor.test.js.map +1 -0
  95. package/dist/src/core/prompts.d.ts +12 -0
  96. package/dist/src/core/prompts.js +418 -0
  97. package/dist/src/core/prompts.js.map +1 -0
  98. package/dist/src/core/prompts.test.d.ts +6 -0
  99. package/dist/src/core/prompts.test.js +97 -0
  100. package/dist/src/core/prompts.test.js.map +1 -0
  101. package/dist/src/core/tokenLimits.d.ts +10 -0
  102. package/dist/src/core/tokenLimits.js +75 -0
  103. package/dist/src/core/tokenLimits.js.map +1 -0
  104. package/dist/src/core/tokenLimits.test.d.ts +6 -0
  105. package/dist/src/core/tokenLimits.test.js +66 -0
  106. package/dist/src/core/tokenLimits.test.js.map +1 -0
  107. package/dist/src/core/turn.d.ts +116 -0
  108. package/dist/src/core/turn.js +131 -0
  109. package/dist/src/core/turn.js.map +1 -0
  110. package/dist/src/core/turn.test.d.ts +6 -0
  111. package/dist/src/core/turn.test.js +237 -0
  112. package/dist/src/core/turn.test.js.map +1 -0
  113. package/dist/src/index.d.ts +57 -0
  114. package/dist/src/index.js +64 -0
  115. package/dist/src/index.js.map +1 -0
  116. package/dist/src/index.test.d.ts +6 -0
  117. package/dist/src/index.test.js +12 -0
  118. package/dist/src/index.test.js.map +1 -0
  119. package/dist/src/providers/ProviderContentGenerator.d.ts +21 -0
  120. package/dist/src/providers/ProviderContentGenerator.js +52 -0
  121. package/dist/src/providers/ProviderContentGenerator.js.map +1 -0
  122. package/dist/src/providers/adapters/GeminiCompatibleWrapper.d.ts +68 -0
  123. package/dist/src/providers/adapters/GeminiCompatibleWrapper.js +549 -0
  124. package/dist/src/providers/adapters/GeminiCompatibleWrapper.js.map +1 -0
  125. package/dist/src/providers/adapters/GeminiCompatibleWrapper.test.d.ts +6 -0
  126. package/dist/src/providers/adapters/GeminiCompatibleWrapper.test.js +253 -0
  127. package/dist/src/providers/adapters/GeminiCompatibleWrapper.test.js.map +1 -0
  128. package/dist/src/providers/types.d.ts +82 -0
  129. package/dist/src/providers/types.js +7 -0
  130. package/dist/src/providers/types.js.map +1 -0
  131. package/dist/src/services/fileDiscoveryService.d.ts +35 -0
  132. package/dist/src/services/fileDiscoveryService.js +91 -0
  133. package/dist/src/services/fileDiscoveryService.js.map +1 -0
  134. package/dist/src/services/fileDiscoveryService.test.d.ts +6 -0
  135. package/dist/src/services/fileDiscoveryService.test.js +102 -0
  136. package/dist/src/services/fileDiscoveryService.test.js.map +1 -0
  137. package/dist/src/services/gitService.d.ts +21 -0
  138. package/dist/src/services/gitService.js +102 -0
  139. package/dist/src/services/gitService.js.map +1 -0
  140. package/dist/src/services/gitService.test.d.ts +6 -0
  141. package/dist/src/services/gitService.test.js +246 -0
  142. package/dist/src/services/gitService.test.js.map +1 -0
  143. package/dist/src/services/ideContext.d.ts +124 -0
  144. package/dist/src/services/ideContext.js +90 -0
  145. package/dist/src/services/ideContext.js.map +1 -0
  146. package/dist/src/services/ideContext.test.d.ts +6 -0
  147. package/dist/src/services/ideContext.test.js +101 -0
  148. package/dist/src/services/ideContext.test.js.map +1 -0
  149. package/dist/src/services/loopDetectionService.d.ts +35 -0
  150. package/dist/src/services/loopDetectionService.js +117 -0
  151. package/dist/src/services/loopDetectionService.js.map +1 -0
  152. package/dist/src/services/loopDetectionService.test.d.ts +6 -0
  153. package/dist/src/services/loopDetectionService.test.js +232 -0
  154. package/dist/src/services/loopDetectionService.test.js.map +1 -0
  155. package/dist/src/telemetry/clearcut-logger/clearcut-logger.d.ts +35 -0
  156. package/dist/src/telemetry/clearcut-logger/clearcut-logger.js +424 -0
  157. package/dist/src/telemetry/clearcut-logger/clearcut-logger.js.map +1 -0
  158. package/dist/src/telemetry/clearcut-logger/event-metadata-key.d.ts +47 -0
  159. package/dist/src/telemetry/clearcut-logger/event-metadata-key.js +123 -0
  160. package/dist/src/telemetry/clearcut-logger/event-metadata-key.js.map +1 -0
  161. package/dist/src/telemetry/constants.d.ts +20 -0
  162. package/dist/src/telemetry/constants.js +21 -0
  163. package/dist/src/telemetry/constants.js.map +1 -0
  164. package/dist/src/telemetry/index.d.ts +18 -0
  165. package/dist/src/telemetry/index.js +20 -0
  166. package/dist/src/telemetry/index.js.map +1 -0
  167. package/dist/src/telemetry/integration.test.circular.d.ts +6 -0
  168. package/dist/src/telemetry/integration.test.circular.js +53 -0
  169. package/dist/src/telemetry/integration.test.circular.js.map +1 -0
  170. package/dist/src/telemetry/loggers.d.ts +15 -0
  171. package/dist/src/telemetry/loggers.js +229 -0
  172. package/dist/src/telemetry/loggers.js.map +1 -0
  173. package/dist/src/telemetry/loggers.test.circular.d.ts +6 -0
  174. package/dist/src/telemetry/loggers.test.circular.js +100 -0
  175. package/dist/src/telemetry/loggers.test.circular.js.map +1 -0
  176. package/dist/src/telemetry/loggers.test.d.ts +6 -0
  177. package/dist/src/telemetry/loggers.test.js +558 -0
  178. package/dist/src/telemetry/loggers.test.js.map +1 -0
  179. package/dist/src/telemetry/metrics.d.ts +19 -0
  180. package/dist/src/telemetry/metrics.js +144 -0
  181. package/dist/src/telemetry/metrics.js.map +1 -0
  182. package/dist/src/telemetry/metrics.test.d.ts +6 -0
  183. package/dist/src/telemetry/metrics.test.js +162 -0
  184. package/dist/src/telemetry/metrics.test.js.map +1 -0
  185. package/dist/src/telemetry/sdk.d.ts +9 -0
  186. package/dist/src/telemetry/sdk.js +120 -0
  187. package/dist/src/telemetry/sdk.js.map +1 -0
  188. package/dist/src/telemetry/telemetry.test.d.ts +6 -0
  189. package/dist/src/telemetry/telemetry.test.js +52 -0
  190. package/dist/src/telemetry/telemetry.test.js.map +1 -0
  191. package/dist/src/telemetry/types.d.ts +115 -0
  192. package/dist/src/telemetry/types.js +217 -0
  193. package/dist/src/telemetry/types.js.map +1 -0
  194. package/dist/src/telemetry/uiTelemetry.d.ts +67 -0
  195. package/dist/src/telemetry/uiTelemetry.js +131 -0
  196. package/dist/src/telemetry/uiTelemetry.js.map +1 -0
  197. package/dist/src/telemetry/uiTelemetry.test.d.ts +6 -0
  198. package/dist/src/telemetry/uiTelemetry.test.js +412 -0
  199. package/dist/src/telemetry/uiTelemetry.test.js.map +1 -0
  200. package/dist/src/tools/diffOptions.d.ts +7 -0
  201. package/dist/src/tools/diffOptions.js +10 -0
  202. package/dist/src/tools/diffOptions.js.map +1 -0
  203. package/dist/src/tools/edit.d.ts +73 -0
  204. package/dist/src/tools/edit.js +343 -0
  205. package/dist/src/tools/edit.js.map +1 -0
  206. package/dist/src/tools/edit.test.d.ts +6 -0
  207. package/dist/src/tools/edit.test.js +500 -0
  208. package/dist/src/tools/edit.test.js.map +1 -0
  209. package/dist/src/tools/glob.d.ts +58 -0
  210. package/dist/src/tools/glob.js +193 -0
  211. package/dist/src/tools/glob.js.map +1 -0
  212. package/dist/src/tools/glob.test.d.ts +6 -0
  213. package/dist/src/tools/glob.test.js +294 -0
  214. package/dist/src/tools/glob.test.js.map +1 -0
  215. package/dist/src/tools/grep.d.ts +78 -0
  216. package/dist/src/tools/grep.js +422 -0
  217. package/dist/src/tools/grep.js.map +1 -0
  218. package/dist/src/tools/grep.test.d.ts +6 -0
  219. package/dist/src/tools/grep.test.js +188 -0
  220. package/dist/src/tools/grep.test.js.map +1 -0
  221. package/dist/src/tools/ls.d.ts +83 -0
  222. package/dist/src/tools/ls.js +194 -0
  223. package/dist/src/tools/ls.js.map +1 -0
  224. package/dist/src/tools/mcp-client.d.ts +112 -0
  225. package/dist/src/tools/mcp-client.js +332 -0
  226. package/dist/src/tools/mcp-client.js.map +1 -0
  227. package/dist/src/tools/mcp-client.test.d.ts +6 -0
  228. package/dist/src/tools/mcp-client.test.js +227 -0
  229. package/dist/src/tools/mcp-client.test.js.map +1 -0
  230. package/dist/src/tools/mcp-tool.d.ts +23 -0
  231. package/dist/src/tools/mcp-tool.js +119 -0
  232. package/dist/src/tools/mcp-tool.js.map +1 -0
  233. package/dist/src/tools/mcp-tool.test.d.ts +6 -0
  234. package/dist/src/tools/mcp-tool.test.js +173 -0
  235. package/dist/src/tools/mcp-tool.test.js.map +1 -0
  236. package/dist/src/tools/memoryTool.d.ts +28 -0
  237. package/dist/src/tools/memoryTool.js +172 -0
  238. package/dist/src/tools/memoryTool.js.map +1 -0
  239. package/dist/src/tools/memoryTool.test.d.ts +6 -0
  240. package/dist/src/tools/memoryTool.test.js +181 -0
  241. package/dist/src/tools/memoryTool.test.js.map +1 -0
  242. package/dist/src/tools/modifiable-tool.d.ts +29 -0
  243. package/dist/src/tools/modifiable-tool.js +85 -0
  244. package/dist/src/tools/modifiable-tool.js.map +1 -0
  245. package/dist/src/tools/modifiable-tool.test.d.ts +6 -0
  246. package/dist/src/tools/modifiable-tool.test.js +204 -0
  247. package/dist/src/tools/modifiable-tool.test.js.map +1 -0
  248. package/dist/src/tools/read-file.d.ts +35 -0
  249. package/dist/src/tools/read-file.js +106 -0
  250. package/dist/src/tools/read-file.js.map +1 -0
  251. package/dist/src/tools/read-file.test.d.ts +6 -0
  252. package/dist/src/tools/read-file.test.js +181 -0
  253. package/dist/src/tools/read-file.test.js.map +1 -0
  254. package/dist/src/tools/read-many-files.d.ts +59 -0
  255. package/dist/src/tools/read-many-files.js +321 -0
  256. package/dist/src/tools/read-many-files.js.map +1 -0
  257. package/dist/src/tools/read-many-files.test.d.ts +6 -0
  258. package/dist/src/tools/read-many-files.test.js +312 -0
  259. package/dist/src/tools/read-many-files.test.js.map +1 -0
  260. package/dist/src/tools/shell.d.ts +43 -0
  261. package/dist/src/tools/shell.js +435 -0
  262. package/dist/src/tools/shell.js.map +1 -0
  263. package/dist/src/tools/shell.test.d.ts +6 -0
  264. package/dist/src/tools/shell.test.js +407 -0
  265. package/dist/src/tools/shell.test.js.map +1 -0
  266. package/dist/src/tools/todo-read.d.ts +15 -0
  267. package/dist/src/tools/todo-read.js +66 -0
  268. package/dist/src/tools/todo-read.js.map +1 -0
  269. package/dist/src/tools/todo-read.test.d.ts +6 -0
  270. package/dist/src/tools/todo-read.test.js +158 -0
  271. package/dist/src/tools/todo-read.test.js.map +1 -0
  272. package/dist/src/tools/todo-schemas.d.ts +43 -0
  273. package/dist/src/tools/todo-schemas.js +16 -0
  274. package/dist/src/tools/todo-schemas.js.map +1 -0
  275. package/dist/src/tools/todo-schemas.test.d.ts +6 -0
  276. package/dist/src/tools/todo-schemas.test.js +152 -0
  277. package/dist/src/tools/todo-schemas.test.js.map +1 -0
  278. package/dist/src/tools/todo-store.d.ts +15 -0
  279. package/dist/src/tools/todo-store.js +59 -0
  280. package/dist/src/tools/todo-store.js.map +1 -0
  281. package/dist/src/tools/todo-store.test.d.ts +6 -0
  282. package/dist/src/tools/todo-store.test.js +175 -0
  283. package/dist/src/tools/todo-store.test.js.map +1 -0
  284. package/dist/src/tools/todo-write.d.ts +17 -0
  285. package/dist/src/tools/todo-write.js +98 -0
  286. package/dist/src/tools/todo-write.js.map +1 -0
  287. package/dist/src/tools/todo-write.test.d.ts +6 -0
  288. package/dist/src/tools/todo-write.test.js +208 -0
  289. package/dist/src/tools/todo-write.test.js.map +1 -0
  290. package/dist/src/tools/tool-registry.d.ts +67 -0
  291. package/dist/src/tools/tool-registry.js +326 -0
  292. package/dist/src/tools/tool-registry.js.map +1 -0
  293. package/dist/src/tools/tool-registry.test.d.ts +6 -0
  294. package/dist/src/tools/tool-registry.test.js +398 -0
  295. package/dist/src/tools/tool-registry.test.js.map +1 -0
  296. package/dist/src/tools/tools.d.ts +184 -0
  297. package/dist/src/tools/tools.js +88 -0
  298. package/dist/src/tools/tools.js.map +1 -0
  299. package/dist/src/tools/web-fetch.d.ts +29 -0
  300. package/dist/src/tools/web-fetch.js +243 -0
  301. package/dist/src/tools/web-fetch.js.map +1 -0
  302. package/dist/src/tools/web-fetch.test.d.ts +6 -0
  303. package/dist/src/tools/web-fetch.test.js +70 -0
  304. package/dist/src/tools/web-fetch.test.js.map +1 -0
  305. package/dist/src/tools/web-search.d.ts +49 -0
  306. package/dist/src/tools/web-search.js +120 -0
  307. package/dist/src/tools/web-search.js.map +1 -0
  308. package/dist/src/tools/write-file.d.ts +42 -0
  309. package/dist/src/tools/write-file.js +248 -0
  310. package/dist/src/tools/write-file.js.map +1 -0
  311. package/dist/src/tools/write-file.test.d.ts +6 -0
  312. package/dist/src/tools/write-file.test.js +413 -0
  313. package/dist/src/tools/write-file.test.js.map +1 -0
  314. package/dist/src/utils/LruCache.d.ts +13 -0
  315. package/dist/src/utils/LruCache.js +38 -0
  316. package/dist/src/utils/LruCache.js.map +1 -0
  317. package/dist/src/utils/bfsFileSearch.d.ts +22 -0
  318. package/dist/src/utils/bfsFileSearch.js +62 -0
  319. package/dist/src/utils/bfsFileSearch.js.map +1 -0
  320. package/dist/src/utils/bfsFileSearch.test.d.ts +6 -0
  321. package/dist/src/utils/bfsFileSearch.test.js +129 -0
  322. package/dist/src/utils/bfsFileSearch.test.js.map +1 -0
  323. package/dist/src/utils/editCorrector.d.ts +53 -0
  324. package/dist/src/utils/editCorrector.js +546 -0
  325. package/dist/src/utils/editCorrector.js.map +1 -0
  326. package/dist/src/utils/editCorrector.test.d.ts +6 -0
  327. package/dist/src/utils/editCorrector.test.js +564 -0
  328. package/dist/src/utils/editCorrector.test.js.map +1 -0
  329. package/dist/src/utils/editor.d.ts +28 -0
  330. package/dist/src/utils/editor.js +163 -0
  331. package/dist/src/utils/editor.js.map +1 -0
  332. package/dist/src/utils/editor.test.d.ts +6 -0
  333. package/dist/src/utils/editor.test.js +293 -0
  334. package/dist/src/utils/editor.test.js.map +1 -0
  335. package/dist/src/utils/errorReporting.d.ts +14 -0
  336. package/dist/src/utils/errorReporting.js +88 -0
  337. package/dist/src/utils/errorReporting.js.map +1 -0
  338. package/dist/src/utils/errorReporting.test.d.ts +6 -0
  339. package/dist/src/utils/errorReporting.test.js +124 -0
  340. package/dist/src/utils/errorReporting.test.js.map +1 -0
  341. package/dist/src/utils/errors.d.ts +14 -0
  342. package/dist/src/utils/errors.js +54 -0
  343. package/dist/src/utils/errors.js.map +1 -0
  344. package/dist/src/utils/fetch.d.ts +11 -0
  345. package/dist/src/utils/fetch.js +51 -0
  346. package/dist/src/utils/fetch.js.map +1 -0
  347. package/dist/src/utils/fileUtils.d.ts +49 -0
  348. package/dist/src/utils/fileUtils.js +286 -0
  349. package/dist/src/utils/fileUtils.js.map +1 -0
  350. package/dist/src/utils/fileUtils.test.d.ts +6 -0
  351. package/dist/src/utils/fileUtils.test.js +321 -0
  352. package/dist/src/utils/fileUtils.test.js.map +1 -0
  353. package/dist/src/utils/flashFallback.integration.test.d.ts +6 -0
  354. package/dist/src/utils/flashFallback.integration.test.js +112 -0
  355. package/dist/src/utils/flashFallback.integration.test.js.map +1 -0
  356. package/dist/src/utils/generateContentResponseUtilities.d.ts +14 -0
  357. package/dist/src/utils/generateContentResponseUtilities.js +92 -0
  358. package/dist/src/utils/generateContentResponseUtilities.js.map +1 -0
  359. package/dist/src/utils/generateContentResponseUtilities.test.d.ts +6 -0
  360. package/dist/src/utils/generateContentResponseUtilities.test.js +273 -0
  361. package/dist/src/utils/generateContentResponseUtilities.test.js.map +1 -0
  362. package/dist/src/utils/getFolderStructure.d.ts +30 -0
  363. package/dist/src/utils/getFolderStructure.js +247 -0
  364. package/dist/src/utils/getFolderStructure.js.map +1 -0
  365. package/dist/src/utils/getFolderStructure.test.d.ts +6 -0
  366. package/dist/src/utils/getFolderStructure.test.js +298 -0
  367. package/dist/src/utils/getFolderStructure.test.js.map +1 -0
  368. package/dist/src/utils/gitIgnoreParser.d.ts +20 -0
  369. package/dist/src/utils/gitIgnoreParser.js +64 -0
  370. package/dist/src/utils/gitIgnoreParser.js.map +1 -0
  371. package/dist/src/utils/gitIgnoreParser.test.d.ts +6 -0
  372. package/dist/src/utils/gitIgnoreParser.test.js +145 -0
  373. package/dist/src/utils/gitIgnoreParser.test.js.map +1 -0
  374. package/dist/src/utils/gitUtils.d.ts +17 -0
  375. package/dist/src/utils/gitUtils.js +61 -0
  376. package/dist/src/utils/gitUtils.js.map +1 -0
  377. package/dist/src/utils/memoryDiscovery.d.ts +14 -0
  378. package/dist/src/utils/memoryDiscovery.js +219 -0
  379. package/dist/src/utils/memoryDiscovery.js.map +1 -0
  380. package/dist/src/utils/memoryDiscovery.test.d.ts +6 -0
  381. package/dist/src/utils/memoryDiscovery.test.js +432 -0
  382. package/dist/src/utils/memoryDiscovery.test.js.map +1 -0
  383. package/dist/src/utils/memoryImportProcessor.d.ts +35 -0
  384. package/dist/src/utils/memoryImportProcessor.js +141 -0
  385. package/dist/src/utils/memoryImportProcessor.js.map +1 -0
  386. package/dist/src/utils/memoryImportProcessor.test.d.ts +6 -0
  387. package/dist/src/utils/memoryImportProcessor.test.js +170 -0
  388. package/dist/src/utils/memoryImportProcessor.test.js.map +1 -0
  389. package/dist/src/utils/messageInspectors.d.ts +8 -0
  390. package/dist/src/utils/messageInspectors.js +16 -0
  391. package/dist/src/utils/messageInspectors.js.map +1 -0
  392. package/dist/src/utils/nextSpeakerChecker.d.ts +12 -0
  393. package/dist/src/utils/nextSpeakerChecker.js +113 -0
  394. package/dist/src/utils/nextSpeakerChecker.js.map +1 -0
  395. package/dist/src/utils/nextSpeakerChecker.test.d.ts +6 -0
  396. package/dist/src/utils/nextSpeakerChecker.test.js +168 -0
  397. package/dist/src/utils/nextSpeakerChecker.test.js.map +1 -0
  398. package/dist/src/utils/paths.d.ts +49 -0
  399. package/dist/src/utils/paths.js +145 -0
  400. package/dist/src/utils/paths.js.map +1 -0
  401. package/dist/src/utils/quotaErrorDetection.d.ts +22 -0
  402. package/dist/src/utils/quotaErrorDetection.js +67 -0
  403. package/dist/src/utils/quotaErrorDetection.js.map +1 -0
  404. package/dist/src/utils/retry.d.ts +21 -0
  405. package/dist/src/utils/retry.js +276 -0
  406. package/dist/src/utils/retry.js.map +1 -0
  407. package/dist/src/utils/retry.test.d.ts +6 -0
  408. package/dist/src/utils/retry.test.js +322 -0
  409. package/dist/src/utils/retry.test.js.map +1 -0
  410. package/dist/src/utils/safeJsonStringify.d.ts +13 -0
  411. package/dist/src/utils/safeJsonStringify.js +25 -0
  412. package/dist/src/utils/safeJsonStringify.js.map +1 -0
  413. package/dist/src/utils/safeJsonStringify.test.d.ts +6 -0
  414. package/dist/src/utils/safeJsonStringify.test.js +61 -0
  415. package/dist/src/utils/safeJsonStringify.test.js.map +1 -0
  416. package/dist/src/utils/schemaValidator.d.ts +23 -0
  417. package/dist/src/utils/schemaValidator.js +142 -0
  418. package/dist/src/utils/schemaValidator.js.map +1 -0
  419. package/dist/src/utils/schemaValidator.test.d.ts +6 -0
  420. package/dist/src/utils/schemaValidator.test.js +146 -0
  421. package/dist/src/utils/schemaValidator.test.js.map +1 -0
  422. package/dist/src/utils/session.d.ts +6 -0
  423. package/dist/src/utils/session.js +8 -0
  424. package/dist/src/utils/session.js.map +1 -0
  425. package/dist/src/utils/summarizer.d.ts +25 -0
  426. package/dist/src/utils/summarizer.js +80 -0
  427. package/dist/src/utils/summarizer.js.map +1 -0
  428. package/dist/src/utils/summarizer.test.d.ts +6 -0
  429. package/dist/src/utils/summarizer.test.js +131 -0
  430. package/dist/src/utils/summarizer.test.js.map +1 -0
  431. package/dist/src/utils/testUtils.d.ts +29 -0
  432. package/dist/src/utils/testUtils.js +70 -0
  433. package/dist/src/utils/testUtils.js.map +1 -0
  434. package/dist/src/utils/user_account.d.ts +9 -0
  435. package/dist/src/utils/user_account.js +99 -0
  436. package/dist/src/utils/user_account.js.map +1 -0
  437. package/dist/src/utils/user_account.test.d.ts +6 -0
  438. package/dist/src/utils/user_account.test.js +153 -0
  439. package/dist/src/utils/user_account.test.js.map +1 -0
  440. package/dist/src/utils/user_id.d.ts +11 -0
  441. package/dist/src/utils/user_id.js +49 -0
  442. package/dist/src/utils/user_id.js.map +1 -0
  443. package/dist/src/utils/user_id.test.d.ts +6 -0
  444. package/dist/src/utils/user_id.test.js +21 -0
  445. package/dist/src/utils/user_id.test.js.map +1 -0
  446. package/dist/tsconfig.tsbuildinfo +1 -0
  447. package/dist/vybestack-llxprt-code-core-0.1.12.tgz +0 -0
  448. package/package.json +62 -0
@@ -0,0 +1,273 @@
1
+ /**
2
+ * @license
3
+ * Copyright 2025 Google LLC
4
+ * SPDX-License-Identifier: Apache-2.0
5
+ */
6
+ import { describe, it, expect } from 'vitest';
7
+ import { getResponseText, getResponseTextFromParts, getFunctionCalls, getFunctionCallsFromParts, getFunctionCallsAsJson, getFunctionCallsFromPartsAsJson, getStructuredResponse, getStructuredResponseFromParts, } from './generateContentResponseUtilities.js';
8
+ import { FinishReason, } from '@google/genai';
9
+ const mockTextPart = (text) => ({ text });
10
+ const mockFunctionCallPart = (name, args) => ({
11
+ functionCall: { name, args: args ?? {} },
12
+ });
13
+ const mockResponse = (parts, finishReason = FinishReason.STOP, safetyRatings = []) => ({
14
+ candidates: [
15
+ {
16
+ content: {
17
+ parts,
18
+ role: 'model',
19
+ },
20
+ index: 0,
21
+ finishReason,
22
+ safetyRatings,
23
+ },
24
+ ],
25
+ promptFeedback: {
26
+ safetyRatings: [],
27
+ },
28
+ text: undefined,
29
+ data: undefined,
30
+ functionCalls: undefined,
31
+ executableCode: undefined,
32
+ codeExecutionResult: undefined,
33
+ });
34
+ const minimalMockResponse = (candidates) => ({
35
+ candidates,
36
+ promptFeedback: { safetyRatings: [] },
37
+ text: undefined,
38
+ data: undefined,
39
+ functionCalls: undefined,
40
+ executableCode: undefined,
41
+ codeExecutionResult: undefined,
42
+ });
43
+ describe('generateContentResponseUtilities', () => {
44
+ describe('getResponseText', () => {
45
+ it('should return undefined for no candidates', () => {
46
+ expect(getResponseText(minimalMockResponse(undefined))).toBeUndefined();
47
+ });
48
+ it('should return undefined for empty candidates array', () => {
49
+ expect(getResponseText(minimalMockResponse([]))).toBeUndefined();
50
+ });
51
+ it('should return undefined for no parts', () => {
52
+ const response = mockResponse([]);
53
+ expect(getResponseText(response)).toBeUndefined();
54
+ });
55
+ it('should extract text from a single text part', () => {
56
+ const response = mockResponse([mockTextPart('Hello')]);
57
+ expect(getResponseText(response)).toBe('Hello');
58
+ });
59
+ it('should concatenate text from multiple text parts', () => {
60
+ const response = mockResponse([
61
+ mockTextPart('Hello '),
62
+ mockTextPart('World'),
63
+ ]);
64
+ expect(getResponseText(response)).toBe('Hello World');
65
+ });
66
+ it('should ignore function call parts', () => {
67
+ const response = mockResponse([
68
+ mockTextPart('Hello '),
69
+ mockFunctionCallPart('testFunc'),
70
+ mockTextPart('World'),
71
+ ]);
72
+ expect(getResponseText(response)).toBe('Hello World');
73
+ });
74
+ it('should return undefined if only function call parts exist', () => {
75
+ const response = mockResponse([
76
+ mockFunctionCallPart('testFunc'),
77
+ mockFunctionCallPart('anotherFunc'),
78
+ ]);
79
+ expect(getResponseText(response)).toBeUndefined();
80
+ });
81
+ });
82
+ describe('getResponseTextFromParts', () => {
83
+ it('should return undefined for no parts', () => {
84
+ expect(getResponseTextFromParts([])).toBeUndefined();
85
+ });
86
+ it('should extract text from a single text part', () => {
87
+ expect(getResponseTextFromParts([mockTextPart('Hello')])).toBe('Hello');
88
+ });
89
+ it('should concatenate text from multiple text parts', () => {
90
+ expect(getResponseTextFromParts([
91
+ mockTextPart('Hello '),
92
+ mockTextPart('World'),
93
+ ])).toBe('Hello World');
94
+ });
95
+ it('should ignore function call parts', () => {
96
+ expect(getResponseTextFromParts([
97
+ mockTextPart('Hello '),
98
+ mockFunctionCallPart('testFunc'),
99
+ mockTextPart('World'),
100
+ ])).toBe('Hello World');
101
+ });
102
+ it('should return undefined if only function call parts exist', () => {
103
+ expect(getResponseTextFromParts([
104
+ mockFunctionCallPart('testFunc'),
105
+ mockFunctionCallPart('anotherFunc'),
106
+ ])).toBeUndefined();
107
+ });
108
+ });
109
+ describe('getFunctionCalls', () => {
110
+ it('should return undefined for no candidates', () => {
111
+ expect(getFunctionCalls(minimalMockResponse(undefined))).toBeUndefined();
112
+ });
113
+ it('should return undefined for empty candidates array', () => {
114
+ expect(getFunctionCalls(minimalMockResponse([]))).toBeUndefined();
115
+ });
116
+ it('should return undefined for no parts', () => {
117
+ const response = mockResponse([]);
118
+ expect(getFunctionCalls(response)).toBeUndefined();
119
+ });
120
+ it('should extract a single function call', () => {
121
+ const func = { name: 'testFunc', args: { a: 1 } };
122
+ const response = mockResponse([
123
+ mockFunctionCallPart(func.name, func.args),
124
+ ]);
125
+ expect(getFunctionCalls(response)).toEqual([func]);
126
+ });
127
+ it('should extract multiple function calls', () => {
128
+ const func1 = { name: 'testFunc1', args: { a: 1 } };
129
+ const func2 = { name: 'testFunc2', args: { b: 2 } };
130
+ const response = mockResponse([
131
+ mockFunctionCallPart(func1.name, func1.args),
132
+ mockFunctionCallPart(func2.name, func2.args),
133
+ ]);
134
+ expect(getFunctionCalls(response)).toEqual([func1, func2]);
135
+ });
136
+ it('should ignore text parts', () => {
137
+ const func = { name: 'testFunc', args: { a: 1 } };
138
+ const response = mockResponse([
139
+ mockTextPart('Some text'),
140
+ mockFunctionCallPart(func.name, func.args),
141
+ mockTextPart('More text'),
142
+ ]);
143
+ expect(getFunctionCalls(response)).toEqual([func]);
144
+ });
145
+ it('should return undefined if only text parts exist', () => {
146
+ const response = mockResponse([
147
+ mockTextPart('Some text'),
148
+ mockTextPart('More text'),
149
+ ]);
150
+ expect(getFunctionCalls(response)).toBeUndefined();
151
+ });
152
+ });
153
+ describe('getFunctionCallsFromParts', () => {
154
+ it('should return undefined for no parts', () => {
155
+ expect(getFunctionCallsFromParts([])).toBeUndefined();
156
+ });
157
+ it('should extract a single function call', () => {
158
+ const func = { name: 'testFunc', args: { a: 1 } };
159
+ expect(getFunctionCallsFromParts([mockFunctionCallPart(func.name, func.args)])).toEqual([func]);
160
+ });
161
+ it('should extract multiple function calls', () => {
162
+ const func1 = { name: 'testFunc1', args: { a: 1 } };
163
+ const func2 = { name: 'testFunc2', args: { b: 2 } };
164
+ expect(getFunctionCallsFromParts([
165
+ mockFunctionCallPart(func1.name, func1.args),
166
+ mockFunctionCallPart(func2.name, func2.args),
167
+ ])).toEqual([func1, func2]);
168
+ });
169
+ it('should ignore text parts', () => {
170
+ const func = { name: 'testFunc', args: { a: 1 } };
171
+ expect(getFunctionCallsFromParts([
172
+ mockTextPart('Some text'),
173
+ mockFunctionCallPart(func.name, func.args),
174
+ mockTextPart('More text'),
175
+ ])).toEqual([func]);
176
+ });
177
+ it('should return undefined if only text parts exist', () => {
178
+ expect(getFunctionCallsFromParts([
179
+ mockTextPart('Some text'),
180
+ mockTextPart('More text'),
181
+ ])).toBeUndefined();
182
+ });
183
+ });
184
+ describe('getFunctionCallsAsJson', () => {
185
+ it('should return JSON string of function calls', () => {
186
+ const func1 = { name: 'testFunc1', args: { a: 1 } };
187
+ const func2 = { name: 'testFunc2', args: { b: 2 } };
188
+ const response = mockResponse([
189
+ mockFunctionCallPart(func1.name, func1.args),
190
+ mockTextPart('text in between'),
191
+ mockFunctionCallPart(func2.name, func2.args),
192
+ ]);
193
+ const expectedJson = JSON.stringify([func1, func2], null, 2);
194
+ expect(getFunctionCallsAsJson(response)).toBe(expectedJson);
195
+ });
196
+ it('should return undefined if no function calls', () => {
197
+ const response = mockResponse([mockTextPart('Hello')]);
198
+ expect(getFunctionCallsAsJson(response)).toBeUndefined();
199
+ });
200
+ });
201
+ describe('getFunctionCallsFromPartsAsJson', () => {
202
+ it('should return JSON string of function calls from parts', () => {
203
+ const func1 = { name: 'testFunc1', args: { a: 1 } };
204
+ const func2 = { name: 'testFunc2', args: { b: 2 } };
205
+ const parts = [
206
+ mockFunctionCallPart(func1.name, func1.args),
207
+ mockTextPart('text in between'),
208
+ mockFunctionCallPart(func2.name, func2.args),
209
+ ];
210
+ const expectedJson = JSON.stringify([func1, func2], null, 2);
211
+ expect(getFunctionCallsFromPartsAsJson(parts)).toBe(expectedJson);
212
+ });
213
+ it('should return undefined if no function calls in parts', () => {
214
+ const parts = [mockTextPart('Hello')];
215
+ expect(getFunctionCallsFromPartsAsJson(parts)).toBeUndefined();
216
+ });
217
+ });
218
+ describe('getStructuredResponse', () => {
219
+ it('should return only text if only text exists', () => {
220
+ const response = mockResponse([mockTextPart('Hello World')]);
221
+ expect(getStructuredResponse(response)).toBe('Hello World');
222
+ });
223
+ it('should return only function call JSON if only function calls exist', () => {
224
+ const func = { name: 'testFunc', args: { data: 'payload' } };
225
+ const response = mockResponse([
226
+ mockFunctionCallPart(func.name, func.args),
227
+ ]);
228
+ const expectedJson = JSON.stringify([func], null, 2);
229
+ expect(getStructuredResponse(response)).toBe(expectedJson);
230
+ });
231
+ it('should return text and function call JSON if both exist', () => {
232
+ const text = 'Consider this data:';
233
+ const func = { name: 'processData', args: { item: 42 } };
234
+ const response = mockResponse([
235
+ mockTextPart(text),
236
+ mockFunctionCallPart(func.name, func.args),
237
+ ]);
238
+ const expectedJson = JSON.stringify([func], null, 2);
239
+ expect(getStructuredResponse(response)).toBe(`${text}\n${expectedJson}`);
240
+ });
241
+ it('should return undefined if neither text nor function calls exist', () => {
242
+ const response = mockResponse([]);
243
+ expect(getStructuredResponse(response)).toBeUndefined();
244
+ });
245
+ });
246
+ describe('getStructuredResponseFromParts', () => {
247
+ it('should return only text if only text exists in parts', () => {
248
+ const parts = [mockTextPart('Hello World')];
249
+ expect(getStructuredResponseFromParts(parts)).toBe('Hello World');
250
+ });
251
+ it('should return only function call JSON if only function calls exist in parts', () => {
252
+ const func = { name: 'testFunc', args: { data: 'payload' } };
253
+ const parts = [mockFunctionCallPart(func.name, func.args)];
254
+ const expectedJson = JSON.stringify([func], null, 2);
255
+ expect(getStructuredResponseFromParts(parts)).toBe(expectedJson);
256
+ });
257
+ it('should return text and function call JSON if both exist in parts', () => {
258
+ const text = 'Consider this data:';
259
+ const func = { name: 'processData', args: { item: 42 } };
260
+ const parts = [
261
+ mockTextPart(text),
262
+ mockFunctionCallPart(func.name, func.args),
263
+ ];
264
+ const expectedJson = JSON.stringify([func], null, 2);
265
+ expect(getStructuredResponseFromParts(parts)).toBe(`${text}\n${expectedJson}`);
266
+ });
267
+ it('should return undefined if neither text nor function calls exist in parts', () => {
268
+ const parts = [];
269
+ expect(getStructuredResponseFromParts(parts)).toBeUndefined();
270
+ });
271
+ });
272
+ });
273
+ //# sourceMappingURL=generateContentResponseUtilities.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"generateContentResponseUtilities.test.js","sourceRoot":"","sources":["../../../src/utils/generateContentResponseUtilities.test.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,30 @@
1
+ /**
2
+ * @license
3
+ * Copyright 2025 Google LLC
4
+ * SPDX-License-Identifier: Apache-2.0
5
+ */
6
+ import { FileDiscoveryService } from '../services/fileDiscoveryService.js';
7
+ /** Options for customizing folder structure retrieval. */
8
+ interface FolderStructureOptions {
9
+ /** Maximum number of files and folders combined to display. Defaults to 200. */
10
+ maxItems?: number;
11
+ /** Set of folder names to ignore completely. Case-sensitive. */
12
+ ignoredFolders?: Set<string>;
13
+ /** Optional regex to filter included files by name. */
14
+ fileIncludePattern?: RegExp;
15
+ /** For filtering files. */
16
+ fileService?: FileDiscoveryService;
17
+ /** Whether to use .gitignore patterns. */
18
+ respectGitIgnore?: boolean;
19
+ }
20
+ /**
21
+ * Generates a string representation of a directory's structure,
22
+ * limiting the number of items displayed. Ignored folders are shown
23
+ * followed by '...' instead of their contents.
24
+ *
25
+ * @param directory The absolute or relative path to the directory.
26
+ * @param options Optional configuration settings.
27
+ * @returns A promise resolving to the formatted folder structure string.
28
+ */
29
+ export declare function getFolderStructure(directory: string, options?: FolderStructureOptions): Promise<string>;
30
+ export {};
@@ -0,0 +1,247 @@
1
+ /**
2
+ * @license
3
+ * Copyright 2025 Google LLC
4
+ * SPDX-License-Identifier: Apache-2.0
5
+ */
6
+ import * as fs from 'fs/promises';
7
+ import * as path from 'path';
8
+ import { getErrorMessage, isNodeError } from './errors.js';
9
+ const MAX_ITEMS = 200;
10
+ const TRUNCATION_INDICATOR = '...';
11
+ const DEFAULT_IGNORED_FOLDERS = new Set(['node_modules', '.git', 'dist']);
12
+ // --- Interfaces ---
13
+ // --- Helper Functions ---
14
+ async function readFullStructure(rootPath, options) {
15
+ const rootName = path.basename(rootPath);
16
+ const rootNode = {
17
+ name: rootName,
18
+ path: rootPath,
19
+ files: [],
20
+ subFolders: [],
21
+ totalChildren: 0,
22
+ totalFiles: 0,
23
+ };
24
+ const queue = [
25
+ { folderInfo: rootNode, currentPath: rootPath },
26
+ ];
27
+ let currentItemCount = 0;
28
+ // Count the root node itself as one item if we are not just listing its content
29
+ const processedPaths = new Set(); // To avoid processing same path if symlinks create loops
30
+ while (queue.length > 0) {
31
+ const { folderInfo, currentPath } = queue.shift();
32
+ if (processedPaths.has(currentPath)) {
33
+ continue;
34
+ }
35
+ processedPaths.add(currentPath);
36
+ if (currentItemCount >= options.maxItems) {
37
+ // If the root itself caused us to exceed, we can't really show anything.
38
+ // Otherwise, this folder won't be processed further.
39
+ // The parent that queued this would have set its own hasMoreSubfolders flag.
40
+ continue;
41
+ }
42
+ let entries;
43
+ try {
44
+ const rawEntries = await fs.readdir(currentPath, { withFileTypes: true });
45
+ // Sort entries alphabetically by name for consistent processing order
46
+ entries = rawEntries.sort((a, b) => a.name.localeCompare(b.name));
47
+ }
48
+ catch (error) {
49
+ if (isNodeError(error) &&
50
+ (error.code === 'EACCES' || error.code === 'ENOENT')) {
51
+ console.warn(`Warning: Could not read directory ${currentPath}: ${error.message}`);
52
+ if (currentPath === rootPath && error.code === 'ENOENT') {
53
+ return null; // Root directory itself not found
54
+ }
55
+ // For other EACCES/ENOENT on subdirectories, just skip them.
56
+ continue;
57
+ }
58
+ throw error;
59
+ }
60
+ const filesInCurrentDir = [];
61
+ const subFoldersInCurrentDir = [];
62
+ // Process files first in the current directory
63
+ for (const entry of entries) {
64
+ if (entry.isFile()) {
65
+ if (currentItemCount >= options.maxItems) {
66
+ folderInfo.hasMoreFiles = true;
67
+ break;
68
+ }
69
+ const fileName = entry.name;
70
+ const filePath = path.join(currentPath, fileName);
71
+ if (options.respectGitIgnore && options.fileService) {
72
+ if (options.fileService.shouldGitIgnoreFile(filePath)) {
73
+ continue;
74
+ }
75
+ }
76
+ if (!options.fileIncludePattern ||
77
+ options.fileIncludePattern.test(fileName)) {
78
+ filesInCurrentDir.push(fileName);
79
+ currentItemCount++;
80
+ folderInfo.totalFiles++;
81
+ folderInfo.totalChildren++;
82
+ }
83
+ }
84
+ }
85
+ folderInfo.files = filesInCurrentDir;
86
+ // Then process directories and queue them
87
+ for (const entry of entries) {
88
+ if (entry.isDirectory()) {
89
+ // Check if adding this directory ITSELF would meet or exceed maxItems
90
+ // (currentItemCount refers to items *already* added before this one)
91
+ if (currentItemCount >= options.maxItems) {
92
+ folderInfo.hasMoreSubfolders = true;
93
+ break; // Already at limit, cannot add this folder or any more
94
+ }
95
+ // If adding THIS folder makes us hit the limit exactly, and it might have children,
96
+ // it's better to show '...' for the parent, unless this is the very last item slot.
97
+ // This logic is tricky. Let's try a simpler: if we can't add this item, mark and break.
98
+ const subFolderName = entry.name;
99
+ const subFolderPath = path.join(currentPath, subFolderName);
100
+ let isIgnoredByGit = false;
101
+ if (options.respectGitIgnore && options.fileService) {
102
+ if (options.fileService.shouldGitIgnoreFile(subFolderPath)) {
103
+ isIgnoredByGit = true;
104
+ }
105
+ }
106
+ if (options.ignoredFolders.has(subFolderName) || isIgnoredByGit) {
107
+ const ignoredSubFolder = {
108
+ name: subFolderName,
109
+ path: subFolderPath,
110
+ files: [],
111
+ subFolders: [],
112
+ totalChildren: 0,
113
+ totalFiles: 0,
114
+ isIgnored: true,
115
+ };
116
+ subFoldersInCurrentDir.push(ignoredSubFolder);
117
+ currentItemCount++; // Count the ignored folder itself
118
+ folderInfo.totalChildren++; // Also counts towards parent's children
119
+ continue;
120
+ }
121
+ const subFolderNode = {
122
+ name: subFolderName,
123
+ path: subFolderPath,
124
+ files: [],
125
+ subFolders: [],
126
+ totalChildren: 0,
127
+ totalFiles: 0,
128
+ };
129
+ subFoldersInCurrentDir.push(subFolderNode);
130
+ currentItemCount++;
131
+ folderInfo.totalChildren++; // Counts towards parent's children
132
+ // Add to queue for processing its children later
133
+ queue.push({ folderInfo: subFolderNode, currentPath: subFolderPath });
134
+ }
135
+ }
136
+ folderInfo.subFolders = subFoldersInCurrentDir;
137
+ }
138
+ return rootNode;
139
+ }
140
+ /**
141
+ * Reads the directory structure using BFS, respecting maxItems.
142
+ * @param node The current node in the reduced structure.
143
+ * @param indent The current indentation string.
144
+ * @param isLast Sibling indicator.
145
+ * @param builder Array to build the string lines.
146
+ */
147
+ function formatStructure(node, currentIndent, isLastChildOfParent, isProcessingRootNode, builder) {
148
+ const connector = isLastChildOfParent ? '└───' : '├───';
149
+ // The root node of the structure (the one passed initially to getFolderStructure)
150
+ // is not printed with a connector line itself, only its name as a header.
151
+ // Its children are printed relative to that conceptual root.
152
+ // Ignored root nodes ARE printed with a connector.
153
+ if (!isProcessingRootNode || node.isIgnored) {
154
+ builder.push(`${currentIndent}${connector}${node.name}/${node.isIgnored ? TRUNCATION_INDICATOR : ''}`);
155
+ }
156
+ // Determine the indent for the children of *this* node.
157
+ // If *this* node was the root of the whole structure, its children start with no indent before their connectors.
158
+ // Otherwise, children's indent extends from the current node's indent.
159
+ const indentForChildren = isProcessingRootNode
160
+ ? ''
161
+ : currentIndent + (isLastChildOfParent ? ' ' : '│ ');
162
+ // Render files of the current node
163
+ const fileCount = node.files.length;
164
+ for (let i = 0; i < fileCount; i++) {
165
+ const isLastFileAmongSiblings = i === fileCount - 1 &&
166
+ node.subFolders.length === 0 &&
167
+ !node.hasMoreSubfolders;
168
+ const fileConnector = isLastFileAmongSiblings ? '└───' : '├───';
169
+ builder.push(`${indentForChildren}${fileConnector}${node.files[i]}`);
170
+ }
171
+ if (node.hasMoreFiles) {
172
+ const isLastIndicatorAmongSiblings = node.subFolders.length === 0 && !node.hasMoreSubfolders;
173
+ const fileConnector = isLastIndicatorAmongSiblings ? '└───' : '├───';
174
+ builder.push(`${indentForChildren}${fileConnector}${TRUNCATION_INDICATOR}`);
175
+ }
176
+ // Render subfolders of the current node
177
+ const subFolderCount = node.subFolders.length;
178
+ for (let i = 0; i < subFolderCount; i++) {
179
+ const isLastSubfolderAmongSiblings = i === subFolderCount - 1 && !node.hasMoreSubfolders;
180
+ // Children are never the root node being processed initially.
181
+ formatStructure(node.subFolders[i], indentForChildren, isLastSubfolderAmongSiblings, false, builder);
182
+ }
183
+ if (node.hasMoreSubfolders) {
184
+ builder.push(`${indentForChildren}└───${TRUNCATION_INDICATOR}`);
185
+ }
186
+ }
187
+ // --- Main Exported Function ---
188
+ /**
189
+ * Generates a string representation of a directory's structure,
190
+ * limiting the number of items displayed. Ignored folders are shown
191
+ * followed by '...' instead of their contents.
192
+ *
193
+ * @param directory The absolute or relative path to the directory.
194
+ * @param options Optional configuration settings.
195
+ * @returns A promise resolving to the formatted folder structure string.
196
+ */
197
+ export async function getFolderStructure(directory, options) {
198
+ const resolvedPath = path.resolve(directory);
199
+ const mergedOptions = {
200
+ maxItems: options?.maxItems ?? MAX_ITEMS,
201
+ ignoredFolders: options?.ignoredFolders ?? DEFAULT_IGNORED_FOLDERS,
202
+ fileIncludePattern: options?.fileIncludePattern,
203
+ fileService: options?.fileService,
204
+ respectGitIgnore: options?.respectGitIgnore ?? true,
205
+ };
206
+ try {
207
+ // 1. Read the structure using BFS, respecting maxItems
208
+ const structureRoot = await readFullStructure(resolvedPath, mergedOptions);
209
+ if (!structureRoot) {
210
+ return `Error: Could not read directory "${resolvedPath}". Check path and permissions.`;
211
+ }
212
+ // 2. Format the structure into a string
213
+ const structureLines = [];
214
+ // Pass true for isRoot for the initial call
215
+ formatStructure(structureRoot, '', true, true, structureLines);
216
+ // 3. Build the final output string
217
+ const displayPath = resolvedPath.replace(/\\/g, '/');
218
+ let disclaimer = '';
219
+ // Check if truncation occurred anywhere or if ignored folders are present.
220
+ // A simple check: if any node indicates more files/subfolders, or is ignored.
221
+ let truncationOccurred = false;
222
+ function checkForTruncation(node) {
223
+ if (node.hasMoreFiles || node.hasMoreSubfolders || node.isIgnored) {
224
+ truncationOccurred = true;
225
+ }
226
+ if (!truncationOccurred) {
227
+ for (const sub of node.subFolders) {
228
+ checkForTruncation(sub);
229
+ if (truncationOccurred)
230
+ break;
231
+ }
232
+ }
233
+ }
234
+ checkForTruncation(structureRoot);
235
+ if (truncationOccurred) {
236
+ disclaimer = `Folders or files indicated with ${TRUNCATION_INDICATOR} contain more items not shown, were ignored, or the display limit (${mergedOptions.maxItems} items) was reached.`;
237
+ }
238
+ const summary = `Showing up to ${mergedOptions.maxItems} items (files + folders). ${disclaimer}`.trim();
239
+ const output = `${summary}\n\n${displayPath}/\n${structureLines.join('\n')}`;
240
+ return output;
241
+ }
242
+ catch (error) {
243
+ console.error(`Error getting folder structure for ${resolvedPath}:`, error);
244
+ return `Error processing directory "${resolvedPath}": ${getErrorMessage(error)}`;
245
+ }
246
+ }
247
+ //# sourceMappingURL=getFolderStructure.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"getFolderStructure.js","sourceRoot":"","sources":["../../../src/utils/getFolderStructure.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,6 @@
1
+ /**
2
+ * @license
3
+ * Copyright 2025 Google LLC
4
+ * SPDX-License-Identifier: Apache-2.0
5
+ */
6
+ export {};