@vybestack/llxprt-code-tools 0.10.0-nightly.260613.1adad3b34

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 (364) hide show
  1. package/LICENSE +202 -0
  2. package/README.md +294 -0
  3. package/dist/.last_build +0 -0
  4. package/dist/index.d.ts +1 -0
  5. package/dist/index.js +2 -0
  6. package/dist/index.js.map +1 -0
  7. package/dist/src/__tests__/fixtures/filesystem-tool-fixtures.d.ts +29 -0
  8. package/dist/src/__tests__/fixtures/filesystem-tool-fixtures.js +30 -0
  9. package/dist/src/__tests__/fixtures/filesystem-tool-fixtures.js.map +1 -0
  10. package/dist/src/__tests__/fixtures/key-storage-fixtures.d.ts +39 -0
  11. package/dist/src/__tests__/fixtures/key-storage-fixtures.js +53 -0
  12. package/dist/src/__tests__/fixtures/key-storage-fixtures.js.map +1 -0
  13. package/dist/src/__tests__/fixtures/provider-formatting-fixtures.d.ts +140 -0
  14. package/dist/src/__tests__/fixtures/provider-formatting-fixtures.js +157 -0
  15. package/dist/src/__tests__/fixtures/provider-formatting-fixtures.js.map +1 -0
  16. package/dist/src/__tests__/red-test-helpers.d.ts +14 -0
  17. package/dist/src/__tests__/red-test-helpers.js +18 -0
  18. package/dist/src/__tests__/red-test-helpers.js.map +1 -0
  19. package/dist/src/formatters/IToolFormatter.d.ts +84 -0
  20. package/dist/src/formatters/IToolFormatter.js +6 -0
  21. package/dist/src/formatters/IToolFormatter.js.map +1 -0
  22. package/dist/src/formatters/ToolFormatter.d.ts +94 -0
  23. package/dist/src/formatters/ToolFormatter.js +379 -0
  24. package/dist/src/formatters/ToolFormatter.js.map +1 -0
  25. package/dist/src/formatters/ToolIdStrategy.d.ts +79 -0
  26. package/dist/src/formatters/ToolIdStrategy.js +173 -0
  27. package/dist/src/formatters/ToolIdStrategy.js.map +1 -0
  28. package/dist/src/formatters/doubleEscapeUtils.d.ts +46 -0
  29. package/dist/src/formatters/doubleEscapeUtils.js +223 -0
  30. package/dist/src/formatters/doubleEscapeUtils.js.map +1 -0
  31. package/dist/src/formatters/index.d.ts +21 -0
  32. package/dist/src/formatters/index.js +12 -0
  33. package/dist/src/formatters/index.js.map +1 -0
  34. package/dist/src/formatters/toolIdNormalization.d.ts +28 -0
  35. package/dist/src/formatters/toolIdNormalization.js +97 -0
  36. package/dist/src/formatters/toolIdNormalization.js.map +1 -0
  37. package/dist/src/formatters/toolNameUtils.d.ts +43 -0
  38. package/dist/src/formatters/toolNameUtils.js +143 -0
  39. package/dist/src/formatters/toolNameUtils.js.map +1 -0
  40. package/dist/src/index.d.ts +88 -0
  41. package/dist/src/index.js +68 -0
  42. package/dist/src/index.js.map +1 -0
  43. package/dist/src/interfaces/IAsyncTaskService.d.ts +57 -0
  44. package/dist/src/interfaces/IAsyncTaskService.js +6 -0
  45. package/dist/src/interfaces/IAsyncTaskService.js.map +1 -0
  46. package/dist/src/interfaces/IIdeService.d.ts +62 -0
  47. package/dist/src/interfaces/IIdeService.js +6 -0
  48. package/dist/src/interfaces/IIdeService.js.map +1 -0
  49. package/dist/src/interfaces/ILspService.d.ts +54 -0
  50. package/dist/src/interfaces/ILspService.js +6 -0
  51. package/dist/src/interfaces/ILspService.js.map +1 -0
  52. package/dist/src/interfaces/IMcpToolService.d.ts +47 -0
  53. package/dist/src/interfaces/IMcpToolService.js +6 -0
  54. package/dist/src/interfaces/IMcpToolService.js.map +1 -0
  55. package/dist/src/interfaces/IPromptRegistryService.d.ts +51 -0
  56. package/dist/src/interfaces/IPromptRegistryService.js +6 -0
  57. package/dist/src/interfaces/IPromptRegistryService.js.map +1 -0
  58. package/dist/src/interfaces/ISettingsService.d.ts +50 -0
  59. package/dist/src/interfaces/ISettingsService.js +6 -0
  60. package/dist/src/interfaces/ISettingsService.js.map +1 -0
  61. package/dist/src/interfaces/IShellExecutionService.d.ts +55 -0
  62. package/dist/src/interfaces/IShellExecutionService.js +6 -0
  63. package/dist/src/interfaces/IShellExecutionService.js.map +1 -0
  64. package/dist/src/interfaces/IShellToolHost.d.ts +176 -0
  65. package/dist/src/interfaces/IShellToolHost.js +6 -0
  66. package/dist/src/interfaces/IShellToolHost.js.map +1 -0
  67. package/dist/src/interfaces/ISkillService.d.ts +69 -0
  68. package/dist/src/interfaces/ISkillService.js +6 -0
  69. package/dist/src/interfaces/ISkillService.js.map +1 -0
  70. package/dist/src/interfaces/IStorageService.d.ts +42 -0
  71. package/dist/src/interfaces/IStorageService.js +6 -0
  72. package/dist/src/interfaces/IStorageService.js.map +1 -0
  73. package/dist/src/interfaces/ISubagentService.d.ts +112 -0
  74. package/dist/src/interfaces/ISubagentService.js +6 -0
  75. package/dist/src/interfaces/ISubagentService.js.map +1 -0
  76. package/dist/src/interfaces/ITaskToolHost.d.ts +185 -0
  77. package/dist/src/interfaces/ITaskToolHost.js +6 -0
  78. package/dist/src/interfaces/ITaskToolHost.js.map +1 -0
  79. package/dist/src/interfaces/ITodoService.d.ts +79 -0
  80. package/dist/src/interfaces/ITodoService.js +6 -0
  81. package/dist/src/interfaces/ITodoService.js.map +1 -0
  82. package/dist/src/interfaces/IToolHost.d.ts +91 -0
  83. package/dist/src/interfaces/IToolHost.js +6 -0
  84. package/dist/src/interfaces/IToolHost.js.map +1 -0
  85. package/dist/src/interfaces/IToolKeyStorage.d.ts +62 -0
  86. package/dist/src/interfaces/IToolKeyStorage.js +6 -0
  87. package/dist/src/interfaces/IToolKeyStorage.js.map +1 -0
  88. package/dist/src/interfaces/IToolMessageBus.d.ts +63 -0
  89. package/dist/src/interfaces/IToolMessageBus.js +6 -0
  90. package/dist/src/interfaces/IToolMessageBus.js.map +1 -0
  91. package/dist/src/interfaces/IToolRegistryHost.d.ts +43 -0
  92. package/dist/src/interfaces/IToolRegistryHost.js +6 -0
  93. package/dist/src/interfaces/IToolRegistryHost.js.map +1 -0
  94. package/dist/src/interfaces/IWebSearchService.d.ts +16 -0
  95. package/dist/src/interfaces/IWebSearchService.js +7 -0
  96. package/dist/src/interfaces/IWebSearchService.js.map +1 -0
  97. package/dist/src/interfaces/index.d.ts +33 -0
  98. package/dist/src/interfaces/index.js +6 -0
  99. package/dist/src/interfaces/index.js.map +1 -0
  100. package/dist/src/tools/activate-skill.d.ts +26 -0
  101. package/dist/src/tools/activate-skill.js +121 -0
  102. package/dist/src/tools/activate-skill.js.map +1 -0
  103. package/dist/src/tools/apply-patch.d.ts +65 -0
  104. package/dist/src/tools/apply-patch.js +528 -0
  105. package/dist/src/tools/apply-patch.js.map +1 -0
  106. package/dist/src/tools/ast-edit/ast-config.d.ts +67 -0
  107. package/dist/src/tools/ast-edit/ast-config.js +72 -0
  108. package/dist/src/tools/ast-edit/ast-config.js.map +1 -0
  109. package/dist/src/tools/ast-edit/ast-edit-invocation.d.ts +40 -0
  110. package/dist/src/tools/ast-edit/ast-edit-invocation.js +410 -0
  111. package/dist/src/tools/ast-edit/ast-edit-invocation.js.map +1 -0
  112. package/dist/src/tools/ast-edit/ast-query-extractor.d.ts +21 -0
  113. package/dist/src/tools/ast-edit/ast-query-extractor.js +178 -0
  114. package/dist/src/tools/ast-edit/ast-query-extractor.js.map +1 -0
  115. package/dist/src/tools/ast-edit/ast-read-file-invocation.d.ts +26 -0
  116. package/dist/src/tools/ast-edit/ast-read-file-invocation.js +149 -0
  117. package/dist/src/tools/ast-edit/ast-read-file-invocation.js.map +1 -0
  118. package/dist/src/tools/ast-edit/constants.d.ts +30 -0
  119. package/dist/src/tools/ast-edit/constants.js +36 -0
  120. package/dist/src/tools/ast-edit/constants.js.map +1 -0
  121. package/dist/src/tools/ast-edit/context-collector.d.ts +25 -0
  122. package/dist/src/tools/ast-edit/context-collector.js +115 -0
  123. package/dist/src/tools/ast-edit/context-collector.js.map +1 -0
  124. package/dist/src/tools/ast-edit/context-optimizer.d.ts +29 -0
  125. package/dist/src/tools/ast-edit/context-optimizer.js +86 -0
  126. package/dist/src/tools/ast-edit/context-optimizer.js.map +1 -0
  127. package/dist/src/tools/ast-edit/cross-file-analyzer.d.ts +41 -0
  128. package/dist/src/tools/ast-edit/cross-file-analyzer.js +294 -0
  129. package/dist/src/tools/ast-edit/cross-file-analyzer.js.map +1 -0
  130. package/dist/src/tools/ast-edit/edit-calculator.d.ts +71 -0
  131. package/dist/src/tools/ast-edit/edit-calculator.js +249 -0
  132. package/dist/src/tools/ast-edit/edit-calculator.js.map +1 -0
  133. package/dist/src/tools/ast-edit/edit-helpers.d.ts +22 -0
  134. package/dist/src/tools/ast-edit/edit-helpers.js +36 -0
  135. package/dist/src/tools/ast-edit/edit-helpers.js.map +1 -0
  136. package/dist/src/tools/ast-edit/language-analysis.d.ts +19 -0
  137. package/dist/src/tools/ast-edit/language-analysis.js +123 -0
  138. package/dist/src/tools/ast-edit/language-analysis.js.map +1 -0
  139. package/dist/src/tools/ast-edit/local-context-analyzer.d.ts +84 -0
  140. package/dist/src/tools/ast-edit/local-context-analyzer.js +267 -0
  141. package/dist/src/tools/ast-edit/local-context-analyzer.js.map +1 -0
  142. package/dist/src/tools/ast-edit/repository-context-provider.d.ts +22 -0
  143. package/dist/src/tools/ast-edit/repository-context-provider.js +139 -0
  144. package/dist/src/tools/ast-edit/repository-context-provider.js.map +1 -0
  145. package/dist/src/tools/ast-edit/types.d.ts +155 -0
  146. package/dist/src/tools/ast-edit/types.js +7 -0
  147. package/dist/src/tools/ast-edit/types.js.map +1 -0
  148. package/dist/src/tools/ast-edit/workspace-context-provider.d.ts +22 -0
  149. package/dist/src/tools/ast-edit/workspace-context-provider.js +39 -0
  150. package/dist/src/tools/ast-edit/workspace-context-provider.js.map +1 -0
  151. package/dist/src/tools/ast-edit.d.ts +43 -0
  152. package/dist/src/tools/ast-edit.js +183 -0
  153. package/dist/src/tools/ast-edit.js.map +1 -0
  154. package/dist/src/tools/ast-grep.d.ts +22 -0
  155. package/dist/src/tools/ast-grep.js +291 -0
  156. package/dist/src/tools/ast-grep.js.map +1 -0
  157. package/dist/src/tools/check-async-tasks.d.ts +46 -0
  158. package/dist/src/tools/check-async-tasks.js +241 -0
  159. package/dist/src/tools/check-async-tasks.js.map +1 -0
  160. package/dist/src/tools/codesearch.d.ts +25 -0
  161. package/dist/src/tools/codesearch.js +153 -0
  162. package/dist/src/tools/codesearch.js.map +1 -0
  163. package/dist/src/tools/delete_line_range.d.ts +41 -0
  164. package/dist/src/tools/delete_line_range.js +238 -0
  165. package/dist/src/tools/delete_line_range.js.map +1 -0
  166. package/dist/src/tools/direct-web-fetch.d.ts +22 -0
  167. package/dist/src/tools/direct-web-fetch.js +215 -0
  168. package/dist/src/tools/direct-web-fetch.js.map +1 -0
  169. package/dist/src/tools/edit-utils.d.ts +53 -0
  170. package/dist/src/tools/edit-utils.js +250 -0
  171. package/dist/src/tools/edit-utils.js.map +1 -0
  172. package/dist/src/tools/edit.d.ts +70 -0
  173. package/dist/src/tools/edit.js +816 -0
  174. package/dist/src/tools/edit.js.map +1 -0
  175. package/dist/src/tools/exa-web-search.d.ts +27 -0
  176. package/dist/src/tools/exa-web-search.js +153 -0
  177. package/dist/src/tools/exa-web-search.js.map +1 -0
  178. package/dist/src/tools/glob.d.ts +55 -0
  179. package/dist/src/tools/glob.js +284 -0
  180. package/dist/src/tools/glob.js.map +1 -0
  181. package/dist/src/tools/google-web-fetch.d.ts +34 -0
  182. package/dist/src/tools/google-web-fetch.js +417 -0
  183. package/dist/src/tools/google-web-fetch.js.map +1 -0
  184. package/dist/src/tools/google-web-search-invocation.d.ts +53 -0
  185. package/dist/src/tools/google-web-search-invocation.js +180 -0
  186. package/dist/src/tools/google-web-search-invocation.js.map +1 -0
  187. package/dist/src/tools/google-web-search.d.ts +16 -0
  188. package/dist/src/tools/google-web-search.js +34 -0
  189. package/dist/src/tools/google-web-search.js.map +1 -0
  190. package/dist/src/tools/grep.d.ts +56 -0
  191. package/dist/src/tools/grep.js +883 -0
  192. package/dist/src/tools/grep.js.map +1 -0
  193. package/dist/src/tools/insert_at_line.d.ts +41 -0
  194. package/dist/src/tools/insert_at_line.js +287 -0
  195. package/dist/src/tools/insert_at_line.js.map +1 -0
  196. package/dist/src/tools/list-subagents.d.ts +31 -0
  197. package/dist/src/tools/list-subagents.js +122 -0
  198. package/dist/src/tools/list-subagents.js.map +1 -0
  199. package/dist/src/tools/ls.d.ts +71 -0
  200. package/dist/src/tools/ls.js +238 -0
  201. package/dist/src/tools/ls.js.map +1 -0
  202. package/dist/src/tools/memoryTool.d.ts +66 -0
  203. package/dist/src/tools/memoryTool.js +435 -0
  204. package/dist/src/tools/memoryTool.js.map +1 -0
  205. package/dist/src/tools/modifiable-tool.d.ts +37 -0
  206. package/dist/src/tools/modifiable-tool.js +120 -0
  207. package/dist/src/tools/modifiable-tool.js.map +1 -0
  208. package/dist/src/tools/read-file.d.ts +49 -0
  209. package/dist/src/tools/read-file.js +279 -0
  210. package/dist/src/tools/read-file.js.map +1 -0
  211. package/dist/src/tools/read-many-files.d.ts +60 -0
  212. package/dist/src/tools/read-many-files.js +529 -0
  213. package/dist/src/tools/read-many-files.js.map +1 -0
  214. package/dist/src/tools/read_line_range.d.ts +47 -0
  215. package/dist/src/tools/read_line_range.js +248 -0
  216. package/dist/src/tools/read_line_range.js.map +1 -0
  217. package/dist/src/tools/ripGrep.d.ts +41 -0
  218. package/dist/src/tools/ripGrep.js +395 -0
  219. package/dist/src/tools/ripGrep.js.map +1 -0
  220. package/dist/src/tools/shell.d.ts +60 -0
  221. package/dist/src/tools/shell.js +735 -0
  222. package/dist/src/tools/shell.js.map +1 -0
  223. package/dist/src/tools/structural-analysis.d.ts +27 -0
  224. package/dist/src/tools/structural-analysis.js +1089 -0
  225. package/dist/src/tools/structural-analysis.js.map +1 -0
  226. package/dist/src/tools/stubs.d.ts +10 -0
  227. package/dist/src/tools/stubs.js +6 -0
  228. package/dist/src/tools/stubs.js.map +1 -0
  229. package/dist/src/tools/task.d.ts +41 -0
  230. package/dist/src/tools/task.js +195 -0
  231. package/dist/src/tools/task.js.map +1 -0
  232. package/dist/src/tools/todo-events.d.ts +22 -0
  233. package/dist/src/tools/todo-events.js +24 -0
  234. package/dist/src/tools/todo-events.js.map +1 -0
  235. package/dist/src/tools/todo-pause.d.ts +29 -0
  236. package/dist/src/tools/todo-pause.js +172 -0
  237. package/dist/src/tools/todo-pause.js.map +1 -0
  238. package/dist/src/tools/todo-read.d.ts +18 -0
  239. package/dist/src/tools/todo-read.js +98 -0
  240. package/dist/src/tools/todo-read.js.map +1 -0
  241. package/dist/src/tools/todo-store.d.ts +35 -0
  242. package/dist/src/tools/todo-store.js +124 -0
  243. package/dist/src/tools/todo-store.js.map +1 -0
  244. package/dist/src/tools/todo-write.d.ts +29 -0
  245. package/dist/src/tools/todo-write.js +366 -0
  246. package/dist/src/tools/todo-write.js.map +1 -0
  247. package/dist/src/tools/tool-registry.d.ts +156 -0
  248. package/dist/src/tools/tool-registry.js +623 -0
  249. package/dist/src/tools/tool-registry.js.map +1 -0
  250. package/dist/src/tools/tools.d.ts +403 -0
  251. package/dist/src/tools/tools.js +519 -0
  252. package/dist/src/tools/tools.js.map +1 -0
  253. package/dist/src/tools/write-file.d.ts +45 -0
  254. package/dist/src/tools/write-file.js +320 -0
  255. package/dist/src/tools/write-file.js.map +1 -0
  256. package/dist/src/types/index.d.ts +17 -0
  257. package/dist/src/types/index.js +9 -0
  258. package/dist/src/types/index.js.map +1 -0
  259. package/dist/src/types/provider-content-types.d.ts +56 -0
  260. package/dist/src/types/provider-content-types.js +6 -0
  261. package/dist/src/types/provider-content-types.js.map +1 -0
  262. package/dist/src/types/todo-schemas.d.ts +263 -0
  263. package/dist/src/types/todo-schemas.js +32 -0
  264. package/dist/src/types/todo-schemas.js.map +1 -0
  265. package/dist/src/types/tool-confirmation-types.d.ts +34 -0
  266. package/dist/src/types/tool-confirmation-types.js +29 -0
  267. package/dist/src/types/tool-confirmation-types.js.map +1 -0
  268. package/dist/src/types/tool-context.d.ts +31 -0
  269. package/dist/src/types/tool-context.js +6 -0
  270. package/dist/src/types/tool-context.js.map +1 -0
  271. package/dist/src/types/tool-error.d.ts +69 -0
  272. package/dist/src/types/tool-error.js +94 -0
  273. package/dist/src/types/tool-error.js.map +1 -0
  274. package/dist/src/types/tool-names.d.ts +57 -0
  275. package/dist/src/types/tool-names.js +64 -0
  276. package/dist/src/types/tool-names.js.map +1 -0
  277. package/dist/src/utils/EmojiFilter.d.ts +134 -0
  278. package/dist/src/utils/EmojiFilter.js +370 -0
  279. package/dist/src/utils/EmojiFilter.js.map +1 -0
  280. package/dist/src/utils/ast-grep-utils.d.ts +42 -0
  281. package/dist/src/utils/ast-grep-utils.js +140 -0
  282. package/dist/src/utils/ast-grep-utils.js.map +1 -0
  283. package/dist/src/utils/debugLogger.d.ts +11 -0
  284. package/dist/src/utils/debugLogger.js +16 -0
  285. package/dist/src/utils/debugLogger.js.map +1 -0
  286. package/dist/src/utils/diffOptions.d.ts +14 -0
  287. package/dist/src/utils/diffOptions.js +46 -0
  288. package/dist/src/utils/diffOptions.js.map +1 -0
  289. package/dist/src/utils/editor.d.ts +39 -0
  290. package/dist/src/utils/editor.js +212 -0
  291. package/dist/src/utils/editor.js.map +1 -0
  292. package/dist/src/utils/ensure-dirs.d.ts +10 -0
  293. package/dist/src/utils/ensure-dirs.js +16 -0
  294. package/dist/src/utils/ensure-dirs.js.map +1 -0
  295. package/dist/src/utils/errors.d.ts +59 -0
  296. package/dist/src/utils/errors.js +178 -0
  297. package/dist/src/utils/errors.js.map +1 -0
  298. package/dist/src/utils/fetch.d.ts +11 -0
  299. package/dist/src/utils/fetch.js +74 -0
  300. package/dist/src/utils/fetch.js.map +1 -0
  301. package/dist/src/utils/fileUtils.d.ts +32 -0
  302. package/dist/src/utils/fileUtils.js +363 -0
  303. package/dist/src/utils/fileUtils.js.map +1 -0
  304. package/dist/src/utils/fuzzy-replacer.d.ts +61 -0
  305. package/dist/src/utils/fuzzy-replacer.js +492 -0
  306. package/dist/src/utils/fuzzy-replacer.js.map +1 -0
  307. package/dist/src/utils/gitLineChanges.d.ts +12 -0
  308. package/dist/src/utils/gitLineChanges.js +171 -0
  309. package/dist/src/utils/gitLineChanges.js.map +1 -0
  310. package/dist/src/utils/gitUtils.d.ts +6 -0
  311. package/dist/src/utils/gitUtils.js +31 -0
  312. package/dist/src/utils/gitUtils.js.map +1 -0
  313. package/dist/src/utils/lsp-diagnostics-helper.d.ts +27 -0
  314. package/dist/src/utils/lsp-diagnostics-helper.js +62 -0
  315. package/dist/src/utils/lsp-diagnostics-helper.js.map +1 -0
  316. package/dist/src/utils/mediaUtils.d.ts +38 -0
  317. package/dist/src/utils/mediaUtils.js +22 -0
  318. package/dist/src/utils/mediaUtils.js.map +1 -0
  319. package/dist/src/utils/pathValidation.d.ts +7 -0
  320. package/dist/src/utils/pathValidation.js +39 -0
  321. package/dist/src/utils/pathValidation.js.map +1 -0
  322. package/dist/src/utils/paths.d.ts +7 -0
  323. package/dist/src/utils/paths.js +158 -0
  324. package/dist/src/utils/paths.js.map +1 -0
  325. package/dist/src/utils/resolveTextSearchTarget.d.ts +17 -0
  326. package/dist/src/utils/resolveTextSearchTarget.js +45 -0
  327. package/dist/src/utils/resolveTextSearchTarget.js.map +1 -0
  328. package/dist/src/utils/retry.d.ts +17 -0
  329. package/dist/src/utils/retry.js +185 -0
  330. package/dist/src/utils/retry.js.map +1 -0
  331. package/dist/src/utils/ripgrepPathResolver.d.ts +23 -0
  332. package/dist/src/utils/ripgrepPathResolver.js +179 -0
  333. package/dist/src/utils/ripgrepPathResolver.js.map +1 -0
  334. package/dist/src/utils/safeJsonStringify.d.ts +9 -0
  335. package/dist/src/utils/safeJsonStringify.js +21 -0
  336. package/dist/src/utils/safeJsonStringify.js.map +1 -0
  337. package/dist/src/utils/schemaValidator.d.ts +13 -0
  338. package/dist/src/utils/schemaValidator.js +275 -0
  339. package/dist/src/utils/schemaValidator.js.map +1 -0
  340. package/dist/src/utils/terminalSerializer.d.ts +33 -0
  341. package/dist/src/utils/terminalSerializer.js +6 -0
  342. package/dist/src/utils/terminalSerializer.js.map +1 -0
  343. package/dist/src/utils/todoContextTracker.d.ts +12 -0
  344. package/dist/src/utils/todoContextTracker.js +28 -0
  345. package/dist/src/utils/todoContextTracker.js.map +1 -0
  346. package/dist/src/utils/todoFormatter.d.ts +24 -0
  347. package/dist/src/utils/todoFormatter.js +157 -0
  348. package/dist/src/utils/todoFormatter.js.map +1 -0
  349. package/dist/src/utils/todoReminderService.d.ts +22 -0
  350. package/dist/src/utils/todoReminderService.js +43 -0
  351. package/dist/src/utils/todoReminderService.js.map +1 -0
  352. package/dist/src/utils/tool-key-storage-facade.d.ts +32 -0
  353. package/dist/src/utils/tool-key-storage-facade.js +56 -0
  354. package/dist/src/utils/tool-key-storage-facade.js.map +1 -0
  355. package/dist/src/utils/tool-key-storage-types.d.ts +56 -0
  356. package/dist/src/utils/tool-key-storage-types.js +56 -0
  357. package/dist/src/utils/tool-key-storage-types.js.map +1 -0
  358. package/dist/src/utils/toolOutputLimiter.d.ts +29 -0
  359. package/dist/src/utils/toolOutputLimiter.js +107 -0
  360. package/dist/src/utils/toolOutputLimiter.js.map +1 -0
  361. package/dist/src/utils/unicodeUtils.d.ts +55 -0
  362. package/dist/src/utils/unicodeUtils.js +129 -0
  363. package/dist/src/utils/unicodeUtils.js.map +1 -0
  364. package/package.json +75 -0
@@ -0,0 +1,171 @@
1
+ /**
2
+ * @license
3
+ * Copyright 2025 Google LLC
4
+ * SPDX-License-Identifier: Apache-2.0
5
+ */
6
+ import { spawn } from 'child_process';
7
+ import { existsSync } from 'node:fs';
8
+ import path from 'path';
9
+ const DEFAULT_GIT_COMMAND_TIMEOUT_MS = 30_000;
10
+ function runGit(args, cwd, options) {
11
+ return new Promise((resolve, reject) => {
12
+ const child = spawn('git', args, {
13
+ cwd,
14
+ windowsHide: true,
15
+ });
16
+ const timeoutMs = options?.timeoutMs ?? DEFAULT_GIT_COMMAND_TIMEOUT_MS;
17
+ const stdoutChunks = [];
18
+ const stderrChunks = [];
19
+ let settled = false;
20
+ const settle = (fn) => {
21
+ if (settled)
22
+ return;
23
+ settled = true;
24
+ clearTimeout(timer);
25
+ child.removeAllListeners();
26
+ child.stdout.removeAllListeners();
27
+ child.stderr.removeAllListeners();
28
+ fn();
29
+ };
30
+ const timer = setTimeout(() => {
31
+ try {
32
+ child.kill();
33
+ }
34
+ finally {
35
+ settle(() => reject(new Error(`git command timed out after ${timeoutMs}ms: git ${args.join(' ')}`)));
36
+ }
37
+ }, timeoutMs);
38
+ child.stdout.on('data', (chunk) => stdoutChunks.push(chunk));
39
+ child.stderr.on('data', (chunk) => stderrChunks.push(chunk));
40
+ child.on('error', (err) => settle(() => reject(new Error(`Failed to start git: ${err.message}`))));
41
+ child.on('close', (code) => {
42
+ const stdout = Buffer.concat(stdoutChunks).toString('utf8');
43
+ const stderr = Buffer.concat(stderrChunks).toString('utf8').trim();
44
+ if (code === 0) {
45
+ settle(() => resolve(stdout));
46
+ return;
47
+ }
48
+ settle(() => reject(new Error(stderr || `git exited with code ${code}`)));
49
+ });
50
+ });
51
+ }
52
+ function findGitRoot(startDir) {
53
+ let current = path.resolve(startDir);
54
+ while (true) {
55
+ if (existsSync(path.join(current, '.git')))
56
+ return current;
57
+ const parent = path.dirname(current);
58
+ if (parent === current)
59
+ return undefined;
60
+ current = parent;
61
+ }
62
+ }
63
+ async function fileExistsInHead(relToGitRoot, gitRoot) {
64
+ try {
65
+ await runGit(['cat-file', '-e', `HEAD:${relToGitRoot}`], gitRoot);
66
+ return true;
67
+ }
68
+ catch {
69
+ return false;
70
+ }
71
+ }
72
+ function parseUnifiedZeroDiff(diffText) {
73
+ const markersByLine = new Map();
74
+ const deletionAfterLines = new Set();
75
+ const lines = diffText.split(/\r?\n/);
76
+ const hunkHeaderRe = /^@@\s+-(\d+)(?:,(\d+))?\s+\+(\d+)(?:,(\d+))?\s+@@/;
77
+ for (const line of lines) {
78
+ const m = hunkHeaderRe.exec(line);
79
+ if (!m)
80
+ continue;
81
+ const oldCount = m[2] ? Number(m[2]) : 1;
82
+ const newStart = Number(m[3]);
83
+ const newCount = m[4] ? Number(m[4]) : 1;
84
+ if (oldCount === 0) {
85
+ for (let i = 0; i < newCount; i++) {
86
+ markersByLine.set(newStart + i, 'N');
87
+ }
88
+ continue;
89
+ }
90
+ if (newCount === 0 && oldCount > 0) {
91
+ const oldStart = Number(m[1]);
92
+ deletionAfterLines.add(Math.max(0, oldStart - 1));
93
+ continue;
94
+ }
95
+ if (oldCount > 0 && newCount > 0) {
96
+ for (let i = 0; i < newCount; i++) {
97
+ markersByLine.set(newStart + i, 'M');
98
+ }
99
+ if (oldCount > newCount) {
100
+ deletionAfterLines.add(newStart + newCount - 1);
101
+ }
102
+ }
103
+ }
104
+ return { markersByLine, deletionAfterLines };
105
+ }
106
+ function buildUntrackedFileResult(relToGitRoot, gitRoot) {
107
+ return runGit(['show', `:${relToGitRoot}`], gitRoot)
108
+ .catch(() => '')
109
+ .then((content) => {
110
+ if (content === '') {
111
+ return {
112
+ markersByLine: new Map(),
113
+ deletionAfterLines: new Set(),
114
+ warning: 'File is not present in HEAD (untracked), but failed to read its content from git index',
115
+ };
116
+ }
117
+ const normalizedContent = content.replace(/\r?\n$/, '');
118
+ const lineCount = normalizedContent === '' ? 0 : normalizedContent.split(/\r?\n/).length;
119
+ const markersByLine = new Map();
120
+ for (let i = 1; i <= lineCount; i++) {
121
+ markersByLine.set(i, 'N');
122
+ }
123
+ return {
124
+ markersByLine,
125
+ deletionAfterLines: new Set(),
126
+ warning: 'File is not present in HEAD (untracked); marked all lines as new',
127
+ };
128
+ });
129
+ }
130
+ export async function getGitLineChanges(absolutePath) {
131
+ try {
132
+ if (!path.isAbsolute(absolutePath)) {
133
+ return {
134
+ markersByLine: new Map(),
135
+ deletionAfterLines: new Set(),
136
+ warning: `Path is not absolute: ${absolutePath}`,
137
+ };
138
+ }
139
+ const fileDir = path.dirname(absolutePath);
140
+ const gitRoot = findGitRoot(fileDir);
141
+ if (!gitRoot) {
142
+ return {
143
+ markersByLine: new Map(),
144
+ deletionAfterLines: new Set(),
145
+ warning: 'Not a git repository',
146
+ };
147
+ }
148
+ const relToGitRoot = path.relative(gitRoot, absolutePath);
149
+ const diffText = await runGit(['diff', '--no-color', '--unified=0', 'HEAD', '--', relToGitRoot], gitRoot);
150
+ if (diffText.trim() === '') {
151
+ const existsInHead = await fileExistsInHead(relToGitRoot, gitRoot);
152
+ if (!existsInHead) {
153
+ return await buildUntrackedFileResult(relToGitRoot, gitRoot);
154
+ }
155
+ }
156
+ const parsed = parseUnifiedZeroDiff(diffText);
157
+ return {
158
+ markersByLine: parsed.markersByLine,
159
+ deletionAfterLines: parsed.deletionAfterLines,
160
+ };
161
+ }
162
+ catch (err) {
163
+ const msg = err instanceof Error ? err.message : String(err);
164
+ return {
165
+ markersByLine: new Map(),
166
+ deletionAfterLines: new Set(),
167
+ warning: msg,
168
+ };
169
+ }
170
+ }
171
+ //# sourceMappingURL=gitLineChanges.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"gitLineChanges.js","sourceRoot":"","sources":["../../../src/utils/gitLineChanges.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 declare function isGitRepository(directory: string): boolean;
@@ -0,0 +1,31 @@
1
+ /**
2
+ * @license
3
+ * Copyright 2025 Google LLC
4
+ * SPDX-License-Identifier: Apache-2.0
5
+ */
6
+ import * as fs from 'fs';
7
+ import * as path from 'path';
8
+ export function isGitRepository(directory) {
9
+ try {
10
+ let currentDir = path.resolve(directory);
11
+ let searching = true;
12
+ while (searching) {
13
+ const gitDir = path.join(currentDir, '.git');
14
+ if (fs.existsSync(gitDir)) {
15
+ return true;
16
+ }
17
+ const parentDir = path.dirname(currentDir);
18
+ if (parentDir === currentDir) {
19
+ searching = false;
20
+ }
21
+ if (searching) {
22
+ currentDir = parentDir;
23
+ }
24
+ }
25
+ return false;
26
+ }
27
+ catch {
28
+ return false;
29
+ }
30
+ }
31
+ //# sourceMappingURL=gitUtils.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"gitUtils.js","sourceRoot":"","sources":["../../../src/utils/gitUtils.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,KAAK,EAAE,MAAM,IAAI,CAAC;AACzB,OAAO,KAAK,IAAI,MAAM,MAAM,CAAC;AAE7B,MAAM,UAAU,eAAe,CAAC,SAAiB;IAC/C,IAAI,CAAC;QACH,IAAI,UAAU,GAAG,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC;QAEzC,IAAI,SAAS,GAAG,IAAI,CAAC;QACrB,OAAO,SAAS,EAAE,CAAC;YACjB,MAAM,MAAM,GAAG,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,MAAM,CAAC,CAAC;YAC7C,IAAI,EAAE,CAAC,UAAU,CAAC,MAAM,CAAC,EAAE,CAAC;gBAC1B,OAAO,IAAI,CAAC;YACd,CAAC;YAED,MAAM,SAAS,GAAG,IAAI,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC;YAC3C,IAAI,SAAS,KAAK,UAAU,EAAE,CAAC;gBAC7B,SAAS,GAAG,KAAK,CAAC;YACpB,CAAC;YAED,IAAI,SAAS,EAAE,CAAC;gBACd,UAAU,GAAG,SAAS,CAAC;YACzB,CAAC;QACH,CAAC;QAED,OAAO,KAAK,CAAC;IACf,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,KAAK,CAAC;IACf,CAAC;AACH,CAAC"}
@@ -0,0 +1,27 @@
1
+ /**
2
+ * @license
3
+ * Copyright 2025 Vybestack LLC
4
+ * SPDX-License-Identifier: Apache-2.0
5
+ */
6
+ import type { ILspService, IToolHost } from '../interfaces/index.js';
7
+ /**
8
+ * Collects LSP diagnostics for a file and formats them for LLM consumption.
9
+ *
10
+ * @plan PLAN-20250212-LSP.P31
11
+ * @requirement REQ-DIAG-010
12
+ *
13
+ * This helper:
14
+ * - Checks if LSP client is alive
15
+ * - Calls checkFile() with a timeout to prevent hangs
16
+ * - Filters diagnostics by configured severities
17
+ * - Limits diagnostics per maxDiagnosticsPerFile
18
+ * - Formats with <diagnostics> XML tags
19
+ * - Returns null if no diagnostics or LSP unavailable
20
+ *
21
+ * The caller should wrap this in try-catch to satisfy REQ-GRACE-050/055.
22
+ *
23
+ * @param config - The Config instance to get LSP client and settings
24
+ * @param absolutePath - The absolute path of the file to check
25
+ * @returns Formatted diagnostics block or null if none
26
+ */
27
+ export declare function collectLspDiagnosticsBlock(lspService: ILspService, host: IToolHost, absolutePath: string): Promise<string | null>;
@@ -0,0 +1,62 @@
1
+ /**
2
+ * @license
3
+ * Copyright 2025 Vybestack LLC
4
+ * SPDX-License-Identifier: Apache-2.0
5
+ */
6
+ import path from 'path';
7
+ /**
8
+ * Timeout for LSP diagnostics collection to prevent hanging on unresponsive LSP servers.
9
+ */
10
+ const LSP_DIAGNOSTICS_TIMEOUT_MS = 5000;
11
+ /**
12
+ * Collects LSP diagnostics for a file and formats them for LLM consumption.
13
+ *
14
+ * @plan PLAN-20250212-LSP.P31
15
+ * @requirement REQ-DIAG-010
16
+ *
17
+ * This helper:
18
+ * - Checks if LSP client is alive
19
+ * - Calls checkFile() with a timeout to prevent hangs
20
+ * - Filters diagnostics by configured severities
21
+ * - Limits diagnostics per maxDiagnosticsPerFile
22
+ * - Formats with <diagnostics> XML tags
23
+ * - Returns null if no diagnostics or LSP unavailable
24
+ *
25
+ * The caller should wrap this in try-catch to satisfy REQ-GRACE-050/055.
26
+ *
27
+ * @param config - The Config instance to get LSP client and settings
28
+ * @param absolutePath - The absolute path of the file to check
29
+ * @returns Formatted diagnostics block or null if none
30
+ */
31
+ export async function collectLspDiagnosticsBlock(lspService, host, absolutePath) {
32
+ const diagnostics = await lspService.waitForDiagnostics(absolutePath, LSP_DIAGNOSTICS_TIMEOUT_MS);
33
+ const lspConfig = lspService.getLspConfig();
34
+ const includeSeverities = lspConfig?.includeSeverities ?? ['error'];
35
+ const filtered = diagnostics.filter((d) => includeSeverities.includes(d.severity));
36
+ if (filtered.length === 0) {
37
+ return null;
38
+ }
39
+ const maxPerFile = lspConfig?.maxDiagnosticsPerFile ?? 20;
40
+ const relPath = path.relative(host.getTargetDir(), absolutePath);
41
+ const limited = filtered
42
+ .sort((a, b) => {
43
+ const lineDiff = (a.line ?? 0) - (b.line ?? 0);
44
+ return lineDiff !== 0 ? lineDiff : (a.column ?? 0) - (b.column ?? 0);
45
+ })
46
+ .slice(0, maxPerFile);
47
+ // Build severity-reflective header based on actual severities present
48
+ const severitiesPresent = [...new Set(limited.map((d) => d.severity))];
49
+ const severityLabel = severitiesPresent.length === 1 ? `${severitiesPresent[0]}s` : 'diagnostics';
50
+ const diagLines = limited
51
+ .map((d) => {
52
+ const codeStr = d.code !== undefined ? ` (${d.code})` : '';
53
+ return `${d.severity.toUpperCase()} [${d.line ?? 1}:${d.column ?? 1}] ${d.message}${codeStr}`;
54
+ })
55
+ .join('\n');
56
+ const suffix = filtered.length > maxPerFile
57
+ ? `\n... and ${filtered.length - maxPerFile} more`
58
+ : '';
59
+ // Return without leading \n\n - caller uses join('\n\n') to separate parts
60
+ return `LSP ${severityLabel} detected in this file, please fix:\n<diagnostics file="${relPath}">\n${diagLines}${suffix}\n</diagnostics>`;
61
+ }
62
+ //# sourceMappingURL=lsp-diagnostics-helper.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"lsp-diagnostics-helper.js","sourceRoot":"","sources":["../../../src/utils/lsp-diagnostics-helper.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,IAAI,MAAM,MAAM,CAAC;AAGxB;;GAEG;AACH,MAAM,0BAA0B,GAAG,IAAI,CAAC;AAExC;;;;;;;;;;;;;;;;;;;GAmBG;AACH,MAAM,CAAC,KAAK,UAAU,0BAA0B,CAC9C,UAAuB,EACvB,IAAe,EACf,YAAoB;IAEpB,MAAM,WAAW,GAAG,MAAM,UAAU,CAAC,kBAAkB,CACrD,YAAY,EACZ,0BAA0B,CAC3B,CAAC;IAEF,MAAM,SAAS,GAAG,UAAU,CAAC,YAAY,EAAE,CAAC;IAE5C,MAAM,iBAAiB,GAAG,SAAS,EAAE,iBAAiB,IAAI,CAAC,OAAO,CAAC,CAAC;IACpE,MAAM,QAAQ,GAAG,WAAW,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CACxC,iBAAiB,CAAC,QAAQ,CAAC,CAAC,CAAC,QAAQ,CAAC,CACvC,CAAC;IAEF,IAAI,QAAQ,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QAC1B,OAAO,IAAI,CAAC;IACd,CAAC;IAED,MAAM,UAAU,GAAG,SAAS,EAAE,qBAAqB,IAAI,EAAE,CAAC;IAC1D,MAAM,OAAO,GAAG,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,YAAY,EAAE,EAAE,YAAY,CAAC,CAAC;IACjE,MAAM,OAAO,GAAG,QAAQ;SACrB,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE;QACb,MAAM,QAAQ,GAAG,CAAC,CAAC,CAAC,IAAI,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,IAAI,CAAC,CAAC,CAAC;QAC/C,OAAO,QAAQ,KAAK,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,MAAM,IAAI,CAAC,CAAC,CAAC;IACvE,CAAC,CAAC;SACD,KAAK,CAAC,CAAC,EAAE,UAAU,CAAC,CAAC;IAExB,sEAAsE;IACtE,MAAM,iBAAiB,GAAG,CAAC,GAAG,IAAI,GAAG,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC;IACvE,MAAM,aAAa,GACjB,iBAAiB,CAAC,MAAM,KAAK,CAAC,CAAC,CAAC,CAAC,GAAG,iBAAiB,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,aAAa,CAAC;IAE9E,MAAM,SAAS,GAAG,OAAO;SACtB,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE;QACT,MAAM,OAAO,GAAG,CAAC,CAAC,IAAI,KAAK,SAAS,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,IAAI,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC;QAC3D,OAAO,GAAG,CAAC,CAAC,QAAQ,CAAC,WAAW,EAAE,KAAK,CAAC,CAAC,IAAI,IAAI,CAAC,IAAI,CAAC,CAAC,MAAM,IAAI,CAAC,KAAK,CAAC,CAAC,OAAO,GAAG,OAAO,EAAE,CAAC;IAChG,CAAC,CAAC;SACD,IAAI,CAAC,IAAI,CAAC,CAAC;IAEd,MAAM,MAAM,GACV,QAAQ,CAAC,MAAM,GAAG,UAAU;QAC1B,CAAC,CAAC,aAAa,QAAQ,CAAC,MAAM,GAAG,UAAU,OAAO;QAClD,CAAC,CAAC,EAAE,CAAC;IAET,2EAA2E;IAC3E,OAAO,OAAO,aAAa,2DAA2D,OAAO,OAAO,SAAS,GAAG,MAAM,kBAAkB,CAAC;AAC3I,CAAC"}
@@ -0,0 +1,38 @@
1
+ /**
2
+ * @plan:PLAN-20260608-ISSUE1585.P05
3
+ * @requirement:REQ-API-001, REQ-TEMPORARY-INTERFACES
4
+ */
5
+ /**
6
+ * @license
7
+ * Copyright 2025 Google LLC
8
+ * SPDX-License-Identifier: Apache-2.0
9
+ */
10
+ /**
11
+ * Package-local media classification utilities.
12
+ *
13
+ * Provides media block classification using a package-local MediaBlock
14
+ * type instead of importing from core. Self-contained with zero core imports.
15
+ */
16
+ /** Package-local media block representation. */
17
+ export interface MediaBlock {
18
+ /** Media block discriminator. */
19
+ type?: 'media';
20
+ /** MIME type of the media. */
21
+ mimeType: string;
22
+ /** Base64-encoded data or URL. */
23
+ data?: string;
24
+ /** Whether data is a URL or base64. */
25
+ encoding?: 'url' | 'base64';
26
+ /** Optional caption or alt text. */
27
+ caption?: string;
28
+ /** Original filename if applicable. */
29
+ filename?: string;
30
+ }
31
+ /** Category of media content. */
32
+ export type MediaCategory = 'image' | 'pdf' | 'audio' | 'video' | 'unknown';
33
+ /**
34
+ * Classifies a media block by its MIME type.
35
+ * @param media - The media block to classify.
36
+ * @returns The media category.
37
+ */
38
+ export declare function classifyMediaBlock(media: MediaBlock): MediaCategory;
@@ -0,0 +1,22 @@
1
+ /**
2
+ * @plan:PLAN-20260608-ISSUE1585.P05
3
+ * @requirement:REQ-API-001, REQ-TEMPORARY-INTERFACES
4
+ */
5
+ /**
6
+ * Classifies a media block by its MIME type.
7
+ * @param media - The media block to classify.
8
+ * @returns The media category.
9
+ */
10
+ export function classifyMediaBlock(media) {
11
+ const mime = media.mimeType.toLowerCase();
12
+ if (mime.startsWith('image/'))
13
+ return 'image';
14
+ if (mime === 'application/pdf')
15
+ return 'pdf';
16
+ if (mime.startsWith('audio/'))
17
+ return 'audio';
18
+ if (mime.startsWith('video/'))
19
+ return 'video';
20
+ return 'unknown';
21
+ }
22
+ //# sourceMappingURL=mediaUtils.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"mediaUtils.js","sourceRoot":"","sources":["../../../src/utils/mediaUtils.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAkCH;;;;GAIG;AACH,MAAM,UAAU,kBAAkB,CAAC,KAAiB;IAClD,MAAM,IAAI,GAAG,KAAK,CAAC,QAAQ,CAAC,WAAW,EAAE,CAAC;IAC1C,IAAI,IAAI,CAAC,UAAU,CAAC,QAAQ,CAAC;QAAE,OAAO,OAAO,CAAC;IAC9C,IAAI,IAAI,KAAK,iBAAiB;QAAE,OAAO,KAAK,CAAC;IAC7C,IAAI,IAAI,CAAC,UAAU,CAAC,QAAQ,CAAC;QAAE,OAAO,OAAO,CAAC;IAC9C,IAAI,IAAI,CAAC,UAAU,CAAC,QAAQ,CAAC;QAAE,OAAO,OAAO,CAAC;IAC9C,OAAO,SAAS,CAAC;AACnB,CAAC"}
@@ -0,0 +1,7 @@
1
+ /**
2
+ * @license
3
+ * Copyright 2025 Google LLC
4
+ * SPDX-License-Identifier: Apache-2.0
5
+ */
6
+ export declare function isPathWithinWorkspace(workspaceRoots: readonly string[], inputPath: string): boolean;
7
+ export declare function validatePathWithinWorkspace(workspaceRoots: readonly string[], inputPath: string, pathTypeLabel?: string): string | null;
@@ -0,0 +1,39 @@
1
+ /**
2
+ * @license
3
+ * Copyright 2025 Google LLC
4
+ * SPDX-License-Identifier: Apache-2.0
5
+ */
6
+ import fs from 'node:fs';
7
+ import path from 'node:path';
8
+ function normalizeWorkspacePath(candidatePath) {
9
+ const resolvedPath = path.resolve(candidatePath);
10
+ try {
11
+ return fs.realpathSync.native(resolvedPath);
12
+ }
13
+ catch {
14
+ const parentPath = path.dirname(resolvedPath);
15
+ if (parentPath === resolvedPath) {
16
+ return resolvedPath;
17
+ }
18
+ const normalizedParent = normalizeWorkspacePath(parentPath);
19
+ return path.join(normalizedParent, path.basename(resolvedPath));
20
+ }
21
+ }
22
+ export function isPathWithinWorkspace(workspaceRoots, inputPath) {
23
+ const resolvedInput = normalizeWorkspacePath(inputPath);
24
+ return workspaceRoots.some((root) => {
25
+ const resolvedRoot = normalizeWorkspacePath(root);
26
+ const relative = path.relative(resolvedRoot, resolvedInput);
27
+ return (relative === '' ||
28
+ (!relative.startsWith(`..${path.sep}`) &&
29
+ relative !== '..' &&
30
+ !path.isAbsolute(relative)));
31
+ });
32
+ }
33
+ export function validatePathWithinWorkspace(workspaceRoots, inputPath, pathTypeLabel = 'File path') {
34
+ if (isPathWithinWorkspace(workspaceRoots, inputPath)) {
35
+ return null;
36
+ }
37
+ return `${pathTypeLabel} must be within one of the workspace directories: ${workspaceRoots.join(', ')}`;
38
+ }
39
+ //# sourceMappingURL=pathValidation.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"pathValidation.js","sourceRoot":"","sources":["../../../src/utils/pathValidation.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,MAAM,SAAS,CAAC;AACzB,OAAO,IAAI,MAAM,WAAW,CAAC;AAE7B,SAAS,sBAAsB,CAAC,aAAqB;IACnD,MAAM,YAAY,GAAG,IAAI,CAAC,OAAO,CAAC,aAAa,CAAC,CAAC;IACjD,IAAI,CAAC;QACH,OAAO,EAAE,CAAC,YAAY,CAAC,MAAM,CAAC,YAAY,CAAC,CAAC;IAC9C,CAAC;IAAC,MAAM,CAAC;QACP,MAAM,UAAU,GAAG,IAAI,CAAC,OAAO,CAAC,YAAY,CAAC,CAAC;QAC9C,IAAI,UAAU,KAAK,YAAY,EAAE,CAAC;YAChC,OAAO,YAAY,CAAC;QACtB,CAAC;QACD,MAAM,gBAAgB,GAAG,sBAAsB,CAAC,UAAU,CAAC,CAAC;QAC5D,OAAO,IAAI,CAAC,IAAI,CAAC,gBAAgB,EAAE,IAAI,CAAC,QAAQ,CAAC,YAAY,CAAC,CAAC,CAAC;IAClE,CAAC;AACH,CAAC;AAED,MAAM,UAAU,qBAAqB,CACnC,cAAiC,EACjC,SAAiB;IAEjB,MAAM,aAAa,GAAG,sBAAsB,CAAC,SAAS,CAAC,CAAC;IACxD,OAAO,cAAc,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,EAAE;QAClC,MAAM,YAAY,GAAG,sBAAsB,CAAC,IAAI,CAAC,CAAC;QAClD,MAAM,QAAQ,GAAG,IAAI,CAAC,QAAQ,CAAC,YAAY,EAAE,aAAa,CAAC,CAAC;QAC5D,OAAO,CACL,QAAQ,KAAK,EAAE;YACf,CAAC,CAAC,QAAQ,CAAC,UAAU,CAAC,KAAK,IAAI,CAAC,GAAG,EAAE,CAAC;gBACpC,QAAQ,KAAK,IAAI;gBACjB,CAAC,IAAI,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAC,CAC9B,CAAC;IACJ,CAAC,CAAC,CAAC;AACL,CAAC;AAED,MAAM,UAAU,2BAA2B,CACzC,cAAiC,EACjC,SAAiB,EACjB,gBAAwB,WAAW;IAEnC,IAAI,qBAAqB,CAAC,cAAc,EAAE,SAAS,CAAC,EAAE,CAAC;QACrD,OAAO,IAAI,CAAC;IACd,CAAC;IACD,OAAO,GAAG,aAAa,qDAAqD,cAAc,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC;AAC1G,CAAC"}
@@ -0,0 +1,7 @@
1
+ /**
2
+ * @license
3
+ * Copyright 2025 Google LLC
4
+ * SPDX-License-Identifier: Apache-2.0
5
+ */
6
+ export declare function shortenPath(filePath: string, maxLen?: number): string;
7
+ export declare function makeRelative(targetPath: string, rootDirectory: string): string;
@@ -0,0 +1,158 @@
1
+ /**
2
+ * @license
3
+ * Copyright 2025 Google LLC
4
+ * SPDX-License-Identifier: Apache-2.0
5
+ */
6
+ import path from 'node:path';
7
+ function simpleTruncate(filePath, maxLen) {
8
+ const keepLen = Math.floor((maxLen - 3) / 2);
9
+ if (keepLen <= 0) {
10
+ return filePath.substring(0, maxLen - 3) + '...';
11
+ }
12
+ const start = filePath.substring(0, keepLen);
13
+ const end = filePath.substring(filePath.length - keepLen);
14
+ return `${start}...${end}`;
15
+ }
16
+ function truncateComponent(component, targetLength, mode) {
17
+ if (component.length <= targetLength)
18
+ return component;
19
+ if (targetLength <= 0)
20
+ return '';
21
+ if (targetLength <= 3) {
22
+ if (mode === 'end')
23
+ return component.slice(-targetLength);
24
+ return component.slice(0, targetLength);
25
+ }
26
+ if (mode === 'start') {
27
+ return `${component.slice(0, targetLength - 3)}...`;
28
+ }
29
+ if (mode === 'end') {
30
+ return `...${component.slice(component.length - (targetLength - 3))}`;
31
+ }
32
+ const front = Math.ceil((targetLength - 3) / 2);
33
+ const back = targetLength - 3 - front;
34
+ return `${component.slice(0, front)}...${component.slice(component.length - back)}`;
35
+ }
36
+ function trailingFallback(root, separator, lastSegment, maxLen, filePath) {
37
+ const ellipsisTail = `...${separator}${lastSegment}`;
38
+ if (ellipsisTail.length <= maxLen)
39
+ return ellipsisTail;
40
+ if (root) {
41
+ const rootEllipsisTail = `${root}...${separator}${lastSegment}`;
42
+ if (rootEllipsisTail.length <= maxLen)
43
+ return rootEllipsisTail;
44
+ }
45
+ if (root && `${root}${lastSegment}`.length <= maxLen) {
46
+ return `${root}${lastSegment}`;
47
+ }
48
+ if (lastSegment.length <= maxLen)
49
+ return lastSegment;
50
+ return simpleTruncate(filePath, maxLen);
51
+ }
52
+ function computeEndPartSegments(segments, startComponent, separator, maxLen) {
53
+ const lastSegment = segments[segments.length - 1];
54
+ const endPartSegments = [lastSegment];
55
+ let endPartLength = lastSegment.length;
56
+ for (let i = segments.length - 2; i > 0; i--) {
57
+ const segment = segments[i];
58
+ const newLength = startComponent.length +
59
+ separator.length +
60
+ 3 +
61
+ separator.length +
62
+ endPartLength +
63
+ separator.length +
64
+ segment.length;
65
+ if (newLength <= maxLen) {
66
+ endPartSegments.unshift(segment);
67
+ endPartLength += separator.length + segment.length;
68
+ }
69
+ else {
70
+ break;
71
+ }
72
+ }
73
+ return endPartSegments;
74
+ }
75
+ function computeBudgets(components, minLengths, availableForComponents) {
76
+ const budgets = components.map((component) => component.length);
77
+ let currentTotal = budgets.reduce((sum, len) => sum + len, 0);
78
+ while (currentTotal > availableForComponents) {
79
+ let bestIndex = -1;
80
+ let bestScore = -Infinity;
81
+ for (let i = 0; i < budgets.length; i++) {
82
+ if (budgets[i] <= minLengths[i])
83
+ continue;
84
+ const isLast = i === budgets.length - 1;
85
+ const score = (isLast ? 0 : 1_000_000) + budgets[i];
86
+ if (score > bestScore) {
87
+ bestScore = score;
88
+ bestIndex = i;
89
+ }
90
+ }
91
+ if (bestIndex === -1)
92
+ return null;
93
+ budgets[bestIndex]--;
94
+ currentTotal--;
95
+ }
96
+ return budgets;
97
+ }
98
+ export function shortenPath(filePath, maxLen = 35) {
99
+ if (filePath.length <= maxLen) {
100
+ return filePath;
101
+ }
102
+ const parsedPath = path.parse(filePath);
103
+ const root = parsedPath.root;
104
+ const separator = path.sep;
105
+ const relativePath = filePath.substring(root.length);
106
+ const segments = relativePath.split(separator).filter((s) => s !== '');
107
+ if (segments.length <= 1) {
108
+ return simpleTruncate(filePath, maxLen);
109
+ }
110
+ const firstDir = segments[0];
111
+ const lastSegment = segments[segments.length - 1];
112
+ const startComponent = root + firstDir;
113
+ const endPartSegments = computeEndPartSegments(segments, startComponent, separator, maxLen);
114
+ const components = [firstDir, ...endPartSegments];
115
+ const componentModes = components.map((_, index) => {
116
+ if (index === 0)
117
+ return 'start';
118
+ if (index === components.length - 1)
119
+ return 'end';
120
+ return 'center';
121
+ });
122
+ const separatorsCount = endPartSegments.length + 1;
123
+ const fixedLen = root.length + separatorsCount * separator.length + 3;
124
+ const availableForComponents = maxLen - fixedLen;
125
+ if (availableForComponents <= 0) {
126
+ return trailingFallback(root, separator, lastSegment, maxLen, filePath);
127
+ }
128
+ const minLengths = components.map((component, index) => {
129
+ if (index === 0)
130
+ return Math.min(component.length, 1);
131
+ if (index === components.length - 1)
132
+ return component.length;
133
+ return Math.min(component.length, 1);
134
+ });
135
+ const minTotal = minLengths.reduce((sum, len) => sum + len, 0);
136
+ if (availableForComponents < minTotal) {
137
+ return trailingFallback(root, separator, lastSegment, maxLen, filePath);
138
+ }
139
+ const budgets = computeBudgets(components, minLengths, availableForComponents);
140
+ if (budgets === null) {
141
+ return trailingFallback(root, separator, lastSegment, maxLen, filePath);
142
+ }
143
+ const truncatedComponents = components.map((component, index) => truncateComponent(component, budgets[index], componentModes[index]));
144
+ const truncatedFirst = truncatedComponents[0];
145
+ const truncatedEnd = truncatedComponents.slice(1).join(separator);
146
+ const result = `${root}${truncatedFirst}${separator}...${separator}${truncatedEnd}`;
147
+ if (result.length > maxLen) {
148
+ return trailingFallback(root, separator, lastSegment, maxLen, filePath);
149
+ }
150
+ return result;
151
+ }
152
+ export function makeRelative(targetPath, rootDirectory) {
153
+ const resolvedTargetPath = path.resolve(targetPath);
154
+ const resolvedRootDirectory = path.resolve(rootDirectory);
155
+ const relativePath = path.relative(resolvedRootDirectory, resolvedTargetPath);
156
+ return relativePath || '.';
157
+ }
158
+ //# sourceMappingURL=paths.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"paths.js","sourceRoot":"","sources":["../../../src/utils/paths.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,IAAI,MAAM,WAAW,CAAC;AAI7B,SAAS,cAAc,CAAC,QAAgB,EAAE,MAAc;IACtD,MAAM,OAAO,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;IAC7C,IAAI,OAAO,IAAI,CAAC,EAAE,CAAC;QACjB,OAAO,QAAQ,CAAC,SAAS,CAAC,CAAC,EAAE,MAAM,GAAG,CAAC,CAAC,GAAG,KAAK,CAAC;IACnD,CAAC;IACD,MAAM,KAAK,GAAG,QAAQ,CAAC,SAAS,CAAC,CAAC,EAAE,OAAO,CAAC,CAAC;IAC7C,MAAM,GAAG,GAAG,QAAQ,CAAC,SAAS,CAAC,QAAQ,CAAC,MAAM,GAAG,OAAO,CAAC,CAAC;IAC1D,OAAO,GAAG,KAAK,MAAM,GAAG,EAAE,CAAC;AAC7B,CAAC;AAED,SAAS,iBAAiB,CACxB,SAAiB,EACjB,YAAoB,EACpB,IAAkB;IAElB,IAAI,SAAS,CAAC,MAAM,IAAI,YAAY;QAAE,OAAO,SAAS,CAAC;IACvD,IAAI,YAAY,IAAI,CAAC;QAAE,OAAO,EAAE,CAAC;IACjC,IAAI,YAAY,IAAI,CAAC,EAAE,CAAC;QACtB,IAAI,IAAI,KAAK,KAAK;YAAE,OAAO,SAAS,CAAC,KAAK,CAAC,CAAC,YAAY,CAAC,CAAC;QAC1D,OAAO,SAAS,CAAC,KAAK,CAAC,CAAC,EAAE,YAAY,CAAC,CAAC;IAC1C,CAAC;IACD,IAAI,IAAI,KAAK,OAAO,EAAE,CAAC;QACrB,OAAO,GAAG,SAAS,CAAC,KAAK,CAAC,CAAC,EAAE,YAAY,GAAG,CAAC,CAAC,KAAK,CAAC;IACtD,CAAC;IACD,IAAI,IAAI,KAAK,KAAK,EAAE,CAAC;QACnB,OAAO,MAAM,SAAS,CAAC,KAAK,CAAC,SAAS,CAAC,MAAM,GAAG,CAAC,YAAY,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC;IACxE,CAAC;IACD,MAAM,KAAK,GAAG,IAAI,CAAC,IAAI,CAAC,CAAC,YAAY,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;IAChD,MAAM,IAAI,GAAG,YAAY,GAAG,CAAC,GAAG,KAAK,CAAC;IACtC,OAAO,GAAG,SAAS,CAAC,KAAK,CAAC,CAAC,EAAE,KAAK,CAAC,MAAM,SAAS,CAAC,KAAK,CACtD,SAAS,CAAC,MAAM,GAAG,IAAI,CACxB,EAAE,CAAC;AACN,CAAC;AAED,SAAS,gBAAgB,CACvB,IAAY,EACZ,SAAiB,EACjB,WAAmB,EACnB,MAAc,EACd,QAAgB;IAEhB,MAAM,YAAY,GAAG,MAAM,SAAS,GAAG,WAAW,EAAE,CAAC;IACrD,IAAI,YAAY,CAAC,MAAM,IAAI,MAAM;QAAE,OAAO,YAAY,CAAC;IAEvD,IAAI,IAAI,EAAE,CAAC;QACT,MAAM,gBAAgB,GAAG,GAAG,IAAI,MAAM,SAAS,GAAG,WAAW,EAAE,CAAC;QAChE,IAAI,gBAAgB,CAAC,MAAM,IAAI,MAAM;YAAE,OAAO,gBAAgB,CAAC;IACjE,CAAC;IAED,IAAI,IAAI,IAAI,GAAG,IAAI,GAAG,WAAW,EAAE,CAAC,MAAM,IAAI,MAAM,EAAE,CAAC;QACrD,OAAO,GAAG,IAAI,GAAG,WAAW,EAAE,CAAC;IACjC,CAAC;IAED,IAAI,WAAW,CAAC,MAAM,IAAI,MAAM;QAAE,OAAO,WAAW,CAAC;IAErD,OAAO,cAAc,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC;AAC1C,CAAC;AAED,SAAS,sBAAsB,CAC7B,QAAkB,EAClB,cAAsB,EACtB,SAAiB,EACjB,MAAc;IAEd,MAAM,WAAW,GAAG,QAAQ,CAAC,QAAQ,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;IAClD,MAAM,eAAe,GAAG,CAAC,WAAW,CAAC,CAAC;IACtC,IAAI,aAAa,GAAG,WAAW,CAAC,MAAM,CAAC;IAEvC,KAAK,IAAI,CAAC,GAAG,QAAQ,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC;QAC7C,MAAM,OAAO,GAAG,QAAQ,CAAC,CAAC,CAAC,CAAC;QAC5B,MAAM,SAAS,GACb,cAAc,CAAC,MAAM;YACrB,SAAS,CAAC,MAAM;YAChB,CAAC;YACD,SAAS,CAAC,MAAM;YAChB,aAAa;YACb,SAAS,CAAC,MAAM;YAChB,OAAO,CAAC,MAAM,CAAC;QAEjB,IAAI,SAAS,IAAI,MAAM,EAAE,CAAC;YACxB,eAAe,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;YACjC,aAAa,IAAI,SAAS,CAAC,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;QACrD,CAAC;aAAM,CAAC;YACN,MAAM;QACR,CAAC;IACH,CAAC;IACD,OAAO,eAAe,CAAC;AACzB,CAAC;AAED,SAAS,cAAc,CACrB,UAAoB,EACpB,UAAoB,EACpB,sBAA8B;IAE9B,MAAM,OAAO,GAAG,UAAU,CAAC,GAAG,CAAC,CAAC,SAAS,EAAE,EAAE,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC;IAChE,IAAI,YAAY,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,GAAG,EAAE,EAAE,CAAC,GAAG,GAAG,GAAG,EAAE,CAAC,CAAC,CAAC;IAE9D,OAAO,YAAY,GAAG,sBAAsB,EAAE,CAAC;QAC7C,IAAI,SAAS,GAAG,CAAC,CAAC,CAAC;QACnB,IAAI,SAAS,GAAG,CAAC,QAAQ,CAAC;QAC1B,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;YACxC,IAAI,OAAO,CAAC,CAAC,CAAC,IAAI,UAAU,CAAC,CAAC,CAAC;gBAAE,SAAS;YAC1C,MAAM,MAAM,GAAG,CAAC,KAAK,OAAO,CAAC,MAAM,GAAG,CAAC,CAAC;YACxC,MAAM,KAAK,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC,CAAC;YACpD,IAAI,KAAK,GAAG,SAAS,EAAE,CAAC;gBACtB,SAAS,GAAG,KAAK,CAAC;gBAClB,SAAS,GAAG,CAAC,CAAC;YAChB,CAAC;QACH,CAAC;QACD,IAAI,SAAS,KAAK,CAAC,CAAC;YAAE,OAAO,IAAI,CAAC;QAClC,OAAO,CAAC,SAAS,CAAC,EAAE,CAAC;QACrB,YAAY,EAAE,CAAC;IACjB,CAAC;IACD,OAAO,OAAO,CAAC;AACjB,CAAC;AAED,MAAM,UAAU,WAAW,CAAC,QAAgB,EAAE,SAAiB,EAAE;IAC/D,IAAI,QAAQ,CAAC,MAAM,IAAI,MAAM,EAAE,CAAC;QAC9B,OAAO,QAAQ,CAAC;IAClB,CAAC;IAED,MAAM,UAAU,GAAG,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC;IACxC,MAAM,IAAI,GAAG,UAAU,CAAC,IAAI,CAAC;IAC7B,MAAM,SAAS,GAAG,IAAI,CAAC,GAAG,CAAC;IAE3B,MAAM,YAAY,GAAG,QAAQ,CAAC,SAAS,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;IACrD,MAAM,QAAQ,GAAG,YAAY,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,KAAK,EAAE,CAAC,CAAC;IAEvE,IAAI,QAAQ,CAAC,MAAM,IAAI,CAAC,EAAE,CAAC;QACzB,OAAO,cAAc,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC;IAC1C,CAAC;IAED,MAAM,QAAQ,GAAG,QAAQ,CAAC,CAAC,CAAC,CAAC;IAC7B,MAAM,WAAW,GAAG,QAAQ,CAAC,QAAQ,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;IAClD,MAAM,cAAc,GAAG,IAAI,GAAG,QAAQ,CAAC;IAEvC,MAAM,eAAe,GAAG,sBAAsB,CAC5C,QAAQ,EACR,cAAc,EACd,SAAS,EACT,MAAM,CACP,CAAC;IAEF,MAAM,UAAU,GAAG,CAAC,QAAQ,EAAE,GAAG,eAAe,CAAC,CAAC;IAClD,MAAM,cAAc,GAAmB,UAAU,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,EAAE;QACjE,IAAI,KAAK,KAAK,CAAC;YAAE,OAAO,OAAO,CAAC;QAChC,IAAI,KAAK,KAAK,UAAU,CAAC,MAAM,GAAG,CAAC;YAAE,OAAO,KAAK,CAAC;QAClD,OAAO,QAAQ,CAAC;IAClB,CAAC,CAAC,CAAC;IAEH,MAAM,eAAe,GAAG,eAAe,CAAC,MAAM,GAAG,CAAC,CAAC;IACnD,MAAM,QAAQ,GAAG,IAAI,CAAC,MAAM,GAAG,eAAe,GAAG,SAAS,CAAC,MAAM,GAAG,CAAC,CAAC;IACtE,MAAM,sBAAsB,GAAG,MAAM,GAAG,QAAQ,CAAC;IAEjD,IAAI,sBAAsB,IAAI,CAAC,EAAE,CAAC;QAChC,OAAO,gBAAgB,CAAC,IAAI,EAAE,SAAS,EAAE,WAAW,EAAE,MAAM,EAAE,QAAQ,CAAC,CAAC;IAC1E,CAAC;IAED,MAAM,UAAU,GAAG,UAAU,CAAC,GAAG,CAAC,CAAC,SAAS,EAAE,KAAK,EAAE,EAAE;QACrD,IAAI,KAAK,KAAK,CAAC;YAAE,OAAO,IAAI,CAAC,GAAG,CAAC,SAAS,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC;QACtD,IAAI,KAAK,KAAK,UAAU,CAAC,MAAM,GAAG,CAAC;YAAE,OAAO,SAAS,CAAC,MAAM,CAAC;QAC7D,OAAO,IAAI,CAAC,GAAG,CAAC,SAAS,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC;IACvC,CAAC,CAAC,CAAC;IAEH,MAAM,QAAQ,GAAG,UAAU,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,GAAG,EAAE,EAAE,CAAC,GAAG,GAAG,GAAG,EAAE,CAAC,CAAC,CAAC;IAC/D,IAAI,sBAAsB,GAAG,QAAQ,EAAE,CAAC;QACtC,OAAO,gBAAgB,CAAC,IAAI,EAAE,SAAS,EAAE,WAAW,EAAE,MAAM,EAAE,QAAQ,CAAC,CAAC;IAC1E,CAAC;IAED,MAAM,OAAO,GAAG,cAAc,CAC5B,UAAU,EACV,UAAU,EACV,sBAAsB,CACvB,CAAC;IACF,IAAI,OAAO,KAAK,IAAI,EAAE,CAAC;QACrB,OAAO,gBAAgB,CAAC,IAAI,EAAE,SAAS,EAAE,WAAW,EAAE,MAAM,EAAE,QAAQ,CAAC,CAAC;IAC1E,CAAC;IAED,MAAM,mBAAmB,GAAG,UAAU,CAAC,GAAG,CAAC,CAAC,SAAS,EAAE,KAAK,EAAE,EAAE,CAC9D,iBAAiB,CAAC,SAAS,EAAE,OAAO,CAAC,KAAK,CAAC,EAAE,cAAc,CAAC,KAAK,CAAC,CAAC,CACpE,CAAC;IAEF,MAAM,cAAc,GAAG,mBAAmB,CAAC,CAAC,CAAC,CAAC;IAC9C,MAAM,YAAY,GAAG,mBAAmB,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;IAClE,MAAM,MAAM,GAAG,GAAG,IAAI,GAAG,cAAc,GAAG,SAAS,MAAM,SAAS,GAAG,YAAY,EAAE,CAAC;IAEpF,IAAI,MAAM,CAAC,MAAM,GAAG,MAAM,EAAE,CAAC;QAC3B,OAAO,gBAAgB,CAAC,IAAI,EAAE,SAAS,EAAE,WAAW,EAAE,MAAM,EAAE,QAAQ,CAAC,CAAC;IAC1E,CAAC;IAED,OAAO,MAAM,CAAC;AAChB,CAAC;AAED,MAAM,UAAU,YAAY,CAC1B,UAAkB,EAClB,aAAqB;IAErB,MAAM,kBAAkB,GAAG,IAAI,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC;IACpD,MAAM,qBAAqB,GAAG,IAAI,CAAC,OAAO,CAAC,aAAa,CAAC,CAAC;IAC1D,MAAM,YAAY,GAAG,IAAI,CAAC,QAAQ,CAAC,qBAAqB,EAAE,kBAAkB,CAAC,CAAC;IAC9E,OAAO,YAAY,IAAI,GAAG,CAAC;AAC7B,CAAC"}
@@ -0,0 +1,17 @@
1
+ /**
2
+ * @license
3
+ * Copyright 2025 Google LLC
4
+ * SPDX-License-Identifier: Apache-2.0
5
+ */
6
+ export type ResolvedSearchTarget = {
7
+ readonly kind: 'all-workspaces';
8
+ } | {
9
+ readonly kind: 'directory';
10
+ readonly searchDir: string;
11
+ } | {
12
+ readonly kind: 'file';
13
+ readonly filePath: string;
14
+ readonly parentDir: string;
15
+ readonly basename: string;
16
+ };
17
+ export declare function resolveTextSearchTarget(targetDir: string, workspaceRoots: readonly string[], relativePath?: string): ResolvedSearchTarget;