@zvec/zvec-grep 0.1.6 → 0.1.8
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 +88 -52
- package/README_CN.md +85 -49
- package/dist/cli/args.js +40 -7
- package/dist/cli/args.js.map +1 -1
- package/dist/cli/auth.js +1 -4
- package/dist/cli/auth.js.map +1 -1
- package/dist/cli/commands.js +53 -24
- package/dist/cli/commands.js.map +1 -1
- package/dist/cli/format/context.d.ts +3 -0
- package/dist/cli/format/context.js +93 -22
- package/dist/cli/format/context.js.map +1 -1
- package/dist/cli/format/debug.js +10 -4
- package/dist/cli/format/debug.js.map +1 -1
- package/dist/cli/format/status.d.ts +3 -1
- package/dist/cli/format/status.js +34 -0
- package/dist/cli/format/status.js.map +1 -1
- package/dist/cli/help.js +149 -16
- package/dist/cli/help.js.map +1 -1
- package/dist/cli/index.d.ts +1 -1
- package/dist/cli/index.js +1 -1
- package/dist/cli/install.js +174 -56
- package/dist/cli/install.js.map +1 -1
- package/dist/cli/server-search.d.ts +3 -0
- package/dist/cli/server-search.js +12 -0
- package/dist/cli/server-search.js.map +1 -0
- package/dist/cli/types.d.ts +3 -0
- package/dist/cli/types.js.map +1 -1
- package/dist/client/daemon-client.d.ts +12 -0
- package/dist/client/daemon-client.js +23 -0
- package/dist/client/daemon-client.js.map +1 -1
- package/dist/daemon/backend.d.ts +2 -0
- package/dist/daemon/backend.js +121 -90
- package/dist/daemon/backend.js.map +1 -1
- package/dist/daemon/change-set.d.ts +5 -0
- package/dist/daemon/change-set.js +75 -13
- package/dist/daemon/change-set.js.map +1 -1
- package/dist/daemon/http-server.js +1 -0
- package/dist/daemon/http-server.js.map +1 -1
- package/dist/daemon/index-coordinator.d.ts +3 -4
- package/dist/daemon/index-coordinator.js +8 -21
- package/dist/daemon/index-coordinator.js.map +1 -1
- package/dist/daemon/root-runtime.js +2 -2
- package/dist/daemon/root-runtime.js.map +1 -1
- package/dist/daemon/runtime-manager.d.ts +1 -0
- package/dist/daemon/runtime-manager.js +4 -1
- package/dist/daemon/runtime-manager.js.map +1 -1
- package/dist/daemon/server-controller.js +138 -14
- package/dist/daemon/server-controller.js.map +1 -1
- package/dist/daemon/watch-manager.d.ts +5 -0
- package/dist/daemon/watch-manager.js +68 -21
- package/dist/daemon/watch-manager.js.map +1 -1
- package/dist/engine/code-formats.d.ts +3 -0
- package/dist/engine/code-formats.js +14 -0
- package/dist/engine/code-formats.js.map +1 -0
- package/dist/engine/extraction/code/adapter.js +1 -1
- package/dist/engine/extraction/code/adapter.js.map +1 -1
- package/dist/engine/extraction/code/extractor.d.ts +5 -0
- package/dist/engine/extraction/code/extractor.js +53 -26
- package/dist/engine/extraction/code/extractor.js.map +1 -1
- package/dist/engine/extraction/index.d.ts +2 -1
- package/dist/engine/extraction/index.js +2 -1
- package/dist/engine/extraction/index.js.map +1 -1
- package/dist/engine/extraction/markdown/extractor.js +5 -3
- package/dist/engine/extraction/markdown/extractor.js.map +1 -1
- package/dist/engine/extraction/runtime.d.ts +6 -1
- package/dist/engine/extraction/runtime.js +11 -0
- package/dist/engine/extraction/runtime.js.map +1 -1
- package/dist/engine/extraction/vector-content.d.ts +5 -0
- package/dist/engine/extraction/vector-content.js +83 -0
- package/dist/engine/extraction/vector-content.js.map +1 -0
- package/dist/engine/file-size-policy.d.ts +6 -0
- package/dist/engine/file-size-policy.js +20 -0
- package/dist/engine/file-size-policy.js.map +1 -0
- package/dist/engine/file-type.d.ts +10 -0
- package/dist/engine/file-type.js +71 -38
- package/dist/engine/file-type.js.map +1 -1
- package/dist/engine/manifest.d.ts +1 -0
- package/dist/engine/manifest.js +4 -0
- package/dist/engine/manifest.js.map +1 -1
- package/dist/engine/models/backends/model2vec-runtime.d.ts +63 -0
- package/dist/engine/models/backends/model2vec-runtime.js +112 -0
- package/dist/engine/models/backends/model2vec-runtime.js.map +1 -0
- package/dist/engine/models/backends/model2vec-tokenizer.d.ts +2 -0
- package/dist/engine/models/backends/model2vec-tokenizer.js +42 -0
- package/dist/engine/models/backends/model2vec-tokenizer.js.map +1 -0
- package/dist/engine/models/backends/model2vec-worker-pool.d.ts +25 -0
- package/dist/engine/models/backends/model2vec-worker-pool.js +264 -0
- package/dist/engine/models/backends/model2vec-worker-pool.js.map +1 -0
- package/dist/engine/models/backends/model2vec-worker.d.ts +1 -0
- package/dist/engine/models/backends/model2vec-worker.js +41 -0
- package/dist/engine/models/backends/model2vec-worker.js.map +1 -0
- package/dist/engine/models/backends/model2vec.d.ts +3 -20
- package/dist/engine/models/backends/model2vec.js +107 -128
- package/dist/engine/models/backends/model2vec.js.map +1 -1
- package/dist/engine/models/catalog.d.ts +26 -7
- package/dist/engine/models/catalog.js +26 -7
- package/dist/engine/models/catalog.js.map +1 -1
- package/dist/engine/models/embeddings.d.ts +1 -0
- package/dist/engine/models/embeddings.js.map +1 -1
- package/dist/engine/models/resolution.js +1 -1
- package/dist/engine/models/resolution.js.map +1 -1
- package/dist/engine/pipeline/indexing/index.js +102 -78
- package/dist/engine/pipeline/indexing/index.js.map +1 -1
- package/dist/engine/pipeline/indexing/input-budget.d.ts +2 -0
- package/dist/engine/pipeline/indexing/input-budget.js +51 -0
- package/dist/engine/pipeline/indexing/input-budget.js.map +1 -0
- package/dist/engine/pipeline/indexing/scanner/index.d.ts +5 -1
- package/dist/engine/pipeline/indexing/scanner/index.js +129 -20
- package/dist/engine/pipeline/indexing/scanner/index.js.map +1 -1
- package/dist/engine/pipeline/search/index.js.map +1 -1
- package/dist/engine/service/index.d.ts +1 -1
- package/dist/engine/service/root.d.ts +1 -4
- package/dist/engine/service/root.js +15 -22
- package/dist/engine/service/root.js.map +1 -1
- package/dist/engine/service/structure-enrichment.d.ts +1 -1
- package/dist/engine/service/structure-enrichment.js +10 -10
- package/dist/engine/service/structure-enrichment.js.map +1 -1
- package/dist/engine/service/types.d.ts +8 -1
- package/dist/engine/service/workspace-index.d.ts +6 -4
- package/dist/engine/service/workspace-index.js +18 -12
- package/dist/engine/service/workspace-index.js.map +1 -1
- package/dist/engine/service/zvec-grep.js +47 -29
- package/dist/engine/service/zvec-grep.js.map +1 -1
- package/dist/engine/storage/index.d.ts +28 -21
- package/dist/engine/storage/index.js +2 -1
- package/dist/engine/storage/index.js.map +1 -1
- package/dist/engine/storage/layout.d.ts +10 -0
- package/dist/engine/storage/layout.js +29 -0
- package/dist/engine/storage/layout.js.map +1 -0
- package/dist/engine/storage/zvec.d.ts +2 -42
- package/dist/engine/storage/zvec.js +62 -71
- package/dist/engine/storage/zvec.js.map +1 -1
- package/dist/engine/types.d.ts +14 -0
- package/dist/engine/types.js.map +1 -1
- package/dist/index.d.ts +2 -2
- package/dist/index.js.map +1 -1
- package/dist/mcp/input-normalization.d.ts +2 -2
- package/dist/mcp/input-normalization.js +14 -5
- package/dist/mcp/input-normalization.js.map +1 -1
- package/dist/mcp/schemas.d.ts +242 -0
- package/dist/mcp/schemas.js +73 -14
- package/dist/mcp/schemas.js.map +1 -1
- package/dist/mcp/stdio-bridge.d.ts +11 -0
- package/dist/mcp/stdio-bridge.js +134 -0
- package/dist/mcp/stdio-bridge.js.map +1 -0
- package/dist/mcp/tools.d.ts +4 -1
- package/dist/mcp/tools.js +78 -44
- package/dist/mcp/tools.js.map +1 -1
- package/dist/prompts/zvec-grep-guidance.d.ts +2 -0
- package/dist/prompts/zvec-grep-guidance.js +9 -0
- package/dist/prompts/zvec-grep-guidance.js.map +1 -0
- package/docs/01-agents.md +26 -5
- package/docs/02-cli.md +11 -1
- package/docs/03-mcp.md +29 -11
- package/docs/04-pipeline.md +10 -2
- package/docs/06-server.md +9 -0
- package/docs/07-embedding.md +6 -3
- package/package.json +5 -4
- package/skills/zvec-grep/SKILL.md +0 -61
- package/skills/zvec-grep/agents/openai.yaml +0 -4
- package/skills/zvec-grep/references/cli-fallback.md +0 -85
|
@@ -2,18 +2,18 @@ import { readFile, stat } from "node:fs/promises";
|
|
|
2
2
|
import { relative } from "node:path";
|
|
3
3
|
import { extract } from "../extraction/index.js";
|
|
4
4
|
import { detectFileType } from "../file-type.js";
|
|
5
|
+
import { resolveMaxFileSizeBytes } from "../file-size-policy.js";
|
|
5
6
|
import { normalizePath, toDisplayPath } from "../utils/path.js";
|
|
6
7
|
import { sha256Text } from "../utils/hash.js";
|
|
7
8
|
export const RG_STRUCTURE_ENRICH_FILE_LIMIT = 100;
|
|
8
9
|
const STRUCTURE_ENRICH_FILE_ID_NAMESPACE = "__rg_structure__";
|
|
9
|
-
|
|
10
|
-
export async function enrichLexicalItemsWithStructure(root, items, fileLimit = RG_STRUCTURE_ENRICH_FILE_LIMIT) {
|
|
10
|
+
export async function enrichLexicalItemsWithStructure(root, items, fileLimit = RG_STRUCTURE_ENRICH_FILE_LIMIT, maxFileSizeBytes) {
|
|
11
11
|
const matchedFiles = uniqueLexicalFilePaths(items);
|
|
12
12
|
const selectedFiles = new Set(matchedFiles.slice(0, fileLimit));
|
|
13
13
|
const fragmentsByFile = new Map();
|
|
14
14
|
let parsedFiles = 0;
|
|
15
15
|
for (const absolutePath of selectedFiles) {
|
|
16
|
-
const fragments = await parseStructuralFragments(root, absolutePath);
|
|
16
|
+
const fragments = await parseStructuralFragments(root, absolutePath, maxFileSizeBytes);
|
|
17
17
|
fragmentsByFile.set(absolutePath, fragments);
|
|
18
18
|
if (fragments !== null) {
|
|
19
19
|
parsedFiles++;
|
|
@@ -79,9 +79,9 @@ function uniqueLexicalFilePaths(items) {
|
|
|
79
79
|
}
|
|
80
80
|
return paths;
|
|
81
81
|
}
|
|
82
|
-
async function parseStructuralFragments(root, absolutePath) {
|
|
82
|
+
async function parseStructuralFragments(root, absolutePath, maxFileSizeBytes) {
|
|
83
83
|
try {
|
|
84
|
-
const file = await fileInfoForStructure(root, absolutePath);
|
|
84
|
+
const file = await fileInfoForStructure(root, absolutePath, maxFileSizeBytes);
|
|
85
85
|
if (!file) {
|
|
86
86
|
return null;
|
|
87
87
|
}
|
|
@@ -102,18 +102,18 @@ async function parseStructuralFragments(root, absolutePath) {
|
|
|
102
102
|
function isStructuralFragment(fragment) {
|
|
103
103
|
return (fragment.metadata?.kind === "code" || fragment.metadata?.kind === "markdown");
|
|
104
104
|
}
|
|
105
|
-
async function fileInfoForStructure(root, absolutePath) {
|
|
105
|
+
async function fileInfoForStructure(root, absolutePath, maxFileSizeBytes) {
|
|
106
106
|
const info = await stat(absolutePath).catch(() => null);
|
|
107
|
-
if (!info ||
|
|
108
|
-
!info.isFile() ||
|
|
109
|
-
info.size <= 0 ||
|
|
110
|
-
info.size > STRUCTURE_ENRICH_MAX_FILE_SIZE_BYTES) {
|
|
107
|
+
if (!info || !info.isFile() || info.size <= 0) {
|
|
111
108
|
return null;
|
|
112
109
|
}
|
|
113
110
|
const detected = detectFileType(absolutePath);
|
|
114
111
|
if (!detected || !isStructurallyEnrichableFile(detected)) {
|
|
115
112
|
return null;
|
|
116
113
|
}
|
|
114
|
+
if (info.size > resolveMaxFileSizeBytes(detected.kind, maxFileSizeBytes)) {
|
|
115
|
+
return null;
|
|
116
|
+
}
|
|
117
117
|
return {
|
|
118
118
|
id: makeStructureFileId(absolutePath),
|
|
119
119
|
absolutePath: normalizePath(absolutePath),
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"structure-enrichment.js","sourceRoot":"","sources":["../../../src/engine/service/structure-enrichment.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,IAAI,EAAE,MAAM,kBAAkB,CAAC;AAClD,OAAO,EAAE,QAAQ,EAAE,MAAM,WAAW,CAAC;AACrC,OAAO,EAAE,OAAO,EAAE,MAAM,wBAAwB,CAAC;AAOjD,OAAO,EAAE,cAAc,EAAE,MAAM,iBAAiB,CAAC;AACjD,OAAO,EAAE,aAAa,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAC;AAChE,OAAO,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAE9C,MAAM,CAAC,MAAM,8BAA8B,GAAG,GAAG,CAAC;AAOlD,MAAM,kCAAkC,GAAG,kBAAkB,CAAC;AAC9D,MAAM,
|
|
1
|
+
{"version":3,"file":"structure-enrichment.js","sourceRoot":"","sources":["../../../src/engine/service/structure-enrichment.ts"],"names":[],"mappings":"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"}
|
|
@@ -11,7 +11,6 @@ export type CreateZvecGrepOptions = {
|
|
|
11
11
|
endpoint?: string;
|
|
12
12
|
modelCacheDir?: string;
|
|
13
13
|
device?: "auto" | "cpu" | "metal" | "vulkan" | "cuda";
|
|
14
|
-
defaultEmbedding?: boolean;
|
|
15
14
|
authorizationSigningKeyPath?: string;
|
|
16
15
|
};
|
|
17
16
|
export type ZvecGrepIndexOptions = {
|
|
@@ -137,6 +136,12 @@ export type ZvecGrepContextItem = {
|
|
|
137
136
|
selectionReason?: ZvecGrepContextSelectionReason;
|
|
138
137
|
coverageGroup?: string;
|
|
139
138
|
};
|
|
139
|
+
export type ZvecGrepContextGroupResult = {
|
|
140
|
+
id: string;
|
|
141
|
+
query: string;
|
|
142
|
+
role: "primary" | "supplemental";
|
|
143
|
+
items: ZvecGrepContextItem[];
|
|
144
|
+
};
|
|
140
145
|
export type ZvecGrepContextWorkspaceIndex = {
|
|
141
146
|
id: string;
|
|
142
147
|
name: string;
|
|
@@ -189,6 +194,8 @@ export type ZvecGrepContextResult = {
|
|
|
189
194
|
coverage: ZvecGrepContextCoverage;
|
|
190
195
|
workspaceIndex?: ZvecGrepContextWorkspaceIndex;
|
|
191
196
|
items: ZvecGrepContextItem[];
|
|
197
|
+
/** Per-query-group recall lists before cross-group deduplication and reranking. */
|
|
198
|
+
groupResults?: ZvecGrepContextGroupResult[];
|
|
192
199
|
diagnostics: ZvecGrepContextDiagnostics;
|
|
193
200
|
};
|
|
194
201
|
export type ZvecGrep = {
|
|
@@ -1,14 +1,16 @@
|
|
|
1
1
|
import type { EmbeddingModel } from "../models/index.js";
|
|
2
2
|
import type { WorkspaceIndexEmbeddingSchema, WorkspaceIndexStatus, WorkspaceIndexInfo, IndexOptions, IndexResult, SearchPlan, SearchPlanResult } from "../types.js";
|
|
3
|
+
export type WorkspaceIndexOptions = {
|
|
4
|
+
mode: "read" | "write";
|
|
5
|
+
embeddingModel?: EmbeddingModel;
|
|
6
|
+
};
|
|
3
7
|
export declare class WorkspaceIndex {
|
|
4
8
|
readonly info: WorkspaceIndexInfo;
|
|
5
|
-
private readonly embeddingModel?;
|
|
6
|
-
private readonly readOnly;
|
|
7
|
-
private readonly fileStorePath;
|
|
8
9
|
private readonly storage;
|
|
9
10
|
private readonly embedding;
|
|
11
|
+
private readonly embeddingModel?;
|
|
10
12
|
private closed;
|
|
11
|
-
constructor(info: WorkspaceIndexInfo,
|
|
13
|
+
constructor(info: WorkspaceIndexInfo, options: WorkspaceIndexOptions);
|
|
12
14
|
get name(): string;
|
|
13
15
|
index(options?: IndexOptions): Promise<IndexResult>;
|
|
14
16
|
status(): Promise<WorkspaceIndexStatus>;
|
|
@@ -1,35 +1,41 @@
|
|
|
1
|
-
import { join } from "node:path";
|
|
2
1
|
import { workspaceIndexDetail, detail, EngineError, errorDetails, } from "../errors.js";
|
|
3
2
|
import { getWorkspaceIndexStatus, indexWorkspace, indexWorkspacePaths, } from "../pipeline/indexing/index.js";
|
|
4
3
|
import { searchWorkspaceIndex } from "../pipeline/search/index.js";
|
|
5
|
-
import {
|
|
4
|
+
import { createWorkspaceIndexStorage, } from "../storage/index.js";
|
|
6
5
|
import { CURRENT_INDEX_VERSION } from "../types.js";
|
|
7
|
-
const FILES_ZVEC = "files.zvec";
|
|
8
6
|
export class WorkspaceIndex {
|
|
9
7
|
info;
|
|
10
|
-
embeddingModel;
|
|
11
|
-
readOnly;
|
|
12
|
-
fileStorePath;
|
|
13
8
|
storage;
|
|
14
9
|
embedding;
|
|
10
|
+
embeddingModel;
|
|
15
11
|
closed = false;
|
|
16
|
-
constructor(info,
|
|
12
|
+
constructor(info, options) {
|
|
17
13
|
this.info = info;
|
|
18
|
-
this.embeddingModel = embeddingModel;
|
|
19
|
-
this.readOnly = readOnly;
|
|
20
|
-
this.fileStorePath = fileStorePath;
|
|
14
|
+
this.embeddingModel = options.embeddingModel;
|
|
21
15
|
this.embedding = requireWorkspaceIndexEmbedding(info, "open");
|
|
22
16
|
this.validateIndexVersion();
|
|
23
17
|
if (this.embeddingModel) {
|
|
24
18
|
this.validateEmbeddingSchema(this.embeddingModel);
|
|
25
19
|
}
|
|
26
|
-
|
|
20
|
+
if (options.mode === "write") {
|
|
21
|
+
this.storage = createWorkspaceIndexStorage({
|
|
22
|
+
storagePath: info.path,
|
|
23
|
+
readOnly: false,
|
|
24
|
+
embedding: this.embedding,
|
|
25
|
+
});
|
|
26
|
+
}
|
|
27
|
+
else {
|
|
28
|
+
this.storage = createWorkspaceIndexStorage({
|
|
29
|
+
storagePath: info.path,
|
|
30
|
+
readOnly: true,
|
|
31
|
+
});
|
|
32
|
+
}
|
|
27
33
|
}
|
|
28
34
|
get name() {
|
|
29
35
|
return this.info.name;
|
|
30
36
|
}
|
|
31
37
|
index(options = {}) {
|
|
32
|
-
if (this.readOnly) {
|
|
38
|
+
if (this.storage.readOnly) {
|
|
33
39
|
throw new EngineError("Cannot update a read-only workspace index", {
|
|
34
40
|
code: "ZVEC_GREP.ENGINE.WORKSPACE_INDEX.READ_ONLY",
|
|
35
41
|
context: workspaceIndexOperationDetails(this.name, "index"),
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"workspace-index.js","sourceRoot":"","sources":["../../../src/engine/service/workspace-index.ts"],"names":[],"mappings":"AAAA,OAAO,
|
|
1
|
+
{"version":3,"file":"workspace-index.js","sourceRoot":"","sources":["../../../src/engine/service/workspace-index.ts"],"names":[],"mappings":"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"}
|
|
@@ -9,7 +9,7 @@ import { CURRENT_INDEX_VERSION } from "../types.js";
|
|
|
9
9
|
import { indexStatusNeedsRefresh } from "../index-status.js";
|
|
10
10
|
import { workspaceIndexInfoFromManifest, CURRENT_MANIFEST_VERSION, readWorkspaceManifest, writeWorkspaceManifest, } from "../manifest.js";
|
|
11
11
|
import { validateRootPaths } from "../pipeline/indexing/root-paths.js";
|
|
12
|
-
import { findNearestWorkspace, hasWorkspaceIndex,
|
|
12
|
+
import { findNearestWorkspace, hasWorkspaceIndex, resetWorkspaceIndex, resolveZvecGrepRoot, workspaceHome, workspaceIndexLocation, } from "./root.js";
|
|
13
13
|
import { runRgSearch } from "./lexical.js";
|
|
14
14
|
import { defaultHome, normalizePath } from "../utils/path.js";
|
|
15
15
|
import { acquireReadWriteLock, assertNoWriteLock, } from "../utils/lock.js";
|
|
@@ -20,7 +20,7 @@ import { remoteEmbeddingAuthorizationGuard } from "../../authorization/operation
|
|
|
20
20
|
import { RemoteEmbeddingAuthorizationStore } from "../../authorization/store.js";
|
|
21
21
|
const DEFAULT_CONTEXT_LIMIT = 10;
|
|
22
22
|
const DEFAULT_CONTEXT_TOTAL_LIMIT = 30;
|
|
23
|
-
const DEFAULT_LOCAL_EMBEDDING = "local/
|
|
23
|
+
const DEFAULT_LOCAL_EMBEDDING = "local/potion-code-16m-v2";
|
|
24
24
|
const PROVIDER_API_KEY_IDENTITY_SECRET = randomBytes(32);
|
|
25
25
|
const MAX_RECOVERED_EMBEDDING_MODELS = 4;
|
|
26
26
|
export async function createZvecGrep(options = {}) {
|
|
@@ -40,7 +40,10 @@ export function openWorkspaceReadSession(startRoot, embeddingModel) {
|
|
|
40
40
|
if (!isWorkspaceIndexed(info) || !hasWorkspaceIndex(location)) {
|
|
41
41
|
throw workspaceIndexMissingError(location.root, info.indexPolicy ?? "enabled");
|
|
42
42
|
}
|
|
43
|
-
const workspaceIndex = new WorkspaceIndex(info,
|
|
43
|
+
const workspaceIndex = new WorkspaceIndex(info, {
|
|
44
|
+
mode: "read",
|
|
45
|
+
embeddingModel,
|
|
46
|
+
});
|
|
44
47
|
let closed = false;
|
|
45
48
|
return {
|
|
46
49
|
root: location.root,
|
|
@@ -122,14 +125,18 @@ class ZvecGrepService {
|
|
|
122
125
|
follow: options.follow,
|
|
123
126
|
});
|
|
124
127
|
if (options.rebuild || !isWorkspaceIndexed(existing)) {
|
|
125
|
-
|
|
128
|
+
resetWorkspaceIndex(location);
|
|
126
129
|
}
|
|
127
130
|
const existingAfterRebuild = options.rebuild ? null : existing;
|
|
128
131
|
if (isWorkspaceIndexed(existingAfterRebuild)) {
|
|
129
132
|
assertWorkspaceEmbeddingMatchesCurrentModel(existingAfterRebuild, embeddingModel, "zg index --rebuild");
|
|
130
133
|
}
|
|
131
|
-
const
|
|
132
|
-
const
|
|
134
|
+
const embeddingRuntime = embeddingRuntimeAfterIndex(existing, existingRuntime, embeddingModel, effectiveRuntime, this.options);
|
|
135
|
+
const manifest = prepareWorkspaceManifest(location, existingAfterRebuild, rootPaths, embeddingModel, embeddingRuntime);
|
|
136
|
+
const workspaceIndex = new WorkspaceIndex(manifest, {
|
|
137
|
+
mode: "write",
|
|
138
|
+
embeddingModel,
|
|
139
|
+
});
|
|
133
140
|
writeWorkspaceManifest(location.home, manifest);
|
|
134
141
|
try {
|
|
135
142
|
const releaseWriterContext = options.onWriterContext?.((contextOptions) => this.contextFromWriterWorkspaceIndex(root, workspaceIndex, contextOptions));
|
|
@@ -143,7 +150,7 @@ class ZvecGrepService {
|
|
|
143
150
|
});
|
|
144
151
|
writeWorkspaceManifest(location.home, {
|
|
145
152
|
...manifest,
|
|
146
|
-
embeddingRuntime
|
|
153
|
+
embeddingRuntime,
|
|
147
154
|
updatedTime: Date.now(),
|
|
148
155
|
});
|
|
149
156
|
return result;
|
|
@@ -151,7 +158,7 @@ class ZvecGrepService {
|
|
|
151
158
|
catch (error) {
|
|
152
159
|
writeWorkspaceManifest(location.home, {
|
|
153
160
|
...manifest,
|
|
154
|
-
embeddingRuntime
|
|
161
|
+
embeddingRuntime,
|
|
155
162
|
updatedTime: Date.now(),
|
|
156
163
|
});
|
|
157
164
|
throw error;
|
|
@@ -179,7 +186,7 @@ class ZvecGrepService {
|
|
|
179
186
|
return false;
|
|
180
187
|
}
|
|
181
188
|
return await withHomeWriteLock(location.home, "index.drop", async () => {
|
|
182
|
-
|
|
189
|
+
resetWorkspaceIndex(location);
|
|
183
190
|
return true;
|
|
184
191
|
});
|
|
185
192
|
}
|
|
@@ -310,7 +317,7 @@ class ZvecGrepService {
|
|
|
310
317
|
code: "ZVEC_GREP.ENGINE.MANIFEST.NOT_FOUND",
|
|
311
318
|
});
|
|
312
319
|
}
|
|
313
|
-
const workspaceIndex = this.openWorkspaceIndexForSearch(info, request,
|
|
320
|
+
const workspaceIndex = this.openWorkspaceIndexForSearch(info, request, info.embeddingRuntime);
|
|
314
321
|
try {
|
|
315
322
|
return await contextFromOpenWorkspaceIndex({
|
|
316
323
|
root: location.root,
|
|
@@ -350,7 +357,10 @@ class ZvecGrepService {
|
|
|
350
357
|
const embeddingModel = this.embeddingModelForIndex(existing, "context.refresh", workspaceRuntime);
|
|
351
358
|
assertWorkspaceEndpointMatchesCurrentRuntime(existing, workspaceRuntime, effectiveEmbeddingRuntime(this.options, embeddingModel, workspaceRuntime), "zg index --endpoint <url> --rebuild");
|
|
352
359
|
assertWorkspaceEmbeddingMatchesCurrentModel(existing, embeddingModel, "zg index --rebuild");
|
|
353
|
-
const workspaceIndex = new WorkspaceIndex(existing,
|
|
360
|
+
const workspaceIndex = new WorkspaceIndex(existing, {
|
|
361
|
+
mode: "write",
|
|
362
|
+
embeddingModel,
|
|
363
|
+
});
|
|
354
364
|
try {
|
|
355
365
|
const result = await workspaceIndex.index({
|
|
356
366
|
embeddingConcurrency: options.embeddingConcurrency,
|
|
@@ -413,7 +423,7 @@ class ZvecGrepService {
|
|
|
413
423
|
cause,
|
|
414
424
|
});
|
|
415
425
|
}
|
|
416
|
-
const structuralEnrichment = await timings.time("structure_enrichment", () => enrichLexicalItemsWithStructure(root, rgResult.items));
|
|
426
|
+
const structuralEnrichment = await timings.time("structure_enrichment", () => enrichLexicalItemsWithStructure(root, rgResult.items, undefined, options.maxFileSizeBytes));
|
|
417
427
|
const items = dedupeAndRerankContextItems(structuralEnrichment.items);
|
|
418
428
|
const emptyReason = items.length === 0 ? rgEmptyReason(rgResult.diagnostics) : undefined;
|
|
419
429
|
return {
|
|
@@ -431,8 +441,11 @@ class ZvecGrepService {
|
|
|
431
441
|
},
|
|
432
442
|
};
|
|
433
443
|
}
|
|
434
|
-
openWorkspaceIndexForSearch(info, request,
|
|
435
|
-
return new WorkspaceIndex(info,
|
|
444
|
+
openWorkspaceIndexForSearch(info, request, workspaceRuntime) {
|
|
445
|
+
return new WorkspaceIndex(info, {
|
|
446
|
+
mode: "read",
|
|
447
|
+
embeddingModel: this.embeddingModelForSearch(indexedEmbeddingSchema(info), request, workspaceRuntime, info),
|
|
448
|
+
});
|
|
436
449
|
}
|
|
437
450
|
embeddingModelForSearch(schema, request, workspaceRuntime, info) {
|
|
438
451
|
if (!request.routes.some((route) => route.mode === "vector")) {
|
|
@@ -459,9 +472,7 @@ class ZvecGrepService {
|
|
|
459
472
|
const reference = resolveEmbeddingReference({
|
|
460
473
|
explicit: this.options.embedding,
|
|
461
474
|
globalDefault: config.defaults?.embedding,
|
|
462
|
-
fallback:
|
|
463
|
-
? DEFAULT_LOCAL_EMBEDDING
|
|
464
|
-
: undefined,
|
|
475
|
+
fallback: DEFAULT_LOCAL_EMBEDDING,
|
|
465
476
|
});
|
|
466
477
|
const referenceIdentity = reference
|
|
467
478
|
? parseEmbeddingModelReference(reference)
|
|
@@ -545,7 +556,7 @@ class ZvecGrepService {
|
|
|
545
556
|
context: errorDetails([
|
|
546
557
|
detail("operation", operation),
|
|
547
558
|
detail("hint", `Pass "--embedding <model>", set ZVEC_GREP_EMBEDDING, or configure defaults.embedding in ${globalConfigPath()}. Existing indexes can run "zg index" without --embedding to reuse the stored schema.`),
|
|
548
|
-
detail("examples", "local/
|
|
559
|
+
detail("examples", "local/potion-code-16m-v2, qwen/text-embedding-v4"),
|
|
549
560
|
]),
|
|
550
561
|
});
|
|
551
562
|
}
|
|
@@ -593,7 +604,8 @@ async function contextFromOpenWorkspaceIndex(input) {
|
|
|
593
604
|
input.timings.addEntries(search.timings);
|
|
594
605
|
searches.push(search);
|
|
595
606
|
}
|
|
596
|
-
const
|
|
607
|
+
const groupItems = searches.map((search, index) => searchPlanToContextItems(search, input.root, groups[index]));
|
|
608
|
+
const items = selectAndRankContextItems(groupItems.flat(), groups.filter((group) => group.role === "primary").map((group) => group.id));
|
|
597
609
|
return {
|
|
598
610
|
query: input.request.displayQuery,
|
|
599
611
|
root: input.root,
|
|
@@ -605,6 +617,12 @@ async function contextFromOpenWorkspaceIndex(input) {
|
|
|
605
617
|
path: input.workspaceIndex.info.path,
|
|
606
618
|
},
|
|
607
619
|
items,
|
|
620
|
+
groupResults: groups.map((group, index) => ({
|
|
621
|
+
id: group.id,
|
|
622
|
+
query: group.query,
|
|
623
|
+
role: group.role,
|
|
624
|
+
items: groupItems[index] ?? [],
|
|
625
|
+
})),
|
|
608
626
|
diagnostics: {
|
|
609
627
|
emptyReason: items.length === 0 ? "no_matches" : undefined,
|
|
610
628
|
index: {
|
|
@@ -850,7 +868,7 @@ async function workspaceIndexStatus(info, location) {
|
|
|
850
868
|
!hasWorkspaceIndex(location)) {
|
|
851
869
|
return null;
|
|
852
870
|
}
|
|
853
|
-
const workspaceIndex = new WorkspaceIndex(info,
|
|
871
|
+
const workspaceIndex = new WorkspaceIndex(info, { mode: "read" });
|
|
854
872
|
try {
|
|
855
873
|
return await workspaceIndex.status();
|
|
856
874
|
}
|
|
@@ -962,7 +980,7 @@ function runtimeForModelProvider(existing, model, workspaceRuntime) {
|
|
|
962
980
|
? {}
|
|
963
981
|
: workspaceRuntime;
|
|
964
982
|
}
|
|
965
|
-
function
|
|
983
|
+
function embeddingRuntimeAfterIndex(existing, existingRuntime, model, effectiveRuntime, explicit) {
|
|
966
984
|
const sameProvider = isWorkspaceIndexed(existing) &&
|
|
967
985
|
existing.embedding.provider === model.info.provider;
|
|
968
986
|
const apiKey = model.info.provider === "local"
|
|
@@ -1152,7 +1170,7 @@ function searchPlanToContextItems(result, root, group) {
|
|
|
1152
1170
|
};
|
|
1153
1171
|
});
|
|
1154
1172
|
}
|
|
1155
|
-
const
|
|
1173
|
+
const DEFAULT_CONTEXT_PRIORITY_LIMIT = 6;
|
|
1156
1174
|
const CONTEXT_GROUP_RRF_K = 60;
|
|
1157
1175
|
function selectAndRankContextItems(items, coverageGroupIds) {
|
|
1158
1176
|
const deduped = new Map();
|
|
@@ -1169,9 +1187,9 @@ function selectAndRankContextItems(items, coverageGroupIds) {
|
|
|
1169
1187
|
const candidates = [...deduped.values()];
|
|
1170
1188
|
const globallyRanked = [...candidates].sort(compareContextGlobalRank);
|
|
1171
1189
|
const selected = new Set();
|
|
1172
|
-
const
|
|
1190
|
+
const prioritized = [];
|
|
1173
1191
|
for (const groupId of coverageGroupIds) {
|
|
1174
|
-
if (
|
|
1192
|
+
if (prioritized.length >= DEFAULT_CONTEXT_PRIORITY_LIMIT) {
|
|
1175
1193
|
break;
|
|
1176
1194
|
}
|
|
1177
1195
|
const candidate = candidates
|
|
@@ -1182,14 +1200,14 @@ function selectAndRankContextItems(items, coverageGroupIds) {
|
|
|
1182
1200
|
continue;
|
|
1183
1201
|
}
|
|
1184
1202
|
selected.add(contextItemDedupeKey(candidate));
|
|
1185
|
-
|
|
1203
|
+
prioritized.push({
|
|
1186
1204
|
...candidate,
|
|
1187
1205
|
selectionReason: "coverage",
|
|
1188
1206
|
coverageGroup: groupId,
|
|
1189
1207
|
});
|
|
1190
1208
|
}
|
|
1191
1209
|
for (const candidate of globallyRanked) {
|
|
1192
|
-
if (
|
|
1210
|
+
if (prioritized.length >= DEFAULT_CONTEXT_PRIORITY_LIMIT) {
|
|
1193
1211
|
break;
|
|
1194
1212
|
}
|
|
1195
1213
|
const key = contextItemDedupeKey(candidate);
|
|
@@ -1197,14 +1215,14 @@ function selectAndRankContextItems(items, coverageGroupIds) {
|
|
|
1197
1215
|
continue;
|
|
1198
1216
|
}
|
|
1199
1217
|
selected.add(key);
|
|
1200
|
-
|
|
1218
|
+
prioritized.push({
|
|
1201
1219
|
...candidate,
|
|
1202
1220
|
selectionReason: "global_fill",
|
|
1203
1221
|
coverageGroup: undefined,
|
|
1204
1222
|
});
|
|
1205
1223
|
}
|
|
1206
|
-
const
|
|
1207
|
-
return [...
|
|
1224
|
+
const unprioritized = globallyRanked.filter((item) => !selected.has(contextItemDedupeKey(item)));
|
|
1225
|
+
return [...prioritized, ...unprioritized].map((item, index) => ({
|
|
1208
1226
|
...item,
|
|
1209
1227
|
rank: index + 1,
|
|
1210
1228
|
}));
|