@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,12 @@
1
+ import type { CreateZvecGrepOptions } from "../engine/service/types.js";
2
+ import { type McpToolset } from "../mcp/toolset.js";
3
+ export type RunDaemonOptions = {
4
+ version: string;
5
+ listen?: string;
6
+ token?: string;
7
+ tokenFile?: string;
8
+ home?: string;
9
+ mcpToolset?: McpToolset;
10
+ serviceOptions?: CreateZvecGrepOptions;
11
+ };
12
+ export declare function runDaemonForeground(options: RunDaemonOptions): Promise<void>;
@@ -0,0 +1,105 @@
1
+ import { readGlobalConfig } from "../engine/config.js";
2
+ import { DaemonBackend } from "./backend.js";
3
+ import { configuredListenAddress, configuredWatcherIdleTimeoutMs, resolveServerToken, } from "./config.js";
4
+ import { DaemonHttpServer } from "./http-server.js";
5
+ import { DaemonInstanceLock } from "./server-controller.js";
6
+ import { createDaemonLogger } from "./logger.js";
7
+ import { MCP_TOOLSET_ENV, resolveMcpToolset, } from "../mcp/toolset.js";
8
+ import { loadOrCreateMcpRequestStateKey, PersistentRemoteEmbeddingRequestStateReplayGuard, } from "../mcp/request-state.js";
9
+ export async function runDaemonForeground(options) {
10
+ const mcpToolset = resolveMcpToolset(options.mcpToolset, process.env[MCP_TOOLSET_ENV]);
11
+ const runtimeIdleTtlMs = configuredWatcherIdleTimeoutMs();
12
+ const listen = configuredListenAddress(options.listen);
13
+ const displayAddress = `http://${displayHost(listen.host)}:${listen.port}/mcp`;
14
+ const logger = createDaemonLogger(options.home, readGlobalConfig().log);
15
+ const instanceLock = await DaemonInstanceLock.acquire(options.home, displayAddress, mcpToolset);
16
+ let auth;
17
+ try {
18
+ auth = await resolveServerToken({
19
+ token: options.token,
20
+ tokenFile: options.tokenFile,
21
+ home: options.home,
22
+ });
23
+ }
24
+ catch (error) {
25
+ await instanceLock.release();
26
+ throw error;
27
+ }
28
+ let requestStateKey;
29
+ try {
30
+ requestStateKey = await loadOrCreateMcpRequestStateKey(options.home);
31
+ }
32
+ catch (error) {
33
+ await instanceLock.release();
34
+ throw error;
35
+ }
36
+ const backend = new DaemonBackend({
37
+ version: options.version,
38
+ serviceOptions: options.serviceOptions,
39
+ runtimeIdleTtlMs,
40
+ logger,
41
+ });
42
+ let requestStop;
43
+ const httpServer = new DaemonHttpServer({
44
+ ...listen,
45
+ token: auth.token,
46
+ version: options.version,
47
+ mcpToolset,
48
+ backend,
49
+ requestStateKey,
50
+ requestStateReplayGuard: new PersistentRemoteEmbeddingRequestStateReplayGuard(options.home),
51
+ logger,
52
+ onShutdown: () => requestStop?.(),
53
+ });
54
+ let address;
55
+ try {
56
+ address = await httpServer.start();
57
+ }
58
+ catch (error) {
59
+ await backend.close();
60
+ await instanceLock.release();
61
+ throw error;
62
+ }
63
+ const stopped = new Promise((resolve) => {
64
+ let stopping = false;
65
+ const stop = () => {
66
+ if (stopping)
67
+ return;
68
+ stopping = true;
69
+ void (async () => {
70
+ await backend.close();
71
+ await httpServer.close();
72
+ logger.event("server.stopped", { pid: process.pid });
73
+ await logger.flush();
74
+ await instanceLock.release();
75
+ })().finally(resolve);
76
+ };
77
+ requestStop = stop;
78
+ process.once("SIGINT", stop);
79
+ process.once("SIGTERM", stop);
80
+ });
81
+ try {
82
+ await instanceLock.markReady();
83
+ }
84
+ catch (error) {
85
+ requestStop?.();
86
+ await stopped;
87
+ throw error;
88
+ }
89
+ logger.event("server.ready", {
90
+ host: listen.host,
91
+ port: address.port,
92
+ pid: process.pid,
93
+ mcp_toolset: mcpToolset,
94
+ });
95
+ console.log(`zvec-grep server listening on http://${displayHost(address.address)}:${address.port}/mcp`);
96
+ console.log(`MCP toolset: ${mcpToolset}`);
97
+ if (auth.tokenFile) {
98
+ console.log(`Bearer token file: ${auth.tokenFile}`);
99
+ }
100
+ await stopped;
101
+ }
102
+ function displayHost(host) {
103
+ return host.includes(":") ? `[${host}]` : host;
104
+ }
105
+ //# sourceMappingURL=runtime.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"runtime.js","sourceRoot":"","sources":["../../src/daemon/runtime.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,gBAAgB,EAAE,MAAM,qBAAqB,CAAC;AAEvD,OAAO,EAAE,aAAa,EAAE,MAAM,cAAc,CAAC;AAC7C,OAAO,EACL,uBAAuB,EACvB,8BAA8B,EAC9B,kBAAkB,GACnB,MAAM,aAAa,CAAC;AACrB,OAAO,EAAE,gBAAgB,EAAE,MAAM,kBAAkB,CAAC;AACpD,OAAO,EAAE,kBAAkB,EAAE,MAAM,wBAAwB,CAAC;AAC5D,OAAO,EAAE,kBAAkB,EAAE,MAAM,aAAa,CAAC;AACjD,OAAO,EACL,eAAe,EACf,iBAAiB,GAElB,MAAM,mBAAmB,CAAC;AAC3B,OAAO,EACL,8BAA8B,EAC9B,gDAAgD,GACjD,MAAM,yBAAyB,CAAC;AAYjC,MAAM,CAAC,KAAK,UAAU,mBAAmB,CACvC,OAAyB;IAEzB,MAAM,UAAU,GAAG,iBAAiB,CAClC,OAAO,CAAC,UAAU,EAClB,OAAO,CAAC,GAAG,CAAC,eAAe,CAAC,CAC7B,CAAC;IACF,MAAM,gBAAgB,GAAG,8BAA8B,EAAE,CAAC;IAC1D,MAAM,MAAM,GAAG,uBAAuB,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;IACvD,MAAM,cAAc,GAAG,UAAU,WAAW,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,MAAM,CAAC,IAAI,MAAM,CAAC;IAC/E,MAAM,MAAM,GAAG,kBAAkB,CAAC,OAAO,CAAC,IAAI,EAAE,gBAAgB,EAAE,CAAC,GAAG,CAAC,CAAC;IACxE,MAAM,YAAY,GAAG,MAAM,kBAAkB,CAAC,OAAO,CACnD,OAAO,CAAC,IAAI,EACZ,cAAc,EACd,UAAU,CACX,CAAC;IACF,IAAI,IAAI,CAAC;IACT,IAAI,CAAC;QACH,IAAI,GAAG,MAAM,kBAAkB,CAAC;YAC9B,KAAK,EAAE,OAAO,CAAC,KAAK;YACpB,SAAS,EAAE,OAAO,CAAC,SAAS;YAC5B,IAAI,EAAE,OAAO,CAAC,IAAI;SACnB,CAAC,CAAC;IACL,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,MAAM,YAAY,CAAC,OAAO,EAAE,CAAC;QAC7B,MAAM,KAAK,CAAC;IACd,CAAC;IACD,IAAI,eAAe,CAAC;IACpB,IAAI,CAAC;QACH,eAAe,GAAG,MAAM,8BAA8B,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;IACvE,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,MAAM,YAAY,CAAC,OAAO,EAAE,CAAC;QAC7B,MAAM,KAAK,CAAC;IACd,CAAC;IACD,MAAM,OAAO,GAAG,IAAI,aAAa,CAAC;QAChC,OAAO,EAAE,OAAO,CAAC,OAAO;QACxB,cAAc,EAAE,OAAO,CAAC,cAAc;QACtC,gBAAgB;QAChB,MAAM;KACP,CAAC,CAAC;IACH,IAAI,WAAqC,CAAC;IAC1C,MAAM,UAAU,GAAG,IAAI,gBAAgB,CAAC;QACtC,GAAG,MAAM;QACT,KAAK,EAAE,IAAI,CAAC,KAAK;QACjB,OAAO,EAAE,OAAO,CAAC,OAAO;QACxB,UAAU;QACV,OAAO;QACP,eAAe;QACf,uBAAuB,EACrB,IAAI,gDAAgD,CAAC,OAAO,CAAC,IAAI,CAAC;QACpE,MAAM;QACN,UAAU,EAAE,GAAG,EAAE,CAAC,WAAW,EAAE,EAAE;KAClC,CAAC,CAAC;IACH,IAAI,OAAO,CAAC;IACZ,IAAI,CAAC;QACH,OAAO,GAAG,MAAM,UAAU,CAAC,KAAK,EAAE,CAAC;IACrC,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,MAAM,OAAO,CAAC,KAAK,EAAE,CAAC;QACtB,MAAM,YAAY,CAAC,OAAO,EAAE,CAAC;QAC7B,MAAM,KAAK,CAAC;IACd,CAAC;IACD,MAAM,OAAO,GAAG,IAAI,OAAO,CAAO,CAAC,OAAO,EAAE,EAAE;QAC5C,IAAI,QAAQ,GAAG,KAAK,CAAC;QACrB,MAAM,IAAI,GAAG,GAAG,EAAE;YAChB,IAAI,QAAQ;gBAAE,OAAO;YACrB,QAAQ,GAAG,IAAI,CAAC;YAChB,KAAK,CAAC,KAAK,IAAI,EAAE;gBACf,MAAM,OAAO,CAAC,KAAK,EAAE,CAAC;gBACtB,MAAM,UAAU,CAAC,KAAK,EAAE,CAAC;gBACzB,MAAM,CAAC,KAAK,CAAC,gBAAgB,EAAE,EAAE,GAAG,EAAE,OAAO,CAAC,GAAG,EAAE,CAAC,CAAC;gBACrD,MAAM,MAAM,CAAC,KAAK,EAAE,CAAC;gBACrB,MAAM,YAAY,CAAC,OAAO,EAAE,CAAC;YAC/B,CAAC,CAAC,EAAE,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;QACxB,CAAC,CAAC;QACF,WAAW,GAAG,IAAI,CAAC;QACnB,OAAO,CAAC,IAAI,CAAC,QAAQ,EAAE,IAAI,CAAC,CAAC;QAC7B,OAAO,CAAC,IAAI,CAAC,SAAS,EAAE,IAAI,CAAC,CAAC;IAChC,CAAC,CAAC,CAAC;IACH,IAAI,CAAC;QACH,MAAM,YAAY,CAAC,SAAS,EAAE,CAAC;IACjC,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,WAAW,EAAE,EAAE,CAAC;QAChB,MAAM,OAAO,CAAC;QACd,MAAM,KAAK,CAAC;IACd,CAAC;IACD,MAAM,CAAC,KAAK,CAAC,cAAc,EAAE;QAC3B,IAAI,EAAE,MAAM,CAAC,IAAI;QACjB,IAAI,EAAE,OAAO,CAAC,IAAI;QAClB,GAAG,EAAE,OAAO,CAAC,GAAG;QAChB,WAAW,EAAE,UAAU;KACxB,CAAC,CAAC;IACH,OAAO,CAAC,GAAG,CACT,wCAAwC,WAAW,CAAC,OAAO,CAAC,OAAO,CAAC,IAAI,OAAO,CAAC,IAAI,MAAM,CAC3F,CAAC;IACF,OAAO,CAAC,GAAG,CAAC,gBAAgB,UAAU,EAAE,CAAC,CAAC;IAC1C,IAAI,IAAI,CAAC,SAAS,EAAE,CAAC;QACnB,OAAO,CAAC,GAAG,CAAC,sBAAsB,IAAI,CAAC,SAAS,EAAE,CAAC,CAAC;IACtD,CAAC;IAED,MAAM,OAAO,CAAC;AAChB,CAAC;AAED,SAAS,WAAW,CAAC,IAAY;IAC/B,OAAO,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,IAAI,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC;AACjD,CAAC"}
@@ -0,0 +1,38 @@
1
+ import { type McpToolset } from "../mcp/toolset.js";
2
+ export type DaemonInstanceRecord = {
3
+ pid: number;
4
+ hostname: string;
5
+ instanceToken: string;
6
+ startedAt: number;
7
+ updatedAt: number;
8
+ serverUrl: string;
9
+ ready: boolean;
10
+ mcpToolset: McpToolset;
11
+ };
12
+ export type DaemonControlStatus = {
13
+ running: boolean;
14
+ ready: boolean;
15
+ pid?: number;
16
+ serverUrl?: string;
17
+ mcpToolset?: McpToolset;
18
+ };
19
+ export declare class DaemonInstanceLock {
20
+ readonly path: string;
21
+ readonly record: DaemonInstanceRecord;
22
+ private constructor();
23
+ static acquire(home: string | undefined, serverUrl: string, mcpToolset?: McpToolset): Promise<DaemonInstanceLock>;
24
+ markReady(): Promise<void>;
25
+ release(): Promise<void>;
26
+ private write;
27
+ }
28
+ export declare function readInstanceRecord(home?: string): Promise<DaemonInstanceRecord | undefined>;
29
+ export declare function serverStatus(home?: string): Promise<DaemonControlStatus>;
30
+ export declare function startServer(options: {
31
+ cliPath: string;
32
+ listen?: string;
33
+ tokenFile?: string;
34
+ home?: string;
35
+ timeoutMs?: number;
36
+ mcpToolset?: McpToolset;
37
+ }): Promise<DaemonControlStatus>;
38
+ export declare function stopServer(home?: string, timeoutMs?: number, tokenFile?: string): Promise<DaemonControlStatus>;
@@ -0,0 +1,327 @@
1
+ import { randomUUID } from "node:crypto";
2
+ import { spawn } from "node:child_process";
3
+ import { link, mkdir, open, readFile, unlink } from "node:fs/promises";
4
+ import { createServer } from "node:net";
5
+ import { hostname } from "node:os";
6
+ import { join } from "node:path";
7
+ import { configuredListenAddress, daemonHome, resolveClientToken, } from "./config.js";
8
+ import { processIsAlive } from "../engine/utils/daemon-lease.js";
9
+ import { replaceFileAtomically } from "../engine/utils/atomic-file.js";
10
+ import { DEFAULT_MCP_TOOLSET, MCP_TOOLSET_ENV, resolveMcpToolset, } from "../mcp/toolset.js";
11
+ const LIFTOFF_ONLY_FLAG = "--liftoff-only";
12
+ const SHUTDOWN_REQUEST_TIMEOUT_MS = 2_000;
13
+ const TERMINATION_GRACE_MS = 2_000;
14
+ export class DaemonInstanceLock {
15
+ path;
16
+ record;
17
+ constructor(path, record) {
18
+ this.path = path;
19
+ this.record = record;
20
+ }
21
+ static async acquire(home, serverUrl, mcpToolset = DEFAULT_MCP_TOOLSET) {
22
+ const path = join(daemonHome(home), "instance.lock");
23
+ const record = {
24
+ pid: process.pid,
25
+ hostname: hostname(),
26
+ instanceToken: randomUUID(),
27
+ startedAt: Date.now(),
28
+ updatedAt: Date.now(),
29
+ serverUrl,
30
+ ready: false,
31
+ mcpToolset,
32
+ };
33
+ await mkdir(daemonHome(home), { recursive: true, mode: 0o700 });
34
+ const temporaryPath = `${path}.${record.instanceToken}.tmp`;
35
+ try {
36
+ const handle = await open(temporaryPath, "wx", 0o600);
37
+ try {
38
+ await handle.writeFile(`${JSON.stringify(record)}\n`);
39
+ }
40
+ finally {
41
+ await handle.close();
42
+ }
43
+ for (let attempt = 0; attempt < 3; attempt++) {
44
+ try {
45
+ // Publish a complete record without replacing another owner. Unlike
46
+ // rename, link fails with EEXIST if a competing daemon published first.
47
+ await link(temporaryPath, path);
48
+ return new DaemonInstanceLock(path, record);
49
+ }
50
+ catch (error) {
51
+ if (error.code !== "EEXIST")
52
+ throw error;
53
+ const existing = await readInstanceRecord(home);
54
+ if (existing &&
55
+ existing.hostname === hostname() &&
56
+ processIsAlive(existing.pid)) {
57
+ throw new Error(`zvec-grep server is already running with PID ${existing.pid}`, { cause: error });
58
+ }
59
+ await unlink(path).catch(() => undefined);
60
+ }
61
+ }
62
+ throw new Error("Could not acquire the zvec-grep server instance lock.");
63
+ }
64
+ finally {
65
+ await unlink(temporaryPath).catch(() => undefined);
66
+ }
67
+ }
68
+ async markReady() {
69
+ this.record.ready = true;
70
+ await this.write();
71
+ // Liveness is checked using the PID and /healthz, not updatedAt.
72
+ // Persist state transitions only; no disk heartbeat is needed.
73
+ }
74
+ async release() {
75
+ const current = await readRecordPath(this.path);
76
+ if (current?.instanceToken === this.record.instanceToken &&
77
+ current.pid === process.pid) {
78
+ await unlink(this.path).catch(() => undefined);
79
+ }
80
+ }
81
+ async write() {
82
+ this.record.updatedAt = Date.now();
83
+ const current = await readRecordPath(this.path);
84
+ if (current?.instanceToken !== this.record.instanceToken ||
85
+ current.pid !== process.pid) {
86
+ throw new Error("zvec-grep server no longer owns its instance lock.");
87
+ }
88
+ // Keep the old record readable until the complete replacement is ready.
89
+ await replaceFileAtomically(this.path, `${JSON.stringify(this.record)}\n`, {
90
+ mode: 0o600,
91
+ });
92
+ }
93
+ }
94
+ export async function readInstanceRecord(home) {
95
+ return readRecordPath(join(daemonHome(home), "instance.lock"));
96
+ }
97
+ export async function serverStatus(home) {
98
+ const record = await readInstanceRecord(home);
99
+ if (!record ||
100
+ record.hostname !== hostname() ||
101
+ !processIsAlive(record.pid)) {
102
+ return { running: false, ready: false };
103
+ }
104
+ try {
105
+ const response = await fetch(new URL("/healthz", record.serverUrl), {
106
+ signal: AbortSignal.timeout(1_000),
107
+ });
108
+ return {
109
+ running: true,
110
+ ready: response.ok && record.ready,
111
+ pid: record.pid,
112
+ serverUrl: record.serverUrl,
113
+ mcpToolset: record.mcpToolset,
114
+ };
115
+ }
116
+ catch {
117
+ return {
118
+ running: true,
119
+ ready: false,
120
+ pid: record.pid,
121
+ serverUrl: record.serverUrl,
122
+ mcpToolset: record.mcpToolset,
123
+ };
124
+ }
125
+ }
126
+ export async function startServer(options) {
127
+ const environmentToolset = process.env[MCP_TOOLSET_ENV];
128
+ const requestedToolset = resolveMcpToolset(options.mcpToolset, environmentToolset);
129
+ const toolsetWasExplicit = options.mcpToolset !== undefined || environmentToolset !== undefined;
130
+ const current = await serverStatus(options.home);
131
+ if (current.running) {
132
+ if (toolsetWasExplicit &&
133
+ current.mcpToolset !== undefined &&
134
+ current.mcpToolset !== requestedToolset) {
135
+ throw new Error(`zvec-grep server is already running with MCP toolset "${current.mcpToolset}". Run \`zg --server off\`, then restart it with \`zg --server on --mcp-toolset ${requestedToolset}\`.`);
136
+ }
137
+ if (current.ready)
138
+ return current;
139
+ return waitForStatus(options.home, true, options.timeoutMs ?? 10_000);
140
+ }
141
+ const listen = configuredListenAddress(options.listen);
142
+ try {
143
+ await assertListenAddressAvailable(listen.host, listen.port);
144
+ }
145
+ catch (error) {
146
+ const starting = await waitForRunningRecord(options.home, 500);
147
+ if (starting) {
148
+ return waitForStatus(options.home, true, options.timeoutMs ?? 10_000);
149
+ }
150
+ throw error;
151
+ }
152
+ const args = [LIFTOFF_ONLY_FLAG, options.cliPath, "--server", "run"];
153
+ args.push("--mcp-toolset", requestedToolset);
154
+ if (options.listen)
155
+ args.push("--listen", options.listen);
156
+ if (options.tokenFile)
157
+ args.push("--token-file", options.tokenFile);
158
+ if (options.home)
159
+ args.push("--home", options.home);
160
+ const child = spawn(process.execPath, args, {
161
+ detached: true,
162
+ stdio: "ignore",
163
+ windowsHide: true,
164
+ });
165
+ child.unref();
166
+ return waitForStatus(options.home, true, options.timeoutMs ?? 10_000);
167
+ }
168
+ export async function stopServer(home, timeoutMs = 30_000, tokenFile) {
169
+ const record = await readInstanceRecord(home);
170
+ if (!record ||
171
+ record.hostname !== hostname() ||
172
+ !processIsAlive(record.pid)) {
173
+ return { running: false, ready: false };
174
+ }
175
+ if (record.pid === process.pid) {
176
+ throw new Error("Refusing to stop the current process as a daemon.");
177
+ }
178
+ const token = await resolveClientToken({ home, tokenFile });
179
+ let shutdownAccepted = false;
180
+ try {
181
+ const response = await fetch(new URL("/control/shutdown", record.serverUrl), {
182
+ method: "POST",
183
+ headers: token ? { Authorization: `Bearer ${token}` } : {},
184
+ signal: AbortSignal.timeout(Math.min(SHUTDOWN_REQUEST_TIMEOUT_MS, Math.max(timeoutMs, 100))),
185
+ });
186
+ if (!response.ok) {
187
+ throw new ShutdownResponseError(response.status);
188
+ }
189
+ shutdownAccepted = true;
190
+ }
191
+ catch (error) {
192
+ if (error instanceof ShutdownResponseError)
193
+ throw error;
194
+ }
195
+ if (shutdownAccepted &&
196
+ (await waitForProcessExit(record.pid, Math.max(timeoutMs, 0)))) {
197
+ await removeStoppedInstanceRecord(home, record);
198
+ return { running: false, ready: false };
199
+ }
200
+ return forceStopRecordedProcess(home, record, shutdownAccepted, timeoutMs);
201
+ }
202
+ class ShutdownResponseError extends Error {
203
+ constructor(status) {
204
+ super(`Server shutdown request failed with HTTP ${status}`);
205
+ }
206
+ }
207
+ async function forceStopRecordedProcess(home, record, allowMissingRecord, timeoutMs) {
208
+ if (!processIsAlive(record.pid)) {
209
+ await removeStoppedInstanceRecord(home, record);
210
+ return { running: false, ready: false };
211
+ }
212
+ await assertSameInstanceBeforeSignal(home, record, allowMissingRecord);
213
+ signalProcess(record.pid, "SIGTERM");
214
+ const graceMs = Math.min(TERMINATION_GRACE_MS, Math.max(timeoutMs, 100));
215
+ if (await waitForProcessExit(record.pid, graceMs)) {
216
+ await removeStoppedInstanceRecord(home, record);
217
+ return { running: false, ready: false };
218
+ }
219
+ await assertSameInstanceBeforeSignal(home, record, true);
220
+ signalProcess(record.pid, "SIGKILL");
221
+ if (!(await waitForProcessExit(record.pid, graceMs))) {
222
+ throw new Error(`Timed out waiting for zvec-grep server process ${record.pid} to stop after SIGKILL.`);
223
+ }
224
+ await removeStoppedInstanceRecord(home, record);
225
+ return { running: false, ready: false };
226
+ }
227
+ async function assertSameInstanceBeforeSignal(home, expected, allowMissing) {
228
+ const current = await readInstanceRecord(home);
229
+ if (!current && allowMissing)
230
+ return;
231
+ if (!current ||
232
+ current.hostname !== expected.hostname ||
233
+ current.pid !== expected.pid ||
234
+ current.instanceToken !== expected.instanceToken) {
235
+ throw new Error("zvec-grep server instance changed while stopping; refusing to signal the recorded process.");
236
+ }
237
+ }
238
+ function signalProcess(pid, signal) {
239
+ try {
240
+ process.kill(pid, signal);
241
+ }
242
+ catch (error) {
243
+ if (error.code !== "ESRCH")
244
+ throw error;
245
+ }
246
+ }
247
+ async function removeStoppedInstanceRecord(home, stopped) {
248
+ const path = join(daemonHome(home), "instance.lock");
249
+ const current = await readRecordPath(path);
250
+ if (current?.pid === stopped.pid &&
251
+ current.instanceToken === stopped.instanceToken) {
252
+ await unlink(path).catch(() => undefined);
253
+ }
254
+ }
255
+ async function assertListenAddressAvailable(host, port) {
256
+ const probe = createServer();
257
+ try {
258
+ await new Promise((resolve, reject) => {
259
+ probe.once("error", reject);
260
+ probe.listen({ host, port, exclusive: true }, () => {
261
+ probe.removeListener("error", reject);
262
+ probe.close((error) => (error ? reject(error) : resolve()));
263
+ });
264
+ });
265
+ }
266
+ catch (error) {
267
+ if (error.code === "EADDRINUSE") {
268
+ throw new Error(`Server address ${host}:${port} is already in use. Another or legacy zvec-grep server may still be running.`, { cause: error });
269
+ }
270
+ throw error;
271
+ }
272
+ }
273
+ async function waitForProcessExit(pid, timeoutMs) {
274
+ const deadline = Date.now() + timeoutMs;
275
+ while (Date.now() < deadline) {
276
+ if (!processIsAlive(pid))
277
+ return true;
278
+ await new Promise((resolve) => setTimeout(resolve, 50));
279
+ }
280
+ return !processIsAlive(pid);
281
+ }
282
+ async function waitForStatus(home, running, timeoutMs) {
283
+ const deadline = Date.now() + timeoutMs;
284
+ let last = { running: false, ready: false };
285
+ while (Date.now() < deadline) {
286
+ last = await serverStatus(home);
287
+ if (running ? last.running && last.ready : !last.running)
288
+ return last;
289
+ await new Promise((resolve) => setTimeout(resolve, 50));
290
+ }
291
+ throw new Error(`Timed out waiting for zvec-grep server to ${running ? "start" : "stop"}.`);
292
+ }
293
+ async function waitForRunningRecord(home, timeoutMs) {
294
+ const deadline = Date.now() + timeoutMs;
295
+ while (Date.now() < deadline) {
296
+ if ((await serverStatus(home)).running)
297
+ return true;
298
+ await new Promise((resolve) => setTimeout(resolve, 25));
299
+ }
300
+ return false;
301
+ }
302
+ async function readRecordPath(path) {
303
+ try {
304
+ const value = JSON.parse(await readFile(path, "utf8"));
305
+ if (typeof value.pid !== "number" ||
306
+ typeof value.hostname !== "string" ||
307
+ typeof value.instanceToken !== "string" ||
308
+ typeof value.startedAt !== "number" ||
309
+ typeof value.updatedAt !== "number" ||
310
+ typeof value.serverUrl !== "string" ||
311
+ typeof value.ready !== "boolean" ||
312
+ (value.mcpToolset !== undefined &&
313
+ value.mcpToolset !== "agent" &&
314
+ value.mcpToolset !== "full"))
315
+ return undefined;
316
+ return {
317
+ ...value,
318
+ // Locks written before toolset profiles exposed the full six-tool MCP
319
+ // surface, so preserve that behavior when reporting a live legacy daemon.
320
+ mcpToolset: value.mcpToolset ?? "full",
321
+ };
322
+ }
323
+ catch {
324
+ return undefined;
325
+ }
326
+ }
327
+ //# sourceMappingURL=server-controller.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"server-controller.js","sourceRoot":"","sources":["../../src/daemon/server-controller.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,62 @@
1
+ import { watch } from "node:fs";
2
+ import type { RootPath } from "../engine/types.js";
3
+ import { type ChangeSetSnapshot } from "./change-set.js";
4
+ export type WatchManagerOptions = {
5
+ root: string;
6
+ onChanges: (changes: ChangeSetSnapshot, reason: "watch" | "reconcile") => void | Promise<void>;
7
+ debounceMs?: number;
8
+ maxWaitMs?: number;
9
+ reconcileIntervalMs?: number;
10
+ maxChangedPaths?: number;
11
+ watchFactory?: typeof watch;
12
+ onPendingChange?: (pending: boolean) => void;
13
+ onActivity?: () => void;
14
+ onActiveChange?: (active: boolean) => void;
15
+ resumeCheckIntervalMs?: number;
16
+ resumeThresholdMs?: number;
17
+ platform?: NodeJS.Platform;
18
+ getRootPaths?: () => readonly RootPath[] | undefined;
19
+ };
20
+ export declare class WatchManager {
21
+ private readonly options;
22
+ private readonly watchers;
23
+ private readonly watchedDirectories;
24
+ private readonly directoryWatchers;
25
+ private readonly pendingRecords;
26
+ private readonly inflightFlushes;
27
+ private readonly recoveryStates;
28
+ private changes;
29
+ private debounceTimer?;
30
+ private maxWaitTimer?;
31
+ private reconcileTimer?;
32
+ private resumeTimer?;
33
+ private closed;
34
+ private active;
35
+ private useDirectoryWatchers;
36
+ private reconcileRequested;
37
+ private lastResumeCheckAt;
38
+ constructor(options: WatchManagerOptions);
39
+ start(): void;
40
+ close(): Promise<void>;
41
+ flushPending(): Promise<void>;
42
+ refreshPaths(): Promise<void>;
43
+ checkForResume(now?: number): void;
44
+ private recordPath;
45
+ private queueRecord;
46
+ private queueFullReconcile;
47
+ private scheduleFlush;
48
+ private flush;
49
+ private newChangeSet;
50
+ private startFlush;
51
+ private addWatcher;
52
+ private recoveryState;
53
+ private recoverWatcher;
54
+ private restoreDirectoryWatcher;
55
+ private setActive;
56
+ private startPrimaryWatcher;
57
+ private startDirectoryWatchers;
58
+ private watchDirectoryTree;
59
+ private shouldTrackPath;
60
+ private refreshDirectoryTree;
61
+ private removeDirectoryWatchers;
62
+ }