@zvec/zvec-grep 0.1.3 → 0.1.5
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 +127 -42
- package/README_CN.md +124 -42
- package/dist/cli/args.d.ts +3 -0
- package/dist/cli/args.js +490 -192
- package/dist/cli/args.js.map +1 -1
- package/dist/cli/commands.d.ts +3 -1
- package/dist/cli/commands.js +590 -56
- package/dist/cli/commands.js.map +1 -1
- package/dist/cli/errors.js +6 -5
- package/dist/cli/errors.js.map +1 -1
- package/dist/cli/format/context.js +33 -29
- package/dist/cli/format/context.js.map +1 -1
- package/dist/cli/format/debug.js +12 -14
- package/dist/cli/format/debug.js.map +1 -1
- package/dist/cli/format/highlight.js.map +1 -1
- package/dist/cli/format/progress.js +8 -3
- package/dist/cli/format/progress.js.map +1 -1
- package/dist/cli/format/range.js.map +1 -1
- package/dist/cli/format/status.js +88 -26
- package/dist/cli/format/status.js.map +1 -1
- package/dist/cli/help.d.ts +1 -1
- package/dist/cli/help.js +170 -85
- 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/mcp.d.ts +2 -0
- package/dist/cli/mcp.js +354 -0
- package/dist/cli/mcp.js.map +1 -0
- package/dist/cli/types.d.ts +22 -9
- 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/engine/collection/index.js +15 -15
- package/dist/engine/collection/index.js.map +1 -1
- package/dist/engine/config.d.ts +28 -0
- package/dist/engine/config.js +195 -0
- package/dist/engine/config.js.map +1 -0
- package/dist/engine/errors/details.js.map +1 -1
- package/dist/engine/errors/index.js.map +1 -1
- package/dist/engine/extraction/code/adapter.js.map +1 -1
- package/dist/engine/extraction/code/extractor.js +87 -73
- package/dist/engine/extraction/code/extractor.js.map +1 -1
- package/dist/engine/extraction/code/families/c-family.js +12 -6
- package/dist/engine/extraction/code/families/c-family.js.map +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.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/ids.js.map +1 -1
- package/dist/engine/extraction/index.js +3 -3
- package/dist/engine/extraction/index.js.map +1 -1
- package/dist/engine/extraction/markdown/extractor.js +4 -2
- package/dist/engine/extraction/markdown/extractor.js.map +1 -1
- package/dist/engine/extraction/tree-sitter/grammar.js.map +1 -1
- package/dist/engine/extraction/tree-sitter/nodes.js +2 -1
- package/dist/engine/extraction/tree-sitter/nodes.js.map +1 -1
- package/dist/engine/extraction/tree-sitter/parser.js.map +1 -1
- package/dist/engine/files/file-type.js.map +1 -1
- package/dist/engine/models/catalog.js +7 -23
- package/dist/engine/models/catalog.js.map +1 -1
- package/dist/engine/models/embeddings.js +3 -3
- package/dist/engine/models/embeddings.js.map +1 -1
- package/dist/engine/models/factory.js.map +1 -1
- package/dist/engine/models/index.d.ts +1 -1
- package/dist/engine/models/index.js.map +1 -1
- package/dist/engine/models/providers/index.d.ts +1 -1
- package/dist/engine/models/providers/index.js +1 -1
- package/dist/engine/models/providers/index.js.map +1 -1
- package/dist/engine/models/providers/llama-cpp/embedding.js +49 -18
- package/dist/engine/models/providers/llama-cpp/embedding.js.map +1 -1
- package/dist/engine/models/providers/qwen/embedding.js +16 -11
- package/dist/engine/models/providers/qwen/embedding.js.map +1 -1
- package/dist/engine/models/providers/qwen/index.d.ts +1 -1
- package/dist/engine/models/providers/qwen/index.js +1 -1
- package/dist/engine/models/providers/qwen/index.js.map +1 -1
- package/dist/engine/pipeline/indexing/index.js +46 -33
- package/dist/engine/pipeline/indexing/index.js.map +1 -1
- package/dist/engine/pipeline/indexing/root-paths.js +10 -13
- package/dist/engine/pipeline/indexing/root-paths.js.map +1 -1
- package/dist/engine/pipeline/indexing/scanner/index.js +121 -46
- package/dist/engine/pipeline/indexing/scanner/index.js.map +1 -1
- package/dist/engine/pipeline/search/index.js +68 -24
- package/dist/engine/pipeline/search/index.js.map +1 -1
- package/dist/engine/service/index.d.ts +1 -1
- package/dist/engine/service/lexical.d.ts +14 -15
- package/dist/engine/service/lexical.js +78 -114
- package/dist/engine/service/lexical.js.map +1 -1
- package/dist/engine/service/root.js +2 -2
- package/dist/engine/service/root.js.map +1 -1
- package/dist/engine/service/structure-enrichment.js +17 -11
- package/dist/engine/service/structure-enrichment.js.map +1 -1
- package/dist/engine/service/types.d.ts +39 -8
- package/dist/engine/service/zvec-grep.js +303 -160
- package/dist/engine/service/zvec-grep.js.map +1 -1
- package/dist/engine/storage/index.js.map +1 -1
- package/dist/engine/storage/zvec.js +49 -28
- 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/engine/utils/file-selection.d.ts +10 -0
- package/dist/engine/utils/file-selection.js +120 -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 +6 -6
- 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.d.ts +3 -3
- package/dist/index.js +2 -2
- package/dist/index.js.map +1 -1
- package/package.json +34 -7
- package/skills/zvec-grep/SKILL.md +58 -48
- package/skills/zvec-grep/agents/openai.yaml +1 -1
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
import type { LlamaGpuMode } from "./models/types.js";
|
|
2
|
+
export type ZvecGrepGlobalDefaults = {
|
|
3
|
+
embedding?: string;
|
|
4
|
+
modelCacheDir?: string;
|
|
5
|
+
llamaGpu?: LlamaGpuMode;
|
|
6
|
+
embeddingParallelism?: number;
|
|
7
|
+
};
|
|
8
|
+
export type ZvecGrepProviderConfig = {
|
|
9
|
+
apiKey?: string;
|
|
10
|
+
endpoint?: string;
|
|
11
|
+
};
|
|
12
|
+
export type ZvecGrepGlobalConfig = {
|
|
13
|
+
version: 1;
|
|
14
|
+
defaults?: ZvecGrepGlobalDefaults;
|
|
15
|
+
providers?: Record<string, ZvecGrepProviderConfig>;
|
|
16
|
+
};
|
|
17
|
+
export type ZvecGrepGlobalConfigUpdate = {
|
|
18
|
+
defaults?: ZvecGrepGlobalDefaults;
|
|
19
|
+
providers?: Record<string, ZvecGrepProviderConfig>;
|
|
20
|
+
};
|
|
21
|
+
export type ZvecGrepExplicitGlobalOptions = ZvecGrepGlobalDefaults & {
|
|
22
|
+
apiKey?: string;
|
|
23
|
+
endpoint?: string;
|
|
24
|
+
};
|
|
25
|
+
export declare function globalConfigPath(): string;
|
|
26
|
+
export declare function readGlobalConfig(path?: string): ZvecGrepGlobalConfig;
|
|
27
|
+
export declare function updateGlobalConfig(update: ZvecGrepGlobalConfigUpdate, path?: string): ZvecGrepGlobalConfig;
|
|
28
|
+
export declare function updateGlobalConfigFromExplicitOptions(options: ZvecGrepExplicitGlobalOptions, indexedProvider?: string, path?: string): boolean;
|
|
@@ -0,0 +1,195 @@
|
|
|
1
|
+
import { homedir } from "node:os";
|
|
2
|
+
import { dirname, join, resolve } from "node:path";
|
|
3
|
+
import { EngineError } from "./errors/index.js";
|
|
4
|
+
import { readJsonFileSync, writeJsonFileSync } from "./utils/json.js";
|
|
5
|
+
import { acquireReadWriteLock } from "./utils/lock.js";
|
|
6
|
+
const GLOBAL_CONFIG_VERSION = 1;
|
|
7
|
+
const GLOBAL_CONFIG_DIRECTORY_MODE = 0o700;
|
|
8
|
+
const GLOBAL_CONFIG_FILE_MODE = 0o600;
|
|
9
|
+
export function globalConfigPath() {
|
|
10
|
+
return resolve(homedir(), ".zvec-grep", "config.json");
|
|
11
|
+
}
|
|
12
|
+
export function readGlobalConfig(path = globalConfigPath()) {
|
|
13
|
+
const value = readJsonFileSync(path, null);
|
|
14
|
+
if (value === null) {
|
|
15
|
+
return emptyGlobalConfig();
|
|
16
|
+
}
|
|
17
|
+
return parseGlobalConfig(value, path);
|
|
18
|
+
}
|
|
19
|
+
export function updateGlobalConfig(update, path = globalConfigPath()) {
|
|
20
|
+
const lock = acquireReadWriteLock(join(dirname(path), "locks", "config"), "write", {
|
|
21
|
+
operation: "global-config.update",
|
|
22
|
+
});
|
|
23
|
+
try {
|
|
24
|
+
const current = readGlobalConfig(path);
|
|
25
|
+
const next = parseGlobalConfig({
|
|
26
|
+
version: GLOBAL_CONFIG_VERSION,
|
|
27
|
+
defaults: {
|
|
28
|
+
...current.defaults,
|
|
29
|
+
...update.defaults,
|
|
30
|
+
},
|
|
31
|
+
providers: mergeProviderConfigs(current.providers, update.providers),
|
|
32
|
+
}, path);
|
|
33
|
+
writeJsonFileSync(path, next, {
|
|
34
|
+
directoryMode: GLOBAL_CONFIG_DIRECTORY_MODE,
|
|
35
|
+
fileMode: GLOBAL_CONFIG_FILE_MODE,
|
|
36
|
+
});
|
|
37
|
+
return next;
|
|
38
|
+
}
|
|
39
|
+
finally {
|
|
40
|
+
lock.release();
|
|
41
|
+
}
|
|
42
|
+
}
|
|
43
|
+
export function updateGlobalConfigFromExplicitOptions(options, indexedProvider, path = globalConfigPath()) {
|
|
44
|
+
const defaults = {
|
|
45
|
+
...(options.embedding !== undefined
|
|
46
|
+
? { embedding: options.embedding }
|
|
47
|
+
: {}),
|
|
48
|
+
...(options.modelCacheDir !== undefined
|
|
49
|
+
? { modelCacheDir: options.modelCacheDir }
|
|
50
|
+
: {}),
|
|
51
|
+
...(options.llamaGpu !== undefined ? { llamaGpu: options.llamaGpu } : {}),
|
|
52
|
+
...(options.embeddingParallelism !== undefined
|
|
53
|
+
? { embeddingParallelism: options.embeddingParallelism }
|
|
54
|
+
: {}),
|
|
55
|
+
};
|
|
56
|
+
const provider = providerFromEmbedding(options.embedding) ?? indexedProvider;
|
|
57
|
+
const providerConfig = provider && provider !== "local"
|
|
58
|
+
? {
|
|
59
|
+
...(options.apiKey !== undefined ? { apiKey: options.apiKey } : {}),
|
|
60
|
+
...(options.endpoint !== undefined
|
|
61
|
+
? { endpoint: options.endpoint }
|
|
62
|
+
: {}),
|
|
63
|
+
}
|
|
64
|
+
: {};
|
|
65
|
+
const update = {
|
|
66
|
+
...(Object.keys(defaults).length > 0 ? { defaults } : {}),
|
|
67
|
+
...(provider && Object.keys(providerConfig).length > 0
|
|
68
|
+
? { providers: { [provider]: providerConfig } }
|
|
69
|
+
: {}),
|
|
70
|
+
};
|
|
71
|
+
if (!update.defaults && !update.providers) {
|
|
72
|
+
return false;
|
|
73
|
+
}
|
|
74
|
+
updateGlobalConfig(update, path);
|
|
75
|
+
return true;
|
|
76
|
+
}
|
|
77
|
+
function emptyGlobalConfig() {
|
|
78
|
+
return { version: GLOBAL_CONFIG_VERSION };
|
|
79
|
+
}
|
|
80
|
+
function providerFromEmbedding(embedding) {
|
|
81
|
+
if (!embedding) {
|
|
82
|
+
return undefined;
|
|
83
|
+
}
|
|
84
|
+
const separator = embedding.indexOf("/");
|
|
85
|
+
return separator > 0 ? embedding.slice(0, separator) : undefined;
|
|
86
|
+
}
|
|
87
|
+
function parseGlobalConfig(value, path) {
|
|
88
|
+
if (!isRecord(value) || value.version !== GLOBAL_CONFIG_VERSION) {
|
|
89
|
+
throw invalidConfig(path, "version must be 1");
|
|
90
|
+
}
|
|
91
|
+
const defaults = parseDefaults(value.defaults, path);
|
|
92
|
+
const providers = parseProviders(value.providers, path);
|
|
93
|
+
return {
|
|
94
|
+
version: GLOBAL_CONFIG_VERSION,
|
|
95
|
+
...(defaults ? { defaults } : {}),
|
|
96
|
+
...(providers ? { providers } : {}),
|
|
97
|
+
};
|
|
98
|
+
}
|
|
99
|
+
function parseDefaults(value, path) {
|
|
100
|
+
if (value === undefined) {
|
|
101
|
+
return undefined;
|
|
102
|
+
}
|
|
103
|
+
if (!isRecord(value)) {
|
|
104
|
+
throw invalidConfig(path, "defaults must be an object");
|
|
105
|
+
}
|
|
106
|
+
const embedding = optionalNonEmptyString(value.embedding, path, "defaults.embedding");
|
|
107
|
+
const modelCacheDir = optionalNonEmptyString(value.modelCacheDir, path, "defaults.modelCacheDir");
|
|
108
|
+
const llamaGpu = optionalLlamaGpu(value.llamaGpu, path);
|
|
109
|
+
const embeddingParallelism = optionalPositiveInteger(value.embeddingParallelism, path, "defaults.embeddingParallelism");
|
|
110
|
+
const defaults = {
|
|
111
|
+
...(embedding ? { embedding } : {}),
|
|
112
|
+
...(modelCacheDir ? { modelCacheDir } : {}),
|
|
113
|
+
...(llamaGpu !== undefined ? { llamaGpu } : {}),
|
|
114
|
+
...(embeddingParallelism !== undefined ? { embeddingParallelism } : {}),
|
|
115
|
+
};
|
|
116
|
+
return Object.keys(defaults).length > 0 ? defaults : undefined;
|
|
117
|
+
}
|
|
118
|
+
function parseProviders(value, path) {
|
|
119
|
+
if (value === undefined) {
|
|
120
|
+
return undefined;
|
|
121
|
+
}
|
|
122
|
+
if (!isRecord(value)) {
|
|
123
|
+
throw invalidConfig(path, "providers must be an object");
|
|
124
|
+
}
|
|
125
|
+
const providers = {};
|
|
126
|
+
for (const [provider, providerValue] of Object.entries(value)) {
|
|
127
|
+
if (!/^[a-z][a-z0-9_-]*$/.test(provider) || !isRecord(providerValue)) {
|
|
128
|
+
throw invalidConfig(path, `providers.${provider} must be an object with a valid provider name`);
|
|
129
|
+
}
|
|
130
|
+
const apiKey = optionalNonEmptyString(providerValue.apiKey, path, `providers.${provider}.apiKey`);
|
|
131
|
+
const endpoint = optionalNonEmptyString(providerValue.endpoint, path, `providers.${provider}.endpoint`);
|
|
132
|
+
const config = {
|
|
133
|
+
...(apiKey ? { apiKey } : {}),
|
|
134
|
+
...(endpoint ? { endpoint } : {}),
|
|
135
|
+
};
|
|
136
|
+
if (Object.keys(config).length > 0) {
|
|
137
|
+
providers[provider] = config;
|
|
138
|
+
}
|
|
139
|
+
}
|
|
140
|
+
return Object.keys(providers).length > 0 ? providers : undefined;
|
|
141
|
+
}
|
|
142
|
+
function mergeProviderConfigs(current, update) {
|
|
143
|
+
if (!current && !update) {
|
|
144
|
+
return undefined;
|
|
145
|
+
}
|
|
146
|
+
const merged = { ...current };
|
|
147
|
+
for (const [provider, config] of Object.entries(update ?? {})) {
|
|
148
|
+
merged[provider] = {
|
|
149
|
+
...merged[provider],
|
|
150
|
+
...config,
|
|
151
|
+
};
|
|
152
|
+
}
|
|
153
|
+
return merged;
|
|
154
|
+
}
|
|
155
|
+
function optionalNonEmptyString(value, path, field) {
|
|
156
|
+
if (value === undefined) {
|
|
157
|
+
return undefined;
|
|
158
|
+
}
|
|
159
|
+
if (typeof value !== "string" || value.trim().length === 0) {
|
|
160
|
+
throw invalidConfig(path, `${field} must be a non-empty string`);
|
|
161
|
+
}
|
|
162
|
+
return value.trim();
|
|
163
|
+
}
|
|
164
|
+
function optionalPositiveInteger(value, path, field) {
|
|
165
|
+
if (value === undefined) {
|
|
166
|
+
return undefined;
|
|
167
|
+
}
|
|
168
|
+
if (!Number.isInteger(value) || value <= 0) {
|
|
169
|
+
throw invalidConfig(path, `${field} must be a positive integer`);
|
|
170
|
+
}
|
|
171
|
+
return value;
|
|
172
|
+
}
|
|
173
|
+
function optionalLlamaGpu(value, path) {
|
|
174
|
+
if (value === undefined) {
|
|
175
|
+
return undefined;
|
|
176
|
+
}
|
|
177
|
+
if (value === false ||
|
|
178
|
+
value === "auto" ||
|
|
179
|
+
value === "metal" ||
|
|
180
|
+
value === "vulkan" ||
|
|
181
|
+
value === "cuda") {
|
|
182
|
+
return value;
|
|
183
|
+
}
|
|
184
|
+
throw invalidConfig(path, "defaults.llamaGpu must be auto, metal, vulkan, cuda, or false");
|
|
185
|
+
}
|
|
186
|
+
function invalidConfig(path, detail) {
|
|
187
|
+
return new EngineError("zvec-grep global config is invalid", {
|
|
188
|
+
code: "ZVEC_GREP.ENGINE.CONFIG.INVALID",
|
|
189
|
+
context: `path=${path}\ndetail=${detail}`,
|
|
190
|
+
});
|
|
191
|
+
}
|
|
192
|
+
function isRecord(value) {
|
|
193
|
+
return typeof value === "object" && value !== null && !Array.isArray(value);
|
|
194
|
+
}
|
|
195
|
+
//# sourceMappingURL=config.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"config.js","sourceRoot":"","sources":["../../src/engine/config.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"details.js","sourceRoot":"","sources":["../../../src/engine/errors/details.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"details.js","sourceRoot":"","sources":["../../../src/engine/errors/details.ts"],"names":[],"mappings":"AAKA,MAAM,yBAAyB,GAAG,eAAe,CAAC;AAElD,MAAM,UAAU,YAAY,CAC1B,OAAoC;IAEpC,MAAM,KAAK,GAAG,OAAO;SAClB,GAAG,CAAC,iBAAiB,CAAC;SACtB,MAAM,CAAC,CAAC,IAAI,EAAkB,EAAE,CAAC,IAAI,KAAK,IAAI,IAAI,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;IAEtE,OAAO,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;AACzD,CAAC;AAED,MAAM,UAAU,MAAM,CAAC,GAAW,EAAE,KAAuB;IACzD,OAAO,KAAK,KAAK,IAAI,IAAI,KAAK,KAAK,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC;AACrE,CAAC;AAED,MAAM,UAAU,gBAAgB,CAAC,IAAY;IAC3C,OAAO,IAAI,KAAK,yBAAyB,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,MAAM,CAAC,YAAY,EAAE,IAAI,CAAC,CAAC;AAChF,CAAC;AAED,SAAS,iBAAiB,CAAC,KAAuB;IAChD,IAAI,KAAK,KAAK,IAAI,IAAI,KAAK,KAAK,SAAS,EAAE,CAAC;QAC1C,OAAO,IAAI,CAAC;IACd,CAAC;IAED,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE,CAAC;QAC9B,OAAO,KAAK,CAAC,IAAI,EAAE,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC;IACvD,CAAC;IAED,MAAM,CAAC,GAAG,EAAE,KAAK,CAAC,GAAG,KAAK,CAAC;IAC3B,IAAI,KAAK,KAAK,IAAI,IAAI,KAAK,KAAK,SAAS,EAAE,CAAC;QAC1C,OAAO,IAAI,CAAC;IACd,CAAC;IAED,OAAO,GAAG,GAAG,IAAI,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC;AACnC,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/engine/errors/index.ts"],"names":[],"mappings":"AAAA,MAAM,CAAC,MAAM,wBAAwB,GAAG,kBAAkB,CAAC;
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/engine/errors/index.ts"],"names":[],"mappings":"AAAA,MAAM,CAAC,MAAM,wBAAwB,GAAG,kBAAkB,CAAC;AAU3D,MAAM,OAAO,WAAY,SAAQ,KAAK;IAC3B,IAAI,CAAkB;IACtB,OAAO,CAAU;IAE1B,YAAY,OAAe,EAAE,OAA2B;QACtD,KAAK,CAAC,OAAO,EAAE,EAAE,KAAK,EAAE,OAAO,CAAC,KAAK,EAAE,CAAC,CAAC;QACzC,IAAI,CAAC,IAAI,GAAG,aAAa,CAAC;QAC1B,IAAI,CAAC,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC;QACzB,IAAI,CAAC,OAAO,GAAG,OAAO,CAAC,OAAO,CAAC;IACjC,CAAC;CACF;AAED,MAAM,UAAU,aAAa,CAAC,KAAc;IAC1C,OAAO,KAAK,YAAY,WAAW,CAAC;AACtC,CAAC;AAED,OAAO,EACL,gBAAgB,EAChB,MAAM,EACN,YAAY,GAEb,MAAM,cAAc,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"adapter.js","sourceRoot":"","sources":["../../../../src/engine/extraction/code/adapter.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAC;AAC7C,OAAO,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AACjD,OAAO,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAC;AAC/C,OAAO,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AACnD,OAAO,EAAE,kBAAkB,EAAE,MAAM,2BAA2B,CAAC;AAC/D,OAAO,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAC;AACvD,OAAO,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AACnD,OAAO,EAAE,kBAAkB,EAAE,MAAM,2BAA2B,CAAC;
|
|
1
|
+
{"version":3,"file":"adapter.js","sourceRoot":"","sources":["../../../../src/engine/extraction/code/adapter.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAC;AAC7C,OAAO,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AACjD,OAAO,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAC;AAC/C,OAAO,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AACnD,OAAO,EAAE,kBAAkB,EAAE,MAAM,2BAA2B,CAAC;AAC/D,OAAO,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAC;AACvD,OAAO,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AACnD,OAAO,EAAE,kBAAkB,EAAE,MAAM,2BAA2B,CAAC;AAyB/D,MAAM,QAAQ,GAAoC;IAChD,CAAC,EAAE,SAAS;IACZ,GAAG,EAAE,WAAW;IAChB,EAAE,EAAE,UAAU;IACd,IAAI,EAAE,YAAY;IAClB,UAAU,EAAE,kBAAkB;IAC9B,GAAG,EAAE,kBAAkB;IACvB,MAAM,EAAE,cAAc;IACtB,IAAI,EAAE,YAAY;IAClB,GAAG,EAAE,kBAAkB;IACvB,UAAU,EAAE,kBAAkB;CAC/B,CAAC;AAEF,MAAM,UAAU,cAAc,CAAC,MAAc;IAC3C,OAAO,QAAQ,CAAC,MAAM,CAAC,IAAI,IAAI,CAAC;AAClC,CAAC"}
|
|
@@ -18,9 +18,9 @@ export class CodeExtractor {
|
|
|
18
18
|
context: `maxChunkChars=${maxChunkChars}`,
|
|
19
19
|
});
|
|
20
20
|
}
|
|
21
|
-
if (!Number.isInteger(chunkOverlapChars)
|
|
22
|
-
|
|
23
|
-
|
|
21
|
+
if (!Number.isInteger(chunkOverlapChars) ||
|
|
22
|
+
chunkOverlapChars < 0 ||
|
|
23
|
+
chunkOverlapChars >= maxChunkChars) {
|
|
24
24
|
throw new EngineError("Code extractor requires overlap to be smaller than chunk size", {
|
|
25
25
|
code: "ZVEC_GREP.ENGINE.EXTRACTORS.CODE_INVALID_CHUNK_OVERLAP",
|
|
26
26
|
context: `maxChunkChars=${maxChunkChars} chunkOverlapChars=${chunkOverlapChars}`,
|
|
@@ -30,11 +30,11 @@ export class CodeExtractor {
|
|
|
30
30
|
this.chunkOverlapChars = chunkOverlapChars;
|
|
31
31
|
}
|
|
32
32
|
supports(source) {
|
|
33
|
-
return source.kind === "text"
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
33
|
+
return (source.kind === "text" &&
|
|
34
|
+
source.file.kind === "code" &&
|
|
35
|
+
(isScriptBlockFormat(source.file.format) ||
|
|
36
|
+
(hasGrammar(source.file.format) &&
|
|
37
|
+
resolveAdapter(source.file.format) !== null)));
|
|
38
38
|
}
|
|
39
39
|
async extract(source) {
|
|
40
40
|
if (!this.supports(source) || source.kind !== "text") {
|
|
@@ -62,9 +62,7 @@ export class CodeExtractor {
|
|
|
62
62
|
output.push({
|
|
63
63
|
id,
|
|
64
64
|
...item,
|
|
65
|
-
group: item.group === ""
|
|
66
|
-
? id
|
|
67
|
-
: majorId ?? item.group,
|
|
65
|
+
group: item.group === "" ? id : (majorId ?? item.group),
|
|
68
66
|
});
|
|
69
67
|
entityIdIndex++;
|
|
70
68
|
}
|
|
@@ -98,18 +96,19 @@ export class CodeExtractor {
|
|
|
98
96
|
}
|
|
99
97
|
function walkCodeNode(node, adapter, breadcrumb, out) {
|
|
100
98
|
for (const child of node.children) {
|
|
101
|
-
const isScope = adapter.scopeTypes.has(child.type)
|
|
102
|
-
|
|
103
|
-
const isEntity = adapter.entityTypes.has(child.type)
|
|
104
|
-
|
|
99
|
+
const isScope = adapter.scopeTypes.has(child.type) &&
|
|
100
|
+
adapter.shouldEnterScope?.(child) !== false;
|
|
101
|
+
const isEntity = adapter.entityTypes.has(child.type) &&
|
|
102
|
+
adapter.shouldIndexEntity?.(child) !== false;
|
|
105
103
|
if (isEntity) {
|
|
106
|
-
const entities = adapter.resolveEntities?.(child)
|
|
107
|
-
|
|
104
|
+
const entities = adapter.resolveEntities?.(child) ?? [
|
|
105
|
+
adapter.resolveEntity ? adapter.resolveEntity(child) : child,
|
|
106
|
+
];
|
|
108
107
|
for (const entity of entities) {
|
|
109
108
|
const name = adapter.extractName(entity);
|
|
110
109
|
const entityBreadcrumb = adapter.scopeBreadcrumb?.(entity, breadcrumb) ?? breadcrumb;
|
|
111
|
-
const symbolType = adapter.classifyNode?.(entity, entityBreadcrumb)
|
|
112
|
-
|
|
110
|
+
const symbolType = adapter.classifyNode?.(entity, entityBreadcrumb) ??
|
|
111
|
+
classifyCodeNode(entity, entityBreadcrumb);
|
|
113
112
|
out.push({
|
|
114
113
|
node: entity,
|
|
115
114
|
name,
|
|
@@ -134,7 +133,9 @@ function walkCodeNode(node, adapter, breadcrumb, out) {
|
|
|
134
133
|
}
|
|
135
134
|
function codeEntityToSearchFragments(source, adapter, entity, maxChars, overlapChars) {
|
|
136
135
|
if (entity.node.text.length <= maxChars) {
|
|
137
|
-
return [
|
|
136
|
+
return [
|
|
137
|
+
codeEntityWindowToFragment(source, entity, nodeToWindow(entity.node)),
|
|
138
|
+
];
|
|
138
139
|
}
|
|
139
140
|
const metadata = codeEntityMetadata(entity);
|
|
140
141
|
const major = {
|
|
@@ -310,7 +311,9 @@ const OUTLINE_MAX_CALLS = 24;
|
|
|
310
311
|
const OUTLINE_MAX_LINE_CHARS = 180;
|
|
311
312
|
function codeEntityOutline(entity, adapter) {
|
|
312
313
|
const header = extractCodeHeader(entity.node.text);
|
|
313
|
-
const lines = [
|
|
314
|
+
const lines = [
|
|
315
|
+
header.length > 0 ? header : (entity.name ?? entity.symbolType),
|
|
316
|
+
];
|
|
314
317
|
if (STRUCTURAL_SYMBOL_TYPES.has(entity.symbolType)) {
|
|
315
318
|
const members = collectStructureOutlineMembers(entity, adapter);
|
|
316
319
|
if (members.length > 0) {
|
|
@@ -349,15 +352,17 @@ function collectStructureOutlineMembers(entity, adapter) {
|
|
|
349
352
|
}
|
|
350
353
|
if (!sameNode(node, entity.node) && adapter.entityTypes.has(node.type)) {
|
|
351
354
|
if (adapter.shouldIndexEntity?.(node) !== false) {
|
|
352
|
-
const resolved = adapter.resolveEntities?.(node)
|
|
353
|
-
|
|
355
|
+
const resolved = adapter.resolveEntities?.(node) ?? [
|
|
356
|
+
adapter.resolveEntity ? adapter.resolveEntity(node) : node,
|
|
357
|
+
];
|
|
354
358
|
for (const resolvedNode of resolved) {
|
|
355
|
-
if (members.length >= OUTLINE_MAX_MEMBERS ||
|
|
359
|
+
if (members.length >= OUTLINE_MAX_MEMBERS ||
|
|
360
|
+
sameNode(resolvedNode, entity.node)) {
|
|
356
361
|
break;
|
|
357
362
|
}
|
|
358
363
|
const name = adapter.extractName(resolvedNode);
|
|
359
|
-
const symbolType = adapter.classifyNode?.(resolvedNode, entity.breadcrumb)
|
|
360
|
-
|
|
364
|
+
const symbolType = adapter.classifyNode?.(resolvedNode, entity.breadcrumb) ??
|
|
365
|
+
classifyCodeNode(resolvedNode, entity.breadcrumb);
|
|
361
366
|
const signature = adapter.extractSignature?.(resolvedNode);
|
|
362
367
|
const key = `${symbolType}:${name ?? ""}:${signature ?? ""}:${resolvedNode.startIndex}`;
|
|
363
368
|
if (!seen.has(key)) {
|
|
@@ -377,7 +382,9 @@ function collectStructureOutlineMembers(entity, adapter) {
|
|
|
377
382
|
}
|
|
378
383
|
function formatOutlineMember(member) {
|
|
379
384
|
const name = member.name ?? "";
|
|
380
|
-
const signature = member.signature
|
|
385
|
+
const signature = member.signature
|
|
386
|
+
? truncateOutlineLine(oneLine(member.signature))
|
|
387
|
+
: "";
|
|
381
388
|
if (signature.length > 0) {
|
|
382
389
|
return name.length > 0 && !signature.includes(name)
|
|
383
390
|
? `${member.symbolType} ${name}: ${signature}`
|
|
@@ -407,19 +414,19 @@ function collectFunctionCallNames(node) {
|
|
|
407
414
|
return calls;
|
|
408
415
|
}
|
|
409
416
|
function isCallNode(node) {
|
|
410
|
-
return node.type === "call"
|
|
411
|
-
|
|
412
|
-
|
|
413
|
-
|
|
414
|
-
|
|
415
|
-
|
|
417
|
+
return (node.type === "call" ||
|
|
418
|
+
node.type === "call_expression" ||
|
|
419
|
+
node.type === "function_call_expression" ||
|
|
420
|
+
node.type === "method_invocation" ||
|
|
421
|
+
node.type === "object_creation_expression" ||
|
|
422
|
+
node.type === "new_expression");
|
|
416
423
|
}
|
|
417
424
|
function extractCallName(node) {
|
|
418
|
-
const target = node.childForFieldName("function")
|
|
419
|
-
|
|
420
|
-
|
|
421
|
-
|
|
422
|
-
|
|
425
|
+
const target = node.childForFieldName("function") ??
|
|
426
|
+
node.childForFieldName("name") ??
|
|
427
|
+
node.childForFieldName("constructor") ??
|
|
428
|
+
node.childForFieldName("type") ??
|
|
429
|
+
node.namedChildren[0];
|
|
423
430
|
if (!target) {
|
|
424
431
|
return undefined;
|
|
425
432
|
}
|
|
@@ -430,18 +437,18 @@ function normalizeCallName(value) {
|
|
|
430
437
|
.replace(/\s+/g, " ")
|
|
431
438
|
.replace(/^new\s+/, "")
|
|
432
439
|
.trim();
|
|
433
|
-
if (cleaned.length === 0
|
|
434
|
-
|
|
435
|
-
|
|
436
|
-
|
|
440
|
+
if (cleaned.length === 0 ||
|
|
441
|
+
cleaned.length > OUTLINE_MAX_LINE_CHARS ||
|
|
442
|
+
/[\n\r]/.test(cleaned) ||
|
|
443
|
+
!/[A-Za-z_$][A-Za-z0-9_$]*/.test(cleaned)) {
|
|
437
444
|
return undefined;
|
|
438
445
|
}
|
|
439
446
|
return cleaned;
|
|
440
447
|
}
|
|
441
448
|
function sameNode(left, right) {
|
|
442
|
-
return left.startIndex === right.startIndex
|
|
443
|
-
|
|
444
|
-
|
|
449
|
+
return (left.startIndex === right.startIndex &&
|
|
450
|
+
left.endIndex === right.endIndex &&
|
|
451
|
+
left.type === right.type);
|
|
445
452
|
}
|
|
446
453
|
function oneLine(value) {
|
|
447
454
|
return value.replace(/\s+/g, " ").trim();
|
|
@@ -466,22 +473,23 @@ function codeEntityMetadata(entity) {
|
|
|
466
473
|
function classifyCodeNode(node, breadcrumb) {
|
|
467
474
|
const nodeType = node.type;
|
|
468
475
|
if (nodeType === "decorated_definition") {
|
|
469
|
-
const inner = node.namedChildren.find((child) => child.type === "function_definition" ||
|
|
476
|
+
const inner = node.namedChildren.find((child) => child.type === "function_definition" ||
|
|
477
|
+
child.type === "class_definition");
|
|
470
478
|
return inner ? classifyCodeNode(inner, breadcrumb) : "value";
|
|
471
479
|
}
|
|
472
|
-
if ((nodeType === "field_definition"
|
|
473
|
-
|
|
474
|
-
|
|
475
|
-
|
|
480
|
+
if ((nodeType === "field_definition" ||
|
|
481
|
+
nodeType === "public_field_definition" ||
|
|
482
|
+
nodeType === "variable_declarator") &&
|
|
483
|
+
hasJavascriptTypescriptFunctionValue(node)) {
|
|
476
484
|
return "function";
|
|
477
485
|
}
|
|
478
486
|
if (nodeType.includes("method") || nodeType.includes("constructor")) {
|
|
479
487
|
return "function";
|
|
480
488
|
}
|
|
481
|
-
if (breadcrumb.length > 0
|
|
482
|
-
|
|
483
|
-
|
|
484
|
-
|
|
489
|
+
if (breadcrumb.length > 0 &&
|
|
490
|
+
(nodeType.includes("function") ||
|
|
491
|
+
nodeType === "declaration" ||
|
|
492
|
+
nodeType === "function_item")) {
|
|
485
493
|
return "function";
|
|
486
494
|
}
|
|
487
495
|
if (nodeType.includes("function")) {
|
|
@@ -490,35 +498,37 @@ function classifyCodeNode(node, breadcrumb) {
|
|
|
490
498
|
if (nodeType === "declaration" || nodeType === "macro_type_specifier") {
|
|
491
499
|
return "function";
|
|
492
500
|
}
|
|
493
|
-
if (nodeType.includes("class")
|
|
494
|
-
|
|
495
|
-
|
|
496
|
-
|
|
497
|
-
|
|
498
|
-
|
|
501
|
+
if (nodeType.includes("class") ||
|
|
502
|
+
nodeType.includes("struct") ||
|
|
503
|
+
nodeType.includes("impl") ||
|
|
504
|
+
nodeType.includes("enum") ||
|
|
505
|
+
nodeType.includes("union") ||
|
|
506
|
+
nodeType.includes("record")) {
|
|
499
507
|
return "class";
|
|
500
508
|
}
|
|
501
|
-
if (nodeType.includes("interface")
|
|
502
|
-
|
|
503
|
-
|
|
509
|
+
if (nodeType.includes("interface") ||
|
|
510
|
+
nodeType.includes("protocol") ||
|
|
511
|
+
nodeType.includes("trait")) {
|
|
504
512
|
return "interface";
|
|
505
513
|
}
|
|
506
|
-
if (nodeType.includes("module")
|
|
507
|
-
|
|
508
|
-
|
|
514
|
+
if (nodeType.includes("module") ||
|
|
515
|
+
nodeType.includes("namespace") ||
|
|
516
|
+
nodeType === "mod_item") {
|
|
509
517
|
return "module";
|
|
510
518
|
}
|
|
511
|
-
if (nodeType.includes("alias")
|
|
512
|
-
|
|
513
|
-
|
|
514
|
-
|
|
519
|
+
if (nodeType.includes("alias") ||
|
|
520
|
+
nodeType.includes("typedef") ||
|
|
521
|
+
nodeType === "type_definition" ||
|
|
522
|
+
nodeType === "type_item") {
|
|
515
523
|
return "alias";
|
|
516
524
|
}
|
|
517
525
|
return "value";
|
|
518
526
|
}
|
|
519
527
|
function truncateInline(value, maxChars) {
|
|
520
528
|
const compact = value.replace(/\s+/g, " ").trim();
|
|
521
|
-
return compact.length > maxChars
|
|
529
|
+
return compact.length > maxChars
|
|
530
|
+
? `${compact.slice(0, maxChars).trimEnd()}...`
|
|
531
|
+
: compact;
|
|
522
532
|
}
|
|
523
533
|
function isScriptBlockFormat(format) {
|
|
524
534
|
return format === "vue" || format === "svelte";
|
|
@@ -545,7 +555,9 @@ function findScriptBlocks(text) {
|
|
|
545
555
|
return blocks;
|
|
546
556
|
}
|
|
547
557
|
function scriptBlockFormat(attrs) {
|
|
548
|
-
const lang = attrs
|
|
558
|
+
const lang = attrs
|
|
559
|
+
.match(/\blang\s*=\s*["']?([A-Za-z0-9_-]+)/i)?.[1]
|
|
560
|
+
?.toLowerCase();
|
|
549
561
|
if (lang === "ts" || lang === "typescript") {
|
|
550
562
|
return "typescript";
|
|
551
563
|
}
|
|
@@ -574,7 +586,9 @@ function remapScriptBlockFragments(fileId, fragments, startIndex, startLine, sta
|
|
|
574
586
|
return fragments.map((fragment) => ({
|
|
575
587
|
...fragment,
|
|
576
588
|
id: idMap.get(fragment.id) ?? fragment.id,
|
|
577
|
-
group: fragment.group
|
|
589
|
+
group: fragment.group
|
|
590
|
+
? (idMap.get(fragment.group) ?? fragment.group)
|
|
591
|
+
: undefined,
|
|
578
592
|
fileId,
|
|
579
593
|
range: remapScriptBlockRange(fragment.range, startLine, startOffset),
|
|
580
594
|
}));
|