@ngao/search 0.1.0 → 0.1.2

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 (259) hide show
  1. package/.claude/settings.local.json +10 -0
  2. package/.env.example +7 -0
  3. package/.eslintrc.json +20 -0
  4. package/.github/workflows/build.yml +39 -0
  5. package/.github/workflows/release.yml +34 -0
  6. package/.github/workflows/test.yml +35 -0
  7. package/.mcp-config.json +14 -0
  8. package/.prettierrc.json +10 -0
  9. package/LICENSE +17 -0
  10. package/Makefile +26 -0
  11. package/README.md +57 -172
  12. package/config.example.json +8 -0
  13. package/dist/backend/api/search-engine.d.ts +40 -0
  14. package/dist/backend/api/search-engine.d.ts.map +1 -0
  15. package/dist/backend/api/search-engine.js +227 -0
  16. package/dist/backend/api/search-engine.js.map +1 -0
  17. package/dist/backend/core/block-impl.d.ts +32 -0
  18. package/dist/backend/core/block-impl.d.ts.map +1 -0
  19. package/dist/backend/core/block-impl.js +33 -0
  20. package/dist/backend/core/block-impl.js.map +1 -0
  21. package/dist/backend/core/config-loader.d.ts +68 -0
  22. package/dist/backend/core/config-loader.d.ts.map +1 -0
  23. package/dist/backend/core/config-loader.js +234 -0
  24. package/dist/backend/core/config-loader.js.map +1 -0
  25. package/dist/backend/core/constants.d.ts +39 -0
  26. package/dist/backend/core/constants.d.ts.map +1 -0
  27. package/dist/backend/core/constants.js +57 -0
  28. package/dist/backend/core/constants.js.map +1 -0
  29. package/dist/backend/core/enums.d.ts +54 -0
  30. package/dist/backend/core/enums.d.ts.map +1 -0
  31. package/dist/backend/core/enums.js +61 -0
  32. package/dist/backend/core/enums.js.map +1 -0
  33. package/dist/backend/core/errors.d.ts +83 -0
  34. package/dist/backend/core/errors.d.ts.map +1 -0
  35. package/dist/backend/core/errors.js +151 -0
  36. package/dist/backend/core/errors.js.map +1 -0
  37. package/dist/backend/core/logger.d.ts +68 -0
  38. package/dist/backend/core/logger.d.ts.map +1 -0
  39. package/dist/backend/core/logger.js +151 -0
  40. package/dist/backend/core/logger.js.map +1 -0
  41. package/dist/backend/core/models.d.ts +332 -0
  42. package/dist/backend/core/models.d.ts.map +1 -0
  43. package/dist/backend/core/models.js +6 -0
  44. package/dist/backend/core/models.js.map +1 -0
  45. package/dist/backend/core/service-types.d.ts +184 -0
  46. package/dist/backend/core/service-types.d.ts.map +1 -0
  47. package/dist/backend/core/service-types.js +7 -0
  48. package/dist/backend/core/service-types.js.map +1 -0
  49. package/dist/backend/core/types.d.ts +219 -0
  50. package/dist/backend/core/types.d.ts.map +1 -0
  51. package/dist/backend/core/types.js +109 -0
  52. package/dist/backend/core/types.js.map +1 -0
  53. package/dist/backend/index.d.ts +5 -0
  54. package/dist/backend/index.d.ts.map +1 -0
  55. package/dist/backend/index.js +13 -0
  56. package/dist/backend/index.js.map +1 -0
  57. package/dist/backend/indexing/block-extractor.d.ts +22 -0
  58. package/dist/backend/indexing/block-extractor.d.ts.map +1 -0
  59. package/dist/backend/indexing/block-extractor.js +52 -0
  60. package/dist/backend/indexing/block-extractor.js.map +1 -0
  61. package/dist/backend/indexing/index-builder.d.ts +26 -0
  62. package/dist/backend/indexing/index-builder.d.ts.map +1 -0
  63. package/dist/backend/indexing/index-builder.js +71 -0
  64. package/dist/backend/indexing/index-builder.js.map +1 -0
  65. package/dist/backend/parsers/base-file-parser.d.ts +134 -0
  66. package/dist/backend/parsers/base-file-parser.d.ts.map +1 -0
  67. package/dist/backend/parsers/base-file-parser.js +149 -0
  68. package/dist/backend/parsers/base-file-parser.js.map +1 -0
  69. package/dist/backend/parsers/javascript-parser.d.ts +36 -0
  70. package/dist/backend/parsers/javascript-parser.d.ts.map +1 -0
  71. package/dist/backend/parsers/javascript-parser.js +194 -0
  72. package/dist/backend/parsers/javascript-parser.js.map +1 -0
  73. package/dist/backend/parsers/json-parser.d.ts +15 -0
  74. package/dist/backend/parsers/json-parser.d.ts.map +1 -0
  75. package/dist/backend/parsers/json-parser.js +75 -0
  76. package/dist/backend/parsers/json-parser.js.map +1 -0
  77. package/dist/backend/parsers/markdown-parser.d.ts +17 -0
  78. package/dist/backend/parsers/markdown-parser.d.ts.map +1 -0
  79. package/dist/backend/parsers/markdown-parser.js +94 -0
  80. package/dist/backend/parsers/markdown-parser.js.map +1 -0
  81. package/dist/backend/parsers/parser-factory.d.ts +43 -0
  82. package/dist/backend/parsers/parser-factory.d.ts.map +1 -0
  83. package/dist/backend/parsers/parser-factory.js +149 -0
  84. package/dist/backend/parsers/parser-factory.js.map +1 -0
  85. package/dist/backend/parsers/python-parser.d.ts +21 -0
  86. package/dist/backend/parsers/python-parser.d.ts.map +1 -0
  87. package/dist/backend/parsers/python-parser.js +185 -0
  88. package/dist/backend/parsers/python-parser.js.map +1 -0
  89. package/dist/backend/parsers/yaml-parser.d.ts +16 -0
  90. package/dist/backend/parsers/yaml-parser.d.ts.map +1 -0
  91. package/dist/backend/parsers/yaml-parser.js +81 -0
  92. package/dist/backend/parsers/yaml-parser.js.map +1 -0
  93. package/dist/backend/repositories/implementations/lancedb-block-repository.d.ts +125 -0
  94. package/dist/backend/repositories/implementations/lancedb-block-repository.d.ts.map +1 -0
  95. package/dist/backend/repositories/implementations/lancedb-block-repository.js +505 -0
  96. package/dist/backend/repositories/implementations/lancedb-block-repository.js.map +1 -0
  97. package/dist/backend/repositories/implementations/lancedb-metadata-repository.d.ts +107 -0
  98. package/dist/backend/repositories/implementations/lancedb-metadata-repository.d.ts.map +1 -0
  99. package/dist/backend/repositories/implementations/lancedb-metadata-repository.js +275 -0
  100. package/dist/backend/repositories/implementations/lancedb-metadata-repository.js.map +1 -0
  101. package/dist/backend/repositories/implementations/memory-cache.d.ts +18 -0
  102. package/dist/backend/repositories/implementations/memory-cache.d.ts.map +1 -0
  103. package/dist/backend/repositories/implementations/memory-cache.js +53 -0
  104. package/dist/backend/repositories/implementations/memory-cache.js.map +1 -0
  105. package/dist/backend/repositories/repository.interface.d.ts +334 -0
  106. package/dist/backend/repositories/repository.interface.d.ts.map +1 -0
  107. package/dist/backend/repositories/repository.interface.js +7 -0
  108. package/dist/backend/repositories/repository.interface.js.map +1 -0
  109. package/dist/backend/search/context-extractor.d.ts +29 -0
  110. package/dist/backend/search/context-extractor.d.ts.map +1 -0
  111. package/dist/backend/search/context-extractor.js +106 -0
  112. package/dist/backend/search/context-extractor.js.map +1 -0
  113. package/dist/backend/search/multi-index-searcher.d.ts +28 -0
  114. package/dist/backend/search/multi-index-searcher.d.ts.map +1 -0
  115. package/dist/backend/search/multi-index-searcher.js +81 -0
  116. package/dist/backend/search/multi-index-searcher.js.map +1 -0
  117. package/dist/backend/search/query-parser.d.ts +37 -0
  118. package/dist/backend/search/query-parser.d.ts.map +1 -0
  119. package/dist/backend/search/query-parser.js +145 -0
  120. package/dist/backend/search/query-parser.js.map +1 -0
  121. package/dist/backend/search/ranking-engine.d.ts +31 -0
  122. package/dist/backend/search/ranking-engine.d.ts.map +1 -0
  123. package/dist/backend/search/ranking-engine.js +165 -0
  124. package/dist/backend/search/ranking-engine.js.map +1 -0
  125. package/dist/backend/search/result-formatter.d.ts +29 -0
  126. package/dist/backend/search/result-formatter.d.ts.map +1 -0
  127. package/dist/backend/search/result-formatter.js +70 -0
  128. package/dist/backend/search/result-formatter.js.map +1 -0
  129. package/dist/backend/service-types.d.ts +184 -0
  130. package/dist/backend/service-types.d.ts.map +1 -0
  131. package/dist/backend/service-types.js +7 -0
  132. package/dist/backend/service-types.js.map +1 -0
  133. package/dist/backend/services/embedding-service.d.ts +75 -0
  134. package/dist/backend/services/embedding-service.d.ts.map +1 -0
  135. package/dist/backend/services/embedding-service.js +298 -0
  136. package/dist/backend/services/embedding-service.js.map +1 -0
  137. package/dist/backend/services/file-watcher.d.ts +17 -0
  138. package/dist/backend/services/file-watcher.d.ts.map +1 -0
  139. package/dist/backend/services/file-watcher.js +92 -0
  140. package/dist/backend/services/file-watcher.js.map +1 -0
  141. package/dist/backend/services/index-information-service.d.ts +114 -0
  142. package/dist/backend/services/index-information-service.d.ts.map +1 -0
  143. package/dist/backend/services/index-information-service.js +104 -0
  144. package/dist/backend/services/index-information-service.js.map +1 -0
  145. package/dist/backend/services/ngao-search-service.d.ts +107 -0
  146. package/dist/backend/services/ngao-search-service.d.ts.map +1 -0
  147. package/dist/backend/services/ngao-search-service.js +384 -0
  148. package/dist/backend/services/ngao-search-service.js.map +1 -0
  149. package/dist/backend/services/quantization-service.d.ts +53 -0
  150. package/dist/backend/services/quantization-service.d.ts.map +1 -0
  151. package/dist/backend/services/quantization-service.js +84 -0
  152. package/dist/backend/services/quantization-service.js.map +1 -0
  153. package/dist/backend/services/reindex-manager.d.ts +25 -0
  154. package/dist/backend/services/reindex-manager.d.ts.map +1 -0
  155. package/dist/backend/services/reindex-manager.js +78 -0
  156. package/dist/backend/services/reindex-manager.js.map +1 -0
  157. package/dist/backend/services/session-manager.d.ts +115 -0
  158. package/dist/backend/services/session-manager.d.ts.map +1 -0
  159. package/dist/backend/services/session-manager.js +150 -0
  160. package/dist/backend/services/session-manager.js.map +1 -0
  161. package/dist/backend/services/vector-search-service.d.ts +81 -0
  162. package/dist/backend/services/vector-search-service.d.ts.map +1 -0
  163. package/dist/backend/services/vector-search-service.js +143 -0
  164. package/dist/backend/services/vector-search-service.js.map +1 -0
  165. package/dist/backend/utils/file-utils.d.ts +92 -0
  166. package/dist/backend/utils/file-utils.d.ts.map +1 -0
  167. package/dist/backend/utils/file-utils.js +247 -0
  168. package/dist/backend/utils/file-utils.js.map +1 -0
  169. package/dist/cli/setup.d.ts +4 -0
  170. package/dist/cli/setup.d.ts.map +1 -0
  171. package/dist/cli/setup.js +138 -0
  172. package/dist/cli/setup.js.map +1 -0
  173. package/dist/index.d.ts +6 -0
  174. package/dist/index.d.ts.map +1 -0
  175. package/dist/index.js +22 -0
  176. package/dist/index.js.map +1 -0
  177. package/dist/main.d.ts +14 -0
  178. package/dist/main.d.ts.map +1 -0
  179. package/dist/main.js +7 -67075
  180. package/dist/main.js.map +1 -0
  181. package/dist/mcp/tool-schemas.d.ts +205 -0
  182. package/dist/mcp/tool-schemas.d.ts.map +1 -0
  183. package/dist/mcp/tool-schemas.js +391 -0
  184. package/dist/mcp/tool-schemas.js.map +1 -0
  185. package/dist/server/logger.d.ts +50 -0
  186. package/dist/server/logger.d.ts.map +1 -0
  187. package/dist/server/logger.js +77 -0
  188. package/dist/server/logger.js.map +1 -0
  189. package/dist/server/tool-registry.d.ts +64 -0
  190. package/dist/server/tool-registry.d.ts.map +1 -0
  191. package/dist/server/tool-registry.js +93 -0
  192. package/dist/server/tool-registry.js.map +1 -0
  193. package/dist/server/transports/mcp-transport.d.ts +31 -0
  194. package/dist/server/transports/mcp-transport.d.ts.map +1 -0
  195. package/dist/server/transports/mcp-transport.js +331 -0
  196. package/dist/server/transports/mcp-transport.js.map +1 -0
  197. package/dist/server/transports/rest-transport.d.ts +36 -0
  198. package/dist/server/transports/rest-transport.d.ts.map +1 -0
  199. package/dist/server/transports/rest-transport.js +250 -0
  200. package/dist/server/transports/rest-transport.js.map +1 -0
  201. package/docs/API.md +116 -0
  202. package/docs/ARCHITECTURE.md +101 -0
  203. package/docs/FILE_WATCHING.md +120 -0
  204. package/docs/INSTALLATION.md +87 -0
  205. package/docs/MCP_INTEGRATION.md +108 -0
  206. package/docs/README.md +288 -0
  207. package/docs/USAGE.md +123 -0
  208. package/docs/architecture-design-standards/01_ARCHITECTURE.md +863 -0
  209. package/docs/architecture-design-standards/02_SEARCH_ENGINE_DESIGN.md +958 -0
  210. package/docs/architecture-design-standards/03_DATAFLOW.md +1000 -0
  211. package/docs/architecture-design-standards/04_VISUAL_GUIDE.md +922 -0
  212. package/docs/architecture-design-standards/05_REPOSITORY_PATTERN_GUIDE.md +503 -0
  213. package/docs/architecture-design-standards/06_IMPLEMENTATION_PATTERNS.md +1026 -0
  214. package/docs/architecture-design-standards/07_TYPESCRIPT_GUIDE.md +1027 -0
  215. package/docs/architecture-design-standards/08_CODING_STANDARDS.md +1274 -0
  216. package/docs/reference/01_START_HERE.md +108 -0
  217. package/docs/reference/02_QUICK_REFERENCE.md +363 -0
  218. package/docs/reference/03_DOCUMENTATION_INDEX.md +293 -0
  219. package/docs/reference/04_DELIVERY_SUMMARY.md +463 -0
  220. package/docs/reference/05_IMPLEMENTATION_OVERVIEW.md +319 -0
  221. package/docs/reference/06_RESEARCH_SUMMARY.md +519 -0
  222. package/docs/tracking/03_IMPLEMENTATION_ROADMAP.md +788 -0
  223. package/jest.config.json +12 -0
  224. package/package.json +46 -53
  225. package/prepend-shebang.js +18 -0
  226. package/scripts/setup-mcp.sh +66 -0
  227. package/src/backend/index.ts +5 -0
  228. package/src/backend/service-types.ts +219 -0
  229. package/src/backend/services/file-watcher.ts +79 -0
  230. package/src/backend/services/ngao-search-service.ts +430 -0
  231. package/src/backend/services/reindex-manager.ts +90 -0
  232. package/src/backend/services/session-manager.ts +214 -0
  233. package/src/cli/setup.ts +122 -0
  234. package/src/index.ts +6 -0
  235. package/src/main.ts +225 -0
  236. package/src/mcp/tool-schemas.ts +439 -0
  237. package/src/server/logger.ts +88 -0
  238. package/src/server/tool-registry.ts +117 -0
  239. package/src/server/transports/mcp-transport.ts +374 -0
  240. package/src/server/transports/rest-transport.ts +258 -0
  241. package/tests/unit/agent-tools.test.ts +454 -0
  242. package/tests/unit/file-watcher.test.d.ts +2 -0
  243. package/tests/unit/file-watcher.test.d.ts.map +1 -0
  244. package/tests/unit/file-watcher.test.js +9 -0
  245. package/tests/unit/file-watcher.test.js.map +1 -0
  246. package/tests/unit/file-watcher.test.ts +7 -0
  247. package/tests/unit/search-integration.test.ts +256 -0
  248. package/tests/unit/services.test.d.ts +2 -0
  249. package/tests/unit/services.test.d.ts.map +1 -0
  250. package/tests/unit/services.test.js +9 -0
  251. package/tests/unit/services.test.js.map +1 -0
  252. package/tests/unit/services.test.ts +7 -0
  253. package/tsconfig.json +23 -0
  254. package/webpack.backend.config.js +60 -0
  255. package/webpack.config.js +34 -0
  256. package/models/Xenova/all-MiniLM-L6-v2/config.json +0 -25
  257. package/models/Xenova/all-MiniLM-L6-v2/onnx/model_quantized.onnx +0 -0
  258. package/models/Xenova/all-MiniLM-L6-v2/tokenizer.json +0 -30686
  259. package/models/Xenova/all-MiniLM-L6-v2/tokenizer_config.json +0 -15
@@ -0,0 +1,107 @@
1
+ /**
2
+ * LanceDB Metadata Repository
3
+ * Stores file-level metadata for change detection and indexing
4
+ */
5
+ import { IMetadataRepository } from '../repository.interface';
6
+ import { ILogger, FilePath, FileHash } from '../../core/types';
7
+ import { FileIndexMetadata, ReindexStats } from '../../core/models';
8
+ /**
9
+ * File-based metadata repository
10
+ * Stores metadata as JSON for simplicity
11
+ * (Could be migrated to LanceDB table if needed)
12
+ */
13
+ export declare class LanceMetadataRepository implements IMetadataRepository {
14
+ private _metadataPath;
15
+ private _metadata;
16
+ private _fileIndexMetadata;
17
+ private _reindexStats;
18
+ private _projectId;
19
+ private _isInitialized;
20
+ private _logger;
21
+ private _saveIntervalMs;
22
+ private _saveTimeout;
23
+ constructor(dataDir?: string, projectId?: string, logger?: ILogger);
24
+ /**
25
+ * Initialize metadata repository
26
+ */
27
+ initialize(): Promise<void>;
28
+ /**
29
+ * Get file hash
30
+ */
31
+ getFileHash(filePath: FilePath): Promise<FileHash | null>;
32
+ /**
33
+ * Update file hash
34
+ */
35
+ updateFileHash(filePath: FilePath, hash: FileHash): Promise<void>;
36
+ /**
37
+ * Get last indexed time
38
+ */
39
+ getLastIndexedTime(filePath: FilePath): Promise<number | null>;
40
+ /**
41
+ * Update last indexed time
42
+ */
43
+ updateLastIndexedTime(filePath: FilePath, time: number): Promise<void>;
44
+ /**
45
+ * Update block count for file
46
+ */
47
+ updateBlockCount(filePath: string, count: number): Promise<void>;
48
+ /**
49
+ * Get all indexed files
50
+ */
51
+ getIndexedFiles(): Promise<FilePath[]>;
52
+ /**
53
+ * Get metadata for file (legacy - compatibility)
54
+ */
55
+ getFileMetadata(filePath: string): Promise<FileIndexMetadata | null>;
56
+ /**
57
+ * Clear all metadata
58
+ */
59
+ clear(): Promise<void>;
60
+ /**
61
+ * Get statistics
62
+ */
63
+ getStats(): Promise<{
64
+ totalFiles: number;
65
+ oldestIndexedTime: number | null;
66
+ newestIndexedTime: number | null;
67
+ }>;
68
+ /**
69
+ * Get all indexed directories
70
+ *
71
+ * @returns List of indexed directory paths
72
+ */
73
+ getIndexedDirectories(): Promise<string[]>;
74
+ /**
75
+ * Get all file index metadata
76
+ *
77
+ * @returns Array of all file metadata
78
+ */
79
+ getAllFileMetadata(): Promise<FileIndexMetadata[]>;
80
+ /**
81
+ * Update reindex metadata
82
+ *
83
+ * @param dirPath - Directory path
84
+ * @param stats - Reindex statistics
85
+ */
86
+ updateReindexMetadata(dirPath: string, stats: ReindexStats): Promise<void>;
87
+ /**
88
+ * Set file index metadata
89
+ *
90
+ * @param filePath - File path
91
+ * @param metadata - File index metadata
92
+ */
93
+ setFileIndexMetadata(filePath: string, metadata: FileIndexMetadata): Promise<void>;
94
+ /**
95
+ * Private: Ensure initialized
96
+ */
97
+ private _ensureInitialized;
98
+ /**
99
+ * Private: Schedule metadata save (debounced)
100
+ */
101
+ private _scheduleMetadataSave;
102
+ /**
103
+ * Private: Save metadata to disk
104
+ */
105
+ private _saveMetadata;
106
+ }
107
+ //# sourceMappingURL=lancedb-metadata-repository.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"lancedb-metadata-repository.d.ts","sourceRoot":"","sources":["../../../../src/backend/repositories/implementations/lancedb-metadata-repository.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,mBAAmB,EAAE,MAAM,yBAAyB,CAAC;AAC9D,OAAO,EAAE,OAAO,EAAE,QAAQ,EAAE,QAAQ,EAAkB,MAAM,kBAAkB,CAAC;AAE/E,OAAO,EAAE,iBAAiB,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AAWpE;;;;GAIG;AACH,qBAAa,uBAAwB,YAAW,mBAAmB;IACjE,OAAO,CAAC,aAAa,CAAS;IAC9B,OAAO,CAAC,SAAS,CAAiC;IAClD,OAAO,CAAC,kBAAkB,CAAiC;IAC3D,OAAO,CAAC,aAAa,CAA4B;IACjD,OAAO,CAAC,UAAU,CAAc;IAChC,OAAO,CAAC,cAAc,CAAkB;IACxC,OAAO,CAAC,OAAO,CAAU;IACzB,OAAO,CAAC,eAAe,CAAgB;IACvC,OAAO,CAAC,YAAY,CAA+B;gBAEhC,OAAO,GAAE,MAAW,EAAE,SAAS,CAAC,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,OAAO;IAiB7E;;OAEG;IACU,UAAU,IAAI,OAAO,CAAC,IAAI,CAAC;IA0BxC;;OAEG;IACU,WAAW,CAAC,QAAQ,EAAE,QAAQ,GAAG,OAAO,CAAC,QAAQ,GAAG,IAAI,CAAC;IAMtE;;OAEG;IACU,cAAc,CAAC,QAAQ,EAAE,QAAQ,EAAE,IAAI,EAAE,QAAQ,GAAG,OAAO,CAAC,IAAI,CAAC;IAe9E;;OAEG;IACU,kBAAkB,CAAC,QAAQ,EAAE,QAAQ,GAAG,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC;IAM3E;;OAEG;IACU,qBAAqB,CAAC,QAAQ,EAAE,QAAQ,EAAE,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAenF;;OAEG;IACU,gBAAgB,CAAC,QAAQ,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAe7E;;OAEG;IACU,eAAe,IAAI,OAAO,CAAC,QAAQ,EAAE,CAAC;IAMnD;;OAEG;IACU,eAAe,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,iBAAiB,GAAG,IAAI,CAAC;IAKjF;;OAEG;IACU,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;IAMnC;;OAEG;IACU,QAAQ,IAAI,OAAO,CAAC;QAC/B,UAAU,EAAE,MAAM,CAAC;QACnB,iBAAiB,EAAE,MAAM,GAAG,IAAI,CAAC;QACjC,iBAAiB,EAAE,MAAM,GAAG,IAAI,CAAC;KAClC,CAAC;IAYF;;;;OAIG;IACU,qBAAqB,IAAI,OAAO,CAAC,MAAM,EAAE,CAAC;IAQvD;;;;OAIG;IACU,kBAAkB,IAAI,OAAO,CAAC,iBAAiB,EAAE,CAAC;IAK/D;;;;;OAKG;IACU,qBAAqB,CAAC,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,YAAY,GAAG,OAAO,CAAC,IAAI,CAAC;IAMvF;;;;;OAKG;IACU,oBAAoB,CAAC,QAAQ,EAAE,MAAM,EAAE,QAAQ,EAAE,iBAAiB,GAAG,OAAO,CAAC,IAAI,CAAC;IAM/F;;OAEG;YACW,kBAAkB;IAMhC;;OAEG;IACH,OAAO,CAAC,qBAAqB;IAc7B;;OAEG;YACW,aAAa;CAqB5B"}
@@ -0,0 +1,275 @@
1
+ "use strict";
2
+ /**
3
+ * LanceDB Metadata Repository
4
+ * Stores file-level metadata for change detection and indexing
5
+ */
6
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
7
+ if (k2 === undefined) k2 = k;
8
+ var desc = Object.getOwnPropertyDescriptor(m, k);
9
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
10
+ desc = { enumerable: true, get: function() { return m[k]; } };
11
+ }
12
+ Object.defineProperty(o, k2, desc);
13
+ }) : (function(o, m, k, k2) {
14
+ if (k2 === undefined) k2 = k;
15
+ o[k2] = m[k];
16
+ }));
17
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
18
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
19
+ }) : function(o, v) {
20
+ o["default"] = v;
21
+ });
22
+ var __importStar = (this && this.__importStar) || function (mod) {
23
+ if (mod && mod.__esModule) return mod;
24
+ var result = {};
25
+ if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
26
+ __setModuleDefault(result, mod);
27
+ return result;
28
+ };
29
+ Object.defineProperty(exports, "__esModule", { value: true });
30
+ exports.LanceMetadataRepository = void 0;
31
+ const types_1 = require("../../core/types");
32
+ const logger_1 = require("../../core/logger");
33
+ const fs = __importStar(require("fs"));
34
+ const path = __importStar(require("path"));
35
+ /**
36
+ * File-based metadata repository
37
+ * Stores metadata as JSON for simplicity
38
+ * (Could be migrated to LanceDB table if needed)
39
+ */
40
+ class LanceMetadataRepository {
41
+ constructor(dataDir = '', projectId, logger) {
42
+ this._projectId = '';
43
+ this._isInitialized = false;
44
+ this._saveIntervalMs = 5000; // Auto-save every 5s
45
+ this._saveTimeout = null;
46
+ this._logger = logger || new logger_1.NoOpLogger();
47
+ this._metadata = new Map();
48
+ this._fileIndexMetadata = new Map();
49
+ this._reindexStats = new Map();
50
+ this._projectId = projectId || '';
51
+ // Set metadata file path - use projectId if available for isolation
52
+ if (dataDir) {
53
+ const metadataFileName = this._projectId ? `${this._projectId}.metadata.json` : 'metadata.json';
54
+ this._metadataPath = path.join(dataDir, metadataFileName);
55
+ }
56
+ else {
57
+ const home = process.env.HOME || process.env.USERPROFILE || '.';
58
+ this._metadataPath = path.join(home, '.ngao-search', 'metadata.json');
59
+ }
60
+ }
61
+ /**
62
+ * Initialize metadata repository
63
+ */
64
+ async initialize() {
65
+ if (this._isInitialized) {
66
+ return;
67
+ }
68
+ try {
69
+ this._logger.debug('Initializing metadata repository', { path: this._metadataPath });
70
+ // Load existing metadata if available
71
+ if (fs.existsSync(this._metadataPath)) {
72
+ const content = fs.readFileSync(this._metadataPath, 'utf-8');
73
+ const data = JSON.parse(content);
74
+ this._metadata = new Map(Object.entries(data));
75
+ this._logger.info('Metadata loaded', { count: this._metadata.size });
76
+ }
77
+ else {
78
+ this._logger.info('No existing metadata found, starting fresh');
79
+ }
80
+ this._isInitialized = true;
81
+ }
82
+ catch (error) {
83
+ this._logger.error('Error initializing metadata repository', error);
84
+ this._metadata = new Map();
85
+ this._isInitialized = true;
86
+ }
87
+ }
88
+ /**
89
+ * Get file hash
90
+ */
91
+ async getFileHash(filePath) {
92
+ await this._ensureInitialized();
93
+ const entry = this._metadata.get(filePath);
94
+ return entry?.fileHash ? (0, types_1.createFileHash)(entry.fileHash) : null;
95
+ }
96
+ /**
97
+ * Update file hash
98
+ */
99
+ async updateFileHash(filePath, hash) {
100
+ await this._ensureInitialized();
101
+ const entry = this._metadata.get(filePath) || {
102
+ filePath,
103
+ fileHash: hash,
104
+ lastIndexedTime: 0,
105
+ blockCount: 0,
106
+ };
107
+ entry.fileHash = hash;
108
+ this._metadata.set(filePath, entry);
109
+ this._scheduleMetadataSave();
110
+ }
111
+ /**
112
+ * Get last indexed time
113
+ */
114
+ async getLastIndexedTime(filePath) {
115
+ await this._ensureInitialized();
116
+ const entry = this._metadata.get(filePath);
117
+ return entry?.lastIndexedTime || null;
118
+ }
119
+ /**
120
+ * Update last indexed time
121
+ */
122
+ async updateLastIndexedTime(filePath, time) {
123
+ await this._ensureInitialized();
124
+ const entry = this._metadata.get(filePath) || {
125
+ filePath,
126
+ fileHash: '',
127
+ lastIndexedTime: 0,
128
+ blockCount: 0,
129
+ };
130
+ entry.lastIndexedTime = time;
131
+ this._metadata.set(filePath, entry);
132
+ this._scheduleMetadataSave();
133
+ }
134
+ /**
135
+ * Update block count for file
136
+ */
137
+ async updateBlockCount(filePath, count) {
138
+ await this._ensureInitialized();
139
+ const entry = this._metadata.get(filePath) || {
140
+ filePath,
141
+ fileHash: '',
142
+ lastIndexedTime: 0,
143
+ blockCount: 0,
144
+ };
145
+ entry.blockCount = count;
146
+ this._metadata.set(filePath, entry);
147
+ this._scheduleMetadataSave();
148
+ }
149
+ /**
150
+ * Get all indexed files
151
+ */
152
+ async getIndexedFiles() {
153
+ await this._ensureInitialized();
154
+ // Cast string keys to FilePath
155
+ return Array.from(this._metadata.keys());
156
+ }
157
+ /**
158
+ * Get metadata for file (legacy - compatibility)
159
+ */
160
+ async getFileMetadata(filePath) {
161
+ await this._ensureInitialized();
162
+ return this._fileIndexMetadata.get(filePath) || null;
163
+ }
164
+ /**
165
+ * Clear all metadata
166
+ */
167
+ async clear() {
168
+ await this._ensureInitialized();
169
+ this._metadata.clear();
170
+ await this._saveMetadata();
171
+ }
172
+ /**
173
+ * Get statistics
174
+ */
175
+ async getStats() {
176
+ await this._ensureInitialized();
177
+ const times = Array.from(this._metadata.values()).map((e) => e.lastIndexedTime);
178
+ return {
179
+ totalFiles: this._metadata.size,
180
+ oldestIndexedTime: times.length > 0 ? Math.min(...times) : null,
181
+ newestIndexedTime: times.length > 0 ? Math.max(...times) : null,
182
+ };
183
+ }
184
+ /**
185
+ * Get all indexed directories
186
+ *
187
+ * @returns List of indexed directory paths
188
+ */
189
+ async getIndexedDirectories() {
190
+ const dirs = new Set();
191
+ for (const filePath of this._reindexStats.keys()) {
192
+ dirs.add(filePath);
193
+ }
194
+ return Array.from(dirs);
195
+ }
196
+ /**
197
+ * Get all file index metadata
198
+ *
199
+ * @returns Array of all file metadata
200
+ */
201
+ async getAllFileMetadata() {
202
+ await this._ensureInitialized();
203
+ return Array.from(this._fileIndexMetadata.values());
204
+ }
205
+ /**
206
+ * Update reindex metadata
207
+ *
208
+ * @param dirPath - Directory path
209
+ * @param stats - Reindex statistics
210
+ */
211
+ async updateReindexMetadata(dirPath, stats) {
212
+ await this._ensureInitialized();
213
+ this._reindexStats.set(dirPath, stats);
214
+ this._scheduleMetadataSave();
215
+ }
216
+ /**
217
+ * Set file index metadata
218
+ *
219
+ * @param filePath - File path
220
+ * @param metadata - File index metadata
221
+ */
222
+ async setFileIndexMetadata(filePath, metadata) {
223
+ await this._ensureInitialized();
224
+ this._fileIndexMetadata.set(filePath, metadata);
225
+ this._scheduleMetadataSave();
226
+ }
227
+ /**
228
+ * Private: Ensure initialized
229
+ */
230
+ async _ensureInitialized() {
231
+ if (!this._isInitialized) {
232
+ await this.initialize();
233
+ }
234
+ }
235
+ /**
236
+ * Private: Schedule metadata save (debounced)
237
+ */
238
+ _scheduleMetadataSave() {
239
+ // Clear existing timeout
240
+ if (this._saveTimeout) {
241
+ clearTimeout(this._saveTimeout);
242
+ }
243
+ // Schedule new save
244
+ this._saveTimeout = setTimeout(() => {
245
+ this._saveMetadata().catch((error) => {
246
+ this._logger.error('Error auto-saving metadata', error);
247
+ });
248
+ }, this._saveIntervalMs);
249
+ }
250
+ /**
251
+ * Private: Save metadata to disk
252
+ */
253
+ async _saveMetadata() {
254
+ try {
255
+ // Ensure directory exists
256
+ const dir = path.dirname(this._metadataPath);
257
+ if (!fs.existsSync(dir)) {
258
+ fs.mkdirSync(dir, { recursive: true });
259
+ }
260
+ // Convert map to object
261
+ const data = {};
262
+ for (const [key, value] of this._metadata.entries()) {
263
+ data[key] = value;
264
+ }
265
+ // Write to file
266
+ fs.writeFileSync(this._metadataPath, JSON.stringify(data, null, 2), 'utf-8');
267
+ this._logger.debug('Metadata saved', { path: this._metadataPath });
268
+ }
269
+ catch (error) {
270
+ this._logger.error('Error saving metadata', error);
271
+ }
272
+ }
273
+ }
274
+ exports.LanceMetadataRepository = LanceMetadataRepository;
275
+ //# sourceMappingURL=lancedb-metadata-repository.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"lancedb-metadata-repository.js","sourceRoot":"","sources":["../../../../src/backend/repositories/implementations/lancedb-metadata-repository.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,18 @@
1
+ /**
2
+ * In-Memory Cache Implementation
3
+ */
4
+ import { ICache } from '../repository.interface';
5
+ /**
6
+ * In-memory implementation of ICache with TTL support
7
+ */
8
+ export declare class MemoryCache implements ICache {
9
+ private _cache;
10
+ private _defaultTtlSeconds;
11
+ constructor(defaultTtlSeconds?: number);
12
+ get<T>(key: string): Promise<T | null>;
13
+ set<T>(key: string, value: T, ttlSeconds?: number): Promise<void>;
14
+ has(key: string): Promise<boolean>;
15
+ delete(key: string): Promise<boolean>;
16
+ clear(): Promise<void>;
17
+ }
18
+ //# sourceMappingURL=memory-cache.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"memory-cache.d.ts","sourceRoot":"","sources":["../../../../src/backend/repositories/implementations/memory-cache.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,MAAM,EAAE,MAAM,yBAAyB,CAAC;AAYjD;;GAEG;AACH,qBAAa,WAAY,YAAW,MAAM;IACxC,OAAO,CAAC,MAAM,CAA+C;IAC7D,OAAO,CAAC,kBAAkB,CAAS;gBAEhB,iBAAiB,GAAE,MAAa;IAItC,GAAG,CAAC,CAAC,EAAE,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,CAAC,GAAG,IAAI,CAAC;IAetC,GAAG,CAAC,CAAC,EAAE,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,CAAC,EAAE,UAAU,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAUjE,GAAG,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;IAelC,MAAM,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;IAIrC,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;CAGpC"}
@@ -0,0 +1,53 @@
1
+ "use strict";
2
+ /**
3
+ * In-Memory Cache Implementation
4
+ */
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.MemoryCache = void 0;
7
+ /**
8
+ * In-memory implementation of ICache with TTL support
9
+ */
10
+ class MemoryCache {
11
+ constructor(defaultTtlSeconds = 3600) {
12
+ this._cache = new Map();
13
+ this._defaultTtlSeconds = defaultTtlSeconds;
14
+ }
15
+ async get(key) {
16
+ const entry = this._cache.get(key);
17
+ if (!entry) {
18
+ return null;
19
+ }
20
+ if (Date.now() > entry.expiresAt) {
21
+ this._cache.delete(key);
22
+ return null;
23
+ }
24
+ return entry.value;
25
+ }
26
+ async set(key, value, ttlSeconds) {
27
+ const ttl = ttlSeconds || this._defaultTtlSeconds;
28
+ const expiresAt = Date.now() + ttl * 1000;
29
+ this._cache.set(key, {
30
+ value,
31
+ expiresAt,
32
+ });
33
+ }
34
+ async has(key) {
35
+ const entry = this._cache.get(key);
36
+ if (!entry) {
37
+ return false;
38
+ }
39
+ if (Date.now() > entry.expiresAt) {
40
+ this._cache.delete(key);
41
+ return false;
42
+ }
43
+ return true;
44
+ }
45
+ async delete(key) {
46
+ return this._cache.delete(key);
47
+ }
48
+ async clear() {
49
+ this._cache.clear();
50
+ }
51
+ }
52
+ exports.MemoryCache = MemoryCache;
53
+ //# sourceMappingURL=memory-cache.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"memory-cache.js","sourceRoot":"","sources":["../../../../src/backend/repositories/implementations/memory-cache.ts"],"names":[],"mappings":";AAAA;;GAEG;;;AAcH;;GAEG;AACH,MAAa,WAAW;IAItB,YAAmB,oBAA4B,IAAI;QAH3C,WAAM,GAAqC,IAAI,GAAG,EAAE,CAAC;QAI3D,IAAI,CAAC,kBAAkB,GAAG,iBAAiB,CAAC;IAC9C,CAAC;IAEM,KAAK,CAAC,GAAG,CAAI,GAAW;QAC7B,MAAM,KAAK,GAAG,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;QAEnC,IAAI,CAAC,KAAK,EAAE,CAAC;YACX,OAAO,IAAI,CAAC;QACd,CAAC;QAED,IAAI,IAAI,CAAC,GAAG,EAAE,GAAG,KAAK,CAAC,SAAS,EAAE,CAAC;YACjC,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;YACxB,OAAO,IAAI,CAAC;QACd,CAAC;QAED,OAAO,KAAK,CAAC,KAAU,CAAC;IAC1B,CAAC;IAEM,KAAK,CAAC,GAAG,CAAI,GAAW,EAAE,KAAQ,EAAE,UAAmB;QAC5D,MAAM,GAAG,GAAG,UAAU,IAAI,IAAI,CAAC,kBAAkB,CAAC;QAClD,MAAM,SAAS,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,GAAG,GAAG,IAAI,CAAC;QAE1C,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,GAAG,EAAE;YACnB,KAAK;YACL,SAAS;SACV,CAAC,CAAC;IACL,CAAC;IAEM,KAAK,CAAC,GAAG,CAAC,GAAW;QAC1B,MAAM,KAAK,GAAG,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;QAEnC,IAAI,CAAC,KAAK,EAAE,CAAC;YACX,OAAO,KAAK,CAAC;QACf,CAAC;QAED,IAAI,IAAI,CAAC,GAAG,EAAE,GAAG,KAAK,CAAC,SAAS,EAAE,CAAC;YACjC,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;YACxB,OAAO,KAAK,CAAC;QACf,CAAC;QAED,OAAO,IAAI,CAAC;IACd,CAAC;IAEM,KAAK,CAAC,MAAM,CAAC,GAAW;QAC7B,OAAO,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;IACjC,CAAC;IAEM,KAAK,CAAC,KAAK;QAChB,IAAI,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC;IACtB,CAAC;CACF;AAvDD,kCAuDC"}