@zvec/zvec-grep 0.1.6 → 0.1.7

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 (148) hide show
  1. package/README.md +128 -49
  2. package/README_CN.md +116 -43
  3. package/dist/cli/args.js +40 -7
  4. package/dist/cli/args.js.map +1 -1
  5. package/dist/cli/auth.js +1 -4
  6. package/dist/cli/auth.js.map +1 -1
  7. package/dist/cli/commands.js +53 -24
  8. package/dist/cli/commands.js.map +1 -1
  9. package/dist/cli/format/context.d.ts +3 -0
  10. package/dist/cli/format/context.js +93 -22
  11. package/dist/cli/format/context.js.map +1 -1
  12. package/dist/cli/format/debug.js +10 -4
  13. package/dist/cli/format/debug.js.map +1 -1
  14. package/dist/cli/format/status.d.ts +3 -1
  15. package/dist/cli/format/status.js +34 -0
  16. package/dist/cli/format/status.js.map +1 -1
  17. package/dist/cli/help.js +149 -16
  18. package/dist/cli/help.js.map +1 -1
  19. package/dist/cli/index.d.ts +1 -1
  20. package/dist/cli/index.js +1 -1
  21. package/dist/cli/install.js +174 -56
  22. package/dist/cli/install.js.map +1 -1
  23. package/dist/cli/server-search.d.ts +3 -0
  24. package/dist/cli/server-search.js +12 -0
  25. package/dist/cli/server-search.js.map +1 -0
  26. package/dist/cli/types.d.ts +3 -0
  27. package/dist/cli/types.js.map +1 -1
  28. package/dist/client/daemon-client.d.ts +12 -0
  29. package/dist/client/daemon-client.js +23 -0
  30. package/dist/client/daemon-client.js.map +1 -1
  31. package/dist/daemon/backend.d.ts +1 -0
  32. package/dist/daemon/backend.js +56 -18
  33. package/dist/daemon/backend.js.map +1 -1
  34. package/dist/daemon/http-server.js +1 -0
  35. package/dist/daemon/http-server.js.map +1 -1
  36. package/dist/daemon/index-coordinator.d.ts +2 -1
  37. package/dist/daemon/index-coordinator.js.map +1 -1
  38. package/dist/daemon/runtime-manager.d.ts +1 -0
  39. package/dist/daemon/runtime-manager.js +4 -1
  40. package/dist/daemon/runtime-manager.js.map +1 -1
  41. package/dist/daemon/server-controller.js +55 -4
  42. package/dist/daemon/server-controller.js.map +1 -1
  43. package/dist/engine/code-formats.d.ts +3 -0
  44. package/dist/engine/code-formats.js +14 -0
  45. package/dist/engine/code-formats.js.map +1 -0
  46. package/dist/engine/extraction/code/adapter.js +1 -1
  47. package/dist/engine/extraction/code/adapter.js.map +1 -1
  48. package/dist/engine/extraction/code/extractor.js +12 -5
  49. package/dist/engine/extraction/code/extractor.js.map +1 -1
  50. package/dist/engine/extraction/index.d.ts +1 -0
  51. package/dist/engine/extraction/index.js +1 -0
  52. package/dist/engine/extraction/index.js.map +1 -1
  53. package/dist/engine/extraction/markdown/extractor.js +5 -3
  54. package/dist/engine/extraction/markdown/extractor.js.map +1 -1
  55. package/dist/engine/extraction/vector-content.d.ts +5 -0
  56. package/dist/engine/extraction/vector-content.js +95 -0
  57. package/dist/engine/extraction/vector-content.js.map +1 -0
  58. package/dist/engine/file-size-policy.d.ts +6 -0
  59. package/dist/engine/file-size-policy.js +20 -0
  60. package/dist/engine/file-size-policy.js.map +1 -0
  61. package/dist/engine/file-type.d.ts +10 -0
  62. package/dist/engine/file-type.js +71 -38
  63. package/dist/engine/file-type.js.map +1 -1
  64. package/dist/engine/manifest.d.ts +1 -0
  65. package/dist/engine/manifest.js +4 -0
  66. package/dist/engine/manifest.js.map +1 -1
  67. package/dist/engine/models/backends/model2vec-runtime.d.ts +63 -0
  68. package/dist/engine/models/backends/model2vec-runtime.js +112 -0
  69. package/dist/engine/models/backends/model2vec-runtime.js.map +1 -0
  70. package/dist/engine/models/backends/model2vec-tokenizer.d.ts +2 -0
  71. package/dist/engine/models/backends/model2vec-tokenizer.js +42 -0
  72. package/dist/engine/models/backends/model2vec-tokenizer.js.map +1 -0
  73. package/dist/engine/models/backends/model2vec-worker-pool.d.ts +25 -0
  74. package/dist/engine/models/backends/model2vec-worker-pool.js +264 -0
  75. package/dist/engine/models/backends/model2vec-worker-pool.js.map +1 -0
  76. package/dist/engine/models/backends/model2vec-worker.d.ts +1 -0
  77. package/dist/engine/models/backends/model2vec-worker.js +41 -0
  78. package/dist/engine/models/backends/model2vec-worker.js.map +1 -0
  79. package/dist/engine/models/backends/model2vec.d.ts +3 -20
  80. package/dist/engine/models/backends/model2vec.js +107 -128
  81. package/dist/engine/models/backends/model2vec.js.map +1 -1
  82. package/dist/engine/models/catalog.d.ts +26 -7
  83. package/dist/engine/models/catalog.js +26 -7
  84. package/dist/engine/models/catalog.js.map +1 -1
  85. package/dist/engine/models/embeddings.d.ts +1 -0
  86. package/dist/engine/models/embeddings.js.map +1 -1
  87. package/dist/engine/models/resolution.js +1 -1
  88. package/dist/engine/models/resolution.js.map +1 -1
  89. package/dist/engine/pipeline/indexing/index.js +83 -78
  90. package/dist/engine/pipeline/indexing/index.js.map +1 -1
  91. package/dist/engine/pipeline/indexing/input-budget.d.ts +2 -0
  92. package/dist/engine/pipeline/indexing/input-budget.js +51 -0
  93. package/dist/engine/pipeline/indexing/input-budget.js.map +1 -0
  94. package/dist/engine/pipeline/indexing/scanner/index.d.ts +3 -1
  95. package/dist/engine/pipeline/indexing/scanner/index.js +70 -18
  96. package/dist/engine/pipeline/indexing/scanner/index.js.map +1 -1
  97. package/dist/engine/pipeline/search/index.js.map +1 -1
  98. package/dist/engine/service/index.d.ts +1 -1
  99. package/dist/engine/service/root.d.ts +1 -4
  100. package/dist/engine/service/root.js +15 -22
  101. package/dist/engine/service/root.js.map +1 -1
  102. package/dist/engine/service/structure-enrichment.d.ts +1 -1
  103. package/dist/engine/service/structure-enrichment.js +10 -10
  104. package/dist/engine/service/structure-enrichment.js.map +1 -1
  105. package/dist/engine/service/types.d.ts +8 -1
  106. package/dist/engine/service/workspace-index.d.ts +6 -4
  107. package/dist/engine/service/workspace-index.js +18 -12
  108. package/dist/engine/service/workspace-index.js.map +1 -1
  109. package/dist/engine/service/zvec-grep.js +47 -29
  110. package/dist/engine/service/zvec-grep.js.map +1 -1
  111. package/dist/engine/storage/index.d.ts +27 -21
  112. package/dist/engine/storage/index.js +2 -1
  113. package/dist/engine/storage/index.js.map +1 -1
  114. package/dist/engine/storage/layout.d.ts +10 -0
  115. package/dist/engine/storage/layout.js +29 -0
  116. package/dist/engine/storage/layout.js.map +1 -0
  117. package/dist/engine/storage/zvec.d.ts +2 -42
  118. package/dist/engine/storage/zvec.js +40 -67
  119. package/dist/engine/storage/zvec.js.map +1 -1
  120. package/dist/engine/types.d.ts +14 -0
  121. package/dist/engine/types.js.map +1 -1
  122. package/dist/index.d.ts +2 -2
  123. package/dist/index.js.map +1 -1
  124. package/dist/mcp/input-normalization.d.ts +2 -2
  125. package/dist/mcp/input-normalization.js +14 -5
  126. package/dist/mcp/input-normalization.js.map +1 -1
  127. package/dist/mcp/schemas.d.ts +242 -0
  128. package/dist/mcp/schemas.js +73 -14
  129. package/dist/mcp/schemas.js.map +1 -1
  130. package/dist/mcp/stdio-bridge.d.ts +9 -0
  131. package/dist/mcp/stdio-bridge.js +131 -0
  132. package/dist/mcp/stdio-bridge.js.map +1 -0
  133. package/dist/mcp/tools.d.ts +4 -1
  134. package/dist/mcp/tools.js +78 -44
  135. package/dist/mcp/tools.js.map +1 -1
  136. package/dist/prompts/zvec-grep-guidance.d.ts +2 -0
  137. package/dist/prompts/zvec-grep-guidance.js +9 -0
  138. package/dist/prompts/zvec-grep-guidance.js.map +1 -0
  139. package/docs/01-agents.md +26 -5
  140. package/docs/02-cli.md +11 -1
  141. package/docs/03-mcp.md +29 -11
  142. package/docs/04-pipeline.md +10 -2
  143. package/docs/06-server.md +5 -0
  144. package/docs/07-embedding.md +6 -3
  145. package/package.json +4 -4
  146. package/skills/zvec-grep/SKILL.md +0 -61
  147. package/skills/zvec-grep/agents/openai.yaml +0 -4
  148. package/skills/zvec-grep/references/cli-fallback.md +0 -85
package/dist/cli/help.js CHANGED
@@ -1,3 +1,7 @@
1
+ import { COMPONENT_CODE_FORMATS, STRUCTURED_CODE_FORMATS, } from "../engine/code-formats.js";
2
+ import { listKnownBinaryExtensionGroups, listRecognizedFileTypes, } from "../engine/file-type.js";
3
+ import { resolveMaxFileSizeBytes } from "../engine/file-size-policy.js";
4
+ import { listEmbeddingModels } from "../engine/models/index.js";
1
5
  export function printHelp(version, topic) {
2
6
  if (!topic) {
3
7
  console.log(mainHelp(version));
@@ -24,7 +28,6 @@ const ENVIRONMENT_VARIABLES = {
24
28
  DASHSCOPE_API_KEY: "Qwen credential fallback after ZVEC_GREP_API_KEY",
25
29
  QWEN_API_KEY: "Qwen credential fallback after DASHSCOPE_API_KEY",
26
30
  ZVEC_GREP_AUTHORIZATION_KEY_FILE: "Workspace grant signing-key file (advanced)",
27
- ZVEC_GREP_INSTALL_SKIP_SERVER: "Set to 1 to keep zg install from starting the Server (advanced)",
28
31
  ZVEC_GREP_METAL_KEEP_RESIDENCY: "Set to 1 to keep llama.cpp Metal residency enabled (advanced)",
29
32
  ZVEC_GREP_LLAMA_CONTEXT_PARALLELISM: "Positive llama.cpp context parallelism override (advanced)",
30
33
  NO_COLOR: "Disable terminal colors",
@@ -62,16 +65,17 @@ Examples:
62
65
  zg query "where authentication is validated"
63
66
  zg query --fts "AuthService"
64
67
  zg query --rg -F "AuthService" src
65
- zg index --embedding local/embeddinggemma-300m
68
+ zg index --embedding local/potion-code-16m-v2
66
69
  zg status
67
70
  zg auth status
68
71
  zg server on
69
- zg config model set local/embeddinggemma-300m --device metal
72
+ zg config model set local/potion-code-16m-v2 --device metal
70
73
  zg install
71
74
 
72
75
  Environment:
73
76
  ${formatEnvironmentVariables(MAIN_ENVIRONMENT_VARIABLES)}
74
77
 
78
+ Run zg help models or zg help file-types for supported indexing capabilities.
75
79
  Run zg help environment for all variables, scopes, aliases, and precedence.
76
80
  Run zg help <command> or zg <command> --help for command-specific help.
77
81
  Use zg -h/--help for this page and zg -v/--version for the version.`;
@@ -93,13 +97,17 @@ Search routes:
93
97
  --rg Run exhaustive managed ripgrep
94
98
 
95
99
  Result options:
96
- --limit <n> Maximum results
97
- --human Human-readable ranked output
98
- --preview <none|short|full> Indexed source preview size
100
+ --limit <n> Maximum results per group (default: 7)
101
+ --human Human-readable output (default: agent markdown)
102
+ --preview <none|short|full> Indexed preview size (default: none; --human: full)
99
103
  --debug Print diagnostics to stderr
100
104
  --trace Include per-hit indexed search trace
101
- --refresh <background|wait|off> Refresh policy (Server: background; Direct: off)
102
- --mode <direct|server|auto> Select indexed query transport
105
+ --refresh <background|wait|off> Refresh policy (defaults: server=background, direct=off)
106
+ In direct mode, background warns and falls back to off
107
+ --mode <direct|server|auto> Select indexed query transport (default: auto)
108
+
109
+ Indexed results are shown by query group, preserving each group's own rank.
110
+ A result that matches more than one group is shown in each matching group.
103
111
 
104
112
  Embedding runtime:
105
113
  --api-key <key> Embedding provider API key
@@ -107,8 +115,6 @@ Embedding runtime:
107
115
  --device <device> auto, cpu, metal, vulkan, cuda
108
116
  --allow-remote Allow Remote Embedding for this command only
109
117
 
110
- Direct mode warns and uses off when background is requested.
111
-
112
118
  File filters:
113
119
  -g, --glob <glob> Include paths; prefix with ! to exclude; repeatable
114
120
  --iglob <glob> Case-insensitive path glob; repeatable
@@ -143,10 +149,11 @@ Index options:
143
149
  --rebuild Rebuild the existing index
144
150
  --drop Permanently remove the workspace index
145
151
  --yes Confirm --drop without prompting
152
+ --debug Print skipped-file diagnostics to stderr
146
153
  --mode <direct|server|auto> Select indexing transport
147
154
 
148
155
  Embedding options:
149
- --embedding <model> Model such as local/embeddinggemma-300m or qwen/text-embedding-v4
156
+ --embedding <model> Model such as local/potion-code-16m-v2 or qwen/text-embedding-v4
150
157
  --api-key <key> Embedding provider API key
151
158
  --endpoint <url> Embedding provider endpoint
152
159
  --model-cache <path> Local model cache directory
@@ -238,11 +245,16 @@ ${formatEnvironmentVariables([
238
245
  ])}`;
239
246
  case "server":
240
247
  return `Usage:
248
+ zg server --stdio [--token-file <path>] [--mcp-toolset <agent|full>]
241
249
  zg server on [--listen 127.0.0.1:7999] [--token-file <path>] [--mcp-toolset <agent|full>]
242
250
  zg server off [--token-file <path>]
243
251
  zg server status [--check-ready]
244
252
  zg server run [--listen 127.0.0.1:7999] [--token-file <path>] [--mcp-toolset <agent|full>]
245
253
 
254
+ --stdio is the MCP client bootstrap transport. It safely starts or reuses the
255
+ shared daemon, proxies MCP over stdin/stdout, and leaves the daemon running
256
+ when the client disconnects.
257
+
246
258
  The server listens on loopback. Authentication is disabled by default; pass a
247
259
  token file or set ZVEC_GREP_SERVER_TOKEN to require Bearer authentication.
248
260
  The public MCP endpoint defaults to the agent toolset (indexed search only).
@@ -263,17 +275,21 @@ ${formatEnvironmentVariables([
263
275
  See zg help environment for daemon startup scope.`;
264
276
  case "install":
265
277
  return `Usage:
266
- zg install [--target codex|claude|opencode|cursor|all|auto] [--yes] [--force]
278
+ zg install [--target codex|claude|opencode|cursor|all|auto] [--mcp-transport stdio|http] [--mcp-toolset agent|full] [--yes] [--force]
267
279
 
268
280
  Options:
269
281
  --target <agent> codex, claude, opencode, cursor, auto, or all; repeatable
282
+ --mcp-transport <stdio|http> MCP connection mode (default: stdio)
283
+ --mcp-toolset <agent|full> Daemon MCP toolset (default: agent)
270
284
  --mcp-tool-timeout <seconds> Codex MCP tool timeout (default: 600)
271
- --mcp-token-env <name> Bearer token environment variable
285
+ --mcp-token-env <name> HTTP mode Bearer token environment variable
272
286
  --yes Install detected agents without prompting
273
287
  --force Replace conflicting unmanaged configuration
274
288
 
275
- Interactive setup detects supported agents, configures the local MCP server,
276
- and starts it. Codex, Claude Code, and OpenCode also receive managed guidance;
289
+ Interactive setup detects supported agents, configures stdio by default, and
290
+ starts the shared daemon. In stdio mode an agent reconnect also starts the
291
+ daemon automatically after a reboot. HTTP users manage later daemon restarts.
292
+ Codex, Claude Code, and OpenCode also receive managed guidance;
277
293
  Codex and Claude Code receive local tool pre-approval. Remote Embedding
278
294
  authorization remains separate and is requested by zvec-grep on first remote
279
295
  use. This does not install the npm package.`;
@@ -290,7 +306,13 @@ Removes zvec-grep-managed MCP configuration, trust, and guidance.`;
290
306
  zg --help
291
307
 
292
308
  Topics:
309
+ models Supported embedding models
310
+ file-types Supported file types and structural parsing
293
311
  environment, env Environment variables and precedence`;
312
+ case "models":
313
+ return modelsHelp();
314
+ case "file-types":
315
+ return fileTypesHelp();
294
316
  case "environment":
295
317
  case "env":
296
318
  return environmentHelp();
@@ -304,6 +326,118 @@ Topics:
304
326
  return undefined;
305
327
  }
306
328
  }
329
+ function modelsHelp() {
330
+ const models = listEmbeddingModels().sort((left, right) => {
331
+ const leftRuntime = left.provider === "local" ? 0 : 1;
332
+ const rightRuntime = right.provider === "local" ? 0 : 1;
333
+ return (leftRuntime - rightRuntime ||
334
+ left.reference.localeCompare(right.reference));
335
+ });
336
+ return `Usage:
337
+ zg help models
338
+
339
+ Supported embedding models:
340
+ ${formatEmbeddingModels(models)}
341
+
342
+ Local models are downloaded to the model cache on first use. Remote models
343
+ require provider credentials plus --allow-remote or a Workspace authorization.
344
+ Only qwen/qwen3-vl-embedding accepts image input.
345
+
346
+ Existing indexes keep their stored model. See zg help environment for
347
+ new-index model selection and runtime precedence.`;
348
+ }
349
+ function fileTypesHelp() {
350
+ const types = listRecognizedFileTypes();
351
+ const structuredFormats = new Set(STRUCTURED_CODE_FORMATS);
352
+ const componentFormats = new Set(COMPONENT_CODE_FORMATS);
353
+ const codeTypes = types.filter((type) => type.kind === "code");
354
+ const structuredCode = codeTypes.filter((type) => structuredFormats.has(type.format));
355
+ const componentCode = codeTypes.filter((type) => componentFormats.has(type.format));
356
+ const plainCode = codeTypes.filter((type) => !structuredFormats.has(type.format) && !componentFormats.has(type.format));
357
+ const documentsAndData = types.filter((type) => type.kind === "text" || type.kind === "data");
358
+ const images = types.filter((type) => type.kind === "image");
359
+ const skipped = listKnownBinaryExtensionGroups().map((group) => [
360
+ group.label,
361
+ group.extensions.join(", "),
362
+ ]);
363
+ const sizeLimits = [
364
+ ["Code", "code"],
365
+ ["Text", "text"],
366
+ ["Data", "data"],
367
+ ["Image", "image"],
368
+ ].map(([label, kind]) => [
369
+ label,
370
+ `${resolveMaxFileSizeBytes(kind) / (1024 * 1024)} MiB`,
371
+ ]);
372
+ return `Usage:
373
+ zg help file-types
374
+
375
+ Structured code (symbols and scopes):
376
+ ${formatFileTypeTable(structuredCode)}
377
+
378
+ Component code (JavaScript and TypeScript script blocks):
379
+ ${formatFileTypeTable(componentCode)}
380
+
381
+ Other code (plain-text chunks):
382
+ ${formatFileTypeTable(plainCode)}
383
+
384
+ Documents and data:
385
+ ${formatFileTypeTable(documentsAndData)}
386
+ Markdown preserves heading structure; other formats use text chunks.
387
+
388
+ Images (multimodal embedding required):
389
+ ${formatFileTypeTable(images)}
390
+ Images are ignored by default and must be explicitly selected.
391
+
392
+ Other text:
393
+ Unknown non-binary extensions and extensionless files use text chunks.
394
+
395
+ Skipped binary types:
396
+ ${formatTable(["GROUP", "EXTENSIONS"], skipped)}
397
+ Files detected as binary by content are also skipped.
398
+
399
+ Indexing rules:
400
+ Default size limits:
401
+ ${formatTable(["KIND", "MAX SIZE"], sizeLimits)}
402
+ Empty files are skipped. Use --max-filesize to override the size limit.
403
+ Common dependencies, build output, generated files, and lock files are
404
+ ignored by default. .git and .zvec-grep are always skipped.`;
405
+ }
406
+ function formatEmbeddingModels(models) {
407
+ const rows = models.map((model) => {
408
+ const runtime = model.provider === "local" ? "local" : "remote";
409
+ const input = "kind" in model && model.kind === "multimodal" ? "text,image" : "text";
410
+ const inputLimit = "maxInputTokens" in model ? model.maxInputTokens : model.contextSize;
411
+ return [
412
+ model.reference,
413
+ runtime,
414
+ input,
415
+ String(model.dimension),
416
+ String(inputLimit),
417
+ model.backend,
418
+ ];
419
+ });
420
+ return formatTable(["MODEL", "RUNTIME", "INPUT", "DIMS", "TOKENS", "BACKEND"], rows, new Set([3, 4]));
421
+ }
422
+ function formatFileTypeTable(types) {
423
+ const rows = [...types]
424
+ .sort((left, right) => left.format.localeCompare(right.format))
425
+ .map((type) => [type.format, type.patterns.join(", ")]);
426
+ return formatTable(["TYPE", "FILES"], rows);
427
+ }
428
+ function formatTable(header, rows, rightAlignedColumns = new Set()) {
429
+ const widths = header.map((label, index) => Math.max(label.length, ...rows.map((row) => row[index].length)));
430
+ const separator = widths.map((width) => "-".repeat(width));
431
+ return [header, separator, ...rows]
432
+ .map((row) => ` ${row
433
+ .map((value, index) => index === row.length - 1
434
+ ? value
435
+ : rightAlignedColumns.has(index)
436
+ ? value.padStart(widths[index])
437
+ : value.padEnd(widths[index]))
438
+ .join(" ")}`)
439
+ .join("\n");
440
+ }
307
441
  function environmentHelp() {
308
442
  return `Usage:
309
443
  zg help environment
@@ -338,7 +472,6 @@ ${formatEnvironmentVariables([
338
472
 
339
473
  Advanced:
340
474
  ${formatEnvironmentVariables([
341
- "ZVEC_GREP_INSTALL_SKIP_SERVER",
342
475
  "ZVEC_GREP_METAL_KEEP_RESIDENCY",
343
476
  "ZVEC_GREP_LLAMA_CONTEXT_PARALLELISM",
344
477
  "NO_COLOR",
@@ -1 +1 @@
1
- {"version":3,"file":"help.js","sourceRoot":"","sources":["../../src/cli/help.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"help.js","sourceRoot":"","sources":["../../src/cli/help.ts"],"names":[],"mappings":"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"}
@@ -1,2 +1,2 @@
1
- #!/usr/bin/env node
1
+ #!/usr/bin/env -S node --liftoff-only
2
2
  export {};
package/dist/cli/index.js CHANGED
@@ -1,4 +1,4 @@
1
- #!/usr/bin/env node
1
+ #!/usr/bin/env -S node --liftoff-only
2
2
  import { parseArgs } from "./args.js";
3
3
  import { runParsedCommand } from "./commands.js";
4
4
  import { colorModeFromArgs, printError } from "./errors.js";
@@ -5,6 +5,7 @@ import { homedir } from "node:os";
5
5
  import { delimiter, dirname, resolve } from "node:path";
6
6
  import { createInterface } from "node:readline/promises";
7
7
  import { resolveServerUrl } from "../client/mode-router.js";
8
+ import { formatPromptRules, ZVEC_GREP_WORKSPACE_EVIDENCE_RULES, } from "../prompts/zvec-grep-guidance.js";
8
9
  const AGENT_INSTALLERS = [
9
10
  {
10
11
  id: "claude",
@@ -48,10 +49,13 @@ export async function runInstall(parsed) {
48
49
  console.log("\nNo agent integrations selected.");
49
50
  return;
50
51
  }
52
+ const transport = await resolveInstallTransport(parsed);
51
53
  console.log("\nInstalling integrations\n");
52
54
  for (const installer of installers) {
53
55
  await installer.install({
54
56
  force: parsed.options.force === true,
57
+ transport,
58
+ mcpToolset: parsed.options.mcpToolset,
55
59
  mcpToolTimeoutSeconds: parsed.options.installMcpToolTimeoutSeconds ??
56
60
  DEFAULT_MCP_TOOL_TIMEOUT_SECONDS,
57
61
  mcpTokenEnv: parsed.options.installMcpTokenEnv,
@@ -60,7 +64,7 @@ export async function runInstall(parsed) {
60
64
  console.log(" MCP configured");
61
65
  console.log("");
62
66
  }
63
- const server = await ensureInstalledServer();
67
+ const server = await ensureInstalledServer(parsed.options.mcpToolset);
64
68
  if (server.ready) {
65
69
  console.log(` ${installSuccessMark()} Server`);
66
70
  console.log(` ready at ${server.serverUrl ?? resolveServerUrl()}`);
@@ -69,6 +73,10 @@ export async function runInstall(parsed) {
69
73
  console.log(` ${installMutedMark()} Server`);
70
74
  console.log(" not started; run `zg server on`");
71
75
  }
76
+ if (transport === "stdio") {
77
+ console.log(` ${installSuccessMark()} Connection`);
78
+ console.log(" stdio; reconnects start the server automatically");
79
+ }
72
80
  console.log("\nzvec-grep is ready\n");
73
81
  console.log(` Agents ${installers.map((installer) => installer.label).join(", ")}`);
74
82
  console.log(" Remote data Authorization requested on first remote use");
@@ -97,7 +105,7 @@ async function installCodexIntegration(options) {
97
105
  path: configPath,
98
106
  startMarker: ZVEC_GREP_CONFIG_START,
99
107
  endMarker: ZVEC_GREP_CONFIG_END,
100
- block: codexConfigBlock(options.mcpToolTimeoutSeconds, options.mcpTokenEnv),
108
+ block: codexConfigBlock(options),
101
109
  force: options.force,
102
110
  hasConflict: hasCodexMcpServerConfig,
103
111
  conflictMessage: `Existing [mcp_servers.zvec_grep] found in ${configPath}. Re-run with --force after removing or moving that table into the zvec-grep managed block.`,
@@ -120,6 +128,8 @@ async function installClaudeIntegration(options) {
120
128
  await updateClaudeMcpConfig({
121
129
  path: mcpConfigPath,
122
130
  force: options.force,
131
+ transport: options.transport,
132
+ mcpToolset: options.mcpToolset,
123
133
  tokenEnv: options.mcpTokenEnv,
124
134
  });
125
135
  await updateClaudePermissionSettings(settingsPath, true);
@@ -168,20 +178,27 @@ async function installOpenCodeIntegration(options) {
168
178
  await installJsonMcpServer({
169
179
  path: configPath,
170
180
  containerKey: "mcp",
171
- server: {
172
- type: "remote",
173
- url: resolveServerUrl(),
174
- enabled: true,
175
- timeout: options.mcpToolTimeoutSeconds * 1_000,
176
- oauth: false,
177
- ...(options.mcpTokenEnv
178
- ? {
179
- headers: {
180
- Authorization: `Bearer {env:${options.mcpTokenEnv}}`,
181
- },
182
- }
183
- : {}),
184
- },
181
+ server: options.transport === "stdio"
182
+ ? {
183
+ type: "local",
184
+ command: stdioCommand(options.mcpToolset),
185
+ enabled: true,
186
+ timeout: options.mcpToolTimeoutSeconds * 1_000,
187
+ }
188
+ : {
189
+ type: "remote",
190
+ url: resolveServerUrl(),
191
+ enabled: true,
192
+ timeout: options.mcpToolTimeoutSeconds * 1_000,
193
+ oauth: false,
194
+ ...(options.mcpTokenEnv
195
+ ? {
196
+ headers: {
197
+ Authorization: `Bearer {env:${options.mcpTokenEnv}}`,
198
+ },
199
+ }
200
+ : {}),
201
+ },
185
202
  force: options.force,
186
203
  label: "OpenCode",
187
204
  });
@@ -191,6 +208,7 @@ async function installOpenCodeIntegration(options) {
191
208
  endMarker: ZVEC_GREP_AGENTS_END,
192
209
  block: agentGuidanceBlock({
193
210
  search: "zvec_grep_zvec_grep_search",
211
+ rg: "zvec_grep_zvec_grep_rg",
194
212
  }),
195
213
  force: true,
196
214
  });
@@ -212,16 +230,18 @@ async function installCursorIntegration(options) {
212
230
  await installJsonMcpServer({
213
231
  path: configPath,
214
232
  containerKey: "mcpServers",
215
- server: {
216
- url: resolveServerUrl(),
217
- ...(options.mcpTokenEnv
218
- ? {
219
- headers: {
220
- Authorization: `Bearer \${${options.mcpTokenEnv}}`,
221
- },
222
- }
223
- : {}),
224
- },
233
+ server: options.transport === "stdio"
234
+ ? { command: "zg", args: stdioArgs(options.mcpToolset) }
235
+ : {
236
+ url: resolveServerUrl(),
237
+ ...(options.mcpTokenEnv
238
+ ? {
239
+ headers: {
240
+ Authorization: `Bearer \${${options.mcpTokenEnv}}`,
241
+ },
242
+ }
243
+ : {}),
244
+ },
225
245
  force: options.force,
226
246
  label: "Cursor",
227
247
  });
@@ -248,6 +268,32 @@ async function resolveInstallers(parsed, action) {
248
268
  }
249
269
  return promptInstallers(action, detected);
250
270
  }
271
+ async function resolveInstallTransport(parsed) {
272
+ if (parsed.options.installMcpTransport) {
273
+ return parsed.options.installMcpTransport;
274
+ }
275
+ if (parsed.options.yes === true ||
276
+ !process.stdin.isTTY ||
277
+ !process.stdout.isTTY) {
278
+ return "stdio";
279
+ }
280
+ const readline = createInterface({
281
+ input: process.stdin,
282
+ output: process.stdout,
283
+ });
284
+ try {
285
+ const answer = await readline.question("MCP transport [stdio] (stdio/http): ");
286
+ const value = answer.trim().toLowerCase();
287
+ if (!value || value === "stdio")
288
+ return "stdio";
289
+ if (value === "http")
290
+ return "http";
291
+ throw new Error("MCP transport must be stdio or http");
292
+ }
293
+ finally {
294
+ readline.close();
295
+ }
296
+ }
251
297
  async function promptInstallers(action, detected) {
252
298
  console.log(action === "install"
253
299
  ? "\nChoose agent integrations\n"
@@ -439,12 +485,12 @@ function installStyle(code, value) {
439
485
  ? `\u001b[${code}m${value}\u001b[0m`
440
486
  : value;
441
487
  }
442
- async function ensureInstalledServer() {
488
+ async function ensureInstalledServer(mcpToolset) {
443
489
  if (process.env.ZVEC_GREP_INSTALL_SKIP_SERVER === "1") {
444
490
  return { running: false, ready: false };
445
491
  }
446
492
  const { startServer } = await import("../daemon/server-controller.js");
447
- return startServer({ cliPath: process.argv[1] });
493
+ return startServer({ cliPath: process.argv[1], mcpToolset });
448
494
  }
449
495
  function splitTargetTokens(value) {
450
496
  return value
@@ -518,27 +564,32 @@ async function updateClaudeMcpConfig(options) {
518
564
  const mcpServers = isJsonObject(currentServers) ? currentServers : {};
519
565
  const current = mcpServers.zvec_grep;
520
566
  if (current !== undefined &&
521
- (!isJsonObject(current) || current.url !== resolveServerUrl()) &&
567
+ !isManagedJsonMcpServer(current) &&
522
568
  !options.force) {
523
569
  throw new Error(`Existing Claude Code MCP server "zvec_grep" found in ${options.path}. Re-run with --force to replace it.`);
524
570
  }
525
571
  const existingServer = isJsonObject(current) ? current : {};
526
- const existingHeaders = isJsonObject(existingServer.headers)
527
- ? existingServer.headers
528
- : {};
529
- mcpServers.zvec_grep = {
530
- ...existingServer,
531
- type: "http",
532
- url: resolveServerUrl(),
533
- ...(options.tokenEnv
572
+ const { type: _type, url: _url, command: _command, args: _args, headers: _headers, ...retained } = existingServer;
573
+ mcpServers.zvec_grep =
574
+ options.transport === "stdio"
534
575
  ? {
535
- headers: {
536
- ...existingHeaders,
537
- Authorization: `Bearer \${${options.tokenEnv}}`,
538
- },
576
+ ...retained,
577
+ type: "stdio",
578
+ command: "zg",
579
+ args: stdioArgs(options.mcpToolset),
539
580
  }
540
- : {}),
541
- };
581
+ : {
582
+ ...retained,
583
+ type: "http",
584
+ url: resolveServerUrl(),
585
+ ...(options.tokenEnv
586
+ ? {
587
+ headers: {
588
+ Authorization: `Bearer \${${options.tokenEnv}}`,
589
+ },
590
+ }
591
+ : {}),
592
+ };
542
593
  root.mcpServers = mcpServers;
543
594
  await writeJsonObject(options.path, root);
544
595
  }
@@ -550,7 +601,7 @@ async function removeClaudeMcpConfig(path) {
550
601
  if (!isJsonObject(root.mcpServers))
551
602
  return;
552
603
  const current = root.mcpServers.zvec_grep;
553
- if (!isJsonObject(current) || current.url !== resolveServerUrl())
604
+ if (!isManagedJsonMcpServer(current))
554
605
  return;
555
606
  delete root.mcpServers.zvec_grep;
556
607
  if (Object.keys(root.mcpServers).length === 0) {
@@ -622,7 +673,43 @@ function isJsonObject(value) {
622
673
  return typeof value === "object" && value !== null && !Array.isArray(value);
623
674
  }
624
675
  function isManagedJsonMcpServer(value) {
625
- return isJsonObject(value) && value.url === resolveServerUrl();
676
+ if (!isJsonObject(value))
677
+ return false;
678
+ if (value.url === resolveServerUrl())
679
+ return true;
680
+ if (value.command === "zg" && isStdioArgs(value.args))
681
+ return true;
682
+ return (value.type === "local" &&
683
+ Array.isArray(value.command) &&
684
+ (value.command.length === 3 || value.command.length === 5) &&
685
+ value.command[0] === "zg" &&
686
+ value.command[1] === "server" &&
687
+ value.command[2] === "--stdio" &&
688
+ (value.command.length === 3 ||
689
+ (value.command[3] === "--mcp-toolset" &&
690
+ (value.command[4] === "agent" || value.command[4] === "full"))));
691
+ }
692
+ function isStdioArgs(value) {
693
+ return (Array.isArray(value) &&
694
+ (value.length === 2 || value.length === 4) &&
695
+ value[0] === "server" &&
696
+ value[1] === "--stdio" &&
697
+ (value.length === 2 ||
698
+ (value[2] === "--mcp-toolset" &&
699
+ (value[3] === "agent" || value[3] === "full"))));
700
+ }
701
+ function stdioArgs(mcpToolset) {
702
+ return [
703
+ "server",
704
+ "--stdio",
705
+ ...(mcpToolset ? ["--mcp-toolset", mcpToolset] : []),
706
+ ];
707
+ }
708
+ function stdioCommand(mcpToolset) {
709
+ return ["zg", ...stdioArgs(mcpToolset)];
710
+ }
711
+ function tomlStringArray(values) {
712
+ return `[${values.map((value) => JSON.stringify(value)).join(", ")}]`;
626
713
  }
627
714
  async function writeJsonObject(path, value) {
628
715
  await writeTextFileAtomic(path, `${JSON.stringify(value, null, 2)}\n`);
@@ -813,33 +900,64 @@ function tomlTableName(line) {
813
900
  function isCodexMcpServerTableName(tableName) {
814
901
  return /^(?:mcp_servers|"mcp_servers"|'mcp_servers')\s*\.\s*(?:zvec_grep|"zvec_grep"|'zvec_grep')(?:\s*\.|$)/.test(tableName);
815
902
  }
816
- function codexConfigBlock(mcpToolTimeoutSeconds, tokenEnv) {
903
+ function codexConfigBlock(options) {
817
904
  return `${ZVEC_GREP_CONFIG_START}
818
905
  [mcp_servers.zvec_grep]
819
- url = "${resolveServerUrl()}"
820
- ${tokenEnv
821
- ? `bearer_token_env_var = "${tokenEnv}"
906
+ ${options.transport === "stdio"
907
+ ? `command = "zg"
908
+ args = ${tomlStringArray(stdioArgs(options.mcpToolset))}`
909
+ : `url = "${resolveServerUrl()}"`}
910
+ ${options.mcpTokenEnv
911
+ ? `bearer_token_env_var = "${options.mcpTokenEnv}"
822
912
  `
823
- : ""}tool_timeout_sec = ${mcpToolTimeoutSeconds}
913
+ : ""}tool_timeout_sec = ${options.mcpToolTimeoutSeconds}
824
914
  default_tools_approval_mode = "approve"
825
915
  ${ZVEC_GREP_CONFIG_END}`;
826
916
  }
827
917
  function agentGuidanceBlock(toolNames) {
828
918
  const searchTool = toolNames?.search ?? "zvec_grep_search";
919
+ const rgTool = toolNames?.rg ?? "zvec_grep_rg";
920
+ const exactLookupRoute = `\`${rgTool}\` when it is listed by the current host; otherwise native Grep or \`rg\``;
829
921
  return `${ZVEC_GREP_AGENTS_START}
830
922
  ## zvec-grep
831
923
 
832
- Choose the initial search tool by the scope of the requested answer, not merely by whether the question contains an identifier.
924
+ Choose the evidence source before the retrieval mode.
925
+
926
+ ${formatPromptRules("### Workspace evidence", ZVEC_GREP_WORKSPACE_EVIDENCE_RULES)}
833
927
 
834
- Use native Grep or rg first when the answer can be obtained by locating a specific definition, reference, filename, configuration key, error message, literal, source fragment, or regex.
928
+ ${formatPromptRules("### Retrieval routing", [
929
+ `When an exact word, phrase, name, date, identifier, filename, path, configuration key, error message, source fragment, literal, or regex is known and locating its occurrences is sufficient, use ${exactLookupRoute}.`,
930
+ `Use \`${searchTool}\` when wording or location is unknown, or when the answer requires semantic, conceptual, fuzzy, or paraphrase discovery; relationships, chronology, causality, architecture, or data or control flow; or comparison or synthesis across files, sections, or documents.`,
931
+ `For a mixed task with exact anchors that still requires relationships or cross-file synthesis, call \`${searchTool}\` with the concept and anchors, then use ${exactLookupRoute} for focused follow-up.`,
932
+ `When no sufficient exact anchor is available and the user asks whether conceptually related material exists locally, make at most one focused \`${searchTool}\` probe using the question plus distinctive names, dates, or terms. This probe does not apply to exact quotations, configuration keys, filenames, regexes, or exhaustive occurrence requests. Continue only when results are relevant; otherwise stop and report that the indexed workspace did not establish the answer.`,
933
+ "Before broad file reads or delegating workspace discovery, use the appropriate search route. Do not delegate solely to locate material, and stop when the evidence is sufficient.",
934
+ ])}
835
935
 
836
- Use \`${searchTool}\` first when the answer requires architecture, lifecycle, system design, conceptual discovery, data or control flow, comparison across implementations, design rationale, or performance analysis.
936
+ ${formatPromptRules("### Search arguments and evidence", [
937
+ "`query` creates one primary hybrid result group; `queries` creates one or more primary hybrid result groups.",
938
+ "`fts` and `vector` add supplemental lexical and semantic routes. `fts` is a retrieval route, not a hard filter or constraint.",
939
+ "Without `fuse`, search groups are evaluated separately and returned as one deduplicated, reranked list with query-group metadata. Set `fuse: true` to collapse the supplied primary and supplemental intents into one search plan.",
940
+ "Search results include bounded source snippets. Treat a sufficient snippet as already-read evidence, and read a cited file only when a required detail falls outside the snippet.",
941
+ ])}
837
942
 
838
- When exact symbols are present but the answer spans multiple components, files, stages, or implementations, treat it as a mixed task: use \`${searchTool}\` with the concept and known symbols, then use native Grep or rg for focused follow-up.
943
+ Example mixed search:
839
944
 
840
- Before using broad file reads or a sub-agent for conceptual repository discovery, make at least one appropriate \`${searchTool}\` call.
945
+ \`\`\`json
946
+ {
947
+ "root": "/absolute/workspace",
948
+ "query": "how are search results ranked and fused",
949
+ "fts": ["RRF", "score"],
950
+ "fuse": true
951
+ }
952
+ \`\`\`
841
953
 
842
- Do not launch a sub-agent solely to locate code. Stop discovery when the evidence covers all components requested by the question.
954
+ ${formatPromptRules("### Freshness and index lifecycle", [
955
+ "Pass a daemon-visible absolute `root` on every zvec-grep workspace call.",
956
+ "Read `freshness` and `background_refresh` from search results without a status preflight.",
957
+ "When results are `served_from_current_index`, use them when sufficient instead of waiting for the background refresh.",
958
+ `If the index is missing but exact or regex lookup can answer the task, use ${exactLookupRoute}.`,
959
+ "Creating, rebuilding, or dropping a persistent index requires an explicit user request or authorization; never do so silently.",
960
+ ])}
843
961
  ${ZVEC_GREP_AGENTS_END}`;
844
962
  }
845
963
  //# sourceMappingURL=install.js.map