@liendev/core 0.19.5

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 (298) hide show
  1. package/README.md +336 -0
  2. package/dist/config/loader.d.ts +12 -0
  3. package/dist/config/loader.d.ts.map +1 -0
  4. package/dist/config/loader.js +46 -0
  5. package/dist/config/loader.js.map +1 -0
  6. package/dist/config/merge.d.ts +20 -0
  7. package/dist/config/merge.d.ts.map +1 -0
  8. package/dist/config/merge.js +71 -0
  9. package/dist/config/merge.js.map +1 -0
  10. package/dist/config/migration-manager.d.ts +46 -0
  11. package/dist/config/migration-manager.d.ts.map +1 -0
  12. package/dist/config/migration-manager.js +119 -0
  13. package/dist/config/migration-manager.js.map +1 -0
  14. package/dist/config/migration.d.ts +20 -0
  15. package/dist/config/migration.d.ts.map +1 -0
  16. package/dist/config/migration.js +155 -0
  17. package/dist/config/migration.js.map +1 -0
  18. package/dist/config/schema.d.ts +101 -0
  19. package/dist/config/schema.d.ts.map +1 -0
  20. package/dist/config/schema.js +58 -0
  21. package/dist/config/schema.js.map +1 -0
  22. package/dist/config/service.d.ts +122 -0
  23. package/dist/config/service.d.ts.map +1 -0
  24. package/dist/config/service.js +477 -0
  25. package/dist/config/service.js.map +1 -0
  26. package/dist/constants.d.ts +20 -0
  27. package/dist/constants.d.ts.map +1 -0
  28. package/dist/constants.js +43 -0
  29. package/dist/constants.js.map +1 -0
  30. package/dist/embeddings/cache.d.ts +45 -0
  31. package/dist/embeddings/cache.d.ts.map +1 -0
  32. package/dist/embeddings/cache.js +109 -0
  33. package/dist/embeddings/cache.js.map +1 -0
  34. package/dist/embeddings/local.d.ts +10 -0
  35. package/dist/embeddings/local.d.ts.map +1 -0
  36. package/dist/embeddings/local.js +63 -0
  37. package/dist/embeddings/local.js.map +1 -0
  38. package/dist/embeddings/types.d.ts +9 -0
  39. package/dist/embeddings/types.d.ts.map +1 -0
  40. package/dist/embeddings/types.js +5 -0
  41. package/dist/embeddings/types.js.map +1 -0
  42. package/dist/errors/codes.d.ts +18 -0
  43. package/dist/errors/codes.d.ts.map +1 -0
  44. package/dist/errors/codes.js +25 -0
  45. package/dist/errors/codes.js.map +1 -0
  46. package/dist/errors/index.d.ts +85 -0
  47. package/dist/errors/index.d.ts.map +1 -0
  48. package/dist/errors/index.js +134 -0
  49. package/dist/errors/index.js.map +1 -0
  50. package/dist/frameworks/detector-service.d.ts +59 -0
  51. package/dist/frameworks/detector-service.d.ts.map +1 -0
  52. package/dist/frameworks/detector-service.js +219 -0
  53. package/dist/frameworks/detector-service.js.map +1 -0
  54. package/dist/frameworks/laravel/config.d.ts +6 -0
  55. package/dist/frameworks/laravel/config.d.ts.map +1 -0
  56. package/dist/frameworks/laravel/config.js +68 -0
  57. package/dist/frameworks/laravel/config.js.map +1 -0
  58. package/dist/frameworks/laravel/detector.d.ts +6 -0
  59. package/dist/frameworks/laravel/detector.d.ts.map +1 -0
  60. package/dist/frameworks/laravel/detector.js +96 -0
  61. package/dist/frameworks/laravel/detector.js.map +1 -0
  62. package/dist/frameworks/nodejs/config.d.ts +6 -0
  63. package/dist/frameworks/nodejs/config.d.ts.map +1 -0
  64. package/dist/frameworks/nodejs/config.js +57 -0
  65. package/dist/frameworks/nodejs/config.js.map +1 -0
  66. package/dist/frameworks/nodejs/detector.d.ts +6 -0
  67. package/dist/frameworks/nodejs/detector.d.ts.map +1 -0
  68. package/dist/frameworks/nodejs/detector.js +77 -0
  69. package/dist/frameworks/nodejs/detector.js.map +1 -0
  70. package/dist/frameworks/php/config.d.ts +6 -0
  71. package/dist/frameworks/php/config.d.ts.map +1 -0
  72. package/dist/frameworks/php/config.js +53 -0
  73. package/dist/frameworks/php/config.js.map +1 -0
  74. package/dist/frameworks/php/detector.d.ts +7 -0
  75. package/dist/frameworks/php/detector.d.ts.map +1 -0
  76. package/dist/frameworks/php/detector.js +101 -0
  77. package/dist/frameworks/php/detector.js.map +1 -0
  78. package/dist/frameworks/registry.d.ts +20 -0
  79. package/dist/frameworks/registry.d.ts.map +1 -0
  80. package/dist/frameworks/registry.js +38 -0
  81. package/dist/frameworks/registry.js.map +1 -0
  82. package/dist/frameworks/shopify/config.d.ts +6 -0
  83. package/dist/frameworks/shopify/config.d.ts.map +1 -0
  84. package/dist/frameworks/shopify/config.js +50 -0
  85. package/dist/frameworks/shopify/config.js.map +1 -0
  86. package/dist/frameworks/shopify/detector.d.ts +6 -0
  87. package/dist/frameworks/shopify/detector.d.ts.map +1 -0
  88. package/dist/frameworks/shopify/detector.js +103 -0
  89. package/dist/frameworks/shopify/detector.js.map +1 -0
  90. package/dist/frameworks/types.d.ts +51 -0
  91. package/dist/frameworks/types.d.ts.map +1 -0
  92. package/dist/frameworks/types.js +21 -0
  93. package/dist/frameworks/types.js.map +1 -0
  94. package/dist/git/tracker.d.ts +56 -0
  95. package/dist/git/tracker.d.ts.map +1 -0
  96. package/dist/git/tracker.js +189 -0
  97. package/dist/git/tracker.js.map +1 -0
  98. package/dist/git/utils.d.ts +60 -0
  99. package/dist/git/utils.d.ts.map +1 -0
  100. package/dist/git/utils.js +152 -0
  101. package/dist/git/utils.js.map +1 -0
  102. package/dist/index.d.ts +77 -0
  103. package/dist/index.d.ts.map +1 -0
  104. package/dist/index.js +95 -0
  105. package/dist/index.js.map +1 -0
  106. package/dist/indexer/ast/chunker.d.ts +28 -0
  107. package/dist/indexer/ast/chunker.d.ts.map +1 -0
  108. package/dist/indexer/ast/chunker.js +268 -0
  109. package/dist/indexer/ast/chunker.js.map +1 -0
  110. package/dist/indexer/ast/complexity/cognitive.d.ts +16 -0
  111. package/dist/indexer/ast/complexity/cognitive.d.ts.map +1 -0
  112. package/dist/indexer/ast/complexity/cognitive.js +106 -0
  113. package/dist/indexer/ast/complexity/cognitive.js.map +1 -0
  114. package/dist/indexer/ast/complexity/cyclomatic.d.ts +12 -0
  115. package/dist/indexer/ast/complexity/cyclomatic.d.ts.map +1 -0
  116. package/dist/indexer/ast/complexity/cyclomatic.js +61 -0
  117. package/dist/indexer/ast/complexity/cyclomatic.js.map +1 -0
  118. package/dist/indexer/ast/complexity/halstead.d.ts +55 -0
  119. package/dist/indexer/ast/complexity/halstead.d.ts.map +1 -0
  120. package/dist/indexer/ast/complexity/halstead.js +290 -0
  121. package/dist/indexer/ast/complexity/halstead.js.map +1 -0
  122. package/dist/indexer/ast/complexity/index.d.ts +13 -0
  123. package/dist/indexer/ast/complexity/index.d.ts.map +1 -0
  124. package/dist/indexer/ast/complexity/index.js +12 -0
  125. package/dist/indexer/ast/complexity/index.js.map +1 -0
  126. package/dist/indexer/ast/parser.d.ts +27 -0
  127. package/dist/indexer/ast/parser.d.ts.map +1 -0
  128. package/dist/indexer/ast/parser.js +103 -0
  129. package/dist/indexer/ast/parser.js.map +1 -0
  130. package/dist/indexer/ast/symbols.d.ts +17 -0
  131. package/dist/indexer/ast/symbols.d.ts.map +1 -0
  132. package/dist/indexer/ast/symbols.js +265 -0
  133. package/dist/indexer/ast/symbols.js.map +1 -0
  134. package/dist/indexer/ast/traversers/index.d.ts +19 -0
  135. package/dist/indexer/ast/traversers/index.d.ts.map +1 -0
  136. package/dist/indexer/ast/traversers/index.js +42 -0
  137. package/dist/indexer/ast/traversers/index.js.map +1 -0
  138. package/dist/indexer/ast/traversers/php.d.ts +21 -0
  139. package/dist/indexer/ast/traversers/php.d.ts.map +1 -0
  140. package/dist/indexer/ast/traversers/php.js +67 -0
  141. package/dist/indexer/ast/traversers/php.js.map +1 -0
  142. package/dist/indexer/ast/traversers/python.d.ts +28 -0
  143. package/dist/indexer/ast/traversers/python.d.ts.map +1 -0
  144. package/dist/indexer/ast/traversers/python.js +67 -0
  145. package/dist/indexer/ast/traversers/python.js.map +1 -0
  146. package/dist/indexer/ast/traversers/types.d.ts +98 -0
  147. package/dist/indexer/ast/traversers/types.d.ts.map +1 -0
  148. package/dist/indexer/ast/traversers/types.js +2 -0
  149. package/dist/indexer/ast/traversers/types.js.map +1 -0
  150. package/dist/indexer/ast/traversers/typescript.d.ts +29 -0
  151. package/dist/indexer/ast/traversers/typescript.d.ts.map +1 -0
  152. package/dist/indexer/ast/traversers/typescript.js +88 -0
  153. package/dist/indexer/ast/traversers/typescript.js.map +1 -0
  154. package/dist/indexer/ast/types.d.ts +59 -0
  155. package/dist/indexer/ast/types.d.ts.map +1 -0
  156. package/dist/indexer/ast/types.js +2 -0
  157. package/dist/indexer/ast/types.js.map +1 -0
  158. package/dist/indexer/change-detector.d.ts +17 -0
  159. package/dist/indexer/change-detector.d.ts.map +1 -0
  160. package/dist/indexer/change-detector.js +207 -0
  161. package/dist/indexer/change-detector.js.map +1 -0
  162. package/dist/indexer/chunk-batch-processor.d.ts +103 -0
  163. package/dist/indexer/chunk-batch-processor.d.ts.map +1 -0
  164. package/dist/indexer/chunk-batch-processor.js +179 -0
  165. package/dist/indexer/chunk-batch-processor.js.map +1 -0
  166. package/dist/indexer/chunker.d.ts +10 -0
  167. package/dist/indexer/chunker.d.ts.map +1 -0
  168. package/dist/indexer/chunker.js +96 -0
  169. package/dist/indexer/chunker.js.map +1 -0
  170. package/dist/indexer/dependency-analyzer.d.ts +60 -0
  171. package/dist/indexer/dependency-analyzer.d.ts.map +1 -0
  172. package/dist/indexer/dependency-analyzer.js +261 -0
  173. package/dist/indexer/dependency-analyzer.js.map +1 -0
  174. package/dist/indexer/incremental.d.ts +47 -0
  175. package/dist/indexer/incremental.d.ts.map +1 -0
  176. package/dist/indexer/incremental.js +284 -0
  177. package/dist/indexer/incremental.js.map +1 -0
  178. package/dist/indexer/index.d.ts +80 -0
  179. package/dist/indexer/index.d.ts.map +1 -0
  180. package/dist/indexer/index.js +364 -0
  181. package/dist/indexer/index.js.map +1 -0
  182. package/dist/indexer/json-template-chunker.d.ts +9 -0
  183. package/dist/indexer/json-template-chunker.d.ts.map +1 -0
  184. package/dist/indexer/json-template-chunker.js +83 -0
  185. package/dist/indexer/json-template-chunker.js.map +1 -0
  186. package/dist/indexer/liquid-chunker.d.ts +13 -0
  187. package/dist/indexer/liquid-chunker.d.ts.map +1 -0
  188. package/dist/indexer/liquid-chunker.js +272 -0
  189. package/dist/indexer/liquid-chunker.js.map +1 -0
  190. package/dist/indexer/manifest.d.ts +122 -0
  191. package/dist/indexer/manifest.d.ts.map +1 -0
  192. package/dist/indexer/manifest.js +262 -0
  193. package/dist/indexer/manifest.js.map +1 -0
  194. package/dist/indexer/progress-tracker.d.ts +35 -0
  195. package/dist/indexer/progress-tracker.d.ts.map +1 -0
  196. package/dist/indexer/progress-tracker.js +33 -0
  197. package/dist/indexer/progress-tracker.js.map +1 -0
  198. package/dist/indexer/scanner.d.ts +16 -0
  199. package/dist/indexer/scanner.d.ts.map +1 -0
  200. package/dist/indexer/scanner.js +159 -0
  201. package/dist/indexer/scanner.js.map +1 -0
  202. package/dist/indexer/symbol-extractor.d.ts +18 -0
  203. package/dist/indexer/symbol-extractor.d.ts.map +1 -0
  204. package/dist/indexer/symbol-extractor.js +351 -0
  205. package/dist/indexer/symbol-extractor.js.map +1 -0
  206. package/dist/indexer/types.d.ts +34 -0
  207. package/dist/indexer/types.d.ts.map +1 -0
  208. package/dist/indexer/types.js +2 -0
  209. package/dist/indexer/types.js.map +1 -0
  210. package/dist/insights/complexity-analyzer.d.ts +82 -0
  211. package/dist/insights/complexity-analyzer.d.ts.map +1 -0
  212. package/dist/insights/complexity-analyzer.js +356 -0
  213. package/dist/insights/complexity-analyzer.js.map +1 -0
  214. package/dist/insights/formatters/index.d.ts +11 -0
  215. package/dist/insights/formatters/index.d.ts.map +1 -0
  216. package/dist/insights/formatters/index.js +20 -0
  217. package/dist/insights/formatters/index.js.map +1 -0
  218. package/dist/insights/formatters/json.d.ts +7 -0
  219. package/dist/insights/formatters/json.d.ts.map +1 -0
  220. package/dist/insights/formatters/json.js +14 -0
  221. package/dist/insights/formatters/json.js.map +1 -0
  222. package/dist/insights/formatters/sarif.d.ts +6 -0
  223. package/dist/insights/formatters/sarif.d.ts.map +1 -0
  224. package/dist/insights/formatters/sarif.js +113 -0
  225. package/dist/insights/formatters/sarif.js.map +1 -0
  226. package/dist/insights/formatters/text.d.ts +6 -0
  227. package/dist/insights/formatters/text.d.ts.map +1 -0
  228. package/dist/insights/formatters/text.js +154 -0
  229. package/dist/insights/formatters/text.js.map +1 -0
  230. package/dist/insights/types.d.ts +73 -0
  231. package/dist/insights/types.d.ts.map +1 -0
  232. package/dist/insights/types.js +9 -0
  233. package/dist/insights/types.js.map +1 -0
  234. package/dist/types/index.d.ts +14 -0
  235. package/dist/types/index.d.ts.map +1 -0
  236. package/dist/types/index.js +8 -0
  237. package/dist/types/index.js.map +1 -0
  238. package/dist/utils/path-matching.d.ts +69 -0
  239. package/dist/utils/path-matching.d.ts.map +1 -0
  240. package/dist/utils/path-matching.js +123 -0
  241. package/dist/utils/path-matching.js.map +1 -0
  242. package/dist/utils/result.d.ts +65 -0
  243. package/dist/utils/result.d.ts.map +1 -0
  244. package/dist/utils/result.js +67 -0
  245. package/dist/utils/result.js.map +1 -0
  246. package/dist/utils/version.d.ts +22 -0
  247. package/dist/utils/version.d.ts.map +1 -0
  248. package/dist/utils/version.js +28 -0
  249. package/dist/utils/version.js.map +1 -0
  250. package/dist/vectordb/batch-insert.d.ts +14 -0
  251. package/dist/vectordb/batch-insert.d.ts.map +1 -0
  252. package/dist/vectordb/batch-insert.js +185 -0
  253. package/dist/vectordb/batch-insert.js.map +1 -0
  254. package/dist/vectordb/boosting/composer.d.ts +51 -0
  255. package/dist/vectordb/boosting/composer.d.ts.map +1 -0
  256. package/dist/vectordb/boosting/composer.js +65 -0
  257. package/dist/vectordb/boosting/composer.js.map +1 -0
  258. package/dist/vectordb/boosting/index.d.ts +22 -0
  259. package/dist/vectordb/boosting/index.d.ts.map +1 -0
  260. package/dist/vectordb/boosting/index.js +22 -0
  261. package/dist/vectordb/boosting/index.js.map +1 -0
  262. package/dist/vectordb/boosting/strategies.d.ts +40 -0
  263. package/dist/vectordb/boosting/strategies.d.ts.map +1 -0
  264. package/dist/vectordb/boosting/strategies.js +174 -0
  265. package/dist/vectordb/boosting/strategies.js.map +1 -0
  266. package/dist/vectordb/boosting/types.d.ts +20 -0
  267. package/dist/vectordb/boosting/types.d.ts.map +1 -0
  268. package/dist/vectordb/boosting/types.js +2 -0
  269. package/dist/vectordb/boosting/types.js.map +1 -0
  270. package/dist/vectordb/intent-classifier.d.ts +99 -0
  271. package/dist/vectordb/intent-classifier.d.ts.map +1 -0
  272. package/dist/vectordb/intent-classifier.js +193 -0
  273. package/dist/vectordb/intent-classifier.js.map +1 -0
  274. package/dist/vectordb/lancedb.d.ts +45 -0
  275. package/dist/vectordb/lancedb.d.ts.map +1 -0
  276. package/dist/vectordb/lancedb.js +203 -0
  277. package/dist/vectordb/lancedb.js.map +1 -0
  278. package/dist/vectordb/maintenance.d.ts +18 -0
  279. package/dist/vectordb/maintenance.d.ts.map +1 -0
  280. package/dist/vectordb/maintenance.js +87 -0
  281. package/dist/vectordb/maintenance.js.map +1 -0
  282. package/dist/vectordb/query.d.ts +34 -0
  283. package/dist/vectordb/query.d.ts.map +1 -0
  284. package/dist/vectordb/query.js +303 -0
  285. package/dist/vectordb/query.js.map +1 -0
  286. package/dist/vectordb/relevance.d.ts +15 -0
  287. package/dist/vectordb/relevance.d.ts.map +1 -0
  288. package/dist/vectordb/relevance.js +19 -0
  289. package/dist/vectordb/relevance.js.map +1 -0
  290. package/dist/vectordb/types.d.ts +29 -0
  291. package/dist/vectordb/types.d.ts.map +1 -0
  292. package/dist/vectordb/types.js +2 -0
  293. package/dist/vectordb/types.js.map +1 -0
  294. package/dist/vectordb/version.d.ts +16 -0
  295. package/dist/vectordb/version.d.ts.map +1 -0
  296. package/dist/vectordb/version.js +40 -0
  297. package/dist/vectordb/version.js.map +1 -0
  298. package/package.json +66 -0
@@ -0,0 +1,20 @@
1
+ import { LienConfig, LegacyLienConfig } from './schema.js';
2
+ /**
3
+ * Checks if a config object needs migration from v0.2.0 to v0.3.0
4
+ */
5
+ export declare function needsMigration(config: any): boolean;
6
+ /**
7
+ * Migrates a v0.2.0 config to v0.3.0+ format
8
+ * @param oldConfig - The old config to migrate
9
+ * @param targetVersion - The version to set in the migrated config (defaults to CURRENT_CONFIG_VERSION)
10
+ */
11
+ export declare function migrateConfig(oldConfig: Partial<LegacyLienConfig | LienConfig>, targetVersion?: string): LienConfig;
12
+ /**
13
+ * Migrates config file and creates backup
14
+ */
15
+ export declare function migrateConfigFile(rootDir?: string): Promise<{
16
+ migrated: boolean;
17
+ backupPath?: string;
18
+ config: LienConfig;
19
+ }>;
20
+ //# sourceMappingURL=migration.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"migration.d.ts","sourceRoot":"","sources":["../../src/config/migration.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,UAAU,EAAE,gBAAgB,EAAoC,MAAM,aAAa,CAAC;AAG7F;;GAEG;AACH,wBAAgB,cAAc,CAAC,MAAM,EAAE,GAAG,GAAG,OAAO,CA+BnD;AAED;;;;GAIG;AACH,wBAAgB,aAAa,CAAC,SAAS,EAAE,OAAO,CAAC,gBAAgB,GAAG,UAAU,CAAC,EAAE,aAAa,CAAC,EAAE,MAAM,GAAG,UAAU,CA6EnH;AAED;;GAEG;AACH,wBAAsB,iBAAiB,CAAC,OAAO,GAAE,MAAsB,GAAG,OAAO,CAAC;IAChF,QAAQ,EAAE,OAAO,CAAC;IAClB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,MAAM,EAAE,UAAU,CAAC;CACpB,CAAC,CAyCD"}
@@ -0,0 +1,155 @@
1
+ import fs from 'fs/promises';
2
+ import path from 'path';
3
+ import { defaultConfig } from './schema.js';
4
+ import { CURRENT_CONFIG_VERSION } from '../constants.js';
5
+ /**
6
+ * Checks if a config object needs migration from v0.2.0 to v0.3.0
7
+ */
8
+ export function needsMigration(config) {
9
+ // Check if config uses old structure:
10
+ // - Has 'indexing' field instead of 'core' and 'frameworks'
11
+ // - Or has no 'frameworks' field at all
12
+ // - Or version is explicitly set to something < 0.3.0
13
+ // - Or missing 'chunking' field (v0.13.0)
14
+ if (!config) {
15
+ return false;
16
+ }
17
+ // If missing chunking config, needs migration to v0.13.0
18
+ if (config.frameworks !== undefined && !config.chunking) {
19
+ return true;
20
+ }
21
+ // If it has frameworks array and chunking, it's already in new format
22
+ if (config.frameworks !== undefined && config.chunking !== undefined) {
23
+ return false;
24
+ }
25
+ // If it has 'indexing' field, it's the old format
26
+ if (config.indexing !== undefined) {
27
+ return true;
28
+ }
29
+ // If version is explicitly < 0.3.0
30
+ if (config.version && config.version.startsWith('0.2')) {
31
+ return true;
32
+ }
33
+ return false;
34
+ }
35
+ /**
36
+ * Migrates a v0.2.0 config to v0.3.0+ format
37
+ * @param oldConfig - The old config to migrate
38
+ * @param targetVersion - The version to set in the migrated config (defaults to CURRENT_CONFIG_VERSION)
39
+ */
40
+ export function migrateConfig(oldConfig, targetVersion) {
41
+ // Start with default config structure
42
+ const newConfig = {
43
+ version: targetVersion ?? CURRENT_CONFIG_VERSION,
44
+ core: {
45
+ chunkSize: oldConfig.indexing?.chunkSize ?? oldConfig.core?.chunkSize ?? defaultConfig.core.chunkSize,
46
+ chunkOverlap: oldConfig.indexing?.chunkOverlap ?? oldConfig.core?.chunkOverlap ?? defaultConfig.core.chunkOverlap,
47
+ concurrency: oldConfig.indexing?.concurrency ?? oldConfig.core?.concurrency ?? defaultConfig.core.concurrency,
48
+ embeddingBatchSize: oldConfig.indexing?.embeddingBatchSize ?? oldConfig.core?.embeddingBatchSize ?? defaultConfig.core.embeddingBatchSize,
49
+ },
50
+ chunking: {
51
+ useAST: oldConfig.chunking?.useAST ?? defaultConfig.chunking.useAST,
52
+ astFallback: oldConfig.chunking?.astFallback ?? defaultConfig.chunking.astFallback,
53
+ },
54
+ mcp: {
55
+ port: oldConfig.mcp?.port ?? defaultConfig.mcp.port,
56
+ transport: oldConfig.mcp?.transport ?? defaultConfig.mcp.transport,
57
+ autoIndexOnFirstRun: oldConfig.mcp?.autoIndexOnFirstRun ?? defaultConfig.mcp.autoIndexOnFirstRun,
58
+ },
59
+ gitDetection: {
60
+ enabled: oldConfig.gitDetection?.enabled ?? defaultConfig.gitDetection.enabled,
61
+ pollIntervalMs: oldConfig.gitDetection?.pollIntervalMs ?? defaultConfig.gitDetection.pollIntervalMs,
62
+ },
63
+ fileWatching: {
64
+ enabled: oldConfig.fileWatching?.enabled ?? defaultConfig.fileWatching.enabled,
65
+ debounceMs: oldConfig.fileWatching?.debounceMs ?? defaultConfig.fileWatching.debounceMs,
66
+ },
67
+ frameworks: oldConfig.frameworks ?? [],
68
+ };
69
+ // Convert old indexing config to a single "generic" framework (only for legacy configs)
70
+ if (oldConfig.indexing && newConfig.frameworks.length === 0) {
71
+ const genericFramework = {
72
+ name: 'generic',
73
+ path: '.',
74
+ enabled: true,
75
+ config: {
76
+ include: oldConfig.indexing.include ?? ['**/*.{ts,tsx,js,jsx,py,php,go,rs,java,c,cpp,cs}'],
77
+ exclude: oldConfig.indexing.exclude ?? [
78
+ '**/node_modules/**',
79
+ '**/dist/**',
80
+ '**/build/**',
81
+ '**/.git/**',
82
+ '**/coverage/**',
83
+ '**/.next/**',
84
+ '**/.nuxt/**',
85
+ '**/vendor/**',
86
+ ],
87
+ },
88
+ };
89
+ newConfig.frameworks.push(genericFramework);
90
+ }
91
+ else if (newConfig.frameworks.length === 0) {
92
+ // No indexing config and no frameworks present, use defaults for generic framework
93
+ const genericFramework = {
94
+ name: 'generic',
95
+ path: '.',
96
+ enabled: true,
97
+ config: {
98
+ include: ['**/*.{ts,tsx,js,jsx,py,php,go,rs,java,c,cpp,cs}'],
99
+ exclude: [
100
+ '**/node_modules/**',
101
+ '**/dist/**',
102
+ '**/build/**',
103
+ '**/.git/**',
104
+ '**/coverage/**',
105
+ '**/.next/**',
106
+ '**/.nuxt/**',
107
+ '**/vendor/**',
108
+ ],
109
+ },
110
+ };
111
+ newConfig.frameworks.push(genericFramework);
112
+ }
113
+ return newConfig;
114
+ }
115
+ /**
116
+ * Migrates config file and creates backup
117
+ */
118
+ export async function migrateConfigFile(rootDir = process.cwd()) {
119
+ const configPath = path.join(rootDir, '.lien.config.json');
120
+ try {
121
+ // Read existing config
122
+ const configContent = await fs.readFile(configPath, 'utf-8');
123
+ const oldConfig = JSON.parse(configContent);
124
+ // Check if migration is needed
125
+ if (!needsMigration(oldConfig)) {
126
+ return {
127
+ migrated: false,
128
+ config: oldConfig,
129
+ };
130
+ }
131
+ // Perform migration
132
+ const newConfig = migrateConfig(oldConfig);
133
+ // Create backup
134
+ const backupPath = `${configPath}.v0.2.0.backup`;
135
+ await fs.copyFile(configPath, backupPath);
136
+ // Write migrated config
137
+ await fs.writeFile(configPath, JSON.stringify(newConfig, null, 2) + '\n', 'utf-8');
138
+ return {
139
+ migrated: true,
140
+ backupPath,
141
+ config: newConfig,
142
+ };
143
+ }
144
+ catch (error) {
145
+ // If config doesn't exist, return default
146
+ if (error.code === 'ENOENT') {
147
+ return {
148
+ migrated: false,
149
+ config: defaultConfig,
150
+ };
151
+ }
152
+ throw error;
153
+ }
154
+ }
155
+ //# sourceMappingURL=migration.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"migration.js","sourceRoot":"","sources":["../../src/config/migration.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,101 @@
1
+ /**
2
+ * Framework-specific configuration
3
+ */
4
+ export interface FrameworkConfig {
5
+ include: string[];
6
+ exclude: string[];
7
+ }
8
+ /**
9
+ * Framework instance in a monorepo
10
+ */
11
+ export interface FrameworkInstance {
12
+ name: string;
13
+ path: string;
14
+ enabled: boolean;
15
+ config: FrameworkConfig;
16
+ }
17
+ /**
18
+ * Main Lien configuration supporting monorepo setups
19
+ */
20
+ export interface LienConfig {
21
+ version: string;
22
+ core: {
23
+ chunkSize: number;
24
+ chunkOverlap: number;
25
+ concurrency: number;
26
+ embeddingBatchSize: number;
27
+ };
28
+ chunking: {
29
+ useAST: boolean;
30
+ astFallback: 'line-based' | 'error';
31
+ };
32
+ mcp: {
33
+ port: number;
34
+ transport: 'stdio' | 'socket';
35
+ autoIndexOnFirstRun: boolean;
36
+ };
37
+ gitDetection: {
38
+ enabled: boolean;
39
+ pollIntervalMs: number;
40
+ };
41
+ fileWatching: {
42
+ enabled: boolean;
43
+ debounceMs: number;
44
+ };
45
+ complexity?: {
46
+ enabled: boolean;
47
+ thresholds: {
48
+ testPaths: number;
49
+ mentalLoad: number;
50
+ timeToUnderstandMinutes?: number;
51
+ estimatedBugs?: number;
52
+ };
53
+ };
54
+ frameworks: FrameworkInstance[];
55
+ }
56
+ /**
57
+ * Legacy config format for backwards compatibility
58
+ * @deprecated Use LienConfig with frameworks array instead
59
+ */
60
+ export interface LegacyLienConfig {
61
+ version: string;
62
+ indexing: {
63
+ exclude: string[];
64
+ include: string[];
65
+ chunkSize: number;
66
+ chunkOverlap: number;
67
+ concurrency: number;
68
+ embeddingBatchSize: number;
69
+ };
70
+ mcp: {
71
+ port: number;
72
+ transport: 'stdio' | 'socket';
73
+ autoIndexOnFirstRun: boolean;
74
+ };
75
+ gitDetection: {
76
+ enabled: boolean;
77
+ pollIntervalMs: number;
78
+ };
79
+ fileWatching: {
80
+ enabled: boolean;
81
+ debounceMs: number;
82
+ };
83
+ }
84
+ /**
85
+ * Type guard to check if a config is the legacy format
86
+ * @param config - Config object to check
87
+ * @returns True if config is LegacyLienConfig
88
+ */
89
+ export declare function isLegacyConfig(config: LienConfig | LegacyLienConfig): config is LegacyLienConfig;
90
+ /**
91
+ * Type guard to check if a config is the modern format
92
+ * @param config - Config object to check
93
+ * @returns True if config is LienConfig
94
+ */
95
+ export declare function isModernConfig(config: LienConfig | LegacyLienConfig): config is LienConfig;
96
+ /**
97
+ * Default configuration with empty frameworks array
98
+ * Frameworks should be detected and added via lien init
99
+ */
100
+ export declare const defaultConfig: LienConfig;
101
+ //# sourceMappingURL=schema.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"schema.d.ts","sourceRoot":"","sources":["../../src/config/schema.ts"],"names":[],"mappings":"AAWA;;GAEG;AACH,MAAM,WAAW,eAAe;IAC9B,OAAO,EAAE,MAAM,EAAE,CAAC;IAClB,OAAO,EAAE,MAAM,EAAE,CAAC;CACnB;AAED;;GAEG;AACH,MAAM,WAAW,iBAAiB;IAChC,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,OAAO,CAAC;IACjB,MAAM,EAAE,eAAe,CAAC;CACzB;AAED;;GAEG;AACH,MAAM,WAAW,UAAU;IACzB,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,EAAE;QACJ,SAAS,EAAE,MAAM,CAAC;QAClB,YAAY,EAAE,MAAM,CAAC;QACrB,WAAW,EAAE,MAAM,CAAC;QACpB,kBAAkB,EAAE,MAAM,CAAC;KAC5B,CAAC;IACF,QAAQ,EAAE;QACR,MAAM,EAAE,OAAO,CAAC;QAChB,WAAW,EAAE,YAAY,GAAG,OAAO,CAAC;KACrC,CAAC;IACF,GAAG,EAAE;QACH,IAAI,EAAE,MAAM,CAAC;QACb,SAAS,EAAE,OAAO,GAAG,QAAQ,CAAC;QAC9B,mBAAmB,EAAE,OAAO,CAAC;KAC9B,CAAC;IACF,YAAY,EAAE;QACZ,OAAO,EAAE,OAAO,CAAC;QACjB,cAAc,EAAE,MAAM,CAAC;KACxB,CAAC;IACF,YAAY,EAAE;QACZ,OAAO,EAAE,OAAO,CAAC;QACjB,UAAU,EAAE,MAAM,CAAC;KACpB,CAAC;IACF,UAAU,CAAC,EAAE;QACX,OAAO,EAAE,OAAO,CAAC;QACjB,UAAU,EAAE;YACV,SAAS,EAAE,MAAM,CAAC;YAClB,UAAU,EAAE,MAAM,CAAC;YACnB,uBAAuB,CAAC,EAAE,MAAM,CAAC;YACjC,aAAa,CAAC,EAAE,MAAM,CAAC;SACxB,CAAC;KAEH,CAAC;IACF,UAAU,EAAE,iBAAiB,EAAE,CAAC;CACjC;AAED;;;GAGG;AACH,MAAM,WAAW,gBAAgB;IAC/B,OAAO,EAAE,MAAM,CAAC;IAChB,QAAQ,EAAE;QACR,OAAO,EAAE,MAAM,EAAE,CAAC;QAClB,OAAO,EAAE,MAAM,EAAE,CAAC;QAClB,SAAS,EAAE,MAAM,CAAC;QAClB,YAAY,EAAE,MAAM,CAAC;QACrB,WAAW,EAAE,MAAM,CAAC;QACpB,kBAAkB,EAAE,MAAM,CAAC;KAC5B,CAAC;IACF,GAAG,EAAE;QACH,IAAI,EAAE,MAAM,CAAC;QACb,SAAS,EAAE,OAAO,GAAG,QAAQ,CAAC;QAC9B,mBAAmB,EAAE,OAAO,CAAC;KAC9B,CAAC;IACF,YAAY,EAAE;QACZ,OAAO,EAAE,OAAO,CAAC;QACjB,cAAc,EAAE,MAAM,CAAC;KACxB,CAAC;IACF,YAAY,EAAE;QACZ,OAAO,EAAE,OAAO,CAAC;QACjB,UAAU,EAAE,MAAM,CAAC;KACpB,CAAC;CACH;AAED;;;;GAIG;AACH,wBAAgB,cAAc,CAC5B,MAAM,EAAE,UAAU,GAAG,gBAAgB,GACpC,MAAM,IAAI,gBAAgB,CAE5B;AAED;;;;GAIG;AACH,wBAAgB,cAAc,CAC5B,MAAM,EAAE,UAAU,GAAG,gBAAgB,GACpC,MAAM,IAAI,UAAU,CAEtB;AAED;;;GAGG;AACH,eAAO,MAAM,aAAa,EAAE,UAmC3B,CAAC"}
@@ -0,0 +1,58 @@
1
+ import { DEFAULT_CHUNK_SIZE, DEFAULT_CHUNK_OVERLAP, DEFAULT_CONCURRENCY, DEFAULT_EMBEDDING_BATCH_SIZE, DEFAULT_PORT, DEFAULT_GIT_POLL_INTERVAL_MS, DEFAULT_DEBOUNCE_MS, CURRENT_CONFIG_VERSION, } from '../constants.js';
2
+ /**
3
+ * Type guard to check if a config is the legacy format
4
+ * @param config - Config object to check
5
+ * @returns True if config is LegacyLienConfig
6
+ */
7
+ export function isLegacyConfig(config) {
8
+ return 'indexing' in config && !('frameworks' in config);
9
+ }
10
+ /**
11
+ * Type guard to check if a config is the modern format
12
+ * @param config - Config object to check
13
+ * @returns True if config is LienConfig
14
+ */
15
+ export function isModernConfig(config) {
16
+ return 'frameworks' in config;
17
+ }
18
+ /**
19
+ * Default configuration with empty frameworks array
20
+ * Frameworks should be detected and added via lien init
21
+ */
22
+ export const defaultConfig = {
23
+ version: CURRENT_CONFIG_VERSION,
24
+ core: {
25
+ chunkSize: DEFAULT_CHUNK_SIZE,
26
+ chunkOverlap: DEFAULT_CHUNK_OVERLAP,
27
+ concurrency: DEFAULT_CONCURRENCY,
28
+ embeddingBatchSize: DEFAULT_EMBEDDING_BATCH_SIZE,
29
+ },
30
+ chunking: {
31
+ useAST: true, // AST-based chunking enabled by default (v0.13.0)
32
+ astFallback: 'line-based', // Fallback to line-based on errors
33
+ },
34
+ mcp: {
35
+ port: DEFAULT_PORT,
36
+ transport: 'stdio',
37
+ autoIndexOnFirstRun: true,
38
+ },
39
+ gitDetection: {
40
+ enabled: true,
41
+ pollIntervalMs: DEFAULT_GIT_POLL_INTERVAL_MS,
42
+ },
43
+ fileWatching: {
44
+ enabled: true, // Enabled by default (fast with incremental indexing!)
45
+ debounceMs: DEFAULT_DEBOUNCE_MS,
46
+ },
47
+ complexity: {
48
+ enabled: true,
49
+ thresholds: {
50
+ testPaths: 15, // 🔀 Max test paths per function
51
+ mentalLoad: 15, // 🧠 Max mental load score
52
+ timeToUnderstandMinutes: 60, // ⏱️ Functions taking >1 hour to understand
53
+ estimatedBugs: 1.5, // 🐛 Functions estimated to have >1.5 bugs
54
+ },
55
+ },
56
+ frameworks: [], // Will be populated by lien init via framework detection
57
+ };
58
+ //# sourceMappingURL=schema.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"schema.js","sourceRoot":"","sources":["../../src/config/schema.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,kBAAkB,EAClB,qBAAqB,EACrB,mBAAmB,EACnB,4BAA4B,EAC5B,YAAY,EACZ,4BAA4B,EAC5B,mBAAmB,EACnB,sBAAsB,GACvB,MAAM,iBAAiB,CAAC;AA0FzB;;;;GAIG;AACH,MAAM,UAAU,cAAc,CAC5B,MAAqC;IAErC,OAAO,UAAU,IAAI,MAAM,IAAI,CAAC,CAAC,YAAY,IAAI,MAAM,CAAC,CAAC;AAC3D,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,cAAc,CAC5B,MAAqC;IAErC,OAAO,YAAY,IAAI,MAAM,CAAC;AAChC,CAAC;AAED;;;GAGG;AACH,MAAM,CAAC,MAAM,aAAa,GAAe;IACvC,OAAO,EAAE,sBAAsB;IAC/B,IAAI,EAAE;QACJ,SAAS,EAAE,kBAAkB;QAC7B,YAAY,EAAE,qBAAqB;QACnC,WAAW,EAAE,mBAAmB;QAChC,kBAAkB,EAAE,4BAA4B;KACjD;IACD,QAAQ,EAAE;QACR,MAAM,EAAE,IAAI,EAAe,kDAAkD;QAC7E,WAAW,EAAE,YAAY,EAAE,mCAAmC;KAC/D;IACD,GAAG,EAAE;QACH,IAAI,EAAE,YAAY;QAClB,SAAS,EAAE,OAAO;QAClB,mBAAmB,EAAE,IAAI;KAC1B;IACD,YAAY,EAAE;QACZ,OAAO,EAAE,IAAI;QACb,cAAc,EAAE,4BAA4B;KAC7C;IACD,YAAY,EAAE;QACZ,OAAO,EAAE,IAAI,EAAE,uDAAuD;QACtE,UAAU,EAAE,mBAAmB;KAChC;IACD,UAAU,EAAE;QACV,OAAO,EAAE,IAAI;QACb,UAAU,EAAE;YACV,SAAS,EAAE,EAAE,EAAa,iCAAiC;YAC3D,UAAU,EAAE,EAAE,EAAY,2BAA2B;YACrD,uBAAuB,EAAE,EAAE,EAAG,4CAA4C;YAC1E,aAAa,EAAE,GAAG,EAAY,2CAA2C;SAC1E;KACF;IACD,UAAU,EAAE,EAAE,EAAE,yDAAyD;CAC1E,CAAC"}
@@ -0,0 +1,122 @@
1
+ import { LienConfig } from './schema.js';
2
+ /**
3
+ * Validation result with errors and warnings
4
+ */
5
+ export interface ValidationResult {
6
+ valid: boolean;
7
+ errors: string[];
8
+ warnings: string[];
9
+ }
10
+ /**
11
+ * Migration result with status and config
12
+ */
13
+ export interface MigrationResult {
14
+ migrated: boolean;
15
+ backupPath?: string;
16
+ config: LienConfig;
17
+ }
18
+ /**
19
+ * ConfigService encapsulates all configuration operations including
20
+ * loading, saving, migration, and validation.
21
+ *
22
+ * This service provides a single point of truth for config management
23
+ * with comprehensive error handling and validation.
24
+ */
25
+ export declare class ConfigService {
26
+ private static readonly CONFIG_FILENAME;
27
+ /**
28
+ * Load configuration from the specified directory.
29
+ * Automatically handles migration if needed.
30
+ *
31
+ * @param rootDir - Root directory containing the config file
32
+ * @returns Loaded and validated configuration
33
+ * @throws {ConfigError} If config is invalid or cannot be loaded
34
+ */
35
+ load(rootDir?: string): Promise<LienConfig>;
36
+ /**
37
+ * Save configuration to the specified directory.
38
+ * Validates the config before saving.
39
+ *
40
+ * @param rootDir - Root directory to save the config file
41
+ * @param config - Configuration to save
42
+ * @throws {ConfigError} If config is invalid or cannot be saved
43
+ */
44
+ save(rootDir: string, config: LienConfig): Promise<void>;
45
+ /**
46
+ * Check if a configuration file exists in the specified directory.
47
+ *
48
+ * @param rootDir - Root directory to check
49
+ * @returns True if config file exists
50
+ */
51
+ exists(rootDir?: string): Promise<boolean>;
52
+ /**
53
+ * Migrate configuration from v0.2.0 to v0.3.0 format.
54
+ * Creates a backup of the original config file.
55
+ *
56
+ * @param rootDir - Root directory containing the config file
57
+ * @returns Migration result with status and new config
58
+ * @throws {ConfigError} If migration fails
59
+ */
60
+ migrate(rootDir?: string): Promise<MigrationResult>;
61
+ /**
62
+ * Check if a config object needs migration from v0.2.0 to v0.3.0.
63
+ *
64
+ * @param config - Config object to check
65
+ * @returns True if migration is needed
66
+ */
67
+ needsMigration(config: unknown): boolean;
68
+ /**
69
+ * Validate a configuration object.
70
+ * Checks all constraints and returns detailed validation results.
71
+ *
72
+ * @param config - Configuration to validate
73
+ * @returns Validation result with errors and warnings
74
+ */
75
+ validate(config: unknown): ValidationResult;
76
+ /**
77
+ * Validate a partial configuration object.
78
+ * Useful for validating user input before merging with defaults.
79
+ *
80
+ * @param config - Partial configuration to validate
81
+ * @returns Validation result with errors and warnings
82
+ */
83
+ validatePartial(config: Partial<LienConfig>): ValidationResult;
84
+ /**
85
+ * Get the full path to the config file
86
+ */
87
+ private getConfigPath;
88
+ /**
89
+ * Validate modern (v0.3.0+) configuration
90
+ */
91
+ private validateModernConfig;
92
+ /**
93
+ * Validate legacy (v0.2.0) configuration
94
+ */
95
+ private validateLegacyConfig;
96
+ /**
97
+ * Validate core configuration settings
98
+ */
99
+ private validateCoreConfig;
100
+ /**
101
+ * Validate MCP configuration settings
102
+ */
103
+ private validateMCPConfig;
104
+ /**
105
+ * Validate git detection configuration settings
106
+ */
107
+ private validateGitDetectionConfig;
108
+ /**
109
+ * Validate file watching configuration settings
110
+ */
111
+ private validateFileWatchingConfig;
112
+ /**
113
+ * Validate frameworks configuration
114
+ */
115
+ private validateFrameworks;
116
+ /**
117
+ * Validate framework-specific configuration
118
+ */
119
+ private validateFrameworkConfig;
120
+ }
121
+ export declare const configService: ConfigService;
122
+ //# sourceMappingURL=service.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"service.d.ts","sourceRoot":"","sources":["../../src/config/service.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,UAAU,EAAmE,MAAM,aAAa,CAAC;AAK1G;;GAEG;AACH,MAAM,WAAW,gBAAgB;IAC/B,KAAK,EAAE,OAAO,CAAC;IACf,MAAM,EAAE,MAAM,EAAE,CAAC;IACjB,QAAQ,EAAE,MAAM,EAAE,CAAC;CACpB;AAED;;GAEG;AACH,MAAM,WAAW,eAAe;IAC9B,QAAQ,EAAE,OAAO,CAAC;IAClB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,MAAM,EAAE,UAAU,CAAC;CACpB;AAED;;;;;;GAMG;AACH,qBAAa,aAAa;IACxB,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,eAAe,CAAuB;IAE9D;;;;;;;OAOG;IACG,IAAI,CAAC,OAAO,GAAE,MAAsB,GAAG,OAAO,CAAC,UAAU,CAAC;IA8DhE;;;;;;;OAOG;IACG,IAAI,CAAC,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,UAAU,GAAG,OAAO,CAAC,IAAI,CAAC;IAoB9D;;;;;OAKG;IACG,MAAM,CAAC,OAAO,GAAE,MAAsB,GAAG,OAAO,CAAC,OAAO,CAAC;IAU/D;;;;;;;OAOG;IACG,OAAO,CAAC,OAAO,GAAE,MAAsB,GAAG,OAAO,CAAC,eAAe,CAAC;IAwDxE;;;;;OAKG;IACH,cAAc,CAAC,MAAM,EAAE,OAAO,GAAG,OAAO;IAIxC;;;;;;OAMG;IACH,QAAQ,CAAC,MAAM,EAAE,OAAO,GAAG,gBAAgB;IAoC3C;;;;;;OAMG;IACH,eAAe,CAAC,MAAM,EAAE,OAAO,CAAC,UAAU,CAAC,GAAG,gBAAgB;IAoC9D;;OAEG;IACH,OAAO,CAAC,aAAa;IAIrB;;OAEG;IACH,OAAO,CAAC,oBAAoB;IAyC5B;;OAEG;IACH,OAAO,CAAC,oBAAoB;IAqC5B;;OAEG;IACH,OAAO,CAAC,kBAAkB;IAoC1B;;OAEG;IACH,OAAO,CAAC,iBAAiB;IAwBzB;;OAEG;IACH,OAAO,CAAC,0BAA0B;IAoBlC;;OAEG;IACH,OAAO,CAAC,0BAA0B;IAoBlC;;OAEG;IACH,OAAO,CAAC,kBAAkB;IA6C1B;;OAEG;IACH,OAAO,CAAC,uBAAuB;CAiChC;AAGD,eAAO,MAAM,aAAa,eAAsB,CAAC"}