@llangtop/pwiki-core 0.4.6 → 1.0.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 (137) hide show
  1. package/dist/WikiEngine.d.ts +21 -24
  2. package/dist/WikiEngine.d.ts.map +1 -1
  3. package/dist/WikiEngine.js +251 -144
  4. package/dist/WikiEngine.js.map +1 -1
  5. package/dist/config.d.ts +18 -0
  6. package/dist/config.d.ts.map +1 -0
  7. package/dist/config.js +61 -0
  8. package/dist/config.js.map +1 -0
  9. package/dist/index.d.ts +16 -17
  10. package/dist/index.d.ts.map +1 -1
  11. package/dist/index.js +22 -25
  12. package/dist/index.js.map +1 -1
  13. package/dist/lib/ast-chunker.d.ts.map +1 -0
  14. package/dist/{ast-chunker.js → lib/ast-chunker.js} +2 -2
  15. package/dist/lib/ast-chunker.js.map +1 -0
  16. package/dist/lib/content-cache.d.ts.map +1 -0
  17. package/dist/lib/content-cache.js.map +1 -0
  18. package/dist/{embedder.d.ts → lib/embedder.d.ts} +0 -16
  19. package/dist/lib/embedder.d.ts.map +1 -0
  20. package/dist/{embedder.js → lib/embedder.js} +21 -98
  21. package/dist/lib/embedder.js.map +1 -0
  22. package/dist/{file-manifest.d.ts → lib/file-manifest.d.ts} +0 -10
  23. package/dist/lib/file-manifest.d.ts.map +1 -0
  24. package/dist/{file-manifest.js → lib/file-manifest.js} +9 -50
  25. package/dist/lib/file-manifest.js.map +1 -0
  26. package/dist/{indexer-compile.d.ts → lib/indexer-compile.d.ts} +5 -7
  27. package/dist/lib/indexer-compile.d.ts.map +1 -0
  28. package/dist/{indexer-compile.js → lib/indexer-compile.js} +12 -13
  29. package/dist/lib/indexer-compile.js.map +1 -0
  30. package/dist/{indexer-embed.d.ts → lib/indexer-embed.d.ts} +3 -5
  31. package/dist/lib/indexer-embed.d.ts.map +1 -0
  32. package/dist/{indexer-embed.js → lib/indexer-embed.js} +15 -16
  33. package/dist/lib/indexer-embed.js.map +1 -0
  34. package/dist/lib/indexer-scan.d.ts.map +1 -0
  35. package/dist/lib/indexer-scan.js.map +1 -0
  36. package/dist/lib/indexer.d.ts.map +1 -0
  37. package/dist/lib/indexer.js.map +1 -0
  38. package/dist/lib/model-registry.d.ts +18 -0
  39. package/dist/lib/model-registry.d.ts.map +1 -0
  40. package/dist/lib/model-registry.js +52 -0
  41. package/dist/lib/model-registry.js.map +1 -0
  42. package/dist/lib/parser.d.ts.map +1 -0
  43. package/dist/lib/parser.js.map +1 -0
  44. package/dist/lib/preprocessor.d.ts.map +1 -0
  45. package/dist/lib/preprocessor.js.map +1 -0
  46. package/dist/{search.d.ts → lib/search.d.ts} +0 -2
  47. package/dist/lib/search.d.ts.map +1 -0
  48. package/dist/{search.js → lib/search.js} +12 -38
  49. package/dist/lib/search.js.map +1 -0
  50. package/dist/{semantic-compiler.d.ts → lib/semantic-compiler.d.ts} +2 -2
  51. package/dist/lib/semantic-compiler.d.ts.map +1 -0
  52. package/dist/lib/semantic-compiler.js.map +1 -0
  53. package/dist/lib/semantic-search.d.ts +4 -0
  54. package/dist/lib/semantic-search.d.ts.map +1 -0
  55. package/dist/{semantic-search.js → lib/semantic-search.js} +22 -82
  56. package/dist/lib/semantic-search.js.map +1 -0
  57. package/dist/lib/store-config.d.ts +25 -0
  58. package/dist/lib/store-config.d.ts.map +1 -0
  59. package/dist/lib/store-config.js +85 -0
  60. package/dist/lib/store-config.js.map +1 -0
  61. package/dist/lib/store-index.d.ts +14 -0
  62. package/dist/lib/store-index.d.ts.map +1 -0
  63. package/dist/lib/store-index.js +72 -0
  64. package/dist/lib/store-index.js.map +1 -0
  65. package/dist/lib/store-vectors.d.ts.map +1 -0
  66. package/dist/{store-vectors.js → lib/store-vectors.js} +7 -18
  67. package/dist/lib/store-vectors.js.map +1 -0
  68. package/dist/lib/store.d.ts +11 -0
  69. package/dist/lib/store.d.ts.map +1 -0
  70. package/dist/lib/store.js +22 -0
  71. package/dist/lib/store.js.map +1 -0
  72. package/dist/{types.d.ts → lib/types.d.ts} +17 -23
  73. package/dist/lib/types.d.ts.map +1 -0
  74. package/dist/lib/types.js +3 -0
  75. package/dist/lib/types.js.map +1 -0
  76. package/package.json +33 -37
  77. package/dist/ast-chunker.d.ts.map +0 -1
  78. package/dist/ast-chunker.js.map +0 -1
  79. package/dist/content-cache.d.ts.map +0 -1
  80. package/dist/content-cache.js.map +0 -1
  81. package/dist/embedder.d.ts.map +0 -1
  82. package/dist/embedder.js.map +0 -1
  83. package/dist/file-manifest.d.ts.map +0 -1
  84. package/dist/file-manifest.js.map +0 -1
  85. package/dist/indexer-compile.d.ts.map +0 -1
  86. package/dist/indexer-compile.js.map +0 -1
  87. package/dist/indexer-embed.d.ts.map +0 -1
  88. package/dist/indexer-embed.js.map +0 -1
  89. package/dist/indexer-scan.d.ts.map +0 -1
  90. package/dist/indexer-scan.js.map +0 -1
  91. package/dist/indexer.d.ts.map +0 -1
  92. package/dist/indexer.js.map +0 -1
  93. package/dist/model-registry.d.ts +0 -32
  94. package/dist/model-registry.d.ts.map +0 -1
  95. package/dist/model-registry.js +0 -82
  96. package/dist/model-registry.js.map +0 -1
  97. package/dist/parser.d.ts.map +0 -1
  98. package/dist/parser.js.map +0 -1
  99. package/dist/preprocessor.d.ts.map +0 -1
  100. package/dist/preprocessor.js.map +0 -1
  101. package/dist/search.d.ts.map +0 -1
  102. package/dist/search.js.map +0 -1
  103. package/dist/semantic-compiler.d.ts.map +0 -1
  104. package/dist/semantic-compiler.js.map +0 -1
  105. package/dist/semantic-search.d.ts +0 -11
  106. package/dist/semantic-search.d.ts.map +0 -1
  107. package/dist/semantic-search.js.map +0 -1
  108. package/dist/store-settings.d.ts +0 -32
  109. package/dist/store-settings.d.ts.map +0 -1
  110. package/dist/store-settings.js +0 -138
  111. package/dist/store-settings.js.map +0 -1
  112. package/dist/store-vectors.d.ts.map +0 -1
  113. package/dist/store-vectors.js.map +0 -1
  114. package/dist/store.d.ts +0 -11
  115. package/dist/store.d.ts.map +0 -1
  116. package/dist/store.js +0 -28
  117. package/dist/store.js.map +0 -1
  118. package/dist/types.d.ts.map +0 -1
  119. package/dist/types.js +0 -3
  120. package/dist/types.js.map +0 -1
  121. package/dist/wiki-paths.d.ts +0 -3
  122. package/dist/wiki-paths.d.ts.map +0 -1
  123. package/dist/wiki-paths.js +0 -13
  124. package/dist/wiki-paths.js.map +0 -1
  125. /package/dist/{ast-chunker.d.ts → lib/ast-chunker.d.ts} +0 -0
  126. /package/dist/{content-cache.d.ts → lib/content-cache.d.ts} +0 -0
  127. /package/dist/{content-cache.js → lib/content-cache.js} +0 -0
  128. /package/dist/{indexer-scan.d.ts → lib/indexer-scan.d.ts} +0 -0
  129. /package/dist/{indexer-scan.js → lib/indexer-scan.js} +0 -0
  130. /package/dist/{indexer.d.ts → lib/indexer.d.ts} +0 -0
  131. /package/dist/{indexer.js → lib/indexer.js} +0 -0
  132. /package/dist/{parser.d.ts → lib/parser.d.ts} +0 -0
  133. /package/dist/{parser.js → lib/parser.js} +0 -0
  134. /package/dist/{preprocessor.d.ts → lib/preprocessor.d.ts} +0 -0
  135. /package/dist/{preprocessor.js → lib/preprocessor.js} +0 -0
  136. /package/dist/{semantic-compiler.js → lib/semantic-compiler.js} +0 -0
  137. /package/dist/{store-vectors.d.ts → lib/store-vectors.d.ts} +0 -0
@@ -1,5 +1,5 @@
1
- import type { ModelInfo } from "./model-registry.js";
2
- import type { SearchMode, SearchHit, FileEntry } from "./types.js";
1
+ import type { ModelInfo } from "./lib/model-registry.js";
2
+ import type { SearchMode, SearchHit, FileEntry, FileLLMData, WikiStatus } from "./lib/types.js";
3
3
  export interface EngineConfig {
4
4
  basePath?: string;
5
5
  modelId?: string;
@@ -14,12 +14,15 @@ export declare class WikiEngine {
14
14
  files: number;
15
15
  sources: number;
16
16
  }>;
17
- search_(query: string, mode?: SearchMode): Promise<SearchHit[]>;
18
- createEntry(sourceDir: string, relPath: string, title: string, tags?: string[], content?: string): string;
19
- readEntry(relPath: string): {
17
+ search(query: string, mode?: SearchMode): Promise<SearchHit[]>;
18
+ readEntry(pathOrRelPath: string): {
20
19
  entry: FileEntry;
21
20
  content: string;
22
21
  } | null;
22
+ createEntry(sourceDir: string, relPath: string, title?: string, tags?: string[], content?: string): string;
23
+ renameEntry(relPath: string, newTitle: string): boolean;
24
+ moveEntry(relPath: string, newRelPath: string): boolean;
25
+ modifyEntry(sourceDir: string, relPath: string, content: string): boolean;
23
26
  get semanticEnabled(): boolean;
24
27
  enableSemantic(modelId?: string): Promise<{
25
28
  ok: boolean;
@@ -28,28 +31,27 @@ export declare class WikiEngine {
28
31
  disableSemantic(): void;
29
32
  generateEmbeddings(sourceDir?: string): Promise<{
30
33
  embedded: number;
31
- skipped: number;
32
34
  }>;
33
- downloadModel(): Promise<{
35
+ downloadModel(modelId?: string): Promise<{
34
36
  ok: boolean;
35
37
  msg: string;
36
38
  }>;
37
- status(): {
38
- configPath: string;
39
- sources: string[];
40
- files: number;
41
- lastScan: string;
42
- semantic: boolean;
43
- embeddings: number;
44
- model: string;
45
- modelDim: number;
46
- compiled: number;
47
- };
39
+ listModels(): ModelInfo[];
48
40
  get llmInfo(): {
49
41
  apiBase: string;
50
42
  model: string;
51
43
  hasKey: boolean;
52
44
  };
45
+ compileStatus(sourceDir?: string): {
46
+ total: number;
47
+ compiled: number;
48
+ uncompiled: string[];
49
+ };
50
+ getCompilePrompt(relPath: string): {
51
+ system: string;
52
+ user: string;
53
+ } | null;
54
+ storeCompiled(relPath: string, data: FileLLMData): boolean;
53
55
  compileFile(relPath: string): Promise<{
54
56
  ok: boolean;
55
57
  msg: string;
@@ -59,11 +61,6 @@ export declare class WikiEngine {
59
61
  failed: number;
60
62
  msgs: string[];
61
63
  }>;
62
- compileStatus(_sourceDir?: string): {
63
- total: number;
64
- compiled: number;
65
- uncompiled: string[];
66
- };
67
- listModels(): ModelInfo[];
64
+ status(): WikiStatus;
68
65
  }
69
66
  //# sourceMappingURL=WikiEngine.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"WikiEngine.d.ts","sourceRoot":"","sources":["../src/WikiEngine.ts"],"names":[],"mappings":"AAeA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,qBAAqB,CAAC;AACrD,OAAO,KAAK,EAAE,UAAU,EAAE,SAAS,EAAE,SAAS,EAAE,MAAM,YAAY,CAAC;AAInE,MAAM,WAAW,YAAY;IAC3B,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAED,qBAAa,UAAU;gBACT,MAAM,GAAE,YAAiB;IAMrC,IAAI,OAAO,IAAI,MAAM,EAAE,CAA+B;IAEtD,SAAS,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO;IAInC,YAAY,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI;IAIrC,UAAU,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;IAgB5C,IAAI,IAAI,OAAO,CAAC;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,MAAM,CAAA;KAAE,CAAC;IAUnD,OAAO,CAAC,KAAK,EAAE,MAAM,EAAE,IAAI,GAAE,UAAsB,GAAG,OAAO,CAAC,SAAS,EAAE,CAAC;IAShF,WAAW,CAAC,SAAS,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,IAAI,GAAE,MAAM,EAAO,EAAE,OAAO,SAAK,GAAG,MAAM;IA0BzG,SAAS,CAAC,OAAO,EAAE,MAAM,GAAG;QAAE,KAAK,EAAE,SAAS,CAAC;QAAC,OAAO,EAAE,MAAM,CAAA;KAAE,GAAG,IAAI;IAYxE,IAAI,eAAe,IAAI,OAAO,CAAuC;IAE/D,cAAc,CAAC,OAAO,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC;QAAE,EAAE,EAAE,OAAO,CAAC;QAAC,GAAG,EAAE,MAAM,CAAA;KAAE,CAAC;IAY7E,eAAe,IAAI,IAAI;IAKjB,kBAAkB,CAAC,SAAS,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC;QAAE,QAAQ,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,MAAM,CAAA;KAAE,CAAC;IAoBtF,aAAa,IAAI,OAAO,CAAC;QAAE,EAAE,EAAE,OAAO,CAAC;QAAC,GAAG,EAAE,MAAM,CAAA;KAAE,CAAC;IAK5D,MAAM;;;;;;;;;;;IAiBN,IAAI,OAAO;;;;MASV;IAEK,WAAW,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC;QAAE,EAAE,EAAE,OAAO,CAAC;QAAC,GAAG,EAAE,MAAM,CAAA;KAAE,CAAC;IA2CnE,UAAU,CAAC,SAAS,CAAC,EAAE,MAAM,EAAE,KAAK,SAAK,GAAG,OAAO,CAAC;QAAE,QAAQ,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,EAAE,CAAA;KAAE,CAAC;IAe/G,aAAa,CAAC,UAAU,CAAC,EAAE,MAAM;;;;;IAYjC,UAAU,IAAI,SAAS,EAAE;CAG1B"}
1
+ {"version":3,"file":"WikiEngine.d.ts","sourceRoot":"","sources":["../src/WikiEngine.ts"],"names":[],"mappings":"AAyBA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yBAAyB,CAAC;AACzD,OAAO,KAAK,EAAE,UAAU,EAAE,SAAS,EAAE,SAAS,EAAE,WAAW,EAAE,UAAU,EAAE,MAAM,gBAAgB,CAAC;AAEhG,MAAM,WAAW,YAAY;IAC3B,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAED,qBAAa,UAAU;gBACT,MAAM,GAAE,YAAiB;IAOrC,IAAI,OAAO,IAAI,MAAM,EAAE,CAA6B;IAEpD,SAAS,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO;IAInC,YAAY,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI;IAMrC,UAAU,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;IAS5C,IAAI,IAAI,OAAO,CAAC;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,MAAM,CAAA;KAAE,CAAC;IASnD,MAAM,CAAC,KAAK,EAAE,MAAM,EAAE,IAAI,GAAE,UAAsB,GAAG,OAAO,CAAC,SAAS,EAAE,CAAC;IAU/E,SAAS,CAAC,aAAa,EAAE,MAAM,GAAG;QAAE,KAAK,EAAE,SAAS,CAAC;QAAC,OAAO,EAAE,MAAM,CAAA;KAAE,GAAG,IAAI;IAuB9E,WAAW,CACT,SAAS,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,MAAM,EAClD,IAAI,GAAE,MAAM,EAAO,EAAE,OAAO,SAAK,GAChC,MAAM;IAwBT,WAAW,CAAC,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,OAAO;IAiCvD,SAAS,CAAC,OAAO,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,GAAG,OAAO;IAqBvD,WAAW,CAAC,SAAS,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,OAAO;IAazE,IAAI,eAAe,IAAI,OAAO,CAAqC;IAE7D,cAAc,CAAC,OAAO,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC;QAAE,EAAE,EAAE,OAAO,CAAC;QAAC,GAAG,EAAE,MAAM,CAAA;KAAE,CAAC;IAe7E,eAAe,IAAI,IAAI;IAEjB,kBAAkB,CAAC,SAAS,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC;QAAE,QAAQ,EAAE,MAAM,CAAA;KAAE,CAAC;IAoBrE,aAAa,CAAC,OAAO,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC;QAAE,EAAE,EAAE,OAAO,CAAC;QAAC,GAAG,EAAE,MAAM,CAAA;KAAE,CAAC;IAI5E,UAAU,IAAI,SAAS,EAAE;IAIzB,IAAI,OAAO;;;;MAMV;IAED,aAAa,CAAC,SAAS,CAAC,EAAE,MAAM;;;;;IAahC,gBAAgB,CAAC,OAAO,EAAE,MAAM,GAAG;QAAE,MAAM,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAA;KAAE,GAAG,IAAI;IAkB1E,aAAa,CAAC,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,WAAW,GAAG,OAAO;IAMpD,WAAW,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC;QAAE,EAAE,EAAE,OAAO,CAAC;QAAC,GAAG,EAAE,MAAM,CAAA;KAAE,CAAC;IA6CnE,UAAU,CAAC,SAAS,CAAC,EAAE,MAAM,EAAE,KAAK,SAAK,GAAG,OAAO,CAAC;QAAE,QAAQ,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,EAAE,CAAA;KAAE,CAAC;IAiB/G,MAAM,IAAI,UAAU;CAkBrB"}
@@ -1,67 +1,91 @@
1
- // WikiEngine.ts — Adapter: extensions/lib API → WikiEngine class (CLI-compatible)
2
- import { resolve } from "node:path";
3
- import { existsSync, mkdirSync, writeFileSync, readFileSync } from "node:fs";
4
- import { dirname } from "node:path";
5
- import { setWikiHome, getWikiHome } from "./wiki-paths.js";
6
- import * as store from "./store-settings.js";
7
- import * as embedder from "./embedder.js";
8
- import { keywordSearch } from "./search.js";
9
- import { semanticSearch, hybridSearch } from "./semantic-search.js";
10
- import { scanDir } from "./indexer-scan.js";
11
- import { generateEmbeddings as doGenerateEmbeddings } from "./indexer-embed.js";
12
- import { getRawChunks, storeCompiledChunks } from "./indexer-compile.js";
13
- import { setContent, getContent } from "./content-cache.js";
14
- import { findModel, getCurrentModel, selectModel, getBuiltinModels } from "./model-registry.js";
15
- import { stats } from "./store.js";
16
- import { getFileState } from "./file-manifest.js";
1
+ // WikiEngine.ts — 协调层 (v1.0)
2
+ //
3
+ // 唯一对外 API。组装所有 lib 模块,提供 chained + async 的编程接口。
4
+ // CLI / MCP / 库用户均通过此类交互。
5
+ import { resolve, dirname, basename } from "node:path";
6
+ import { existsSync, mkdirSync, writeFileSync, readFileSync, renameSync } from "node:fs";
7
+ import { initWikiConfig, wikiHome } from "./config.js";
8
+ import * as cfg from "./lib/store-config.js";
9
+ import * as idx from "./lib/store-index.js";
10
+ import * as vec from "./lib/store-vectors.js";
11
+ import * as emb from "./lib/embedder.js";
12
+ import * as cache from "./lib/content-cache.js";
13
+ import { keywordSearch } from "./lib/search.js";
14
+ import { semanticSearch, hybridSearch } from "./lib/semantic-search.js";
15
+ import { scanDir } from "./lib/indexer-scan.js";
16
+ import { generateEmbeddings as doGenerateEmbeddings } from "./lib/indexer-embed.js";
17
+ import { storeFileLLMVector } from "./lib/indexer-compile.js";
18
+ import { getFileState, getManifestStats } from "./lib/file-manifest.js";
19
+ import { parseFileEntry } from "./lib/parser.js";
20
+ import { FILE_LLM_SYSTEM_PROMPT, buildFileLLMPrompt, parseFileLLMResult, } from "./lib/semantic-compiler.js";
21
+ import { findModel, getCurrentModel, selectModel, getBuiltinModels } from "./lib/model-registry.js";
17
22
  export class WikiEngine {
18
23
  constructor(config = {}) {
19
- if (config.basePath)
20
- setWikiHome(config.basePath);
24
+ initWikiConfig({ basePath: config.basePath });
21
25
  if (config.modelId)
22
26
  selectModel(config.modelId);
23
27
  }
24
- // ---- Sources ----
25
- get sources() { return store.getSources(); }
28
+ // ═══════════════ Sources ═══════════════
29
+ get sources() { return cfg.getSources(); }
26
30
  addSource(absPath) {
27
- return store.addSource(absPath);
31
+ return cfg.addSource(absPath);
28
32
  }
29
33
  removeSource(target) {
30
- return store.removeSource(target);
34
+ const removed = cfg.removeSource(target);
35
+ if (removed)
36
+ idx.removeEntriesBySource(removed);
37
+ return removed;
31
38
  }
32
39
  async loadSource(absPath) {
33
40
  const entries = await scanDir(absPath);
34
- store.mergeIndex(entries);
35
- for (const e of entries) {
36
- try {
37
- const content = readFileSync(resolve(e.sourceDir, e.relPath), "utf-8");
38
- setContent(e.relPath, content);
39
- }
40
- catch { }
41
- }
42
- // Match original cmdLoad: auto-generate embeddings after scan+index
43
- if (store.getSemanticEnabled() && entries.length > 0) {
41
+ idx.mergeIndex(entries);
42
+ if (cfg.getSemanticEnabled() && entries.length > 0) {
44
43
  doGenerateEmbeddings(absPath, entries).catch(() => { });
45
44
  }
46
45
  return entries.length;
47
46
  }
48
47
  async load() {
49
- const sources = store.getSources();
50
- let totalFiles = 0;
51
- for (const src of sources) {
52
- totalFiles += await this.loadSource(src);
53
- }
54
- return { files: totalFiles, sources: sources.length };
48
+ const sources = cfg.getSources();
49
+ let total = 0;
50
+ for (const src of sources)
51
+ total += await this.loadSource(src);
52
+ return { files: total, sources: sources.length };
55
53
  }
56
- // ---- Search ----
57
- async search_(query, mode = "keyword") {
54
+ // ═══════════════ Search ═══════════════
55
+ async search(query, mode = "keyword") {
58
56
  switch (mode) {
59
57
  case "keyword": return keywordSearch(query);
60
58
  case "semantic": return semanticSearch(query);
61
59
  case "hybrid": return hybridSearch(query);
62
60
  }
63
61
  }
64
- // ---- CRUD ----
62
+ // ═══════════════ Entries (CRUD) ═══════════════
63
+ readEntry(pathOrRelPath) {
64
+ // Try as relPath first, then as absolute path
65
+ let entry = idx.getEntry(pathOrRelPath);
66
+ if (!entry) {
67
+ // Try matching by basename across all sources
68
+ const all = idx.getIndex();
69
+ for (const [key, e] of Object.entries(all)) {
70
+ if (e.relPath === pathOrRelPath || key.endsWith(pathOrRelPath) || basename(key) === basename(pathOrRelPath)) {
71
+ entry = e;
72
+ break;
73
+ }
74
+ }
75
+ }
76
+ if (!entry)
77
+ return null;
78
+ let content = cache.getContent(entry.relPath);
79
+ if (!content) {
80
+ try {
81
+ content = readFileSync(resolve(entry.sourceDir, entry.relPath), "utf-8");
82
+ }
83
+ catch {
84
+ return null;
85
+ }
86
+ }
87
+ return { entry, content };
88
+ }
65
89
  createEntry(sourceDir, relPath, title, tags = [], content = "") {
66
90
  const finalPath = relPath.endsWith(".md") ? relPath : relPath + ".md";
67
91
  const finalAbs = resolve(sourceDir, finalPath);
@@ -69,39 +93,94 @@ export class WikiEngine {
69
93
  return "exists: " + finalAbs;
70
94
  const fm = [
71
95
  "---",
72
- "title: " + title,
96
+ "title: " + (title || basename(finalPath, ".md")),
73
97
  "tags: [" + tags.join(", ") + "]",
74
98
  "created: " + new Date().toISOString(),
75
99
  "---", "",
76
100
  ].join("\n");
77
101
  mkdirSync(dirname(finalAbs), { recursive: true });
78
102
  writeFileSync(finalAbs, fm + content, "utf-8");
79
- const entry = {
80
- title, tags, sourceDir,
81
- relPath: finalPath.replace(/\\/g, "/"),
82
- mtime: new Date().toISOString(),
83
- };
84
- store.mergeIndex([entry]);
85
- setContent(entry.relPath, fm + content);
86
- return entry.relPath;
103
+ const entry = parseFileEntry(sourceDir, finalAbs);
104
+ if (entry) {
105
+ idx.mergeIndex([entry]);
106
+ cache.setContent(entry.relPath, fm + content);
107
+ }
108
+ return finalPath.replace(/\\/g, "/");
87
109
  }
88
- readEntry(relPath) {
89
- const entry = store.getEntry(relPath);
110
+ renameEntry(relPath, newTitle) {
111
+ const entry = idx.getEntry(relPath);
90
112
  if (!entry)
91
- return null;
92
- let content = getContent(relPath);
93
- if (!content) {
94
- try {
95
- content = readFileSync(resolve(entry.sourceDir, relPath), "utf-8");
113
+ return false;
114
+ const fullPath = resolve(entry.sourceDir, entry.relPath);
115
+ if (!existsSync(fullPath))
116
+ return false;
117
+ let content;
118
+ try {
119
+ content = readFileSync(fullPath, "utf-8");
120
+ }
121
+ catch {
122
+ return false;
123
+ }
124
+ // Update frontmatter title or add one
125
+ const fmMatch = content.match(/^---\n([\s\S]*?)\n---/);
126
+ let newContent;
127
+ if (fmMatch) {
128
+ const fm = fmMatch[1];
129
+ if (/^title:/m.test(fm)) {
130
+ newContent = content.replace(/^title:.*$/m, `title: ${newTitle}`);
96
131
  }
97
- catch {
98
- return null;
132
+ else {
133
+ newContent = content.replace("---\n", `---\ntitle: ${newTitle}\n`);
99
134
  }
100
135
  }
101
- return { entry, content };
136
+ else {
137
+ newContent = `---\ntitle: ${newTitle}\n---\n\n${content}`;
138
+ }
139
+ writeFileSync(fullPath, newContent, "utf-8");
140
+ cache.setContent(entry.relPath, newContent);
141
+ // Update index entry
142
+ entry.title = newTitle;
143
+ idx.mergeIndex([entry]);
144
+ return true;
145
+ }
146
+ moveEntry(relPath, newRelPath) {
147
+ const entry = idx.getEntry(relPath);
148
+ if (!entry)
149
+ return false;
150
+ const srcFile = resolve(entry.sourceDir, relPath);
151
+ const dstFile = resolve(entry.sourceDir, newRelPath);
152
+ if (!existsSync(srcFile) || existsSync(dstFile))
153
+ return false;
154
+ try {
155
+ mkdirSync(dirname(dstFile), { recursive: true });
156
+ renameSync(srcFile, dstFile);
157
+ }
158
+ catch {
159
+ return false;
160
+ }
161
+ const newEntry = parseFileEntry(entry.sourceDir, dstFile);
162
+ if (newEntry) {
163
+ idx.removeEntry(relPath);
164
+ idx.mergeIndex([newEntry]);
165
+ }
166
+ return true;
167
+ }
168
+ modifyEntry(sourceDir, relPath, content) {
169
+ const fullPath = resolve(sourceDir, relPath);
170
+ try {
171
+ writeFileSync(fullPath, content, "utf-8");
172
+ cache.setContent(relPath, content);
173
+ const entry = parseFileEntry(sourceDir, fullPath);
174
+ if (entry)
175
+ idx.mergeIndex([entry]);
176
+ return true;
177
+ }
178
+ catch {
179
+ return false;
180
+ }
102
181
  }
103
- // ---- Semantic ----
104
- get semanticEnabled() { return store.getSemanticEnabled(); }
182
+ // ═══════════════ Semantic ═══════════════
183
+ get semanticEnabled() { return cfg.getSemanticEnabled(); }
105
184
  async enableSemantic(modelId) {
106
185
  if (modelId) {
107
186
  const m = findModel(modelId);
@@ -109,89 +188,115 @@ export class WikiEngine {
109
188
  return { ok: false, msg: "Unknown model: " + modelId };
110
189
  selectModel(modelId);
111
190
  }
112
- const ok = await embedder.initialize();
191
+ const ok = await emb.initialize();
113
192
  if (!ok)
114
- return { ok: false, msg: "Init failed: " + (embedder.getInitError() || "unknown") };
115
- store.setSemanticEnabled(true);
116
- return { ok: true, msg: "Semantic search ON. Model: " + embedder.getModelName() + ". Source: " + embedder.getModelSource() };
117
- }
118
- disableSemantic() {
119
- store.setSemanticEnabled(false);
193
+ return { ok: false, msg: "Init failed: " + (emb.getInitError() || "unknown") };
194
+ cfg.setSemanticEnabled(true);
195
+ return {
196
+ ok: true,
197
+ msg: `Semantic search ON. Model: ${emb.getModelName()}. Source: ${emb.getModelSource()}`,
198
+ };
120
199
  }
121
- // ---- Embeddings ----
200
+ disableSemantic() { cfg.setSemanticEnabled(false); }
122
201
  async generateEmbeddings(sourceDir) {
123
- if (!embedder.isAvailable())
124
- await embedder.initialize();
125
- const entries = Object.values(store.getIndex()).filter(e => !sourceDir || e.sourceDir === sourceDir);
126
- // Group by sourceDir to get correct absolute paths (match original API)
127
- let total = 0;
202
+ if (!emb.isAvailable())
203
+ await emb.initialize();
204
+ const all = Object.values(idx.getIndex()).filter(e => !sourceDir || e.sourceDir === sourceDir);
128
205
  const bySource = new Map();
129
- for (const e of entries) {
206
+ for (const e of all) {
130
207
  const list = bySource.get(e.sourceDir) || [];
131
208
  list.push(e);
132
209
  bySource.set(e.sourceDir, list);
133
210
  }
211
+ let total = 0;
134
212
  for (const [src, ents] of bySource) {
135
213
  total += await doGenerateEmbeddings(src, ents);
136
214
  }
137
- return { embedded: total, skipped: 0 };
215
+ return { embedded: total };
138
216
  }
139
- // ---- Model download ----
140
- async downloadModel() {
141
- return embedder.downloadModel();
217
+ // ═══════════════ Model ═══════════════
218
+ async downloadModel(modelId) {
219
+ return emb.downloadModel(modelId);
142
220
  }
143
- // ---- Status ----
144
- status() {
145
- const s = stats();
146
- const model = getCurrentModel();
147
- return {
148
- configPath: getWikiHome(),
149
- sources: store.getSources(),
150
- files: s.files,
151
- lastScan: s.lastScan || "",
152
- semantic: store.getSemanticEnabled(),
153
- embeddings: s.embeddings || 0,
154
- model: model?.id || "unknown",
155
- modelDim: model?.dim || 0,
156
- compiled: Object.keys(store.getIndex()).filter(p => getFileState(p)?.llmCompiled).length,
157
- };
158
- }
159
- // ---- LLM ----
221
+ listModels() { return getBuiltinModels(); }
222
+ // ═══════════════ LLM Compile ═══════════════
160
223
  get llmInfo() {
161
224
  const apiKey = process.env.DEEPSEEK_API_KEY || process.env.OPENAI_API_KEY || "";
162
225
  const apiBase = process.env.DEEPSEEK_API_KEY
163
226
  ? "https://api.deepseek.com/v1"
164
- : process.env.OPENAI_API_KEY
165
- ? "https://api.openai.com/v1"
166
- : "";
167
- const model = process.env.LLM_MODEL || "deepseek-chat";
168
- return { apiBase, model, hasKey: !!apiKey };
227
+ : process.env.OPENAI_API_KEY ? "https://api.openai.com/v1" : "";
228
+ return { apiBase, model: process.env.LLM_MODEL || "deepseek-chat", hasKey: !!apiKey };
169
229
  }
170
- async compileFile(relPath) {
171
- const content = getContent(relPath);
230
+ compileStatus(sourceDir) {
231
+ const all = Object.keys(idx.getIndex())
232
+ .filter(p => !sourceDir || idx.getIndex()[p]?.sourceDir === sourceDir);
233
+ const compiled = [];
234
+ const uncompiled = [];
235
+ for (const relPath of all) {
236
+ const state = getFileState(relPath);
237
+ if (state?.llmCompiled)
238
+ compiled.push(relPath);
239
+ else
240
+ uncompiled.push(relPath);
241
+ }
242
+ return { total: all.length, compiled: compiled.length, uncompiled };
243
+ }
244
+ getCompilePrompt(relPath) {
245
+ const cached = cache.getContent(relPath);
246
+ const entry = idx.getEntry(relPath);
247
+ if (!cached && !entry)
248
+ return null;
249
+ let content = cached;
250
+ if (!content && entry) {
251
+ try {
252
+ content = readFileSync(resolve(entry.sourceDir, entry.relPath), "utf-8");
253
+ }
254
+ catch {
255
+ return null;
256
+ }
257
+ }
172
258
  if (!content)
259
+ return null;
260
+ return {
261
+ system: FILE_LLM_SYSTEM_PROMPT,
262
+ user: buildFileLLMPrompt(relPath, content),
263
+ };
264
+ }
265
+ storeCompiled(relPath, data) {
266
+ const entry = idx.getEntry(relPath);
267
+ if (!entry)
268
+ return false;
269
+ return true; // The actual storage is async — handled by storeFileLLMVector
270
+ }
271
+ async compileFile(relPath) {
272
+ const entry = idx.getEntry(relPath);
273
+ if (!entry)
173
274
  return { ok: false, msg: "Not found: " + relPath };
174
- const chunks = await getRawChunks(undefined, false);
175
- const fileChunks = chunks.filter(c => c.relPath === relPath);
176
- if (!fileChunks.length)
177
- return { ok: false, msg: "No chunks: " + relPath };
178
- const { COMPILE_SYSTEM_PROMPT, buildCompilePrompt, parseCompiledResult } = await import("./semantic-compiler.js");
179
- const prompt = buildCompilePrompt(fileChunks);
275
+ let content = cache.getContent(relPath);
276
+ if (!content) {
277
+ try {
278
+ content = readFileSync(resolve(entry.sourceDir, entry.relPath), "utf-8");
279
+ }
280
+ catch {
281
+ return { ok: false, msg: "Cannot read: " + relPath };
282
+ }
283
+ }
284
+ const prompt = buildFileLLMPrompt(relPath, content);
285
+ const apiKey = process.env.DEEPSEEK_API_KEY || process.env.OPENAI_API_KEY;
286
+ if (!apiKey)
287
+ return { ok: false, msg: "No API key. Set DEEPSEEK_API_KEY or OPENAI_API_KEY" };
288
+ const apiBase = process.env.DEEPSEEK_API_KEY
289
+ ? "https://api.deepseek.com/v1"
290
+ : "https://api.openai.com/v1";
291
+ const model = process.env.LLM_MODEL || "deepseek-chat";
180
292
  try {
181
- const apiKey = process.env.DEEPSEEK_API_KEY || process.env.OPENAI_API_KEY;
182
- if (!apiKey)
183
- return { ok: false, msg: "No API key. Set DEEPSEEK_API_KEY or OPENAI_API_KEY" };
184
- const apiBase = process.env.DEEPSEEK_API_KEY
185
- ? "https://api.deepseek.com/v1"
186
- : "https://api.openai.com/v1";
187
- const model = process.env.LLM_MODEL || "deepseek-chat";
188
293
  const res = await fetch(apiBase + "/chat/completions", {
189
294
  method: "POST",
190
295
  headers: { "Content-Type": "application/json", "Authorization": "Bearer " + apiKey },
191
296
  body: JSON.stringify({
192
297
  model,
193
298
  messages: [
194
- { role: "system", content: COMPILE_SYSTEM_PROMPT },
299
+ { role: "system", content: FILE_LLM_SYSTEM_PROMPT },
195
300
  { role: "user", content: prompt },
196
301
  ],
197
302
  response_format: { type: "json_object" },
@@ -200,27 +305,26 @@ export class WikiEngine {
200
305
  });
201
306
  const data = await res.json();
202
307
  const raw = data?.choices?.[0]?.message?.content || "";
203
- const compiled = parseCompiledResult(raw);
204
- if (!compiled)
205
- return { ok: false, msg: "Invalid JSON: " + raw.slice(0, 200) };
206
- await storeCompiledChunks(compiled);
207
- const topic = compiled[0]?.topic || "unknown";
208
- return { ok: true, msg: "Compiled: " + relPath + ' -> "' + topic + '"' };
308
+ const parsed = parseFileLLMResult(raw);
309
+ if (!parsed)
310
+ return { ok: false, msg: "Invalid JSON from LLM: " + raw.slice(0, 200) };
311
+ await storeFileLLMVector(entry.sourceDir, relPath, parsed, model);
312
+ return { ok: true, msg: `Compiled: ${relPath} → "${parsed.topic}"` };
209
313
  }
210
314
  catch (e) {
211
315
  return { ok: false, msg: "LLM error: " + e.message };
212
316
  }
213
317
  }
214
318
  async compileAll(sourceDir, limit = 10) {
215
- let count = 0, failed = 0;
319
+ let compiled = 0, failed = 0;
216
320
  const msgs = [];
217
- const entries = Object.values(store.getIndex()).filter(e => !sourceDir || e.sourceDir === sourceDir);
321
+ const entries = Object.values(idx.getIndex()).filter(e => !sourceDir || e.sourceDir === sourceDir);
218
322
  for (const entry of entries) {
219
- if (count >= limit)
323
+ if (compiled >= limit)
220
324
  break;
221
325
  const r = await this.compileFile(entry.relPath);
222
326
  if (r.ok) {
223
- count++;
327
+ compiled++;
224
328
  msgs.push(" " + r.msg);
225
329
  }
226
330
  else {
@@ -228,23 +332,26 @@ export class WikiEngine {
228
332
  msgs.push(" FAIL: " + r.msg);
229
333
  }
230
334
  }
231
- return { compiled: count, failed, msgs };
335
+ return { compiled, failed, msgs };
232
336
  }
233
- compileStatus(_sourceDir) {
234
- const all = Object.keys(store.getIndex());
235
- const compiled = [];
236
- const uncompiled = [];
237
- for (const relPath of all) {
238
- const state = getFileState(relPath);
239
- if (state?.llmCompiled)
240
- compiled.push(relPath);
241
- else
242
- uncompiled.push(relPath);
243
- }
244
- return { total: all.length, compiled: compiled.length, uncompiled };
245
- }
246
- listModels() {
247
- return getBuiltinModels();
337
+ // ═══════════════ Status ═══════════════
338
+ status() {
339
+ const c = cfg.readConfig();
340
+ const i = idx.indexStats();
341
+ const v = vec.vectorsStats();
342
+ const m = getManifestStats();
343
+ const model = getCurrentModel();
344
+ return {
345
+ configPath: wikiHome(),
346
+ sources: c.sources,
347
+ files: i.files,
348
+ lastScan: c.lastScan,
349
+ semantic: c.semanticEnabled,
350
+ embeddings: v.embeddings,
351
+ model: model.id,
352
+ modelDim: model.dim,
353
+ compiled: m.compiled,
354
+ };
248
355
  }
249
356
  }
250
357
  //# sourceMappingURL=WikiEngine.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"WikiEngine.js","sourceRoot":"","sources":["../src/WikiEngine.ts"],"names":[],"mappings":"AAAA,kFAAkF;AAClF,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EAAE,UAAU,EAAE,SAAS,EAAE,aAAa,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AAC7E,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EAAE,WAAW,EAAE,WAAW,EAAE,MAAM,iBAAiB,CAAC;AAC3D,OAAO,KAAK,KAAK,MAAM,qBAAqB,CAAC;AAE7C,OAAO,KAAK,QAAQ,MAAM,eAAe,CAAC;AAC1C,OAAO,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAC5C,OAAO,EAAE,cAAc,EAAE,YAAY,EAAE,MAAM,sBAAsB,CAAC;AACpE,OAAO,EAAE,OAAO,EAAE,MAAM,mBAAmB,CAAC;AAC5C,OAAO,EAAE,kBAAkB,IAAI,oBAAoB,EAAiB,MAAM,oBAAoB,CAAC;AAC/F,OAAO,EAAE,YAAY,EAAE,mBAAmB,EAAyC,MAAM,sBAAsB,CAAC;AAChH,OAAO,EAAE,UAAU,EAAE,UAAU,EAAE,MAAM,oBAAoB,CAAC;AAC5D,OAAO,EAAE,SAAS,EAAE,eAAe,EAAE,WAAW,EAAE,gBAAgB,EAAE,MAAM,qBAAqB,CAAC;AAGhG,OAAO,EAAE,KAAK,EAAE,MAAM,YAAY,CAAC;AACnC,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAOlD,MAAM,OAAO,UAAU;IACrB,YAAY,SAAuB,EAAE;QACnC,IAAI,MAAM,CAAC,QAAQ;YAAE,WAAW,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;QAClD,IAAI,MAAM,CAAC,OAAO;YAAE,WAAW,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;IAClD,CAAC;IAED,oBAAoB;IACpB,IAAI,OAAO,KAAe,OAAO,KAAK,CAAC,UAAU,EAAE,CAAC,CAAC,CAAC;IAEtD,SAAS,CAAC,OAAe;QACvB,OAAO,KAAK,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC;IAClC,CAAC;IAED,YAAY,CAAC,MAAc;QACzB,OAAO,KAAK,CAAC,YAAY,CAAC,MAAM,CAAC,CAAC;IACpC,CAAC;IAED,KAAK,CAAC,UAAU,CAAC,OAAe;QAC9B,MAAM,OAAO,GAAG,MAAM,OAAO,CAAC,OAAO,CAAC,CAAC;QACvC,KAAK,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC;QAC1B,KAAK,MAAM,CAAC,IAAI,OAAO,EAAE,CAAC;YACxB,IAAI,CAAC;gBACH,MAAM,OAAO,GAAG,YAAY,CAAC,OAAO,CAAC,CAAC,CAAC,SAAS,EAAE,CAAC,CAAC,OAAO,CAAC,EAAE,OAAO,CAAC,CAAC;gBACvE,UAAU,CAAC,CAAC,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;YACjC,CAAC;YAAC,MAAM,CAAC,CAAA,CAAC;QACZ,CAAC;QACD,oEAAoE;QACpE,IAAI,KAAK,CAAC,kBAAkB,EAAE,IAAI,OAAO,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YACrD,oBAAoB,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC,KAAK,CAAC,GAAG,EAAE,GAAE,CAAC,CAAC,CAAC;QACzD,CAAC;QACD,OAAO,OAAO,CAAC,MAAM,CAAC;IACxB,CAAC;IAED,KAAK,CAAC,IAAI;QACR,MAAM,OAAO,GAAG,KAAK,CAAC,UAAU,EAAE,CAAC;QACnC,IAAI,UAAU,GAAG,CAAC,CAAC;QACnB,KAAK,MAAM,GAAG,IAAI,OAAO,EAAE,CAAC;YAC1B,UAAU,IAAI,MAAM,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC;QAC3C,CAAC;QACD,OAAO,EAAE,KAAK,EAAE,UAAU,EAAE,OAAO,EAAE,OAAO,CAAC,MAAM,EAAE,CAAC;IACxD,CAAC;IAED,mBAAmB;IACnB,KAAK,CAAC,OAAO,CAAC,KAAa,EAAE,OAAmB,SAAS;QACvD,QAAQ,IAAI,EAAE,CAAC;YACb,KAAK,SAAS,CAAC,CAAC,OAAO,aAAa,CAAC,KAAK,CAAC,CAAC;YAC5C,KAAK,UAAU,CAAC,CAAC,OAAO,cAAc,CAAC,KAAK,CAAC,CAAC;YAC9C,KAAK,QAAQ,CAAC,CAAC,OAAO,YAAY,CAAC,KAAK,CAAC,CAAC;QAC5C,CAAC;IACH,CAAC;IAED,iBAAiB;IACjB,WAAW,CAAC,SAAiB,EAAE,OAAe,EAAE,KAAa,EAAE,OAAiB,EAAE,EAAE,OAAO,GAAG,EAAE;QAC9F,MAAM,SAAS,GAAG,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,OAAO,GAAG,KAAK,CAAC;QACtE,MAAM,QAAQ,GAAG,OAAO,CAAC,SAAS,EAAE,SAAS,CAAC,CAAC;QAC/C,IAAI,UAAU,CAAC,QAAQ,CAAC;YAAE,OAAO,UAAU,GAAG,QAAQ,CAAC;QAEvD,MAAM,EAAE,GAAG;YACT,KAAK;YACL,SAAS,GAAG,KAAK;YACjB,SAAS,GAAG,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,GAAG;YACjC,WAAW,GAAG,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;YACtC,KAAK,EAAE,EAAE;SACV,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAEb,SAAS,CAAC,OAAO,CAAC,QAAQ,CAAC,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;QAClD,aAAa,CAAC,QAAQ,EAAE,EAAE,GAAG,OAAO,EAAE,OAAO,CAAC,CAAC;QAE/C,MAAM,KAAK,GAAc;YACvB,KAAK,EAAE,IAAI,EAAE,SAAS;YACtB,OAAO,EAAE,SAAS,CAAC,OAAO,CAAC,KAAK,EAAE,GAAG,CAAC;YACtC,KAAK,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;SAChC,CAAC;QACF,KAAK,CAAC,UAAU,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC;QAC1B,UAAU,CAAC,KAAK,CAAC,OAAO,EAAE,EAAE,GAAG,OAAO,CAAC,CAAC;QACxC,OAAO,KAAK,CAAC,OAAO,CAAC;IACvB,CAAC;IAED,SAAS,CAAC,OAAe;QACvB,MAAM,KAAK,GAAG,KAAK,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC;QACtC,IAAI,CAAC,KAAK;YAAE,OAAO,IAAI,CAAC;QACxB,IAAI,OAAO,GAAG,UAAU,CAAC,OAAO,CAAC,CAAC;QAClC,IAAI,CAAC,OAAO,EAAE,CAAC;YACb,IAAI,CAAC;gBAAC,OAAO,GAAG,YAAY,CAAC,OAAO,CAAC,KAAK,CAAC,SAAS,EAAE,OAAO,CAAC,EAAE,OAAO,CAAC,CAAC;YAAC,CAAC;YAC3E,MAAM,CAAC;gBAAC,OAAO,IAAI,CAAC;YAAC,CAAC;QACxB,CAAC;QACD,OAAO,EAAE,KAAK,EAAE,OAAO,EAAE,CAAC;IAC5B,CAAC;IAED,qBAAqB;IACrB,IAAI,eAAe,KAAc,OAAO,KAAK,CAAC,kBAAkB,EAAE,CAAC,CAAC,CAAC;IAErE,KAAK,CAAC,cAAc,CAAC,OAAgB;QACnC,IAAI,OAAO,EAAE,CAAC;YACZ,MAAM,CAAC,GAAG,SAAS,CAAC,OAAO,CAAC,CAAC;YAC7B,IAAI,CAAC,CAAC;gBAAE,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,GAAG,EAAE,iBAAiB,GAAG,OAAO,EAAE,CAAC;YAC/D,WAAW,CAAC,OAAO,CAAC,CAAC;QACvB,CAAC;QACD,MAAM,EAAE,GAAG,MAAM,QAAQ,CAAC,UAAU,EAAE,CAAC;QACvC,IAAI,CAAC,EAAE;YAAE,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,GAAG,EAAE,eAAe,GAAG,CAAC,QAAQ,CAAC,YAAY,EAAE,IAAI,SAAS,CAAC,EAAE,CAAC;QAC7F,KAAK,CAAC,kBAAkB,CAAC,IAAI,CAAC,CAAC;QAC/B,OAAO,EAAE,EAAE,EAAE,IAAI,EAAE,GAAG,EAAE,6BAA6B,GAAG,QAAQ,CAAC,YAAY,EAAE,GAAG,YAAY,GAAG,QAAQ,CAAC,cAAc,EAAE,EAAE,CAAC;IAC/H,CAAC;IAED,eAAe;QACb,KAAK,CAAC,kBAAkB,CAAC,KAAK,CAAC,CAAC;IAClC,CAAC;IAED,uBAAuB;IACvB,KAAK,CAAC,kBAAkB,CAAC,SAAkB;QACzC,IAAI,CAAC,QAAQ,CAAC,WAAW,EAAE;YAAE,MAAM,QAAQ,CAAC,UAAU,EAAE,CAAC;QACzD,MAAM,OAAO,GAAG,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,QAAQ,EAAE,CAAC,CAAC,MAAM,CACpD,CAAC,CAAC,EAAE,CAAC,CAAC,SAAS,IAAI,CAAC,CAAC,SAAS,KAAK,SAAS,CAC7C,CAAC;QACF,wEAAwE;QACxE,IAAI,KAAK,GAAG,CAAC,CAAC;QACd,MAAM,QAAQ,GAAG,IAAI,GAAG,EAAE,CAAC;QAC3B,KAAK,MAAM,CAAC,IAAI,OAAO,EAAE,CAAC;YACxB,MAAM,IAAI,GAAG,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,SAAS,CAAC,IAAI,EAAE,CAAC;YAC7C,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;YACb,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,SAAS,EAAE,IAAI,CAAC,CAAC;QAClC,CAAC;QACD,KAAK,MAAM,CAAC,GAAG,EAAE,IAAI,CAAC,IAAI,QAAQ,EAAE,CAAC;YACnC,KAAK,IAAI,MAAM,oBAAoB,CAAC,GAAG,EAAE,IAAI,CAAC,CAAC;QACjD,CAAC;QACD,OAAO,EAAE,QAAQ,EAAE,KAAK,EAAE,OAAO,EAAE,CAAC,EAAE,CAAC;IACzC,CAAC;IAED,2BAA2B;IAC3B,KAAK,CAAC,aAAa;QACjB,OAAO,QAAQ,CAAC,aAAa,EAAE,CAAC;IAClC,CAAC;IAED,mBAAmB;IACnB,MAAM;QACJ,MAAM,CAAC,GAAG,KAAK,EAAE,CAAC;QAClB,MAAM,KAAK,GAAG,eAAe,EAAE,CAAC;QAChC,OAAO;YACL,UAAU,EAAE,WAAW,EAAE;YACzB,OAAO,EAAE,KAAK,CAAC,UAAU,EAAE;YAC3B,KAAK,EAAE,CAAC,CAAC,KAAK;YACd,QAAQ,EAAE,CAAC,CAAC,QAAQ,IAAI,EAAE;YAC1B,QAAQ,EAAE,KAAK,CAAC,kBAAkB,EAAE;YACpC,UAAU,EAAE,CAAC,CAAC,UAAU,IAAI,CAAC;YAC7B,KAAK,EAAE,KAAK,EAAE,EAAE,IAAI,SAAS;YAC7B,QAAQ,EAAE,KAAK,EAAE,GAAG,IAAI,CAAC;YACzB,QAAQ,EAAE,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,QAAQ,EAAE,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,YAAY,CAAC,CAAC,CAAC,EAAE,WAAW,CAAC,CAAC,MAAM;SACzF,CAAC;IACJ,CAAC;IAED,gBAAgB;IAChB,IAAI,OAAO;QACT,MAAM,MAAM,GAAG,OAAO,CAAC,GAAG,CAAC,gBAAgB,IAAI,OAAO,CAAC,GAAG,CAAC,cAAc,IAAI,EAAE,CAAC;QAChF,MAAM,OAAO,GAAG,OAAO,CAAC,GAAG,CAAC,gBAAgB;YAC1C,CAAC,CAAC,6BAA6B;YAC/B,CAAC,CAAC,OAAO,CAAC,GAAG,CAAC,cAAc;gBAC1B,CAAC,CAAC,2BAA2B;gBAC7B,CAAC,CAAC,EAAE,CAAC;QACT,MAAM,KAAK,GAAG,OAAO,CAAC,GAAG,CAAC,SAAS,IAAI,eAAe,CAAC;QACvD,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC;IAC9C,CAAC;IAED,KAAK,CAAC,WAAW,CAAC,OAAe;QAC/B,MAAM,OAAO,GAAG,UAAU,CAAC,OAAO,CAAC,CAAC;QACpC,IAAI,CAAC,OAAO;YAAE,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,GAAG,EAAE,aAAa,GAAG,OAAO,EAAE,CAAC;QACjE,MAAM,MAAM,GAAG,MAAM,YAAY,CAAC,SAAS,EAAE,KAAK,CAAC,CAAC;QACpD,MAAM,UAAU,GAAG,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,OAAO,KAAK,OAAO,CAAC,CAAC;QAC7D,IAAI,CAAC,UAAU,CAAC,MAAM;YAAE,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,GAAG,EAAE,aAAa,GAAG,OAAO,EAAE,CAAC;QAE3E,MAAM,EAAE,qBAAqB,EAAE,kBAAkB,EAAE,mBAAmB,EAAE,GAAG,MAAM,MAAM,CAAC,wBAAwB,CAAC,CAAC;QAClH,MAAM,MAAM,GAAG,kBAAkB,CAAC,UAAU,CAAC,CAAC;QAC9C,IAAI,CAAC;YACH,MAAM,MAAM,GAAG,OAAO,CAAC,GAAG,CAAC,gBAAgB,IAAI,OAAO,CAAC,GAAG,CAAC,cAAc,CAAC;YAC1E,IAAI,CAAC,MAAM;gBAAE,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,GAAG,EAAE,oDAAoD,EAAE,CAAC;YAC7F,MAAM,OAAO,GAAG,OAAO,CAAC,GAAG,CAAC,gBAAgB;gBAC1C,CAAC,CAAC,6BAA6B;gBAC/B,CAAC,CAAC,2BAA2B,CAAC;YAChC,MAAM,KAAK,GAAG,OAAO,CAAC,GAAG,CAAC,SAAS,IAAI,eAAe,CAAC;YAEvD,MAAM,GAAG,GAAG,MAAM,KAAK,CAAC,OAAO,GAAG,mBAAmB,EAAE;gBACrD,MAAM,EAAE,MAAM;gBACd,OAAO,EAAE,EAAE,cAAc,EAAE,kBAAkB,EAAE,eAAe,EAAE,SAAS,GAAG,MAAM,EAAE;gBACpF,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC;oBACnB,KAAK;oBACL,QAAQ,EAAE;wBACR,EAAE,IAAI,EAAE,QAAQ,EAAE,OAAO,EAAE,qBAAqB,EAAE;wBAClD,EAAE,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE;qBAClC;oBACD,eAAe,EAAE,EAAE,IAAI,EAAE,aAAa,EAAE;oBACxC,WAAW,EAAE,GAAG;iBACjB,CAAC;aACH,CAAC,CAAC;YACH,MAAM,IAAI,GAAG,MAAM,GAAG,CAAC,IAAI,EAAS,CAAC;YACrC,MAAM,GAAG,GAAG,IAAI,EAAE,OAAO,EAAE,CAAC,CAAC,CAAC,EAAE,OAAO,EAAE,OAAO,IAAI,EAAE,CAAC;YACvD,MAAM,QAAQ,GAAG,mBAAmB,CAAC,GAAG,CAAC,CAAC;YAC1C,IAAI,CAAC,QAAQ;gBAAE,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,GAAG,EAAE,gBAAgB,GAAG,GAAG,CAAC,KAAK,CAAC,CAAC,EAAE,GAAG,CAAC,EAAE,CAAC;YAE/E,MAAM,mBAAmB,CAAC,QAAQ,CAAC,CAAC;YACpC,MAAM,KAAK,GAAG,QAAQ,CAAC,CAAC,CAAC,EAAE,KAAK,IAAI,SAAS,CAAC;YAC9C,OAAO,EAAE,EAAE,EAAE,IAAI,EAAE,GAAG,EAAE,YAAY,GAAG,OAAO,GAAG,OAAO,GAAG,KAAK,GAAG,GAAG,EAAE,CAAC;QAC3E,CAAC;QAAC,OAAO,CAAM,EAAE,CAAC;YAChB,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,GAAG,EAAE,aAAa,GAAG,CAAC,CAAC,OAAO,EAAE,CAAC;QACvD,CAAC;IACH,CAAC;IAED,KAAK,CAAC,UAAU,CAAC,SAAkB,EAAE,KAAK,GAAG,EAAE;QAC7C,IAAI,KAAK,GAAG,CAAC,EAAE,MAAM,GAAG,CAAC,CAAC;QAC1B,MAAM,IAAI,GAAa,EAAE,CAAC;QAC1B,MAAM,OAAO,GAAG,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,QAAQ,EAAE,CAAC,CAAC,MAAM,CACpD,CAAC,CAAC,EAAE,CAAC,CAAC,SAAS,IAAI,CAAC,CAAC,SAAS,KAAK,SAAS,CAC7C,CAAC;QACF,KAAK,MAAM,KAAK,IAAI,OAAO,EAAE,CAAC;YAC5B,IAAI,KAAK,IAAI,KAAK;gBAAE,MAAM;YAC1B,MAAM,CAAC,GAAG,MAAM,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;YAChD,IAAI,CAAC,CAAC,EAAE,EAAE,CAAC;gBAAC,KAAK,EAAE,CAAC;gBAAC,IAAI,CAAC,IAAI,CAAC,IAAI,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC;YAAC,CAAC;iBAC1C,CAAC;gBAAC,MAAM,EAAE,CAAC;gBAAC,IAAI,CAAC,IAAI,CAAC,UAAU,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC;YAAC,CAAC;QACnD,CAAC;QACD,OAAO,EAAE,QAAQ,EAAE,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC;IAC3C,CAAC;IAED,aAAa,CAAC,UAAmB;QAC/B,MAAM,GAAG,GAAG,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,QAAQ,EAAE,CAAC,CAAC;QAC1C,MAAM,QAAQ,GAAa,EAAE,CAAC;QAC9B,MAAM,UAAU,GAAa,EAAE,CAAC;QAChC,KAAK,MAAM,OAAO,IAAI,GAAG,EAAE,CAAC;YAC1B,MAAM,KAAK,GAAG,YAAY,CAAC,OAAO,CAAC,CAAC;YACpC,IAAI,KAAK,EAAE,WAAW;gBAAE,QAAQ,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;;gBAC1C,UAAU,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;QAChC,CAAC;QACD,OAAO,EAAE,KAAK,EAAE,GAAG,CAAC,MAAM,EAAE,QAAQ,EAAE,QAAQ,CAAC,MAAM,EAAE,UAAU,EAAE,CAAC;IACtE,CAAC;IAED,UAAU;QACR,OAAO,gBAAgB,EAAE,CAAC;IAC5B,CAAC;CACF"}
1
+ {"version":3,"file":"WikiEngine.js","sourceRoot":"","sources":["../src/WikiEngine.ts"],"names":[],"mappings":"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"}