@angri450/zvec-grep 0.2.2

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 (418) hide show
  1. package/LICENSE +201 -0
  2. package/README.md +319 -0
  3. package/README_CN.md +297 -0
  4. package/dist/authorization/index.d.ts +7 -0
  5. package/dist/authorization/index.js +7 -0
  6. package/dist/authorization/index.js.map +1 -0
  7. package/dist/authorization/manager.d.ts +8 -0
  8. package/dist/authorization/manager.js +19 -0
  9. package/dist/authorization/manager.js.map +1 -0
  10. package/dist/authorization/operation.d.ts +7 -0
  11. package/dist/authorization/operation.js +50 -0
  12. package/dist/authorization/operation.js.map +1 -0
  13. package/dist/authorization/planner.d.ts +21 -0
  14. package/dist/authorization/planner.js +97 -0
  15. package/dist/authorization/planner.js.map +1 -0
  16. package/dist/authorization/prompt.d.ts +12 -0
  17. package/dist/authorization/prompt.js +63 -0
  18. package/dist/authorization/prompt.js.map +1 -0
  19. package/dist/authorization/store.d.ts +20 -0
  20. package/dist/authorization/store.js +251 -0
  21. package/dist/authorization/store.js.map +1 -0
  22. package/dist/authorization/target.d.ts +15 -0
  23. package/dist/authorization/target.js +49 -0
  24. package/dist/authorization/target.js.map +1 -0
  25. package/dist/authorization/types.d.ts +61 -0
  26. package/dist/authorization/types.js +2 -0
  27. package/dist/authorization/types.js.map +1 -0
  28. package/dist/cli/args.d.ts +6 -0
  29. package/dist/cli/args.js +1255 -0
  30. package/dist/cli/args.js.map +1 -0
  31. package/dist/cli/auth.d.ts +21 -0
  32. package/dist/cli/auth.js +209 -0
  33. package/dist/cli/auth.js.map +1 -0
  34. package/dist/cli/commands.d.ts +4 -0
  35. package/dist/cli/commands.js +801 -0
  36. package/dist/cli/commands.js.map +1 -0
  37. package/dist/cli/errors.d.ts +9 -0
  38. package/dist/cli/errors.js +131 -0
  39. package/dist/cli/errors.js.map +1 -0
  40. package/dist/cli/format/context.d.ts +9 -0
  41. package/dist/cli/format/context.js +786 -0
  42. package/dist/cli/format/context.js.map +1 -0
  43. package/dist/cli/format/debug.d.ts +4 -0
  44. package/dist/cli/format/debug.js +60 -0
  45. package/dist/cli/format/debug.js.map +1 -0
  46. package/dist/cli/format/highlight.d.ts +3 -0
  47. package/dist/cli/format/highlight.js +106 -0
  48. package/dist/cli/format/highlight.js.map +1 -0
  49. package/dist/cli/format/progress.d.ts +13 -0
  50. package/dist/cli/format/progress.js +290 -0
  51. package/dist/cli/format/progress.js.map +1 -0
  52. package/dist/cli/format/range.d.ts +3 -0
  53. package/dist/cli/format/range.js +24 -0
  54. package/dist/cli/format/range.js.map +1 -0
  55. package/dist/cli/format/status.d.ts +83 -0
  56. package/dist/cli/format/status.js +530 -0
  57. package/dist/cli/format/status.js.map +1 -0
  58. package/dist/cli/help.d.ts +1 -0
  59. package/dist/cli/help.js +546 -0
  60. package/dist/cli/help.js.map +1 -0
  61. package/dist/cli/index.d.ts +2 -0
  62. package/dist/cli/index.js +40 -0
  63. package/dist/cli/index.js.map +1 -0
  64. package/dist/cli/install.d.ts +4 -0
  65. package/dist/cli/install.js +1735 -0
  66. package/dist/cli/install.js.map +1 -0
  67. package/dist/cli/managed-rg.d.ts +10 -0
  68. package/dist/cli/managed-rg.js +337 -0
  69. package/dist/cli/managed-rg.js.map +1 -0
  70. package/dist/cli/server-search.d.ts +3 -0
  71. package/dist/cli/server-search.js +12 -0
  72. package/dist/cli/server-search.js.map +1 -0
  73. package/dist/cli/types.d.ts +87 -0
  74. package/dist/cli/types.js +10 -0
  75. package/dist/cli/types.js.map +1 -0
  76. package/dist/cli/version.d.ts +1 -0
  77. package/dist/cli/version.js +13 -0
  78. package/dist/cli/version.js.map +1 -0
  79. package/dist/client/daemon-client.d.ts +31 -0
  80. package/dist/client/daemon-client.js +203 -0
  81. package/dist/client/daemon-client.js.map +1 -0
  82. package/dist/client/mode-router.d.ts +9 -0
  83. package/dist/client/mode-router.js +28 -0
  84. package/dist/client/mode-router.js.map +1 -0
  85. package/dist/client/search-policy.d.ts +11 -0
  86. package/dist/client/search-policy.js +15 -0
  87. package/dist/client/search-policy.js.map +1 -0
  88. package/dist/daemon/backend.d.ts +78 -0
  89. package/dist/daemon/backend.js +1118 -0
  90. package/dist/daemon/backend.js.map +1 -0
  91. package/dist/daemon/change-set.d.ts +30 -0
  92. package/dist/daemon/change-set.js +163 -0
  93. package/dist/daemon/change-set.js.map +1 -0
  94. package/dist/daemon/config.d.ts +27 -0
  95. package/dist/daemon/config.js +107 -0
  96. package/dist/daemon/config.js.map +1 -0
  97. package/dist/daemon/errors.d.ts +5 -0
  98. package/dist/daemon/errors.js +11 -0
  99. package/dist/daemon/errors.js.map +1 -0
  100. package/dist/daemon/http-server.d.ts +30 -0
  101. package/dist/daemon/http-server.js +307 -0
  102. package/dist/daemon/http-server.js.map +1 -0
  103. package/dist/daemon/index-coordinator.d.ts +22 -0
  104. package/dist/daemon/index-coordinator.js +55 -0
  105. package/dist/daemon/index-coordinator.js.map +1 -0
  106. package/dist/daemon/job-scheduler.d.ts +85 -0
  107. package/dist/daemon/job-scheduler.js +492 -0
  108. package/dist/daemon/job-scheduler.js.map +1 -0
  109. package/dist/daemon/logger.d.ts +10 -0
  110. package/dist/daemon/logger.js +101 -0
  111. package/dist/daemon/logger.js.map +1 -0
  112. package/dist/daemon/model-pool.d.ts +48 -0
  113. package/dist/daemon/model-pool.js +190 -0
  114. package/dist/daemon/model-pool.js.map +1 -0
  115. package/dist/daemon/root-lease.d.ts +14 -0
  116. package/dist/daemon/root-lease.js +197 -0
  117. package/dist/daemon/root-lease.js.map +1 -0
  118. package/dist/daemon/root-runtime.d.ts +80 -0
  119. package/dist/daemon/root-runtime.js +340 -0
  120. package/dist/daemon/root-runtime.js.map +1 -0
  121. package/dist/daemon/runtime-manager.d.ts +47 -0
  122. package/dist/daemon/runtime-manager.js +252 -0
  123. package/dist/daemon/runtime-manager.js.map +1 -0
  124. package/dist/daemon/runtime.d.ts +12 -0
  125. package/dist/daemon/runtime.js +105 -0
  126. package/dist/daemon/runtime.js.map +1 -0
  127. package/dist/daemon/server-controller.d.ts +38 -0
  128. package/dist/daemon/server-controller.js +327 -0
  129. package/dist/daemon/server-controller.js.map +1 -0
  130. package/dist/daemon/watch-manager.d.ts +62 -0
  131. package/dist/daemon/watch-manager.js +415 -0
  132. package/dist/daemon/watch-manager.js.map +1 -0
  133. package/dist/daemon/workspace-read-session-cache.d.ts +31 -0
  134. package/dist/daemon/workspace-read-session-cache.js +115 -0
  135. package/dist/daemon/workspace-read-session-cache.js.map +1 -0
  136. package/dist/engine/code-formats.d.ts +3 -0
  137. package/dist/engine/code-formats.js +14 -0
  138. package/dist/engine/code-formats.js.map +1 -0
  139. package/dist/engine/config.d.ts +57 -0
  140. package/dist/engine/config.js +351 -0
  141. package/dist/engine/config.js.map +1 -0
  142. package/dist/engine/errors.d.ts +20 -0
  143. package/dist/engine/errors.js +51 -0
  144. package/dist/engine/errors.js.map +1 -0
  145. package/dist/engine/extraction/code/adapter.d.ts +19 -0
  146. package/dist/engine/extraction/code/adapter.js +24 -0
  147. package/dist/engine/extraction/code/adapter.js.map +1 -0
  148. package/dist/engine/extraction/code/extractor.d.ts +13 -0
  149. package/dist/engine/extraction/code/extractor.js +696 -0
  150. package/dist/engine/extraction/code/extractor.js.map +1 -0
  151. package/dist/engine/extraction/code/families/c-family.d.ts +2 -0
  152. package/dist/engine/extraction/code/families/c-family.js +122 -0
  153. package/dist/engine/extraction/code/families/c-family.js.map +1 -0
  154. package/dist/engine/extraction/code/families/js-ts.d.ts +12 -0
  155. package/dist/engine/extraction/code/families/js-ts.js +118 -0
  156. package/dist/engine/extraction/code/families/js-ts.js.map +1 -0
  157. package/dist/engine/extraction/code/families/metadata.d.ts +8 -0
  158. package/dist/engine/extraction/code/families/metadata.js +86 -0
  159. package/dist/engine/extraction/code/families/metadata.js.map +1 -0
  160. package/dist/engine/extraction/code/families/name-field.d.ts +3 -0
  161. package/dist/engine/extraction/code/families/name-field.js +22 -0
  162. package/dist/engine/extraction/code/families/name-field.js.map +1 -0
  163. package/dist/engine/extraction/code/languages/c.d.ts +1 -0
  164. package/dist/engine/extraction/code/languages/c.js +12 -0
  165. package/dist/engine/extraction/code/languages/c.js.map +1 -0
  166. package/dist/engine/extraction/code/languages/cpp.d.ts +1 -0
  167. package/dist/engine/extraction/code/languages/cpp.js +18 -0
  168. package/dist/engine/extraction/code/languages/cpp.js.map +1 -0
  169. package/dist/engine/extraction/code/languages/go.d.ts +2 -0
  170. package/dist/engine/extraction/code/languages/go.js +70 -0
  171. package/dist/engine/extraction/code/languages/go.js.map +1 -0
  172. package/dist/engine/extraction/code/languages/java.d.ts +1 -0
  173. package/dist/engine/extraction/code/languages/java.js +17 -0
  174. package/dist/engine/extraction/code/languages/java.js.map +1 -0
  175. package/dist/engine/extraction/code/languages/javascript.d.ts +2 -0
  176. package/dist/engine/extraction/code/languages/javascript.js +23 -0
  177. package/dist/engine/extraction/code/languages/javascript.js.map +1 -0
  178. package/dist/engine/extraction/code/languages/python.d.ts +2 -0
  179. package/dist/engine/extraction/code/languages/python.js +52 -0
  180. package/dist/engine/extraction/code/languages/python.js.map +1 -0
  181. package/dist/engine/extraction/code/languages/rust.d.ts +2 -0
  182. package/dist/engine/extraction/code/languages/rust.js +25 -0
  183. package/dist/engine/extraction/code/languages/rust.js.map +1 -0
  184. package/dist/engine/extraction/code/languages/typescript.d.ts +2 -0
  185. package/dist/engine/extraction/code/languages/typescript.js +37 -0
  186. package/dist/engine/extraction/code/languages/typescript.js.map +1 -0
  187. package/dist/engine/extraction/code/tree-sitter/grammar.d.ts +4 -0
  188. package/dist/engine/extraction/code/tree-sitter/grammar.js +49 -0
  189. package/dist/engine/extraction/code/tree-sitter/grammar.js.map +1 -0
  190. package/dist/engine/extraction/code/tree-sitter/nodes.d.ts +3 -0
  191. package/dist/engine/extraction/code/tree-sitter/nodes.js +27 -0
  192. package/dist/engine/extraction/code/tree-sitter/nodes.js.map +1 -0
  193. package/dist/engine/extraction/code/tree-sitter/parser.d.ts +2 -0
  194. package/dist/engine/extraction/code/tree-sitter/parser.js +31 -0
  195. package/dist/engine/extraction/code/tree-sitter/parser.js.map +1 -0
  196. package/dist/engine/extraction/ids.d.ts +1 -0
  197. package/dist/engine/extraction/ids.js +5 -0
  198. package/dist/engine/extraction/ids.js.map +1 -0
  199. package/dist/engine/extraction/image/extractor.d.ts +5 -0
  200. package/dist/engine/extraction/image/extractor.js +35 -0
  201. package/dist/engine/extraction/image/extractor.js.map +1 -0
  202. package/dist/engine/extraction/index.d.ts +4 -0
  203. package/dist/engine/extraction/index.js +3 -0
  204. package/dist/engine/extraction/index.js.map +1 -0
  205. package/dist/engine/extraction/markdown/extractor.d.ts +7 -0
  206. package/dist/engine/extraction/markdown/extractor.js +362 -0
  207. package/dist/engine/extraction/markdown/extractor.js.map +1 -0
  208. package/dist/engine/extraction/runtime.d.ts +9 -0
  209. package/dist/engine/extraction/runtime.js +37 -0
  210. package/dist/engine/extraction/runtime.js.map +1 -0
  211. package/dist/engine/extraction/source.d.ts +18 -0
  212. package/dist/engine/extraction/source.js +22 -0
  213. package/dist/engine/extraction/source.js.map +1 -0
  214. package/dist/engine/extraction/text/extractor.d.ts +7 -0
  215. package/dist/engine/extraction/text/extractor.js +168 -0
  216. package/dist/engine/extraction/text/extractor.js.map +1 -0
  217. package/dist/engine/extraction/types.d.ts +4 -0
  218. package/dist/engine/extraction/types.js +2 -0
  219. package/dist/engine/extraction/types.js.map +1 -0
  220. package/dist/engine/extraction/vector-content.d.ts +5 -0
  221. package/dist/engine/extraction/vector-content.js +83 -0
  222. package/dist/engine/extraction/vector-content.js.map +1 -0
  223. package/dist/engine/file-size-policy.d.ts +6 -0
  224. package/dist/engine/file-size-policy.js +20 -0
  225. package/dist/engine/file-size-policy.js.map +1 -0
  226. package/dist/engine/file-type.d.ts +15 -0
  227. package/dist/engine/file-type.js +152 -0
  228. package/dist/engine/file-type.js.map +1 -0
  229. package/dist/engine/index-status.d.ts +9 -0
  230. package/dist/engine/index-status.js +38 -0
  231. package/dist/engine/index-status.js.map +1 -0
  232. package/dist/engine/manifest.d.ts +13 -0
  233. package/dist/engine/manifest.js +124 -0
  234. package/dist/engine/manifest.js.map +1 -0
  235. package/dist/engine/models/artifact-cache-lock.d.ts +16 -0
  236. package/dist/engine/models/artifact-cache-lock.js +228 -0
  237. package/dist/engine/models/artifact-cache-lock.js.map +1 -0
  238. package/dist/engine/models/artifact-downloader.d.ts +77 -0
  239. package/dist/engine/models/artifact-downloader.js +766 -0
  240. package/dist/engine/models/artifact-downloader.js.map +1 -0
  241. package/dist/engine/models/backends/llama-cpp.d.ts +100 -0
  242. package/dist/engine/models/backends/llama-cpp.js +567 -0
  243. package/dist/engine/models/backends/llama-cpp.js.map +1 -0
  244. package/dist/engine/models/backends/model2vec-runtime.d.ts +63 -0
  245. package/dist/engine/models/backends/model2vec-runtime.js +112 -0
  246. package/dist/engine/models/backends/model2vec-runtime.js.map +1 -0
  247. package/dist/engine/models/backends/model2vec-tokenizer.d.ts +2 -0
  248. package/dist/engine/models/backends/model2vec-tokenizer.js +42 -0
  249. package/dist/engine/models/backends/model2vec-tokenizer.js.map +1 -0
  250. package/dist/engine/models/backends/model2vec-worker-pool.d.ts +25 -0
  251. package/dist/engine/models/backends/model2vec-worker-pool.js +264 -0
  252. package/dist/engine/models/backends/model2vec-worker-pool.js.map +1 -0
  253. package/dist/engine/models/backends/model2vec-worker.d.ts +1 -0
  254. package/dist/engine/models/backends/model2vec-worker.js +41 -0
  255. package/dist/engine/models/backends/model2vec-worker.js.map +1 -0
  256. package/dist/engine/models/backends/model2vec.d.ts +38 -0
  257. package/dist/engine/models/backends/model2vec.js +344 -0
  258. package/dist/engine/models/backends/model2vec.js.map +1 -0
  259. package/dist/engine/models/backends/qwen.d.ts +44 -0
  260. package/dist/engine/models/backends/qwen.js +411 -0
  261. package/dist/engine/models/backends/qwen.js.map +1 -0
  262. package/dist/engine/models/backends/transformers-js.d.ts +90 -0
  263. package/dist/engine/models/backends/transformers-js.js +411 -0
  264. package/dist/engine/models/backends/transformers-js.js.map +1 -0
  265. package/dist/engine/models/catalog.d.ts +490 -0
  266. package/dist/engine/models/catalog.js +522 -0
  267. package/dist/engine/models/catalog.js.map +1 -0
  268. package/dist/engine/models/download-progress.d.ts +16 -0
  269. package/dist/engine/models/download-progress.js +47 -0
  270. package/dist/engine/models/download-progress.js.map +1 -0
  271. package/dist/engine/models/embeddings.d.ts +73 -0
  272. package/dist/engine/models/embeddings.js +125 -0
  273. package/dist/engine/models/embeddings.js.map +1 -0
  274. package/dist/engine/models/factory.d.ts +2 -0
  275. package/dist/engine/models/factory.js +51 -0
  276. package/dist/engine/models/factory.js.map +1 -0
  277. package/dist/engine/models/index.d.ts +5 -0
  278. package/dist/engine/models/index.js +6 -0
  279. package/dist/engine/models/index.js.map +1 -0
  280. package/dist/engine/models/local-embedding-parallelism.d.ts +15 -0
  281. package/dist/engine/models/local-embedding-parallelism.js +63 -0
  282. package/dist/engine/models/local-embedding-parallelism.js.map +1 -0
  283. package/dist/engine/models/local-embedding-queue.d.ts +12 -0
  284. package/dist/engine/models/local-embedding-queue.js +65 -0
  285. package/dist/engine/models/local-embedding-queue.js.map +1 -0
  286. package/dist/engine/models/ranking.d.ts +19 -0
  287. package/dist/engine/models/ranking.js +2 -0
  288. package/dist/engine/models/ranking.js.map +1 -0
  289. package/dist/engine/models/resolution.d.ts +8 -0
  290. package/dist/engine/models/resolution.js +22 -0
  291. package/dist/engine/models/resolution.js.map +1 -0
  292. package/dist/engine/pipeline/indexing/index.d.ts +14 -0
  293. package/dist/engine/pipeline/indexing/index.js +1219 -0
  294. package/dist/engine/pipeline/indexing/index.js.map +1 -0
  295. package/dist/engine/pipeline/indexing/input-budget.d.ts +2 -0
  296. package/dist/engine/pipeline/indexing/input-budget.js +51 -0
  297. package/dist/engine/pipeline/indexing/input-budget.js.map +1 -0
  298. package/dist/engine/pipeline/indexing/root-paths.d.ts +7 -0
  299. package/dist/engine/pipeline/indexing/root-paths.js +148 -0
  300. package/dist/engine/pipeline/indexing/root-paths.js.map +1 -0
  301. package/dist/engine/pipeline/indexing/scanner/index.d.ts +14 -0
  302. package/dist/engine/pipeline/indexing/scanner/index.js +776 -0
  303. package/dist/engine/pipeline/indexing/scanner/index.js.map +1 -0
  304. package/dist/engine/pipeline/search/index.d.ts +12 -0
  305. package/dist/engine/pipeline/search/index.js +811 -0
  306. package/dist/engine/pipeline/search/index.js.map +1 -0
  307. package/dist/engine/service/index.d.ts +3 -0
  308. package/dist/engine/service/index.js +2 -0
  309. package/dist/engine/service/index.js.map +1 -0
  310. package/dist/engine/service/lexical.d.ts +28 -0
  311. package/dist/engine/service/lexical.js +446 -0
  312. package/dist/engine/service/lexical.js.map +1 -0
  313. package/dist/engine/service/root.d.ts +15 -0
  314. package/dist/engine/service/root.js +57 -0
  315. package/dist/engine/service/root.js.map +1 -0
  316. package/dist/engine/service/structure-enrichment.d.ts +8 -0
  317. package/dist/engine/service/structure-enrichment.js +178 -0
  318. package/dist/engine/service/structure-enrichment.js.map +1 -0
  319. package/dist/engine/service/types.d.ts +212 -0
  320. package/dist/engine/service/types.js +2 -0
  321. package/dist/engine/service/types.js.map +1 -0
  322. package/dist/engine/service/workspace-index.d.ts +26 -0
  323. package/dist/engine/service/workspace-index.js +157 -0
  324. package/dist/engine/service/workspace-index.js.map +1 -0
  325. package/dist/engine/service/zvec-grep.d.ts +15 -0
  326. package/dist/engine/service/zvec-grep.js +1520 -0
  327. package/dist/engine/service/zvec-grep.js.map +1 -0
  328. package/dist/engine/storage/index.d.ts +53 -0
  329. package/dist/engine/storage/index.js +3 -0
  330. package/dist/engine/storage/index.js.map +1 -0
  331. package/dist/engine/storage/layout.d.ts +10 -0
  332. package/dist/engine/storage/layout.js +29 -0
  333. package/dist/engine/storage/layout.js.map +1 -0
  334. package/dist/engine/storage/zvec.d.ts +4 -0
  335. package/dist/engine/storage/zvec.js +976 -0
  336. package/dist/engine/storage/zvec.js.map +1 -0
  337. package/dist/engine/types.d.ts +303 -0
  338. package/dist/engine/types.js +14 -0
  339. package/dist/engine/types.js.map +1 -0
  340. package/dist/engine/utils/atomic-file.d.ts +3 -0
  341. package/dist/engine/utils/atomic-file.js +39 -0
  342. package/dist/engine/utils/atomic-file.js.map +1 -0
  343. package/dist/engine/utils/daemon-lease.d.ts +17 -0
  344. package/dist/engine/utils/daemon-lease.js +175 -0
  345. package/dist/engine/utils/daemon-lease.js.map +1 -0
  346. package/dist/engine/utils/file-selection.d.ts +10 -0
  347. package/dist/engine/utils/file-selection.js +157 -0
  348. package/dist/engine/utils/file-selection.js.map +1 -0
  349. package/dist/engine/utils/glob.d.ts +9 -0
  350. package/dist/engine/utils/glob.js +208 -0
  351. package/dist/engine/utils/glob.js.map +1 -0
  352. package/dist/engine/utils/hash.d.ts +2 -0
  353. package/dist/engine/utils/hash.js +8 -0
  354. package/dist/engine/utils/hash.js.map +1 -0
  355. package/dist/engine/utils/json.d.ts +8 -0
  356. package/dist/engine/utils/json.js +83 -0
  357. package/dist/engine/utils/json.js.map +1 -0
  358. package/dist/engine/utils/lock.d.ts +19 -0
  359. package/dist/engine/utils/lock.js +254 -0
  360. package/dist/engine/utils/lock.js.map +1 -0
  361. package/dist/engine/utils/path.d.ts +4 -0
  362. package/dist/engine/utils/path.js +18 -0
  363. package/dist/engine/utils/path.js.map +1 -0
  364. package/dist/engine/utils/timing.d.ts +19 -0
  365. package/dist/engine/utils/timing.js +87 -0
  366. package/dist/engine/utils/timing.js.map +1 -0
  367. package/dist/index-progress.d.ts +10 -0
  368. package/dist/index-progress.js +159 -0
  369. package/dist/index-progress.js.map +1 -0
  370. package/dist/index.d.ts +6 -0
  371. package/dist/index.js +4 -0
  372. package/dist/index.js.map +1 -0
  373. package/dist/mcp/http-transport.d.ts +27 -0
  374. package/dist/mcp/http-transport.js +182 -0
  375. package/dist/mcp/http-transport.js.map +1 -0
  376. package/dist/mcp/input-normalization.d.ts +38 -0
  377. package/dist/mcp/input-normalization.js +104 -0
  378. package/dist/mcp/input-normalization.js.map +1 -0
  379. package/dist/mcp/progress-heartbeat.d.ts +17 -0
  380. package/dist/mcp/progress-heartbeat.js +46 -0
  381. package/dist/mcp/progress-heartbeat.js.map +1 -0
  382. package/dist/mcp/request-metadata.d.ts +2 -0
  383. package/dist/mcp/request-metadata.js +11 -0
  384. package/dist/mcp/request-metadata.js.map +1 -0
  385. package/dist/mcp/request-state.d.ts +40 -0
  386. package/dist/mcp/request-state.js +210 -0
  387. package/dist/mcp/request-state.js.map +1 -0
  388. package/dist/mcp/result-format.d.ts +13 -0
  389. package/dist/mcp/result-format.js +75 -0
  390. package/dist/mcp/result-format.js.map +1 -0
  391. package/dist/mcp/schemas.d.ts +668 -0
  392. package/dist/mcp/schemas.js +512 -0
  393. package/dist/mcp/schemas.js.map +1 -0
  394. package/dist/mcp/stdio-bridge.d.ts +15 -0
  395. package/dist/mcp/stdio-bridge.js +190 -0
  396. package/dist/mcp/stdio-bridge.js.map +1 -0
  397. package/dist/mcp/tools.d.ts +153 -0
  398. package/dist/mcp/tools.js +488 -0
  399. package/dist/mcp/tools.js.map +1 -0
  400. package/dist/mcp/toolset.d.ts +5 -0
  401. package/dist/mcp/toolset.js +12 -0
  402. package/dist/mcp/toolset.js.map +1 -0
  403. package/dist/observability/trace-context.d.ts +11 -0
  404. package/dist/observability/trace-context.js +138 -0
  405. package/dist/observability/trace-context.js.map +1 -0
  406. package/dist/prompts/zvec-grep-guidance.d.ts +2 -0
  407. package/dist/prompts/zvec-grep-guidance.js +9 -0
  408. package/dist/prompts/zvec-grep-guidance.js.map +1 -0
  409. package/docs/01-agents.md +217 -0
  410. package/docs/02-cli.md +259 -0
  411. package/docs/03-mcp.md +185 -0
  412. package/docs/04-pipeline.md +234 -0
  413. package/docs/05-architecture.md +86 -0
  414. package/docs/06-server.md +279 -0
  415. package/docs/07-embedding.md +227 -0
  416. package/docs/08-roadmap.md +85 -0
  417. package/docs/README.md +53 -0
  418. package/package.json +87 -0
@@ -0,0 +1,786 @@
1
+ import { createHighlighter, shouldUseColor } from "./highlight.js";
2
+ import { rangeLabel, rangeStartLine } from "./range.js";
3
+ const SHORT_SOURCE_MAX_LINES = 10;
4
+ const SHORT_SOURCE_CONTEXT_BEFORE = 2;
5
+ const SHORT_OUTLINE_MAX_LINES = 7;
6
+ const AGENT_PREVIEW_MAX_LINE_LENGTH = 160;
7
+ const HUMAN_PREVIEW_MAX_LINE_LENGTH = 120;
8
+ export function printAgentContextResult(result, options) {
9
+ for (const line of agentContextLines(result, options)) {
10
+ console.log(line);
11
+ }
12
+ }
13
+ /** Print the CLI query layout without the MCP cross-group fill presentation. */
14
+ export function printCliContextResult(result, options) {
15
+ if (options.human) {
16
+ printCliHumanContextResult(result, options);
17
+ return;
18
+ }
19
+ for (const line of cliAgentContextLines(result, options)) {
20
+ console.log(line);
21
+ }
22
+ }
23
+ export function formatCliContextResult(result, options) {
24
+ return cliAgentContextLines(result, options).join("\n");
25
+ }
26
+ export function formatAgentContextResult(result, options) {
27
+ return agentContextLines(result, options).join("\n");
28
+ }
29
+ function cliAgentContextLines(result, options) {
30
+ if (result.source === "rg" || result.groupResults === undefined) {
31
+ return agentContextLines(result, options);
32
+ }
33
+ const lines = [`query groups (${result.groupResults.length}):`];
34
+ for (const [index, group] of result.groupResults.entries()) {
35
+ if (index > 0) {
36
+ lines.push("");
37
+ }
38
+ lines.push(`${group.id} [${group.role}]: ${oneLine(group.query)}`);
39
+ lines.push(`hits: ${group.items.length}`);
40
+ const groupResult = contextResultForGroup(result, group);
41
+ const itemLines = agentContextLines(groupResult, options);
42
+ if (itemLines.length > 0) {
43
+ lines.push("", ...itemLines);
44
+ }
45
+ }
46
+ return lines;
47
+ }
48
+ function contextResultForGroup(result, group) {
49
+ return {
50
+ ...result,
51
+ query: group.query,
52
+ items: group.items.map((item) => ({
53
+ ...item,
54
+ queryGroups: undefined,
55
+ selectionReason: undefined,
56
+ coverageGroup: undefined,
57
+ })),
58
+ groupResults: undefined,
59
+ diagnostics: {
60
+ ...result.diagnostics,
61
+ emptyReason: group.items.length === 0 ? "no_matches" : undefined,
62
+ index: result.diagnostics.index
63
+ ? {
64
+ ...result.diagnostics.index,
65
+ hitsReturned: group.items.length,
66
+ queryGroups: [
67
+ { id: group.id, query: group.query, role: group.role },
68
+ ],
69
+ }
70
+ : undefined,
71
+ },
72
+ };
73
+ }
74
+ function agentContextLines(result, options) {
75
+ if (result.source === "rg") {
76
+ return agentRgContextLines(result, options);
77
+ }
78
+ const highlighter = shouldUseColor(options)
79
+ ? createHighlighter(result.query, true)
80
+ : plainText;
81
+ const preview = previewMode(result, options);
82
+ const items = [...result.items].sort(compareContextItems);
83
+ const lines = [];
84
+ if (items.length === 0) {
85
+ return [emptyContextLabel(result), ...emptyContextDetailLines(result)];
86
+ }
87
+ const queryGroups = result.diagnostics.index?.queryGroups ?? [];
88
+ if (queryGroups.length > 1) {
89
+ lines.push(`query groups (${queryGroups.length}):`, ...queryGroups.map((group) => ` ${group.id} [${group.role}]: ${group.query}`), "selection: primary-group coverage then global_fill; prioritized<=6; all candidates detailed", "");
90
+ }
91
+ let first = true;
92
+ for (const item of items) {
93
+ if (!first) {
94
+ lines.push("");
95
+ }
96
+ first = false;
97
+ lines.push(agentRankedItemHeader(item, options.trace === true));
98
+ const groupLine = agentQueryGroupLine(item);
99
+ if (groupLine) {
100
+ lines.push(groupLine);
101
+ }
102
+ const matched = matchedRangeLine(item);
103
+ const outlineLines = agentOutlineLines(item, preview);
104
+ const sourceLines = sourceLinesForPreview(item, preview, highlighter, {
105
+ maxLineLength: AGENT_PREVIEW_MAX_LINE_LENGTH,
106
+ });
107
+ lines.push(...agentMetadataLines(item, [...outlineLines, ...sourceLines]), ...outlineLines);
108
+ if (matched && preview !== "none") {
109
+ lines.push(matched);
110
+ }
111
+ if (sourceLines.length > 0) {
112
+ if (item.kind !== "lexical_match" && preview !== "none") {
113
+ lines.push("source:");
114
+ }
115
+ lines.push(...sourceLines);
116
+ }
117
+ if (options.trace) {
118
+ const trace = traceDetailLine(item);
119
+ if (trace) {
120
+ lines.push(`trace: ${trace}`);
121
+ }
122
+ }
123
+ }
124
+ return lines;
125
+ }
126
+ function agentRankedItemHeader(item, trace) {
127
+ const score = trace && typeof item.score === "number"
128
+ ? ` score=${formatScore(item.score)}`
129
+ : "";
130
+ const selection = item.selectionReason === "coverage"
131
+ ? ` [group_coverage: ${item.coverageGroup ?? "unknown"}]`
132
+ : item.selectionReason === "global_fill"
133
+ ? " [global_fill]"
134
+ : "";
135
+ return `#${item.rank}${selection} matchedBy=${item.matchedBy}${score} ${item.file.relativePath}:${rangeLabel(headerRange(item))}`;
136
+ }
137
+ function agentQueryGroupLine(item) {
138
+ if (!item.queryGroups || item.queryGroups.length === 0) {
139
+ return undefined;
140
+ }
141
+ return `groups: ${item.queryGroups
142
+ .map((group) => `${group.id}#${group.rank} (${group.matchedBy})`)
143
+ .join(", ")}`;
144
+ }
145
+ function agentRgContextLines(result, options) {
146
+ if (result.items.length === 0) {
147
+ return [emptyContextLabel(result), ...emptyContextDetailLines(result)];
148
+ }
149
+ const highlighter = shouldUseColor(options)
150
+ ? createHighlighter(result.query, true)
151
+ : plainText;
152
+ const lines = [];
153
+ for (const group of groupContextItems(result.items)) {
154
+ lines.push(group.file.relativePath);
155
+ for (const block of groupAgentRgItems(group)) {
156
+ if (block.kind === "symbol" && !isRedundantDeclarationBlock(block)) {
157
+ lines.push(...agentRgSymbolBlockLines(block, highlighter));
158
+ }
159
+ else {
160
+ lines.push(...block.items.flatMap((item) => agentRgFileSourceLines(item, highlighter)));
161
+ }
162
+ }
163
+ }
164
+ return lines;
165
+ }
166
+ function agentRgSymbolBlockLines(block, highlighter) {
167
+ const sourceLines = agentRgSymbolSourceLines(block.items, " ", highlighter);
168
+ const header = ` ${rangeLabel(block.range)} [${block.label}]`;
169
+ if (block.items.length === 1 && sourceLines.length === 1) {
170
+ return [`${header} ${sourceLines[0].trimStart()}`];
171
+ }
172
+ return [header, ...sourceLines];
173
+ }
174
+ function groupAgentRgItems(group) {
175
+ const blocks = [];
176
+ const symbolBlocks = new Map();
177
+ for (const item of [...group.items].sort(compareContextItems)) {
178
+ const symbol = agentRgSymbol(item);
179
+ if (!symbol) {
180
+ blocks.push({
181
+ kind: "raw",
182
+ firstRank: item.rank,
183
+ items: [item],
184
+ });
185
+ continue;
186
+ }
187
+ const key = `${item.container.entityId}\0${symbol.label}`;
188
+ const existing = symbolBlocks.get(key);
189
+ if (existing) {
190
+ existing.firstRank = Math.min(existing.firstRank, item.rank);
191
+ existing.range = mergeAgentRgSymbolRanges(existing.range, item.container.range);
192
+ existing.items.push(item);
193
+ continue;
194
+ }
195
+ const block = {
196
+ kind: "symbol",
197
+ firstRank: item.rank,
198
+ range: item.container.range,
199
+ label: symbol.label,
200
+ items: [item],
201
+ };
202
+ blocks.push(block);
203
+ symbolBlocks.set(key, block);
204
+ }
205
+ return blocks.sort((left, right) => left.firstRank - right.firstRank ||
206
+ rangeStartLine(agentRgBlockRange(left)) -
207
+ rangeStartLine(agentRgBlockRange(right)));
208
+ }
209
+ function mergeAgentRgSymbolRanges(left, right) {
210
+ if (left.kind !== "text" || right.kind !== "text") {
211
+ return left;
212
+ }
213
+ return {
214
+ kind: "text",
215
+ startLine: Math.min(left.startLine, right.startLine),
216
+ endLine: Math.max(left.endLine, right.endLine),
217
+ startOffset: left.startLine <= right.startLine ? left.startOffset : right.startOffset,
218
+ endOffset: left.endLine >= right.endLine ? left.endOffset : right.endOffset,
219
+ };
220
+ }
221
+ function agentRgBlockRange(block) {
222
+ return block.kind === "symbol" ? block.range : block.items[0].range;
223
+ }
224
+ function agentRgSymbol(item) {
225
+ const container = item.container;
226
+ const metadata = container?.metadata ?? item.metadata;
227
+ if (!container || !metadata) {
228
+ return undefined;
229
+ }
230
+ if (metadata.kind === "code") {
231
+ if (!metadata.symbolName) {
232
+ return undefined;
233
+ }
234
+ const qualifiedName = metadata.scope
235
+ ? `${metadata.scope}.${metadata.symbolName}`
236
+ : metadata.symbolName;
237
+ return { label: `${metadata.symbolType} ${qualifiedName}` };
238
+ }
239
+ if (!metadata.heading) {
240
+ return undefined;
241
+ }
242
+ const qualifiedHeading = metadata.scope
243
+ ? `${metadata.scope} > ${metadata.heading}`
244
+ : metadata.heading;
245
+ return { label: `heading ${qualifiedHeading}` };
246
+ }
247
+ function agentRgSymbolSourceLines(items, indent, highlighter) {
248
+ const byLine = new Map();
249
+ const unnumbered = [];
250
+ let order = 0;
251
+ for (const item of [...items].sort(compareContextItems)) {
252
+ for (const entry of sourceLineEntries(item)) {
253
+ const candidate = {
254
+ ...entry,
255
+ marker: sourceLineMarker(item, entry),
256
+ order: order++,
257
+ };
258
+ if (entry.lineNumber === null) {
259
+ unnumbered.push(candidate);
260
+ continue;
261
+ }
262
+ const existing = byLine.get(entry.lineNumber);
263
+ if (!existing) {
264
+ byLine.set(entry.lineNumber, candidate);
265
+ }
266
+ else if (candidate.marker === ":" && existing.marker !== ":") {
267
+ existing.marker = ":";
268
+ }
269
+ }
270
+ }
271
+ return [...byLine.values(), ...unnumbered]
272
+ .sort((left, right) => (left.lineNumber ?? Number.MAX_SAFE_INTEGER) -
273
+ (right.lineNumber ?? Number.MAX_SAFE_INTEGER) ||
274
+ left.order - right.order)
275
+ .map((entry) => `${indent}${formatSourceLine(entry, highlighter, undefined, entry.marker)}`);
276
+ }
277
+ function isRedundantDeclarationBlock(block) {
278
+ if (block.items.length !== 1) {
279
+ return false;
280
+ }
281
+ const item = block.items[0];
282
+ const metadata = item.container?.metadata ?? item.metadata;
283
+ const containerRange = item.container?.range;
284
+ if (metadata?.kind !== "code" ||
285
+ !metadata.symbolName ||
286
+ containerRange?.kind !== "text") {
287
+ return false;
288
+ }
289
+ const matchedLines = sourceLineEntries(item).filter((entry) => sourceLineMarker(item, entry) === ":");
290
+ const match = matchedLines[0];
291
+ return (matchedLines.length === 1 &&
292
+ match?.lineNumber === containerRange.startLine &&
293
+ match.text.includes(metadata.symbolName));
294
+ }
295
+ function agentRgFileSourceLines(item, highlighter) {
296
+ return sourceLineEntries(item).map((entry) => ` ${formatSourceLine(entry, highlighter, undefined, sourceLineMarker(item, entry))}`);
297
+ }
298
+ function plainText(value) {
299
+ return value;
300
+ }
301
+ function printCliHumanContextResult(result, options) {
302
+ if (result.source === "rg" || result.groupResults === undefined) {
303
+ printHumanContextResult(result, options);
304
+ return;
305
+ }
306
+ const theme = createHumanTheme(options);
307
+ const allItems = result.groupResults.flatMap((group) => group.items);
308
+ printHumanField(theme, "Context", contextLabel(result));
309
+ printHumanField(theme, "Query", result.query);
310
+ const routes = routeLabel(result);
311
+ if (routes) {
312
+ printHumanField(theme, "Routes", theme.accent(routes));
313
+ }
314
+ printHumanField(theme, "Coverage", theme.status(result.coverage));
315
+ printHumanField(theme, "Groups", String(result.groupResults.length));
316
+ printHumanField(theme, "Files", String(groupContextItems(allItems).length));
317
+ printHumanField(theme, "Hits", String(allItems.length));
318
+ for (const group of result.groupResults) {
319
+ console.log("");
320
+ printHumanField(theme, "Group", `${group.id} [${group.role}]`);
321
+ printHumanField(theme, "Query", createHighlighter(group.query, shouldUseColor(options))(oneLine(group.query)));
322
+ printHumanField(theme, "Hits", String(group.items.length));
323
+ if (group.items.length === 0) {
324
+ printHumanField(theme, "Reason", "No matches");
325
+ continue;
326
+ }
327
+ printHumanItemGroups(groupContextItems(group.items), createHighlighter(group.query, shouldUseColor(options)), theme, previewMode(result, options), options);
328
+ }
329
+ }
330
+ export function printHumanContextResult(result, options) {
331
+ const highlighter = createHighlighter(result.query, shouldUseColor(options));
332
+ const theme = createHumanTheme(options);
333
+ const groups = groupContextItems(result.items);
334
+ const preview = previewMode(result, options);
335
+ printHumanField(theme, "Context", contextLabel(result));
336
+ printHumanField(theme, "Query", highlighter(result.query));
337
+ const routes = routeLabel(result);
338
+ if (routes) {
339
+ printHumanField(theme, "Routes", theme.accent(routes));
340
+ }
341
+ printHumanField(theme, "Coverage", theme.status(result.coverage));
342
+ printHumanField(theme, "Files", String(groups.length));
343
+ printHumanField(theme, "Hits", String(result.items.length));
344
+ if (groups.length === 0) {
345
+ printHumanField(theme, "Reason", emptyContextLabel(result).replace(/\.$/, ""));
346
+ const missingPaths = result.diagnostics.rg?.missingPaths ?? [];
347
+ if (missingPaths.length > 0) {
348
+ printHumanField(theme, "Missing", missingPaths.join(", "));
349
+ }
350
+ return;
351
+ }
352
+ printHumanItemGroups(groups, highlighter, theme, preview, options);
353
+ }
354
+ function printHumanItemGroups(groups, highlighter, theme, preview, options) {
355
+ for (const group of groups) {
356
+ console.log("");
357
+ printHumanField(theme, "File", theme.path(group.file.relativePath));
358
+ printHumanField(theme, "Hits", String(group.items.length));
359
+ for (const item of group.items.sort(compareContextItems)) {
360
+ const score = typeof item.score === "number"
361
+ ? ` score=${formatScore(item.score)}`
362
+ : "";
363
+ const matched = matchedRangeLine(item);
364
+ console.log("");
365
+ console.log(` ${theme.accent(`#${item.rank}`)} ${entitySummary(item)} matchedBy=${theme.accent(item.matchedBy)}${score}`);
366
+ console.log(` ${theme.label("Range")}: ${rangeLabel(item.range)} ${theme.label("Status")}: ${theme.status(item.status)}`);
367
+ if (matched && preview !== "none") {
368
+ console.log(` ${theme.label("Matched")}: ${theme.accent(rangeLabel(item.excerptRange ?? item.range))}`);
369
+ }
370
+ for (const line of humanMetadataLines(item.metadata)) {
371
+ console.log(` ${line}`);
372
+ }
373
+ const outlineLines = outlineLinesForPreview(item, preview);
374
+ if (outlineLines.length > 0) {
375
+ console.log(` ${theme.label("Outline")}:`);
376
+ for (const line of outlineLines) {
377
+ console.log(` ${line}`);
378
+ }
379
+ }
380
+ const sourceLines = sourceLinesForPreview(item, preview, highlighter, {
381
+ maxLineLength: HUMAN_PREVIEW_MAX_LINE_LENGTH,
382
+ });
383
+ if (sourceLines.length > 0) {
384
+ console.log(` ${theme.label("Source")}:`);
385
+ for (const line of sourceLines) {
386
+ console.log(` ${line}`);
387
+ }
388
+ }
389
+ if (options.trace) {
390
+ const trace = traceDetailLine(item);
391
+ if (trace) {
392
+ console.log(` ${theme.label("Trace")}: ${trace}`);
393
+ }
394
+ }
395
+ }
396
+ }
397
+ }
398
+ export function contextWarningLines(result) {
399
+ const missingPaths = result.diagnostics.rg?.missingPaths ?? [];
400
+ if (missingPaths.length === 0 ||
401
+ result.diagnostics.emptyReason === "no_searchable_files") {
402
+ return [];
403
+ }
404
+ return [
405
+ `warning: skipped missing ${missingPaths.length === 1 ? "path" : "paths"}: ${missingPaths.join(", ")}`,
406
+ ];
407
+ }
408
+ function previewMode(result, options) {
409
+ if (result.source === "rg") {
410
+ return "full";
411
+ }
412
+ return options.preview ?? (options.human ? "full" : "none");
413
+ }
414
+ function emptyContextLabel(result) {
415
+ switch (result.diagnostics.emptyReason ?? "no_matches") {
416
+ case "no_searchable_files":
417
+ return "No searchable files.";
418
+ case "no_matches":
419
+ return "No matches.";
420
+ }
421
+ }
422
+ function emptyContextDetailLines(result) {
423
+ const lines = [];
424
+ const missingPaths = result.diagnostics.rg?.missingPaths ?? [];
425
+ if (missingPaths.length > 0) {
426
+ lines.push(`missing: ${missingPaths.join(", ")}`);
427
+ }
428
+ return lines;
429
+ }
430
+ function groupContextItems(items) {
431
+ const groups = new Map();
432
+ for (const item of items) {
433
+ const key = item.file.relativePath;
434
+ const existing = groups.get(key);
435
+ if (existing) {
436
+ existing.items.push(item);
437
+ existing.firstRank = Math.min(existing.firstRank, item.rank);
438
+ continue;
439
+ }
440
+ groups.set(key, {
441
+ file: item.file,
442
+ firstRank: item.rank,
443
+ items: [item],
444
+ });
445
+ }
446
+ return [...groups.values()].sort((left, right) => left.firstRank - right.firstRank ||
447
+ left.file.relativePath.localeCompare(right.file.relativePath));
448
+ }
449
+ function compareContextItems(left, right) {
450
+ return (left.rank - right.rank ||
451
+ rangeStartLine(left.range) - rangeStartLine(right.range) ||
452
+ rangeLabel(left.range).localeCompare(rangeLabel(right.range)));
453
+ }
454
+ function agentMetadataLines(item, visiblePreviewLines) {
455
+ const lines = [];
456
+ if (item.status === "possibly_stale") {
457
+ lines.push("status: possibly_stale");
458
+ }
459
+ lines.push(...agentMetadataFields(item.metadata, visiblePreviewLines, {
460
+ forceSymbol: item.kind === "lexical_match" && item.container !== undefined,
461
+ }));
462
+ return lines;
463
+ }
464
+ function agentMetadataFields(metadata, visiblePreviewLines, options = {}) {
465
+ if (!metadata) {
466
+ return [];
467
+ }
468
+ if (metadata.kind === "code") {
469
+ const lines = [];
470
+ if (metadata.symbolName &&
471
+ (options.forceSymbol ||
472
+ !previewLinesContain(visiblePreviewLines, metadata.symbolName))) {
473
+ const scope = metadata.scope ? ` scope: ${metadata.scope}` : "";
474
+ lines.push(`symbol: ${metadata.symbolType} ${metadata.symbolName}${scope}`);
475
+ }
476
+ return lines;
477
+ }
478
+ const lines = [];
479
+ if (metadata.heading) {
480
+ lines.push(`heading: ${metadata.heading}`);
481
+ }
482
+ if (typeof metadata.level === "number") {
483
+ lines.push(`heading_level: ${metadata.level}`);
484
+ }
485
+ if (metadata.scope) {
486
+ lines.push(`scope: ${metadata.scope}`);
487
+ }
488
+ return lines;
489
+ }
490
+ function previewLinesContain(lines, value) {
491
+ return lines.some((line) => line.includes(value));
492
+ }
493
+ function agentOutlineLines(item, preview) {
494
+ const lines = outlineLinesForPreview(item, preview);
495
+ if (lines.length === 0) {
496
+ return [];
497
+ }
498
+ return ["outline:", ...lines];
499
+ }
500
+ function outlineLinesForPreview(item, preview) {
501
+ if (preview === "none") {
502
+ return [];
503
+ }
504
+ const outline = outlineContent(item);
505
+ if (!outline) {
506
+ return [];
507
+ }
508
+ const lines = splitContentLines(outline);
509
+ return preview === "short"
510
+ ? clipLines(lines, SHORT_OUTLINE_MAX_LINES)
511
+ : lines;
512
+ }
513
+ function outlineContent(item) {
514
+ if (item.contentRole === "outline") {
515
+ return item.content;
516
+ }
517
+ return item.outline;
518
+ }
519
+ function itemHasSourceContent(item) {
520
+ return item.contentRole !== "outline" && item.content.length > 0;
521
+ }
522
+ function matchedRangeLine(item) {
523
+ if (item.kind === "lexical_match") {
524
+ return undefined;
525
+ }
526
+ if (!item.excerptRange ||
527
+ rangeLabel(item.excerptRange) === rangeLabel(item.range)) {
528
+ return undefined;
529
+ }
530
+ return `matched: ${rangeLabel(item.excerptRange)}`;
531
+ }
532
+ function humanMetadataLines(metadata) {
533
+ if (!metadata) {
534
+ return [];
535
+ }
536
+ if (metadata.kind === "code") {
537
+ const lines = [`Kind: code/${metadata.symbolType}`];
538
+ if (metadata.symbolName) {
539
+ lines.push(`Symbol: ${metadata.symbolName}`);
540
+ }
541
+ if (metadata.scope) {
542
+ lines.push(`Scope: ${metadata.scope}`);
543
+ }
544
+ if (metadata.signature) {
545
+ lines.push(`Signature: ${truncate(oneLine(metadata.signature), HUMAN_PREVIEW_MAX_LINE_LENGTH)}`);
546
+ }
547
+ if (metadata.modifiers.length > 0) {
548
+ lines.push(`Modifiers: ${metadata.modifiers.join(", ")}`);
549
+ }
550
+ return lines;
551
+ }
552
+ const lines = [`Kind: markdown`];
553
+ if (metadata.heading) {
554
+ lines.push(`Heading: ${metadata.heading}`);
555
+ }
556
+ if (typeof metadata.level === "number") {
557
+ lines.push(`Heading level: ${metadata.level}`);
558
+ }
559
+ if (metadata.scope) {
560
+ lines.push(`Scope: ${metadata.scope}`);
561
+ }
562
+ return lines;
563
+ }
564
+ function numberedSourceLines(item, highlighter) {
565
+ return sourceLineEntries(item).map((entry) => formatSourceLine(entry, highlighter, undefined, sourceLineMarker(item, entry)));
566
+ }
567
+ function sourceLinesForPreview(item, preview, highlighter, options) {
568
+ if (!itemHasSourceContent(item)) {
569
+ return [];
570
+ }
571
+ if (preview === "full") {
572
+ return numberedSourceLines(item, highlighter);
573
+ }
574
+ const entries = sourceLineEntries(item);
575
+ if (entries.length === 0) {
576
+ return [];
577
+ }
578
+ if (preview === "none") {
579
+ const entry = entries[sourceAnchorIndex(item, entries)];
580
+ return entry
581
+ ? [
582
+ formatSourceLine(entry, highlighter, options.maxLineLength, sourceLineMarker(item, entry)),
583
+ ]
584
+ : [];
585
+ }
586
+ const lines = sourceWindowEntries(item, entries, SHORT_SOURCE_MAX_LINES);
587
+ return lines.map((line) => typeof line === "string"
588
+ ? line
589
+ : formatSourceLine(line, highlighter, options.maxLineLength, sourceLineMarker(item, line)));
590
+ }
591
+ function sourceLineEntries(item) {
592
+ const lines = splitContentLines(item.content);
593
+ const range = contentRangeForItem(item, lines.length);
594
+ const startLine = range.kind === "text" ? range.startLine : null;
595
+ return lines.map((line, index) => ({
596
+ lineNumber: startLine === null ? null : startLine + index,
597
+ text: line,
598
+ }));
599
+ }
600
+ function contentRangeForItem(item, lineCount) {
601
+ if (item.kind === "lexical_match" || !item.excerptRange) {
602
+ return item.range;
603
+ }
604
+ if (item.range.kind !== "text" || item.excerptRange.kind !== "text") {
605
+ return item.excerptRange;
606
+ }
607
+ const entityLineCount = textRangeLineCount(item.range);
608
+ const excerptLineCount = textRangeLineCount(item.excerptRange);
609
+ return lineCount <= excerptLineCount + 2 && lineCount < entityLineCount
610
+ ? item.excerptRange
611
+ : item.range;
612
+ }
613
+ function sourceWindowEntries(item, entries, maxLines) {
614
+ if (entries.length <= maxLines) {
615
+ return [...entries];
616
+ }
617
+ const anchorIndex = sourceAnchorIndex(item, entries);
618
+ const excerptLineCount = item.excerptRange?.kind === "text"
619
+ ? textRangeLineCount(item.excerptRange)
620
+ : 1;
621
+ const before = excerptLineCount >= maxLines ? 0 : SHORT_SOURCE_CONTEXT_BEFORE;
622
+ let start = Math.max(0, anchorIndex - before);
623
+ if (start + maxLines > entries.length) {
624
+ start = Math.max(0, entries.length - maxLines);
625
+ }
626
+ const end = Math.min(entries.length, start + maxLines);
627
+ return [
628
+ ...(start > 0 ? ["..."] : []),
629
+ ...entries.slice(start, end),
630
+ ...(end < entries.length ? ["..."] : []),
631
+ ];
632
+ }
633
+ function sourceAnchorIndex(item, entries) {
634
+ if (item.excerptRange?.kind !== "text") {
635
+ return 0;
636
+ }
637
+ const excerptRange = item.excerptRange;
638
+ const index = entries.findIndex((entry) => entry.lineNumber !== null && entry.lineNumber >= excerptRange.startLine);
639
+ return index >= 0 ? index : 0;
640
+ }
641
+ function formatSourceLine(entry, highlighter, maxLineLength, marker) {
642
+ const prefix = entry.lineNumber === null ? "" : String(entry.lineNumber);
643
+ const text = maxLineLength === undefined
644
+ ? entry.text
645
+ : truncate(entry.text, maxLineLength);
646
+ return marker
647
+ ? `${prefix}${marker}\t${highlighter(text)}`
648
+ : `${prefix}\t${highlighter(text)}`;
649
+ }
650
+ function headerRange(item) {
651
+ return item.container?.range ?? item.range;
652
+ }
653
+ function sourceLineMarker(item, entry) {
654
+ if (item.kind !== "lexical_match" || entry.lineNumber === null) {
655
+ return undefined;
656
+ }
657
+ const matchRange = item.excerptRange ?? item.range;
658
+ if (matchRange.kind !== "text") {
659
+ return ":";
660
+ }
661
+ return entry.lineNumber >= matchRange.startLine &&
662
+ entry.lineNumber <= matchRange.endLine
663
+ ? ":"
664
+ : "-";
665
+ }
666
+ function clipLines(lines, maxLines) {
667
+ return lines.length > maxLines
668
+ ? [...lines.slice(0, maxLines), "..."]
669
+ : [...lines];
670
+ }
671
+ function textRangeLineCount(range) {
672
+ return range.endLine - range.startLine + 1;
673
+ }
674
+ function traceDetailLine(item) {
675
+ const trace = item.trace;
676
+ if (!trace) {
677
+ return null;
678
+ }
679
+ const parts = traceRecallSummaries(trace.recall);
680
+ if (trace.fusion) {
681
+ const forced = trace.fusion.forced ? " forced" : "";
682
+ parts.push(`fused #${trace.fusion.rank}${forced}`);
683
+ }
684
+ if (trace.ranking) {
685
+ const forced = trace.ranking.forced ? " forced" : "";
686
+ parts.push(`reranked #${trace.ranking.rank}${forced}`);
687
+ }
688
+ return parts.length > 0 ? parts.join("; ") : null;
689
+ }
690
+ function traceRecallSummaries(trace) {
691
+ const byQuery = new Map();
692
+ for (const recall of trace) {
693
+ const query = recall.query?.trim() || "(unknown query)";
694
+ byQuery.set(query, [...(byQuery.get(query) ?? []), recall]);
695
+ }
696
+ return [...byQuery.entries()].map(([query, recalls]) => {
697
+ const routes = recalls.map((recall) => {
698
+ const route = traceRouteLabel(recall.routeId, recall.path);
699
+ if (!recall.found) {
700
+ return `${route} missing`;
701
+ }
702
+ const rank = recall.rank === undefined ? "#n/a" : `#${recall.rank}`;
703
+ const forced = recall.forced ? " forced" : "";
704
+ return `${route} ${rank}${forced}`;
705
+ });
706
+ return `query ${JSON.stringify(query)}: ${routes.join(", ")}`;
707
+ });
708
+ }
709
+ function traceRouteLabel(routeId, path) {
710
+ return routeId && routeId !== path ? `${routeId}/${path}` : path;
711
+ }
712
+ function splitContentLines(content) {
713
+ const lines = content.split(/\r?\n/);
714
+ return lines.length > 0 ? lines : [""];
715
+ }
716
+ function entitySummary(item) {
717
+ const metadata = item.metadata;
718
+ if (!metadata) {
719
+ return item.kind;
720
+ }
721
+ if (metadata.kind === "code") {
722
+ return metadata.symbolName
723
+ ? `${metadata.symbolType} ${metadata.symbolName}`
724
+ : metadata.symbolType;
725
+ }
726
+ return metadata.heading ? `heading ${metadata.heading}` : "markdown";
727
+ }
728
+ function contextLabel(result) {
729
+ if (result.workspaceIndex) {
730
+ return `${result.root} workspace index`;
731
+ }
732
+ return `${result.root} ${result.source}`;
733
+ }
734
+ function routeLabel(result) {
735
+ const routes = result.diagnostics.index?.routes;
736
+ if (!routes || routes.length === 0) {
737
+ return undefined;
738
+ }
739
+ return routes.map((route) => `${route.mode}:${route.query}`).join(", ");
740
+ }
741
+ function formatScore(score) {
742
+ return Number.isInteger(score) ? String(score) : score.toFixed(4);
743
+ }
744
+ function oneLine(value) {
745
+ return value.replace(/\s+/g, " ").trim();
746
+ }
747
+ function truncate(value, maxLength) {
748
+ if (value.length <= maxLength) {
749
+ return value;
750
+ }
751
+ return `${value.slice(0, Math.max(0, maxLength - 1))}...`;
752
+ }
753
+ function printHumanField(theme, label, value) {
754
+ console.log(`${theme.label(label)}: ${value}`);
755
+ }
756
+ function createHumanTheme(options) {
757
+ if (!shouldUseColor(options)) {
758
+ return {
759
+ label: identity,
760
+ accent: identity,
761
+ path: identity,
762
+ status: identity,
763
+ };
764
+ }
765
+ return {
766
+ label: (value) => `\x1b[2m${value}\x1b[0m`,
767
+ accent: (value) => `\x1b[1m${value}\x1b[0m`,
768
+ path: (value) => `\x1b[36m${value}\x1b[0m`,
769
+ status: colorHumanStatus,
770
+ };
771
+ }
772
+ function colorHumanStatus(value) {
773
+ if (value === "fresh" || value === "rg_exhaustive") {
774
+ return `\x1b[32m${value}\x1b[0m`;
775
+ }
776
+ if (value === "possibly_stale" ||
777
+ value === "rg_truncated" ||
778
+ value === "ranked_sample") {
779
+ return `\x1b[33m${value}\x1b[0m`;
780
+ }
781
+ return `\x1b[1m${value}\x1b[0m`;
782
+ }
783
+ function identity(value) {
784
+ return value;
785
+ }
786
+ //# sourceMappingURL=context.js.map