@zvec/zvec-grep 0.1.4 → 0.1.6
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 +86 -162
- package/README_CN.md +80 -162
- package/dist/authorization/index.d.ts +7 -0
- package/dist/authorization/index.js +7 -0
- package/dist/authorization/index.js.map +1 -0
- package/dist/authorization/manager.d.ts +8 -0
- package/dist/authorization/manager.js +19 -0
- package/dist/authorization/manager.js.map +1 -0
- package/dist/authorization/operation.d.ts +7 -0
- package/dist/authorization/operation.js +50 -0
- package/dist/authorization/operation.js.map +1 -0
- package/dist/authorization/planner.d.ts +21 -0
- package/dist/authorization/planner.js +97 -0
- package/dist/authorization/planner.js.map +1 -0
- package/dist/authorization/prompt.d.ts +11 -0
- package/dist/authorization/prompt.js +62 -0
- package/dist/authorization/prompt.js.map +1 -0
- package/dist/authorization/store.d.ts +20 -0
- package/dist/authorization/store.js +251 -0
- package/dist/authorization/store.js.map +1 -0
- package/dist/authorization/target.d.ts +15 -0
- package/dist/authorization/target.js +49 -0
- package/dist/authorization/target.js.map +1 -0
- package/dist/authorization/types.d.ts +61 -0
- package/dist/authorization/types.js +2 -0
- package/dist/authorization/types.js.map +1 -0
- package/dist/cli/args.d.ts +3 -0
- package/dist/cli/args.js +749 -201
- package/dist/cli/args.js.map +1 -1
- package/dist/cli/auth.d.ts +21 -0
- package/dist/cli/auth.js +212 -0
- package/dist/cli/auth.js.map +1 -0
- package/dist/cli/commands.d.ts +3 -1
- package/dist/cli/commands.js +529 -180
- package/dist/cli/commands.js.map +1 -1
- package/dist/cli/errors.js +7 -6
- package/dist/cli/errors.js.map +1 -1
- package/dist/cli/format/context.d.ts +1 -0
- package/dist/cli/format/context.js +270 -70
- package/dist/cli/format/context.js.map +1 -1
- package/dist/cli/format/debug.js +14 -16
- package/dist/cli/format/debug.js.map +1 -1
- package/dist/cli/format/highlight.js.map +1 -1
- package/dist/cli/format/progress.d.ts +4 -0
- package/dist/cli/format/progress.js +222 -44
- package/dist/cli/format/progress.js.map +1 -1
- package/dist/cli/format/range.js.map +1 -1
- package/dist/cli/format/status.d.ts +77 -6
- package/dist/cli/format/status.js +343 -114
- package/dist/cli/format/status.js.map +1 -1
- package/dist/cli/help.d.ts +1 -1
- package/dist/cli/help.js +368 -84
- package/dist/cli/help.js.map +1 -1
- package/dist/cli/index.js +4 -4
- package/dist/cli/index.js.map +1 -1
- package/dist/cli/install.d.ts +4 -0
- package/dist/cli/install.js +845 -0
- package/dist/cli/install.js.map +1 -0
- package/dist/cli/managed-rg.d.ts +10 -0
- package/dist/cli/managed-rg.js +329 -0
- package/dist/cli/managed-rg.js.map +1 -0
- package/dist/cli/types.d.ts +40 -13
- package/dist/cli/types.js.map +1 -1
- package/dist/cli/version.js +3 -1
- package/dist/cli/version.js.map +1 -1
- package/dist/client/daemon-client.d.ts +19 -0
- package/dist/client/daemon-client.js +180 -0
- package/dist/client/daemon-client.js.map +1 -0
- package/dist/client/mode-router.d.ts +9 -0
- package/dist/client/mode-router.js +28 -0
- package/dist/client/mode-router.js.map +1 -0
- package/dist/client/search-policy.d.ts +11 -0
- package/dist/client/search-policy.js +15 -0
- package/dist/client/search-policy.js.map +1 -0
- package/dist/daemon/backend.d.ts +76 -0
- package/dist/daemon/backend.js +1049 -0
- package/dist/daemon/backend.js.map +1 -0
- package/dist/daemon/change-set.d.ts +25 -0
- package/dist/daemon/change-set.js +101 -0
- package/dist/daemon/change-set.js.map +1 -0
- package/dist/daemon/config.d.ts +24 -0
- package/dist/daemon/config.js +88 -0
- package/dist/daemon/config.js.map +1 -0
- package/dist/daemon/errors.d.ts +5 -0
- package/dist/daemon/errors.js +11 -0
- package/dist/daemon/errors.js.map +1 -0
- package/dist/daemon/http-server.d.ts +30 -0
- package/dist/daemon/http-server.js +287 -0
- package/dist/daemon/http-server.js.map +1 -0
- package/dist/daemon/index-coordinator.d.ts +23 -0
- package/dist/daemon/index-coordinator.js +68 -0
- package/dist/daemon/index-coordinator.js.map +1 -0
- package/dist/daemon/job-scheduler.d.ts +70 -0
- package/dist/daemon/job-scheduler.js +366 -0
- package/dist/daemon/job-scheduler.js.map +1 -0
- package/dist/daemon/logger.d.ts +9 -0
- package/dist/daemon/logger.js +53 -0
- package/dist/daemon/logger.js.map +1 -0
- package/dist/daemon/model-pool.d.ts +45 -0
- package/dist/daemon/model-pool.js +187 -0
- package/dist/daemon/model-pool.js.map +1 -0
- package/dist/daemon/root-lease.d.ts +14 -0
- package/dist/daemon/root-lease.js +188 -0
- package/dist/daemon/root-lease.js.map +1 -0
- package/dist/daemon/root-runtime.d.ts +78 -0
- package/dist/daemon/root-runtime.js +333 -0
- package/dist/daemon/root-runtime.js.map +1 -0
- package/dist/daemon/runtime-manager.d.ts +45 -0
- package/dist/daemon/runtime-manager.js +243 -0
- package/dist/daemon/runtime-manager.js.map +1 -0
- package/dist/daemon/runtime.d.ts +12 -0
- package/dist/daemon/runtime.js +102 -0
- package/dist/daemon/runtime.js.map +1 -0
- package/dist/daemon/server-controller.d.ts +39 -0
- package/dist/daemon/server-controller.js +203 -0
- package/dist/daemon/server-controller.js.map +1 -0
- package/dist/daemon/watch-manager.d.ts +50 -0
- package/dist/daemon/watch-manager.js +293 -0
- package/dist/daemon/watch-manager.js.map +1 -0
- package/dist/daemon/workspace-read-session-cache.d.ts +31 -0
- package/dist/daemon/workspace-read-session-cache.js +115 -0
- package/dist/daemon/workspace-read-session-cache.js.map +1 -0
- package/dist/engine/config.d.ts +50 -0
- package/dist/engine/config.js +321 -0
- package/dist/engine/config.js.map +1 -0
- package/dist/engine/{errors/index.d.ts → errors.d.ts} +6 -1
- package/dist/engine/{errors/details.js → errors.js} +17 -4
- package/dist/engine/errors.js.map +1 -0
- package/dist/engine/extraction/code/adapter.d.ts +1 -1
- package/dist/engine/extraction/code/adapter.js.map +1 -1
- package/dist/engine/extraction/code/extractor.d.ts +5 -11
- package/dist/engine/extraction/code/extractor.js +184 -109
- package/dist/engine/extraction/code/extractor.js.map +1 -1
- package/dist/engine/extraction/code/families/c-family.js +13 -7
- package/dist/engine/extraction/code/families/c-family.js.map +1 -1
- package/dist/engine/extraction/code/families/js-ts.d.ts +1 -1
- package/dist/engine/extraction/code/families/js-ts.js +24 -18
- package/dist/engine/extraction/code/families/js-ts.js.map +1 -1
- package/dist/engine/extraction/code/families/metadata.d.ts +1 -1
- package/dist/engine/extraction/code/families/metadata.js +11 -8
- package/dist/engine/extraction/code/families/metadata.js.map +1 -1
- package/dist/engine/extraction/code/families/name-field.js +5 -5
- package/dist/engine/extraction/code/families/name-field.js.map +1 -1
- package/dist/engine/extraction/code/languages/c.js +1 -4
- package/dist/engine/extraction/code/languages/c.js.map +1 -1
- package/dist/engine/extraction/code/languages/cpp.js.map +1 -1
- package/dist/engine/extraction/code/languages/go.js +1 -3
- package/dist/engine/extraction/code/languages/go.js.map +1 -1
- package/dist/engine/extraction/code/languages/java.js.map +1 -1
- package/dist/engine/extraction/code/languages/javascript.js +1 -3
- package/dist/engine/extraction/code/languages/javascript.js.map +1 -1
- package/dist/engine/extraction/code/languages/python.js +5 -6
- package/dist/engine/extraction/code/languages/python.js.map +1 -1
- package/dist/engine/extraction/code/languages/rust.js +1 -5
- package/dist/engine/extraction/code/languages/rust.js.map +1 -1
- package/dist/engine/extraction/code/languages/typescript.js.map +1 -1
- package/dist/engine/extraction/code/tree-sitter/grammar.js.map +1 -0
- package/dist/engine/extraction/{tree-sitter → code/tree-sitter}/nodes.js +2 -1
- package/dist/engine/extraction/code/tree-sitter/nodes.js.map +1 -0
- package/dist/engine/extraction/code/tree-sitter/parser.js.map +1 -0
- package/dist/engine/extraction/ids.js.map +1 -1
- package/dist/engine/extraction/image/extractor.d.ts +5 -0
- package/dist/engine/extraction/image/extractor.js +35 -0
- package/dist/engine/extraction/image/extractor.js.map +1 -0
- package/dist/engine/extraction/index.d.ts +3 -44
- package/dist/engine/extraction/index.js +1 -280
- package/dist/engine/extraction/index.js.map +1 -1
- package/dist/engine/extraction/markdown/extractor.d.ts +5 -11
- package/dist/engine/extraction/markdown/extractor.js +37 -16
- package/dist/engine/extraction/markdown/extractor.js.map +1 -1
- package/dist/engine/extraction/runtime.d.ts +4 -0
- package/dist/engine/extraction/runtime.js +26 -0
- package/dist/engine/extraction/runtime.js.map +1 -0
- package/dist/engine/extraction/source.d.ts +18 -0
- package/dist/engine/extraction/source.js +22 -0
- package/dist/engine/extraction/source.js.map +1 -0
- package/dist/engine/extraction/text/extractor.d.ts +7 -0
- package/dist/engine/extraction/text/extractor.js +168 -0
- package/dist/engine/extraction/text/extractor.js.map +1 -0
- package/dist/engine/extraction/types.d.ts +4 -0
- package/dist/engine/{models → extraction}/types.js.map +1 -1
- package/dist/engine/{files/file-type.d.ts → file-type.d.ts} +1 -1
- package/dist/engine/file-type.js.map +1 -0
- package/dist/engine/index-status.d.ts +9 -0
- package/dist/engine/index-status.js +38 -0
- package/dist/engine/index-status.js.map +1 -0
- package/dist/engine/manifest.d.ts +12 -0
- package/dist/engine/manifest.js +120 -0
- package/dist/engine/manifest.js.map +1 -0
- package/dist/engine/models/{providers/llama-cpp/embedding.d.ts → backends/llama-cpp.d.ts} +25 -20
- package/dist/engine/models/{providers/llama-cpp/embedding.js → backends/llama-cpp.js} +165 -113
- package/dist/engine/models/backends/llama-cpp.js.map +1 -0
- package/dist/engine/models/backends/model2vec.d.ts +57 -0
- package/dist/engine/models/backends/model2vec.js +332 -0
- package/dist/engine/models/backends/model2vec.js.map +1 -0
- package/dist/engine/models/backends/qwen.d.ts +44 -0
- package/dist/engine/models/{providers/qwen/embedding.js → backends/qwen.js} +168 -102
- package/dist/engine/models/backends/qwen.js.map +1 -0
- package/dist/engine/models/backends/transformers-js.d.ts +87 -0
- package/dist/engine/models/backends/transformers-js.js +316 -0
- package/dist/engine/models/backends/transformers-js.js.map +1 -0
- package/dist/engine/models/catalog.d.ts +188 -23
- package/dist/engine/models/catalog.js +172 -41
- package/dist/engine/models/catalog.js.map +1 -1
- package/dist/engine/models/download-progress.d.ts +15 -0
- package/dist/engine/models/download-progress.js +48 -0
- package/dist/engine/models/download-progress.js.map +1 -0
- package/dist/engine/models/embeddings.d.ts +58 -18
- package/dist/engine/models/embeddings.js +53 -29
- package/dist/engine/models/embeddings.js.map +1 -1
- package/dist/engine/models/factory.d.ts +2 -5
- package/dist/engine/models/factory.js +41 -56
- package/dist/engine/models/factory.js.map +1 -1
- package/dist/engine/models/index.d.ts +4 -6
- package/dist/engine/models/index.js +4 -4
- package/dist/engine/models/index.js.map +1 -1
- package/dist/engine/models/ranking.d.ts +7 -3
- package/dist/engine/models/resolution.d.ts +8 -0
- package/dist/engine/models/resolution.js +22 -0
- package/dist/engine/models/resolution.js.map +1 -0
- package/dist/engine/pipeline/indexing/index.d.ts +9 -7
- package/dist/engine/pipeline/indexing/index.js +399 -147
- package/dist/engine/pipeline/indexing/index.js.map +1 -1
- package/dist/engine/pipeline/indexing/root-paths.js +16 -19
- package/dist/engine/pipeline/indexing/root-paths.js.map +1 -1
- package/dist/engine/pipeline/indexing/scanner/index.d.ts +6 -1
- package/dist/engine/pipeline/indexing/scanner/index.js +318 -66
- package/dist/engine/pipeline/indexing/scanner/index.js.map +1 -1
- package/dist/engine/pipeline/search/index.d.ts +6 -6
- package/dist/engine/pipeline/search/index.js +76 -34
- package/dist/engine/pipeline/search/index.js.map +1 -1
- package/dist/engine/service/index.d.ts +3 -2
- package/dist/engine/service/index.js +1 -1
- package/dist/engine/service/index.js.map +1 -1
- package/dist/engine/service/lexical.d.ts +14 -15
- package/dist/engine/service/lexical.js +78 -119
- package/dist/engine/service/lexical.js.map +1 -1
- package/dist/engine/service/root.d.ts +13 -12
- package/dist/engine/service/root.js +35 -24
- package/dist/engine/service/root.js.map +1 -1
- package/dist/engine/service/structure-enrichment.js +29 -25
- package/dist/engine/service/structure-enrichment.js.map +1 -1
- package/dist/engine/service/types.d.ts +61 -35
- package/dist/engine/service/workspace-index.d.ts +24 -0
- package/dist/engine/service/workspace-index.js +151 -0
- package/dist/engine/service/workspace-index.js.map +1 -0
- package/dist/engine/service/zvec-grep.d.ts +12 -1
- package/dist/engine/service/zvec-grep.js +878 -544
- package/dist/engine/service/zvec-grep.js.map +1 -1
- package/dist/engine/storage/index.d.ts +8 -4
- package/dist/engine/storage/index.js +1 -1
- package/dist/engine/storage/index.js.map +1 -1
- package/dist/engine/storage/zvec.d.ts +10 -33
- package/dist/engine/storage/zvec.js +110 -49
- package/dist/engine/storage/zvec.js.map +1 -1
- package/dist/engine/types.d.ts +29 -23
- package/dist/engine/types.js +1 -1
- package/dist/engine/types.js.map +1 -1
- package/dist/engine/utils/daemon-lease.d.ts +17 -0
- package/dist/engine/utils/daemon-lease.js +175 -0
- package/dist/engine/utils/daemon-lease.js.map +1 -0
- package/dist/engine/utils/file-selection.d.ts +10 -0
- package/dist/engine/utils/file-selection.js +157 -0
- package/dist/engine/utils/file-selection.js.map +1 -0
- package/dist/engine/utils/glob.d.ts +3 -0
- package/dist/engine/utils/glob.js +116 -18
- package/dist/engine/utils/glob.js.map +1 -1
- package/dist/engine/utils/hash.js.map +1 -1
- package/dist/engine/utils/json.d.ts +6 -2
- package/dist/engine/utils/json.js +50 -12
- package/dist/engine/utils/json.js.map +1 -1
- package/dist/engine/utils/lock.js +7 -7
- package/dist/engine/utils/lock.js.map +1 -1
- package/dist/engine/utils/path.js +2 -2
- package/dist/engine/utils/path.js.map +1 -1
- package/dist/engine/utils/timing.js.map +1 -1
- package/dist/index-progress.d.ts +10 -0
- package/dist/index-progress.js +159 -0
- package/dist/index-progress.js.map +1 -0
- package/dist/index.d.ts +6 -6
- package/dist/index.js +3 -3
- package/dist/index.js.map +1 -1
- package/dist/mcp/http-transport.d.ts +27 -0
- package/dist/mcp/http-transport.js +182 -0
- package/dist/mcp/http-transport.js.map +1 -0
- package/dist/mcp/input-normalization.d.ts +38 -0
- package/dist/mcp/input-normalization.js +95 -0
- package/dist/mcp/input-normalization.js.map +1 -0
- package/dist/mcp/progress-heartbeat.d.ts +17 -0
- package/dist/mcp/progress-heartbeat.js +46 -0
- package/dist/mcp/progress-heartbeat.js.map +1 -0
- package/dist/mcp/request-metadata.d.ts +2 -0
- package/dist/mcp/request-metadata.js +11 -0
- package/dist/mcp/request-metadata.js.map +1 -0
- package/dist/mcp/request-state.d.ts +40 -0
- package/dist/mcp/request-state.js +210 -0
- package/dist/mcp/request-state.js.map +1 -0
- package/dist/mcp/result-format.d.ts +13 -0
- package/dist/mcp/result-format.js +75 -0
- package/dist/mcp/result-format.js.map +1 -0
- package/dist/mcp/schemas.d.ts +430 -0
- package/dist/mcp/schemas.js +447 -0
- package/dist/mcp/schemas.js.map +1 -0
- package/dist/mcp/tools.d.ts +150 -0
- package/dist/mcp/tools.js +448 -0
- package/dist/mcp/tools.js.map +1 -0
- package/dist/mcp/toolset.d.ts +5 -0
- package/dist/mcp/toolset.js +12 -0
- package/dist/mcp/toolset.js.map +1 -0
- package/dist/observability/trace-context.d.ts +11 -0
- package/dist/observability/trace-context.js +138 -0
- package/dist/observability/trace-context.js.map +1 -0
- package/docs/01-agents.md +111 -0
- package/docs/02-cli.md +229 -0
- package/docs/03-mcp.md +167 -0
- package/docs/04-pipeline.md +218 -0
- package/docs/05-architecture.md +86 -0
- package/docs/06-server.md +210 -0
- package/docs/07-embedding.md +179 -0
- package/docs/08-roadmap.md +85 -0
- package/docs/README.md +53 -0
- package/package.json +43 -7
- package/skills/zvec-grep/SKILL.md +43 -123
- package/skills/zvec-grep/agents/openai.yaml +2 -2
- package/skills/zvec-grep/references/cli-fallback.md +85 -0
- package/dist/engine/collection/index.d.ts +0 -55
- package/dist/engine/collection/index.js +0 -710
- package/dist/engine/collection/index.js.map +0 -1
- package/dist/engine/errors/details.d.ts +0 -6
- package/dist/engine/errors/details.js.map +0 -1
- package/dist/engine/errors/index.js +0 -16
- package/dist/engine/errors/index.js.map +0 -1
- package/dist/engine/extraction/tree-sitter/grammar.js.map +0 -1
- package/dist/engine/extraction/tree-sitter/nodes.js.map +0 -1
- package/dist/engine/extraction/tree-sitter/parser.js.map +0 -1
- package/dist/engine/files/file-type.js.map +0 -1
- package/dist/engine/models/providers/index.d.ts +0 -2
- package/dist/engine/models/providers/index.js +0 -3
- package/dist/engine/models/providers/index.js.map +0 -1
- package/dist/engine/models/providers/llama-cpp/embedding.js.map +0 -1
- package/dist/engine/models/providers/llama-cpp/index.d.ts +0 -1
- package/dist/engine/models/providers/llama-cpp/index.js +0 -2
- package/dist/engine/models/providers/llama-cpp/index.js.map +0 -1
- package/dist/engine/models/providers/qwen/embedding.d.ts +0 -42
- package/dist/engine/models/providers/qwen/embedding.js.map +0 -1
- package/dist/engine/models/providers/qwen/index.d.ts +0 -1
- package/dist/engine/models/providers/qwen/index.js +0 -2
- package/dist/engine/models/providers/qwen/index.js.map +0 -1
- package/dist/engine/models/types.d.ts +0 -30
- /package/dist/engine/extraction/{tree-sitter → code/tree-sitter}/grammar.d.ts +0 -0
- /package/dist/engine/extraction/{tree-sitter → code/tree-sitter}/grammar.js +0 -0
- /package/dist/engine/extraction/{tree-sitter → code/tree-sitter}/nodes.d.ts +0 -0
- /package/dist/engine/extraction/{tree-sitter → code/tree-sitter}/parser.d.ts +0 -0
- /package/dist/engine/extraction/{tree-sitter → code/tree-sitter}/parser.js +0 -0
- /package/dist/engine/{models → extraction}/types.js +0 -0
- /package/dist/engine/{files/file-type.js → file-type.js} +0 -0
|
@@ -0,0 +1,448 @@
|
|
|
1
|
+
import { randomBytes } from "node:crypto";
|
|
2
|
+
import { acceptedContent, inputRequired, inputResponse, McpServer, ProtocolError, } from "@modelcontextprotocol/server";
|
|
3
|
+
import { z } from "zod";
|
|
4
|
+
import { formatAgentContextResult } from "../cli/format/context.js";
|
|
5
|
+
import { formatRemoteEmbeddingAuthorizationPrompt, remoteEmbeddingDisclosureData, } from "../authorization/prompt.js";
|
|
6
|
+
import { normalizeSearchInput, } from "./input-normalization.js";
|
|
7
|
+
import { zvecGrepIndexInputSchema, zvecGrepIndexOutputSchema, zvecGrepIndexDropInputSchema, zvecGrepIndexDropOutputSchema, zvecGrepIndexStatusInputSchema, zvecGrepIndexStatusOutputSchema, zvecGrepRgInputSchema, zvecGrepSearchInputSchema, zvecGrepServerStatusInputSchema, zvecGrepServerStatusOutputSchema, } from "./schemas.js";
|
|
8
|
+
import { embeddingEnvironmentFromRequestMeta } from "./request-metadata.js";
|
|
9
|
+
import { textToolResult, toolResult } from "./result-format.js";
|
|
10
|
+
import { indexProgressMessage } from "../index-progress.js";
|
|
11
|
+
import { DEFAULT_MCP_TOOLSET } from "./toolset.js";
|
|
12
|
+
import { createRemoteEmbeddingRequestStateCodec, InMemoryRemoteEmbeddingRequestStateReplayGuard, matchesRemoteEmbeddingRequestState, remoteEmbeddingRequestState, } from "./request-state.js";
|
|
13
|
+
import { runWithTraceContext, traceContextFromMcpMeta, } from "../observability/trace-context.js";
|
|
14
|
+
const ZVEC_GREP_AGENT_SEARCH_MCP_INSTRUCTIONS = [
|
|
15
|
+
"Choose the initial search tool by the scope of the requested answer, not merely by whether the question contains an identifier.",
|
|
16
|
+
"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.",
|
|
17
|
+
"Use zvec_grep_search first when the answer requires architecture, lifecycle, system design, conceptual discovery, data or control flow, comparison across implementations, design rationale, or performance analysis.",
|
|
18
|
+
"When exact symbols are present but the answer spans multiple components, files, stages, or implementations, treat it as a mixed task: use zvec_grep_search with the concept and known symbols, then use native Grep or rg for focused follow-up.",
|
|
19
|
+
"Before using broad file reads or a sub-agent for conceptual repository discovery, make at least one appropriate zvec_grep_search call.",
|
|
20
|
+
"Do not launch a sub-agent solely to locate code. Stop discovery when the evidence covers all components requested by the question.",
|
|
21
|
+
];
|
|
22
|
+
const ZVEC_GREP_FULL_SEARCH_MCP_INSTRUCTIONS = [
|
|
23
|
+
"Choose the initial search tool by the scope of the requested answer, not merely by whether the question contains an identifier.",
|
|
24
|
+
"Use zvec_grep_rg first only when the answer can be obtained by locating a specific definition, reference, filename, configuration key, error message, literal, source fragment, or regex.",
|
|
25
|
+
"Use zvec_grep_search first when the answer requires architecture, lifecycle, system design, conceptual discovery, data or control flow, comparison across implementations, design rationale, or performance analysis.",
|
|
26
|
+
"When exact symbols are present but the answer spans multiple components, files, stages, or implementations, treat it as a mixed task: search using the concept and known symbols, then use zvec_grep_rg for focused follow-up.",
|
|
27
|
+
"Before using native Grep, Glob, shell rg, broad file reads, or a sub-agent for repository discovery, make at least one appropriate zvec-grep call.",
|
|
28
|
+
"Do not launch a sub-agent solely to locate code. Stop discovery when the evidence covers all components requested by the question.",
|
|
29
|
+
];
|
|
30
|
+
export const ZVEC_GREP_AGENT_MCP_INSTRUCTIONS = [
|
|
31
|
+
...ZVEC_GREP_AGENT_SEARCH_MCP_INSTRUCTIONS,
|
|
32
|
+
"Every repository operation requires an absolute root path visible to the daemon.",
|
|
33
|
+
"Read freshness and indexing directly from zvec_grep_search responses without a status preflight.",
|
|
34
|
+
"Use possibly_stale search results immediately when they are sufficient; do not perform extra diagnostics merely because a background update is active.",
|
|
35
|
+
"When an index is missing and literal or regex search can answer the task, use native Grep or rg.",
|
|
36
|
+
].join(" ");
|
|
37
|
+
export const ZVEC_GREP_FULL_MCP_INSTRUCTIONS = [
|
|
38
|
+
...ZVEC_GREP_FULL_SEARCH_MCP_INSTRUCTIONS,
|
|
39
|
+
"Every repository operation requires an absolute root path visible to the daemon.",
|
|
40
|
+
"Use the zvec_grep_* tools directly for repository search, status, indexing, deletion, and exhaustive lexical search.",
|
|
41
|
+
"Use freshness and indexing from zvec_grep_search without a status preflight; call zvec_grep_index_status only for a missing index, failed or cancelled indexing, diagnostics, or explicit progress monitoring.",
|
|
42
|
+
"Use possibly_stale search results immediately when they are sufficient; do not call status merely because a background update is active.",
|
|
43
|
+
"Call zvec_grep_index only when persistent indexing or index deletion is explicitly requested. Never silently create, rebuild, or drop an index.",
|
|
44
|
+
"For a new index, use a user-selected embedding or omit it only when a server default model is known; never guess a model.",
|
|
45
|
+
"zvec_grep_index wait defaults to false; poll zvec_grep_index_status for background progress and set wait to true only when completion is required before continuing.",
|
|
46
|
+
"Use zvec_grep_index with drop: true, or zvec_grep_index_drop, only when index deletion is explicitly requested.",
|
|
47
|
+
"Call zvec_grep_server_status only for daemon diagnostics, not before ordinary searches.",
|
|
48
|
+
].join(" ");
|
|
49
|
+
export const ZVEC_GREP_MCP_INSTRUCTIONS = ZVEC_GREP_AGENT_MCP_INSTRUCTIONS;
|
|
50
|
+
export function createZvecGrepMcpServer(backend, version, options = {}) {
|
|
51
|
+
const toolset = options.toolset ?? DEFAULT_MCP_TOOLSET;
|
|
52
|
+
const requestStateCodec = options.requestStateCodec ??
|
|
53
|
+
createRemoteEmbeddingRequestStateCodec(randomBytes(32));
|
|
54
|
+
const requestStateReplayGuard = options.requestStateReplayGuard ??
|
|
55
|
+
new InMemoryRemoteEmbeddingRequestStateReplayGuard();
|
|
56
|
+
const server = new McpServer({ name: "zvec-grep", version }, {
|
|
57
|
+
instructions: toolset === "full"
|
|
58
|
+
? ZVEC_GREP_FULL_MCP_INSTRUCTIONS
|
|
59
|
+
: ZVEC_GREP_AGENT_MCP_INSTRUCTIONS,
|
|
60
|
+
cacheHints: {
|
|
61
|
+
"server/discover": { ttlMs: 60 * 60 * 1_000, cacheScope: "private" },
|
|
62
|
+
"tools/list": { ttlMs: 60 * 60 * 1_000, cacheScope: "private" },
|
|
63
|
+
},
|
|
64
|
+
requestState: { verify: requestStateCodec.verify },
|
|
65
|
+
});
|
|
66
|
+
registerZvecGrepTools(server, backend, {
|
|
67
|
+
...options,
|
|
68
|
+
requestStateCodec,
|
|
69
|
+
requestStateReplayGuard,
|
|
70
|
+
toolset,
|
|
71
|
+
});
|
|
72
|
+
return server;
|
|
73
|
+
}
|
|
74
|
+
export function registerZvecGrepTools(server, backend, options = {}) {
|
|
75
|
+
const toolset = options.toolset ?? DEFAULT_MCP_TOOLSET;
|
|
76
|
+
const full = toolset === "full";
|
|
77
|
+
if (full) {
|
|
78
|
+
server.registerTool("zvec_grep_index", {
|
|
79
|
+
title: "Ensure or drop zvec-grep index",
|
|
80
|
+
description: "Activate an absolute repository root to create, incrementally update, rebuild, or explicitly drop its index. Do not call this tool to create, rebuild, or drop an index unless the user requested persistent indexing or index deletion.",
|
|
81
|
+
inputSchema: zvecGrepIndexInputSchema,
|
|
82
|
+
outputSchema: zvecGrepIndexOutputSchema,
|
|
83
|
+
annotations: {
|
|
84
|
+
readOnlyHint: false,
|
|
85
|
+
destructiveHint: true,
|
|
86
|
+
idempotentHint: true,
|
|
87
|
+
openWorldHint: true,
|
|
88
|
+
},
|
|
89
|
+
}, async (input, ctx) => await runWithTraceContext(traceContextFromMcpMeta(ctx.mcpReq._meta), async () => {
|
|
90
|
+
const request = {
|
|
91
|
+
...input,
|
|
92
|
+
embeddingEnvironment: options.acceptEmbeddingEnvironmentMeta
|
|
93
|
+
? embeddingEnvironmentFromRequestMeta(ctx.mcpReq._meta)
|
|
94
|
+
: undefined,
|
|
95
|
+
};
|
|
96
|
+
const plan = await backend.planIndexAuthorization?.(request);
|
|
97
|
+
const resolution = plan
|
|
98
|
+
? await resolveRemoteEmbeddingAuthorization(backend, plan, undefined, ctx, "zvec_grep_index", request, options)
|
|
99
|
+
: { kind: "ready" };
|
|
100
|
+
if (resolution.kind === "input_required")
|
|
101
|
+
return resolution.result;
|
|
102
|
+
const progress = createMcpIndexProgressReporter(ctx);
|
|
103
|
+
let result;
|
|
104
|
+
try {
|
|
105
|
+
result = await backend.index(request, {
|
|
106
|
+
authorization: resolution.authorization,
|
|
107
|
+
onProgress: progress.report,
|
|
108
|
+
});
|
|
109
|
+
}
|
|
110
|
+
finally {
|
|
111
|
+
await progress.flush();
|
|
112
|
+
}
|
|
113
|
+
const structuredContent = {
|
|
114
|
+
root: result.root,
|
|
115
|
+
job_id: result.jobId,
|
|
116
|
+
state: result.state,
|
|
117
|
+
reused: result.reused,
|
|
118
|
+
action: result.action,
|
|
119
|
+
dropped: result.dropped,
|
|
120
|
+
error: result.error,
|
|
121
|
+
};
|
|
122
|
+
return toolResult([
|
|
123
|
+
`root: ${result.root}`,
|
|
124
|
+
`job_id: ${result.jobId}`,
|
|
125
|
+
`state: ${result.state}`,
|
|
126
|
+
`reused: ${result.reused}`,
|
|
127
|
+
...(result.action ? [`action: ${result.action}`] : []),
|
|
128
|
+
...(result.dropped !== undefined
|
|
129
|
+
? [`dropped: ${result.dropped}`]
|
|
130
|
+
: []),
|
|
131
|
+
...(result.error
|
|
132
|
+
? [
|
|
133
|
+
`error_code: ${result.error.code}`,
|
|
134
|
+
`error_message: ${result.error.message}`,
|
|
135
|
+
]
|
|
136
|
+
: []),
|
|
137
|
+
].join("\n"), structuredContent);
|
|
138
|
+
}));
|
|
139
|
+
}
|
|
140
|
+
server.registerTool("zvec_grep_search", {
|
|
141
|
+
title: "Search with zvec-grep",
|
|
142
|
+
description: full
|
|
143
|
+
? "Search an existing repository index when the answer requires architecture, lifecycle, system design, conceptual discovery, data or control flow, comparison across implementations, design rationale, or performance analysis. Use search for mixed tasks whose question names exact symbols but whose answer spans multiple components, files, stages, or implementations; use managed ripgrep for focused follow-up. Read freshness and indexing from the response; use zvec_grep_index_status only for missing indexes, failed or cancelled indexing, diagnostics, or explicit progress monitoring."
|
|
144
|
+
: "Search an existing repository index when the answer requires architecture, lifecycle, system design, conceptual discovery, data or control flow, comparison across implementations, design rationale, or performance analysis. Use search for mixed tasks whose question names exact symbols but whose answer spans multiple components, files, stages, or implementations; use native Grep or rg for focused follow-up. Read freshness and indexing directly from the response without a status preflight. When an index is unavailable, use the returned diagnostics and native Grep or rg for exact fallback.",
|
|
145
|
+
inputSchema: zvecGrepSearchInputSchema,
|
|
146
|
+
annotations: {
|
|
147
|
+
readOnlyHint: false,
|
|
148
|
+
destructiveHint: false,
|
|
149
|
+
idempotentHint: false,
|
|
150
|
+
openWorldHint: false,
|
|
151
|
+
},
|
|
152
|
+
}, async (input, ctx) => await runWithTraceContext(traceContextFromMcpMeta(ctx.mcpReq._meta), async () => {
|
|
153
|
+
const normalized = normalizeSearchInput(input);
|
|
154
|
+
const plan = await backend.planSearchAuthorization?.(normalized);
|
|
155
|
+
const resolution = plan
|
|
156
|
+
? await resolveRemoteEmbeddingAuthorization(backend, plan, "local_search", ctx, "zvec_grep_search", normalized, options)
|
|
157
|
+
: { kind: "ready" };
|
|
158
|
+
if (resolution.kind === "input_required")
|
|
159
|
+
return resolution.result;
|
|
160
|
+
const effectiveSearch = resolution.alternative === "local_search"
|
|
161
|
+
? ftsFallbackSearch(normalized)
|
|
162
|
+
: normalized;
|
|
163
|
+
const response = await backend.search(effectiveSearch, {
|
|
164
|
+
authorization: resolution.authorization,
|
|
165
|
+
});
|
|
166
|
+
const statusLines = [
|
|
167
|
+
`freshness: ${response.freshness}`,
|
|
168
|
+
...(response.indexing
|
|
169
|
+
? [`indexing: ${formatSearchIndexing(response.indexing)}`]
|
|
170
|
+
: []),
|
|
171
|
+
];
|
|
172
|
+
// Mirror the compact rg output: return agent-formatted text only and drop
|
|
173
|
+
// the verbose structuredContent (per-item outline + full source), which
|
|
174
|
+
// otherwise dominates the agent's context. `short` keeps a bounded source
|
|
175
|
+
// snippet per hit so relevance is judgeable without extra file reads.
|
|
176
|
+
return textToolResult(`${statusLines.join("\n")}\n${formatAgentContextResult(response.result, {
|
|
177
|
+
preview: "short",
|
|
178
|
+
})}`);
|
|
179
|
+
}));
|
|
180
|
+
if (full) {
|
|
181
|
+
server.registerTool("zvec_grep_index_drop", {
|
|
182
|
+
title: "Drop zvec-grep Workspace index",
|
|
183
|
+
description: "Delete the persisted index for an absolute Workspace root and release its daemon runtime.",
|
|
184
|
+
inputSchema: zvecGrepIndexDropInputSchema,
|
|
185
|
+
outputSchema: zvecGrepIndexDropOutputSchema,
|
|
186
|
+
annotations: {
|
|
187
|
+
readOnlyHint: false,
|
|
188
|
+
destructiveHint: true,
|
|
189
|
+
idempotentHint: true,
|
|
190
|
+
openWorldHint: false,
|
|
191
|
+
},
|
|
192
|
+
}, async (input) => {
|
|
193
|
+
const result = await backend.dropIndex(input);
|
|
194
|
+
const structuredContent = {
|
|
195
|
+
root: result.root,
|
|
196
|
+
removed: result.removed,
|
|
197
|
+
};
|
|
198
|
+
return toolResult(result.removed
|
|
199
|
+
? `Dropped Workspace index for ${result.root}`
|
|
200
|
+
: `No Workspace index found for ${result.root}`, structuredContent);
|
|
201
|
+
});
|
|
202
|
+
}
|
|
203
|
+
if (full) {
|
|
204
|
+
server.registerTool("zvec_grep_rg", {
|
|
205
|
+
title: "Search with managed ripgrep",
|
|
206
|
+
description: "Run exhaustive, AST-enriched managed ripgrep locally without requiring an index. Use it first only when the answer can be obtained by locating a specific definition, reference, filename, configuration key, error message, literal, source fragment, or regex. Pass the rg command you would otherwise run. Results are exhaustive by default; append `| head -N` only when you intentionally want a bounded result set. Scope broad matches with command paths, `-g`/`--glob`, or `-t`/`--type` filters.",
|
|
207
|
+
inputSchema: zvecGrepRgInputSchema,
|
|
208
|
+
annotations: {
|
|
209
|
+
readOnlyHint: true,
|
|
210
|
+
destructiveHint: false,
|
|
211
|
+
idempotentHint: true,
|
|
212
|
+
openWorldHint: true,
|
|
213
|
+
},
|
|
214
|
+
}, async (input) => {
|
|
215
|
+
const response = await backend.rg(input);
|
|
216
|
+
return textToolResult(`${formatAgentContextResult(response.result, {})}${rgCoverageHint(response.result)}`);
|
|
217
|
+
});
|
|
218
|
+
}
|
|
219
|
+
if (full) {
|
|
220
|
+
server.registerTool("zvec_grep_index_status", {
|
|
221
|
+
title: "Inspect zvec-grep index status",
|
|
222
|
+
description: "Read persisted index status and, when active, daemon runtime and job status for an absolute root. Use only after a missing-index response, indexing failure or cancellation, explicit progress monitoring, or daemon diagnostics.",
|
|
223
|
+
inputSchema: zvecGrepIndexStatusInputSchema,
|
|
224
|
+
outputSchema: zvecGrepIndexStatusOutputSchema,
|
|
225
|
+
annotations: {
|
|
226
|
+
readOnlyHint: true,
|
|
227
|
+
destructiveHint: false,
|
|
228
|
+
idempotentHint: true,
|
|
229
|
+
openWorldHint: false,
|
|
230
|
+
},
|
|
231
|
+
}, async (input) => {
|
|
232
|
+
const result = await backend.indexStatus(input);
|
|
233
|
+
const structuredContent = formatIndexStatus(result);
|
|
234
|
+
return toolResult(JSON.stringify(structuredContent, null, 2), structuredContent);
|
|
235
|
+
});
|
|
236
|
+
server.registerTool("zvec_grep_server_status", {
|
|
237
|
+
title: "Inspect zvec-grep server status",
|
|
238
|
+
description: "Read daemon version, queue, runtime and model-pool summary without exposing repository paths.",
|
|
239
|
+
inputSchema: zvecGrepServerStatusInputSchema,
|
|
240
|
+
outputSchema: zvecGrepServerStatusOutputSchema,
|
|
241
|
+
annotations: {
|
|
242
|
+
readOnlyHint: true,
|
|
243
|
+
destructiveHint: false,
|
|
244
|
+
idempotentHint: true,
|
|
245
|
+
openWorldHint: false,
|
|
246
|
+
},
|
|
247
|
+
}, async () => {
|
|
248
|
+
const result = await backend.serverStatus();
|
|
249
|
+
const structuredContent = {
|
|
250
|
+
version: result.version,
|
|
251
|
+
uptime_ms: result.uptimeMs,
|
|
252
|
+
shutting_down: result.shuttingDown,
|
|
253
|
+
active_runtimes: result.activeRuntimes,
|
|
254
|
+
queued_jobs: result.queuedJobs,
|
|
255
|
+
running_jobs: result.runningJobs,
|
|
256
|
+
models: {
|
|
257
|
+
loaded: result.models.loaded,
|
|
258
|
+
active_leases: result.models.activeLeases,
|
|
259
|
+
},
|
|
260
|
+
};
|
|
261
|
+
return toolResult(JSON.stringify(structuredContent, null, 2), structuredContent);
|
|
262
|
+
});
|
|
263
|
+
}
|
|
264
|
+
}
|
|
265
|
+
function rgCoverageHint(result) {
|
|
266
|
+
return result.coverage === "rg_truncated"
|
|
267
|
+
? "\n\nMore matches were omitted by the explicit output bound. Remove or increase the trailing `head` bound to see them."
|
|
268
|
+
: "";
|
|
269
|
+
}
|
|
270
|
+
function createMcpIndexProgressReporter(extra) {
|
|
271
|
+
const progressToken = extra.mcpReq._meta?.progressToken;
|
|
272
|
+
let progressValue = Date.now();
|
|
273
|
+
let pending = Promise.resolve();
|
|
274
|
+
let modelPreparationActive = false;
|
|
275
|
+
return {
|
|
276
|
+
report(progress) {
|
|
277
|
+
const modelStage = progress.embedding?.stage;
|
|
278
|
+
if (modelStage === "preparing" || modelStage === "downloading") {
|
|
279
|
+
modelPreparationActive = true;
|
|
280
|
+
}
|
|
281
|
+
else if (modelStage === "ready" || progress.phase === "done") {
|
|
282
|
+
modelPreparationActive = false;
|
|
283
|
+
}
|
|
284
|
+
else if (modelPreparationActive &&
|
|
285
|
+
modelStage === undefined &&
|
|
286
|
+
progress.phase === "indexing") {
|
|
287
|
+
return;
|
|
288
|
+
}
|
|
289
|
+
const message = indexProgressMessage(progress);
|
|
290
|
+
if (progressToken === undefined ||
|
|
291
|
+
!message ||
|
|
292
|
+
extra.mcpReq.signal.aborted) {
|
|
293
|
+
return;
|
|
294
|
+
}
|
|
295
|
+
progressValue = Math.max(progressValue + 1, Date.now());
|
|
296
|
+
pending = pending
|
|
297
|
+
.then(() => extra.mcpReq.notify({
|
|
298
|
+
method: "notifications/progress",
|
|
299
|
+
params: {
|
|
300
|
+
progressToken,
|
|
301
|
+
progress: progressValue,
|
|
302
|
+
message,
|
|
303
|
+
},
|
|
304
|
+
}))
|
|
305
|
+
.catch(() => undefined);
|
|
306
|
+
},
|
|
307
|
+
async flush() {
|
|
308
|
+
await pending;
|
|
309
|
+
},
|
|
310
|
+
};
|
|
311
|
+
}
|
|
312
|
+
const REMOTE_EMBEDDING_SCOPE_DESCRIPTION = "Allow this operation once or remember permission for this workspace.";
|
|
313
|
+
const remoteEmbeddingDecisionSchema = z.object({
|
|
314
|
+
decision: z.enum([
|
|
315
|
+
"allow_once",
|
|
316
|
+
"allow_workspace",
|
|
317
|
+
"use_local_search",
|
|
318
|
+
"cancel",
|
|
319
|
+
]),
|
|
320
|
+
});
|
|
321
|
+
async function resolveRemoteEmbeddingAuthorization(backend, plan, alternative, ctx, tool, args, options = {}) {
|
|
322
|
+
const existing = await backend.existingRemoteEmbeddingPermit?.(plan);
|
|
323
|
+
if (existing)
|
|
324
|
+
return { kind: "ready", authorization: existing };
|
|
325
|
+
if (!backend.grantRemoteEmbedding) {
|
|
326
|
+
throw new Error("Remote Embedding authorization is required.");
|
|
327
|
+
}
|
|
328
|
+
const expectedState = remoteEmbeddingRequestState(tool, args, plan);
|
|
329
|
+
const echoedState = ctx.mcpReq.requestState();
|
|
330
|
+
if (echoedState) {
|
|
331
|
+
if (!matchesRemoteEmbeddingRequestState(echoedState, expectedState)) {
|
|
332
|
+
throw new ProtocolError(-32602, "Invalid or expired requestState");
|
|
333
|
+
}
|
|
334
|
+
const response = inputResponse(ctx.mcpReq.inputResponses, "remote_embedding_authorization");
|
|
335
|
+
const content = acceptedContent(ctx.mcpReq.inputResponses, "remote_embedding_authorization", remoteEmbeddingDecisionSchema);
|
|
336
|
+
if (response.kind !== "elicit" ||
|
|
337
|
+
response.action !== "accept" ||
|
|
338
|
+
!content) {
|
|
339
|
+
throw new Error("Remote Embedding authorization was declined. No remote data was sent.");
|
|
340
|
+
}
|
|
341
|
+
if (!(await options.requestStateReplayGuard?.consume(echoedState))) {
|
|
342
|
+
throw new ProtocolError(-32602, "Invalid or expired requestState");
|
|
343
|
+
}
|
|
344
|
+
if (content.decision === "use_local_search" && alternative) {
|
|
345
|
+
return { kind: "ready", alternative: "local_search" };
|
|
346
|
+
}
|
|
347
|
+
if (content.decision !== "allow_once" &&
|
|
348
|
+
content.decision !== "allow_workspace") {
|
|
349
|
+
throw new Error("Remote Embedding authorization was declined. No remote data was sent.");
|
|
350
|
+
}
|
|
351
|
+
const scope = content.decision === "allow_workspace" ? "workspace" : "once";
|
|
352
|
+
return {
|
|
353
|
+
kind: "ready",
|
|
354
|
+
authorization: await backend.grantRemoteEmbedding(plan, scope),
|
|
355
|
+
};
|
|
356
|
+
}
|
|
357
|
+
const requestStateCodec = options.requestStateCodec;
|
|
358
|
+
if (!requestStateCodec) {
|
|
359
|
+
throw new Error("MCP request-state signing is not configured.");
|
|
360
|
+
}
|
|
361
|
+
return {
|
|
362
|
+
kind: "input_required",
|
|
363
|
+
result: inputRequired({
|
|
364
|
+
requestState: await requestStateCodec.mint(options.requestStateReplayGuard.issue(expectedState), ctx),
|
|
365
|
+
inputRequests: {
|
|
366
|
+
remote_embedding_authorization: inputRequired.elicit({
|
|
367
|
+
mode: "form",
|
|
368
|
+
message: formatRemoteEmbeddingAuthorizationPrompt({
|
|
369
|
+
workspaceRoots: plan.target.workspaceRoots,
|
|
370
|
+
provider: plan.target.provider,
|
|
371
|
+
model: plan.target.model,
|
|
372
|
+
endpoint: plan.target.endpoint,
|
|
373
|
+
data: remoteEmbeddingDisclosureData(plan.disclosure),
|
|
374
|
+
}),
|
|
375
|
+
requestedSchema: {
|
|
376
|
+
type: "object",
|
|
377
|
+
properties: {
|
|
378
|
+
decision: {
|
|
379
|
+
type: "string",
|
|
380
|
+
title: "Remote Embedding permission",
|
|
381
|
+
description: REMOTE_EMBEDDING_SCOPE_DESCRIPTION,
|
|
382
|
+
oneOf: [
|
|
383
|
+
{ const: "allow_once", title: "Allow once" },
|
|
384
|
+
{
|
|
385
|
+
const: "allow_workspace",
|
|
386
|
+
title: "Allow for this workspace",
|
|
387
|
+
},
|
|
388
|
+
...(alternative === "local_search"
|
|
389
|
+
? [
|
|
390
|
+
{
|
|
391
|
+
const: "use_local_search",
|
|
392
|
+
title: "Use FTS only",
|
|
393
|
+
},
|
|
394
|
+
]
|
|
395
|
+
: []),
|
|
396
|
+
{ const: "cancel", title: "Cancel" },
|
|
397
|
+
],
|
|
398
|
+
default: "cancel",
|
|
399
|
+
},
|
|
400
|
+
},
|
|
401
|
+
required: ["decision"],
|
|
402
|
+
},
|
|
403
|
+
}),
|
|
404
|
+
},
|
|
405
|
+
}),
|
|
406
|
+
};
|
|
407
|
+
}
|
|
408
|
+
function ftsFallbackSearch(input) {
|
|
409
|
+
const queries = [
|
|
410
|
+
...(input.queries ?? []),
|
|
411
|
+
...input.routes.map((route) => route.query),
|
|
412
|
+
];
|
|
413
|
+
return {
|
|
414
|
+
...input,
|
|
415
|
+
queries: undefined,
|
|
416
|
+
routes: queries.map((query) => ({ mode: "fts", query })),
|
|
417
|
+
autoUpdate: false,
|
|
418
|
+
freshness: "eventual",
|
|
419
|
+
};
|
|
420
|
+
}
|
|
421
|
+
function formatSearchIndexing(indexing) {
|
|
422
|
+
if (indexing.completed === undefined || indexing.total === undefined) {
|
|
423
|
+
return indexing.state;
|
|
424
|
+
}
|
|
425
|
+
return `${indexing.state} (${indexing.completed}/${indexing.total})`;
|
|
426
|
+
}
|
|
427
|
+
function formatIndexStatus(result) {
|
|
428
|
+
return {
|
|
429
|
+
root: result.root,
|
|
430
|
+
indexed: result.indexed,
|
|
431
|
+
index_policy: result.indexPolicy,
|
|
432
|
+
source: result.source,
|
|
433
|
+
persistent: result.persistent,
|
|
434
|
+
runtime: result.runtime
|
|
435
|
+
? {
|
|
436
|
+
watcher_active: result.runtime.watcherActive,
|
|
437
|
+
dirty_revision: result.runtime.dirtyRevision,
|
|
438
|
+
indexed_revision: result.runtime.indexedRevision,
|
|
439
|
+
active_job_id: result.runtime.activeJobId,
|
|
440
|
+
job_state: result.runtime.jobState,
|
|
441
|
+
progress: result.runtime.progress,
|
|
442
|
+
completion: result.runtime.completion,
|
|
443
|
+
error: result.runtime.error,
|
|
444
|
+
}
|
|
445
|
+
: undefined,
|
|
446
|
+
};
|
|
447
|
+
}
|
|
448
|
+
//# sourceMappingURL=tools.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"tools.js","sourceRoot":"","sources":["../../src/mcp/tools.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
export declare const MCP_TOOLSET_ENV = "ZVEC_GREP_MCP_TOOLSET";
|
|
2
|
+
export declare const DEFAULT_MCP_TOOLSET = "agent";
|
|
3
|
+
export type McpToolset = "agent" | "full";
|
|
4
|
+
export declare function parseMcpToolset(value: string): McpToolset;
|
|
5
|
+
export declare function resolveMcpToolset(explicitValue?: string, environmentValue?: string): McpToolset;
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
export const MCP_TOOLSET_ENV = "ZVEC_GREP_MCP_TOOLSET";
|
|
2
|
+
export const DEFAULT_MCP_TOOLSET = "agent";
|
|
3
|
+
export function parseMcpToolset(value) {
|
|
4
|
+
if (value === "agent" || value === "full")
|
|
5
|
+
return value;
|
|
6
|
+
throw new Error(`Unsupported MCP toolset "${value}". Expected "agent" or "full".`);
|
|
7
|
+
}
|
|
8
|
+
export function resolveMcpToolset(explicitValue, environmentValue) {
|
|
9
|
+
const value = explicitValue ?? environmentValue;
|
|
10
|
+
return value === undefined ? DEFAULT_MCP_TOOLSET : parseMcpToolset(value);
|
|
11
|
+
}
|
|
12
|
+
//# sourceMappingURL=toolset.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"toolset.js","sourceRoot":"","sources":["../../src/mcp/toolset.ts"],"names":[],"mappings":"AAAA,MAAM,CAAC,MAAM,eAAe,GAAG,uBAAuB,CAAC;AAEvD,MAAM,CAAC,MAAM,mBAAmB,GAAG,OAAO,CAAC;AAI3C,MAAM,UAAU,eAAe,CAAC,KAAa;IAC3C,IAAI,KAAK,KAAK,OAAO,IAAI,KAAK,KAAK,MAAM;QAAE,OAAO,KAAK,CAAC;IACxD,MAAM,IAAI,KAAK,CACb,4BAA4B,KAAK,gCAAgC,CAClE,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,iBAAiB,CAC/B,aAAsB,EACtB,gBAAyB;IAEzB,MAAM,KAAK,GAAG,aAAa,IAAI,gBAAgB,CAAC;IAChD,OAAO,KAAK,KAAK,SAAS,CAAC,CAAC,CAAC,mBAAmB,CAAC,CAAC,CAAC,eAAe,CAAC,KAAK,CAAC,CAAC;AAC5E,CAAC"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
export type TraceContext = {
|
|
2
|
+
traceparent: string;
|
|
3
|
+
traceId: string;
|
|
4
|
+
tracestate?: string;
|
|
5
|
+
baggage?: string;
|
|
6
|
+
};
|
|
7
|
+
export declare function currentTraceContext(): TraceContext | undefined;
|
|
8
|
+
export declare function runWithTraceContext<T>(context: TraceContext | undefined, operation: () => T): T;
|
|
9
|
+
export declare function traceContextFromMcpBody(body: unknown): TraceContext | undefined;
|
|
10
|
+
export declare function traceContextFromMcpMeta(meta: unknown): TraceContext | undefined;
|
|
11
|
+
export declare function traceHeaders(): Record<string, string>;
|
|
@@ -0,0 +1,138 @@
|
|
|
1
|
+
import { AsyncLocalStorage } from "node:async_hooks";
|
|
2
|
+
const storage = new AsyncLocalStorage();
|
|
3
|
+
const TRACEPARENT = /^([0-9a-f]{2})-([0-9a-f]{32})-([0-9a-f]{16})-([0-9a-f]{2})((?:-[0-9a-f]+)*)$/;
|
|
4
|
+
export function currentTraceContext() {
|
|
5
|
+
return storage.getStore();
|
|
6
|
+
}
|
|
7
|
+
export function runWithTraceContext(context, operation) {
|
|
8
|
+
return context ? storage.run(context, operation) : operation();
|
|
9
|
+
}
|
|
10
|
+
export function traceContextFromMcpBody(body) {
|
|
11
|
+
if (!body || typeof body !== "object" || Array.isArray(body)) {
|
|
12
|
+
return undefined;
|
|
13
|
+
}
|
|
14
|
+
return traceContextFromMcpMeta(body.params?._meta);
|
|
15
|
+
}
|
|
16
|
+
export function traceContextFromMcpMeta(meta) {
|
|
17
|
+
if (!meta || typeof meta !== "object" || Array.isArray(meta)) {
|
|
18
|
+
return undefined;
|
|
19
|
+
}
|
|
20
|
+
const values = meta;
|
|
21
|
+
const traceparent = typeof values.traceparent === "string" ? values.traceparent : undefined;
|
|
22
|
+
const match = traceparent?.match(TRACEPARENT);
|
|
23
|
+
if (!match ||
|
|
24
|
+
match[1] === "ff" ||
|
|
25
|
+
(match[1] === "00" && match[5] !== "") ||
|
|
26
|
+
match[2] === "0".repeat(32) ||
|
|
27
|
+
match[3] === "0".repeat(16)) {
|
|
28
|
+
return undefined;
|
|
29
|
+
}
|
|
30
|
+
const tracestate = validTracestate(values.tracestate);
|
|
31
|
+
const baggage = validBaggage(values.baggage);
|
|
32
|
+
return {
|
|
33
|
+
traceparent: traceparent,
|
|
34
|
+
traceId: match[2],
|
|
35
|
+
...(tracestate ? { tracestate } : {}),
|
|
36
|
+
...(baggage ? { baggage } : {}),
|
|
37
|
+
};
|
|
38
|
+
}
|
|
39
|
+
export function traceHeaders() {
|
|
40
|
+
const context = currentTraceContext();
|
|
41
|
+
if (!context)
|
|
42
|
+
return {};
|
|
43
|
+
return {
|
|
44
|
+
traceparent: context.traceparent,
|
|
45
|
+
...(context.tracestate ? { tracestate: context.tracestate } : {}),
|
|
46
|
+
...(context.baggage ? { baggage: context.baggage } : {}),
|
|
47
|
+
};
|
|
48
|
+
}
|
|
49
|
+
function boundedHeader(value, maxLength, allowHorizontalTab = false) {
|
|
50
|
+
if (typeof value !== "string" || value.length > maxLength)
|
|
51
|
+
return undefined;
|
|
52
|
+
for (const character of value) {
|
|
53
|
+
const code = character.charCodeAt(0);
|
|
54
|
+
if (code > 0x7e ||
|
|
55
|
+
(code < 0x20 && !(allowHorizontalTab && code === 0x09))) {
|
|
56
|
+
return undefined;
|
|
57
|
+
}
|
|
58
|
+
}
|
|
59
|
+
return value;
|
|
60
|
+
}
|
|
61
|
+
function validTracestate(value) {
|
|
62
|
+
const header = boundedHeader(value, 512);
|
|
63
|
+
if (!header)
|
|
64
|
+
return undefined;
|
|
65
|
+
const members = header.split(",");
|
|
66
|
+
if (members.length > 32)
|
|
67
|
+
return undefined;
|
|
68
|
+
const keys = new Set();
|
|
69
|
+
for (const rawMember of members) {
|
|
70
|
+
const member = rawMember.trim();
|
|
71
|
+
const separator = member.indexOf("=");
|
|
72
|
+
if (separator <= 0)
|
|
73
|
+
return undefined;
|
|
74
|
+
const key = member.slice(0, separator);
|
|
75
|
+
const item = member.slice(separator + 1);
|
|
76
|
+
if (!/^(?:[a-z][a-z0-9_\-*/]{0,255}|[a-z0-9][a-z0-9_\-*/]{0,240}@[a-z][a-z0-9_\-*/]{0,13})$/.test(key) ||
|
|
77
|
+
item.length === 0 ||
|
|
78
|
+
item.length > 256 ||
|
|
79
|
+
!/^[\x20-\x2b\x2d-\x3c\x3e-\x7e]+$/.test(item) ||
|
|
80
|
+
item.endsWith(" ") ||
|
|
81
|
+
keys.has(key)) {
|
|
82
|
+
return undefined;
|
|
83
|
+
}
|
|
84
|
+
keys.add(key);
|
|
85
|
+
}
|
|
86
|
+
return header;
|
|
87
|
+
}
|
|
88
|
+
function validBaggage(value) {
|
|
89
|
+
const header = boundedHeader(value, 8_192, true);
|
|
90
|
+
if (!header)
|
|
91
|
+
return undefined;
|
|
92
|
+
const members = header.split(",");
|
|
93
|
+
if (members.length > 64)
|
|
94
|
+
return undefined;
|
|
95
|
+
for (const rawMember of members) {
|
|
96
|
+
const segments = rawMember.trim().split(";");
|
|
97
|
+
const pair = segments.shift();
|
|
98
|
+
const separator = pair.indexOf("=");
|
|
99
|
+
const pairValue = separator < 0 ? "" : pair.slice(separator + 1).trim();
|
|
100
|
+
if (separator <= 0 ||
|
|
101
|
+
!isHttpToken(pair.slice(0, separator).trim()) ||
|
|
102
|
+
hasInvalidBaggageCharacters(pairValue, ",")) {
|
|
103
|
+
return undefined;
|
|
104
|
+
}
|
|
105
|
+
for (const rawProperty of segments) {
|
|
106
|
+
const property = rawProperty.trim();
|
|
107
|
+
const propertySeparator = property.indexOf("=");
|
|
108
|
+
const key = propertySeparator < 0
|
|
109
|
+
? property
|
|
110
|
+
: property.slice(0, propertySeparator).trim();
|
|
111
|
+
const propertyValue = propertySeparator < 0
|
|
112
|
+
? ""
|
|
113
|
+
: property.slice(propertySeparator + 1).trim();
|
|
114
|
+
if (!isHttpToken(key) ||
|
|
115
|
+
hasInvalidBaggageCharacters(propertyValue, ";,")) {
|
|
116
|
+
return undefined;
|
|
117
|
+
}
|
|
118
|
+
}
|
|
119
|
+
}
|
|
120
|
+
return header;
|
|
121
|
+
}
|
|
122
|
+
function isHttpToken(value) {
|
|
123
|
+
return /^[!#$%&'*+\-.^_`|~0-9A-Za-z]+$/.test(value);
|
|
124
|
+
}
|
|
125
|
+
function hasInvalidBaggageCharacters(value, delimiters) {
|
|
126
|
+
for (const character of value) {
|
|
127
|
+
const code = character.charCodeAt(0);
|
|
128
|
+
if (code <= 0x20 ||
|
|
129
|
+
code === 0x22 ||
|
|
130
|
+
code === 0x5c ||
|
|
131
|
+
code === 0x7f ||
|
|
132
|
+
delimiters.includes(character)) {
|
|
133
|
+
return true;
|
|
134
|
+
}
|
|
135
|
+
}
|
|
136
|
+
return false;
|
|
137
|
+
}
|
|
138
|
+
//# sourceMappingURL=trace-context.js.map
|