@llangtop/pwiki-core 0.3.3 → 0.4.1
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 +81 -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 -36
- 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
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"store-settings.d.ts","sourceRoot":"","sources":["../src/store-settings.ts"],"names":[],"mappings":"AAQA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,YAAY,CAAC;AAK5C,wBAAgB,WAAW,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI,CAE9C;AAcD,UAAU,YAAY;IACpB,OAAO,EAAE,MAAM,EAAE,CAAC;IAClB,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,SAAS,CAAC,CAAC;IACjC,QAAQ,EAAE,MAAM,CAAC;IACjB,eAAe,CAAC,EAAE,OAAO,CAAC;IAC1B,cAAc,CAAC,EAAE,MAAM,CAAC;CACzB;AAID,wBAAgB,OAAO,IAAI,YAAY,CAMtC;AAED,wBAAgB,QAAQ,CAAC,CAAC,EAAE,YAAY,GAAG,IAAI,CAE9C;AAID,wBAAgB,UAAU,IAAI,MAAM,EAAE,CAErC;AAED,wBAAgB,SAAS,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAMlD;AAED,wBAAwB;AACxB,wBAAgB,YAAY,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CA2B1D;AAID,wBAAgB,QAAQ,IAAI,MAAM,CAAC,MAAM,EAAE,SAAS,CAAC,CAEpD;AAED,wBAAgB,UAAU,CAAC,OAAO,EAAE,SAAS,EAAE,GAAG,IAAI,CAOrD;AAED,wBAAgB,WAAW,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAMpD;AAED,wBAAgB,eAAe,CAC7B,UAAU,EAAE,MAAM,EAClB,UAAU,EAAE,MAAM,EAClB,KAAK,EAAE,SAAS,GACf,OAAO,CAOT;AAED,wBAAgB,QAAQ,CAAC,OAAO,EAAE,MAAM,GAAG,SAAS,GAAG,IAAI,CAG1D;AAID,wBAAgB,YAAY,IAAI,MAAM,CAErC;AAID,wBAAgB,WAAW,IAAI,MAAM,GAAG,SAAS,CAEhD;AAED,wBAAgB,YAAY,CAAC,EAAE,EAAE,MAAM,GAAG,IAAI,CAI7C;AAID,wBAAgB,kBAAkB,IAAI,OAAO,CAE5C;AAED,wBAAgB,kBAAkB,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CAIzD;AAID,wBAAgB,YAAY,IAAI;IAC9B,OAAO,EAAE,MAAM,CAAC;IAChB,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,EAAE,MAAM,CAAC;CAClB,CAOA"}
|
|
@@ -0,0 +1,138 @@
|
|
|
1
|
+
// store-settings.ts — settings.json 持久化层
|
|
2
|
+
// 管理: 数据源列表 / 文件索引 / 语义开关 / 模型选择
|
|
3
|
+
//
|
|
4
|
+
// 拆自 store.ts (P0-2), 仅负责 settings.json 的读写。
|
|
5
|
+
// 向量相关已迁至 store-vectors.ts。
|
|
6
|
+
import { resolve } from "node:path";
|
|
7
|
+
import { existsSync, readFileSync, writeFileSync } from "node:fs";
|
|
8
|
+
import { getEmbeddings, setEmbeddings } from "./store-vectors.js";
|
|
9
|
+
let _wikiHome = null;
|
|
10
|
+
export function setWikiHome(path) {
|
|
11
|
+
_wikiHome = resolve(path);
|
|
12
|
+
}
|
|
13
|
+
function wikiHome() {
|
|
14
|
+
if (_wikiHome)
|
|
15
|
+
return _wikiHome;
|
|
16
|
+
const home = process.env.HOME || process.env.USERPROFILE || process.cwd();
|
|
17
|
+
return resolve(home, ".Pwiki");
|
|
18
|
+
}
|
|
19
|
+
function settingsFile() {
|
|
20
|
+
return resolve(wikiHome(), "settings.json");
|
|
21
|
+
}
|
|
22
|
+
// ---- 核心读写 ----
|
|
23
|
+
export function readAll() {
|
|
24
|
+
try {
|
|
25
|
+
const p = settingsFile();
|
|
26
|
+
if (existsSync(p))
|
|
27
|
+
return JSON.parse(readFileSync(p, "utf-8"));
|
|
28
|
+
}
|
|
29
|
+
catch { /* ignore */ }
|
|
30
|
+
return { sources: [], index: {}, lastScan: "" };
|
|
31
|
+
}
|
|
32
|
+
export function writeAll(s) {
|
|
33
|
+
writeFileSync(settingsFile(), JSON.stringify(s, null, 2), "utf-8");
|
|
34
|
+
}
|
|
35
|
+
// ---- 数据源 ----
|
|
36
|
+
export function getSources() {
|
|
37
|
+
return readAll().sources;
|
|
38
|
+
}
|
|
39
|
+
export function addSource(absPath) {
|
|
40
|
+
const s = readAll();
|
|
41
|
+
if (s.sources.includes(absPath))
|
|
42
|
+
return false;
|
|
43
|
+
s.sources.push(absPath);
|
|
44
|
+
writeAll(s);
|
|
45
|
+
return true;
|
|
46
|
+
}
|
|
47
|
+
/** 移除数据源并清理关联索引和语义向量 */
|
|
48
|
+
export function removeSource(target) {
|
|
49
|
+
const s = readAll();
|
|
50
|
+
const idx = s.sources.findIndex((p) => p === target || p.endsWith(target));
|
|
51
|
+
if (idx < 0)
|
|
52
|
+
return null;
|
|
53
|
+
const removed = s.sources[idx];
|
|
54
|
+
s.sources.splice(idx, 1);
|
|
55
|
+
// 清理该 source 的索引条目
|
|
56
|
+
for (const [key, entry] of Object.entries(s.index)) {
|
|
57
|
+
if (entry.sourceDir === removed)
|
|
58
|
+
delete s.index[key];
|
|
59
|
+
}
|
|
60
|
+
writeAll(s);
|
|
61
|
+
// 清理该 source 的语义向量
|
|
62
|
+
const emb = getEmbeddings();
|
|
63
|
+
let embCleaned = 0;
|
|
64
|
+
for (const key of Object.keys(emb)) {
|
|
65
|
+
if (s.index[key] === undefined) {
|
|
66
|
+
delete emb[key];
|
|
67
|
+
embCleaned++;
|
|
68
|
+
}
|
|
69
|
+
}
|
|
70
|
+
if (embCleaned > 0)
|
|
71
|
+
setEmbeddings(emb);
|
|
72
|
+
return removed;
|
|
73
|
+
}
|
|
74
|
+
// ---- 索引 ----
|
|
75
|
+
export function getIndex() {
|
|
76
|
+
return readAll().index;
|
|
77
|
+
}
|
|
78
|
+
export function mergeIndex(entries) {
|
|
79
|
+
const s = readAll();
|
|
80
|
+
for (const e of entries) {
|
|
81
|
+
s.index[e.relPath] = e;
|
|
82
|
+
}
|
|
83
|
+
s.lastScan = new Date().toISOString();
|
|
84
|
+
writeAll(s);
|
|
85
|
+
}
|
|
86
|
+
export function removeEntry(relPath) {
|
|
87
|
+
const s = readAll();
|
|
88
|
+
if (!s.index[relPath])
|
|
89
|
+
return false;
|
|
90
|
+
delete s.index[relPath];
|
|
91
|
+
writeAll(s);
|
|
92
|
+
return true;
|
|
93
|
+
}
|
|
94
|
+
export function updateEntryPath(oldRelPath, newRelPath, entry) {
|
|
95
|
+
const s = readAll();
|
|
96
|
+
if (!s.index[oldRelPath])
|
|
97
|
+
return false;
|
|
98
|
+
delete s.index[oldRelPath];
|
|
99
|
+
s.index[newRelPath] = entry;
|
|
100
|
+
writeAll(s);
|
|
101
|
+
return true;
|
|
102
|
+
}
|
|
103
|
+
export function getEntry(relPath) {
|
|
104
|
+
const idx = getIndex();
|
|
105
|
+
return idx[relPath] ?? null;
|
|
106
|
+
}
|
|
107
|
+
// ---- wiki 对话模型(供 /wiki-ask 使用,与语义模型无关) ----
|
|
108
|
+
export function getWikiModel() {
|
|
109
|
+
return "opencode-go/deepseek-v4-flash";
|
|
110
|
+
}
|
|
111
|
+
// ---- 当前语义模型 id ----
|
|
112
|
+
export function readModelId() {
|
|
113
|
+
return readAll().currentModelId;
|
|
114
|
+
}
|
|
115
|
+
export function writeModelId(id) {
|
|
116
|
+
const s = readAll();
|
|
117
|
+
s.currentModelId = id;
|
|
118
|
+
writeAll(s);
|
|
119
|
+
}
|
|
120
|
+
// ---- 语义搜索开关 ----
|
|
121
|
+
export function getSemanticEnabled() {
|
|
122
|
+
return readAll().semanticEnabled ?? false;
|
|
123
|
+
}
|
|
124
|
+
export function setSemanticEnabled(enabled) {
|
|
125
|
+
const s = readAll();
|
|
126
|
+
s.semanticEnabled = enabled;
|
|
127
|
+
writeAll(s);
|
|
128
|
+
}
|
|
129
|
+
// ---- 统计 ----
|
|
130
|
+
export function sourcesStats() {
|
|
131
|
+
const s = readAll();
|
|
132
|
+
return {
|
|
133
|
+
sources: s.sources.length,
|
|
134
|
+
files: Object.keys(s.index).length,
|
|
135
|
+
lastScan: s.lastScan,
|
|
136
|
+
};
|
|
137
|
+
}
|
|
138
|
+
//# sourceMappingURL=store-settings.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"store-settings.js","sourceRoot":"","sources":["../src/store-settings.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
export declare function getEmbeddings(): Record<string, number[]>;
|
|
2
|
+
export declare function setEmbeddings(entries: Record<string, number[]>, model?: string, dim?: number): void;
|
|
3
|
+
export declare function getChunkInfo(): Record<string, import("./types.js").ChunkInfo>;
|
|
4
|
+
export declare function setChunkInfo(chunkInfo: Record<string, import("./types.js").ChunkInfo>): void;
|
|
5
|
+
export declare function removeEmbedding(relPath: string): void;
|
|
6
|
+
export declare function getEmbeddingModel(): string | undefined;
|
|
7
|
+
export declare function getEmbeddingDim(): number | undefined;
|
|
8
|
+
export declare function vectorsStats(): {
|
|
9
|
+
embeddings: number;
|
|
10
|
+
model?: string;
|
|
11
|
+
dim?: number;
|
|
12
|
+
};
|
|
13
|
+
//# sourceMappingURL=store-vectors.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"store-vectors.d.ts","sourceRoot":"","sources":["../src/store-vectors.ts"],"names":[],"mappings":"AAkBA,wBAAgB,aAAa,IAAI,MAAM,CAAC,MAAM,EAAE,MAAM,EAAE,CAAC,CASxD;AAED,wBAAgB,aAAa,CAC3B,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,EAAE,CAAC,EACjC,KAAK,CAAC,EAAE,MAAM,EACd,GAAG,CAAC,EAAE,MAAM,GACX,IAAI,CAWN;AAID,wBAAgB,YAAY,IAAI,MAAM,CACpC,MAAM,EACN,OAAO,YAAY,EAAE,SAAS,CAC/B,CAOA;AAED,wBAAgB,YAAY,CAC1B,SAAS,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,YAAY,EAAE,SAAS,CAAC,GACxD,IAAI,CAWN;AAID,wBAAgB,eAAe,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI,CAcrD;AAID,wBAAgB,iBAAiB,IAAI,MAAM,GAAG,SAAS,CAEtD;AAED,wBAAgB,eAAe,IAAI,MAAM,GAAG,SAAS,CAEpD;AAID,wBAAgB,YAAY,IAAI;IAC9B,UAAU,EAAE,MAAM,CAAC;IACnB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,GAAG,CAAC,EAAE,MAAM,CAAC;CACd,CAQA"}
|
|
@@ -0,0 +1,101 @@
|
|
|
1
|
+
// store-vectors.ts — vectors.json 持久化层
|
|
2
|
+
// 管理: 语义向量 / chunk 元数据 / 模型维度信息
|
|
3
|
+
//
|
|
4
|
+
// 拆自 store.ts (P0-2), 仅负责 vectors.json 的读写。
|
|
5
|
+
import { resolve } from "node:path";
|
|
6
|
+
import { existsSync, readFileSync, writeFileSync } from "node:fs";
|
|
7
|
+
import { getWikiHome } from "./wiki-paths.js";
|
|
8
|
+
function wikiHome() { return getWikiHome(); }
|
|
9
|
+
function vectorFile() {
|
|
10
|
+
return resolve(wikiHome(), "vectors.json");
|
|
11
|
+
}
|
|
12
|
+
// ---- 向量 ----
|
|
13
|
+
export function getEmbeddings() {
|
|
14
|
+
try {
|
|
15
|
+
const p = vectorFile();
|
|
16
|
+
if (existsSync(p)) {
|
|
17
|
+
const v = JSON.parse(readFileSync(p, "utf-8"));
|
|
18
|
+
return v.entries ?? {};
|
|
19
|
+
}
|
|
20
|
+
}
|
|
21
|
+
catch { /* ignore */ }
|
|
22
|
+
return {};
|
|
23
|
+
}
|
|
24
|
+
export function setEmbeddings(entries, model, dim) {
|
|
25
|
+
const chunkInfo = getChunkInfo();
|
|
26
|
+
const prev = readRaw();
|
|
27
|
+
const v = {
|
|
28
|
+
model: model ?? prev?.model ?? "unknown",
|
|
29
|
+
dim: dim ?? prev?.dim ?? 0,
|
|
30
|
+
entries,
|
|
31
|
+
chunkInfo: Object.keys(chunkInfo).length > 0 ? chunkInfo : undefined,
|
|
32
|
+
};
|
|
33
|
+
writeFileSync(vectorFile(), JSON.stringify(v), "utf-8");
|
|
34
|
+
}
|
|
35
|
+
// ---- 块元数据 ----
|
|
36
|
+
export function getChunkInfo() {
|
|
37
|
+
try {
|
|
38
|
+
const prev = readRaw();
|
|
39
|
+
return prev?.chunkInfo ?? {};
|
|
40
|
+
}
|
|
41
|
+
catch {
|
|
42
|
+
return {};
|
|
43
|
+
}
|
|
44
|
+
}
|
|
45
|
+
export function setChunkInfo(chunkInfo) {
|
|
46
|
+
const entries = getEmbeddings();
|
|
47
|
+
const prev = readRaw();
|
|
48
|
+
const v = {
|
|
49
|
+
model: prev?.model ?? "unknown",
|
|
50
|
+
dim: prev?.dim ?? 0,
|
|
51
|
+
entries,
|
|
52
|
+
chunkInfo: Object.keys(chunkInfo).length > 0 ? chunkInfo : undefined,
|
|
53
|
+
};
|
|
54
|
+
writeFileSync(vectorFile(), JSON.stringify(v), "utf-8");
|
|
55
|
+
}
|
|
56
|
+
// ---- 单条删除 ----
|
|
57
|
+
export function removeEmbedding(relPath) {
|
|
58
|
+
const emb = getEmbeddings();
|
|
59
|
+
let removed = false;
|
|
60
|
+
if (emb[relPath]) {
|
|
61
|
+
delete emb[relPath];
|
|
62
|
+
removed = true;
|
|
63
|
+
}
|
|
64
|
+
for (const key of Object.keys(emb)) {
|
|
65
|
+
if (key.startsWith(`${relPath}###`)) {
|
|
66
|
+
delete emb[key];
|
|
67
|
+
removed = true;
|
|
68
|
+
}
|
|
69
|
+
}
|
|
70
|
+
if (removed)
|
|
71
|
+
setEmbeddings(emb);
|
|
72
|
+
}
|
|
73
|
+
// ---- 模型元信息 ----
|
|
74
|
+
export function getEmbeddingModel() {
|
|
75
|
+
return readRaw()?.model;
|
|
76
|
+
}
|
|
77
|
+
export function getEmbeddingDim() {
|
|
78
|
+
return readRaw()?.dim;
|
|
79
|
+
}
|
|
80
|
+
// ---- 统计 ----
|
|
81
|
+
export function vectorsStats() {
|
|
82
|
+
const prev = readRaw();
|
|
83
|
+
const emb = prev?.entries ?? {};
|
|
84
|
+
return {
|
|
85
|
+
embeddings: Object.keys(emb).length,
|
|
86
|
+
model: prev?.model,
|
|
87
|
+
dim: prev?.dim,
|
|
88
|
+
};
|
|
89
|
+
}
|
|
90
|
+
// ---- 内部 ----
|
|
91
|
+
function readRaw() {
|
|
92
|
+
try {
|
|
93
|
+
const p = vectorFile();
|
|
94
|
+
if (existsSync(p)) {
|
|
95
|
+
return JSON.parse(readFileSync(p, "utf-8"));
|
|
96
|
+
}
|
|
97
|
+
}
|
|
98
|
+
catch { /* ignore */ }
|
|
99
|
+
return null;
|
|
100
|
+
}
|
|
101
|
+
//# sourceMappingURL=store-vectors.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"store-vectors.js","sourceRoot":"","sources":["../src/store-vectors.ts"],"names":[],"mappings":"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"}
|
package/dist/store.d.ts
ADDED
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
export { readAll, writeAll, getSources, addSource, removeSource, getIndex, mergeIndex, removeEntry, updateEntryPath, getEntry, getWikiModel, readModelId, writeModelId, getSemanticEnabled, setSemanticEnabled, sourcesStats, } from "./store-settings.js";
|
|
2
|
+
export { getEmbeddings, setEmbeddings, getChunkInfo, setChunkInfo, removeEmbedding, getEmbeddingModel, getEmbeddingDim, vectorsStats, } from "./store-vectors.js";
|
|
3
|
+
export declare function stats(): {
|
|
4
|
+
sources: number;
|
|
5
|
+
files: number;
|
|
6
|
+
dirs: number;
|
|
7
|
+
lastScan: string;
|
|
8
|
+
semanticEnabled: boolean;
|
|
9
|
+
embeddings: number;
|
|
10
|
+
};
|
|
11
|
+
//# sourceMappingURL=store.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"store.d.ts","sourceRoot":"","sources":["../src/store.ts"],"names":[],"mappings":"AASA,OAAO,EACL,OAAO,EACP,QAAQ,EACR,UAAU,EACV,SAAS,EACT,YAAY,EACZ,QAAQ,EACR,UAAU,EACV,WAAW,EACX,eAAe,EACf,QAAQ,EACR,YAAY,EACZ,WAAW,EACX,YAAY,EACZ,kBAAkB,EAClB,kBAAkB,EAClB,YAAY,GACb,MAAM,qBAAqB,CAAC;AAG7B,OAAO,EACL,aAAa,EACb,aAAa,EACb,YAAY,EACZ,YAAY,EACZ,eAAe,EACf,iBAAiB,EACjB,eAAe,EACf,YAAY,GACb,MAAM,oBAAoB,CAAC;AAM5B,wBAAgB,KAAK;;;;;;;EAcpB"}
|
package/dist/store.js
ADDED
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
// store.ts — 数据层 barrel (v5.1)
|
|
2
|
+
//
|
|
3
|
+
// P0-2 拆分后: store-settings.ts + store-vectors.ts
|
|
4
|
+
// 本文件保留所有原有导出签名,确保零破坏迁移。
|
|
5
|
+
//
|
|
6
|
+
// 依赖方向: store-settings → store-vectors (单向)
|
|
7
|
+
// 本 barrel 聚合两者
|
|
8
|
+
// ---- settings.json ----
|
|
9
|
+
export { readAll, writeAll, getSources, addSource, removeSource, getIndex, mergeIndex, removeEntry, updateEntryPath, getEntry, getWikiModel, readModelId, writeModelId, getSemanticEnabled, setSemanticEnabled, sourcesStats, } from "./store-settings.js";
|
|
10
|
+
// ---- vectors.json ----
|
|
11
|
+
export { getEmbeddings, setEmbeddings, getChunkInfo, setChunkInfo, removeEmbedding, getEmbeddingModel, getEmbeddingDim, vectorsStats, } from "./store-vectors.js";
|
|
12
|
+
// ---- 聚合统计 ----
|
|
13
|
+
import { sourcesStats, getIndex, getSemanticEnabled } from "./store-settings.js";
|
|
14
|
+
import { vectorsStats } from "./store-vectors.js";
|
|
15
|
+
export function stats() {
|
|
16
|
+
const s = sourcesStats();
|
|
17
|
+
const v = vectorsStats();
|
|
18
|
+
const dirs = new Set(Object.values(getIndex()).map((e) => e.sourceDir));
|
|
19
|
+
return {
|
|
20
|
+
sources: s.sources,
|
|
21
|
+
files: s.files,
|
|
22
|
+
dirs: dirs.size,
|
|
23
|
+
lastScan: s.lastScan,
|
|
24
|
+
semanticEnabled: getSemanticEnabled(),
|
|
25
|
+
embeddings: v.embeddings,
|
|
26
|
+
};
|
|
27
|
+
}
|
|
28
|
+
//# sourceMappingURL=store.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"store.js","sourceRoot":"","sources":["../src/store.ts"],"names":[],"mappings":"AAAA,+BAA+B;AAC/B,EAAE;AACF,iDAAiD;AACjD,yBAAyB;AACzB,EAAE;AACF,4CAA4C;AAC5C,0BAA0B;AAE1B,0BAA0B;AAC1B,OAAO,EACL,OAAO,EACP,QAAQ,EACR,UAAU,EACV,SAAS,EACT,YAAY,EACZ,QAAQ,EACR,UAAU,EACV,WAAW,EACX,eAAe,EACf,QAAQ,EACR,YAAY,EACZ,WAAW,EACX,YAAY,EACZ,kBAAkB,EAClB,kBAAkB,EAClB,YAAY,GACb,MAAM,qBAAqB,CAAC;AAE7B,yBAAyB;AACzB,OAAO,EACL,aAAa,EACb,aAAa,EACb,YAAY,EACZ,YAAY,EACZ,eAAe,EACf,iBAAiB,EACjB,eAAe,EACf,YAAY,GACb,MAAM,oBAAoB,CAAC;AAE5B,iBAAiB;AACjB,OAAO,EAAE,YAAY,EAAE,QAAQ,EAAE,kBAAkB,EAAE,MAAM,qBAAqB,CAAC;AACjF,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAElD,MAAM,UAAU,KAAK;IACnB,MAAM,CAAC,GAAG,YAAY,EAAE,CAAC;IACzB,MAAM,CAAC,GAAG,YAAY,EAAE,CAAC;IACzB,MAAM,IAAI,GAAG,IAAI,GAAG,CAClB,MAAM,CAAC,MAAM,CAAC,QAAQ,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,SAAS,CAAC,CAClD,CAAC;IACF,OAAO;QACL,OAAO,EAAE,CAAC,CAAC,OAAO;QAClB,KAAK,EAAE,CAAC,CAAC,KAAK;QACd,IAAI,EAAE,IAAI,CAAC,IAAI;QACf,QAAQ,EAAE,CAAC,CAAC,QAAQ;QACpB,eAAe,EAAE,kBAAkB,EAAE;QACrC,UAAU,EAAE,CAAC,CAAC,UAAU;KACzB,CAAC;AACJ,CAAC"}
|
package/dist/types.d.ts
CHANGED
|
@@ -1,51 +1,28 @@
|
|
|
1
|
+
/** 搜索模式 */
|
|
1
2
|
export type SearchMode = "keyword" | "semantic" | "hybrid";
|
|
2
|
-
|
|
3
|
-
/** 文件相对路径 */
|
|
4
|
-
path: string;
|
|
5
|
-
/** 来源目录 */
|
|
6
|
-
sourceDir: string;
|
|
7
|
-
/** 文档标题 */
|
|
8
|
-
title: string;
|
|
9
|
-
/** 标签 */
|
|
10
|
-
tags: string[];
|
|
11
|
-
/** 匹配片段 */
|
|
12
|
-
snippet: string;
|
|
13
|
-
/** 综合分数 */
|
|
14
|
-
score: number;
|
|
15
|
-
/** 文档摘要 */
|
|
16
|
-
summary?: string;
|
|
17
|
-
/** 语义相似度 (0-1) */
|
|
18
|
-
semanticScore?: number;
|
|
19
|
-
/** 命中的块索引 */
|
|
20
|
-
chunkIndex?: number;
|
|
21
|
-
/** 块标题 */
|
|
22
|
-
chunkHeading?: string;
|
|
23
|
-
}
|
|
3
|
+
/** 索引中的单个文件条目 */
|
|
24
4
|
export interface FileEntry {
|
|
5
|
+
/** 从第一个 # 标题提取,或取文件名 */
|
|
25
6
|
title: string;
|
|
7
|
+
/** frontmatter tags(如果存在) */
|
|
26
8
|
tags: string[];
|
|
9
|
+
/** 所属数据源目录 */
|
|
27
10
|
sourceDir: string;
|
|
28
|
-
/** 相对于 sourceDir
|
|
11
|
+
/** 相对于 sourceDir 的文件路径 */
|
|
29
12
|
relPath: string;
|
|
13
|
+
/** 文件修改时间 */
|
|
30
14
|
mtime: string;
|
|
31
15
|
}
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
llmApiBase?: string;
|
|
43
|
-
/** LLM API key (or set via env DEEPSEEK_API_KEY / OPENAI_API_KEY) */
|
|
44
|
-
llmApiKey?: string;
|
|
45
|
-
/** LLM model name */
|
|
46
|
-
llmModel?: string;
|
|
47
|
-
}
|
|
48
|
-
export interface ChunkMeta {
|
|
16
|
+
/** 文档块信息(标题分块 + 语义编译元数据)
|
|
17
|
+
*
|
|
18
|
+
* 基础字段 (索引时自动填充):
|
|
19
|
+
* heading, level
|
|
20
|
+
*
|
|
21
|
+
* 编译字段 (AI 通过 wiki_store_compiled 填充):
|
|
22
|
+
* topic, summary, concepts, entities, aliases, keywords,
|
|
23
|
+
* normalizedText, chunkType, importance, confidence
|
|
24
|
+
*/
|
|
25
|
+
export interface ChunkInfo {
|
|
49
26
|
heading: string;
|
|
50
27
|
level: number;
|
|
51
28
|
topic?: string;
|
|
@@ -61,69 +38,75 @@ export interface ChunkMeta {
|
|
|
61
38
|
contentClass?: string;
|
|
62
39
|
temporalAnchor?: string;
|
|
63
40
|
}
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
}
|
|
71
|
-
export interface ManifestEntry {
|
|
72
|
-
md5: string;
|
|
73
|
-
size: number;
|
|
74
|
-
chunks: number;
|
|
41
|
+
/** 待编译的原始块(wiki_get_chunks_raw 工具返回) */
|
|
42
|
+
export interface RawChunk {
|
|
43
|
+
key: string;
|
|
44
|
+
relPath: string;
|
|
45
|
+
heading: string;
|
|
46
|
+
rawText: string;
|
|
75
47
|
compiled: boolean;
|
|
76
|
-
|
|
77
|
-
|
|
48
|
+
fileTags?: string[];
|
|
49
|
+
headingPath?: string[];
|
|
50
|
+
siblingHeadings?: string[];
|
|
51
|
+
totalChunks?: number;
|
|
52
|
+
chunkIndex?: number;
|
|
78
53
|
}
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
54
|
+
/** AI 编译产出(块级,wiki_store_compiled 工具接收) */
|
|
55
|
+
export interface CompiledChunk {
|
|
56
|
+
key: string;
|
|
57
|
+
topic: string;
|
|
58
|
+
normalizedText: string;
|
|
59
|
+
concepts: string[];
|
|
60
|
+
aliases: string[];
|
|
82
61
|
}
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
sourceMD5: string;
|
|
87
|
-
model: string;
|
|
62
|
+
/** v5.2 文件级编译: LLM 自行分割的语义片段 */
|
|
63
|
+
export interface FileSegment {
|
|
64
|
+
text: string;
|
|
88
65
|
topic: string;
|
|
89
66
|
normalizedText: string;
|
|
90
67
|
concepts: string[];
|
|
91
68
|
aliases: string[];
|
|
92
|
-
embeddingText: string;
|
|
93
69
|
}
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
70
|
+
/** LLM 文件级编译输出 */
|
|
71
|
+
export interface FileLLMData {
|
|
72
|
+
topic: string;
|
|
73
|
+
normalizedText: string;
|
|
74
|
+
concepts: string[];
|
|
75
|
+
aliases: string[];
|
|
100
76
|
}
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
fp32Size: number;
|
|
77
|
+
/** compiled/*.json 文件格式 */
|
|
78
|
+
export interface CompiledFileRecord {
|
|
79
|
+
relPath: string;
|
|
80
|
+
compiledAt: string;
|
|
81
|
+
sourceMD5: string;
|
|
82
|
+
model: string;
|
|
83
|
+
result: FileLLMData;
|
|
84
|
+
embeddingText: string;
|
|
85
|
+
vectorKey: string;
|
|
111
86
|
}
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
87
|
+
/** 搜索结果 */
|
|
88
|
+
export interface SearchHit {
|
|
89
|
+
relPath: string;
|
|
90
|
+
sourceDir: string;
|
|
91
|
+
title: string;
|
|
92
|
+
tags: string[];
|
|
93
|
+
snippet: string;
|
|
94
|
+
score: number;
|
|
95
|
+
/** 文档摘要(纯文本前 200 字符) */
|
|
96
|
+
summary?: string;
|
|
97
|
+
/** 语义相似度 (0-1),仅 semantic/hybrid 模式 */
|
|
98
|
+
semanticScore?: number;
|
|
99
|
+
/** 块索引(标题分块时使用) */
|
|
100
|
+
chunkIndex?: number;
|
|
101
|
+
/** 块标题(标题分块时使用) */
|
|
102
|
+
chunkHeading?: string;
|
|
117
103
|
}
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
sources: string[];
|
|
121
|
-
files: number;
|
|
122
|
-
lastScan: string;
|
|
123
|
-
semantic: boolean;
|
|
124
|
-
embeddings: number;
|
|
104
|
+
/** 向量存储结构 */
|
|
105
|
+
export interface EmbeddingData {
|
|
125
106
|
model: string;
|
|
126
|
-
|
|
127
|
-
|
|
107
|
+
dim: number;
|
|
108
|
+
entries: Record<string, number[]>;
|
|
109
|
+
/** 块元数据(仅标题分块文件有) */
|
|
110
|
+
chunkInfo?: Record<string, ChunkInfo>;
|
|
128
111
|
}
|
|
129
112
|
//# sourceMappingURL=types.d.ts.map
|
package/dist/types.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"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"}
|
package/dist/types.js
CHANGED
package/dist/types.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.js","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAAA,
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAAA,mCAAmC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"wiki-paths.d.ts","sourceRoot":"","sources":["../src/wiki-paths.ts"],"names":[],"mappings":"AAKA,wBAAgB,WAAW,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI,CAE9C;AAED,wBAAgB,WAAW,IAAI,MAAM,CAIpC"}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
// wiki-paths.ts — Centralized wiki data directory
|
|
2
|
+
import { resolve } from "node:path";
|
|
3
|
+
let _wikiHome = null;
|
|
4
|
+
export function setWikiHome(path) {
|
|
5
|
+
_wikiHome = resolve(path);
|
|
6
|
+
}
|
|
7
|
+
export function getWikiHome() {
|
|
8
|
+
if (_wikiHome)
|
|
9
|
+
return _wikiHome;
|
|
10
|
+
const home = process.env.HOME || process.env.USERPROFILE || process.cwd();
|
|
11
|
+
return resolve(home, ".Pwiki");
|
|
12
|
+
}
|
|
13
|
+
//# sourceMappingURL=wiki-paths.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"wiki-paths.js","sourceRoot":"","sources":["../src/wiki-paths.ts"],"names":[],"mappings":"AAAA,kDAAkD;AAClD,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAEpC,IAAI,SAAS,GAAkB,IAAI,CAAC;AAEpC,MAAM,UAAU,WAAW,CAAC,IAAY;IACtC,SAAS,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;AAC5B,CAAC;AAED,MAAM,UAAU,WAAW;IACzB,IAAI,SAAS;QAAE,OAAO,SAAS,CAAC;IAChC,MAAM,IAAI,GAAG,OAAO,CAAC,GAAG,CAAC,IAAI,IAAI,OAAO,CAAC,GAAG,CAAC,WAAW,IAAI,OAAO,CAAC,GAAG,EAAE,CAAC;IAC1E,OAAO,OAAO,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAC;AACjC,CAAC"}
|