@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.
Files changed (141) hide show
  1. package/dist/WikiEngine.d.ts +25 -37
  2. package/dist/WikiEngine.d.ts.map +1 -1
  3. package/dist/WikiEngine.js +157 -298
  4. package/dist/WikiEngine.js.map +1 -1
  5. package/dist/ast-chunker.d.ts +23 -0
  6. package/dist/ast-chunker.d.ts.map +1 -0
  7. package/dist/ast-chunker.js +434 -0
  8. package/dist/ast-chunker.js.map +1 -0
  9. package/dist/content-cache.d.ts +13 -0
  10. package/dist/content-cache.d.ts.map +1 -0
  11. package/dist/content-cache.js +33 -0
  12. package/dist/content-cache.js.map +1 -0
  13. package/dist/embedder.d.ts +38 -0
  14. package/dist/embedder.d.ts.map +1 -0
  15. package/dist/embedder.js +267 -0
  16. package/dist/embedder.js.map +1 -0
  17. package/dist/file-manifest.d.ts +46 -0
  18. package/dist/file-manifest.d.ts.map +1 -0
  19. package/dist/file-manifest.js +121 -0
  20. package/dist/file-manifest.js.map +1 -0
  21. package/dist/index.d.ts +18 -8
  22. package/dist/index.d.ts.map +1 -1
  23. package/dist/index.js +25 -7
  24. package/dist/index.js.map +1 -1
  25. package/dist/indexer-compile.d.ts +20 -0
  26. package/dist/indexer-compile.d.ts.map +1 -0
  27. package/dist/indexer-compile.js +198 -0
  28. package/dist/indexer-compile.js.map +1 -0
  29. package/dist/indexer-embed.d.ts +21 -0
  30. package/dist/indexer-embed.d.ts.map +1 -0
  31. package/dist/indexer-embed.js +248 -0
  32. package/dist/indexer-embed.js.map +1 -0
  33. package/dist/indexer-scan.d.ts +4 -0
  34. package/dist/indexer-scan.d.ts.map +1 -0
  35. package/dist/indexer-scan.js +51 -0
  36. package/dist/indexer-scan.js.map +1 -0
  37. package/dist/indexer.d.ts +4 -0
  38. package/dist/indexer.d.ts.map +1 -0
  39. package/dist/indexer.js +7 -0
  40. package/dist/indexer.js.map +1 -0
  41. package/dist/model-registry.d.ts +32 -0
  42. package/dist/model-registry.d.ts.map +1 -0
  43. package/dist/model-registry.js +82 -0
  44. package/dist/model-registry.js.map +1 -0
  45. package/dist/parser.d.ts +9 -0
  46. package/dist/parser.d.ts.map +1 -0
  47. package/dist/parser.js +54 -0
  48. package/dist/parser.js.map +1 -0
  49. package/dist/preprocessor.d.ts +36 -0
  50. package/dist/preprocessor.d.ts.map +1 -0
  51. package/dist/preprocessor.js +209 -0
  52. package/dist/preprocessor.js.map +1 -0
  53. package/dist/search.d.ts +6 -0
  54. package/dist/search.d.ts.map +1 -0
  55. package/dist/search.js +81 -0
  56. package/dist/search.js.map +1 -0
  57. package/dist/semantic-compiler.d.ts +44 -0
  58. package/dist/semantic-compiler.d.ts.map +1 -0
  59. package/dist/semantic-compiler.js +376 -0
  60. package/dist/semantic-compiler.js.map +1 -0
  61. package/dist/semantic-search.d.ts +11 -0
  62. package/dist/semantic-search.d.ts.map +1 -0
  63. package/dist/semantic-search.js +217 -0
  64. package/dist/semantic-search.js.map +1 -0
  65. package/dist/store-settings.d.ts +32 -0
  66. package/dist/store-settings.d.ts.map +1 -0
  67. package/dist/store-settings.js +138 -0
  68. package/dist/store-settings.js.map +1 -0
  69. package/dist/store-vectors.d.ts +13 -0
  70. package/dist/store-vectors.d.ts.map +1 -0
  71. package/dist/store-vectors.js +101 -0
  72. package/dist/store-vectors.js.map +1 -0
  73. package/dist/store.d.ts +11 -0
  74. package/dist/store.d.ts.map +1 -0
  75. package/dist/store.js +28 -0
  76. package/dist/store.js.map +1 -0
  77. package/dist/types.d.ts +75 -92
  78. package/dist/types.d.ts.map +1 -1
  79. package/dist/types.js +1 -1
  80. package/dist/types.js.map +1 -1
  81. package/dist/wiki-paths.d.ts +3 -0
  82. package/dist/wiki-paths.d.ts.map +1 -0
  83. package/dist/wiki-paths.js +13 -0
  84. package/dist/wiki-paths.js.map +1 -0
  85. package/package.json +38 -36
  86. package/dist/compile/compiler.d.ts +0 -39
  87. package/dist/compile/compiler.d.ts.map +0 -1
  88. package/dist/compile/compiler.js +0 -227
  89. package/dist/compile/compiler.js.map +0 -1
  90. package/dist/compile/index.d.ts +0 -3
  91. package/dist/compile/index.d.ts.map +0 -1
  92. package/dist/compile/index.js +0 -2
  93. package/dist/compile/index.js.map +0 -1
  94. package/dist/embed/WikiEmbedder.d.ts +0 -28
  95. package/dist/embed/WikiEmbedder.d.ts.map +0 -1
  96. package/dist/embed/WikiEmbedder.js +0 -147
  97. package/dist/embed/WikiEmbedder.js.map +0 -1
  98. package/dist/embed/index.d.ts +0 -2
  99. package/dist/embed/index.d.ts.map +0 -1
  100. package/dist/embed/index.js +0 -2
  101. package/dist/embed/index.js.map +0 -1
  102. package/dist/llm/WikiLLM.d.ts +0 -24
  103. package/dist/llm/WikiLLM.d.ts.map +0 -1
  104. package/dist/llm/WikiLLM.js +0 -46
  105. package/dist/llm/WikiLLM.js.map +0 -1
  106. package/dist/llm/index.d.ts +0 -3
  107. package/dist/llm/index.d.ts.map +0 -1
  108. package/dist/llm/index.js +0 -2
  109. package/dist/llm/index.js.map +0 -1
  110. package/dist/models.d.ts +0 -5
  111. package/dist/models.d.ts.map +0 -1
  112. package/dist/models.js +0 -54
  113. package/dist/models.js.map +0 -1
  114. package/dist/search/WikiSearch.d.ts +0 -14
  115. package/dist/search/WikiSearch.d.ts.map +0 -1
  116. package/dist/search/WikiSearch.js +0 -223
  117. package/dist/search/WikiSearch.js.map +0 -1
  118. package/dist/search/index.d.ts +0 -2
  119. package/dist/search/index.d.ts.map +0 -1
  120. package/dist/search/index.js +0 -2
  121. package/dist/search/index.js.map +0 -1
  122. package/dist/store/WikiStore.d.ts +0 -47
  123. package/dist/store/WikiStore.d.ts.map +0 -1
  124. package/dist/store/WikiStore.js +0 -301
  125. package/dist/store/WikiStore.js.map +0 -1
  126. package/dist/store/index.d.ts +0 -2
  127. package/dist/store/index.d.ts.map +0 -1
  128. package/dist/store/index.js +0 -2
  129. package/dist/store/index.js.map +0 -1
  130. package/dist/util/fs.d.ts +0 -7
  131. package/dist/util/fs.d.ts.map +0 -1
  132. package/dist/util/fs.js +0 -36
  133. package/dist/util/fs.js.map +0 -1
  134. package/dist/util/index.d.ts +0 -3
  135. package/dist/util/index.d.ts.map +0 -1
  136. package/dist/util/index.js +0 -3
  137. package/dist/util/index.js.map +0 -1
  138. package/dist/util/paths.d.ts +0 -17
  139. package/dist/util/paths.d.ts.map +0 -1
  140. package/dist/util/paths.js +0 -31
  141. 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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"}
@@ -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
- export interface SearchHit {
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
- export interface IndexData {
33
- version: 1;
34
- lastScan: string;
35
- entries: Record<string, FileEntry>;
36
- }
37
- export interface WikiConfig {
38
- sources: string[];
39
- model: string;
40
- semantic: boolean;
41
- /** LLM API base URL */
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
- export interface VectorsData {
65
- version: 1;
66
- model: string;
67
- dim: number;
68
- entries: Record<string, number[]>;
69
- chunks?: Record<string, ChunkMeta>;
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
- embedded: boolean;
77
- updatedAt: string;
48
+ fileTags?: string[];
49
+ headingPath?: string[];
50
+ siblingHeadings?: string[];
51
+ totalChunks?: number;
52
+ chunkIndex?: number;
78
53
  }
79
- export interface ManifestData {
80
- version: 1;
81
- files: Record<string, ManifestEntry>;
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
- export interface CompiledRecord {
84
- path: string;
85
- compiledAt: string;
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
- export interface RawChunk {
95
- key: string;
96
- relPath: string;
97
- heading: string;
98
- rawText: string;
99
- compiled: boolean;
70
+ /** LLM 文件级编译输出 */
71
+ export interface FileLLMData {
72
+ topic: string;
73
+ normalizedText: string;
74
+ concepts: string[];
75
+ aliases: string[];
100
76
  }
101
- export interface ModelInfo {
102
- id: string;
103
- name: string;
104
- hfRepo: string;
105
- dim: number;
106
- description: string;
107
- languages: string[];
108
- maxTokens: number;
109
- int8Size: number;
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
- export interface EngineConfig {
113
- /** 数据根目录(config.json 所在位置)。默认 CWD */
114
- basePath?: string;
115
- /** 嵌入模型 ID。默认 bge-base-zh-v1.5 */
116
- modelId?: string;
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
- export interface WikiStatus {
119
- configPath: string;
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
- modelDim: number;
127
- compiled: number;
107
+ dim: number;
108
+ entries: Record<string, number[]>;
109
+ /** 块元数据(仅标题分块文件有) */
110
+ chunkInfo?: Record<string, ChunkInfo>;
128
111
  }
129
112
  //# sourceMappingURL=types.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"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"}
package/dist/types.js CHANGED
@@ -1,3 +1,3 @@
1
- // types.ts — Pwiki 类型定义
1
+ // types.ts — Wiki 插件类型 (v5.1 语义编译)
2
2
  export {};
3
3
  //# sourceMappingURL=types.js.map
package/dist/types.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"types.js","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAAA,wBAAwB"}
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAAA,mCAAmC"}
@@ -0,0 +1,3 @@
1
+ export declare function setWikiHome(path: string): void;
2
+ export declare function getWikiHome(): string;
3
+ //# sourceMappingURL=wiki-paths.d.ts.map
@@ -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"}