mdcontext 0.0.1 → 0.2.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 (337) hide show
  1. package/.changeset/README.md +28 -0
  2. package/.changeset/config.json +11 -0
  3. package/.claude/settings.local.json +25 -0
  4. package/.github/workflows/ci.yml +83 -0
  5. package/.github/workflows/claude-code-review.yml +44 -0
  6. package/.github/workflows/claude.yml +85 -0
  7. package/.github/workflows/release.yml +113 -0
  8. package/.tldrignore +112 -0
  9. package/BACKLOG.md +338 -0
  10. package/CONTRIBUTING.md +186 -0
  11. package/NOTES/NOTES +44 -0
  12. package/README.md +434 -11
  13. package/biome.json +36 -0
  14. package/cspell.config.yaml +14 -0
  15. package/dist/chunk-23UPXDNL.js +3044 -0
  16. package/dist/chunk-2W7MO2DL.js +1366 -0
  17. package/dist/chunk-3NUAZGMA.js +1689 -0
  18. package/dist/chunk-7TOWB2XB.js +366 -0
  19. package/dist/chunk-7XOTOADQ.js +3065 -0
  20. package/dist/chunk-AH2PDM2K.js +3042 -0
  21. package/dist/chunk-BNXWSZ63.js +3742 -0
  22. package/dist/chunk-BTL5DJVU.js +3222 -0
  23. package/dist/chunk-HDHYG7E4.js +104 -0
  24. package/dist/chunk-HLR4KZBP.js +3234 -0
  25. package/dist/chunk-IP3FRFEB.js +1045 -0
  26. package/dist/chunk-KHU56VDO.js +3042 -0
  27. package/dist/chunk-KRYIFLQR.js +88 -0
  28. package/dist/chunk-LBSDNLEM.js +287 -0
  29. package/dist/chunk-MNTQ7HCP.js +2643 -0
  30. package/dist/chunk-MUJELQQ6.js +1387 -0
  31. package/dist/chunk-MXJGMSLV.js +2199 -0
  32. package/dist/chunk-N6QJGC3Z.js +2636 -0
  33. package/dist/chunk-OBELGBPM.js +1713 -0
  34. package/dist/chunk-OT7R5XTA.js +3192 -0
  35. package/dist/chunk-P7X4RA2T.js +106 -0
  36. package/dist/chunk-PIDUQNC2.js +3185 -0
  37. package/dist/chunk-POGCDIH4.js +3187 -0
  38. package/dist/chunk-PSIEOQGZ.js +3043 -0
  39. package/dist/chunk-PVRT3IHA.js +3238 -0
  40. package/dist/chunk-QNN4TT23.js +1430 -0
  41. package/dist/chunk-RE3R45RJ.js +3042 -0
  42. package/dist/chunk-S7E6TFX6.js +803 -0
  43. package/dist/chunk-SG6GLU4U.js +1378 -0
  44. package/dist/chunk-SJCDV2ST.js +274 -0
  45. package/dist/chunk-SYE5XLF3.js +104 -0
  46. package/dist/chunk-T5VLYBZD.js +103 -0
  47. package/dist/chunk-TOQB7VWU.js +3238 -0
  48. package/dist/chunk-VFNMZ4ZQ.js +3228 -0
  49. package/dist/chunk-VVTGZNBT.js +1629 -0
  50. package/dist/chunk-W7Q4RFEV.js +104 -0
  51. package/dist/chunk-XTYYVRLO.js +3190 -0
  52. package/dist/chunk-Y6MDYVJD.js +3063 -0
  53. package/dist/cli/main.d.ts +1 -0
  54. package/dist/cli/main.js +5458 -0
  55. package/dist/index.d.ts +653 -0
  56. package/dist/index.js +79 -0
  57. package/dist/mcp/server.d.ts +1 -0
  58. package/dist/mcp/server.js +472 -0
  59. package/dist/schema-BAWSG7KY.js +22 -0
  60. package/dist/schema-E3QUPL26.js +20 -0
  61. package/dist/schema-EHL7WUT6.js +20 -0
  62. package/docs/019-USAGE.md +625 -0
  63. package/docs/020-current-implementation.md +364 -0
  64. package/docs/021-DOGFOODING-FINDINGS.md +175 -0
  65. package/docs/BACKLOG.md +80 -0
  66. package/docs/CONFIG.md +1123 -0
  67. package/docs/DESIGN.md +439 -0
  68. package/docs/ERRORS.md +383 -0
  69. package/docs/PROJECT.md +88 -0
  70. package/docs/ROADMAP.md +407 -0
  71. package/docs/summarization.md +320 -0
  72. package/docs/test-links.md +9 -0
  73. package/justfile +40 -0
  74. package/package.json +74 -9
  75. package/pnpm-workspace.yaml +5 -0
  76. package/research/INDEX.md +315 -0
  77. package/research/code-review/README.md +90 -0
  78. package/research/code-review/cli-error-handling-review.md +979 -0
  79. package/research/code-review/code-review-validation-report.md +464 -0
  80. package/research/code-review/main-ts-review.md +1128 -0
  81. package/research/config-analysis/01-current-implementation.md +470 -0
  82. package/research/config-analysis/02-strategy-recommendation.md +428 -0
  83. package/research/config-analysis/03-task-candidates.md +715 -0
  84. package/research/config-analysis/033-research-configuration-management.md +828 -0
  85. package/research/config-analysis/034-research-effect-cli-config.md +1504 -0
  86. package/research/config-analysis/04-consolidated-task-candidates.md +277 -0
  87. package/research/config-docs/SUMMARY.md +357 -0
  88. package/research/config-docs/TEST-RESULTS.md +776 -0
  89. package/research/config-docs/TODO.md +542 -0
  90. package/research/config-docs/analysis.md +744 -0
  91. package/research/config-docs/fix-validation.md +502 -0
  92. package/research/config-docs/help-audit.md +264 -0
  93. package/research/config-docs/help-system-analysis.md +890 -0
  94. package/research/dogfood/consolidated-tool-evaluation.md +373 -0
  95. package/research/dogfood/strategy-a/a-synthesis.md +184 -0
  96. package/research/dogfood/strategy-a/a1-docs.md +226 -0
  97. package/research/dogfood/strategy-a/a2-amorphic.md +156 -0
  98. package/research/dogfood/strategy-a/a3-llm.md +164 -0
  99. package/research/dogfood/strategy-b/b-synthesis.md +228 -0
  100. package/research/dogfood/strategy-b/b1-architecture.md +207 -0
  101. package/research/dogfood/strategy-b/b2-gaps.md +258 -0
  102. package/research/dogfood/strategy-b/b3-workflows.md +250 -0
  103. package/research/dogfood/strategy-c/c-synthesis.md +451 -0
  104. package/research/dogfood/strategy-c/c1-explorer.md +192 -0
  105. package/research/dogfood/strategy-c/c2-diver-memory.md +145 -0
  106. package/research/dogfood/strategy-c/c3-diver-control.md +148 -0
  107. package/research/dogfood/strategy-c/c4-diver-failure.md +151 -0
  108. package/research/dogfood/strategy-c/c5-diver-execution.md +221 -0
  109. package/research/dogfood/strategy-c/c6-diver-org.md +221 -0
  110. package/research/effect-cli-error-handling.md +845 -0
  111. package/research/effect-errors-as-values.md +943 -0
  112. package/research/errors-task-analysis/00-consolidated-tasks.md +207 -0
  113. package/research/errors-task-analysis/cli-commands-analysis.md +909 -0
  114. package/research/errors-task-analysis/embeddings-analysis.md +709 -0
  115. package/research/errors-task-analysis/index-search-analysis.md +812 -0
  116. package/research/frontmatter/COMMENTS-ARE-SKIPPED.md +149 -0
  117. package/research/frontmatter/LLM-CODE-NAVIGATION.md +276 -0
  118. package/research/issue-review.md +603 -0
  119. package/research/llm-summarization/agent-cli-tools-2026.md +1082 -0
  120. package/research/llm-summarization/alternative-providers-2026.md +1428 -0
  121. package/research/llm-summarization/anthropic-2026.md +367 -0
  122. package/research/llm-summarization/claude-cli-integration.md +1706 -0
  123. package/research/llm-summarization/cli-integration-patterns.md +3155 -0
  124. package/research/llm-summarization/openai-2026.md +473 -0
  125. package/research/llm-summarization/openai-compatible-providers-2026.md +1022 -0
  126. package/research/llm-summarization/opencode-cli-integration.md +1552 -0
  127. package/research/llm-summarization/prompt-engineering-2026.md +1426 -0
  128. package/research/llm-summarization/prototype-results.md +56 -0
  129. package/research/llm-summarization/provider-switching-patterns-2026.md +2153 -0
  130. package/research/llm-summarization/typescript-llm-libraries-2026.md +2436 -0
  131. package/research/mdcontext-error-analysis.md +521 -0
  132. package/research/mdcontext-pudding/00-EXECUTIVE-SUMMARY.md +282 -0
  133. package/research/mdcontext-pudding/01-index-embed.md +956 -0
  134. package/research/mdcontext-pudding/02-search-COMMANDS.md +142 -0
  135. package/research/mdcontext-pudding/02-search-SUMMARY.md +146 -0
  136. package/research/mdcontext-pudding/02-search.md +970 -0
  137. package/research/mdcontext-pudding/03-context.md +779 -0
  138. package/research/mdcontext-pudding/04-navigation-and-analytics.md +803 -0
  139. package/research/mdcontext-pudding/04-tree.md +704 -0
  140. package/research/mdcontext-pudding/05-config.md +1038 -0
  141. package/research/mdcontext-pudding/06-links-summary.txt +87 -0
  142. package/research/mdcontext-pudding/06-links.md +679 -0
  143. package/research/mdcontext-pudding/07-stats.md +693 -0
  144. package/research/mdcontext-pudding/BUG-FIX-PLAN.md +388 -0
  145. package/research/mdcontext-pudding/P0-BUG-VALIDATION.md +167 -0
  146. package/research/mdcontext-pudding/README.md +168 -0
  147. package/research/mdcontext-pudding/TESTING-SUMMARY.md +128 -0
  148. package/research/npm_publish/011-npm-workflow-research-agent2.md +792 -0
  149. package/research/npm_publish/012-npm-workflow-research-agent1.md +530 -0
  150. package/research/npm_publish/013-npm-workflow-research-agent3.md +722 -0
  151. package/research/npm_publish/014-npm-workflow-synthesis.md +556 -0
  152. package/research/npm_publish/031-npm-workflow-task-analysis.md +134 -0
  153. package/research/research-quality-review.md +834 -0
  154. package/research/semantic-search/002-research-embedding-models.md +490 -0
  155. package/research/semantic-search/003-research-rag-alternatives.md +523 -0
  156. package/research/semantic-search/004-research-vector-search.md +841 -0
  157. package/research/semantic-search/032-research-semantic-search.md +427 -0
  158. package/research/semantic-search/embedding-text-analysis.md +156 -0
  159. package/research/semantic-search/multi-word-failure-reproduction.md +171 -0
  160. package/research/semantic-search/query-processing-analysis.md +207 -0
  161. package/research/semantic-search/root-cause-and-solution.md +114 -0
  162. package/research/semantic-search/threshold-validation-report.md +69 -0
  163. package/research/semantic-search/vector-search-analysis.md +63 -0
  164. package/research/task-management-2026/00-synthesis-recommendations.md +295 -0
  165. package/research/task-management-2026/01-ai-workflow-tools.md +416 -0
  166. package/research/task-management-2026/02-agent-framework-patterns.md +476 -0
  167. package/research/task-management-2026/03-lightweight-file-based.md +567 -0
  168. package/research/task-management-2026/04-established-tools-ai-features.md +541 -0
  169. package/research/task-management-2026/linear/01-core-features-workflow.md +771 -0
  170. package/research/task-management-2026/linear/02-api-integrations.md +930 -0
  171. package/research/task-management-2026/linear/03-ai-features.md +368 -0
  172. package/research/task-management-2026/linear/04-pricing-setup.md +205 -0
  173. package/research/task-management-2026/linear/05-usage-patterns-best-practices.md +605 -0
  174. package/research/test-path-issues.md +276 -0
  175. package/review/ALP-76/1-error-type-design.md +962 -0
  176. package/review/ALP-76/2-error-handling-patterns.md +906 -0
  177. package/review/ALP-76/3-error-presentation.md +624 -0
  178. package/review/ALP-76/4-test-coverage.md +625 -0
  179. package/review/ALP-76/5-migration-completeness.md +440 -0
  180. package/review/ALP-76/6-effect-best-practices.md +755 -0
  181. package/scripts/apply-branch-protection.sh +47 -0
  182. package/scripts/branch-protection-templates.json +79 -0
  183. package/scripts/prototype-summarization.ts +346 -0
  184. package/scripts/rebuild-hnswlib.js +58 -0
  185. package/scripts/setup-branch-protection.sh +64 -0
  186. package/src/__tests__/fixtures/semantic-search/multi-word-corpus/.mdcontext/active-provider.json +7 -0
  187. package/src/__tests__/fixtures/semantic-search/multi-word-corpus/.mdcontext/bm25.json +541 -0
  188. package/src/__tests__/fixtures/semantic-search/multi-word-corpus/.mdcontext/bm25.meta.json +5 -0
  189. package/src/__tests__/fixtures/semantic-search/multi-word-corpus/.mdcontext/config.json +8 -0
  190. package/src/__tests__/fixtures/semantic-search/multi-word-corpus/.mdcontext/embeddings/openai_text-embedding-3-small_512/vectors.bin +0 -0
  191. package/src/__tests__/fixtures/semantic-search/multi-word-corpus/.mdcontext/embeddings/openai_text-embedding-3-small_512/vectors.meta.bin +0 -0
  192. package/src/__tests__/fixtures/semantic-search/multi-word-corpus/.mdcontext/indexes/documents.json +60 -0
  193. package/src/__tests__/fixtures/semantic-search/multi-word-corpus/.mdcontext/indexes/links.json +13 -0
  194. package/src/__tests__/fixtures/semantic-search/multi-word-corpus/.mdcontext/indexes/sections.json +1197 -0
  195. package/src/__tests__/fixtures/semantic-search/multi-word-corpus/configuration-management.md +99 -0
  196. package/src/__tests__/fixtures/semantic-search/multi-word-corpus/distributed-systems.md +92 -0
  197. package/src/__tests__/fixtures/semantic-search/multi-word-corpus/error-handling.md +78 -0
  198. package/src/__tests__/fixtures/semantic-search/multi-word-corpus/failure-automation.md +55 -0
  199. package/src/__tests__/fixtures/semantic-search/multi-word-corpus/job-context.md +69 -0
  200. package/src/__tests__/fixtures/semantic-search/multi-word-corpus/process-orchestration.md +99 -0
  201. package/src/cli/argv-preprocessor.test.ts +210 -0
  202. package/src/cli/argv-preprocessor.ts +202 -0
  203. package/src/cli/cli.test.ts +627 -0
  204. package/src/cli/commands/backlinks.ts +54 -0
  205. package/src/cli/commands/config-cmd.ts +642 -0
  206. package/src/cli/commands/context.ts +285 -0
  207. package/src/cli/commands/duplicates.ts +122 -0
  208. package/src/cli/commands/embeddings.ts +529 -0
  209. package/src/cli/commands/index-cmd.ts +480 -0
  210. package/src/cli/commands/index.ts +16 -0
  211. package/src/cli/commands/links.ts +52 -0
  212. package/src/cli/commands/search.ts +1281 -0
  213. package/src/cli/commands/stats.ts +149 -0
  214. package/src/cli/commands/tree.ts +128 -0
  215. package/src/cli/config-layer.ts +176 -0
  216. package/src/cli/error-handler.test.ts +235 -0
  217. package/src/cli/error-handler.ts +655 -0
  218. package/src/cli/flag-schemas.ts +341 -0
  219. package/src/cli/help.ts +588 -0
  220. package/src/cli/index.ts +9 -0
  221. package/src/cli/main.ts +435 -0
  222. package/src/cli/options.ts +41 -0
  223. package/src/cli/shared-error-handling.ts +199 -0
  224. package/src/cli/typo-suggester.test.ts +105 -0
  225. package/src/cli/typo-suggester.ts +130 -0
  226. package/src/cli/utils.ts +259 -0
  227. package/src/config/file-provider.test.ts +320 -0
  228. package/src/config/file-provider.ts +273 -0
  229. package/src/config/index.ts +72 -0
  230. package/src/config/integration.test.ts +667 -0
  231. package/src/config/precedence.test.ts +277 -0
  232. package/src/config/precedence.ts +451 -0
  233. package/src/config/schema.test.ts +414 -0
  234. package/src/config/schema.ts +603 -0
  235. package/src/config/service.test.ts +320 -0
  236. package/src/config/service.ts +243 -0
  237. package/src/config/testing.test.ts +264 -0
  238. package/src/config/testing.ts +110 -0
  239. package/src/core/index.ts +1 -0
  240. package/src/core/types.ts +113 -0
  241. package/src/duplicates/detector.test.ts +183 -0
  242. package/src/duplicates/detector.ts +414 -0
  243. package/src/duplicates/index.ts +18 -0
  244. package/src/embeddings/embedding-namespace.test.ts +300 -0
  245. package/src/embeddings/embedding-namespace.ts +947 -0
  246. package/src/embeddings/heading-boost.test.ts +222 -0
  247. package/src/embeddings/hnsw-build-options.test.ts +198 -0
  248. package/src/embeddings/hyde.test.ts +272 -0
  249. package/src/embeddings/hyde.ts +264 -0
  250. package/src/embeddings/index.ts +10 -0
  251. package/src/embeddings/openai-provider.ts +414 -0
  252. package/src/embeddings/pricing.json +22 -0
  253. package/src/embeddings/provider-constants.ts +204 -0
  254. package/src/embeddings/provider-errors.test.ts +967 -0
  255. package/src/embeddings/provider-errors.ts +565 -0
  256. package/src/embeddings/provider-factory.test.ts +240 -0
  257. package/src/embeddings/provider-factory.ts +225 -0
  258. package/src/embeddings/provider-integration.test.ts +788 -0
  259. package/src/embeddings/query-preprocessing.test.ts +187 -0
  260. package/src/embeddings/semantic-search-threshold.test.ts +508 -0
  261. package/src/embeddings/semantic-search.ts +1270 -0
  262. package/src/embeddings/types.ts +359 -0
  263. package/src/embeddings/vector-store.ts +708 -0
  264. package/src/embeddings/voyage-provider.ts +313 -0
  265. package/src/errors/errors.test.ts +845 -0
  266. package/src/errors/index.ts +533 -0
  267. package/src/index/ignore-patterns.test.ts +354 -0
  268. package/src/index/ignore-patterns.ts +305 -0
  269. package/src/index/index.ts +4 -0
  270. package/src/index/indexer.ts +684 -0
  271. package/src/index/storage.ts +260 -0
  272. package/src/index/types.ts +147 -0
  273. package/src/index/watcher.ts +189 -0
  274. package/src/index.ts +30 -0
  275. package/src/integration/search-keyword.test.ts +678 -0
  276. package/src/mcp/server.ts +612 -0
  277. package/src/parser/index.ts +1 -0
  278. package/src/parser/parser.test.ts +291 -0
  279. package/src/parser/parser.ts +394 -0
  280. package/src/parser/section-filter.test.ts +277 -0
  281. package/src/parser/section-filter.ts +392 -0
  282. package/src/search/__tests__/hybrid-search.test.ts +650 -0
  283. package/src/search/bm25-store.ts +366 -0
  284. package/src/search/cross-encoder.test.ts +253 -0
  285. package/src/search/cross-encoder.ts +406 -0
  286. package/src/search/fuzzy-search.test.ts +419 -0
  287. package/src/search/fuzzy-search.ts +273 -0
  288. package/src/search/hybrid-search.ts +448 -0
  289. package/src/search/path-matcher.test.ts +276 -0
  290. package/src/search/path-matcher.ts +33 -0
  291. package/src/search/query-parser.test.ts +260 -0
  292. package/src/search/query-parser.ts +319 -0
  293. package/src/search/searcher.test.ts +280 -0
  294. package/src/search/searcher.ts +724 -0
  295. package/src/search/wink-bm25.d.ts +30 -0
  296. package/src/summarization/cli-providers/claude.ts +202 -0
  297. package/src/summarization/cli-providers/detection.test.ts +273 -0
  298. package/src/summarization/cli-providers/detection.ts +118 -0
  299. package/src/summarization/cli-providers/index.ts +8 -0
  300. package/src/summarization/cost.test.ts +139 -0
  301. package/src/summarization/cost.ts +102 -0
  302. package/src/summarization/error-handler.test.ts +127 -0
  303. package/src/summarization/error-handler.ts +111 -0
  304. package/src/summarization/index.ts +102 -0
  305. package/src/summarization/pipeline.test.ts +498 -0
  306. package/src/summarization/pipeline.ts +231 -0
  307. package/src/summarization/prompts.test.ts +269 -0
  308. package/src/summarization/prompts.ts +133 -0
  309. package/src/summarization/provider-factory.test.ts +396 -0
  310. package/src/summarization/provider-factory.ts +178 -0
  311. package/src/summarization/types.ts +184 -0
  312. package/src/summarize/budget-bugs.test.ts +620 -0
  313. package/src/summarize/formatters.ts +419 -0
  314. package/src/summarize/index.ts +20 -0
  315. package/src/summarize/summarizer.test.ts +275 -0
  316. package/src/summarize/summarizer.ts +597 -0
  317. package/src/summarize/verify-bugs.test.ts +238 -0
  318. package/src/types/huggingface-transformers.d.ts +66 -0
  319. package/src/utils/index.ts +1 -0
  320. package/src/utils/tokens.test.ts +142 -0
  321. package/src/utils/tokens.ts +186 -0
  322. package/tests/fixtures/cli/.mdcontext/active-provider.json +7 -0
  323. package/tests/fixtures/cli/.mdcontext/config.json +8 -0
  324. package/tests/fixtures/cli/.mdcontext/embeddings/openai_text-embedding-3-small_512/vectors.bin +0 -0
  325. package/tests/fixtures/cli/.mdcontext/embeddings/openai_text-embedding-3-small_512/vectors.meta.bin +0 -0
  326. package/tests/fixtures/cli/.mdcontext/indexes/documents.json +33 -0
  327. package/tests/fixtures/cli/.mdcontext/indexes/links.json +12 -0
  328. package/tests/fixtures/cli/.mdcontext/indexes/sections.json +247 -0
  329. package/tests/fixtures/cli/README.md +9 -0
  330. package/tests/fixtures/cli/api-reference.md +11 -0
  331. package/tests/fixtures/cli/getting-started.md +11 -0
  332. package/tests/integration/embed-index.test.ts +712 -0
  333. package/tests/integration/search-context.test.ts +469 -0
  334. package/tests/integration/search-semantic.test.ts +522 -0
  335. package/tsconfig.json +26 -0
  336. package/vitest.config.ts +16 -0
  337. package/vitest.setup.ts +12 -0
package/README.md CHANGED
@@ -1,19 +1,442 @@
1
1
  # mdcontext
2
2
 
3
- Intelligent markdown context extraction for LLMs.
3
+ **Give LLMs exactly the markdown they need. Nothing more.**
4
4
 
5
- **Coming soon.** This package is a placeholder for the upcoming release.
5
+ ```bash
6
+ QUICK REFERENCE
7
+ mdcontext index [path] Index markdown files (add --embed for semantic search)
8
+ mdcontext search <query> [path] Search by meaning or structure
9
+ mdcontext context <files...> Get LLM-ready summary
10
+ mdcontext tree [path|file] Show files or document outline
11
+ mdcontext config <command> Configuration management (init, show, check)
12
+ mdcontext links <file> Outgoing links
13
+ mdcontext backlinks <file> Incoming links
14
+ mdcontext stats [path] Index statistics
15
+ ```
6
16
 
7
- ## What is mdcontext?
17
+ ---
8
18
 
9
- mdcontext extracts structured, token-optimized context from markdown documentation for use with LLMs. Features include:
19
+ ## Why?
10
20
 
11
- - Semantic search with embeddings
12
- - Smart section extraction
13
- - Token counting and optimization
14
- - Context-aware chunking
21
+ Your documentation is 50K tokens of markdown. LLM context windows are limited. Raw markdown dumps waste tokens on structure, headers, and noise.
15
22
 
16
- ## Links
23
+ mdcontext extracts *structure* instead of dumping *text*. The result: **80%+ fewer tokens** while preserving everything needed to understand your docs.
17
24
 
18
- - Website: https://mdcontext.com
19
- - GitHub: https://github.com/mdcontext/mdcontext
25
+ ```bash
26
+ npm install -g mdcontext
27
+ mdcontext index . # Index your docs
28
+ mdcontext search "authentication" # Find by meaning
29
+ mdcontext context README.md # Get LLM-ready summary
30
+ ```
31
+
32
+ ---
33
+
34
+ ## Installation
35
+
36
+ ```bash
37
+ npm install -g mdcontext
38
+ ```
39
+
40
+ Requires Node.js 18+. Semantic search requires an embedding provider (OpenAI, Ollama, LM Studio, OpenRouter, or Voyage). See [docs/CONFIG.md](./docs/CONFIG.md#embedding-providers) for provider setup.
41
+
42
+ ---
43
+
44
+ ## Commands
45
+
46
+ ### index
47
+
48
+ Index markdown files. Run this first.
49
+
50
+ ```bash
51
+ mdcontext index # Index current directory (prompts for semantic)
52
+ mdcontext index ./docs # Index specific path
53
+ mdcontext index --embed # Also build embeddings for semantic search
54
+ mdcontext index --no-embed # Skip the semantic search prompt
55
+ mdcontext index --watch # Watch for changes
56
+ mdcontext index --force # Force full rebuild
57
+ ```
58
+
59
+ ### search
60
+
61
+ Search by meaning (semantic) or keyword (text match).
62
+
63
+ ```bash
64
+ mdcontext search "how to authenticate" # Semantic search (if embeddings exist)
65
+ mdcontext search -k "auth.*flow" # Keyword search (text match)
66
+ mdcontext search -n 5 "setup" # Limit to 5 results
67
+ mdcontext search --threshold 0.25 "deploy" # Lower threshold for more results
68
+ ```
69
+
70
+ #### Similarity Threshold
71
+
72
+ Semantic search filters results by similarity score (0-1). Default: **0.35** (35%).
73
+
74
+ - **0 results?** Content may exist below the threshold. Try `--threshold 0.25`
75
+ - **Typical scores**: Single-word queries score ~30-40%, multi-word phrases ~50-70%
76
+ - **Higher threshold** = stricter matching, fewer results
77
+ - **Lower threshold** = more results, possibly less relevant
78
+
79
+ ```bash
80
+ mdcontext search "authentication" # Uses default 0.35 threshold
81
+ mdcontext search --threshold 0.25 "auth" # Lower threshold for broad queries
82
+ mdcontext search --threshold 0.6 "specific" # Higher threshold for precision
83
+ ```
84
+
85
+ #### Context Lines
86
+
87
+ Show surrounding lines around matches (like grep):
88
+
89
+ ```bash
90
+ mdcontext search "checkpoint" -C 3 # 3 lines before AND after each match
91
+ mdcontext search "error" -B 2 -A 5 # 2 lines before, 5 lines after
92
+ ```
93
+
94
+ Auto-detection: Uses semantic search if embeddings exist and query looks like natural language. Use `-k` to force keyword search.
95
+
96
+ #### Advanced Search
97
+
98
+ **Quality Modes** - Control speed vs. accuracy tradeoff:
99
+ ```bash
100
+ mdcontext search "query" --quality fast # 40% faster, good recall
101
+ mdcontext search "query" -q thorough # Best recall, 30% slower
102
+ ```
103
+
104
+ **Re-ranking** - Boost precision by 20-35%:
105
+ ```bash
106
+ mdcontext search "query" --rerank # First use downloads 90MB model
107
+ npm install @huggingface/transformers # Required dependency
108
+ ```
109
+
110
+ **HyDE** - Better results for complex questions:
111
+ ```bash
112
+ mdcontext search "how to implement auth" --hyde # Expands query semantically
113
+ ```
114
+
115
+ #### AI Summarization
116
+
117
+ Generate AI-powered summaries of search results:
118
+
119
+ ```bash
120
+ mdcontext search "authentication" --summarize # Get AI summary of results
121
+ mdcontext search "error handling" -s --yes # Skip cost confirmation
122
+ mdcontext search "database" -s --stream # Stream output in real-time
123
+ ```
124
+
125
+ Uses your existing AI subscription (Claude Code, Copilot CLI) for free, or pay-per-use API providers. See [AI Summarization](#ai-summarization) for setup.
126
+
127
+ ### context
128
+
129
+ Get LLM-ready summaries from one or more files.
130
+
131
+ ```bash
132
+ mdcontext context README.md # Single file
133
+ mdcontext context README.md docs/api.md # Multiple files
134
+ mdcontext context docs/*.md # Glob patterns work
135
+ mdcontext context -t 500 README.md # Token budget
136
+ mdcontext context --brief README.md # Minimal output
137
+ mdcontext context --full README.md # Include full content
138
+ ```
139
+
140
+ #### Section Filtering
141
+
142
+ Extract specific sections instead of entire files:
143
+
144
+ ```bash
145
+ mdcontext context doc.md --sections # List available sections
146
+ mdcontext context doc.md --section "Setup" # Extract by section name
147
+ mdcontext context doc.md --section "2.1" # Extract by section number
148
+ mdcontext context doc.md --section "API*" # Glob pattern matching
149
+ mdcontext context doc.md --section "Config" --shallow # Top-level only (no nested subsections)
150
+ ```
151
+
152
+ The `--sections` flag shows all sections with their numbers and token counts, helping you target exactly what you need.
153
+
154
+ ### tree
155
+
156
+ Show file structure or document outline.
157
+
158
+ ```bash
159
+ mdcontext tree # List markdown files in current directory
160
+ mdcontext tree ./docs # List files in specific directory
161
+ mdcontext tree README.md # Show document outline (heading hierarchy)
162
+ ```
163
+
164
+ Auto-detection: Directory shows file list, file shows document outline.
165
+
166
+ ### links / backlinks
167
+
168
+ Analyze link relationships.
169
+
170
+ ```bash
171
+ mdcontext links README.md # What does this file link to?
172
+ mdcontext backlinks docs/api.md # What files link to this?
173
+ ```
174
+
175
+ ### stats
176
+
177
+ Show index statistics.
178
+
179
+ ```bash
180
+ mdcontext stats # Current directory
181
+ mdcontext stats ./docs # Specific path
182
+ ```
183
+
184
+ ---
185
+
186
+ ## Workflows
187
+
188
+ ### Before Adding Context to LLM
189
+
190
+ ```bash
191
+ mdcontext tree docs/ # See what's available
192
+ mdcontext tree docs/api.md # Check document structure
193
+ mdcontext context -t 500 docs/api.md # Get summary within token budget
194
+ ```
195
+
196
+ ### Finding Documentation
197
+
198
+ ```bash
199
+ mdcontext search "authentication" # By meaning
200
+ mdcontext search -k "Setup|Install" # By keyword pattern
201
+ ```
202
+
203
+ ### Setting Up Semantic Search
204
+
205
+ mdcontext supports multiple embedding providers for semantic search:
206
+
207
+ - **OpenAI** (default) - Cloud-based, requires API key
208
+ - **Ollama** - Free, local, daemon-based
209
+ - **LM Studio** - Free, local, GUI-based (development only)
210
+ - **OpenRouter** - Multi-provider gateway
211
+ - **Voyage** - Premium quality, competitive pricing
212
+
213
+ Quick start with OpenAI:
214
+ ```bash
215
+ export OPENAI_API_KEY=sk-...
216
+ mdcontext index --embed # Build embeddings
217
+ mdcontext search "how to deploy" # Now works semantically
218
+ ```
219
+
220
+ Using Ollama (free, local):
221
+ ```bash
222
+ ollama serve && ollama pull nomic-embed-text
223
+ mdcontext index --embed --provider ollama --provider-model nomic-embed-text
224
+ ```
225
+
226
+ See [docs/CONFIG.md](./docs/CONFIG.md#embedding-providers) for complete provider setup, comparison, and configuration options.
227
+
228
+ ---
229
+
230
+ ## MCP Integration
231
+
232
+ For Claude Desktop, add to `~/Library/Application Support/Claude/claude_desktop_config.json`:
233
+
234
+ ```json
235
+ {
236
+ "mcpServers": {
237
+ "mdcontext": {
238
+ "command": "mdcontext-mcp",
239
+ "args": []
240
+ }
241
+ }
242
+ }
243
+ ```
244
+
245
+ For Claude Code, add to `.claude/settings.json`:
246
+
247
+ ```json
248
+ {
249
+ "mcpServers": {
250
+ "mdcontext": {
251
+ "command": "mdcontext-mcp",
252
+ "args": []
253
+ }
254
+ }
255
+ }
256
+ ```
257
+
258
+ ### MCP Tools
259
+
260
+ | Tool | Description |
261
+ |------|-------------|
262
+ | `md_search` | Semantic search across indexed docs |
263
+ | `md_context` | Get LLM-ready summary for a file |
264
+ | `md_structure` | Get document outline |
265
+
266
+ ---
267
+
268
+ ## Configuration
269
+
270
+ mdcontext supports a layered configuration system for persistent settings:
271
+
272
+ ```bash
273
+ # Create a config file
274
+ mdcontext config init
275
+
276
+ # Check your configuration
277
+ mdcontext config check
278
+
279
+ # Customize settings in mdcontext.config.js
280
+ ```
281
+
282
+ ```javascript
283
+ // mdcontext.config.js
284
+ /** @type {import('mdcontext').PartialMdContextConfig} */
285
+ export default {
286
+ index: {
287
+ excludePatterns: ['node_modules', '.git', 'dist', 'vendor']
288
+ },
289
+ search: {
290
+ defaultLimit: 20
291
+ }
292
+ }
293
+ ```
294
+
295
+ Configuration precedence: CLI flags > Environment variables > Config file > Defaults
296
+
297
+ **See [docs/CONFIG.md](./docs/CONFIG.md) for the complete configuration reference.**
298
+
299
+ ### Index Location
300
+
301
+ Indexes are stored in `.mdcontext/` in your project root:
302
+
303
+ ```
304
+ .mdcontext/
305
+ indexes/
306
+ documents.json # Document metadata
307
+ sections.json # Section index
308
+ links.json # Link graph
309
+ vectors.bin # Embeddings (if enabled)
310
+ ```
311
+
312
+ ### Environment Variables
313
+
314
+ | Variable | Description |
315
+ |----------|-------------|
316
+ | `OPENAI_API_KEY` | Required for OpenAI semantic search (default provider) |
317
+ | `OPENROUTER_API_KEY` | Required for OpenRouter semantic search |
318
+ | `MDCONTEXT_*` | Configuration overrides (see [CONFIG.md](./docs/CONFIG.md)) |
319
+
320
+ ---
321
+
322
+ ## AI Summarization
323
+
324
+ Transform search results into actionable insights using AI.
325
+
326
+ ### Quick Start
327
+
328
+ ```bash
329
+ # Basic usage (auto-detects installed CLI tools)
330
+ mdcontext search "authentication" --summarize
331
+
332
+ # Skip confirmation for scripts
333
+ mdcontext search "error handling" --summarize --yes
334
+
335
+ # Stream output in real-time
336
+ mdcontext search "database" --summarize --stream
337
+ ```
338
+
339
+ ### First-Time Setup
340
+
341
+ On first use, mdcontext auto-detects available providers:
342
+
343
+ ```
344
+ Using claude (subscription - FREE)
345
+
346
+ --- AI Summary ---
347
+
348
+ Based on the search results, here are the key findings...
349
+ ```
350
+
351
+ ### Providers
352
+
353
+ **CLI Providers (FREE with subscription):**
354
+
355
+ | Provider | Command | Subscription Required |
356
+ |----------|---------|----------------------|
357
+ | Claude Code | `claude` | Claude Pro/Team |
358
+ | GitHub Copilot | `copilot` | Copilot subscription |
359
+ | OpenCode | `opencode` | BYOK (any provider) |
360
+
361
+ **API Providers (pay-per-use):**
362
+
363
+ | Provider | Cost per 1M tokens | Notes |
364
+ |----------|-------------------|-------|
365
+ | DeepSeek | $0.14-0.56 | Ultra-cheap |
366
+ | Qwen | $0.03-0.12 | Budget option |
367
+ | Google Gemini | $0.30-2.50 | Balanced |
368
+ | OpenAI GPT | $1.75-14.00 | Premium |
369
+ | Anthropic Claude | $3.00-15.00 | Premium |
370
+
371
+ ### Configuration
372
+
373
+ **Option 1: Auto-detection (recommended)**
374
+
375
+ Just run `--summarize` - mdcontext finds installed CLI tools automatically.
376
+
377
+ **Option 2: Config file**
378
+
379
+ ```javascript
380
+ // mdcontext.config.js
381
+ /** @type {import('mdcontext').PartialMdContextConfig} */
382
+ export default {
383
+ aiSummarization: {
384
+ mode: 'cli', // 'cli' (free) or 'api' (paid)
385
+ provider: 'claude', // Provider name
386
+ },
387
+ }
388
+ ```
389
+
390
+ **Option 3: Environment variables**
391
+
392
+ ```bash
393
+ export MDCONTEXT_AISUMMARIZATION_MODE=api
394
+ export MDCONTEXT_AISUMMARIZATION_PROVIDER=deepseek
395
+ export DEEPSEEK_API_KEY=sk-...
396
+ ```
397
+
398
+ ### CLI Flags
399
+
400
+ | Flag | Short | Description |
401
+ |------|-------|-------------|
402
+ | `--summarize` | `-s` | Enable AI summarization |
403
+ | `--yes` | `-y` | Skip cost confirmation |
404
+ | `--stream` | | Stream output in real-time |
405
+
406
+ ### Cost Transparency
407
+
408
+ API providers show cost estimates before proceeding:
409
+
410
+ ```
411
+ Cost Estimate:
412
+ Provider: deepseek
413
+ Input tokens: ~2,500
414
+ Output tokens: ~500
415
+ Estimated cost: $0.0007
416
+
417
+ Continue with summarization? [Y/n]:
418
+ ```
419
+
420
+ CLI providers show free status:
421
+
422
+ ```
423
+ Using claude (subscription - FREE)
424
+ ```
425
+
426
+ See [docs/summarization.md](./docs/summarization.md) for architecture details and troubleshooting.
427
+
428
+ ---
429
+
430
+ ## Performance
431
+
432
+ | Metric | Raw Markdown | mdcontext | Savings |
433
+ |--------|--------------|---------|---------|
434
+ | Context for single doc | 2,500 tokens | 400 tokens | **84%** |
435
+ | Context for 10 docs | 25,000 tokens | 4,000 tokens | **84%** |
436
+ | Search latency | N/A | <100ms | - |
437
+
438
+ ---
439
+
440
+ ## License
441
+
442
+ MIT
package/biome.json ADDED
@@ -0,0 +1,36 @@
1
+ {
2
+ "$schema": "https://biomejs.dev/schemas/2.3.12/schema.json",
3
+ "assist": {
4
+ "actions": {
5
+ "source": {
6
+ "organizeImports": "on"
7
+ }
8
+ }
9
+ },
10
+ "linter": {
11
+ "enabled": true,
12
+ "rules": {
13
+ "recommended": true,
14
+ "suspicious": {
15
+ "noExplicitAny": "off"
16
+ },
17
+ "style": {
18
+ "noNonNullAssertion": "off"
19
+ }
20
+ }
21
+ },
22
+ "formatter": {
23
+ "enabled": true,
24
+ "indentStyle": "space",
25
+ "indentWidth": 2
26
+ },
27
+ "javascript": {
28
+ "formatter": {
29
+ "semicolons": "asNeeded",
30
+ "quoteStyle": "single"
31
+ }
32
+ },
33
+ "files": {
34
+ "includes": ["src/**", "tests/**", "*.json", "*.ts"]
35
+ }
36
+ }
@@ -0,0 +1,14 @@
1
+ version: "0.2"
2
+ ignorePaths: []
3
+ dictionaryDefinitions: []
4
+ dictionaries: []
5
+ words:
6
+ - attw
7
+ - backlinks
8
+ - Hnsw
9
+ - hnswlib
10
+ - mdcontext
11
+ - modelcontextprotocol
12
+ - tiktoken
13
+ ignoreWords: []
14
+ import: []