@llangtop/pwiki-core 0.3.4 → 0.4.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/dist/WikiEngine.d.ts +25 -37
- package/dist/WikiEngine.d.ts.map +1 -1
- package/dist/WikiEngine.js +157 -298
- package/dist/WikiEngine.js.map +1 -1
- package/dist/ast-chunker.d.ts +23 -0
- package/dist/ast-chunker.d.ts.map +1 -0
- package/dist/ast-chunker.js +434 -0
- package/dist/ast-chunker.js.map +1 -0
- package/dist/content-cache.d.ts +13 -0
- package/dist/content-cache.d.ts.map +1 -0
- package/dist/content-cache.js +33 -0
- package/dist/content-cache.js.map +1 -0
- package/dist/embedder.d.ts +38 -0
- package/dist/embedder.d.ts.map +1 -0
- package/dist/embedder.js +267 -0
- package/dist/embedder.js.map +1 -0
- package/dist/file-manifest.d.ts +46 -0
- package/dist/file-manifest.d.ts.map +1 -0
- package/dist/file-manifest.js +121 -0
- package/dist/file-manifest.js.map +1 -0
- package/dist/index.d.ts +18 -8
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +25 -7
- package/dist/index.js.map +1 -1
- package/dist/indexer-compile.d.ts +20 -0
- package/dist/indexer-compile.d.ts.map +1 -0
- package/dist/indexer-compile.js +198 -0
- package/dist/indexer-compile.js.map +1 -0
- package/dist/indexer-embed.d.ts +21 -0
- package/dist/indexer-embed.d.ts.map +1 -0
- package/dist/indexer-embed.js +248 -0
- package/dist/indexer-embed.js.map +1 -0
- package/dist/indexer-scan.d.ts +4 -0
- package/dist/indexer-scan.d.ts.map +1 -0
- package/dist/indexer-scan.js +51 -0
- package/dist/indexer-scan.js.map +1 -0
- package/dist/indexer.d.ts +4 -0
- package/dist/indexer.d.ts.map +1 -0
- package/dist/indexer.js +7 -0
- package/dist/indexer.js.map +1 -0
- package/dist/model-registry.d.ts +32 -0
- package/dist/model-registry.d.ts.map +1 -0
- package/dist/model-registry.js +82 -0
- package/dist/model-registry.js.map +1 -0
- package/dist/parser.d.ts +9 -0
- package/dist/parser.d.ts.map +1 -0
- package/dist/parser.js +54 -0
- package/dist/parser.js.map +1 -0
- package/dist/preprocessor.d.ts +36 -0
- package/dist/preprocessor.d.ts.map +1 -0
- package/dist/preprocessor.js +209 -0
- package/dist/preprocessor.js.map +1 -0
- package/dist/search.d.ts +6 -0
- package/dist/search.d.ts.map +1 -0
- package/dist/search.js +91 -0
- package/dist/search.js.map +1 -0
- package/dist/semantic-compiler.d.ts +44 -0
- package/dist/semantic-compiler.d.ts.map +1 -0
- package/dist/semantic-compiler.js +376 -0
- package/dist/semantic-compiler.js.map +1 -0
- package/dist/semantic-search.d.ts +11 -0
- package/dist/semantic-search.d.ts.map +1 -0
- package/dist/semantic-search.js +217 -0
- package/dist/semantic-search.js.map +1 -0
- package/dist/store-settings.d.ts +32 -0
- package/dist/store-settings.d.ts.map +1 -0
- package/dist/store-settings.js +138 -0
- package/dist/store-settings.js.map +1 -0
- package/dist/store-vectors.d.ts +13 -0
- package/dist/store-vectors.d.ts.map +1 -0
- package/dist/store-vectors.js +101 -0
- package/dist/store-vectors.js.map +1 -0
- package/dist/store.d.ts +11 -0
- package/dist/store.d.ts.map +1 -0
- package/dist/store.js +28 -0
- package/dist/store.js.map +1 -0
- package/dist/types.d.ts +75 -92
- package/dist/types.d.ts.map +1 -1
- package/dist/types.js +1 -1
- package/dist/types.js.map +1 -1
- package/dist/wiki-paths.d.ts +3 -0
- package/dist/wiki-paths.d.ts.map +1 -0
- package/dist/wiki-paths.js +13 -0
- package/dist/wiki-paths.js.map +1 -0
- package/package.json +38 -38
- package/dist/compile/compiler.d.ts +0 -39
- package/dist/compile/compiler.d.ts.map +0 -1
- package/dist/compile/compiler.js +0 -227
- package/dist/compile/compiler.js.map +0 -1
- package/dist/compile/index.d.ts +0 -3
- package/dist/compile/index.d.ts.map +0 -1
- package/dist/compile/index.js +0 -2
- package/dist/compile/index.js.map +0 -1
- package/dist/embed/WikiEmbedder.d.ts +0 -28
- package/dist/embed/WikiEmbedder.d.ts.map +0 -1
- package/dist/embed/WikiEmbedder.js +0 -147
- package/dist/embed/WikiEmbedder.js.map +0 -1
- package/dist/embed/index.d.ts +0 -2
- package/dist/embed/index.d.ts.map +0 -1
- package/dist/embed/index.js +0 -2
- package/dist/embed/index.js.map +0 -1
- package/dist/llm/WikiLLM.d.ts +0 -24
- package/dist/llm/WikiLLM.d.ts.map +0 -1
- package/dist/llm/WikiLLM.js +0 -46
- package/dist/llm/WikiLLM.js.map +0 -1
- package/dist/llm/index.d.ts +0 -3
- package/dist/llm/index.d.ts.map +0 -1
- package/dist/llm/index.js +0 -2
- package/dist/llm/index.js.map +0 -1
- package/dist/models.d.ts +0 -5
- package/dist/models.d.ts.map +0 -1
- package/dist/models.js +0 -54
- package/dist/models.js.map +0 -1
- package/dist/search/WikiSearch.d.ts +0 -14
- package/dist/search/WikiSearch.d.ts.map +0 -1
- package/dist/search/WikiSearch.js +0 -223
- package/dist/search/WikiSearch.js.map +0 -1
- package/dist/search/index.d.ts +0 -2
- package/dist/search/index.d.ts.map +0 -1
- package/dist/search/index.js +0 -2
- package/dist/search/index.js.map +0 -1
- package/dist/store/WikiStore.d.ts +0 -47
- package/dist/store/WikiStore.d.ts.map +0 -1
- package/dist/store/WikiStore.js +0 -301
- package/dist/store/WikiStore.js.map +0 -1
- package/dist/store/index.d.ts +0 -2
- package/dist/store/index.d.ts.map +0 -1
- package/dist/store/index.js +0 -2
- package/dist/store/index.js.map +0 -1
- package/dist/util/fs.d.ts +0 -7
- package/dist/util/fs.d.ts.map +0 -1
- package/dist/util/fs.js +0 -36
- package/dist/util/fs.js.map +0 -1
- package/dist/util/index.d.ts +0 -3
- package/dist/util/index.d.ts.map +0 -1
- package/dist/util/index.js +0 -3
- package/dist/util/index.js.map +0 -1
- package/dist/util/paths.d.ts +0 -17
- package/dist/util/paths.d.ts.map +0 -1
- package/dist/util/paths.js +0 -31
- package/dist/util/paths.js.map +0 -1
package/dist/embedder.js
ADDED
|
@@ -0,0 +1,267 @@
|
|
|
1
|
+
// embedder.ts — transformers.js 语义向量封装 (v5.0)
|
|
2
|
+
//
|
|
3
|
+
// 设计原则:
|
|
4
|
+
// 1. 模型解耦 — 当前模型由 model-registry.ts 提供,无需硬编码
|
|
5
|
+
// 2. 懒加载 — 首次调用 initialize() 时才 import 和下载模型
|
|
6
|
+
// 3. 优雅降级 — @huggingface/transformers 未安装时 isAvailable() 返回 false
|
|
7
|
+
// 4. 单例 — 全局共享一个 FeatureExtractionPipeline
|
|
8
|
+
// 5. 本地优先 — wiki/models/ 本地模型优先于 HuggingFace Hub 远程下载
|
|
9
|
+
// 6. 精度自适应 — 优先加载 INT8 量化版,回退 FP32
|
|
10
|
+
//
|
|
11
|
+
// 本地模型目录结构:
|
|
12
|
+
// wiki/models/<model-name>/
|
|
13
|
+
// ├── config.json
|
|
14
|
+
// ├── tokenizer.json
|
|
15
|
+
// ├── tokenizer_config.json
|
|
16
|
+
// └── onnx/
|
|
17
|
+
// ├── model.onnx ← FP32 全精度 — 回退选项
|
|
18
|
+
// └── model_quantized.onnx ← INT8 量化 — 优先加载
|
|
19
|
+
//
|
|
20
|
+
// 下载指引:
|
|
21
|
+
// init-wiki-model.bat / .ps1 / .sh 自动从 HuggingFace 镜像下载
|
|
22
|
+
import { existsSync, statSync, mkdirSync } from "node:fs";
|
|
23
|
+
import { resolve } from "node:path";
|
|
24
|
+
import { execSync } from "node:child_process";
|
|
25
|
+
import { getCurrentModel, findModel } from "./model-registry.js";
|
|
26
|
+
// ---- 状态 ----
|
|
27
|
+
let pipeline = null;
|
|
28
|
+
let currentModel = getCurrentModel().hfRepo;
|
|
29
|
+
let initPromise = null;
|
|
30
|
+
let initError = null;
|
|
31
|
+
let loadedVariant = "unknown";
|
|
32
|
+
/** wiki 模块根目录 */
|
|
33
|
+
import { getWikiHome } from "./wiki-paths.js";
|
|
34
|
+
function wikiHome() { return getWikiHome(); }
|
|
35
|
+
/** 本地模型目录: <wiki>/models/<model_name>/ */
|
|
36
|
+
function localModelDir() {
|
|
37
|
+
const name = currentModel.split("/").pop() || currentModel;
|
|
38
|
+
return resolve(wikiHome(), "models", name);
|
|
39
|
+
}
|
|
40
|
+
/** 检测本地模型:config.json + onnx 目录存在即可 */
|
|
41
|
+
function hasLocalModel() {
|
|
42
|
+
const dir = localModelDir();
|
|
43
|
+
if (!existsSync(dir))
|
|
44
|
+
return false;
|
|
45
|
+
if (!existsSync(resolve(dir, "config.json")))
|
|
46
|
+
return false;
|
|
47
|
+
if (!existsSync(resolve(dir, "onnx")))
|
|
48
|
+
return false;
|
|
49
|
+
// 至少有 model.onnx 或 model_quantized.onnx 之一
|
|
50
|
+
const onnxDir = resolve(dir, "onnx");
|
|
51
|
+
return existsSync(resolve(onnxDir, "model.onnx"))
|
|
52
|
+
|| existsSync(resolve(onnxDir, "model_quantized.onnx"));
|
|
53
|
+
}
|
|
54
|
+
/** 获取本地模型详情(精度、大小) */
|
|
55
|
+
export function getLocalModelInfo() {
|
|
56
|
+
if (!hasLocalModel())
|
|
57
|
+
return null;
|
|
58
|
+
const dir = localModelDir();
|
|
59
|
+
const onnxDir = resolve(dir, "onnx");
|
|
60
|
+
// 优先量化版,回退全精度
|
|
61
|
+
const quantFile = resolve(onnxDir, "model_quantized.onnx");
|
|
62
|
+
const fullFile = resolve(onnxDir, "model.onnx");
|
|
63
|
+
let variant = "fp32";
|
|
64
|
+
let onnxFile = fullFile;
|
|
65
|
+
if (existsSync(quantFile)) {
|
|
66
|
+
variant = "int8";
|
|
67
|
+
onnxFile = quantFile;
|
|
68
|
+
}
|
|
69
|
+
else if (existsSync(fullFile)) {
|
|
70
|
+
// 通过文件大小推断精度: > 300MB 大概率是 FP32
|
|
71
|
+
try {
|
|
72
|
+
variant = statSync(fullFile).size > 300_000_000 ? "fp32" : "int8";
|
|
73
|
+
}
|
|
74
|
+
catch { }
|
|
75
|
+
}
|
|
76
|
+
let onnxSize = 0;
|
|
77
|
+
let otherSize = 0;
|
|
78
|
+
try {
|
|
79
|
+
onnxSize = statSync(onnxFile).size;
|
|
80
|
+
}
|
|
81
|
+
catch { }
|
|
82
|
+
for (const f of ["config.json", "tokenizer.json", "tokenizer_config.json"]) {
|
|
83
|
+
try {
|
|
84
|
+
otherSize += statSync(resolve(dir, f)).size;
|
|
85
|
+
}
|
|
86
|
+
catch { }
|
|
87
|
+
}
|
|
88
|
+
return { path: dir, variant, onnxSize, otherSize };
|
|
89
|
+
}
|
|
90
|
+
/** 格式化字节 */
|
|
91
|
+
function fmtSize(bytes) {
|
|
92
|
+
if (bytes >= 1_000_000_000)
|
|
93
|
+
return `${(bytes / 1_000_000_000).toFixed(1)} GB`;
|
|
94
|
+
if (bytes >= 1_000_000)
|
|
95
|
+
return `${(bytes / 1_000_000).toFixed(0)} MB`;
|
|
96
|
+
if (bytes >= 1_000)
|
|
97
|
+
return `${(bytes / 1_000).toFixed(0)} KB`;
|
|
98
|
+
return `${bytes} B`;
|
|
99
|
+
}
|
|
100
|
+
/** 获取模型加载路径:本地路径优先,否则用 HuggingFace ID */
|
|
101
|
+
function resolveModelPath() {
|
|
102
|
+
if (hasLocalModel()) {
|
|
103
|
+
return localModelDir();
|
|
104
|
+
}
|
|
105
|
+
return currentModel;
|
|
106
|
+
}
|
|
107
|
+
// ---- 公开 API ----
|
|
108
|
+
/** 初始化 embedder(幂等,已初始化时立即返回 true) */
|
|
109
|
+
export async function initialize() {
|
|
110
|
+
const wanted = getCurrentModel().hfRepo;
|
|
111
|
+
// 模型已变化 → 强制重载
|
|
112
|
+
if (pipeline && currentModel !== wanted) {
|
|
113
|
+
pipeline = null;
|
|
114
|
+
initPromise = null;
|
|
115
|
+
initError = null;
|
|
116
|
+
currentModel = wanted;
|
|
117
|
+
}
|
|
118
|
+
if (pipeline)
|
|
119
|
+
return true;
|
|
120
|
+
if (initPromise)
|
|
121
|
+
return initPromise;
|
|
122
|
+
initPromise = doInit();
|
|
123
|
+
return initPromise;
|
|
124
|
+
}
|
|
125
|
+
/** 检查 embedder 是否就绪(不触发初始化) */
|
|
126
|
+
export function isAvailable() {
|
|
127
|
+
return pipeline !== null;
|
|
128
|
+
}
|
|
129
|
+
/** 下载模型文件到本地(使用 curl + hf-mirror.com) */
|
|
130
|
+
export function downloadModel(modelId) {
|
|
131
|
+
const m = modelId ? findModel(modelId) : getCurrentModel();
|
|
132
|
+
if (!m)
|
|
133
|
+
return { ok: false, msg: `未知模型: ${modelId}` };
|
|
134
|
+
const dirName = m.hfRepo.split("/").pop();
|
|
135
|
+
const targetDir = resolve(wikiHome(), "models", dirName);
|
|
136
|
+
const onnxDir = resolve(targetDir, "onnx");
|
|
137
|
+
// 已存在则跳过
|
|
138
|
+
if (existsSync(resolve(targetDir, "config.json")) && existsSync(resolve(onnxDir, "model_quantized.onnx"))) {
|
|
139
|
+
return { ok: true, msg: `模型已存在: ${dirName}` };
|
|
140
|
+
}
|
|
141
|
+
try {
|
|
142
|
+
mkdirSync(onnxDir, { recursive: true });
|
|
143
|
+
const baseUrl = `https://hf-mirror.com/${m.hfRepo}/resolve/main`;
|
|
144
|
+
const files = [
|
|
145
|
+
["config.json", resolve(targetDir, "config.json")],
|
|
146
|
+
["tokenizer_config.json", resolve(targetDir, "tokenizer_config.json")],
|
|
147
|
+
["tokenizer.json", resolve(targetDir, "tokenizer.json")],
|
|
148
|
+
["onnx/model_quantized.onnx", resolve(onnxDir, "model_quantized.onnx")],
|
|
149
|
+
];
|
|
150
|
+
for (const [rel, out] of files) {
|
|
151
|
+
execSync(`curl -L -f -s -o "${out}" "${baseUrl}/${rel}"`, { timeout: 600_000 });
|
|
152
|
+
}
|
|
153
|
+
return { ok: true, msg: `已下载: ${dirName} (${fmtSize(m.int8Size)})` };
|
|
154
|
+
}
|
|
155
|
+
catch (e) {
|
|
156
|
+
return { ok: false, msg: `下载失败: ${e?.message || String(e)}` };
|
|
157
|
+
}
|
|
158
|
+
}
|
|
159
|
+
/** 检查 @huggingface/transformers 是否已安装(尝试 import 但不加载模型) */
|
|
160
|
+
export async function isDependencyInstalled() {
|
|
161
|
+
try {
|
|
162
|
+
await import("@huggingface/transformers");
|
|
163
|
+
return true;
|
|
164
|
+
}
|
|
165
|
+
catch {
|
|
166
|
+
return false;
|
|
167
|
+
}
|
|
168
|
+
}
|
|
169
|
+
/** 获取初始化错误信息 */
|
|
170
|
+
export function getInitError() {
|
|
171
|
+
return initError;
|
|
172
|
+
}
|
|
173
|
+
/** 获取当前模型名(registry 显示名) */
|
|
174
|
+
export function getModelName() {
|
|
175
|
+
return getCurrentModel().name;
|
|
176
|
+
}
|
|
177
|
+
/** 获取当前模型 hfRepo */
|
|
178
|
+
export function getModelRepo() {
|
|
179
|
+
return currentModel;
|
|
180
|
+
}
|
|
181
|
+
/** 获取当前模型来源 + 精度 */
|
|
182
|
+
export function getModelSource() {
|
|
183
|
+
if (!pipeline)
|
|
184
|
+
return "未加载";
|
|
185
|
+
const info = getLocalModelInfo();
|
|
186
|
+
if (info)
|
|
187
|
+
return `本地 (${info.variant.toUpperCase()}, ${fmtSize(info.onnxSize)})`;
|
|
188
|
+
return `远程 (HuggingFace Hub)`;
|
|
189
|
+
}
|
|
190
|
+
/** 获取加载的精度变体 */
|
|
191
|
+
export function getLoadedVariant() {
|
|
192
|
+
return loadedVariant;
|
|
193
|
+
}
|
|
194
|
+
/** 对单条文本生成 embedding (384-dim 归一化向量) */
|
|
195
|
+
export async function embed(text) {
|
|
196
|
+
const pipe = await ensurePipeline();
|
|
197
|
+
const result = await pipe(text, { pooling: "mean", normalize: true });
|
|
198
|
+
return Array.from(result.data);
|
|
199
|
+
}
|
|
200
|
+
/** 批量生成 embeddings */
|
|
201
|
+
export async function embedBatch(texts) {
|
|
202
|
+
const pipe = await ensurePipeline();
|
|
203
|
+
const results = [];
|
|
204
|
+
for (const text of texts) {
|
|
205
|
+
const result = await pipe(text, { pooling: "mean", normalize: true });
|
|
206
|
+
results.push(Array.from(result.data));
|
|
207
|
+
}
|
|
208
|
+
return results;
|
|
209
|
+
}
|
|
210
|
+
/** 余弦相似度 */
|
|
211
|
+
export function cosineSimilarity(a, b) {
|
|
212
|
+
if (a.length !== b.length)
|
|
213
|
+
return 0;
|
|
214
|
+
let dot = 0, normA = 0, normB = 0;
|
|
215
|
+
for (let i = 0; i < a.length; i++) {
|
|
216
|
+
dot += a[i] * b[i];
|
|
217
|
+
normA += a[i] * a[i];
|
|
218
|
+
normB += b[i] * b[i];
|
|
219
|
+
}
|
|
220
|
+
const denom = Math.sqrt(normA) * Math.sqrt(normB);
|
|
221
|
+
return denom === 0 ? 0 : dot / denom;
|
|
222
|
+
}
|
|
223
|
+
// ---- 内部 ----
|
|
224
|
+
async function doInit() {
|
|
225
|
+
try {
|
|
226
|
+
const { pipeline: transformersPipeline, env } = await import("@huggingface/transformers");
|
|
227
|
+
const isLocal = hasLocalModel();
|
|
228
|
+
if (isLocal) {
|
|
229
|
+
env.allowLocalModels = true;
|
|
230
|
+
}
|
|
231
|
+
const modelPath = resolveModelPath();
|
|
232
|
+
// 本地模型:若仅有量化版,需显式指定 model_file_name
|
|
233
|
+
const pipelineOpts = {};
|
|
234
|
+
if (isLocal) {
|
|
235
|
+
const onnxDir = resolve(localModelDir(), "onnx");
|
|
236
|
+
if (!existsSync(resolve(onnxDir, "model.onnx"))
|
|
237
|
+
&& existsSync(resolve(onnxDir, "model_quantized.onnx"))) {
|
|
238
|
+
// transformers.js 自动追加 onnx/ 前缀 + .onnx 后缀,这里只需给文件名主干
|
|
239
|
+
pipelineOpts.model_file_name = "model_quantized";
|
|
240
|
+
}
|
|
241
|
+
pipelineOpts.progress_callback = null;
|
|
242
|
+
}
|
|
243
|
+
pipeline = await transformersPipeline("feature-extraction", modelPath, pipelineOpts);
|
|
244
|
+
// 记录加载的精度
|
|
245
|
+
const info = getLocalModelInfo();
|
|
246
|
+
loadedVariant = info?.variant ?? "remote";
|
|
247
|
+
initError = null;
|
|
248
|
+
return true;
|
|
249
|
+
}
|
|
250
|
+
catch (e) {
|
|
251
|
+
initError = e?.message || String(e);
|
|
252
|
+
pipeline = null;
|
|
253
|
+
return false;
|
|
254
|
+
}
|
|
255
|
+
finally {
|
|
256
|
+
initPromise = null;
|
|
257
|
+
}
|
|
258
|
+
}
|
|
259
|
+
async function ensurePipeline() {
|
|
260
|
+
if (pipeline)
|
|
261
|
+
return pipeline;
|
|
262
|
+
const ok = await initialize();
|
|
263
|
+
if (!ok)
|
|
264
|
+
throw new Error(`Embedder 未初始化: ${initError || "未知错误"}`);
|
|
265
|
+
return pipeline;
|
|
266
|
+
}
|
|
267
|
+
//# sourceMappingURL=embedder.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"embedder.js","sourceRoot":"","sources":["../src/embedder.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
export interface FileManifestEntry {
|
|
2
|
+
md5: string;
|
|
3
|
+
fileSize: number;
|
|
4
|
+
astChunkCount: number;
|
|
5
|
+
astIndexedAt: string;
|
|
6
|
+
llmCompiled: boolean;
|
|
7
|
+
llmCompiledAt?: string;
|
|
8
|
+
compilingSince?: string;
|
|
9
|
+
hasSemanticVectors: boolean;
|
|
10
|
+
contentClass?: string;
|
|
11
|
+
deleted?: boolean;
|
|
12
|
+
}
|
|
13
|
+
export interface FileManifest {
|
|
14
|
+
version: 1;
|
|
15
|
+
files: Record<string, FileManifestEntry>;
|
|
16
|
+
}
|
|
17
|
+
export declare function getManifestStats(): {
|
|
18
|
+
total: number;
|
|
19
|
+
compiled: number;
|
|
20
|
+
withVectors: number;
|
|
21
|
+
};
|
|
22
|
+
export declare function getManifest(): FileManifest;
|
|
23
|
+
/** 获取单个文件的状态 */
|
|
24
|
+
export declare function getFileState(relPath: string): FileManifestEntry | undefined;
|
|
25
|
+
/** 更新单个文件的状态(部分更新) */
|
|
26
|
+
export declare function updateFileState(relPath: string, patch: Partial<FileManifestEntry>): void;
|
|
27
|
+
/** 删除单个文件的追踪 */
|
|
28
|
+
export declare function removeFileState(relPath: string): void;
|
|
29
|
+
/** 清除指定数据源的所有文件追踪 */
|
|
30
|
+
export declare function clearSourceFromManifest(sourceDir: string): void;
|
|
31
|
+
/** 计算文本内容的 MD5 散列(用于变更检测) */
|
|
32
|
+
export declare function computeMD5(content: string): string;
|
|
33
|
+
/** 文件内容是否已变更(MD5 不匹配) */
|
|
34
|
+
export declare function isFileChanged(relPath: string, currentMD5: string): boolean;
|
|
35
|
+
/** LLM 编译是否过期(文件 MD5 与编译时 MD5 不匹配) */
|
|
36
|
+
export declare function isCompilationStale(relPath: string, currentMD5: string): boolean;
|
|
37
|
+
/** 确保 compiled/ 目录存在 */
|
|
38
|
+
export declare function ensureCompiledDir(): void;
|
|
39
|
+
/** 获取某文件的 compiled 存储路径 */
|
|
40
|
+
export declare function getCompiledFilePath(relPath: string): string;
|
|
41
|
+
export declare function manifestStats(): {
|
|
42
|
+
total: number;
|
|
43
|
+
compiled: number;
|
|
44
|
+
stale: number;
|
|
45
|
+
};
|
|
46
|
+
//# sourceMappingURL=file-manifest.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"file-manifest.d.ts","sourceRoot":"","sources":["../src/file-manifest.ts"],"names":[],"mappings":"AA0BA,MAAM,WAAW,iBAAiB;IAChC,GAAG,EAAE,MAAM,CAAC;IACZ,QAAQ,EAAE,MAAM,CAAC;IACjB,aAAa,EAAE,MAAM,CAAC;IACtB,YAAY,EAAE,MAAM,CAAC;IACrB,WAAW,EAAE,OAAO,CAAC;IACrB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,kBAAkB,EAAE,OAAO,CAAC;IAC5B,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,OAAO,CAAC,EAAE,OAAO,CAAC;CACnB;AAED,MAAM,WAAW,YAAY;IAC3B,OAAO,EAAE,CAAC,CAAC;IACX,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,iBAAiB,CAAC,CAAC;CAC1C;AAID,wBAAgB,gBAAgB,IAAI;IAClC,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,EAAE,MAAM,CAAC;IACjB,WAAW,EAAE,MAAM,CAAC;CACrB,CAQA;AAID,wBAAgB,WAAW,IAAI,YAAY,CAQ1C;AAMD,gBAAgB;AAChB,wBAAgB,YAAY,CAC1B,OAAO,EAAE,MAAM,GACd,iBAAiB,GAAG,SAAS,CAE/B;AAED,sBAAsB;AACtB,wBAAgB,eAAe,CAC7B,OAAO,EAAE,MAAM,EACf,KAAK,EAAE,OAAO,CAAC,iBAAiB,CAAC,GAChC,IAAI,CAUN;AAED,gBAAgB;AAChB,wBAAgB,eAAe,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI,CAIrD;AAED,qBAAqB;AACrB,wBAAgB,uBAAuB,CAAC,SAAS,EAAE,MAAM,GAAG,IAAI,CAM/D;AAID,6BAA6B;AAC7B,wBAAgB,UAAU,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,CAElD;AAID,yBAAyB;AACzB,wBAAgB,aAAa,CAC3B,OAAO,EAAE,MAAM,EACf,UAAU,EAAE,MAAM,GACjB,OAAO,CAIT;AAED,sCAAsC;AACtC,wBAAgB,kBAAkB,CAChC,OAAO,EAAE,MAAM,EACf,UAAU,EAAE,MAAM,GACjB,OAAO,CAIT;AAID,wBAAwB;AACxB,wBAAgB,iBAAiB,IAAI,IAAI,CAGxC;AAED,2BAA2B;AAC3B,wBAAgB,mBAAmB,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,CAQ3D;AAID,wBAAgB,aAAa,IAAI;IAC/B,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,EAAE,MAAM,CAAC;IACjB,KAAK,EAAE,MAAM,CAAC;CACf,CAQA"}
|
|
@@ -0,0 +1,121 @@
|
|
|
1
|
+
// file-manifest.ts — 文件级追踪清单 (v5.4)
|
|
2
|
+
//
|
|
3
|
+
// manifest.json: 追踪每文件的 md5 / AST 分块状态 / LLM 编译状态
|
|
4
|
+
// 用于判断文件是否变更、是否需要重新索引、LLM 编译是否过期
|
|
5
|
+
//
|
|
6
|
+
// 存储位置: extensions/wiki/manifest.json
|
|
7
|
+
import { resolve } from "node:path";
|
|
8
|
+
import { existsSync, readFileSync, writeFileSync, mkdirSync } from "node:fs";
|
|
9
|
+
import { createHash } from "node:crypto";
|
|
10
|
+
// ---- 路径 ----
|
|
11
|
+
import { getWikiHome } from "./wiki-paths.js";
|
|
12
|
+
function wikiHome() { return getWikiHome(); }
|
|
13
|
+
function manifestFile() {
|
|
14
|
+
return resolve(wikiHome(), "manifest.json");
|
|
15
|
+
}
|
|
16
|
+
function compiledDir() {
|
|
17
|
+
return resolve(wikiHome(), "compiled");
|
|
18
|
+
}
|
|
19
|
+
// ---- 统计 ----
|
|
20
|
+
export function getManifestStats() {
|
|
21
|
+
const m = getManifest();
|
|
22
|
+
const entries = Object.values(m.files).filter(e => !e.deleted);
|
|
23
|
+
return {
|
|
24
|
+
total: entries.length,
|
|
25
|
+
compiled: entries.filter(e => e.llmCompiled).length,
|
|
26
|
+
withVectors: entries.filter(e => e.hasSemanticVectors).length,
|
|
27
|
+
};
|
|
28
|
+
}
|
|
29
|
+
// ---- CRUD ----
|
|
30
|
+
export function getManifest() {
|
|
31
|
+
try {
|
|
32
|
+
const p = manifestFile();
|
|
33
|
+
if (existsSync(p))
|
|
34
|
+
return JSON.parse(readFileSync(p, "utf-8"));
|
|
35
|
+
}
|
|
36
|
+
catch {
|
|
37
|
+
/* ignore */
|
|
38
|
+
}
|
|
39
|
+
return { version: 1, files: {} };
|
|
40
|
+
}
|
|
41
|
+
function setManifest(m) {
|
|
42
|
+
writeFileSync(manifestFile(), JSON.stringify(m, null, 2), "utf-8");
|
|
43
|
+
}
|
|
44
|
+
/** 获取单个文件的状态 */
|
|
45
|
+
export function getFileState(relPath) {
|
|
46
|
+
return getManifest().files[relPath];
|
|
47
|
+
}
|
|
48
|
+
/** 更新单个文件的状态(部分更新) */
|
|
49
|
+
export function updateFileState(relPath, patch) {
|
|
50
|
+
const m = getManifest();
|
|
51
|
+
const existing = m.files[relPath] || {
|
|
52
|
+
md5: "",
|
|
53
|
+
astChunkCount: 0,
|
|
54
|
+
astIndexedAt: "",
|
|
55
|
+
llmCompiled: false,
|
|
56
|
+
};
|
|
57
|
+
m.files[relPath] = { ...existing, ...patch };
|
|
58
|
+
setManifest(m);
|
|
59
|
+
}
|
|
60
|
+
/** 删除单个文件的追踪 */
|
|
61
|
+
export function removeFileState(relPath) {
|
|
62
|
+
const m = getManifest();
|
|
63
|
+
delete m.files[relPath];
|
|
64
|
+
setManifest(m);
|
|
65
|
+
}
|
|
66
|
+
/** 清除指定数据源的所有文件追踪 */
|
|
67
|
+
export function clearSourceFromManifest(sourceDir) {
|
|
68
|
+
const m = getManifest();
|
|
69
|
+
for (const key of Object.keys(m.files)) {
|
|
70
|
+
// 无法直接从 manifest 知道 sourceDir,需要调用方传
|
|
71
|
+
}
|
|
72
|
+
setManifest(m);
|
|
73
|
+
}
|
|
74
|
+
// ---- MD5 ----
|
|
75
|
+
/** 计算文本内容的 MD5 散列(用于变更检测) */
|
|
76
|
+
export function computeMD5(content) {
|
|
77
|
+
return createHash("md5").update(content, "utf-8").digest("hex");
|
|
78
|
+
}
|
|
79
|
+
// ---- 变更判断 ----
|
|
80
|
+
/** 文件内容是否已变更(MD5 不匹配) */
|
|
81
|
+
export function isFileChanged(relPath, currentMD5) {
|
|
82
|
+
const state = getFileState(relPath);
|
|
83
|
+
if (!state)
|
|
84
|
+
return true; // 无记录 → 视为已变更
|
|
85
|
+
return state.md5 !== currentMD5;
|
|
86
|
+
}
|
|
87
|
+
/** LLM 编译是否过期(文件 MD5 与编译时 MD5 不匹配) */
|
|
88
|
+
export function isCompilationStale(relPath, currentMD5) {
|
|
89
|
+
const state = getFileState(relPath);
|
|
90
|
+
if (!state || !state.llmCompiled)
|
|
91
|
+
return true;
|
|
92
|
+
return state.md5 !== currentMD5;
|
|
93
|
+
}
|
|
94
|
+
// ---- compiled/ 目录 ----
|
|
95
|
+
/** 确保 compiled/ 目录存在 */
|
|
96
|
+
export function ensureCompiledDir() {
|
|
97
|
+
const dir = compiledDir();
|
|
98
|
+
if (!existsSync(dir))
|
|
99
|
+
mkdirSync(dir, { recursive: true });
|
|
100
|
+
}
|
|
101
|
+
/** 获取某文件的 compiled 存储路径 */
|
|
102
|
+
export function getCompiledFilePath(relPath) {
|
|
103
|
+
ensureCompiledDir();
|
|
104
|
+
// 把路径分隔符替换为 _,避免子目录冲突
|
|
105
|
+
const safeName = relPath
|
|
106
|
+
.replace(/\\/g, "_")
|
|
107
|
+
.replace(/\//g, "_")
|
|
108
|
+
.replace(/\.md$/i, "") + ".json";
|
|
109
|
+
return resolve(compiledDir(), safeName);
|
|
110
|
+
}
|
|
111
|
+
// ---- 统计 ----
|
|
112
|
+
export function manifestStats() {
|
|
113
|
+
const m = getManifest();
|
|
114
|
+
const entries = Object.values(m.files);
|
|
115
|
+
return {
|
|
116
|
+
total: entries.length,
|
|
117
|
+
compiled: entries.filter((e) => e.llmCompiled).length,
|
|
118
|
+
stale: 0, // 需传入当前 MD5 才能判断,此处仅计数
|
|
119
|
+
};
|
|
120
|
+
}
|
|
121
|
+
//# sourceMappingURL=file-manifest.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"file-manifest.js","sourceRoot":"","sources":["../src/file-manifest.ts"],"names":[],"mappings":"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"}
|
package/dist/index.d.ts
CHANGED
|
@@ -1,10 +1,20 @@
|
|
|
1
1
|
export { WikiEngine } from "./WikiEngine.js";
|
|
2
|
-
export {
|
|
3
|
-
export {
|
|
4
|
-
export {
|
|
5
|
-
export {
|
|
6
|
-
export type {
|
|
7
|
-
export {
|
|
8
|
-
export {
|
|
9
|
-
export
|
|
2
|
+
export type { EngineConfig } from "./WikiEngine.js";
|
|
3
|
+
export { setWikiHome, getWikiHome } from "./wiki-paths.js";
|
|
4
|
+
export { BUILTIN_MODELS as MODELS, getBuiltinModels, findModel, getCurrentModel, selectModel, getDefaultModelId, } from "./model-registry.js";
|
|
5
|
+
export type { ModelInfo } from "./model-registry.js";
|
|
6
|
+
export type { SearchMode, SearchHit, FileEntry, ChunkInfo, RawChunk, CompiledChunk, FileSegment, FileLLMData, CompiledFileRecord, EmbeddingData, } from "./types.js";
|
|
7
|
+
export { readAll, writeAll, getSources, addSource, removeSource, getIndex, mergeIndex, removeEntry, updateEntryPath, getEntry, getWikiModel, readModelId, writeModelId, getSemanticEnabled, setSemanticEnabled, sourcesStats, } from "./store-settings.js";
|
|
8
|
+
export { getEmbeddings, setEmbeddings, getChunkInfo, setChunkInfo, removeEmbedding, getEmbeddingModel, getEmbeddingDim, vectorsStats, } from "./store-vectors.js";
|
|
9
|
+
export { stats } from "./store.js";
|
|
10
|
+
export { setContent, getContent, hasContent, clearSource, clearAll, cacheSize } from "./content-cache.js";
|
|
11
|
+
export { initialize as initEmbedder, isAvailable as embedderAvailable, downloadModel, embed, embedBatch, cosineSimilarity, getModelName, getModelRepo, getModelSource, } from "./embedder.js";
|
|
12
|
+
export { keywordSearch } from "./search.js";
|
|
13
|
+
export { semanticSearch, hybridSearch } from "./semantic-search.js";
|
|
14
|
+
export { scanDir } from "./indexer-scan.js";
|
|
15
|
+
export { extractChunks, generateEmbeddings, embedSingleFile } from "./indexer-embed.js";
|
|
16
|
+
export { getRawChunks, storeCompiledChunks, storeFileSegments, storeFileLLMVector } from "./indexer-compile.js";
|
|
17
|
+
export { extractChunksAST } from "./ast-chunker.js";
|
|
18
|
+
export type { ChunkResult } from "./ast-chunker.js";
|
|
19
|
+
export { COMPILE_SYSTEM_PROMPT, buildCompilePrompt, buildEmbeddingText, parseCompiledResult, FILE_COMPILE_SYSTEM_PROMPT, buildFileCompilePrompt, parseFileSegments, FILE_LLM_SYSTEM_PROMPT, buildFileLLMPrompt, parseFileLLMResult, buildFileLLMEmbeddingText, } from "./semantic-compiler.js";
|
|
10
20
|
//# sourceMappingURL=index.d.ts.map
|
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAC7C,YAAY,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAC;AAMpD,OAAO,EAAE,WAAW,EAAE,WAAW,EAAE,MAAM,iBAAiB,CAAC;AAG3D,OAAO,EACL,cAAc,IAAI,MAAM,EACxB,gBAAgB,EAChB,SAAS,EACT,eAAe,EACf,WAAW,EACX,iBAAiB,GAClB,MAAM,qBAAqB,CAAC;AAC7B,YAAY,EAAE,SAAS,EAAE,MAAM,qBAAqB,CAAC;AAGrD,YAAY,EACV,UAAU,EAAE,SAAS,EAAE,SAAS,EAAE,SAAS,EAC3C,QAAQ,EAAE,aAAa,EAAE,WAAW,EAAE,WAAW,EACjD,kBAAkB,EAAE,aAAa,GAClC,MAAM,YAAY,CAAC;AAGpB,OAAO,EACL,OAAO,EAAE,QAAQ,EACjB,UAAU,EAAE,SAAS,EAAE,YAAY,EACnC,QAAQ,EAAE,UAAU,EAAE,WAAW,EAAE,eAAe,EAAE,QAAQ,EAC5D,YAAY,EAAE,WAAW,EAAE,YAAY,EACvC,kBAAkB,EAAE,kBAAkB,EAAE,YAAY,GACrD,MAAM,qBAAqB,CAAC;AAC7B,OAAO,EACL,aAAa,EAAE,aAAa,EAC5B,YAAY,EAAE,YAAY,EAC1B,eAAe,EAAE,iBAAiB,EAAE,eAAe,EAAE,YAAY,GAClE,MAAM,oBAAoB,CAAC;AAC5B,OAAO,EAAE,KAAK,EAAE,MAAM,YAAY,CAAC;AAGnC,OAAO,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,WAAW,EAAE,QAAQ,EAAE,SAAS,EAAE,MAAM,oBAAoB,CAAC;AAG1G,OAAO,EACL,UAAU,IAAI,YAAY,EAC1B,WAAW,IAAI,iBAAiB,EAChC,aAAa,EACb,KAAK,EACL,UAAU,EACV,gBAAgB,EAChB,YAAY,EAAE,YAAY,EAAE,cAAc,GAC3C,MAAM,eAAe,CAAC;AAGvB,OAAO,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAC5C,OAAO,EAAE,cAAc,EAAE,YAAY,EAAE,MAAM,sBAAsB,CAAC;AAGpE,OAAO,EAAE,OAAO,EAAE,MAAM,mBAAmB,CAAC;AAC5C,OAAO,EAAE,aAAa,EAAE,kBAAkB,EAAE,eAAe,EAAE,MAAM,oBAAoB,CAAC;AACxF,OAAO,EAAE,YAAY,EAAE,mBAAmB,EAAE,iBAAiB,EAAE,kBAAkB,EAAE,MAAM,sBAAsB,CAAC;AAGhH,OAAO,EAAE,gBAAgB,EAAE,MAAM,kBAAkB,CAAC;AACpD,YAAY,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAGpD,OAAO,EACL,qBAAqB,EAAE,kBAAkB,EACzC,kBAAkB,EAAE,mBAAmB,EACvC,0BAA0B,EAAE,sBAAsB,EAAE,iBAAiB,EACrE,sBAAsB,EAAE,kBAAkB,EAAE,kBAAkB,EAC9D,yBAAyB,GAC1B,MAAM,wBAAwB,CAAC"}
|
package/dist/index.js
CHANGED
|
@@ -1,9 +1,27 @@
|
|
|
1
|
-
// index.ts — @llangtop/pwiki-core barrel exports
|
|
2
1
|
export { WikiEngine } from "./WikiEngine.js";
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
export {
|
|
7
|
-
|
|
8
|
-
export {
|
|
2
|
+
// index.ts — @llangtop/pwiki-core barrel
|
|
3
|
+
// Wraps extensions/wiki/lib/ modules into a WikiEngine class
|
|
4
|
+
// for use by both CLI and pi extension.
|
|
5
|
+
export { setWikiHome, getWikiHome } from "./wiki-paths.js";
|
|
6
|
+
// ---- Model registry ----
|
|
7
|
+
export { BUILTIN_MODELS as MODELS, getBuiltinModels, findModel, getCurrentModel, selectModel, getDefaultModelId, } from "./model-registry.js";
|
|
8
|
+
// ---- Store ----
|
|
9
|
+
export { readAll, writeAll, getSources, addSource, removeSource, getIndex, mergeIndex, removeEntry, updateEntryPath, getEntry, getWikiModel, readModelId, writeModelId, getSemanticEnabled, setSemanticEnabled, sourcesStats, } from "./store-settings.js";
|
|
10
|
+
export { getEmbeddings, setEmbeddings, getChunkInfo, setChunkInfo, removeEmbedding, getEmbeddingModel, getEmbeddingDim, vectorsStats, } from "./store-vectors.js";
|
|
11
|
+
export { stats } from "./store.js";
|
|
12
|
+
// ---- Content cache ----
|
|
13
|
+
export { setContent, getContent, hasContent, clearSource, clearAll, cacheSize } from "./content-cache.js";
|
|
14
|
+
// ---- Embedder ----
|
|
15
|
+
export { initialize as initEmbedder, isAvailable as embedderAvailable, downloadModel, embed, embedBatch, cosineSimilarity, getModelName, getModelRepo, getModelSource, } from "./embedder.js";
|
|
16
|
+
// ---- Search ----
|
|
17
|
+
export { keywordSearch } from "./search.js";
|
|
18
|
+
export { semanticSearch, hybridSearch } from "./semantic-search.js";
|
|
19
|
+
// ---- Indexer ----
|
|
20
|
+
export { scanDir } from "./indexer-scan.js";
|
|
21
|
+
export { extractChunks, generateEmbeddings, embedSingleFile } from "./indexer-embed.js";
|
|
22
|
+
export { getRawChunks, storeCompiledChunks, storeFileSegments, storeFileLLMVector } from "./indexer-compile.js";
|
|
23
|
+
// ---- AST chunker ----
|
|
24
|
+
export { extractChunksAST } from "./ast-chunker.js";
|
|
25
|
+
// ---- Semantic compiler ----
|
|
26
|
+
export { COMPILE_SYSTEM_PROMPT, buildCompilePrompt, buildEmbeddingText, parseCompiledResult, FILE_COMPILE_SYSTEM_PROMPT, buildFileCompilePrompt, parseFileSegments, FILE_LLM_SYSTEM_PROMPT, buildFileLLMPrompt, parseFileLLMResult, buildFileLLMEmbeddingText, } from "./semantic-compiler.js";
|
|
9
27
|
//# sourceMappingURL=index.js.map
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAG7C,yCAAyC;AACzC,6DAA6D;AAC7D,wCAAwC;AAExC,OAAO,EAAE,WAAW,EAAE,WAAW,EAAE,MAAM,iBAAiB,CAAC;AAE3D,2BAA2B;AAC3B,OAAO,EACL,cAAc,IAAI,MAAM,EACxB,gBAAgB,EAChB,SAAS,EACT,eAAe,EACf,WAAW,EACX,iBAAiB,GAClB,MAAM,qBAAqB,CAAC;AAU7B,kBAAkB;AAClB,OAAO,EACL,OAAO,EAAE,QAAQ,EACjB,UAAU,EAAE,SAAS,EAAE,YAAY,EACnC,QAAQ,EAAE,UAAU,EAAE,WAAW,EAAE,eAAe,EAAE,QAAQ,EAC5D,YAAY,EAAE,WAAW,EAAE,YAAY,EACvC,kBAAkB,EAAE,kBAAkB,EAAE,YAAY,GACrD,MAAM,qBAAqB,CAAC;AAC7B,OAAO,EACL,aAAa,EAAE,aAAa,EAC5B,YAAY,EAAE,YAAY,EAC1B,eAAe,EAAE,iBAAiB,EAAE,eAAe,EAAE,YAAY,GAClE,MAAM,oBAAoB,CAAC;AAC5B,OAAO,EAAE,KAAK,EAAE,MAAM,YAAY,CAAC;AAEnC,0BAA0B;AAC1B,OAAO,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,WAAW,EAAE,QAAQ,EAAE,SAAS,EAAE,MAAM,oBAAoB,CAAC;AAE1G,qBAAqB;AACrB,OAAO,EACL,UAAU,IAAI,YAAY,EAC1B,WAAW,IAAI,iBAAiB,EAChC,aAAa,EACb,KAAK,EACL,UAAU,EACV,gBAAgB,EAChB,YAAY,EAAE,YAAY,EAAE,cAAc,GAC3C,MAAM,eAAe,CAAC;AAEvB,mBAAmB;AACnB,OAAO,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAC5C,OAAO,EAAE,cAAc,EAAE,YAAY,EAAE,MAAM,sBAAsB,CAAC;AAEpE,oBAAoB;AACpB,OAAO,EAAE,OAAO,EAAE,MAAM,mBAAmB,CAAC;AAC5C,OAAO,EAAE,aAAa,EAAE,kBAAkB,EAAE,eAAe,EAAE,MAAM,oBAAoB,CAAC;AACxF,OAAO,EAAE,YAAY,EAAE,mBAAmB,EAAE,iBAAiB,EAAE,kBAAkB,EAAE,MAAM,sBAAsB,CAAC;AAEhH,wBAAwB;AACxB,OAAO,EAAE,gBAAgB,EAAE,MAAM,kBAAkB,CAAC;AAGpD,8BAA8B;AAC9B,OAAO,EACL,qBAAqB,EAAE,kBAAkB,EACzC,kBAAkB,EAAE,mBAAmB,EACvC,0BAA0B,EAAE,sBAAsB,EAAE,iBAAiB,EACrE,sBAAsB,EAAE,kBAAkB,EAAE,kBAAkB,EAC9D,yBAAyB,GAC1B,MAAM,wBAAwB,CAAC"}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
import type { CompiledChunk, RawChunk, FileSegment, FileLLMData } from "./types.js";
|
|
2
|
+
import type { PreprocessedChunk } from "./preprocessor.js";
|
|
3
|
+
/**
|
|
4
|
+
* 获取所有已索引文件的原始块(供 AI 编译)
|
|
5
|
+
*/
|
|
6
|
+
export declare function getRawChunks(sourceDir?: string, uncompiledOnly?: boolean): Promise<RawChunk[]>;
|
|
7
|
+
/**
|
|
8
|
+
* 存储块级编译结果并重建 embedding (v5.1 遗留)
|
|
9
|
+
*/
|
|
10
|
+
export declare function storeCompiledChunks(compiled: CompiledChunk[]): Promise<number>;
|
|
11
|
+
/**
|
|
12
|
+
* 存储文件级编译结果并重建 embedding (v5.2 → v5.4 过渡)
|
|
13
|
+
* v5.4 TODO: 替换为 storeFileLLMVector — 只挂 1 个 ###llm 向量,不删 AST chunks
|
|
14
|
+
*/
|
|
15
|
+
export declare function storeFileSegments(relPath: string, segments: FileSegment[], preprocessed: PreprocessedChunk[]): Promise<number>;
|
|
16
|
+
/**
|
|
17
|
+
* 存储文件级 LLM 编译结果:挂载 1 个 ###llm 向量,不删除 AST chunks。
|
|
18
|
+
*/
|
|
19
|
+
export declare function storeFileLLMVector(sourceDir: string, relPath: string, llmData: FileLLMData, llmModel?: string): Promise<boolean>;
|
|
20
|
+
//# sourceMappingURL=indexer-compile.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"indexer-compile.d.ts","sourceRoot":"","sources":["../src/indexer-compile.ts"],"names":[],"mappings":"AAYA,OAAO,KAAK,EAAE,aAAa,EAAE,QAAQ,EAAE,WAAW,EAAa,WAAW,EAAsB,MAAM,YAAY,CAAC;AACnH,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,mBAAmB,CAAC;AAG3D;;GAEG;AACH,wBAAsB,YAAY,CAChC,SAAS,CAAC,EAAE,MAAM,EAClB,cAAc,UAAO,GACpB,OAAO,CAAC,QAAQ,EAAE,CAAC,CA+BrB;AAED;;GAEG;AACH,wBAAsB,mBAAmB,CACvC,QAAQ,EAAE,aAAa,EAAE,GACxB,OAAO,CAAC,MAAM,CAAC,CAqDjB;AAED;;;GAGG;AACH,wBAAsB,iBAAiB,CACrC,OAAO,EAAE,MAAM,EACf,QAAQ,EAAE,WAAW,EAAE,EACvB,YAAY,EAAE,iBAAiB,EAAE,GAChC,OAAO,CAAC,MAAM,CAAC,CAoEjB;AAID;;GAEG;AACH,wBAAsB,kBAAkB,CACtC,SAAS,EAAE,MAAM,EACjB,OAAO,EAAE,MAAM,EACf,OAAO,EAAE,WAAW,EACpB,QAAQ,CAAC,EAAE,MAAM,GAChB,OAAO,CAAC,OAAO,CAAC,CAgDlB"}
|