@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.
- package/README.md +128 -49
- package/README_CN.md +116 -43
- package/dist/cli/args.js +40 -7
- package/dist/cli/args.js.map +1 -1
- package/dist/cli/auth.js +1 -4
- package/dist/cli/auth.js.map +1 -1
- package/dist/cli/commands.js +53 -24
- package/dist/cli/commands.js.map +1 -1
- package/dist/cli/format/context.d.ts +3 -0
- package/dist/cli/format/context.js +93 -22
- package/dist/cli/format/context.js.map +1 -1
- package/dist/cli/format/debug.js +10 -4
- package/dist/cli/format/debug.js.map +1 -1
- package/dist/cli/format/status.d.ts +3 -1
- package/dist/cli/format/status.js +34 -0
- package/dist/cli/format/status.js.map +1 -1
- package/dist/cli/help.js +149 -16
- package/dist/cli/help.js.map +1 -1
- package/dist/cli/index.d.ts +1 -1
- package/dist/cli/index.js +1 -1
- package/dist/cli/install.js +174 -56
- package/dist/cli/install.js.map +1 -1
- package/dist/cli/server-search.d.ts +3 -0
- package/dist/cli/server-search.js +12 -0
- package/dist/cli/server-search.js.map +1 -0
- package/dist/cli/types.d.ts +3 -0
- package/dist/cli/types.js.map +1 -1
- package/dist/client/daemon-client.d.ts +12 -0
- package/dist/client/daemon-client.js +23 -0
- package/dist/client/daemon-client.js.map +1 -1
- package/dist/daemon/backend.d.ts +1 -0
- package/dist/daemon/backend.js +56 -18
- package/dist/daemon/backend.js.map +1 -1
- package/dist/daemon/http-server.js +1 -0
- package/dist/daemon/http-server.js.map +1 -1
- package/dist/daemon/index-coordinator.d.ts +2 -1
- package/dist/daemon/index-coordinator.js.map +1 -1
- package/dist/daemon/runtime-manager.d.ts +1 -0
- package/dist/daemon/runtime-manager.js +4 -1
- package/dist/daemon/runtime-manager.js.map +1 -1
- package/dist/daemon/server-controller.js +55 -4
- package/dist/daemon/server-controller.js.map +1 -1
- package/dist/engine/code-formats.d.ts +3 -0
- package/dist/engine/code-formats.js +14 -0
- package/dist/engine/code-formats.js.map +1 -0
- package/dist/engine/extraction/code/adapter.js +1 -1
- package/dist/engine/extraction/code/adapter.js.map +1 -1
- package/dist/engine/extraction/code/extractor.js +12 -5
- package/dist/engine/extraction/code/extractor.js.map +1 -1
- package/dist/engine/extraction/index.d.ts +1 -0
- package/dist/engine/extraction/index.js +1 -0
- package/dist/engine/extraction/index.js.map +1 -1
- package/dist/engine/extraction/markdown/extractor.js +5 -3
- package/dist/engine/extraction/markdown/extractor.js.map +1 -1
- package/dist/engine/extraction/vector-content.d.ts +5 -0
- package/dist/engine/extraction/vector-content.js +95 -0
- package/dist/engine/extraction/vector-content.js.map +1 -0
- package/dist/engine/file-size-policy.d.ts +6 -0
- package/dist/engine/file-size-policy.js +20 -0
- package/dist/engine/file-size-policy.js.map +1 -0
- package/dist/engine/file-type.d.ts +10 -0
- package/dist/engine/file-type.js +71 -38
- package/dist/engine/file-type.js.map +1 -1
- package/dist/engine/manifest.d.ts +1 -0
- package/dist/engine/manifest.js +4 -0
- package/dist/engine/manifest.js.map +1 -1
- package/dist/engine/models/backends/model2vec-runtime.d.ts +63 -0
- package/dist/engine/models/backends/model2vec-runtime.js +112 -0
- package/dist/engine/models/backends/model2vec-runtime.js.map +1 -0
- package/dist/engine/models/backends/model2vec-tokenizer.d.ts +2 -0
- package/dist/engine/models/backends/model2vec-tokenizer.js +42 -0
- package/dist/engine/models/backends/model2vec-tokenizer.js.map +1 -0
- package/dist/engine/models/backends/model2vec-worker-pool.d.ts +25 -0
- package/dist/engine/models/backends/model2vec-worker-pool.js +264 -0
- package/dist/engine/models/backends/model2vec-worker-pool.js.map +1 -0
- package/dist/engine/models/backends/model2vec-worker.d.ts +1 -0
- package/dist/engine/models/backends/model2vec-worker.js +41 -0
- package/dist/engine/models/backends/model2vec-worker.js.map +1 -0
- package/dist/engine/models/backends/model2vec.d.ts +3 -20
- package/dist/engine/models/backends/model2vec.js +107 -128
- package/dist/engine/models/backends/model2vec.js.map +1 -1
- package/dist/engine/models/catalog.d.ts +26 -7
- package/dist/engine/models/catalog.js +26 -7
- package/dist/engine/models/catalog.js.map +1 -1
- package/dist/engine/models/embeddings.d.ts +1 -0
- package/dist/engine/models/embeddings.js.map +1 -1
- package/dist/engine/models/resolution.js +1 -1
- package/dist/engine/models/resolution.js.map +1 -1
- package/dist/engine/pipeline/indexing/index.js +83 -78
- package/dist/engine/pipeline/indexing/index.js.map +1 -1
- package/dist/engine/pipeline/indexing/input-budget.d.ts +2 -0
- package/dist/engine/pipeline/indexing/input-budget.js +51 -0
- package/dist/engine/pipeline/indexing/input-budget.js.map +1 -0
- package/dist/engine/pipeline/indexing/scanner/index.d.ts +3 -1
- package/dist/engine/pipeline/indexing/scanner/index.js +70 -18
- package/dist/engine/pipeline/indexing/scanner/index.js.map +1 -1
- package/dist/engine/pipeline/search/index.js.map +1 -1
- package/dist/engine/service/index.d.ts +1 -1
- package/dist/engine/service/root.d.ts +1 -4
- package/dist/engine/service/root.js +15 -22
- package/dist/engine/service/root.js.map +1 -1
- package/dist/engine/service/structure-enrichment.d.ts +1 -1
- package/dist/engine/service/structure-enrichment.js +10 -10
- package/dist/engine/service/structure-enrichment.js.map +1 -1
- package/dist/engine/service/types.d.ts +8 -1
- package/dist/engine/service/workspace-index.d.ts +6 -4
- package/dist/engine/service/workspace-index.js +18 -12
- package/dist/engine/service/workspace-index.js.map +1 -1
- package/dist/engine/service/zvec-grep.js +47 -29
- package/dist/engine/service/zvec-grep.js.map +1 -1
- package/dist/engine/storage/index.d.ts +27 -21
- package/dist/engine/storage/index.js +2 -1
- package/dist/engine/storage/index.js.map +1 -1
- package/dist/engine/storage/layout.d.ts +10 -0
- package/dist/engine/storage/layout.js +29 -0
- package/dist/engine/storage/layout.js.map +1 -0
- package/dist/engine/storage/zvec.d.ts +2 -42
- package/dist/engine/storage/zvec.js +40 -67
- package/dist/engine/storage/zvec.js.map +1 -1
- package/dist/engine/types.d.ts +14 -0
- package/dist/engine/types.js.map +1 -1
- package/dist/index.d.ts +2 -2
- package/dist/index.js.map +1 -1
- package/dist/mcp/input-normalization.d.ts +2 -2
- package/dist/mcp/input-normalization.js +14 -5
- package/dist/mcp/input-normalization.js.map +1 -1
- package/dist/mcp/schemas.d.ts +242 -0
- package/dist/mcp/schemas.js +73 -14
- package/dist/mcp/schemas.js.map +1 -1
- package/dist/mcp/stdio-bridge.d.ts +9 -0
- package/dist/mcp/stdio-bridge.js +131 -0
- package/dist/mcp/stdio-bridge.js.map +1 -0
- package/dist/mcp/tools.d.ts +4 -1
- package/dist/mcp/tools.js +78 -44
- package/dist/mcp/tools.js.map +1 -1
- package/dist/prompts/zvec-grep-guidance.d.ts +2 -0
- package/dist/prompts/zvec-grep-guidance.js +9 -0
- package/dist/prompts/zvec-grep-guidance.js.map +1 -0
- package/docs/01-agents.md +26 -5
- package/docs/02-cli.md +11 -1
- package/docs/03-mcp.md +29 -11
- package/docs/04-pipeline.md +10 -2
- package/docs/06-server.md +5 -0
- package/docs/07-embedding.md +6 -3
- package/package.json +4 -4
- package/skills/zvec-grep/SKILL.md +0 -61
- package/skills/zvec-grep/agents/openai.yaml +0 -4
- 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/
|
|
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/
|
|
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
|
|
98
|
-
--preview <none|short|full> Indexed
|
|
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 (
|
|
102
|
-
|
|
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/
|
|
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
|
|
276
|
-
|
|
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",
|
package/dist/cli/help.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"help.js","sourceRoot":"","sources":["../../src/cli/help.ts"],"names":[],"mappings":"AAAA,MAAM,UAAU,SAAS,CAAC,OAAe,EAAE,KAAc;IACvD,IAAI,CAAC,KAAK,EAAE,CAAC;QACX,OAAO,CAAC,GAAG,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,CAAC;QAC/B,OAAO;IACT,CAAC;IAED,MAAM,IAAI,GAAG,WAAW,CAAC,KAAK,CAAC,CAAC;IAChC,IAAI,CAAC,IAAI,EAAE,CAAC;QACV,MAAM,IAAI,KAAK,CAAC,uBAAuB,KAAK,EAAE,CAAC,CAAC;IAClD,CAAC;IACD,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;AACpB,CAAC;AAED,MAAM,qBAAqB,GAAG;IAC5B,cAAc,EACZ,oFAAoF;IACtF,cAAc,EAAE,8CAA8C;IAC9D,oBAAoB,EAAE,oCAAoC;IAC1D,sBAAsB,EAAE,4BAA4B;IACpD,2BAA2B,EAAE,gDAAgD;IAC7E,qBAAqB,EAAE,mCAAmC;IAC1D,mBAAmB,EAAE,8CAA8C;IACnE,iBAAiB,EAAE,wCAAwC;IAC3D,kBAAkB,EAAE,oCAAoC;IACxD,qBAAqB,EAAE,uCAAuC;IAC9D,gBAAgB,EAAE,2DAA2D;IAC7E,iBAAiB,EAAE,kDAAkD;IACrE,YAAY,EAAE,kDAAkD;IAChE,gCAAgC,EAC9B,6CAA6C;IAC/C,
|
|
1
|
+
{"version":3,"file":"help.js","sourceRoot":"","sources":["../../src/cli/help.ts"],"names":[],"mappings":"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"}
|
package/dist/cli/index.d.ts
CHANGED
|
@@ -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
package/dist/cli/install.js
CHANGED
|
@@ -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
|
|
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
|
-
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
|
|
177
|
-
|
|
178
|
-
|
|
179
|
-
|
|
180
|
-
|
|
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
|
-
|
|
217
|
-
|
|
218
|
-
|
|
219
|
-
|
|
220
|
-
|
|
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
|
-
|
|
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
|
|
527
|
-
|
|
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
|
-
|
|
536
|
-
|
|
537
|
-
|
|
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 (!
|
|
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
|
-
|
|
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(
|
|
903
|
+
function codexConfigBlock(options) {
|
|
817
904
|
return `${ZVEC_GREP_CONFIG_START}
|
|
818
905
|
[mcp_servers.zvec_grep]
|
|
819
|
-
|
|
820
|
-
|
|
821
|
-
|
|
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
|
|
924
|
+
Choose the evidence source before the retrieval mode.
|
|
925
|
+
|
|
926
|
+
${formatPromptRules("### Workspace evidence", ZVEC_GREP_WORKSPACE_EVIDENCE_RULES)}
|
|
833
927
|
|
|
834
|
-
|
|
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
|
-
|
|
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
|
-
|
|
943
|
+
Example mixed search:
|
|
839
944
|
|
|
840
|
-
|
|
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
|
-
|
|
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
|