@llangtop/pwiki-core 0.1.0

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.
Files changed (69) hide show
  1. package/dist/WikiEngine.d.ts +81 -0
  2. package/dist/WikiEngine.d.ts.map +1 -0
  3. package/dist/WikiEngine.js +371 -0
  4. package/dist/WikiEngine.js.map +1 -0
  5. package/dist/compile/compiler.d.ts +39 -0
  6. package/dist/compile/compiler.d.ts.map +1 -0
  7. package/dist/compile/compiler.js +227 -0
  8. package/dist/compile/compiler.js.map +1 -0
  9. package/dist/compile/index.d.ts +3 -0
  10. package/dist/compile/index.d.ts.map +1 -0
  11. package/dist/compile/index.js +2 -0
  12. package/dist/compile/index.js.map +1 -0
  13. package/dist/embed/WikiEmbedder.d.ts +28 -0
  14. package/dist/embed/WikiEmbedder.d.ts.map +1 -0
  15. package/dist/embed/WikiEmbedder.js +147 -0
  16. package/dist/embed/WikiEmbedder.js.map +1 -0
  17. package/dist/embed/index.d.ts +2 -0
  18. package/dist/embed/index.d.ts.map +1 -0
  19. package/dist/embed/index.js +2 -0
  20. package/dist/embed/index.js.map +1 -0
  21. package/dist/index.d.ts +10 -0
  22. package/dist/index.d.ts.map +1 -0
  23. package/dist/index.js +9 -0
  24. package/dist/index.js.map +1 -0
  25. package/dist/llm/WikiLLM.d.ts +24 -0
  26. package/dist/llm/WikiLLM.d.ts.map +1 -0
  27. package/dist/llm/WikiLLM.js +46 -0
  28. package/dist/llm/WikiLLM.js.map +1 -0
  29. package/dist/llm/index.d.ts +3 -0
  30. package/dist/llm/index.d.ts.map +1 -0
  31. package/dist/llm/index.js +2 -0
  32. package/dist/llm/index.js.map +1 -0
  33. package/dist/models.d.ts +5 -0
  34. package/dist/models.d.ts.map +1 -0
  35. package/dist/models.js +54 -0
  36. package/dist/models.js.map +1 -0
  37. package/dist/search/WikiSearch.d.ts +14 -0
  38. package/dist/search/WikiSearch.d.ts.map +1 -0
  39. package/dist/search/WikiSearch.js +223 -0
  40. package/dist/search/WikiSearch.js.map +1 -0
  41. package/dist/search/index.d.ts +2 -0
  42. package/dist/search/index.d.ts.map +1 -0
  43. package/dist/search/index.js +2 -0
  44. package/dist/search/index.js.map +1 -0
  45. package/dist/store/WikiStore.d.ts +47 -0
  46. package/dist/store/WikiStore.d.ts.map +1 -0
  47. package/dist/store/WikiStore.js +301 -0
  48. package/dist/store/WikiStore.js.map +1 -0
  49. package/dist/store/index.d.ts +2 -0
  50. package/dist/store/index.d.ts.map +1 -0
  51. package/dist/store/index.js +2 -0
  52. package/dist/store/index.js.map +1 -0
  53. package/dist/types.d.ts +129 -0
  54. package/dist/types.d.ts.map +1 -0
  55. package/dist/types.js +3 -0
  56. package/dist/types.js.map +1 -0
  57. package/dist/util/fs.d.ts +7 -0
  58. package/dist/util/fs.d.ts.map +1 -0
  59. package/dist/util/fs.js +36 -0
  60. package/dist/util/fs.js.map +1 -0
  61. package/dist/util/index.d.ts +3 -0
  62. package/dist/util/index.d.ts.map +1 -0
  63. package/dist/util/index.js +3 -0
  64. package/dist/util/index.js.map +1 -0
  65. package/dist/util/paths.d.ts +17 -0
  66. package/dist/util/paths.d.ts.map +1 -0
  67. package/dist/util/paths.js +31 -0
  68. package/dist/util/paths.js.map +1 -0
  69. package/package.json +34 -0
@@ -0,0 +1,81 @@
1
+ import { WikiStore } from "./store/index.js";
2
+ import { WikiSearch } from "./search/index.js";
3
+ import type { EngineConfig, SearchHit, SearchMode, FileEntry, RawChunk, WikiStatus, ModelInfo } from "./types.js";
4
+ export declare class WikiEngine {
5
+ readonly store: WikiStore;
6
+ readonly search: WikiSearch;
7
+ private embedder;
8
+ private llm;
9
+ constructor(config?: EngineConfig);
10
+ get sources(): string[];
11
+ addSource(absPath: string): boolean;
12
+ removeSource(target: string): string | null;
13
+ load(): Promise<{
14
+ files: number;
15
+ sources: number;
16
+ }>;
17
+ loadSource(absPath: string): Promise<number>;
18
+ search_(query: string, mode?: SearchMode): Promise<SearchHit[]>;
19
+ /** 创建 .md 条目 */
20
+ createEntry(sourceDir: string, relPath: string, title: string, tags?: string[], content?: string): string;
21
+ /** 读取条目全文 */
22
+ readEntry(relPath: string): {
23
+ entry: FileEntry;
24
+ content: string;
25
+ } | null;
26
+ /** 重命名(修改 frontmatter title) */
27
+ renameEntry(relPath: string, newTitle: string): boolean;
28
+ /** 移动文件 */
29
+ moveEntry(relPath: string, newRelPath: string): boolean;
30
+ /** 修改内容 */
31
+ modifyEntry(relPath: string, content: string): boolean;
32
+ get semanticEnabled(): boolean;
33
+ enableSemantic(modelId?: string): Promise<{
34
+ ok: boolean;
35
+ msg: string;
36
+ }>;
37
+ disableSemantic(): void;
38
+ generateEmbeddings(sourceDir?: string): Promise<{
39
+ embedded: number;
40
+ skipped: number;
41
+ }>;
42
+ /** 获取待编译的原始块 */
43
+ getRawChunks(sourceDir?: string, uncompiledOnly?: boolean): RawChunk[];
44
+ /** 获取编译 prompt(调用方自行调 LLM) */
45
+ getCompilePrompt(relPath: string): {
46
+ system: string;
47
+ user: string;
48
+ } | null;
49
+ /** 存储编译结果 */
50
+ storeCompiled(relPath: string, result: {
51
+ topic: string;
52
+ normalizedText: string;
53
+ concepts: string[];
54
+ aliases: string[];
55
+ }): void;
56
+ /** 编译状态查询 */
57
+ compileStatus(sourceDir?: string): {
58
+ total: number;
59
+ compiled: number;
60
+ uncompiled: string[];
61
+ };
62
+ get llmInfo(): {
63
+ apiBase: string;
64
+ model: string;
65
+ hasKey: boolean;
66
+ };
67
+ /** 编译单个文件(调 LLM + 存储结果) */
68
+ compileFile(relPath: string): Promise<{
69
+ ok: boolean;
70
+ msg: string;
71
+ }>;
72
+ /** 批量编译 */
73
+ compileAll(sourceDir?: string, limit?: number): Promise<{
74
+ compiled: number;
75
+ failed: number;
76
+ msgs: string[];
77
+ }>;
78
+ status(): WikiStatus;
79
+ listModels(): ModelInfo[];
80
+ }
81
+ //# sourceMappingURL=WikiEngine.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"WikiEngine.d.ts","sourceRoot":"","sources":["../src/WikiEngine.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,371 @@
1
+ // WikiEngine.ts — 协调层:组装 Store / Search / Embedder / Compiler
2
+ import { existsSync, renameSync, mkdirSync, writeFileSync } from "node:fs";
3
+ import { resolve, dirname } from "node:path";
4
+ import { createHash } from "node:crypto";
5
+ import { WikiStore } from "./store/index.js";
6
+ import { WikiSearch } from "./search/index.js";
7
+ import { WikiEmbedder } from "./embed/index.js";
8
+ import { defaultModel, findModel } from "./models.js";
9
+ import { chunkByHeadings, preprocess, buildEmbeddingText, COMPILE_SYSTEM_PROMPT, buildCompilePrompt, parseCompileResult, getCompileStats, markCompiled } from "./compile/index.js";
10
+ import { WikiLLM } from "./llm/index.js";
11
+ function defaultBasePath() {
12
+ const home = process.env.HOME || process.env.USERPROFILE || process.cwd();
13
+ return `${home}/.Pwiki`;
14
+ }
15
+ export class WikiEngine {
16
+ store;
17
+ search;
18
+ embedder;
19
+ llm;
20
+ constructor(config = {}) {
21
+ const basePath = config.basePath ?? defaultBasePath();
22
+ const modelId = config.modelId ?? defaultModel().id;
23
+ const model = findModel(modelId) ?? defaultModel();
24
+ this.store = new WikiStore(basePath);
25
+ this.embedder = new WikiEmbedder(model, this.store.paths.modelsDir);
26
+ this.search = new WikiSearch(this.store, (text) => this.embedder.embed(text));
27
+ this.llm = new WikiLLM({ apiBase: this.store.config.llmApiBase, apiKey: this.store.config.llmApiKey, model: this.store.config.llmModel });
28
+ // 如果 config.json 已有 semantic=true,自动准备 embedder
29
+ if (this.store.config.semantic) {
30
+ this.embedder.init().catch(() => { });
31
+ }
32
+ }
33
+ // ==========================================================================
34
+ // 数据源
35
+ // ==========================================================================
36
+ get sources() { return this.store.config.sources; }
37
+ addSource(absPath) {
38
+ return this.store.addSource(absPath);
39
+ }
40
+ removeSource(target) {
41
+ return this.store.removeSource(target);
42
+ }
43
+ // ==========================================================================
44
+ // 扫描 + 索引
45
+ // ==========================================================================
46
+ async load() {
47
+ const sources = this.store.config.sources;
48
+ let totalFiles = 0;
49
+ for (const src of sources) {
50
+ const entries = await this.store.scanDir(src);
51
+ this.store.setEntries(entries);
52
+ totalFiles += entries.length;
53
+ }
54
+ return { files: totalFiles, sources: sources.length };
55
+ }
56
+ async loadSource(absPath) {
57
+ const entries = await this.store.scanDir(absPath);
58
+ this.store.setEntries(entries);
59
+ return entries.length;
60
+ }
61
+ // ==========================================================================
62
+ // 搜索
63
+ // ==========================================================================
64
+ async search_(query, mode = "keyword") {
65
+ return this.search.search(query, mode);
66
+ }
67
+ // ==========================================================================
68
+ // 条目 CRUD
69
+ // ==========================================================================
70
+ /** 创建 .md 条目 */
71
+ createEntry(sourceDir, relPath, title, tags = [], content = "") {
72
+ const absPath = resolve(sourceDir, relPath);
73
+ if (existsSync(absPath))
74
+ return `已存在: ${absPath}`;
75
+ // 确保 .md 后缀
76
+ const finalPath = relPath.endsWith(".md") ? relPath : `${relPath}.md`;
77
+ const finalAbs = resolve(sourceDir, finalPath);
78
+ const fm = [
79
+ "---",
80
+ `title: ${title}`,
81
+ `tags: [${tags.join(", ")}]`,
82
+ `created: ${new Date().toISOString()}`,
83
+ "---", "",
84
+ ].join("\n");
85
+ mkdirSync(dirname(finalAbs), { recursive: true });
86
+ writeFileSync(finalAbs, fm + content, "utf-8");
87
+ // 更新索引
88
+ const entry = {
89
+ title, tags, sourceDir,
90
+ relPath: finalPath.replace(/\\/g, "/"),
91
+ mtime: new Date().toISOString(),
92
+ };
93
+ this.store.setEntries([entry]);
94
+ this.store.setContent(entry.relPath, fm + content);
95
+ return entry.relPath;
96
+ }
97
+ /** 读取条目全文 */
98
+ readEntry(relPath) {
99
+ const entry = this.store.getEntry(relPath);
100
+ if (!entry)
101
+ return null;
102
+ const content = this.store.getContent(relPath);
103
+ if (!content)
104
+ return null;
105
+ return { entry, content };
106
+ }
107
+ /** 重命名(修改 frontmatter title) */
108
+ renameEntry(relPath, newTitle) {
109
+ const entry = this.store.getEntry(relPath);
110
+ const content = this.store.getContent(relPath);
111
+ if (!entry || !content)
112
+ return false;
113
+ const updated = content.replace(/^(title:\s*).+$/m, `$1${newTitle}`);
114
+ // 写文件
115
+ const absPath = resolve(entry.sourceDir, relPath);
116
+ writeFileSync(absPath, updated, "utf-8");
117
+ // 更新索引
118
+ entry.title = newTitle;
119
+ entry.mtime = new Date().toISOString();
120
+ this.store.setEntries([entry]);
121
+ this.store.setContent(relPath, updated);
122
+ return true;
123
+ }
124
+ /** 移动文件 */
125
+ moveEntry(relPath, newRelPath) {
126
+ const entry = this.store.getEntry(relPath);
127
+ if (!entry)
128
+ return false;
129
+ const oldAbs = resolve(entry.sourceDir, relPath);
130
+ const newAbs = resolve(entry.sourceDir, newRelPath);
131
+ if (existsSync(newAbs))
132
+ return false;
133
+ mkdirSync(dirname(newAbs), { recursive: true });
134
+ renameSync(oldAbs, newAbs);
135
+ const newEntry = { ...entry, relPath: newRelPath, mtime: new Date().toISOString() };
136
+ this.store.removeEntry(relPath);
137
+ this.store.setEntries([newEntry]);
138
+ // 迁移向量
139
+ const vec = this.store.getEmbedding(relPath);
140
+ if (vec) {
141
+ this.store.setSingleEmbedding(newRelPath, vec);
142
+ this.store.removeEmbeddingsByPath(relPath);
143
+ this.store.flushVectors();
144
+ }
145
+ return true;
146
+ }
147
+ /** 修改内容 */
148
+ modifyEntry(relPath, content) {
149
+ const entry = this.store.getEntry(relPath);
150
+ if (!entry)
151
+ return false;
152
+ const absPath = resolve(entry.sourceDir, relPath);
153
+ writeFileSync(absPath, content, "utf-8");
154
+ entry.mtime = new Date().toISOString();
155
+ this.store.setEntries([entry]);
156
+ this.store.setContent(relPath, content);
157
+ return true;
158
+ }
159
+ // ==========================================================================
160
+ // 语义搜索控制
161
+ // ==========================================================================
162
+ get semanticEnabled() { return this.store.config.semantic; }
163
+ async enableSemantic(modelId) {
164
+ if (modelId) {
165
+ const m = findModel(modelId);
166
+ if (!m)
167
+ return { ok: false, msg: `未知模型: ${modelId}` };
168
+ this.embedder.switchModel(m);
169
+ this.store.saveConfig({ model: m.id });
170
+ }
171
+ const ok = await this.embedder.init();
172
+ if (!ok)
173
+ return { ok: false, msg: `初始化失败: ${this.embedder.error}` };
174
+ this.store.saveConfig({ semantic: true });
175
+ return { ok: true, msg: `语义搜索已开启。模型: ${this.embedder.modelInfo.name}。来源: ${this.embedder.source}` };
176
+ }
177
+ disableSemantic() {
178
+ this.store.saveConfig({ semantic: false });
179
+ }
180
+ // ==========================================================================
181
+ // 向量生成
182
+ // ==========================================================================
183
+ async generateEmbeddings(sourceDir) {
184
+ if (!this.embedder.ready)
185
+ await this.embedder.init();
186
+ if (!this.embedder.ready)
187
+ throw new Error(`Embedder 未就绪: ${this.embedder.error}`);
188
+ const entries = Object.values(this.store.entries).filter(e => !sourceDir || e.sourceDir === sourceDir);
189
+ let embedded = 0, skipped = 0;
190
+ for (const entry of entries) {
191
+ const content = this.store.getContent(entry.relPath);
192
+ if (!content) {
193
+ skipped++;
194
+ continue;
195
+ }
196
+ const mft = this.store.getManifestEntry(entry.relPath);
197
+ const md5 = md5Hash(content);
198
+ if (mft?.embedded && mft.md5 === md5) {
199
+ skipped++;
200
+ continue;
201
+ }
202
+ const chunks = chunkByHeadings(content, entry.relPath);
203
+ if (chunks.length <= 1) {
204
+ // 单块文件:直接嵌入全文
205
+ const vec = await this.embedder.embed(content.slice(0, 800));
206
+ this.store.setSingleEmbedding(entry.relPath, vec);
207
+ }
208
+ else {
209
+ // 多块文件:逐块嵌入
210
+ for (const chunk of chunks) {
211
+ const pre = preprocess(chunk.text, chunk.heading, chunk.level);
212
+ const embedText = buildEmbeddingText(chunk.text, pre);
213
+ const vec = await this.embedder.embed(embedText);
214
+ this.store.setSingleEmbedding(chunk.key, vec);
215
+ this.store.setChunkMeta(chunk.key, {
216
+ heading: chunk.heading, level: chunk.level,
217
+ ...pre,
218
+ });
219
+ }
220
+ }
221
+ // 更新 manifest
222
+ this.store.setManifestEntry(entry.relPath, {
223
+ md5, size: content.length, chunks: chunks.length,
224
+ compiled: mft?.compiled ?? false,
225
+ embedded: true,
226
+ updatedAt: new Date().toISOString(),
227
+ });
228
+ embedded++;
229
+ }
230
+ this.store.flushVectors();
231
+ this.store.vectors.model = this.embedder.modelInfo.hfRepo;
232
+ this.store.vectors.dim = this.embedder.modelInfo.dim;
233
+ this.store.flushVectors();
234
+ return { embedded, skipped };
235
+ }
236
+ // ==========================================================================
237
+ // LLM 编译
238
+ // ==========================================================================
239
+ /** 获取待编译的原始块 */
240
+ getRawChunks(sourceDir, uncompiledOnly = true) {
241
+ const entries = Object.values(this.store.entries).filter(e => !sourceDir || e.sourceDir === sourceDir);
242
+ const result = [];
243
+ for (const entry of entries) {
244
+ if (uncompiledOnly) {
245
+ const mft = this.store.getManifestEntry(entry.relPath);
246
+ if (mft?.compiled)
247
+ continue;
248
+ }
249
+ const content = this.store.getContent(entry.relPath);
250
+ if (!content)
251
+ continue;
252
+ const chunks = chunkByHeadings(content, entry.relPath);
253
+ for (const chunk of chunks) {
254
+ const key = chunk.key;
255
+ result.push({
256
+ key, relPath: entry.relPath,
257
+ heading: chunk.heading,
258
+ rawText: chunk.text,
259
+ compiled: !!this.store.getChunkMeta(key)?.topic,
260
+ });
261
+ }
262
+ }
263
+ return result;
264
+ }
265
+ /** 获取编译 prompt(调用方自行调 LLM) */
266
+ getCompilePrompt(relPath) {
267
+ const content = this.store.getContent(relPath);
268
+ if (!content)
269
+ return null;
270
+ const chunks = chunkByHeadings(content, relPath);
271
+ if (chunks.length === 0)
272
+ return null;
273
+ // 合并为单文件 prompt
274
+ const texts = chunks.map(c => `### ${c.heading}\n${c.text}`).join("\n\n");
275
+ return {
276
+ system: COMPILE_SYSTEM_PROMPT,
277
+ user: buildCompilePrompt(relPath, texts, chunks[0].heading),
278
+ };
279
+ }
280
+ /** 存储编译结果 */
281
+ storeCompiled(relPath, result) {
282
+ const content = this.store.getContent(relPath);
283
+ const md5 = content ? md5Hash(content) : "";
284
+ // 存储 compiled record
285
+ const record = {
286
+ path: relPath,
287
+ compiledAt: new Date().toISOString(),
288
+ sourceMD5: md5,
289
+ model: "llm",
290
+ ...result,
291
+ embeddingText: buildEmbeddingText(result.normalizedText, { topic: result.topic, concepts: result.concepts, aliases: result.aliases }),
292
+ };
293
+ this.store.setCompiled(relPath, record);
294
+ // 存储 LLM 块元数据
295
+ this.store.setChunkMeta(`${relPath}###llm`, {
296
+ heading: "(file-level)",
297
+ level: 0,
298
+ topic: result.topic,
299
+ summary: result.normalizedText.slice(0, 200),
300
+ concepts: result.concepts,
301
+ aliases: result.aliases,
302
+ });
303
+ markCompiled(this.store, relPath);
304
+ }
305
+ /** 编译状态查询 */
306
+ compileStatus(sourceDir) {
307
+ return getCompileStats(this.store);
308
+ }
309
+ // ==========================================================================
310
+ // 状态
311
+ // ==========================================================================
312
+ // ==========================================================================
313
+ // LLM 编译(内置调用)
314
+ // ==========================================================================
315
+ get llmInfo() { return this.llm.info; }
316
+ /** 编译单个文件(调 LLM + 存储结果) */
317
+ async compileFile(relPath) {
318
+ const content = this.store.getContent(relPath);
319
+ if (!content)
320
+ return { ok: false, msg: `Not found: ${relPath}` };
321
+ const chunks = chunkByHeadings(content, relPath);
322
+ if (chunks.length === 0)
323
+ return { ok: false, msg: `No chunks: ${relPath}` };
324
+ const texts = chunks.map(c => `### ${c.heading}\n${c.text}`).join("\n\n");
325
+ const userPrompt = buildCompilePrompt(relPath, texts, chunks[0].heading);
326
+ try {
327
+ const raw = await this.llm.chatJson(COMPILE_SYSTEM_PROMPT, userPrompt);
328
+ const result = parseCompileResult(raw);
329
+ if (!result)
330
+ return { ok: false, msg: `Invalid JSON: ${raw.slice(0, 200)}` };
331
+ this.storeCompiled(relPath, result);
332
+ return { ok: true, msg: `Compiled: ${relPath} -> "${result.topic}"` };
333
+ }
334
+ catch (e) {
335
+ return { ok: false, msg: `LLM error: ${e.message}` };
336
+ }
337
+ }
338
+ /** 批量编译 */
339
+ async compileAll(sourceDir, limit = 10) {
340
+ const stats = getCompileStats(this.store);
341
+ const targets = sourceDir
342
+ ? stats.uncompiled.filter(p => this.store.getEntry(p)?.sourceDir === sourceDir)
343
+ : stats.uncompiled;
344
+ const batch = targets.slice(0, limit);
345
+ let compiled = 0, failed = 0;
346
+ const msgs = [];
347
+ for (const path of batch) {
348
+ const r = await this.compileFile(path);
349
+ if (r.ok) {
350
+ compiled++;
351
+ msgs.push(` ${r.msg}`);
352
+ }
353
+ else {
354
+ failed++;
355
+ msgs.push(` FAIL: ${r.msg}`);
356
+ }
357
+ }
358
+ return { compiled, failed, msgs };
359
+ }
360
+ status() {
361
+ return this.store.status();
362
+ }
363
+ listModels() {
364
+ const { MODELS } = require("./models.js");
365
+ return MODELS;
366
+ }
367
+ }
368
+ function md5Hash(content) {
369
+ return createHash("md5").update(content).digest("hex");
370
+ }
371
+ //# sourceMappingURL=WikiEngine.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"WikiEngine.js","sourceRoot":"","sources":["../src/WikiEngine.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,39 @@
1
+ import type { WikiStore } from "../store/index.js";
2
+ import type { ChunkMeta } from "../types.js";
3
+ export declare function extractSummary(raw: string, maxLen?: number): string;
4
+ export interface HeadingChunk {
5
+ key: string;
6
+ relPath: string;
7
+ heading: string;
8
+ level: number;
9
+ text: string;
10
+ }
11
+ /** 按 heading 将 markdown 切分为块 */
12
+ export declare function chunkByHeadings(content: string, relPath: string, maxEmbedLen?: number): HeadingChunk[];
13
+ /** 推断 chunkType */
14
+ export declare function inferChunkType(text: string, heading: string): string;
15
+ /** 推断 contentClass */
16
+ export declare function inferContentClass(text: string): string;
17
+ /** 推断 importance (0-1) */
18
+ export declare function inferImportance(text: string, heading: string): number;
19
+ /** 生成关键词(简单分词) */
20
+ export declare function extractKeywords(text: string): string[];
21
+ /** 预处理一个块,生成程序可推断的 ChunkMeta 字段 */
22
+ export declare function preprocess(text: string, heading: string, level: number): Partial<ChunkMeta>;
23
+ export declare const COMPILE_SYSTEM_PROMPT = "\u4F60\u662F\u4E00\u4E2A\"\u77E5\u8BC6\u8BED\u4E49\u7F16\u8BD1\u5668\"\u3002\n\u4F60\u7684\u4EFB\u52A1\u4E0D\u662F\u603B\u7ED3\u5185\u5BB9\u3002\n\u4F60\u7684\u4EFB\u52A1\u662F\uFF1A\u5C06\u4EBA\u7C7B\u968F\u624B\u8BB0\u5F55\u7684\u975E\u7ED3\u6784\u5316\u7B14\u8BB0\uFF0C\u8F6C\u6362\u4E3A\u9002\u5408\u673A\u5668\u8BED\u4E49\u7D22\u5F15\u3001\u6982\u5FF5\u68C0\u7D22\u3001\u77E5\u8BC6\u805A\u7C7B\u3001\u957F\u671F\u6F14\u5316\u7684\"\u8BA4\u77E5\u77E5\u8BC6\u5355\u5143\"\u3002\n\u6838\u5FC3\u539F\u5219\uFF1A\n1. \u4FDD\u7559\u539F\u59CB\u4FE1\u606F \u2014 \u4E0D\u5220\u6280\u672F\u7EC6\u8282\n2. \u4E0D\u6539\u53D8\u539F\u610F \u2014 \u53EA\u89C4\u8303\u5316\u8868\u8FBE\n3. \u8865\u5168\u9690\u5F0F\u8868\u8FBE \u2014 \u8865\u5145\u7701\u7565\u7684\u4E3B\u8BED\u3001\u5C55\u5F00\u7F29\u5199\n4. \u7EDF\u4E00\u672F\u8BED \u2014 \u5C06\u540C\u4E49\u8868\u8FBE\u5F52\u4E00\n5. \u63D0\u53D6\u6838\u5FC3\u6982\u5FF5 \u2014 \u8BC6\u522B\u6280\u672F\u5173\u952E\u8BCD\n6. \u4FDD\u6301\u5355\u4E3B\u9898 \u2014 \u4E00\u4E2A chunk \u53EA\u63CF\u8FF0\u4E00\u4E2A\u8BA4\u77E5\u4E3B\u9898\n7. \u8F93\u51FA\u7ED3\u6784\u5316 JSON \u2014 \u4E25\u683C\u9075\u5FAA schema\n\u8F93\u51FA JSON schema:\n{\n \"topic\": \"string \u2014 \u6838\u5FC3\u4E3B\u9898\uFF08\u4E00\u53E5\u8BDD\uFF09\",\n \"normalizedText\": \"string \u2014 \u89C4\u8303\u5316\u540E\u7684\u6587\u672C\",\n \"concepts\": [\"string \u2014 \u6838\u5FC3\u6982\u5FF5\"],\n \"aliases\": [\"string \u2014 \u540C\u4E49\u8868\u8FBE\uFF08\u4E2D\u82F1\u5BF9\u7167\u3001\u7F29\u5199\u5C55\u5F00\uFF09\"]\n}";
24
+ export declare function buildCompilePrompt(relPath: string, rawText: string, heading: string): string;
25
+ export declare function parseCompileResult(raw: string): {
26
+ topic: string;
27
+ normalizedText: string;
28
+ concepts: string[];
29
+ aliases: string[];
30
+ } | null;
31
+ export declare function buildEmbeddingText(rawText: string, meta: Partial<ChunkMeta>, maxLen?: number): string;
32
+ export declare function getCompileStats(store: WikiStore): {
33
+ total: number;
34
+ compiled: number;
35
+ uncompiled: string[];
36
+ };
37
+ /** 标记文件为已编译 */
38
+ export declare function markCompiled(store: WikiStore, relPath: string): void;
39
+ //# sourceMappingURL=compiler.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"compiler.d.ts","sourceRoot":"","sources":["../../src/compile/compiler.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,mBAAmB,CAAC;AACnD,OAAO,KAAK,EAAE,SAAS,EAAiB,MAAM,aAAa,CAAC;AAM5D,wBAAgB,cAAc,CAAC,GAAG,EAAE,MAAM,EAAE,MAAM,SAAM,GAAG,MAAM,CAchE;AAMD,MAAM,WAAW,YAAY;IAC3B,GAAG,EAAE,MAAM,CAAC;IACZ,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,EAAE,MAAM,CAAC;IAChB,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,EAAE,MAAM,CAAC;CACd;AAED,gCAAgC;AAChC,wBAAgB,eAAe,CAAC,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,WAAW,SAAM,GAAG,YAAY,EAAE,CAgCnG;AAMD,mBAAmB;AACnB,wBAAgB,cAAc,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,MAAM,CAapE;AAED,sBAAsB;AACtB,wBAAgB,iBAAiB,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAKtD;AAED,0BAA0B;AAC1B,wBAAgB,eAAe,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,MAAM,CAOrE;AAED,kBAAkB;AAClB,wBAAgB,eAAe,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,EAAE,CActD;AAED,mCAAmC;AACnC,wBAAgB,UAAU,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,SAAS,CAAC,CAS3F;AAMD,eAAO,MAAM,qBAAqB,2hDAiBhC,CAAC;AAEH,wBAAgB,kBAAkB,CAAC,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,MAAM,CAQ5F;AAED,wBAAgB,kBAAkB,CAAC,GAAG,EAAE,MAAM,GAAG;IAAE,KAAK,EAAE,MAAM,CAAC;IAAC,cAAc,EAAE,MAAM,CAAC;IAAC,QAAQ,EAAE,MAAM,EAAE,CAAC;IAAC,OAAO,EAAE,MAAM,EAAE,CAAA;CAAE,GAAG,IAAI,CAiBvI;AAMD,wBAAgB,kBAAkB,CAChC,OAAO,EAAE,MAAM,EACf,IAAI,EAAE,OAAO,CAAC,SAAS,CAAC,EACxB,MAAM,SAAM,GACX,MAAM,CAQR;AAMD,wBAAgB,eAAe,CAAC,KAAK,EAAE,SAAS,GAAG;IAAE,KAAK,EAAE,MAAM,CAAC;IAAC,QAAQ,EAAE,MAAM,CAAC;IAAC,UAAU,EAAE,MAAM,EAAE,CAAA;CAAE,CAU3G;AAED,eAAe;AACf,wBAAgB,YAAY,CAAC,KAAK,EAAE,SAAS,EAAE,OAAO,EAAE,MAAM,GAAG,IAAI,CAWpE"}