@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
package/README_CN.md ADDED
@@ -0,0 +1,297 @@
1
+ <p align="right">
2
+ <a href="./README.md">English</a> | 中文
3
+ </p>
4
+
5
+ <div align="center">
6
+ <picture>
7
+ <source media="(prefers-color-scheme: dark)" srcset="./.github/assets/zg-logo-dark.svg">
8
+ <img src="./.github/assets/zg-logo.svg" width="150" alt="zg logo" />
9
+ </picture>
10
+ <p><strong>Know the words—or don’t. Just zg.</strong></p>
11
+ <p>面向人与 Agent 的本地优先统一检索层。</p>
12
+
13
+ <p>
14
+ <a href="https://www.npmjs.com/package/@zvec/zvec-grep"><img src="https://img.shields.io/npm/v/@zvec/zvec-grep.svg" alt="npm 版本" /></a>
15
+ <a href="https://github.com/zvec-ai/zvec-grep/actions/workflows/ci.yml"><img src="https://github.com/zvec-ai/zvec-grep/actions/workflows/ci.yml/badge.svg" alt="CI" /></a>
16
+ <a href="./LICENSE"><img src="https://img.shields.io/badge/license-Apache%202.0-blue.svg" alt="Apache 2.0 许可证" /></a>
17
+ <img src="https://img.shields.io/badge/node-%3E%3D22-blue.svg" alt="Node.js 22 或更新版本" />
18
+ </p>
19
+
20
+ <p>
21
+ <a href="https://trendshift.io/repositories/200612?utm_source=trendshift-badge&amp;utm_medium=badge&amp;utm_campaign=badge-trendshift-200612" target="_blank" rel="noopener noreferrer"><img src="https://trendshift.io/api/badge/trendshift/repositories/200612/daily?language=TypeScript" alt="zvec-ai/zvec-grep | Trendshift TypeScript 日榜" width="250" height="55" /></a>
22
+ <a href="https://trendshift.io/repositories/200612?utm_source=trendshift-badge&amp;utm_medium=badge&amp;utm_campaign=badge-trendshift-200612" target="_blank" rel="noopener noreferrer"><img src="https://trendshift.io/api/badge/trendshift/repositories/200612/daily" alt="zvec-ai/zvec-grep | Trendshift 全语言日榜" width="250" height="55" /></a>
23
+ </p>
24
+
25
+ <p>
26
+ <a href="#tour">🎬 <strong>功能演示</strong></a> |
27
+ <a href="#features">💫 <strong>核心特性</strong></a> |
28
+ <a href="#try-it-yourself">🚀 <strong>动手体验</strong></a> |
29
+ <a href="./docs/README.md">📚 <strong>文档</strong></a> |
30
+ <a href="#benchmarks">📊 <strong>性能测试</strong></a> |
31
+ <a href="#community">🤝 <strong>社区</strong></a>
32
+ </p>
33
+ </div>
34
+
35
+ **zg**(**z**vec-**g**rep),由 [zvec](https://github.com/alibaba/zvec) 驱动,
36
+ 将 ripgrep、BM25 与向量检索统一在一个[本地优先的检索入口](./docs/05-architecture.md)中。
37
+ 既可以由人在终端中搜索,也可以让 Agent 根据问题选择合适的本地检索方式。
38
+
39
+ <a id="tour"></a>
40
+
41
+ ## 🎬 功能演示
42
+
43
+ <div align="center">
44
+ <picture>
45
+ <source media="(prefers-color-scheme: dark)" srcset="./.github/assets/zvec-grep-tour-dark.gif">
46
+ <img src="./.github/assets/zvec-grep-tour.gif" width="1000" alt="安装 Agent 集成、为工作区建索引并让 Agent 使用 zvec-grep 检索本地内容" />
47
+ </picture>
48
+ </div>
49
+
50
+ <a id="features"></a>
51
+
52
+ ## 💫 为什么选择 zg?
53
+
54
+ - **人与 Agent 开箱即用**:安装一次、索引一次,即可在 macOS、Linux 和
55
+ Windows 上通过 CLI 或 Agent 复用同一个工作区。
56
+ - **不止关键词搜索**:先按语义发现内容、按相关性排序,再在需要时使用精确文本
57
+ 或正则完成验证。
58
+ - **多格式检索**:搜索源代码、文档和结构化数据,同时保留有用的内容结构与
59
+ 来源位置。
60
+ - **更少搜索,更少上下文**:经过排序并保留来源的结果,可以减少工具调用、
61
+ Token 消耗与无关噪声,更快找到所需证据。
62
+ - **默认本地运行**:文件、索引与本地模型都留在本机;只有经过你的授权,远程
63
+ Embedding 服务才能接收数据。
64
+
65
+ <a id="try-it-yourself"></a>
66
+
67
+ ## 🚀 动手体验
68
+
69
+ ### 1. 准备示例书架
70
+
71
+ ```bash
72
+ # 需要 Node.js 22 或更新版本。
73
+ npm install -g @zvec/zvec-grep
74
+
75
+ mkdir zg-mystery && cd zg-mystery
76
+ curl --retry 3 --retry-all-errors --progress-bar -fL \
77
+ -o alice-in-wonderland.txt https://raw.githubusercontent.com/GITenberg/Alice-s-Adventures-in-Wonderland_11/master/11.txt \
78
+ -o sherlock-holmes.txt https://raw.githubusercontent.com/GITenberg/The-Memoirs-of-Sherlock-Holmes_834/master/834.txt
79
+
80
+ zg index --embedding local/potion-retrieval-32m
81
+ ```
82
+
83
+ > [!NOTE]
84
+ > 索引保存在被索引项目根目录的 `.zvec-grep/` 中。
85
+
86
+ > [!TIP]
87
+ > `zg index` 或 `zg query` 失败时,在原命令后加 `--debug` 重跑,查看诊断信息(direct 和 server 模式均支持)。
88
+ > 在同一项目下,可用 `zg status --mode direct --debug` 或
89
+ > `zg status --mode server --debug` 查看已记录的索引错误。
90
+ > Server 连接失败时,检查 `zg server status` 和[服务日志](./docs/06-server.md#logs-and-state)。
91
+
92
+ ### 2. 选择检索方式
93
+
94
+ #### Agent:通过 OpenCode 提问
95
+
96
+ 配置好 [OpenCode](https://opencode.ai/) 后:
97
+
98
+ ```bash
99
+ zg install --target opencode --yes
100
+ opencode models
101
+ opencode run --model opencode/nemotron-3-ultra-free \
102
+ "An unseen creature left a few marks. What did the detective infer? Cite local evidence."
103
+ ```
104
+
105
+ 免费模型的可用性可能变化。请通过 `opencode models` 检查,并将示例模型
106
+ 替换为当前环境中可用的模型。
107
+
108
+ Prompt 中没有指定任何工具,OpenCode 会自主选择 zg。
109
+
110
+ <details>
111
+ <summary><strong>展开查看完整 Agent 调用与回答</strong></summary>
112
+
113
+ ```text
114
+ ⚙ zvec_grep_zvec_grep_search {"root":".../zg-mystery","query":"An unseen creature left a few marks. What did the detective infer?","fts":["marks","unseen creature","inferred","detective"],"fuse":true}
115
+ → Read sherlock-holmes.txt [offset=5440, limit=120]
116
+
117
+ Answer:
118
+ The detective is Sherlock Holmes in *The Adventure of the Crooked Man*.
119
+ From the animal's foot-marks, he inferred:
120
+
121
+ - It was not a dog, cat, monkey, or other familiar creature: its print had
122
+ five foot-pads, long nails, and was nearly as large as a dessert-spoon
123
+ (sherlock-holmes.txt:5479-5486).
124
+ - It had a long body and very short legs: nearly two feet long, but with a
125
+ stride of only about three inches (sherlock-holmes.txt:5497-5502).
126
+ - It was carnivorous because it climbed the curtain toward a canary's cage
127
+ (sherlock-holmes.txt:5509-5510).
128
+ - It was probably from the weasel or stoat tribe, though unusually large
129
+ (sherlock-holmes.txt:5514-5516).
130
+
131
+ Holmes also inferred that a man entered through the window with it and later
132
+ left with the key (sherlock-holmes.txt:5464-5470, 5527-5528).
133
+ ```
134
+
135
+ </details>
136
+
137
+ #### 用户:直接检索
138
+
139
+ 不通过 Agent,直接搜索同一个书架:
140
+
141
+ ```bash
142
+ zg query --human "An unseen creature left a few marks. What did the detective infer?" --limit 3
143
+ ```
144
+
145
+ zg 会将 `sherlock-holmes.txt` 中的相关段落排在
146
+ `alice-in-wonderland.txt` 前面。
147
+
148
+ ### 索引 Embedding 并发与 GPU 错误
149
+
150
+ `zg --index --index-embedding-concurrency <n>` 和
151
+ `ZVEC_GREP_INDEX_EMBEDDING_CONCURRENCY` 控制构建或更新索引时的 Embedding
152
+ 并发,对本地和远程模型均生效。环境变量也适用于自动建索引和刷新;这些设置
153
+ 不影响查询文本的向量推理。
154
+ CLI 参数仅与 `--index` 一起使用。
155
+
156
+ 对于 llama.cpp,上限控制索引模型实例的 context 数;对于 Transformers.js,
157
+ 控制同一缓存 pipeline 中尚未完成的调用数,不保证原生运行时或 GPU 同时执行。
158
+ 这两个后端取正整数,超过 **8** 按 8 处理。对于 Potion/model2vec,上限控制
159
+ 并发 Embedding 批次数,没有该 8 路限制;默认为 **2**,CPU worker 池还有独立
160
+ 容量上限。对于远程模型,CLI 参数和环境变量均控制并发批次数,也不额外限制为
161
+ 8;原有自适应调度及默认值保持不变,遇到限流或可重试错误时可能降低并发。
162
+
163
+ 优先级为:显式 CLI/API 索引参数 > 索引环境变量 >
164
+ `ZVEC_GREP_LLAMA_CONTEXT_PARALLELISM`(仅 llama.cpp 索引阶段)> 自动默认值。
165
+
166
+ 对于 llama.cpp 和 Transformers.js,未显式设置时,CPU 或没有显存查询接口的
167
+ 运行时使用 1。Transformers.js 目前没有该接口,因此自动上限为 1。
168
+ GPU 运行时提供空闲显存时,按
169
+ `floor(空闲显存 × 0.25 / 150 MiB)` 计算,并限制在 1–8;查询失败或返回
170
+ 无效值时使用 2。这里沿用原有的 150 MiB 启发式估算,不保证模型一定能装入显存。
171
+
172
+ 遇到 CUDA 错误、内存不足或原生运行时崩溃时,可将上限设为 1 后重试索引。
173
+ 以下示例使用直接执行模式,使新的环境变量立即生效:
174
+
175
+ ```bash
176
+ export ZVEC_GREP_INDEX_EMBEDDING_CONCURRENCY=1
177
+ zg --index --mode direct
178
+ ```
179
+
180
+ Windows PowerShell:
181
+
182
+ ```powershell
183
+ $env:ZVEC_GREP_INDEX_EMBEDDING_CONCURRENCY = "1"
184
+ zg --index --mode direct
185
+ ```
186
+
187
+ 显式 CLI 参数会在本次索引操作中覆盖环境变量,使用后台服务时也会生效,
188
+ 无需为 CLI 参数重启后台服务:
189
+
190
+ ```bash
191
+ export ZVEC_GREP_INDEX_EMBEDDING_CONCURRENCY=8
192
+ zg --index --index-embedding-concurrency 1
193
+ ```
194
+
195
+ 若要修改后台服务的环境变量默认值,需更新其启动环境,然后在该环境中运行
196
+ `zg --server off` 和 `zg --server on`。如果由 Agent 启动 zg,还需更新其环境并重启
197
+ Agent/MCP 连接。JavaScript 异常可以捕获,但原生 abort 可能在 CPU 回退之前
198
+ 直接结束进程。将上限设为 1 可以降低并发,但不能避免所有 GPU 故障;也可使用
199
+ `--device cpu` 重试。
200
+
201
+ <a id="benchmarks"></a>
202
+
203
+ ## 📊 性能测试
204
+
205
+ 每项测试均采用配对 A/B 评测:任务、Agent/模型、Prompt、环境和
206
+ 资源限制保持一致,仅 zg 访问权限及使用说明不同。
207
+
208
+ 完整结果和复现细节参见[性能测试文档](./benchmarks/README_CN.md)。
209
+
210
+ ### 1. 跨领域 Agent Benchmark
211
+
212
+ [SWE-QA-Bench](./benchmarks/swe-qa-bench/README_CN.md) 使用 Claude Code 与
213
+ Claude Opus 5(high 推理强度);
214
+ [BrowseComp-Plus](./benchmarks/browse-comp-plus/README_CN.md) 使用 Codex
215
+ gpt-5.6-sol 与 medium 推理强度。两项测试中的 zg
216
+ Profile 均使用 Qwen3.7 Text Embedding。
217
+
218
+ <p align="center">
219
+ <picture>
220
+ <source media="(prefers-color-scheme: dark)" srcset="./.github/assets/benchmark-overall-retrieval-indexed-v4-dark.svg">
221
+ <source media="(prefers-color-scheme: light)" srcset="./.github/assets/benchmark-overall-retrieval-indexed-v4-light.svg">
222
+ <img src="./.github/assets/benchmark-overall-retrieval-indexed-v4-light.svg" alt="zg 在 Coding 和通用文本检索场景中的整体测试结果,对比 Baseline 的答案质量、输入 Token、工具调用和 Agent 耗时" width="1200" />
223
+ </picture>
224
+ </p>
225
+
226
+ - **为何有效:** 语义发现先收窄搜索范围,排序后的词法检索再锚定精确标识符;
227
+ 紧凑的证据结果减少了大范围扫描、重复工具调用和模型上下文。
228
+ - **为何通用:** 同一检索流程可以适配不同内容:代码索引保留符号、签名和
229
+ 层级路径,通用文本则按相关 section 与 chunk 返回证据。
230
+
231
+ ### 2. 真实案例分析
232
+
233
+ <table align="center">
234
+ <tr>
235
+ <td align="center">
236
+ <picture>
237
+ <source media="(prefers-color-scheme: dark)" srcset="./.github/assets/benchmark-repository-top3-v2.png">
238
+ <source media="(prefers-color-scheme: light)" srcset="./.github/assets/benchmark-repository-top3-v2-light.png">
239
+ <img src="./.github/assets/benchmark-repository-top3-v2-light.png" alt="三个代码库理解任务中 Baseline 与 zg 的 Judge、输入 Token、工具调用和耗时对比" width="980" />
240
+ </picture>
241
+ </td>
242
+ </tr>
243
+ </table>
244
+
245
+ - **[Pylint](https://github.com/pylint-dev/pylint) — Python 静态分析器:** 任务需要理解 AST 节点处理如何区分带标注与
246
+ 不带标注的属性初始化;由于架构入口事先未知,保留符号与层级路径的检索
247
+ 更适合定位相关实现。
248
+ - **[Matplotlib](https://github.com/matplotlib/matplotlib) — 绘图与渲染库:** 任务需要沿数学文本渲染的多个阶段追踪
249
+ `FontInfo` 与字体选择;语义与词法联合排序有助于还原跨文件的数据流和控制流。
250
+ - **[Django](https://github.com/django/django) — Web 框架:** 任务关联 username 唯一约束、ORM 事务和 formset
251
+ 批量操作;紧凑的排序证据便于汇集分散在多处的设计依据。
252
+
253
+ <details>
254
+ <summary><strong>测试仓库与具体问题</strong></summary>
255
+
256
+ | 仓库 | 问题类型 | 具体问题 |
257
+ | --- | --- | --- |
258
+ | **`pylint-dev/pylint`** | What<br>架构探索 | 使用 AST 节点类型区分带类型标注和不带类型标注的实例属性初始化时,采用了什么架构模式? |
259
+ | **`matplotlib/matplotlib`** | Where<br>数据 / 控制流 | `FontInfo` NamedTuple 在数学文本渲染 Pipeline 中如何传递字体度量和字形数据?控制流如何决定在字符渲染的不同阶段使用 `postscript_name` 还是 `FT2Font` 对象? |
260
+ | **`django/django`** | Why<br>设计原理 | User 模型中 username 字段的唯一约束为什么会与 Django ORM 事务处理产生关联?如果在已有数据库中移除该约束,会对基于 formset 的批量操作产生哪些级联影响? |
261
+
262
+ </details>
263
+
264
+ > zg 最适合目标位置未知、证据跨文件或模块分布的调用链、数据流和架构问题。
265
+ > Agent 会自主决定何时及如何调用,结果因此会随模型和运行波动;多次运行均值更可靠。
266
+
267
+ ## 📚 文档
268
+
269
+ | 指南 | 你可以完成什么 |
270
+ | :--- | :--- |
271
+ | [Agent 集成](./docs/01-agents.md) | 将 zg 接入 Codex、Claude Code、Qwen Code、Qoder、Cursor 或 OpenCode,并验证是否正常工作。 |
272
+ | [CLI 指南](./docs/02-cli.md) | 在终端中搜索、索引和管理本地工作区。 |
273
+ | [MCP 指南](./docs/03-mcp.md) | 了解 Agent 可以使用哪些 zg 工具,以及访问权限如何受到保护。 |
274
+ | [检索 Pipeline](./docs/04-pipeline.md) | 选择索引范围、保持内容新鲜,并获得更好的检索结果。 |
275
+ | [架构](./docs/05-architecture.md) | 了解 zg 如何处理查询,以及数据会保留在哪里。 |
276
+ | [服务端与执行模式](./docs/06-server.md) | 在一次性命令和长期运行的本地服务之间选择。 |
277
+ | [Embedding 模型](./docs/07-embedding.md) | 根据速度、检索质量、隐私和本机硬件选择合适的模型。 |
278
+ | [Roadmap](./docs/08-roadmap.md) | 了解接下来的产品方向,并参与影响 zg 的优先级。 |
279
+
280
+ <a id="community"></a>
281
+
282
+ ## 🤝 加入社区
283
+
284
+ <div align="center">
285
+
286
+ | 💬 钉钉群 | 📱 微信群 | 🎮 Discord | X (Twitter) |
287
+ | :---: | :---: | :---: | :---: |
288
+ | <img src="https://zvec.oss-cn-hongkong.aliyuncs.com/qrcode/dingding.png" width="150" alt="钉钉二维码"/> | <img src="https://zvec.oss-cn-hongkong.aliyuncs.com/qrcode/wechat.png?v5" width="150" alt="微信二维码"/> | [![Discord](https://img.shields.io/badge/Discord-Join%20Server-5865F2?style=for-the-badge&logo=discord&logoColor=white)](https://discord.gg/rKddFBBu9z) | [![X (formerly Twitter) Follow](https://img.shields.io/twitter/follow/ZvecAI)](<https://x.com/ZvecAI>) |
289
+ | 扫码加入 | 扫码加入 | 点击加入 | 点击关注 |
290
+
291
+ </div>
292
+
293
+ ## ❤️ 参与贡献
294
+
295
+ 始终欢迎社区贡献——缺陷修复、新功能和文档改进都会让 zvec-grep 变得更好。
296
+
297
+ 请查阅我们的[贡献指南](./CONTRIBUTING.md)开始参与!
@@ -0,0 +1,7 @@
1
+ export { RemoteEmbeddingAuthorizationManager } from "./manager.js";
2
+ export { createRemoteEmbeddingOperationPermit, remoteEmbeddingAuthorizationGuard, withRemoteEmbeddingOperationPermit, } from "./operation.js";
3
+ export { RemoteEmbeddingAuthorizationStore } from "./store.js";
4
+ export { formatRemoteEmbeddingAuthorizationPrompt, remoteEmbeddingDisclosureData, type RemoteEmbeddingAuthorizationPromptInput, } from "./prompt.js";
5
+ export { indexStatusIsFresh, planRemoteIndexAuthorization, planRemoteSearchAuthorization, searchUsesVector, } from "./planner.js";
6
+ export { canonicalizeWorkspaceRoots, createRemoteEmbeddingTarget, remoteEmbeddingTargetFingerprint, workspaceFingerprint, } from "./target.js";
7
+ export type { RemoteEmbeddingAuthorizationPlan, RemoteEmbeddingAuthorizationScope, RemoteEmbeddingAuthorizationStatus, RemoteEmbeddingDataDisclosure, RemoteEmbeddingOperation, RemoteEmbeddingOperationPermit, RemoteEmbeddingTarget, RemoteEmbeddingWorkspaceGrant, } from "./types.js";
@@ -0,0 +1,7 @@
1
+ export { RemoteEmbeddingAuthorizationManager } from "./manager.js";
2
+ export { createRemoteEmbeddingOperationPermit, remoteEmbeddingAuthorizationGuard, withRemoteEmbeddingOperationPermit, } from "./operation.js";
3
+ export { RemoteEmbeddingAuthorizationStore } from "./store.js";
4
+ export { formatRemoteEmbeddingAuthorizationPrompt, remoteEmbeddingDisclosureData, } from "./prompt.js";
5
+ export { indexStatusIsFresh, planRemoteIndexAuthorization, planRemoteSearchAuthorization, searchUsesVector, } from "./planner.js";
6
+ export { canonicalizeWorkspaceRoots, createRemoteEmbeddingTarget, remoteEmbeddingTargetFingerprint, workspaceFingerprint, } from "./target.js";
7
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/authorization/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,mCAAmC,EAAE,MAAM,cAAc,CAAC;AACnE,OAAO,EACL,oCAAoC,EACpC,iCAAiC,EACjC,kCAAkC,GACnC,MAAM,gBAAgB,CAAC;AACxB,OAAO,EAAE,iCAAiC,EAAE,MAAM,YAAY,CAAC;AAC/D,OAAO,EACL,wCAAwC,EACxC,6BAA6B,GAE9B,MAAM,aAAa,CAAC;AACrB,OAAO,EACL,kBAAkB,EAClB,4BAA4B,EAC5B,6BAA6B,EAC7B,gBAAgB,GACjB,MAAM,cAAc,CAAC;AACtB,OAAO,EACL,0BAA0B,EAC1B,2BAA2B,EAC3B,gCAAgC,EAChC,oBAAoB,GACrB,MAAM,aAAa,CAAC"}
@@ -0,0 +1,8 @@
1
+ import { RemoteEmbeddingAuthorizationStore } from "./store.js";
2
+ import type { RemoteEmbeddingAuthorizationPlan, RemoteEmbeddingAuthorizationScope, RemoteEmbeddingOperationPermit } from "./types.js";
3
+ export declare class RemoteEmbeddingAuthorizationManager {
4
+ readonly store: RemoteEmbeddingAuthorizationStore;
5
+ constructor(store?: RemoteEmbeddingAuthorizationStore);
6
+ existingWorkspacePermit(plan: RemoteEmbeddingAuthorizationPlan): Promise<RemoteEmbeddingOperationPermit | undefined>;
7
+ grant(plan: RemoteEmbeddingAuthorizationPlan, scope: RemoteEmbeddingAuthorizationScope): Promise<RemoteEmbeddingOperationPermit>;
8
+ }
@@ -0,0 +1,19 @@
1
+ import { createRemoteEmbeddingOperationPermit } from "./operation.js";
2
+ import { RemoteEmbeddingAuthorizationStore } from "./store.js";
3
+ export class RemoteEmbeddingAuthorizationManager {
4
+ store;
5
+ constructor(store = new RemoteEmbeddingAuthorizationStore()) {
6
+ this.store = store;
7
+ }
8
+ async existingWorkspacePermit(plan) {
9
+ if (!(await this.store.hasGrant(plan.target)))
10
+ return undefined;
11
+ return createRemoteEmbeddingOperationPermit(plan.target, "workspace");
12
+ }
13
+ async grant(plan, scope) {
14
+ if (scope === "workspace")
15
+ await this.store.grant(plan.target);
16
+ return createRemoteEmbeddingOperationPermit(plan.target, scope);
17
+ }
18
+ }
19
+ //# sourceMappingURL=manager.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"manager.js","sourceRoot":"","sources":["../../src/authorization/manager.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,oCAAoC,EAAE,MAAM,gBAAgB,CAAC;AACtE,OAAO,EAAE,iCAAiC,EAAE,MAAM,YAAY,CAAC;AAO/D,MAAM,OAAO,mCAAmC;IACrC,KAAK,CAAoC;IAElD,YAAY,KAAK,GAAG,IAAI,iCAAiC,EAAE;QACzD,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC;IACrB,CAAC;IAED,KAAK,CAAC,uBAAuB,CAC3B,IAAsC;QAEtC,IAAI,CAAC,CAAC,MAAM,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;YAAE,OAAO,SAAS,CAAC;QAChE,OAAO,oCAAoC,CAAC,IAAI,CAAC,MAAM,EAAE,WAAW,CAAC,CAAC;IACxE,CAAC;IAED,KAAK,CAAC,KAAK,CACT,IAAsC,EACtC,KAAwC;QAExC,IAAI,KAAK,KAAK,WAAW;YAAE,MAAM,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;QAC/D,OAAO,oCAAoC,CAAC,IAAI,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC;IAClE,CAAC;CACF"}
@@ -0,0 +1,7 @@
1
+ import { RemoteEmbeddingAuthorizationStore } from "./store.js";
2
+ import { type RemoteEmbeddingAuthorizationScope, type RemoteEmbeddingOperationPermit, type RemoteEmbeddingRequest, type RemoteEmbeddingTarget } from "./types.js";
3
+ export declare function createRemoteEmbeddingOperationPermit(target: RemoteEmbeddingTarget, scope: RemoteEmbeddingAuthorizationScope): RemoteEmbeddingOperationPermit;
4
+ export declare function withRemoteEmbeddingOperationPermit<T>(permit: RemoteEmbeddingOperationPermit | undefined, operation: () => Promise<T>): Promise<T>;
5
+ export declare function remoteEmbeddingAuthorizationGuard(options?: {
6
+ store?: RemoteEmbeddingAuthorizationStore;
7
+ }): (request: RemoteEmbeddingRequest) => Promise<void>;
@@ -0,0 +1,50 @@
1
+ import { AsyncLocalStorage } from "node:async_hooks";
2
+ import { randomUUID } from "node:crypto";
3
+ import { EngineError } from "../engine/errors.js";
4
+ import { RemoteEmbeddingAuthorizationStore } from "./store.js";
5
+ import { REMOTE_EMBEDDING_CAPABILITY, } from "./types.js";
6
+ const operationPermit = new AsyncLocalStorage();
7
+ export function createRemoteEmbeddingOperationPermit(target, scope) {
8
+ return {
9
+ capability: REMOTE_EMBEDDING_CAPABILITY,
10
+ scope,
11
+ target,
12
+ issuedAt: Date.now(),
13
+ operationId: randomUUID(),
14
+ };
15
+ }
16
+ export async function withRemoteEmbeddingOperationPermit(permit, operation) {
17
+ if (!permit)
18
+ return await operation();
19
+ return await operationPermit.run(permit, operation);
20
+ }
21
+ export function remoteEmbeddingAuthorizationGuard(options = {}) {
22
+ const store = options.store ?? new RemoteEmbeddingAuthorizationStore();
23
+ return async (request) => {
24
+ const permit = operationPermit.getStore();
25
+ if (!permit ||
26
+ permit.capability !== REMOTE_EMBEDDING_CAPABILITY ||
27
+ permit.target.provider !== request.provider ||
28
+ permit.target.model !== request.model ||
29
+ permit.target.endpoint !== request.endpoint) {
30
+ throw authorizationRequiredError(request);
31
+ }
32
+ if (permit.scope === "workspace" &&
33
+ !(await store.hasGrant(permit.target))) {
34
+ throw authorizationRequiredError(request, "Workspace grant is missing, invalid, or revoked.");
35
+ }
36
+ };
37
+ }
38
+ function authorizationRequiredError(request, detail) {
39
+ return new EngineError("Remote Embedding authorization is required", {
40
+ code: "ZVEC_GREP.ENGINE.AUTH.REMOTE_EMBEDDING_REQUIRED",
41
+ context: [
42
+ `provider=${request.provider}`,
43
+ `model=${request.model}`,
44
+ `endpoint=${request.endpoint}`,
45
+ `purpose=${request.purpose}`,
46
+ ...(detail ? [`detail=${detail}`] : []),
47
+ ].join(" "),
48
+ });
49
+ }
50
+ //# sourceMappingURL=operation.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"operation.js","sourceRoot":"","sources":["../../src/authorization/operation.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,iBAAiB,EAAE,MAAM,kBAAkB,CAAC;AACrD,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AACzC,OAAO,EAAE,WAAW,EAAE,MAAM,qBAAqB,CAAC;AAClD,OAAO,EAAE,iCAAiC,EAAE,MAAM,YAAY,CAAC;AAC/D,OAAO,EACL,2BAA2B,GAK5B,MAAM,YAAY,CAAC;AAEpB,MAAM,eAAe,GAAG,IAAI,iBAAiB,EAAkC,CAAC;AAEhF,MAAM,UAAU,oCAAoC,CAClD,MAA6B,EAC7B,KAAwC;IAExC,OAAO;QACL,UAAU,EAAE,2BAA2B;QACvC,KAAK;QACL,MAAM;QACN,QAAQ,EAAE,IAAI,CAAC,GAAG,EAAE;QACpB,WAAW,EAAE,UAAU,EAAE;KAC1B,CAAC;AACJ,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,kCAAkC,CACtD,MAAkD,EAClD,SAA2B;IAE3B,IAAI,CAAC,MAAM;QAAE,OAAO,MAAM,SAAS,EAAE,CAAC;IACtC,OAAO,MAAM,eAAe,CAAC,GAAG,CAAC,MAAM,EAAE,SAAS,CAAC,CAAC;AACtD,CAAC;AAED,MAAM,UAAU,iCAAiC,CAC/C,UAEI,EAAE;IAEN,MAAM,KAAK,GAAG,OAAO,CAAC,KAAK,IAAI,IAAI,iCAAiC,EAAE,CAAC;IACvE,OAAO,KAAK,EAAE,OAAO,EAAE,EAAE;QACvB,MAAM,MAAM,GAAG,eAAe,CAAC,QAAQ,EAAE,CAAC;QAC1C,IACE,CAAC,MAAM;YACP,MAAM,CAAC,UAAU,KAAK,2BAA2B;YACjD,MAAM,CAAC,MAAM,CAAC,QAAQ,KAAK,OAAO,CAAC,QAAQ;YAC3C,MAAM,CAAC,MAAM,CAAC,KAAK,KAAK,OAAO,CAAC,KAAK;YACrC,MAAM,CAAC,MAAM,CAAC,QAAQ,KAAK,OAAO,CAAC,QAAQ,EAC3C,CAAC;YACD,MAAM,0BAA0B,CAAC,OAAO,CAAC,CAAC;QAC5C,CAAC;QACD,IACE,MAAM,CAAC,KAAK,KAAK,WAAW;YAC5B,CAAC,CAAC,MAAM,KAAK,CAAC,QAAQ,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,EACtC,CAAC;YACD,MAAM,0BAA0B,CAC9B,OAAO,EACP,kDAAkD,CACnD,CAAC;QACJ,CAAC;IACH,CAAC,CAAC;AACJ,CAAC;AAED,SAAS,0BAA0B,CACjC,OAA+B,EAC/B,MAAe;IAEf,OAAO,IAAI,WAAW,CAAC,4CAA4C,EAAE;QACnE,IAAI,EAAE,iDAAiD;QACvD,OAAO,EAAE;YACP,YAAY,OAAO,CAAC,QAAQ,EAAE;YAC9B,SAAS,OAAO,CAAC,KAAK,EAAE;YACxB,YAAY,OAAO,CAAC,QAAQ,EAAE;YAC9B,WAAW,OAAO,CAAC,OAAO,EAAE;YAC5B,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,UAAU,MAAM,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;SACxC,CAAC,IAAI,CAAC,GAAG,CAAC;KACZ,CAAC,CAAC;AACL,CAAC"}
@@ -0,0 +1,21 @@
1
+ import type { NormalizedSearchInput } from "../mcp/input-normalization.js";
2
+ import type { EmbeddingModelInfo } from "../engine/models/index.js";
3
+ import type { ZvecGrepInfoResult } from "../engine/service/types.js";
4
+ import { RemoteEmbeddingAuthorizationStore } from "./store.js";
5
+ import type { RemoteEmbeddingAuthorizationPlan } from "./types.js";
6
+ export declare function planRemoteIndexAuthorization(input: {
7
+ info: ZvecGrepInfoResult;
8
+ model: EmbeddingModelInfo;
9
+ rebuild?: boolean;
10
+ needsUpdate?: boolean;
11
+ store?: RemoteEmbeddingAuthorizationStore;
12
+ }): Promise<RemoteEmbeddingAuthorizationPlan | undefined>;
13
+ export declare function planRemoteSearchAuthorization(input: {
14
+ info: ZvecGrepInfoResult;
15
+ model: EmbeddingModelInfo;
16
+ search: NormalizedSearchInput;
17
+ runtimeNeedsReconciliation?: boolean;
18
+ store?: RemoteEmbeddingAuthorizationStore;
19
+ }): Promise<RemoteEmbeddingAuthorizationPlan | undefined>;
20
+ export declare function searchUsesVector(input: Pick<NormalizedSearchInput, "queries" | "routes">): boolean;
21
+ export declare function indexStatusIsFresh(info: ZvecGrepInfoResult): boolean;
@@ -0,0 +1,97 @@
1
+ import { createRemoteEmbeddingTarget } from "./target.js";
2
+ import { RemoteEmbeddingAuthorizationStore } from "./store.js";
3
+ export async function planRemoteIndexAuthorization(input) {
4
+ if (input.model.provider !== "qwen")
5
+ return undefined;
6
+ const needsEmbedding = input.rebuild === true ||
7
+ input.needsUpdate === true ||
8
+ !input.info.indexed ||
9
+ !indexStatusIsFresh(input.info);
10
+ if (!needsEmbedding)
11
+ return undefined;
12
+ const endpoint = input.model.endpoint;
13
+ if (endpoint === undefined) {
14
+ throw new Error(`Embedding model ${input.model.reference} did not provide a remote endpoint.`);
15
+ }
16
+ const target = await createRemoteEmbeddingTarget({
17
+ roots: workspaceRoots(input.info),
18
+ provider: input.model.provider,
19
+ model: input.model.name,
20
+ endpoint,
21
+ });
22
+ const store = input.store ?? new RemoteEmbeddingAuthorizationStore();
23
+ return {
24
+ operation: "index",
25
+ target,
26
+ disclosure: {
27
+ queryText: false,
28
+ workspaceContent: !input.info.indexed || input.rebuild ? "full" : "changed",
29
+ },
30
+ reason: input.rebuild
31
+ ? "index_rebuild"
32
+ : input.info.indexed
33
+ ? "index_update"
34
+ : "index_create",
35
+ grantPath: store.grantPath(target),
36
+ };
37
+ }
38
+ export async function planRemoteSearchAuthorization(input) {
39
+ const schema = input.info.workspaceIndex?.embedding;
40
+ if (!input.info.indexed || !schema || schema.provider !== "qwen") {
41
+ return undefined;
42
+ }
43
+ if (input.model.provider !== schema.provider ||
44
+ input.model.name !== schema.model) {
45
+ throw new Error(`Embedding model ${input.model.reference} does not match indexed model ${schema.provider}/${schema.model}.`);
46
+ }
47
+ const usesVector = searchUsesVector(input.search);
48
+ const needsUpdate = input.runtimeNeedsReconciliation === true ||
49
+ !indexStatusIsFresh(input.info);
50
+ const updatesIndex = needsUpdate &&
51
+ (input.search.autoUpdate || input.search.freshness === "wait_for_fresh");
52
+ if (!usesVector && !updatesIndex)
53
+ return undefined;
54
+ const endpoint = input.model.endpoint;
55
+ if (endpoint === undefined) {
56
+ throw new Error(`Embedding model ${input.model.reference} did not provide a remote endpoint.`);
57
+ }
58
+ const target = await createRemoteEmbeddingTarget({
59
+ roots: workspaceRoots(input.info),
60
+ provider: input.model.provider,
61
+ model: input.model.name,
62
+ endpoint,
63
+ });
64
+ const store = input.store ?? new RemoteEmbeddingAuthorizationStore();
65
+ return {
66
+ operation: usesVector
67
+ ? updatesIndex
68
+ ? "query_and_index"
69
+ : "query"
70
+ : "index",
71
+ target,
72
+ disclosure: {
73
+ queryText: usesVector,
74
+ workspaceContent: updatesIndex ? "changed" : "none",
75
+ },
76
+ reason: "query",
77
+ grantPath: store.grantPath(target),
78
+ };
79
+ }
80
+ export function searchUsesVector(input) {
81
+ return ((input.queries?.length ?? 0) > 0 ||
82
+ input.routes.some((route) => route.mode === "vector"));
83
+ }
84
+ export function indexStatusIsFresh(info) {
85
+ const status = info.status;
86
+ return Boolean(status &&
87
+ status.filesAdded === 0 &&
88
+ status.filesModified === 0 &&
89
+ status.filesDeleted === 0 &&
90
+ status.filesPending === 0 &&
91
+ status.filesFailed === 0);
92
+ }
93
+ function workspaceRoots(info) {
94
+ const roots = info.workspaceIndex?.rootPaths.map((root) => root.absolutePath) ?? [];
95
+ return roots.length > 0 ? roots : [info.root];
96
+ }
97
+ //# sourceMappingURL=planner.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"planner.js","sourceRoot":"","sources":["../../src/authorization/planner.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,12 @@
1
+ import type { RemoteEmbeddingDataDisclosure } from "./types.js";
2
+ export type RemoteEmbeddingAuthorizationPromptInput = {
3
+ workspaceRoots: readonly string[];
4
+ provider: string;
5
+ model: string;
6
+ endpoint?: string;
7
+ data: readonly string[];
8
+ note?: string;
9
+ };
10
+ export declare const REMOTE_EMBEDDING_ELICITATION_UNSUPPORTED_MESSAGE = "The connected MCP host does not support the Remote Embedding authorization interaction required by elicitation/create. The agent should use the current host's built-in user-question tool; for Qoder, the exact name is ask_user_question in Qoder IDE or AskUserQuestion in Qoder CLI/SDK. Ask the user to choose: allow Remote Embedding for this workspace, use local FTS only, or cancel. No user decision was received, and no remote data was sent.";
11
+ export declare function remoteEmbeddingDisclosureData(disclosure: RemoteEmbeddingDataDisclosure): string[];
12
+ export declare function formatRemoteEmbeddingAuthorizationPrompt(input: RemoteEmbeddingAuthorizationPromptInput): string;
@@ -0,0 +1,63 @@
1
+ import { basename } from "node:path";
2
+ export const REMOTE_EMBEDDING_ELICITATION_UNSUPPORTED_MESSAGE = "The connected MCP host does not support the Remote Embedding authorization interaction required by elicitation/create. The agent should use the current host's built-in user-question tool; for Qoder, the exact name is ask_user_question in Qoder IDE or AskUserQuestion in Qoder CLI/SDK. Ask the user to choose: allow Remote Embedding for this workspace, use local FTS only, or cancel. No user decision was received, and no remote data was sent.";
3
+ export function remoteEmbeddingDisclosureData(disclosure) {
4
+ return [
5
+ ...(disclosure.queryText ? ["query text"] : []),
6
+ ...(disclosure.workspaceContent === "selected"
7
+ ? ["selected workspace files"]
8
+ : disclosure.workspaceContent === "changed"
9
+ ? ["changed workspace files"]
10
+ : disclosure.workspaceContent === "full"
11
+ ? ["selected workspace files"]
12
+ : []),
13
+ ];
14
+ }
15
+ export function formatRemoteEmbeddingAuthorizationPrompt(input) {
16
+ const data = naturalList(input.data.length > 0 ? input.data : ["data required by this operation"]);
17
+ const lines = [
18
+ "Remote Embedding authorization",
19
+ "",
20
+ `Send ${data}?`,
21
+ "",
22
+ ` From ${workspaceLabel(input.workspaceRoots)}`,
23
+ ` To ${clip(`${input.provider}/${input.model}`, 72)}`,
24
+ ];
25
+ const host = endpointHost(input.endpoint);
26
+ if (host)
27
+ lines.push(` ${clip(host, 72)}`);
28
+ if (input.note)
29
+ lines.push("", input.note);
30
+ lines.push("", "API charges may apply.");
31
+ return lines.join("\n");
32
+ }
33
+ function workspaceLabel(roots) {
34
+ const names = roots.map((root) => clip(basename(root) || root || "workspace", 32));
35
+ if (names.length === 0)
36
+ return "workspace";
37
+ if (names.length <= 2)
38
+ return names.join(", ");
39
+ return `${names.slice(0, 2).join(", ")} +${names.length - 2}`;
40
+ }
41
+ function endpointHost(endpoint) {
42
+ if (!endpoint)
43
+ return undefined;
44
+ try {
45
+ return new URL(endpoint).host;
46
+ }
47
+ catch {
48
+ return endpoint.replace(/^https?:\/\//, "").split("/")[0] || undefined;
49
+ }
50
+ }
51
+ function naturalList(items) {
52
+ if (items.length <= 1)
53
+ return items[0] ?? "data";
54
+ if (items.length === 2)
55
+ return `${items[0]} and ${items[1]}`;
56
+ return `${items.slice(0, -1).join(", ")}, and ${items.at(-1)}`;
57
+ }
58
+ function clip(value, maxLength) {
59
+ if (value.length <= maxLength)
60
+ return value;
61
+ return `${value.slice(0, Math.max(1, maxLength - 1))}…`;
62
+ }
63
+ //# sourceMappingURL=prompt.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"prompt.js","sourceRoot":"","sources":["../../src/authorization/prompt.ts"],"names":[],"mappings":"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"}