@code-rag/core 0.1.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 (347) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +19 -0
  3. package/dist/auth/audit-log.d.ts +35 -0
  4. package/dist/auth/audit-log.js +110 -0
  5. package/dist/auth/audit-log.js.map +1 -0
  6. package/dist/auth/audit-log.test.d.ts +1 -0
  7. package/dist/auth/audit-log.test.js +261 -0
  8. package/dist/auth/audit-log.test.js.map +1 -0
  9. package/dist/auth/index.d.ts +6 -0
  10. package/dist/auth/index.js +5 -0
  11. package/dist/auth/index.js.map +1 -0
  12. package/dist/auth/oidc-provider.d.ts +49 -0
  13. package/dist/auth/oidc-provider.js +358 -0
  14. package/dist/auth/oidc-provider.js.map +1 -0
  15. package/dist/auth/oidc-provider.test.d.ts +1 -0
  16. package/dist/auth/oidc-provider.test.js +520 -0
  17. package/dist/auth/oidc-provider.test.js.map +1 -0
  18. package/dist/auth/rbac.d.ts +29 -0
  19. package/dist/auth/rbac.js +75 -0
  20. package/dist/auth/rbac.js.map +1 -0
  21. package/dist/auth/rbac.test.d.ts +1 -0
  22. package/dist/auth/rbac.test.js +224 -0
  23. package/dist/auth/rbac.test.js.map +1 -0
  24. package/dist/auth/saml-provider.d.ts +51 -0
  25. package/dist/auth/saml-provider.js +355 -0
  26. package/dist/auth/saml-provider.js.map +1 -0
  27. package/dist/auth/saml-provider.test.d.ts +1 -0
  28. package/dist/auth/saml-provider.test.js +422 -0
  29. package/dist/auth/saml-provider.test.js.map +1 -0
  30. package/dist/auth/types.d.ts +81 -0
  31. package/dist/auth/types.js +11 -0
  32. package/dist/auth/types.js.map +1 -0
  33. package/dist/auth/types.test.d.ts +1 -0
  34. package/dist/auth/types.test.js +147 -0
  35. package/dist/auth/types.test.js.map +1 -0
  36. package/dist/backlog/ab-reference-scanner.d.ts +10 -0
  37. package/dist/backlog/ab-reference-scanner.js +22 -0
  38. package/dist/backlog/ab-reference-scanner.js.map +1 -0
  39. package/dist/backlog/ab-reference-scanner.test.d.ts +1 -0
  40. package/dist/backlog/ab-reference-scanner.test.js +83 -0
  41. package/dist/backlog/ab-reference-scanner.test.js.map +1 -0
  42. package/dist/backlog/azure-devops-provider.d.ts +59 -0
  43. package/dist/backlog/azure-devops-provider.js +283 -0
  44. package/dist/backlog/azure-devops-provider.js.map +1 -0
  45. package/dist/backlog/backlog-provider.d.ts +13 -0
  46. package/dist/backlog/backlog-provider.js +6 -0
  47. package/dist/backlog/backlog-provider.js.map +1 -0
  48. package/dist/backlog/backlog-provider.test.d.ts +1 -0
  49. package/dist/backlog/backlog-provider.test.js +426 -0
  50. package/dist/backlog/backlog-provider.test.js.map +1 -0
  51. package/dist/backlog/clickup-provider.d.ts +55 -0
  52. package/dist/backlog/clickup-provider.js +301 -0
  53. package/dist/backlog/clickup-provider.js.map +1 -0
  54. package/dist/backlog/clickup-provider.test.d.ts +1 -0
  55. package/dist/backlog/clickup-provider.test.js +426 -0
  56. package/dist/backlog/clickup-provider.test.js.map +1 -0
  57. package/dist/backlog/clickup-reference-scanner.d.ts +10 -0
  58. package/dist/backlog/clickup-reference-scanner.js +32 -0
  59. package/dist/backlog/clickup-reference-scanner.js.map +1 -0
  60. package/dist/backlog/clickup-reference-scanner.test.d.ts +1 -0
  61. package/dist/backlog/clickup-reference-scanner.test.js +92 -0
  62. package/dist/backlog/clickup-reference-scanner.test.js.map +1 -0
  63. package/dist/backlog/code-linker.d.ts +63 -0
  64. package/dist/backlog/code-linker.js +90 -0
  65. package/dist/backlog/code-linker.js.map +1 -0
  66. package/dist/backlog/code-linker.test.d.ts +1 -0
  67. package/dist/backlog/code-linker.test.js +325 -0
  68. package/dist/backlog/code-linker.test.js.map +1 -0
  69. package/dist/backlog/index.d.ts +14 -0
  70. package/dist/backlog/index.js +8 -0
  71. package/dist/backlog/index.js.map +1 -0
  72. package/dist/backlog/jira-provider.d.ts +60 -0
  73. package/dist/backlog/jira-provider.js +272 -0
  74. package/dist/backlog/jira-provider.js.map +1 -0
  75. package/dist/backlog/jira-provider.test.d.ts +1 -0
  76. package/dist/backlog/jira-provider.test.js +449 -0
  77. package/dist/backlog/jira-provider.test.js.map +1 -0
  78. package/dist/backlog/jira-reference-scanner.d.ts +11 -0
  79. package/dist/backlog/jira-reference-scanner.js +26 -0
  80. package/dist/backlog/jira-reference-scanner.js.map +1 -0
  81. package/dist/backlog/jira-reference-scanner.test.d.ts +1 -0
  82. package/dist/backlog/jira-reference-scanner.test.js +127 -0
  83. package/dist/backlog/jira-reference-scanner.test.js.map +1 -0
  84. package/dist/backlog/types.d.ts +22 -0
  85. package/dist/backlog/types.js +1 -0
  86. package/dist/backlog/types.js.map +1 -0
  87. package/dist/chunker/ast-chunker.d.ts +45 -0
  88. package/dist/chunker/ast-chunker.js +292 -0
  89. package/dist/chunker/ast-chunker.js.map +1 -0
  90. package/dist/chunker/ast-chunker.test.d.ts +1 -0
  91. package/dist/chunker/ast-chunker.test.js +391 -0
  92. package/dist/chunker/ast-chunker.test.js.map +1 -0
  93. package/dist/chunker/chunker.d.ts +8 -0
  94. package/dist/chunker/chunker.js +1 -0
  95. package/dist/chunker/chunker.js.map +1 -0
  96. package/dist/chunker/index.d.ts +3 -0
  97. package/dist/chunker/index.js +2 -0
  98. package/dist/chunker/index.js.map +1 -0
  99. package/dist/config/config-parser.d.ts +15 -0
  100. package/dist/config/config-parser.js +283 -0
  101. package/dist/config/config-parser.js.map +1 -0
  102. package/dist/config/config-parser.test.d.ts +1 -0
  103. package/dist/config/config-parser.test.js +699 -0
  104. package/dist/config/config-parser.test.js.map +1 -0
  105. package/dist/docs/confluence-provider.d.ts +121 -0
  106. package/dist/docs/confluence-provider.js +459 -0
  107. package/dist/docs/confluence-provider.js.map +1 -0
  108. package/dist/docs/confluence-provider.test.d.ts +1 -0
  109. package/dist/docs/confluence-provider.test.js +765 -0
  110. package/dist/docs/confluence-provider.test.js.map +1 -0
  111. package/dist/docs/index.d.ts +4 -0
  112. package/dist/docs/index.js +2 -0
  113. package/dist/docs/index.js.map +1 -0
  114. package/dist/docs/sharepoint-provider.d.ts +150 -0
  115. package/dist/docs/sharepoint-provider.js +637 -0
  116. package/dist/docs/sharepoint-provider.js.map +1 -0
  117. package/dist/docs/sharepoint-provider.test.d.ts +1 -0
  118. package/dist/docs/sharepoint-provider.test.js +873 -0
  119. package/dist/docs/sharepoint-provider.test.js.map +1 -0
  120. package/dist/embedding/bm25-index.d.ts +12 -0
  121. package/dist/embedding/bm25-index.js +89 -0
  122. package/dist/embedding/bm25-index.js.map +1 -0
  123. package/dist/embedding/bm25-index.test.d.ts +1 -0
  124. package/dist/embedding/bm25-index.test.js +289 -0
  125. package/dist/embedding/bm25-index.test.js.map +1 -0
  126. package/dist/embedding/hybrid-search.d.ts +13 -0
  127. package/dist/embedding/hybrid-search.js +124 -0
  128. package/dist/embedding/hybrid-search.js.map +1 -0
  129. package/dist/embedding/hybrid-search.test.d.ts +1 -0
  130. package/dist/embedding/hybrid-search.test.js +266 -0
  131. package/dist/embedding/hybrid-search.test.js.map +1 -0
  132. package/dist/embedding/index.d.ts +11 -0
  133. package/dist/embedding/index.js +7 -0
  134. package/dist/embedding/index.js.map +1 -0
  135. package/dist/embedding/lancedb-store.d.ts +21 -0
  136. package/dist/embedding/lancedb-store.js +172 -0
  137. package/dist/embedding/lancedb-store.js.map +1 -0
  138. package/dist/embedding/lancedb-store.test.d.ts +1 -0
  139. package/dist/embedding/lancedb-store.test.js +268 -0
  140. package/dist/embedding/lancedb-store.test.js.map +1 -0
  141. package/dist/embedding/model-lifecycle-manager.d.ts +83 -0
  142. package/dist/embedding/model-lifecycle-manager.js +419 -0
  143. package/dist/embedding/model-lifecycle-manager.js.map +1 -0
  144. package/dist/embedding/model-lifecycle-manager.test.d.ts +1 -0
  145. package/dist/embedding/model-lifecycle-manager.test.js +642 -0
  146. package/dist/embedding/model-lifecycle-manager.test.js.map +1 -0
  147. package/dist/embedding/ollama-embedding-provider.d.ts +16 -0
  148. package/dist/embedding/ollama-embedding-provider.js +74 -0
  149. package/dist/embedding/ollama-embedding-provider.js.map +1 -0
  150. package/dist/embedding/ollama-embedding-provider.test.d.ts +1 -0
  151. package/dist/embedding/ollama-embedding-provider.test.js +198 -0
  152. package/dist/embedding/ollama-embedding-provider.test.js.map +1 -0
  153. package/dist/embedding/openai-compatible-embedding-provider.d.ts +19 -0
  154. package/dist/embedding/openai-compatible-embedding-provider.js +108 -0
  155. package/dist/embedding/openai-compatible-embedding-provider.js.map +1 -0
  156. package/dist/embedding/openai-compatible-embedding-provider.test.d.ts +1 -0
  157. package/dist/embedding/openai-compatible-embedding-provider.test.js +456 -0
  158. package/dist/embedding/openai-compatible-embedding-provider.test.js.map +1 -0
  159. package/dist/embedding/qdrant-store.d.ts +28 -0
  160. package/dist/embedding/qdrant-store.js +174 -0
  161. package/dist/embedding/qdrant-store.js.map +1 -0
  162. package/dist/embedding/qdrant-store.test.d.ts +1 -0
  163. package/dist/embedding/qdrant-store.test.js +359 -0
  164. package/dist/embedding/qdrant-store.test.js.map +1 -0
  165. package/dist/enrichment/index.d.ts +4 -0
  166. package/dist/enrichment/index.js +2 -0
  167. package/dist/enrichment/index.js.map +1 -0
  168. package/dist/enrichment/nl-enricher.d.ts +16 -0
  169. package/dist/enrichment/nl-enricher.js +47 -0
  170. package/dist/enrichment/nl-enricher.js.map +1 -0
  171. package/dist/enrichment/nl-enricher.test.d.ts +1 -0
  172. package/dist/enrichment/nl-enricher.test.js +154 -0
  173. package/dist/enrichment/nl-enricher.test.js.map +1 -0
  174. package/dist/enrichment/ollama-client.d.ts +18 -0
  175. package/dist/enrichment/ollama-client.js +55 -0
  176. package/dist/enrichment/ollama-client.js.map +1 -0
  177. package/dist/enrichment/ollama-client.test.d.ts +1 -0
  178. package/dist/enrichment/ollama-client.test.js +129 -0
  179. package/dist/enrichment/ollama-client.test.js.map +1 -0
  180. package/dist/git/git-client.d.ts +22 -0
  181. package/dist/git/git-client.js +6 -0
  182. package/dist/git/git-client.js.map +1 -0
  183. package/dist/git/git-client.test.d.ts +1 -0
  184. package/dist/git/git-client.test.js +200 -0
  185. package/dist/git/git-client.test.js.map +1 -0
  186. package/dist/git/ignore-filter.d.ts +2 -0
  187. package/dist/git/ignore-filter.js +31 -0
  188. package/dist/git/ignore-filter.js.map +1 -0
  189. package/dist/git/ignore-filter.test.d.ts +1 -0
  190. package/dist/git/ignore-filter.test.js +87 -0
  191. package/dist/git/ignore-filter.test.js.map +1 -0
  192. package/dist/git/index.d.ts +4 -0
  193. package/dist/git/index.js +3 -0
  194. package/dist/git/index.js.map +1 -0
  195. package/dist/git/simple-git-client.d.ts +12 -0
  196. package/dist/git/simple-git-client.js +138 -0
  197. package/dist/git/simple-git-client.js.map +1 -0
  198. package/dist/graph/cross-repo-resolver.d.ts +50 -0
  199. package/dist/graph/cross-repo-resolver.js +315 -0
  200. package/dist/graph/cross-repo-resolver.js.map +1 -0
  201. package/dist/graph/cross-repo-resolver.test.d.ts +1 -0
  202. package/dist/graph/cross-repo-resolver.test.js +548 -0
  203. package/dist/graph/cross-repo-resolver.test.js.map +1 -0
  204. package/dist/graph/dependency-graph.d.ts +44 -0
  205. package/dist/graph/dependency-graph.js +108 -0
  206. package/dist/graph/dependency-graph.js.map +1 -0
  207. package/dist/graph/dependency-graph.test.d.ts +1 -0
  208. package/dist/graph/dependency-graph.test.js +276 -0
  209. package/dist/graph/dependency-graph.test.js.map +1 -0
  210. package/dist/graph/graph-builder.d.ts +11 -0
  211. package/dist/graph/graph-builder.js +113 -0
  212. package/dist/graph/graph-builder.js.map +1 -0
  213. package/dist/graph/graph-builder.test.d.ts +1 -0
  214. package/dist/graph/graph-builder.test.js +178 -0
  215. package/dist/graph/graph-builder.test.js.map +1 -0
  216. package/dist/graph/import-resolver.d.ts +11 -0
  217. package/dist/graph/import-resolver.js +199 -0
  218. package/dist/graph/import-resolver.js.map +1 -0
  219. package/dist/graph/import-resolver.test.d.ts +1 -0
  220. package/dist/graph/import-resolver.test.js +282 -0
  221. package/dist/graph/import-resolver.test.js.map +1 -0
  222. package/dist/graph/index.d.ts +7 -0
  223. package/dist/graph/index.js +4 -0
  224. package/dist/graph/index.js.map +1 -0
  225. package/dist/index.d.ts +31 -0
  226. package/dist/index.js +15 -0
  227. package/dist/index.js.map +1 -0
  228. package/dist/indexer/file-scanner.d.ts +34 -0
  229. package/dist/indexer/file-scanner.js +69 -0
  230. package/dist/indexer/file-scanner.js.map +1 -0
  231. package/dist/indexer/file-scanner.test.d.ts +1 -0
  232. package/dist/indexer/file-scanner.test.js +110 -0
  233. package/dist/indexer/file-scanner.test.js.map +1 -0
  234. package/dist/indexer/file-watcher.d.ts +79 -0
  235. package/dist/indexer/file-watcher.js +148 -0
  236. package/dist/indexer/incremental-indexer.d.ts +67 -0
  237. package/dist/indexer/incremental-indexer.js +142 -0
  238. package/dist/indexer/incremental-indexer.js.map +1 -0
  239. package/dist/indexer/incremental-indexer.test.d.ts +1 -0
  240. package/dist/indexer/incremental-indexer.test.js +266 -0
  241. package/dist/indexer/incremental-indexer.test.js.map +1 -0
  242. package/dist/indexer/index-check.d.ts +22 -0
  243. package/dist/indexer/index-check.js +74 -0
  244. package/dist/indexer/index-check.js.map +1 -0
  245. package/dist/indexer/index-check.test.d.ts +1 -0
  246. package/dist/indexer/index-check.test.js +100 -0
  247. package/dist/indexer/index-check.test.js.map +1 -0
  248. package/dist/indexer/index-state.d.ts +61 -0
  249. package/dist/indexer/index-state.js +82 -0
  250. package/dist/indexer/index-state.js.map +1 -0
  251. package/dist/indexer/index-state.test.d.ts +1 -0
  252. package/dist/indexer/index-state.test.js +140 -0
  253. package/dist/indexer/index-state.test.js.map +1 -0
  254. package/dist/indexer/index.d.ts +12 -0
  255. package/dist/indexer/index.js +6 -0
  256. package/dist/indexer/index.js.map +1 -0
  257. package/dist/indexer/multi-repo-indexer.d.ts +63 -0
  258. package/dist/indexer/multi-repo-indexer.js +144 -0
  259. package/dist/indexer/multi-repo-indexer.js.map +1 -0
  260. package/dist/indexer/multi-repo-indexer.test.d.ts +1 -0
  261. package/dist/indexer/multi-repo-indexer.test.js +238 -0
  262. package/dist/indexer/multi-repo-indexer.test.js.map +1 -0
  263. package/dist/parser/index.d.ts +4 -0
  264. package/dist/parser/index.js +3 -0
  265. package/dist/parser/index.js.map +1 -0
  266. package/dist/parser/language-registry.d.ts +46 -0
  267. package/dist/parser/language-registry.js +219 -0
  268. package/dist/parser/language-registry.js.map +1 -0
  269. package/dist/parser/language-registry.test.d.ts +1 -0
  270. package/dist/parser/language-registry.test.js +225 -0
  271. package/dist/parser/language-registry.test.js.map +1 -0
  272. package/dist/parser/markdown-parser.d.ts +124 -0
  273. package/dist/parser/markdown-parser.js +487 -0
  274. package/dist/parser/markdown-parser.js.map +1 -0
  275. package/dist/parser/markdown-parser.test.d.ts +1 -0
  276. package/dist/parser/markdown-parser.test.js +600 -0
  277. package/dist/parser/markdown-parser.test.js.map +1 -0
  278. package/dist/parser/tree-sitter-parser.d.ts +32 -0
  279. package/dist/parser/tree-sitter-parser.js +146 -0
  280. package/dist/parser/tree-sitter-parser.js.map +1 -0
  281. package/dist/retrieval/context-expander.d.ts +51 -0
  282. package/dist/retrieval/context-expander.js +218 -0
  283. package/dist/retrieval/context-expander.js.map +1 -0
  284. package/dist/retrieval/context-expander.test.d.ts +1 -0
  285. package/dist/retrieval/context-expander.test.js +339 -0
  286. package/dist/retrieval/context-expander.test.js.map +1 -0
  287. package/dist/retrieval/cross-encoder-reranker.d.ts +16 -0
  288. package/dist/retrieval/cross-encoder-reranker.js +90 -0
  289. package/dist/retrieval/cross-encoder-reranker.js.map +1 -0
  290. package/dist/retrieval/cross-encoder-reranker.test.d.ts +1 -0
  291. package/dist/retrieval/cross-encoder-reranker.test.js +305 -0
  292. package/dist/retrieval/cross-encoder-reranker.test.js.map +1 -0
  293. package/dist/retrieval/index.d.ts +8 -0
  294. package/dist/retrieval/index.js +4 -0
  295. package/dist/retrieval/index.js.map +1 -0
  296. package/dist/retrieval/query-analyzer.d.ts +29 -0
  297. package/dist/retrieval/query-analyzer.js +238 -0
  298. package/dist/retrieval/query-analyzer.js.map +1 -0
  299. package/dist/retrieval/query-analyzer.test.d.ts +1 -0
  300. package/dist/retrieval/query-analyzer.test.js +236 -0
  301. package/dist/retrieval/query-analyzer.test.js.map +1 -0
  302. package/dist/retrieval/token-budget.d.ts +51 -0
  303. package/dist/retrieval/token-budget.js +141 -0
  304. package/dist/retrieval/token-budget.js.map +1 -0
  305. package/dist/retrieval/token-budget.test.d.ts +1 -0
  306. package/dist/retrieval/token-budget.test.js +404 -0
  307. package/dist/retrieval/token-budget.test.js.map +1 -0
  308. package/dist/storage/azure-blob-provider.d.ts +19 -0
  309. package/dist/storage/azure-blob-provider.js +199 -0
  310. package/dist/storage/azure-blob-provider.js.map +1 -0
  311. package/dist/storage/azure-blob-provider.test.d.ts +1 -0
  312. package/dist/storage/azure-blob-provider.test.js +250 -0
  313. package/dist/storage/azure-blob-provider.test.js.map +1 -0
  314. package/dist/storage/gcs-provider.d.ts +22 -0
  315. package/dist/storage/gcs-provider.js +241 -0
  316. package/dist/storage/gcs-provider.js.map +1 -0
  317. package/dist/storage/gcs-provider.test.d.ts +1 -0
  318. package/dist/storage/gcs-provider.test.js +299 -0
  319. package/dist/storage/gcs-provider.test.js.map +1 -0
  320. package/dist/storage/index.d.ts +5 -0
  321. package/dist/storage/index.js +4 -0
  322. package/dist/storage/index.js.map +1 -0
  323. package/dist/storage/s3-provider.d.ts +21 -0
  324. package/dist/storage/s3-provider.js +220 -0
  325. package/dist/storage/s3-provider.js.map +1 -0
  326. package/dist/storage/s3-provider.test.d.ts +1 -0
  327. package/dist/storage/s3-provider.test.js +329 -0
  328. package/dist/storage/s3-provider.test.js.map +1 -0
  329. package/dist/storage/types.d.ts +65 -0
  330. package/dist/storage/types.js +12 -0
  331. package/dist/storage/types.js.map +1 -0
  332. package/dist/types/chunk.d.ts +32 -0
  333. package/dist/types/chunk.js +1 -0
  334. package/dist/types/chunk.js.map +1 -0
  335. package/dist/types/config.d.ts +71 -0
  336. package/dist/types/config.js +1 -0
  337. package/dist/types/config.js.map +1 -0
  338. package/dist/types/index.d.ts +5 -0
  339. package/dist/types/index.js +1 -0
  340. package/dist/types/index.js.map +1 -0
  341. package/dist/types/provider.d.ts +54 -0
  342. package/dist/types/provider.js +36 -0
  343. package/dist/types/provider.js.map +1 -0
  344. package/dist/types/search.d.ts +27 -0
  345. package/dist/types/search.js +1 -0
  346. package/dist/types/search.js.map +1 -0
  347. package/package.json +70 -0
@@ -0,0 +1,124 @@
1
+ import { type Result } from 'neverthrow';
2
+ import type { Chunk } from '../types/chunk.js';
3
+ import { ParseError } from '../types/provider.js';
4
+ /**
5
+ * Parsed frontmatter from a Markdown file.
6
+ */
7
+ export interface MarkdownFrontmatter {
8
+ readonly title?: string;
9
+ readonly tags?: readonly string[];
10
+ readonly aliases?: readonly string[];
11
+ readonly raw: Readonly<Record<string, unknown>>;
12
+ }
13
+ /**
14
+ * A structured section extracted from a Markdown document.
15
+ */
16
+ interface MarkdownSection {
17
+ readonly heading: string;
18
+ readonly headingLevel: number;
19
+ readonly content: string;
20
+ readonly startLine: number;
21
+ readonly endLine: number;
22
+ readonly codeBlocks: readonly CodeBlock[];
23
+ readonly wikilinks: readonly string[];
24
+ readonly tags: readonly string[];
25
+ }
26
+ /**
27
+ * A fenced code block extracted from Markdown content.
28
+ */
29
+ interface CodeBlock {
30
+ readonly language: string;
31
+ readonly content: string;
32
+ readonly startLine: number;
33
+ readonly endLine: number;
34
+ }
35
+ /**
36
+ * Result of parsing a Markdown file.
37
+ */
38
+ export interface ParsedMarkdown {
39
+ readonly filePath: string;
40
+ readonly frontmatter: MarkdownFrontmatter;
41
+ readonly sections: readonly MarkdownSection[];
42
+ readonly chunks: readonly Chunk[];
43
+ }
44
+ /**
45
+ * Configuration for the MarkdownParser.
46
+ */
47
+ export interface MarkdownParserConfig {
48
+ /** Maximum number of tokens per chunk (approximated as content.length / 4). */
49
+ readonly maxTokensPerChunk: number;
50
+ }
51
+ /**
52
+ * Extract YAML frontmatter from the beginning of a Markdown file.
53
+ *
54
+ * Frontmatter is delimited by `---` at the very start of the file.
55
+ * We parse it manually (no YAML library dependency) to extract
56
+ * simple key-value pairs, arrays, and tags.
57
+ */
58
+ export declare function parseFrontmatter(content: string): {
59
+ frontmatter: MarkdownFrontmatter;
60
+ bodyStartLine: number;
61
+ };
62
+ /**
63
+ * Extract all [[wikilinks]] from Markdown content.
64
+ * Supports [[link]] and [[link|display text]] syntax.
65
+ */
66
+ export declare function extractWikilinks(content: string): string[];
67
+ /**
68
+ * Extract all #tags from Markdown content.
69
+ * Tags must start with # followed by word characters (and may contain /).
70
+ * Excludes headings (# at line start followed by space) and code blocks.
71
+ */
72
+ export declare function extractTags(content: string): string[];
73
+ /**
74
+ * MarkdownParser parses Markdown and Obsidian vault files into structured
75
+ * chunks suitable for indexing by CodeRAG.
76
+ *
77
+ * Features:
78
+ * - YAML frontmatter extraction (title, tags, aliases)
79
+ * - Heading-based section splitting (h1-h6)
80
+ * - [[wikilink]] extraction (Obsidian syntax)
81
+ * - #tag extraction
82
+ * - Fenced code block extraction
83
+ * - Chunk type 'doc' for all documentation chunks
84
+ */
85
+ export declare class MarkdownParser {
86
+ private readonly config;
87
+ constructor(config?: Partial<MarkdownParserConfig>);
88
+ /**
89
+ * Parse a Markdown file into structured chunks.
90
+ *
91
+ * Returns a Result containing the parsed chunks or a ParseError.
92
+ */
93
+ parse(filePath: string, content: string): Result<ParsedMarkdown, ParseError>;
94
+ /**
95
+ * Check if a file path is a Markdown file.
96
+ */
97
+ static isMarkdownFile(filePath: string): boolean;
98
+ /**
99
+ * Internal parsing logic.
100
+ */
101
+ private parseInternal;
102
+ /**
103
+ * Create a single section from the entire body when no headings are present.
104
+ */
105
+ private createSingleSection;
106
+ /**
107
+ * Convert parsed sections into Chunk objects.
108
+ */
109
+ private sectionsToChunks;
110
+ /**
111
+ * Convert a single section into one or more chunks,
112
+ * splitting if the section exceeds the token budget.
113
+ */
114
+ private sectionToChunks;
115
+ /**
116
+ * Split a large section into multiple chunks at paragraph boundaries.
117
+ */
118
+ private splitSection;
119
+ /**
120
+ * Construct a single Chunk with doc type and enriched metadata.
121
+ */
122
+ private makeChunk;
123
+ }
124
+ export {};
@@ -0,0 +1,487 @@
1
+ import { createHash } from 'node:crypto';
2
+ import { ok, err } from 'neverthrow';
3
+ import { ParseError } from '../types/provider.js';
4
+ const DEFAULT_CONFIG = {
5
+ maxTokensPerChunk: 1024,
6
+ };
7
+ /**
8
+ * Generate a deterministic chunk ID from file path, start line, and content.
9
+ */
10
+ function generateChunkId(filePath, startLine, content) {
11
+ return createHash('sha256')
12
+ .update(`${filePath}${startLine}${content}`)
13
+ .digest('hex');
14
+ }
15
+ /**
16
+ * Approximate token count using the heuristic content.length / 4.
17
+ */
18
+ function approximateTokens(content) {
19
+ return Math.ceil(content.length / 4);
20
+ }
21
+ /**
22
+ * Extract YAML frontmatter from the beginning of a Markdown file.
23
+ *
24
+ * Frontmatter is delimited by `---` at the very start of the file.
25
+ * We parse it manually (no YAML library dependency) to extract
26
+ * simple key-value pairs, arrays, and tags.
27
+ */
28
+ export function parseFrontmatter(content) {
29
+ const lines = content.split('\n');
30
+ if (lines[0]?.trim() !== '---') {
31
+ return {
32
+ frontmatter: { raw: {} },
33
+ bodyStartLine: 0,
34
+ };
35
+ }
36
+ let endIndex = -1;
37
+ for (let i = 1; i < lines.length; i++) {
38
+ if (lines[i]?.trim() === '---') {
39
+ endIndex = i;
40
+ break;
41
+ }
42
+ }
43
+ if (endIndex === -1) {
44
+ return {
45
+ frontmatter: { raw: {} },
46
+ bodyStartLine: 0,
47
+ };
48
+ }
49
+ const frontmatterLines = lines.slice(1, endIndex);
50
+ const raw = {};
51
+ let currentKey = '';
52
+ let currentArray = null;
53
+ for (const line of frontmatterLines) {
54
+ // Array item continuation
55
+ if (currentArray !== null && /^\s+-\s+/.test(line)) {
56
+ const value = line.replace(/^\s+-\s+/, '').trim();
57
+ currentArray.push(stripQuotes(value));
58
+ continue;
59
+ }
60
+ // If we were building an array, finalize it
61
+ if (currentArray !== null) {
62
+ raw[currentKey] = currentArray;
63
+ currentArray = null;
64
+ }
65
+ // Key: value pair
66
+ const kvMatch = line.match(/^(\w[\w-]*)\s*:\s*(.*)/);
67
+ if (kvMatch) {
68
+ const key = kvMatch[1];
69
+ const value = kvMatch[2].trim();
70
+ if (value === '') {
71
+ // Could be start of an array
72
+ currentKey = key;
73
+ currentArray = [];
74
+ }
75
+ else if (value.startsWith('[') && value.endsWith(']')) {
76
+ // Inline array: [item1, item2]
77
+ const items = value
78
+ .slice(1, -1)
79
+ .split(',')
80
+ .map((s) => stripQuotes(s.trim()))
81
+ .filter((s) => s.length > 0);
82
+ raw[key] = items;
83
+ }
84
+ else {
85
+ raw[key] = stripQuotes(value);
86
+ }
87
+ }
88
+ }
89
+ // Finalize any trailing array
90
+ if (currentArray !== null) {
91
+ raw[currentKey] = currentArray;
92
+ }
93
+ const title = typeof raw['title'] === 'string' ? raw['title'] : undefined;
94
+ const tags = extractStringArray(raw['tags']);
95
+ const aliases = extractStringArray(raw['aliases']);
96
+ return {
97
+ frontmatter: { title, tags, aliases, raw },
98
+ bodyStartLine: endIndex + 1,
99
+ };
100
+ }
101
+ /**
102
+ * Strip surrounding quotes from a string value.
103
+ */
104
+ function stripQuotes(value) {
105
+ if ((value.startsWith('"') && value.endsWith('"')) ||
106
+ (value.startsWith("'") && value.endsWith("'"))) {
107
+ return value.slice(1, -1);
108
+ }
109
+ return value;
110
+ }
111
+ /**
112
+ * Safely extract a string array from a frontmatter value.
113
+ */
114
+ function extractStringArray(value) {
115
+ if (!Array.isArray(value))
116
+ return undefined;
117
+ const result = [];
118
+ for (const item of value) {
119
+ if (typeof item === 'string') {
120
+ result.push(item);
121
+ }
122
+ }
123
+ return result.length > 0 ? result : undefined;
124
+ }
125
+ /**
126
+ * Extract all [[wikilinks]] from Markdown content.
127
+ * Supports [[link]] and [[link|display text]] syntax.
128
+ */
129
+ export function extractWikilinks(content) {
130
+ const pattern = /\[\[([^\]|]+)(?:\|[^\]]+)?\]\]/g;
131
+ const links = [];
132
+ let match;
133
+ while ((match = pattern.exec(content)) !== null) {
134
+ const link = match[1];
135
+ if (link) {
136
+ links.push(link.trim());
137
+ }
138
+ }
139
+ return [...new Set(links)];
140
+ }
141
+ /**
142
+ * Extract all #tags from Markdown content.
143
+ * Tags must start with # followed by word characters (and may contain /).
144
+ * Excludes headings (# at line start followed by space) and code blocks.
145
+ */
146
+ export function extractTags(content) {
147
+ // Remove code blocks to avoid false matches
148
+ const withoutCode = content.replace(/```[\s\S]*?```/g, '');
149
+ const withoutInlineCode = withoutCode.replace(/`[^`]+`/g, '');
150
+ const pattern = /(?:^|[\s,(])#([\w][\w/.-]*[\w]|[\w])/gm;
151
+ const tags = [];
152
+ let match;
153
+ while ((match = pattern.exec(withoutInlineCode)) !== null) {
154
+ const tag = match[1];
155
+ if (tag) {
156
+ tags.push(tag);
157
+ }
158
+ }
159
+ return [...new Set(tags)];
160
+ }
161
+ /**
162
+ * Extract fenced code blocks from Markdown content.
163
+ */
164
+ function extractCodeBlocks(lines, baseLineOffset) {
165
+ const blocks = [];
166
+ let inCodeBlock = false;
167
+ let codeStartLine = 0;
168
+ let codeLanguage = '';
169
+ let codeLines = [];
170
+ for (let i = 0; i < lines.length; i++) {
171
+ const line = lines[i];
172
+ if (!inCodeBlock && line.trimStart().startsWith('```')) {
173
+ inCodeBlock = true;
174
+ codeStartLine = i;
175
+ codeLanguage = line.trimStart().slice(3).trim();
176
+ codeLines = [];
177
+ }
178
+ else if (inCodeBlock && line.trimStart().startsWith('```')) {
179
+ blocks.push({
180
+ language: codeLanguage,
181
+ content: codeLines.join('\n'),
182
+ startLine: baseLineOffset + codeStartLine,
183
+ endLine: baseLineOffset + i,
184
+ });
185
+ inCodeBlock = false;
186
+ codeLines = [];
187
+ }
188
+ else if (inCodeBlock) {
189
+ codeLines.push(line);
190
+ }
191
+ }
192
+ return blocks;
193
+ }
194
+ /**
195
+ * Split Markdown content into sections based on heading hierarchy.
196
+ */
197
+ function splitIntoSections(lines, bodyStartLine) {
198
+ const sections = [];
199
+ let currentHeading = '';
200
+ let currentLevel = 0;
201
+ let currentStartLine = bodyStartLine;
202
+ let sectionLines = [];
203
+ for (let i = 0; i < lines.length; i++) {
204
+ const line = lines[i];
205
+ const headingMatch = line.match(/^(#{1,6})\s+(.+)/);
206
+ if (headingMatch) {
207
+ // Save previous section if it has content
208
+ if (sectionLines.length > 0 || currentHeading !== '') {
209
+ const content = sectionLines.join('\n');
210
+ const sectionContent = currentHeading
211
+ ? `${'#'.repeat(currentLevel)} ${currentHeading}\n${content}`
212
+ : content;
213
+ if (sectionContent.trim().length > 0) {
214
+ const sectionAllLines = sectionContent.split('\n');
215
+ const codeBlocks = extractCodeBlocks(sectionAllLines, currentStartLine);
216
+ const wikilinks = extractWikilinks(sectionContent);
217
+ const tags = extractTags(sectionContent);
218
+ sections.push({
219
+ heading: currentHeading,
220
+ headingLevel: currentLevel,
221
+ content: sectionContent,
222
+ startLine: currentStartLine,
223
+ endLine: bodyStartLine + i - 1,
224
+ codeBlocks,
225
+ wikilinks,
226
+ tags,
227
+ });
228
+ }
229
+ }
230
+ currentHeading = headingMatch[2].trim();
231
+ currentLevel = headingMatch[1].length;
232
+ currentStartLine = bodyStartLine + i;
233
+ sectionLines = [];
234
+ }
235
+ else {
236
+ sectionLines.push(line);
237
+ }
238
+ }
239
+ // Final section
240
+ if (sectionLines.length > 0 || currentHeading !== '') {
241
+ const content = sectionLines.join('\n');
242
+ const sectionContent = currentHeading
243
+ ? `${'#'.repeat(currentLevel)} ${currentHeading}\n${content}`
244
+ : content;
245
+ if (sectionContent.trim().length > 0) {
246
+ const sectionAllLines = sectionContent.split('\n');
247
+ const codeBlocks = extractCodeBlocks(sectionAllLines, currentStartLine);
248
+ const wikilinks = extractWikilinks(sectionContent);
249
+ const tags = extractTags(sectionContent);
250
+ sections.push({
251
+ heading: currentHeading,
252
+ headingLevel: currentLevel,
253
+ content: sectionContent,
254
+ startLine: currentStartLine,
255
+ endLine: bodyStartLine + lines.length - 1,
256
+ codeBlocks,
257
+ wikilinks,
258
+ tags,
259
+ });
260
+ }
261
+ }
262
+ return sections;
263
+ }
264
+ /**
265
+ * MarkdownParser parses Markdown and Obsidian vault files into structured
266
+ * chunks suitable for indexing by CodeRAG.
267
+ *
268
+ * Features:
269
+ * - YAML frontmatter extraction (title, tags, aliases)
270
+ * - Heading-based section splitting (h1-h6)
271
+ * - [[wikilink]] extraction (Obsidian syntax)
272
+ * - #tag extraction
273
+ * - Fenced code block extraction
274
+ * - Chunk type 'doc' for all documentation chunks
275
+ */
276
+ export class MarkdownParser {
277
+ config;
278
+ constructor(config) {
279
+ this.config = { ...DEFAULT_CONFIG, ...config };
280
+ }
281
+ /**
282
+ * Parse a Markdown file into structured chunks.
283
+ *
284
+ * Returns a Result containing the parsed chunks or a ParseError.
285
+ */
286
+ parse(filePath, content) {
287
+ try {
288
+ const result = this.parseInternal(filePath, content);
289
+ return ok(result);
290
+ }
291
+ catch (error) {
292
+ const message = error instanceof Error ? error.message : String(error);
293
+ return err(new ParseError(`Failed to parse markdown ${filePath}: ${message}`));
294
+ }
295
+ }
296
+ /**
297
+ * Check if a file path is a Markdown file.
298
+ */
299
+ static isMarkdownFile(filePath) {
300
+ const lower = filePath.toLowerCase();
301
+ return lower.endsWith('.md') || lower.endsWith('.mdx') || lower.endsWith('.markdown');
302
+ }
303
+ /**
304
+ * Internal parsing logic.
305
+ */
306
+ parseInternal(filePath, content) {
307
+ if (content.trim().length === 0) {
308
+ return {
309
+ filePath,
310
+ frontmatter: { raw: {} },
311
+ sections: [],
312
+ chunks: [],
313
+ };
314
+ }
315
+ const { frontmatter, bodyStartLine } = parseFrontmatter(content);
316
+ const allLines = content.split('\n');
317
+ const bodyLines = allLines.slice(bodyStartLine);
318
+ const sections = splitIntoSections(bodyLines, bodyStartLine);
319
+ // If no sections were found (no headings), treat the whole body as one section
320
+ const effectiveSections = sections.length > 0
321
+ ? sections
322
+ : this.createSingleSection(bodyLines, bodyStartLine);
323
+ const chunks = this.sectionsToChunks(filePath, frontmatter, effectiveSections);
324
+ return {
325
+ filePath,
326
+ frontmatter,
327
+ sections: effectiveSections,
328
+ chunks,
329
+ };
330
+ }
331
+ /**
332
+ * Create a single section from the entire body when no headings are present.
333
+ */
334
+ createSingleSection(bodyLines, bodyStartLine) {
335
+ const content = bodyLines.join('\n');
336
+ if (content.trim().length === 0)
337
+ return [];
338
+ const codeBlocks = extractCodeBlocks(bodyLines, bodyStartLine);
339
+ const wikilinks = extractWikilinks(content);
340
+ const tags = extractTags(content);
341
+ return [
342
+ {
343
+ heading: '',
344
+ headingLevel: 0,
345
+ content,
346
+ startLine: bodyStartLine,
347
+ endLine: bodyStartLine + bodyLines.length - 1,
348
+ codeBlocks,
349
+ wikilinks,
350
+ tags,
351
+ },
352
+ ];
353
+ }
354
+ /**
355
+ * Convert parsed sections into Chunk objects.
356
+ */
357
+ sectionsToChunks(filePath, frontmatter, sections) {
358
+ const chunks = [];
359
+ for (const section of sections) {
360
+ const sectionChunks = this.sectionToChunks(filePath, frontmatter, section);
361
+ chunks.push(...sectionChunks);
362
+ }
363
+ return chunks;
364
+ }
365
+ /**
366
+ * Convert a single section into one or more chunks,
367
+ * splitting if the section exceeds the token budget.
368
+ */
369
+ sectionToChunks(filePath, frontmatter, section) {
370
+ const content = section.content;
371
+ const tokens = approximateTokens(content);
372
+ // Merge frontmatter tags with section tags
373
+ const allTags = mergeStringArrays(frontmatter.tags, section.tags);
374
+ const chunkType = 'doc';
375
+ const name = section.heading || frontmatter.title || '(document)';
376
+ // Build doc-specific metadata fields
377
+ const docLinks = section.wikilinks.length > 0
378
+ ? [...section.wikilinks]
379
+ : undefined;
380
+ const docTags = allTags.length > 0
381
+ ? allTags
382
+ : undefined;
383
+ const docAliases = frontmatter.aliases && frontmatter.aliases.length > 0
384
+ ? [...frontmatter.aliases]
385
+ : undefined;
386
+ const docTitle = frontmatter.title ?? undefined;
387
+ if (tokens <= this.config.maxTokensPerChunk) {
388
+ return [
389
+ this.makeChunk(filePath, content, section.startLine, section.endLine, name, chunkType, docLinks, docTags, docAliases, docTitle),
390
+ ];
391
+ }
392
+ // Split oversized sections at paragraph boundaries
393
+ return this.splitSection(filePath, content, section.startLine, name, chunkType, docLinks, docTags, docAliases, docTitle);
394
+ }
395
+ /**
396
+ * Split a large section into multiple chunks at paragraph boundaries.
397
+ */
398
+ splitSection(filePath, content, baseStartLine, name, chunkType, docLinks, docTags, docAliases, docTitle) {
399
+ const lines = content.split('\n');
400
+ const chunks = [];
401
+ let currentLines = [];
402
+ let currentStartLine = baseStartLine;
403
+ for (let i = 0; i < lines.length; i++) {
404
+ const line = lines[i];
405
+ currentLines.push(line);
406
+ const currentContent = currentLines.join('\n');
407
+ if (approximateTokens(currentContent) >= this.config.maxTokensPerChunk) {
408
+ // Try to split at a blank line
409
+ let splitIndex = -1;
410
+ for (let j = currentLines.length - 2; j >= 0; j--) {
411
+ if (currentLines[j].trim() === '') {
412
+ splitIndex = j;
413
+ break;
414
+ }
415
+ }
416
+ if (splitIndex > 0) {
417
+ const part = currentLines.slice(0, splitIndex + 1).join('\n');
418
+ if (part.trim().length > 0) {
419
+ const endLine = currentStartLine + splitIndex;
420
+ chunks.push(this.makeChunk(filePath, part, currentStartLine, endLine, name, chunkType, docLinks, docTags, docAliases, docTitle));
421
+ }
422
+ currentStartLine = currentStartLine + splitIndex + 1;
423
+ currentLines = currentLines.slice(splitIndex + 1);
424
+ }
425
+ else {
426
+ // Force split
427
+ if (currentContent.trim().length > 0) {
428
+ const endLine = currentStartLine + currentLines.length - 1;
429
+ chunks.push(this.makeChunk(filePath, currentContent, currentStartLine, endLine, name, chunkType, docLinks, docTags, docAliases, docTitle));
430
+ }
431
+ currentStartLine = baseStartLine + i + 1;
432
+ currentLines = [];
433
+ }
434
+ }
435
+ }
436
+ // Remaining lines
437
+ if (currentLines.length > 0) {
438
+ const remaining = currentLines.join('\n');
439
+ if (remaining.trim().length > 0) {
440
+ const endLine = currentStartLine + currentLines.length - 1;
441
+ chunks.push(this.makeChunk(filePath, remaining, currentStartLine, endLine, name, chunkType, docLinks, docTags, docAliases, docTitle));
442
+ }
443
+ }
444
+ return chunks;
445
+ }
446
+ /**
447
+ * Construct a single Chunk with doc type and enriched metadata.
448
+ */
449
+ makeChunk(filePath, content, startLine, endLine, name, chunkType, docLinks, docTags, docAliases, docTitle) {
450
+ const id = generateChunkId(filePath, startLine, content);
451
+ return {
452
+ id,
453
+ content,
454
+ nlSummary: '',
455
+ filePath,
456
+ startLine,
457
+ endLine,
458
+ language: 'markdown',
459
+ metadata: {
460
+ chunkType,
461
+ name,
462
+ declarations: [],
463
+ imports: [],
464
+ exports: [],
465
+ links: docLinks,
466
+ tags: docTags,
467
+ aliases: docAliases,
468
+ docTitle,
469
+ },
470
+ };
471
+ }
472
+ }
473
+ /**
474
+ * Merge two optional string arrays, deduplicating.
475
+ */
476
+ function mergeStringArrays(a, b) {
477
+ const set = new Set();
478
+ if (a) {
479
+ for (const item of a)
480
+ set.add(item);
481
+ }
482
+ if (b) {
483
+ for (const item of b)
484
+ set.add(item);
485
+ }
486
+ return [...set];
487
+ }
@@ -0,0 +1 @@
1
+ {"version":3,"file":"markdown-parser.js","sourceRoot":"","sources":["../../src/parser/markdown-parser.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1 @@
1
+ export {};