@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,102 @@
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 * as os from 'os';
9
+ import { isNodeError } from '../utils/errors.js';
10
+ import { exec } from 'node:child_process';
11
+ import { simpleGit, CheckRepoActions } from 'simple-git';
12
+ import { getProjectHash, LLXPRT_DIR, ensureLlxprtDirExists, } from '../utils/paths.js';
13
+ export class GitService {
14
+ projectRoot;
15
+ constructor(projectRoot) {
16
+ this.projectRoot = path.resolve(projectRoot);
17
+ }
18
+ getHistoryDir() {
19
+ ensureLlxprtDirExists();
20
+ const hash = getProjectHash(this.projectRoot);
21
+ return path.join(os.homedir(), LLXPRT_DIR, 'history', hash);
22
+ }
23
+ async initialize() {
24
+ const gitAvailable = await this.verifyGitAvailability();
25
+ if (!gitAvailable) {
26
+ throw new Error('Checkpointing is enabled, but Git is not installed. Please install Git or disable checkpointing to continue.');
27
+ }
28
+ this.setupShadowGitRepository();
29
+ }
30
+ verifyGitAvailability() {
31
+ return new Promise((resolve) => {
32
+ exec('git --version', (error) => {
33
+ if (error) {
34
+ resolve(false);
35
+ }
36
+ else {
37
+ resolve(true);
38
+ }
39
+ });
40
+ });
41
+ }
42
+ /**
43
+ * Creates a hidden git repository in the project root.
44
+ * The Git repository is used to support checkpointing.
45
+ */
46
+ async setupShadowGitRepository() {
47
+ const repoDir = this.getHistoryDir();
48
+ const gitConfigPath = path.join(repoDir, '.gitconfig');
49
+ await fs.mkdir(repoDir, { recursive: true });
50
+ // We don't want to inherit the user's name, email, or gpg signing
51
+ // preferences for the shadow repository, so we create a dedicated gitconfig.
52
+ const gitConfigContent = '[user]\n name = Gemini CLI\n email = gemini-cli@google.com\n[commit]\n gpgsign = false\n';
53
+ await fs.writeFile(gitConfigPath, gitConfigContent);
54
+ const repo = simpleGit(repoDir);
55
+ const isRepoDefined = await repo.checkIsRepo(CheckRepoActions.IS_REPO_ROOT);
56
+ if (!isRepoDefined) {
57
+ await repo.init(false, {
58
+ '--initial-branch': 'main',
59
+ });
60
+ await repo.commit('Initial commit', { '--allow-empty': null });
61
+ }
62
+ const userGitIgnorePath = path.join(this.projectRoot, '.gitignore');
63
+ const shadowGitIgnorePath = path.join(repoDir, '.gitignore');
64
+ let userGitIgnoreContent = '';
65
+ try {
66
+ userGitIgnoreContent = await fs.readFile(userGitIgnorePath, 'utf-8');
67
+ }
68
+ catch (error) {
69
+ if (isNodeError(error) && error.code !== 'ENOENT') {
70
+ throw error;
71
+ }
72
+ }
73
+ await fs.writeFile(shadowGitIgnorePath, userGitIgnoreContent);
74
+ }
75
+ get shadowGitRepository() {
76
+ const repoDir = this.getHistoryDir();
77
+ return simpleGit(this.projectRoot).env({
78
+ GIT_DIR: path.join(repoDir, '.git'),
79
+ GIT_WORK_TREE: this.projectRoot,
80
+ // Prevent git from using the user's global git config.
81
+ HOME: repoDir,
82
+ XDG_CONFIG_HOME: repoDir,
83
+ });
84
+ }
85
+ async getCurrentCommitHash() {
86
+ const hash = await this.shadowGitRepository.raw('rev-parse', 'HEAD');
87
+ return hash.trim();
88
+ }
89
+ async createFileSnapshot(message) {
90
+ const repo = this.shadowGitRepository;
91
+ await repo.add('.');
92
+ const commitResult = await repo.commit(message);
93
+ return commitResult.commit;
94
+ }
95
+ async restoreProjectFromSnapshot(commitHash) {
96
+ const repo = this.shadowGitRepository;
97
+ await repo.raw(['restore', '--source', commitHash, '.']);
98
+ // Removes any untracked files that were introduced post snapshot.
99
+ await repo.clean('f', ['-d']);
100
+ }
101
+ }
102
+ //# sourceMappingURL=gitService.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"gitService.js","sourceRoot":"","sources":["../../../src/services/gitService.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 {};
@@ -0,0 +1,246 @@
1
+ /**
2
+ * @license
3
+ * Copyright 2025 Google LLC
4
+ * SPDX-License-Identifier: Apache-2.0
5
+ */
6
+ import { describe, it, expect, vi, beforeEach, afterEach } from 'vitest';
7
+ import { GitService } from './gitService.js';
8
+ import * as path from 'path';
9
+ const hoistedMockExec = vi.hoisted(() => vi.fn());
10
+ vi.mock('node:child_process', () => ({
11
+ exec: hoistedMockExec,
12
+ }));
13
+ const hoistedMockMkdir = vi.hoisted(() => vi.fn());
14
+ const hoistedMockReadFile = vi.hoisted(() => vi.fn());
15
+ const hoistedMockWriteFile = vi.hoisted(() => vi.fn());
16
+ vi.mock('fs/promises', async (importOriginal) => {
17
+ const actual = (await importOriginal());
18
+ return {
19
+ ...actual,
20
+ mkdir: hoistedMockMkdir,
21
+ readFile: hoistedMockReadFile,
22
+ writeFile: hoistedMockWriteFile,
23
+ };
24
+ });
25
+ const hoistedMockEnv = vi.hoisted(() => vi.fn());
26
+ const hoistedMockSimpleGit = vi.hoisted(() => vi.fn());
27
+ const hoistedMockCheckIsRepo = vi.hoisted(() => vi.fn());
28
+ const hoistedMockInit = vi.hoisted(() => vi.fn());
29
+ const hoistedMockRaw = vi.hoisted(() => vi.fn());
30
+ const hoistedMockAdd = vi.hoisted(() => vi.fn());
31
+ const hoistedMockCommit = vi.hoisted(() => vi.fn());
32
+ vi.mock('simple-git', () => ({
33
+ simpleGit: hoistedMockSimpleGit.mockImplementation(() => ({
34
+ checkIsRepo: hoistedMockCheckIsRepo,
35
+ init: hoistedMockInit,
36
+ raw: hoistedMockRaw,
37
+ add: hoistedMockAdd,
38
+ commit: hoistedMockCommit,
39
+ env: hoistedMockEnv,
40
+ })),
41
+ CheckRepoActions: { IS_REPO_ROOT: 'is-repo-root' },
42
+ }));
43
+ const hoistedIsGitRepositoryMock = vi.hoisted(() => vi.fn());
44
+ vi.mock('../utils/gitUtils.js', () => ({
45
+ isGitRepository: hoistedIsGitRepositoryMock,
46
+ }));
47
+ const hoistedMockIsNodeError = vi.hoisted(() => vi.fn());
48
+ vi.mock('../utils/errors.js', () => ({
49
+ isNodeError: hoistedMockIsNodeError,
50
+ }));
51
+ const hoistedMockExistsSync = vi.hoisted(() => vi.fn());
52
+ const hoistedMockMkdirSync = vi.hoisted(() => vi.fn());
53
+ vi.mock('fs', async (importOriginal) => {
54
+ const actual = (await importOriginal());
55
+ return {
56
+ ...actual,
57
+ default: actual,
58
+ existsSync: hoistedMockExistsSync,
59
+ mkdirSync: hoistedMockMkdirSync,
60
+ };
61
+ });
62
+ const hoistedMockHomedir = vi.hoisted(() => vi.fn());
63
+ vi.mock('os', async (importOriginal) => {
64
+ const actual = (await importOriginal());
65
+ return {
66
+ ...actual,
67
+ default: actual,
68
+ homedir: hoistedMockHomedir,
69
+ };
70
+ });
71
+ const hoistedMockCreateHash = vi.hoisted(() => {
72
+ const mockUpdate = vi.fn().mockReturnThis();
73
+ const mockDigest = vi.fn();
74
+ return {
75
+ createHash: vi.fn(() => ({
76
+ update: mockUpdate,
77
+ digest: mockDigest,
78
+ })),
79
+ mockUpdate,
80
+ mockDigest,
81
+ };
82
+ });
83
+ vi.mock('crypto', () => ({
84
+ createHash: hoistedMockCreateHash.createHash,
85
+ }));
86
+ describe('GitService', () => {
87
+ const mockProjectRoot = '/test/project';
88
+ const mockHomedir = '/mock/home';
89
+ const mockHash = 'mock-hash';
90
+ beforeEach(() => {
91
+ vi.clearAllMocks();
92
+ hoistedIsGitRepositoryMock.mockReturnValue(true);
93
+ hoistedMockExec.mockImplementation((command, callback) => {
94
+ if (command === 'git --version') {
95
+ callback(null, 'git version 2.0.0');
96
+ }
97
+ else {
98
+ callback(new Error('Command not mocked'));
99
+ }
100
+ return {};
101
+ });
102
+ hoistedMockMkdir.mockResolvedValue(undefined);
103
+ hoistedMockReadFile.mockResolvedValue('');
104
+ hoistedMockWriteFile.mockResolvedValue(undefined);
105
+ hoistedMockIsNodeError.mockImplementation((e) => e instanceof Error);
106
+ hoistedMockHomedir.mockReturnValue(mockHomedir);
107
+ hoistedMockExistsSync.mockReturnValue(false);
108
+ hoistedMockMkdirSync.mockReturnValue(undefined);
109
+ hoistedMockCreateHash.mockUpdate.mockReturnThis();
110
+ hoistedMockCreateHash.mockDigest.mockReturnValue(mockHash);
111
+ hoistedMockEnv.mockImplementation(() => ({
112
+ checkIsRepo: hoistedMockCheckIsRepo,
113
+ init: hoistedMockInit,
114
+ raw: hoistedMockRaw,
115
+ add: hoistedMockAdd,
116
+ commit: hoistedMockCommit,
117
+ }));
118
+ hoistedMockSimpleGit.mockImplementation(() => ({
119
+ checkIsRepo: hoistedMockCheckIsRepo,
120
+ init: hoistedMockInit,
121
+ raw: hoistedMockRaw,
122
+ add: hoistedMockAdd,
123
+ commit: hoistedMockCommit,
124
+ env: hoistedMockEnv,
125
+ }));
126
+ hoistedMockCheckIsRepo.mockResolvedValue(false);
127
+ hoistedMockInit.mockResolvedValue(undefined);
128
+ hoistedMockRaw.mockResolvedValue('');
129
+ hoistedMockAdd.mockResolvedValue(undefined);
130
+ hoistedMockCommit.mockResolvedValue({
131
+ commit: 'initial',
132
+ });
133
+ });
134
+ afterEach(() => {
135
+ vi.restoreAllMocks();
136
+ });
137
+ describe('constructor', () => {
138
+ it('should successfully create an instance if projectRoot is a Git repository', () => {
139
+ expect(() => new GitService(mockProjectRoot)).not.toThrow();
140
+ });
141
+ });
142
+ describe('verifyGitAvailability', () => {
143
+ it('should resolve true if git --version command succeeds', async () => {
144
+ const service = new GitService(mockProjectRoot);
145
+ await expect(service.verifyGitAvailability()).resolves.toBe(true);
146
+ });
147
+ it('should resolve false if git --version command fails', async () => {
148
+ hoistedMockExec.mockImplementation((command, callback) => {
149
+ callback(new Error('git not found'));
150
+ return {};
151
+ });
152
+ const service = new GitService(mockProjectRoot);
153
+ await expect(service.verifyGitAvailability()).resolves.toBe(false);
154
+ });
155
+ });
156
+ describe('initialize', () => {
157
+ it('should throw an error if Git is not available', async () => {
158
+ hoistedMockExec.mockImplementation((command, callback) => {
159
+ callback(new Error('git not found'));
160
+ return {};
161
+ });
162
+ const service = new GitService(mockProjectRoot);
163
+ await expect(service.initialize()).rejects.toThrow('Checkpointing is enabled, but Git is not installed. Please install Git or disable checkpointing to continue.');
164
+ });
165
+ it('should call setupShadowGitRepository if Git is available', async () => {
166
+ const service = new GitService(mockProjectRoot);
167
+ const setupSpy = vi
168
+ .spyOn(service, 'setupShadowGitRepository')
169
+ .mockResolvedValue(undefined);
170
+ await service.initialize();
171
+ expect(setupSpy).toHaveBeenCalled();
172
+ });
173
+ });
174
+ describe('setupShadowGitRepository', () => {
175
+ const repoDir = path.join(mockHomedir, '.llxprt', 'history', mockHash);
176
+ const hiddenGitIgnorePath = path.join(repoDir, '.gitignore');
177
+ const visibleGitIgnorePath = path.join(mockProjectRoot, '.gitignore');
178
+ const gitConfigPath = path.join(repoDir, '.gitconfig');
179
+ it('should create a .gitconfig file with the correct content', async () => {
180
+ const service = new GitService(mockProjectRoot);
181
+ await service.setupShadowGitRepository();
182
+ const expectedConfigContent = '[user]\n name = Gemini CLI\n email = gemini-cli@google.com\n[commit]\n gpgsign = false\n';
183
+ expect(hoistedMockWriteFile).toHaveBeenCalledWith(gitConfigPath, expectedConfigContent);
184
+ });
185
+ it('should create history and repository directories', async () => {
186
+ const service = new GitService(mockProjectRoot);
187
+ await service.setupShadowGitRepository();
188
+ expect(hoistedMockMkdir).toHaveBeenCalledWith(repoDir, {
189
+ recursive: true,
190
+ });
191
+ });
192
+ it('should initialize git repo in historyDir if not already initialized', async () => {
193
+ hoistedMockCheckIsRepo.mockResolvedValue(false);
194
+ const service = new GitService(mockProjectRoot);
195
+ await service.setupShadowGitRepository();
196
+ expect(hoistedMockSimpleGit).toHaveBeenCalledWith(repoDir);
197
+ expect(hoistedMockInit).toHaveBeenCalled();
198
+ });
199
+ it('should not initialize git repo if already initialized', async () => {
200
+ hoistedMockCheckIsRepo.mockResolvedValue(true);
201
+ const service = new GitService(mockProjectRoot);
202
+ await service.setupShadowGitRepository();
203
+ expect(hoistedMockInit).not.toHaveBeenCalled();
204
+ });
205
+ it('should copy .gitignore from projectRoot if it exists', async () => {
206
+ const gitignoreContent = `node_modules/\n.env`;
207
+ hoistedMockReadFile.mockImplementation(async (filePath) => {
208
+ if (filePath === visibleGitIgnorePath) {
209
+ return gitignoreContent;
210
+ }
211
+ return '';
212
+ });
213
+ const service = new GitService(mockProjectRoot);
214
+ await service.setupShadowGitRepository();
215
+ expect(hoistedMockReadFile).toHaveBeenCalledWith(visibleGitIgnorePath, 'utf-8');
216
+ expect(hoistedMockWriteFile).toHaveBeenCalledWith(hiddenGitIgnorePath, gitignoreContent);
217
+ });
218
+ it('should throw an error if reading projectRoot .gitignore fails with other errors', async () => {
219
+ const readError = new Error('Read permission denied');
220
+ hoistedMockReadFile.mockImplementation(async (filePath) => {
221
+ if (filePath === visibleGitIgnorePath) {
222
+ throw readError;
223
+ }
224
+ return '';
225
+ });
226
+ hoistedMockIsNodeError.mockImplementation((e) => e instanceof Error);
227
+ const service = new GitService(mockProjectRoot);
228
+ await expect(service.setupShadowGitRepository()).rejects.toThrow('Read permission denied');
229
+ });
230
+ it('should make an initial commit if no commits exist in history repo', async () => {
231
+ hoistedMockCheckIsRepo.mockResolvedValue(false);
232
+ const service = new GitService(mockProjectRoot);
233
+ await service.setupShadowGitRepository();
234
+ expect(hoistedMockCommit).toHaveBeenCalledWith('Initial commit', {
235
+ '--allow-empty': null,
236
+ });
237
+ });
238
+ it('should not make an initial commit if commits already exist', async () => {
239
+ hoistedMockCheckIsRepo.mockResolvedValue(true);
240
+ const service = new GitService(mockProjectRoot);
241
+ await service.setupShadowGitRepository();
242
+ expect(hoistedMockCommit).not.toHaveBeenCalled();
243
+ });
244
+ });
245
+ });
246
+ //# sourceMappingURL=gitService.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"gitService.test.js","sourceRoot":"","sources":["../../../src/services/gitService.test.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,124 @@
1
+ /**
2
+ * @license
3
+ * Copyright 2025 Google LLC
4
+ * SPDX-License-Identifier: Apache-2.0
5
+ */
6
+ import { z } from 'zod';
7
+ /**
8
+ * The reserved server name for the IDE's MCP server.
9
+ */
10
+ export declare const IDE_SERVER_NAME = "_ide_server";
11
+ /**
12
+ * Zod schema for validating a cursor position.
13
+ */
14
+ export declare const CursorSchema: z.ZodObject<{
15
+ line: z.ZodNumber;
16
+ character: z.ZodNumber;
17
+ }, "strip", z.ZodTypeAny, {
18
+ line: number;
19
+ character: number;
20
+ }, {
21
+ line: number;
22
+ character: number;
23
+ }>;
24
+ export type Cursor = z.infer<typeof CursorSchema>;
25
+ /**
26
+ * Zod schema for validating an active file context from the IDE.
27
+ */
28
+ export declare const ActiveFileSchema: z.ZodObject<{
29
+ filePath: z.ZodString;
30
+ cursor: z.ZodOptional<z.ZodObject<{
31
+ line: z.ZodNumber;
32
+ character: z.ZodNumber;
33
+ }, "strip", z.ZodTypeAny, {
34
+ line: number;
35
+ character: number;
36
+ }, {
37
+ line: number;
38
+ character: number;
39
+ }>>;
40
+ }, "strip", z.ZodTypeAny, {
41
+ filePath: string;
42
+ cursor?: {
43
+ line: number;
44
+ character: number;
45
+ } | undefined;
46
+ }, {
47
+ filePath: string;
48
+ cursor?: {
49
+ line: number;
50
+ character: number;
51
+ } | undefined;
52
+ }>;
53
+ export type ActiveFile = z.infer<typeof ActiveFileSchema>;
54
+ /**
55
+ * Zod schema for validating the 'ide/activeFileChanged' notification from the IDE.
56
+ */
57
+ export declare const ActiveFileNotificationSchema: z.ZodObject<{
58
+ method: z.ZodLiteral<"ide/activeFileChanged">;
59
+ params: z.ZodObject<{
60
+ filePath: z.ZodString;
61
+ cursor: z.ZodOptional<z.ZodObject<{
62
+ line: z.ZodNumber;
63
+ character: z.ZodNumber;
64
+ }, "strip", z.ZodTypeAny, {
65
+ line: number;
66
+ character: number;
67
+ }, {
68
+ line: number;
69
+ character: number;
70
+ }>>;
71
+ }, "strip", z.ZodTypeAny, {
72
+ filePath: string;
73
+ cursor?: {
74
+ line: number;
75
+ character: number;
76
+ } | undefined;
77
+ }, {
78
+ filePath: string;
79
+ cursor?: {
80
+ line: number;
81
+ character: number;
82
+ } | undefined;
83
+ }>;
84
+ }, "strip", z.ZodTypeAny, {
85
+ method: "ide/activeFileChanged";
86
+ params: {
87
+ filePath: string;
88
+ cursor?: {
89
+ line: number;
90
+ character: number;
91
+ } | undefined;
92
+ };
93
+ }, {
94
+ method: "ide/activeFileChanged";
95
+ params: {
96
+ filePath: string;
97
+ cursor?: {
98
+ line: number;
99
+ character: number;
100
+ } | undefined;
101
+ };
102
+ }>;
103
+ type ActiveFileSubscriber = (activeFile: ActiveFile | undefined) => void;
104
+ /**
105
+ * Creates a new store for managing the IDE's active file context.
106
+ * This factory function encapsulates the state and logic, allowing for the creation
107
+ * of isolated instances, which is particularly useful for testing.
108
+ *
109
+ * @returns An object with methods to interact with the active file context.
110
+ */
111
+ export declare function createIdeContextStore(): {
112
+ setActiveFileContext: (newActiveFile: ActiveFile) => void;
113
+ getActiveFileContext: () => ActiveFile | undefined;
114
+ subscribeToActiveFile: (subscriber: ActiveFileSubscriber) => () => void;
115
+ };
116
+ /**
117
+ * The default, shared instance of the IDE context store for the application.
118
+ */
119
+ export declare const ideContext: {
120
+ setActiveFileContext: (newActiveFile: ActiveFile) => void;
121
+ getActiveFileContext: () => ActiveFile | undefined;
122
+ subscribeToActiveFile: (subscriber: ActiveFileSubscriber) => () => void;
123
+ };
124
+ export {};
@@ -0,0 +1,90 @@
1
+ /**
2
+ * @license
3
+ * Copyright 2025 Google LLC
4
+ * SPDX-License-Identifier: Apache-2.0
5
+ */
6
+ import { z } from 'zod';
7
+ /**
8
+ * The reserved server name for the IDE's MCP server.
9
+ */
10
+ export const IDE_SERVER_NAME = '_ide_server';
11
+ /**
12
+ * Zod schema for validating a cursor position.
13
+ */
14
+ export const CursorSchema = z.object({
15
+ line: z.number(),
16
+ character: z.number(),
17
+ });
18
+ /**
19
+ * Zod schema for validating an active file context from the IDE.
20
+ */
21
+ export const ActiveFileSchema = z.object({
22
+ filePath: z.string(),
23
+ cursor: CursorSchema.optional(),
24
+ });
25
+ /**
26
+ * Zod schema for validating the 'ide/activeFileChanged' notification from the IDE.
27
+ */
28
+ export const ActiveFileNotificationSchema = z.object({
29
+ method: z.literal('ide/activeFileChanged'),
30
+ params: ActiveFileSchema,
31
+ });
32
+ /**
33
+ * Creates a new store for managing the IDE's active file context.
34
+ * This factory function encapsulates the state and logic, allowing for the creation
35
+ * of isolated instances, which is particularly useful for testing.
36
+ *
37
+ * @returns An object with methods to interact with the active file context.
38
+ */
39
+ export function createIdeContextStore() {
40
+ let activeFileContext = undefined;
41
+ const subscribers = new Set();
42
+ /**
43
+ * Notifies all registered subscribers about the current active file context.
44
+ */
45
+ function notifySubscribers() {
46
+ for (const subscriber of subscribers) {
47
+ subscriber(activeFileContext);
48
+ }
49
+ }
50
+ /**
51
+ * Sets the active file context and notifies all registered subscribers of the change.
52
+ * @param newActiveFile The new active file context from the IDE.
53
+ */
54
+ function setActiveFileContext(newActiveFile) {
55
+ activeFileContext = newActiveFile;
56
+ notifySubscribers();
57
+ }
58
+ /**
59
+ * Retrieves the current active file context.
60
+ * @returns The `ActiveFile` object if a file is active, otherwise `undefined`.
61
+ */
62
+ function getActiveFileContext() {
63
+ return activeFileContext;
64
+ }
65
+ /**
66
+ * Subscribes to changes in the active file context.
67
+ *
68
+ * When the active file context changes, the provided `subscriber` function will be called.
69
+ * Note: The subscriber is not called with the current value upon subscription.
70
+ *
71
+ * @param subscriber The function to be called when the active file context changes.
72
+ * @returns A function that, when called, will unsubscribe the provided subscriber.
73
+ */
74
+ function subscribeToActiveFile(subscriber) {
75
+ subscribers.add(subscriber);
76
+ return () => {
77
+ subscribers.delete(subscriber);
78
+ };
79
+ }
80
+ return {
81
+ setActiveFileContext,
82
+ getActiveFileContext,
83
+ subscribeToActiveFile,
84
+ };
85
+ }
86
+ /**
87
+ * The default, shared instance of the IDE context store for the application.
88
+ */
89
+ export const ideContext = createIdeContextStore();
90
+ //# sourceMappingURL=ideContext.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ideContext.js","sourceRoot":"","sources":["../../../src/services/ideContext.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB;;GAEG;AACH,MAAM,CAAC,MAAM,eAAe,GAAG,aAAa,CAAC;AAE7C;;GAEG;AACH,MAAM,CAAC,MAAM,YAAY,GAAG,CAAC,CAAC,MAAM,CAAC;IACnC,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE;IAChB,SAAS,EAAE,CAAC,CAAC,MAAM,EAAE;CACtB,CAAC,CAAC;AAGH;;GAEG;AACH,MAAM,CAAC,MAAM,gBAAgB,GAAG,CAAC,CAAC,MAAM,CAAC;IACvC,QAAQ,EAAE,CAAC,CAAC,MAAM,EAAE;IACpB,MAAM,EAAE,YAAY,CAAC,QAAQ,EAAE;CAChC,CAAC,CAAC;AAGH;;GAEG;AACH,MAAM,CAAC,MAAM,4BAA4B,GAAG,CAAC,CAAC,MAAM,CAAC;IACnD,MAAM,EAAE,CAAC,CAAC,OAAO,CAAC,uBAAuB,CAAC;IAC1C,MAAM,EAAE,gBAAgB;CACzB,CAAC,CAAC;AAIH;;;;;;GAMG;AACH,MAAM,UAAU,qBAAqB;IACnC,IAAI,iBAAiB,GAA2B,SAAS,CAAC;IAC1D,MAAM,WAAW,GAAG,IAAI,GAAG,EAAwB,CAAC;IAEpD;;OAEG;IACH,SAAS,iBAAiB;QACxB,KAAK,MAAM,UAAU,IAAI,WAAW,EAAE,CAAC;YACrC,UAAU,CAAC,iBAAiB,CAAC,CAAC;QAChC,CAAC;IACH,CAAC;IAED;;;OAGG;IACH,SAAS,oBAAoB,CAAC,aAAyB;QACrD,iBAAiB,GAAG,aAAa,CAAC;QAClC,iBAAiB,EAAE,CAAC;IACtB,CAAC;IAED;;;OAGG;IACH,SAAS,oBAAoB;QAC3B,OAAO,iBAAiB,CAAC;IAC3B,CAAC;IAED;;;;;;;;OAQG;IACH,SAAS,qBAAqB,CAAC,UAAgC;QAC7D,WAAW,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC;QAC5B,OAAO,GAAG,EAAE;YACV,WAAW,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC;QACjC,CAAC,CAAC;IACJ,CAAC;IAED,OAAO;QACL,oBAAoB;QACpB,oBAAoB;QACpB,qBAAqB;KACtB,CAAC;AACJ,CAAC;AAED;;GAEG;AACH,MAAM,CAAC,MAAM,UAAU,GAAG,qBAAqB,EAAE,CAAC"}
@@ -0,0 +1,6 @@
1
+ /**
2
+ * @license
3
+ * Copyright 2025 Google LLC
4
+ * SPDX-License-Identifier: Apache-2.0
5
+ */
6
+ export {};