@zvec/zvec-grep 0.1.5 → 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 +154 -236
- package/README_CN.md +142 -233
- 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 +1 -1
- package/dist/cli/args.js +338 -55
- package/dist/cli/args.js.map +1 -1
- package/dist/cli/auth.d.ts +21 -0
- package/dist/cli/auth.js +209 -0
- package/dist/cli/auth.js.map +1 -0
- package/dist/cli/commands.js +469 -625
- package/dist/cli/commands.js.map +1 -1
- package/dist/cli/errors.js +2 -2
- package/dist/cli/errors.js.map +1 -1
- package/dist/cli/format/context.d.ts +4 -0
- package/dist/cli/format/context.js +311 -44
- package/dist/cli/format/context.js.map +1 -1
- package/dist/cli/format/debug.js +12 -6
- package/dist/cli/format/debug.js.map +1 -1
- package/dist/cli/format/progress.d.ts +4 -0
- package/dist/cli/format/progress.js +219 -46
- package/dist/cli/format/progress.js.map +1 -1
- package/dist/cli/format/status.d.ts +79 -6
- package/dist/cli/format/status.js +341 -111
- package/dist/cli/format/status.js.map +1 -1
- package/dist/cli/help.js +395 -63
- 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.d.ts +4 -0
- package/dist/cli/install.js +963 -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/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 +23 -6
- package/dist/cli/types.js.map +1 -1
- package/dist/client/daemon-client.d.ts +31 -0
- package/dist/client/daemon-client.js +203 -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 +77 -0
- package/dist/daemon/backend.js +1087 -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 +288 -0
- package/dist/daemon/http-server.js.map +1 -0
- package/dist/daemon/index-coordinator.d.ts +24 -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 +46 -0
- package/dist/daemon/runtime-manager.js +246 -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 +254 -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/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/config.d.ts +30 -8
- package/dist/engine/config.js +171 -45
- package/dist/engine/config.js.map +1 -1
- 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 +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 +116 -48
- package/dist/engine/extraction/code/extractor.js.map +1 -1
- package/dist/engine/extraction/code/families/c-family.js +1 -1
- 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/metadata.d.ts +1 -1
- package/dist/engine/extraction/code/tree-sitter/grammar.js.map +1 -0
- 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/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 +4 -44
- package/dist/engine/extraction/index.js +2 -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 +38 -17
- 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/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 +15 -0
- package/dist/engine/file-type.js +152 -0
- 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 +13 -0
- package/dist/engine/manifest.js +124 -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} +127 -106
- package/dist/engine/models/backends/llama-cpp.js.map +1 -0
- 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 +40 -0
- package/dist/engine/models/backends/model2vec.js +311 -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} +155 -94
- 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 +207 -23
- package/dist/engine/models/catalog.js +191 -25
- 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 +59 -18
- package/dist/engine/models/embeddings.js +52 -28
- 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 +409 -165
- 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/root-paths.js +6 -6
- package/dist/engine/pipeline/indexing/root-paths.js.map +1 -1
- package/dist/engine/pipeline/indexing/scanner/index.d.ts +9 -2
- package/dist/engine/pipeline/indexing/scanner/index.js +291 -35
- 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 +8 -10
- 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/root.d.ts +10 -12
- package/dist/engine/service/root.js +29 -25
- 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 +20 -22
- package/dist/engine/service/structure-enrichment.js.map +1 -1
- package/dist/engine/service/types.d.ts +40 -38
- package/dist/engine/service/workspace-index.d.ts +26 -0
- package/dist/engine/service/workspace-index.js +157 -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 +698 -489
- package/dist/engine/service/zvec-grep.js.map +1 -1
- package/dist/engine/storage/index.d.ts +30 -20
- 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 +4 -67
- package/dist/engine/storage/zvec.js +115 -85
- 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.js +38 -1
- package/dist/engine/utils/file-selection.js.map +1 -1
- package/dist/engine/utils/lock.js +1 -1
- package/dist/engine/utils/lock.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 +4 -4
- package/dist/index.js +1 -1
- 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 +104 -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 +672 -0
- package/dist/mcp/schemas.js +506 -0
- package/dist/mcp/schemas.js.map +1 -0
- 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 +153 -0
- package/dist/mcp/tools.js +482 -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/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 +132 -0
- package/docs/02-cli.md +239 -0
- package/docs/03-mcp.md +185 -0
- package/docs/04-pipeline.md +226 -0
- package/docs/05-architecture.md +86 -0
- package/docs/06-server.md +215 -0
- package/docs/07-embedding.md +182 -0
- package/docs/08-roadmap.md +85 -0
- package/docs/README.md +53 -0
- package/package.json +20 -11
- package/dist/cli/mcp.d.ts +0 -2
- package/dist/cli/mcp.js +0 -354
- package/dist/cli/mcp.js.map +0 -1
- 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.d.ts +0 -5
- package/dist/engine/files/file-type.js +0 -119
- 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/skills/zvec-grep/SKILL.md +0 -151
- package/skills/zvec-grep/agents/openai.yaml +0 -4
- /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}/nodes.js +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/README_CN.md
CHANGED
|
@@ -3,302 +3,211 @@
|
|
|
3
3
|
</p>
|
|
4
4
|
|
|
5
5
|
<div align="center">
|
|
6
|
+
<p>
|
|
7
|
+
<a href="./docs/08-roadmap.md"><img src="https://img.shields.io/badge/status-work%20in%20progress-F59E0B?style=for-the-badge" alt="项目开发中" /></a>
|
|
8
|
+
</p>
|
|
6
9
|
<picture>
|
|
7
|
-
<source media="(prefers-color-scheme: dark)" srcset="
|
|
8
|
-
<img src="
|
|
10
|
+
<source media="(prefers-color-scheme: dark)" srcset="./.github/assets/zg-logo-dark.svg">
|
|
11
|
+
<img src="./.github/assets/zg-logo.svg" width="150" alt="zg logo" />
|
|
9
12
|
</picture>
|
|
13
|
+
<p><strong>Know the words—or don’t. Just zg.</strong></p>
|
|
14
|
+
<p>面向人与 Agent 的本地优先统一检索层。</p>
|
|
15
|
+
|
|
16
|
+
<p>
|
|
17
|
+
<a href="https://www.npmjs.com/package/@zvec/zvec-grep"><img src="https://img.shields.io/npm/v/@zvec/zvec-grep.svg" alt="npm 版本" /></a>
|
|
18
|
+
<a href="https://github.com/zvec-ai/zvec-grep/actions/workflows/ci.yml"><img src="https://github.com/zvec-ai/zvec-grep/actions/workflows/ci.yml/badge.svg" alt="CI" /></a>
|
|
19
|
+
<a href="./LICENSE"><img src="https://img.shields.io/badge/license-Apache%202.0-blue.svg" alt="Apache 2.0 许可证" /></a>
|
|
20
|
+
<img src="https://img.shields.io/badge/node-%3E%3D22-blue.svg" alt="Node.js 22 或更新版本" />
|
|
21
|
+
</p>
|
|
22
|
+
|
|
23
|
+
<p>
|
|
24
|
+
<a href="#tour">🎬 <strong>功能演示</strong></a> |
|
|
25
|
+
<a href="#features">💫 <strong>核心特性</strong></a> |
|
|
26
|
+
<a href="#try-it-yourself">🚀 <strong>动手体验</strong></a> |
|
|
27
|
+
<a href="./docs/README.md">📚 <strong>文档</strong></a> |
|
|
28
|
+
<a href="#benchmarks">📊 <strong>性能测试</strong></a> |
|
|
29
|
+
<a href="#community">🤝 <strong>社区</strong></a>
|
|
30
|
+
</p>
|
|
10
31
|
</div>
|
|
11
32
|
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
<a href="./LICENSE"><img src="https://img.shields.io/badge/license-Apache%202.0-blue.svg" alt="许可证"/></a>
|
|
16
|
-
<img src="https://img.shields.io/badge/node-%3E%3D22-blue.svg" alt="Node.js >=22"/>
|
|
17
|
-
<img src="https://img.shields.io/badge/CLI-zg-2ea44f.svg" alt="zg CLI"/>
|
|
18
|
-
</p>
|
|
19
|
-
|
|
20
|
-
<p align="center">
|
|
21
|
-
<a href="#quickstart">🚀 <strong>快速开始</strong></a> |
|
|
22
|
-
<a href="#features">💫 <strong>核心特性</strong></a> |
|
|
23
|
-
<a href="#installation">📦 <strong>安装</strong></a> |
|
|
24
|
-
<a href="#models">🧠 <strong>模型</strong></a> |
|
|
25
|
-
<a href="#library-api">🛠️ <strong>库 API</strong></a>
|
|
26
|
-
</p>
|
|
27
|
-
|
|
28
|
-
**zvec-grep** 是基于 Zvec 构建的、面向 agent 的代码库混合检索工具。它为仓库维护本地语义索引,融合向量检索与全文检索,并默认输出节省 token 的结果;当人在终端里阅读时,也可以切换到更完整的展示模式。
|
|
29
|
-
|
|
30
|
-
命令非常短:
|
|
31
|
-
|
|
32
|
-
```bash
|
|
33
|
-
zg query "where query auto update happens"
|
|
34
|
-
```
|
|
35
|
-
|
|
36
|
-
> [!IMPORTANT]
|
|
37
|
-
> **命令接口**
|
|
38
|
-
>
|
|
39
|
-
> - **混合代码检索**:可以用自然语言、精确关键词,或两者组合来搜索代码。
|
|
40
|
-
> - **明确的索引生命周期**:新仓库必须显式运行 `zg index --embedding <model>`;agent 不会静默创建索引。
|
|
41
|
-
> - **自动刷新**:已有匿名索引会在普通查询前自动检查并增量更新。
|
|
42
|
-
> - **节省 Token 的输出**:agent 默认输出 `--preview none`;`--human` 默认展示完整源码 preview。
|
|
43
|
-
> - **无索引文本搜索**:`zg query --rg` 提供托管的 ripgrep 搜索,不需要先建索引。
|
|
44
|
-
|
|
45
|
-
## <a id="features"></a>💫 核心特性
|
|
46
|
-
|
|
47
|
-
- **语义 + 词法检索**:融合向量检索和全文检索,适合源码、文档、测试、脚本和配置。
|
|
48
|
-
- **仓库本地索引**:匿名索引存放在 `<repo>/.zvec-grep/`,索引状态跟随仓库。
|
|
49
|
-
- **Agent 友好输出**:默认按文件分组,并尽量减少源码 preview,降低上下文成本。
|
|
50
|
-
- **人类阅读模式**:加 `--human` 后更适合终端阅读,并默认展示完整 preview。
|
|
51
|
-
- **托管 ripgrep 通道**:`zg query --rg` 支持常见 `rg` 参数,未建索引仓库也能使用。
|
|
52
|
-
- **显式模型选择**:第一次建索引必须指定模型,例如 `local/embeddinggemma-300m`、`local/qwen3-embedding-0.6b` 或 `qwen/text-embedding-v4`。
|
|
53
|
-
- **Schema 复用**:已有索引再次运行 `zg index` 会复用保存的 embedding schema,除非你显式切换模型。
|
|
54
|
-
- **MCP Server**:运行 `zg serve --mcp`,向 MCP 客户端暴露索引搜索和无索引文本搜索工具;建索引和状态查看仍由 CLI 提供。
|
|
55
|
-
- **库 API**:Node.js 工具、agent 或 MCP server 可以直接使用 `createZvecGrep()`。
|
|
56
|
-
|
|
57
|
-
## <a id="installation"></a>📦 安装
|
|
58
|
-
|
|
59
|
-
从 npm 安装 CLI:
|
|
60
|
-
|
|
61
|
-
```bash
|
|
62
|
-
npm install -g @zvec/zvec-grep
|
|
63
|
-
zg version
|
|
64
|
-
```
|
|
65
|
-
|
|
66
|
-
也可以不全局安装,直接运行:
|
|
67
|
-
|
|
68
|
-
```bash
|
|
69
|
-
npx @zvec/zvec-grep help
|
|
70
|
-
```
|
|
71
|
-
|
|
72
|
-
从最新源码构建,并将 `zg` 安装为全局命令:
|
|
73
|
-
|
|
74
|
-
```bash
|
|
75
|
-
git clone https://github.com/zvec-ai/zvec-grep.git
|
|
76
|
-
cd zvec-grep
|
|
77
|
-
npm ci
|
|
78
|
-
npm run build
|
|
79
|
-
npm install -g .
|
|
80
|
-
zg version
|
|
81
|
-
```
|
|
82
|
-
|
|
83
|
-
运行 stdio MCP server:
|
|
84
|
-
|
|
85
|
-
```bash
|
|
86
|
-
zg serve --mcp
|
|
87
|
-
```
|
|
88
|
-
|
|
89
|
-
安装 Codex MCP 集成:
|
|
90
|
-
|
|
91
|
-
```bash
|
|
92
|
-
zg install --target codex --yes
|
|
93
|
-
```
|
|
94
|
-
|
|
95
|
-
Codex MCP 工具调用默认超时为 600 秒,可在安装时通过 `--mcp-tool-timeout <秒数>` 覆盖。
|
|
33
|
+
**zg**(**z**vec-**g**rep)将 ripgrep、BM25 与向量检索统一在一个
|
|
34
|
+
[本地优先的检索入口](./docs/05-architecture.md)中。既可以由人在终端中搜索,
|
|
35
|
+
也可以让 Agent 根据问题选择合适的本地检索方式。
|
|
96
36
|
|
|
97
|
-
|
|
37
|
+
<a id="tour"></a>
|
|
98
38
|
|
|
99
|
-
|
|
100
|
-
- macOS、Linux 或 Windows
|
|
101
|
-
- 使用索引检索时需要选择一个支持的 embedding 模型
|
|
39
|
+
## 🎬 功能演示
|
|
102
40
|
|
|
103
|
-
|
|
41
|
+
<div align="center">
|
|
42
|
+
<img src="./.github/assets/zvec-grep-tour.gif" width="1000" alt="安装 Agent 集成、为工作区建索引并让 Agent 使用 zvec-grep 检索本地内容" />
|
|
43
|
+
</div>
|
|
104
44
|
|
|
105
|
-
|
|
45
|
+
只需安装一次集成并为工作区建索引,之后既可以在终端中搜索,也可以直接向
|
|
46
|
+
Agent 提问。
|
|
106
47
|
|
|
107
|
-
|
|
48
|
+
<a id="features"></a>
|
|
108
49
|
|
|
109
|
-
|
|
110
|
-
zg index \
|
|
111
|
-
--embedding local/embeddinggemma-300m \
|
|
112
|
-
-g "src/**" \
|
|
113
|
-
-g "docs/**" \
|
|
114
|
-
-g "test/**" \
|
|
115
|
-
-g "!dist/**" \
|
|
116
|
-
-g "!node_modules/**" \
|
|
117
|
-
-g "!coverage/**"
|
|
118
|
-
```
|
|
50
|
+
## 💫 为什么选择 zg?
|
|
119
51
|
|
|
120
|
-
|
|
52
|
+
- **人与 Agent 开箱即用**:安装一次、索引一次,即可在 macOS、Linux 和
|
|
53
|
+
Windows 上通过 CLI 或 Agent 复用同一个工作区。
|
|
54
|
+
- **不止关键词搜索**:先按语义发现内容、按相关性排序,再在需要时使用精确文本
|
|
55
|
+
或正则完成验证。
|
|
56
|
+
- **多格式检索**:搜索源代码、文档和结构化数据,同时保留有用的内容结构与
|
|
57
|
+
来源位置。
|
|
58
|
+
- **更少搜索,更少上下文**:经过排序并保留来源的结果,可以减少工具调用、
|
|
59
|
+
Token 消耗与无关噪声,更快找到所需证据。
|
|
60
|
+
- **默认本地运行**:文件、索引与本地模型都留在本机;只有经过你的授权,远程
|
|
61
|
+
Embedding 服务才能接收数据。
|
|
121
62
|
|
|
122
|
-
|
|
123
|
-
zg status
|
|
124
|
-
```
|
|
63
|
+
<a id="try-it-yourself"></a>
|
|
125
64
|
|
|
126
|
-
|
|
65
|
+
## 🚀 动手体验
|
|
127
66
|
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
67
|
+
需要 Node.js 22 或更新版本,以及已经完成配置的
|
|
68
|
+
[OpenCode](https://opencode.ai/)。Agent 示例会显式选择免费模型,不依赖你配置的
|
|
69
|
+
默认模型提供方。
|
|
131
70
|
|
|
132
|
-
|
|
71
|
+
### 1. 准备示例书架
|
|
133
72
|
|
|
134
73
|
```bash
|
|
135
|
-
|
|
136
|
-
|
|
74
|
+
npm install -g @zvec/zvec-grep
|
|
75
|
+
zg install --target opencode --yes
|
|
137
76
|
|
|
138
|
-
|
|
77
|
+
mkdir zg-mystery && cd zg-mystery
|
|
78
|
+
curl -L https://www.gutenberg.org/files/11/11-0.txt -o alice-in-wonderland.txt
|
|
79
|
+
curl -L https://www.gutenberg.org/files/345/345-0.txt -o dracula.txt
|
|
80
|
+
curl -L https://www.gutenberg.org/files/84/84-0.txt -o frankenstein.txt
|
|
81
|
+
curl -L https://www.gutenberg.org/files/834/834-0.txt -o sherlock-holmes.txt
|
|
139
82
|
|
|
140
|
-
|
|
141
|
-
zg query --rg -F "ZVEC_GREP_HOME" src
|
|
83
|
+
zg index --embedding local/potion-retrieval-32m
|
|
142
84
|
```
|
|
143
85
|
|
|
144
|
-
|
|
86
|
+
这会创建一个包含四本公版小说的小书架,并使用 Potion Retrieval 在本地建立索引。
|
|
145
87
|
|
|
146
|
-
|
|
147
|
-
zg
|
|
148
|
-
|
|
88
|
+
安装时会立即启动共享 Daemon。默认 MCP 传输方式为 stdio:Agent 会运行
|
|
89
|
+
`zg server --stdio`,电脑重启后该命令会再次安全启动或复用 Daemon。高级用户
|
|
90
|
+
可以通过 `zg install --mcp-transport http` 保留 HTTP 直连,并自行使用
|
|
91
|
+
`zg server on` 管理后续启动。
|
|
149
92
|
|
|
150
|
-
|
|
93
|
+
如需让安装后的 MCP 集成额外暴露 managed rg、index 和 status 工具,可使用
|
|
94
|
+
`zg install --mcp-toolset full`;默认值为 `agent`。
|
|
151
95
|
|
|
152
|
-
|
|
96
|
+
### 2. 选择检索方式
|
|
153
97
|
|
|
154
|
-
|
|
98
|
+
#### Agent:通过 OpenCode 提问
|
|
155
99
|
|
|
156
100
|
```bash
|
|
157
|
-
|
|
158
|
-
|
|
101
|
+
opencode run --model opencode/deepseek-v4-flash-free \
|
|
102
|
+
"An unseen creature left a few marks. What did the detective infer? Cite local evidence."
|
|
159
103
|
```
|
|
160
104
|
|
|
161
|
-
|
|
105
|
+
Prompt 中没有指定任何工具,OpenCode 会自主选择 zg。不同模型改写的
|
|
106
|
+
Query 可能略有不同,一次典型的执行过程如下:
|
|
162
107
|
|
|
163
|
-
|
|
108
|
+
```text
|
|
109
|
+
⚙ zvec_grep_zvec_grep_search {"root":".../zg-mystery","query":"An unseen creature left a few marks. What did the detective infer?","fts":["marks","unseen creature","inferred","detective"],"fuse":true}
|
|
110
|
+
→ Read sherlock-holmes.txt [offset=5440, limit=120]
|
|
164
111
|
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
--embedding qwen/text-embedding-v4 \
|
|
168
|
-
--api-key "$DASHSCOPE_API_KEY"
|
|
169
|
-
```
|
|
170
|
-
|
|
171
|
-
索引成功后,通过 CLI 显式传入的全局模型和 provider 参数会保存到 `~/.zvec-grep/config.json`,并使用仅当前用户可读写的权限。已经运行的 `zg` MCP server 会在下一次需要模型时读取新的远程 API key,不需要重启 Codex。只从环境变量读取、没有作为 CLI 参数显式传入的值不会被持久化。
|
|
172
|
-
|
|
173
|
-
```json
|
|
174
|
-
{
|
|
175
|
-
"version": 1,
|
|
176
|
-
"defaults": {
|
|
177
|
-
"embedding": "qwen/text-embedding-v4"
|
|
178
|
-
},
|
|
179
|
-
"providers": {
|
|
180
|
-
"qwen": {
|
|
181
|
-
"apiKey": "...",
|
|
182
|
-
"endpoint": "https://dashscope.aliyuncs.com/compatible-mode/v1/embeddings"
|
|
183
|
-
}
|
|
184
|
-
}
|
|
185
|
-
}
|
|
186
|
-
```
|
|
112
|
+
Answer:
|
|
113
|
+
侦探是《驼背人》中的福尔摩斯。根据动物留下的脚印,他推断:
|
|
187
114
|
|
|
188
|
-
|
|
115
|
+
- 它不是狗、猫、猴子或其他常见动物:脚印有五个肉垫和长爪,整个脚印
|
|
116
|
+
接近一把甜点勺大小(sherlock-holmes.txt:5479-5486)。
|
|
117
|
+
- 它身体细长、四肢很短:身长接近两英尺,步幅却只有约三英寸
|
|
118
|
+
(sherlock-holmes.txt:5497-5502)。
|
|
119
|
+
- 它是食肉动物,因为它爬上窗帘,试图接近金丝雀笼
|
|
120
|
+
(sherlock-holmes.txt:5509-5510)。
|
|
121
|
+
- 它很可能属于鼬或白鼬一类,但体型异常大
|
|
122
|
+
(sherlock-holmes.txt:5514-5516)。
|
|
189
123
|
|
|
190
|
-
|
|
191
|
-
|
|
192
|
-
```bash
|
|
193
|
-
zg index --rebuild --embedding local/qwen3-embedding-0.6b
|
|
124
|
+
福尔摩斯还推断,一名男子和它一起从窗户进入房间,离开时带走了钥匙
|
|
125
|
+
(sherlock-holmes.txt:5464-5470, 5527-5528)。
|
|
194
126
|
```
|
|
195
127
|
|
|
196
|
-
|
|
128
|
+
#### 用户:直接检索
|
|
197
129
|
|
|
198
|
-
|
|
130
|
+
不通过 Agent,直接搜索同一个书架:
|
|
199
131
|
|
|
200
132
|
```bash
|
|
201
|
-
zg query
|
|
133
|
+
zg query --human "An unseen creature left a few marks. What did the detective infer?" --limit 3
|
|
202
134
|
```
|
|
203
135
|
|
|
204
|
-
|
|
205
|
-
|
|
206
|
-
```bash
|
|
207
|
-
zg query \
|
|
208
|
-
--hybrid "authentication flow" \
|
|
209
|
-
--fts "AuthService" \
|
|
210
|
-
--vector "where credentials are validated" \
|
|
211
|
-
--fuse \
|
|
212
|
-
--limit 10
|
|
213
|
-
```
|
|
136
|
+
zg 会从四本小说中对相关段落进行排序,并将 `sherlock-holmes.txt` 中的证据排在前面。
|
|
214
137
|
|
|
215
|
-
|
|
138
|
+
<a id="benchmarks"></a>
|
|
216
139
|
|
|
217
|
-
|
|
218
|
-
zg query "cache invalidation" \
|
|
219
|
-
-g "src/**" \
|
|
220
|
-
-g "!test/**" \
|
|
221
|
-
-g "!tests/**" \
|
|
222
|
-
-g "!fixtures/**" \
|
|
223
|
-
-g "!dist/**" \
|
|
224
|
-
-t ts
|
|
225
|
-
```
|
|
140
|
+
## 📊 性能测试
|
|
226
141
|
|
|
227
|
-
|
|
228
|
-
只会选择 `docs` 目录下的 TypeScript 文件,而不是该目录里的所有文件。
|
|
142
|
+
zg 是通用检索工具,目前的性能测试覆盖代码与文本检索。
|
|
229
143
|
|
|
230
|
-
|
|
144
|
+
### 代码仓库检索
|
|
231
145
|
|
|
232
|
-
|
|
233
|
-
|
|
234
|
-
zg query "plugin lifecycle" --preview short --limit 5
|
|
235
|
-
zg query "plugin lifecycle" --preview full --limit 2
|
|
236
|
-
```
|
|
146
|
+
我们使用 [SWE-QA-Bench](https://github.com/peng-weihan/SWE-QA-Bench),它要求
|
|
147
|
+
Agent 在真实代码库中完成跨文件、多跳推理。
|
|
237
148
|
|
|
238
|
-
|
|
149
|
+
- **覆盖范围:**20 个检索密集型任务,覆盖论文中的 **What、Where、How、Why**
|
|
150
|
+
四个一级类别、8 种意图和 11 个代码仓库。
|
|
151
|
+
- **Agent:**使用 **Claude Opus 5** 的 Claude Code。
|
|
152
|
+
- **Embedding:**zg 方案使用 **Qwen3.7 Text Embedding**。
|
|
153
|
+
- **测试方式:**每个任务、每种方案运行 3 次。
|
|
239
154
|
|
|
240
|
-
|
|
241
|
-
|
|
242
|
-
|
|
243
|
-
|
|
155
|
+
| 方案 | 评审得分 /100 ↑ | 输入 Token ↓ | 工具调用 ↓ | 耗时(秒)↓ | 成本 ↓ |
|
|
156
|
+
| --- | ---: | ---: | ---: | ---: | ---: |
|
|
157
|
+
| 原生工具 | 80.42 | 558,651 | 23.42 | 127.5 | $0.905 |
|
|
158
|
+
| 原生工具 + zg | 81.92 | 294,262 | 9.70 | 79.7 | $0.558 |
|
|
159
|
+
| 变化 | **+1.50 个百分点** | **−47.3%** | **−58.6%** | **−37.5%** | **−38.3%** |
|
|
244
160
|
|
|
245
|
-
|
|
246
|
-
|
|
247
|
-
因此 `--json`、`--count`、`--files`、`-l`、`-o`、`--replace` 和
|
|
248
|
-
`--vimgrep` 等会改变输出形态的模式会被拒绝。`.git/**` 和
|
|
249
|
-
`.zvec-grep/**` 始终保持排除。
|
|
161
|
+
在 20 个任务 × 3 次运行中,zg 将评审得分提升了 1.50 分,同时将输入 Token
|
|
162
|
+
减少 47.3%、工具调用减少 58.6%、执行时间减少 37.5%、成本减少 38.3%。
|
|
250
163
|
|
|
251
|
-
|
|
164
|
+
### 大规模文本检索
|
|
252
165
|
|
|
253
|
-
|
|
254
|
-
|
|
166
|
+
我们使用 [BrowseComp-Plus](https://github.com/texttron/BrowseComp-Plus),它要求
|
|
167
|
+
Agent 从固定网页语料库中检索多文档证据。测试包含 30 个问题,覆盖 10 个映射主题
|
|
168
|
+
和三个证据广度级别,每种方案运行 3 次。
|
|
255
169
|
|
|
256
|
-
|
|
257
|
-
|
|
258
|
-
|
|
170
|
+
| 方案 | 准确率 ↑ | 证据召回率 ↑ | 搜索调用 ↓ | 输入 Token ↓ | 耗时(秒)↓ | 成本 ↓ |
|
|
171
|
+
| --- | ---: | ---: | ---: | ---: | ---: | ---: |
|
|
172
|
+
| Agent + BM25 | TBD | TBD | TBD | TBD | TBD | TBD |
|
|
173
|
+
| Agent + zg | TBD | TBD | TBD | TBD | TBD | TBD |
|
|
174
|
+
| 变化 | TBD | TBD | TBD | TBD | TBD | TBD |
|
|
259
175
|
|
|
260
|
-
|
|
261
|
-
|
|
262
|
-
limit: 5,
|
|
263
|
-
});
|
|
176
|
+
在 30 个问题 × 3 次运行中,zg 对准确率、证据召回率、搜索调用、输入 Token、
|
|
177
|
+
执行时间和成本的影响尚待测试结果补充。
|
|
264
178
|
|
|
265
|
-
|
|
266
|
-
|
|
267
|
-
|
|
268
|
-
? `${item.file.relativePath}:${item.range.startLine}`
|
|
269
|
-
: item.file.relativePath;
|
|
270
|
-
console.log(location);
|
|
271
|
-
}
|
|
179
|
+
如需复现测试,请按照[性能测试指南](./benchmarks/README.md)准备环境、固定版本、
|
|
180
|
+
任务清单、基线配置、运行命令和结果汇总。所有方案使用相同的 Agent、模型、Prompt、
|
|
181
|
+
工具预算和三次运行协议。
|
|
272
182
|
|
|
273
|
-
|
|
274
|
-
```
|
|
183
|
+
## 📚 文档
|
|
275
184
|
|
|
276
|
-
|
|
185
|
+
| 指南 | 你可以完成什么 |
|
|
186
|
+
| :--- | :--- |
|
|
187
|
+
| [Agent 集成](./docs/01-agents.md) | 将 zg 接入 Codex、Claude Code、Cursor 或 OpenCode,并验证是否正常工作。 |
|
|
188
|
+
| [CLI 指南](./docs/02-cli.md) | 在终端中搜索、索引和管理本地工作区。 |
|
|
189
|
+
| [MCP 指南](./docs/03-mcp.md) | 了解 Agent 可以使用哪些 zg 工具,以及访问权限如何受到保护。 |
|
|
190
|
+
| [检索 Pipeline](./docs/04-pipeline.md) | 选择索引范围、保持内容新鲜,并获得更好的检索结果。 |
|
|
191
|
+
| [架构](./docs/05-architecture.md) | 了解 zg 如何处理查询,以及数据会保留在哪里。 |
|
|
192
|
+
| [服务端与执行模式](./docs/06-server.md) | 在一次性命令和长期运行的本地服务之间选择。 |
|
|
193
|
+
| [Embedding 模型](./docs/07-embedding.md) | 根据速度、检索质量、隐私和本机硬件选择合适的模型。 |
|
|
194
|
+
| [Roadmap](./docs/08-roadmap.md) | 了解接下来的产品方向,并参与影响 zg 的优先级。 |
|
|
277
195
|
|
|
278
|
-
|
|
279
|
-
const result = await zvecGrep.context({
|
|
280
|
-
query: "ZVEC_GREP_HOME",
|
|
281
|
-
rg: true,
|
|
282
|
-
});
|
|
283
|
-
```
|
|
196
|
+
<a id="community"></a>
|
|
284
197
|
|
|
285
|
-
## 🤝
|
|
198
|
+
## 🤝 加入社区
|
|
286
199
|
|
|
287
200
|
<div align="center">
|
|
288
201
|
|
|
289
|
-
|
|
|
290
|
-
|
|
|
291
|
-
| <img src="https://zvec.oss-cn-hongkong.aliyuncs.com/qrcode/dingding.png" width="150" alt="钉钉二维码"/> | <img src="https://zvec.oss-cn-hongkong.aliyuncs.com/qrcode/wechat.png?
|
|
292
|
-
|
|
|
202
|
+
| 💬 钉钉群 | 📱 微信群 | 🎮 Discord | X (Twitter) |
|
|
203
|
+
| :---: | :---: | :---: | :---: |
|
|
204
|
+
| <img src="https://zvec.oss-cn-hongkong.aliyuncs.com/qrcode/dingding.png" width="150" alt="钉钉二维码"/> | <img src="https://zvec.oss-cn-hongkong.aliyuncs.com/qrcode/wechat.png?v1" width="150" alt="微信二维码"/> | [](https://discord.gg/rKddFBBu9z) | [](<https://x.com/ZvecAI>) |
|
|
205
|
+
| 扫码加入 | 扫码加入 | 点击加入 | 点击关注 |
|
|
293
206
|
|
|
294
207
|
</div>
|
|
295
208
|
|
|
296
209
|
## ❤️ 参与贡献
|
|
297
210
|
|
|
298
|
-
|
|
299
|
-
|
|
300
|
-
```bash
|
|
301
|
-
npm run check
|
|
302
|
-
```
|
|
211
|
+
始终欢迎社区贡献——缺陷修复、新功能和文档改进都会让 zvec-grep 变得更好。
|
|
303
212
|
|
|
304
|
-
|
|
213
|
+
请查阅我们的[贡献指南](./CONTRIBUTING.md)开始参与!
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
export { RemoteEmbeddingAuthorizationManager } from "./manager.js";
|
|
2
|
+
export { createRemoteEmbeddingOperationPermit, remoteEmbeddingAuthorizationGuard, withRemoteEmbeddingOperationPermit, } from "./operation.js";
|
|
3
|
+
export { RemoteEmbeddingAuthorizationStore } from "./store.js";
|
|
4
|
+
export { formatRemoteEmbeddingAuthorizationPrompt, remoteEmbeddingDisclosureData, type RemoteEmbeddingAuthorizationPromptInput, } from "./prompt.js";
|
|
5
|
+
export { indexStatusIsFresh, planRemoteIndexAuthorization, planRemoteSearchAuthorization, searchUsesVector, } from "./planner.js";
|
|
6
|
+
export { canonicalizeWorkspaceRoots, createRemoteEmbeddingTarget, remoteEmbeddingTargetFingerprint, workspaceFingerprint, } from "./target.js";
|
|
7
|
+
export type { RemoteEmbeddingAuthorizationPlan, RemoteEmbeddingAuthorizationScope, RemoteEmbeddingAuthorizationStatus, RemoteEmbeddingDataDisclosure, RemoteEmbeddingOperation, RemoteEmbeddingOperationPermit, RemoteEmbeddingTarget, RemoteEmbeddingWorkspaceGrant, } from "./types.js";
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
export { RemoteEmbeddingAuthorizationManager } from "./manager.js";
|
|
2
|
+
export { createRemoteEmbeddingOperationPermit, remoteEmbeddingAuthorizationGuard, withRemoteEmbeddingOperationPermit, } from "./operation.js";
|
|
3
|
+
export { RemoteEmbeddingAuthorizationStore } from "./store.js";
|
|
4
|
+
export { formatRemoteEmbeddingAuthorizationPrompt, remoteEmbeddingDisclosureData, } from "./prompt.js";
|
|
5
|
+
export { indexStatusIsFresh, planRemoteIndexAuthorization, planRemoteSearchAuthorization, searchUsesVector, } from "./planner.js";
|
|
6
|
+
export { canonicalizeWorkspaceRoots, createRemoteEmbeddingTarget, remoteEmbeddingTargetFingerprint, workspaceFingerprint, } from "./target.js";
|
|
7
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/authorization/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,mCAAmC,EAAE,MAAM,cAAc,CAAC;AACnE,OAAO,EACL,oCAAoC,EACpC,iCAAiC,EACjC,kCAAkC,GACnC,MAAM,gBAAgB,CAAC;AACxB,OAAO,EAAE,iCAAiC,EAAE,MAAM,YAAY,CAAC;AAC/D,OAAO,EACL,wCAAwC,EACxC,6BAA6B,GAE9B,MAAM,aAAa,CAAC;AACrB,OAAO,EACL,kBAAkB,EAClB,4BAA4B,EAC5B,6BAA6B,EAC7B,gBAAgB,GACjB,MAAM,cAAc,CAAC;AACtB,OAAO,EACL,0BAA0B,EAC1B,2BAA2B,EAC3B,gCAAgC,EAChC,oBAAoB,GACrB,MAAM,aAAa,CAAC"}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import { RemoteEmbeddingAuthorizationStore } from "./store.js";
|
|
2
|
+
import type { RemoteEmbeddingAuthorizationPlan, RemoteEmbeddingAuthorizationScope, RemoteEmbeddingOperationPermit } from "./types.js";
|
|
3
|
+
export declare class RemoteEmbeddingAuthorizationManager {
|
|
4
|
+
readonly store: RemoteEmbeddingAuthorizationStore;
|
|
5
|
+
constructor(store?: RemoteEmbeddingAuthorizationStore);
|
|
6
|
+
existingWorkspacePermit(plan: RemoteEmbeddingAuthorizationPlan): Promise<RemoteEmbeddingOperationPermit | undefined>;
|
|
7
|
+
grant(plan: RemoteEmbeddingAuthorizationPlan, scope: RemoteEmbeddingAuthorizationScope): Promise<RemoteEmbeddingOperationPermit>;
|
|
8
|
+
}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
import { createRemoteEmbeddingOperationPermit } from "./operation.js";
|
|
2
|
+
import { RemoteEmbeddingAuthorizationStore } from "./store.js";
|
|
3
|
+
export class RemoteEmbeddingAuthorizationManager {
|
|
4
|
+
store;
|
|
5
|
+
constructor(store = new RemoteEmbeddingAuthorizationStore()) {
|
|
6
|
+
this.store = store;
|
|
7
|
+
}
|
|
8
|
+
async existingWorkspacePermit(plan) {
|
|
9
|
+
if (!(await this.store.hasGrant(plan.target)))
|
|
10
|
+
return undefined;
|
|
11
|
+
return createRemoteEmbeddingOperationPermit(plan.target, "workspace");
|
|
12
|
+
}
|
|
13
|
+
async grant(plan, scope) {
|
|
14
|
+
if (scope === "workspace")
|
|
15
|
+
await this.store.grant(plan.target);
|
|
16
|
+
return createRemoteEmbeddingOperationPermit(plan.target, scope);
|
|
17
|
+
}
|
|
18
|
+
}
|
|
19
|
+
//# sourceMappingURL=manager.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"manager.js","sourceRoot":"","sources":["../../src/authorization/manager.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,oCAAoC,EAAE,MAAM,gBAAgB,CAAC;AACtE,OAAO,EAAE,iCAAiC,EAAE,MAAM,YAAY,CAAC;AAO/D,MAAM,OAAO,mCAAmC;IACrC,KAAK,CAAoC;IAElD,YAAY,KAAK,GAAG,IAAI,iCAAiC,EAAE;QACzD,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC;IACrB,CAAC;IAED,KAAK,CAAC,uBAAuB,CAC3B,IAAsC;QAEtC,IAAI,CAAC,CAAC,MAAM,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;YAAE,OAAO,SAAS,CAAC;QAChE,OAAO,oCAAoC,CAAC,IAAI,CAAC,MAAM,EAAE,WAAW,CAAC,CAAC;IACxE,CAAC;IAED,KAAK,CAAC,KAAK,CACT,IAAsC,EACtC,KAAwC;QAExC,IAAI,KAAK,KAAK,WAAW;YAAE,MAAM,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;QAC/D,OAAO,oCAAoC,CAAC,IAAI,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC;IAClE,CAAC;CACF"}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import { RemoteEmbeddingAuthorizationStore } from "./store.js";
|
|
2
|
+
import { type RemoteEmbeddingAuthorizationScope, type RemoteEmbeddingOperationPermit, type RemoteEmbeddingRequest, type RemoteEmbeddingTarget } from "./types.js";
|
|
3
|
+
export declare function createRemoteEmbeddingOperationPermit(target: RemoteEmbeddingTarget, scope: RemoteEmbeddingAuthorizationScope): RemoteEmbeddingOperationPermit;
|
|
4
|
+
export declare function withRemoteEmbeddingOperationPermit<T>(permit: RemoteEmbeddingOperationPermit | undefined, operation: () => Promise<T>): Promise<T>;
|
|
5
|
+
export declare function remoteEmbeddingAuthorizationGuard(options?: {
|
|
6
|
+
store?: RemoteEmbeddingAuthorizationStore;
|
|
7
|
+
}): (request: RemoteEmbeddingRequest) => Promise<void>;
|
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
import { AsyncLocalStorage } from "node:async_hooks";
|
|
2
|
+
import { randomUUID } from "node:crypto";
|
|
3
|
+
import { EngineError } from "../engine/errors.js";
|
|
4
|
+
import { RemoteEmbeddingAuthorizationStore } from "./store.js";
|
|
5
|
+
import { REMOTE_EMBEDDING_CAPABILITY, } from "./types.js";
|
|
6
|
+
const operationPermit = new AsyncLocalStorage();
|
|
7
|
+
export function createRemoteEmbeddingOperationPermit(target, scope) {
|
|
8
|
+
return {
|
|
9
|
+
capability: REMOTE_EMBEDDING_CAPABILITY,
|
|
10
|
+
scope,
|
|
11
|
+
target,
|
|
12
|
+
issuedAt: Date.now(),
|
|
13
|
+
operationId: randomUUID(),
|
|
14
|
+
};
|
|
15
|
+
}
|
|
16
|
+
export async function withRemoteEmbeddingOperationPermit(permit, operation) {
|
|
17
|
+
if (!permit)
|
|
18
|
+
return await operation();
|
|
19
|
+
return await operationPermit.run(permit, operation);
|
|
20
|
+
}
|
|
21
|
+
export function remoteEmbeddingAuthorizationGuard(options = {}) {
|
|
22
|
+
const store = options.store ?? new RemoteEmbeddingAuthorizationStore();
|
|
23
|
+
return async (request) => {
|
|
24
|
+
const permit = operationPermit.getStore();
|
|
25
|
+
if (!permit ||
|
|
26
|
+
permit.capability !== REMOTE_EMBEDDING_CAPABILITY ||
|
|
27
|
+
permit.target.provider !== request.provider ||
|
|
28
|
+
permit.target.model !== request.model ||
|
|
29
|
+
permit.target.endpoint !== request.endpoint) {
|
|
30
|
+
throw authorizationRequiredError(request);
|
|
31
|
+
}
|
|
32
|
+
if (permit.scope === "workspace" &&
|
|
33
|
+
!(await store.hasGrant(permit.target))) {
|
|
34
|
+
throw authorizationRequiredError(request, "Workspace grant is missing, invalid, or revoked.");
|
|
35
|
+
}
|
|
36
|
+
};
|
|
37
|
+
}
|
|
38
|
+
function authorizationRequiredError(request, detail) {
|
|
39
|
+
return new EngineError("Remote Embedding authorization is required", {
|
|
40
|
+
code: "ZVEC_GREP.ENGINE.AUTH.REMOTE_EMBEDDING_REQUIRED",
|
|
41
|
+
context: [
|
|
42
|
+
`provider=${request.provider}`,
|
|
43
|
+
`model=${request.model}`,
|
|
44
|
+
`endpoint=${request.endpoint}`,
|
|
45
|
+
`purpose=${request.purpose}`,
|
|
46
|
+
...(detail ? [`detail=${detail}`] : []),
|
|
47
|
+
].join(" "),
|
|
48
|
+
});
|
|
49
|
+
}
|
|
50
|
+
//# sourceMappingURL=operation.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"operation.js","sourceRoot":"","sources":["../../src/authorization/operation.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,iBAAiB,EAAE,MAAM,kBAAkB,CAAC;AACrD,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AACzC,OAAO,EAAE,WAAW,EAAE,MAAM,qBAAqB,CAAC;AAClD,OAAO,EAAE,iCAAiC,EAAE,MAAM,YAAY,CAAC;AAC/D,OAAO,EACL,2BAA2B,GAK5B,MAAM,YAAY,CAAC;AAEpB,MAAM,eAAe,GAAG,IAAI,iBAAiB,EAAkC,CAAC;AAEhF,MAAM,UAAU,oCAAoC,CAClD,MAA6B,EAC7B,KAAwC;IAExC,OAAO;QACL,UAAU,EAAE,2BAA2B;QACvC,KAAK;QACL,MAAM;QACN,QAAQ,EAAE,IAAI,CAAC,GAAG,EAAE;QACpB,WAAW,EAAE,UAAU,EAAE;KAC1B,CAAC;AACJ,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,kCAAkC,CACtD,MAAkD,EAClD,SAA2B;IAE3B,IAAI,CAAC,MAAM;QAAE,OAAO,MAAM,SAAS,EAAE,CAAC;IACtC,OAAO,MAAM,eAAe,CAAC,GAAG,CAAC,MAAM,EAAE,SAAS,CAAC,CAAC;AACtD,CAAC;AAED,MAAM,UAAU,iCAAiC,CAC/C,UAEI,EAAE;IAEN,MAAM,KAAK,GAAG,OAAO,CAAC,KAAK,IAAI,IAAI,iCAAiC,EAAE,CAAC;IACvE,OAAO,KAAK,EAAE,OAAO,EAAE,EAAE;QACvB,MAAM,MAAM,GAAG,eAAe,CAAC,QAAQ,EAAE,CAAC;QAC1C,IACE,CAAC,MAAM;YACP,MAAM,CAAC,UAAU,KAAK,2BAA2B;YACjD,MAAM,CAAC,MAAM,CAAC,QAAQ,KAAK,OAAO,CAAC,QAAQ;YAC3C,MAAM,CAAC,MAAM,CAAC,KAAK,KAAK,OAAO,CAAC,KAAK;YACrC,MAAM,CAAC,MAAM,CAAC,QAAQ,KAAK,OAAO,CAAC,QAAQ,EAC3C,CAAC;YACD,MAAM,0BAA0B,CAAC,OAAO,CAAC,CAAC;QAC5C,CAAC;QACD,IACE,MAAM,CAAC,KAAK,KAAK,WAAW;YAC5B,CAAC,CAAC,MAAM,KAAK,CAAC,QAAQ,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,EACtC,CAAC;YACD,MAAM,0BAA0B,CAC9B,OAAO,EACP,kDAAkD,CACnD,CAAC;QACJ,CAAC;IACH,CAAC,CAAC;AACJ,CAAC;AAED,SAAS,0BAA0B,CACjC,OAA+B,EAC/B,MAAe;IAEf,OAAO,IAAI,WAAW,CAAC,4CAA4C,EAAE;QACnE,IAAI,EAAE,iDAAiD;QACvD,OAAO,EAAE;YACP,YAAY,OAAO,CAAC,QAAQ,EAAE;YAC9B,SAAS,OAAO,CAAC,KAAK,EAAE;YACxB,YAAY,OAAO,CAAC,QAAQ,EAAE;YAC9B,WAAW,OAAO,CAAC,OAAO,EAAE;YAC5B,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,UAAU,MAAM,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;SACxC,CAAC,IAAI,CAAC,GAAG,CAAC;KACZ,CAAC,CAAC;AACL,CAAC"}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
import type { NormalizedSearchInput } from "../mcp/input-normalization.js";
|
|
2
|
+
import type { EmbeddingModelInfo } from "../engine/models/index.js";
|
|
3
|
+
import type { ZvecGrepInfoResult } from "../engine/service/types.js";
|
|
4
|
+
import { RemoteEmbeddingAuthorizationStore } from "./store.js";
|
|
5
|
+
import type { RemoteEmbeddingAuthorizationPlan } from "./types.js";
|
|
6
|
+
export declare function planRemoteIndexAuthorization(input: {
|
|
7
|
+
info: ZvecGrepInfoResult;
|
|
8
|
+
model: EmbeddingModelInfo;
|
|
9
|
+
rebuild?: boolean;
|
|
10
|
+
needsUpdate?: boolean;
|
|
11
|
+
store?: RemoteEmbeddingAuthorizationStore;
|
|
12
|
+
}): Promise<RemoteEmbeddingAuthorizationPlan | undefined>;
|
|
13
|
+
export declare function planRemoteSearchAuthorization(input: {
|
|
14
|
+
info: ZvecGrepInfoResult;
|
|
15
|
+
model: EmbeddingModelInfo;
|
|
16
|
+
search: NormalizedSearchInput;
|
|
17
|
+
runtimeNeedsReconciliation?: boolean;
|
|
18
|
+
store?: RemoteEmbeddingAuthorizationStore;
|
|
19
|
+
}): Promise<RemoteEmbeddingAuthorizationPlan | undefined>;
|
|
20
|
+
export declare function searchUsesVector(input: Pick<NormalizedSearchInput, "queries" | "routes">): boolean;
|
|
21
|
+
export declare function indexStatusIsFresh(info: ZvecGrepInfoResult): boolean;
|