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.
- package/.changeset/README.md +28 -0
- package/.changeset/config.json +11 -0
- package/.claude/settings.local.json +25 -0
- package/.github/workflows/ci.yml +83 -0
- package/.github/workflows/claude-code-review.yml +44 -0
- package/.github/workflows/claude.yml +85 -0
- package/.github/workflows/release.yml +113 -0
- package/.tldrignore +112 -0
- package/BACKLOG.md +338 -0
- package/CONTRIBUTING.md +186 -0
- package/NOTES/NOTES +44 -0
- package/README.md +434 -11
- package/biome.json +36 -0
- package/cspell.config.yaml +14 -0
- package/dist/chunk-23UPXDNL.js +3044 -0
- package/dist/chunk-2W7MO2DL.js +1366 -0
- package/dist/chunk-3NUAZGMA.js +1689 -0
- package/dist/chunk-7TOWB2XB.js +366 -0
- package/dist/chunk-7XOTOADQ.js +3065 -0
- package/dist/chunk-AH2PDM2K.js +3042 -0
- package/dist/chunk-BNXWSZ63.js +3742 -0
- package/dist/chunk-BTL5DJVU.js +3222 -0
- package/dist/chunk-HDHYG7E4.js +104 -0
- package/dist/chunk-HLR4KZBP.js +3234 -0
- package/dist/chunk-IP3FRFEB.js +1045 -0
- package/dist/chunk-KHU56VDO.js +3042 -0
- package/dist/chunk-KRYIFLQR.js +88 -0
- package/dist/chunk-LBSDNLEM.js +287 -0
- package/dist/chunk-MNTQ7HCP.js +2643 -0
- package/dist/chunk-MUJELQQ6.js +1387 -0
- package/dist/chunk-MXJGMSLV.js +2199 -0
- package/dist/chunk-N6QJGC3Z.js +2636 -0
- package/dist/chunk-OBELGBPM.js +1713 -0
- package/dist/chunk-OT7R5XTA.js +3192 -0
- package/dist/chunk-P7X4RA2T.js +106 -0
- package/dist/chunk-PIDUQNC2.js +3185 -0
- package/dist/chunk-POGCDIH4.js +3187 -0
- package/dist/chunk-PSIEOQGZ.js +3043 -0
- package/dist/chunk-PVRT3IHA.js +3238 -0
- package/dist/chunk-QNN4TT23.js +1430 -0
- package/dist/chunk-RE3R45RJ.js +3042 -0
- package/dist/chunk-S7E6TFX6.js +803 -0
- package/dist/chunk-SG6GLU4U.js +1378 -0
- package/dist/chunk-SJCDV2ST.js +274 -0
- package/dist/chunk-SYE5XLF3.js +104 -0
- package/dist/chunk-T5VLYBZD.js +103 -0
- package/dist/chunk-TOQB7VWU.js +3238 -0
- package/dist/chunk-VFNMZ4ZQ.js +3228 -0
- package/dist/chunk-VVTGZNBT.js +1629 -0
- package/dist/chunk-W7Q4RFEV.js +104 -0
- package/dist/chunk-XTYYVRLO.js +3190 -0
- package/dist/chunk-Y6MDYVJD.js +3063 -0
- package/dist/cli/main.d.ts +1 -0
- package/dist/cli/main.js +5458 -0
- package/dist/index.d.ts +653 -0
- package/dist/index.js +79 -0
- package/dist/mcp/server.d.ts +1 -0
- package/dist/mcp/server.js +472 -0
- package/dist/schema-BAWSG7KY.js +22 -0
- package/dist/schema-E3QUPL26.js +20 -0
- package/dist/schema-EHL7WUT6.js +20 -0
- package/docs/019-USAGE.md +625 -0
- package/docs/020-current-implementation.md +364 -0
- package/docs/021-DOGFOODING-FINDINGS.md +175 -0
- package/docs/BACKLOG.md +80 -0
- package/docs/CONFIG.md +1123 -0
- package/docs/DESIGN.md +439 -0
- package/docs/ERRORS.md +383 -0
- package/docs/PROJECT.md +88 -0
- package/docs/ROADMAP.md +407 -0
- package/docs/summarization.md +320 -0
- package/docs/test-links.md +9 -0
- package/justfile +40 -0
- package/package.json +74 -9
- package/pnpm-workspace.yaml +5 -0
- package/research/INDEX.md +315 -0
- package/research/code-review/README.md +90 -0
- package/research/code-review/cli-error-handling-review.md +979 -0
- package/research/code-review/code-review-validation-report.md +464 -0
- package/research/code-review/main-ts-review.md +1128 -0
- package/research/config-analysis/01-current-implementation.md +470 -0
- package/research/config-analysis/02-strategy-recommendation.md +428 -0
- package/research/config-analysis/03-task-candidates.md +715 -0
- package/research/config-analysis/033-research-configuration-management.md +828 -0
- package/research/config-analysis/034-research-effect-cli-config.md +1504 -0
- package/research/config-analysis/04-consolidated-task-candidates.md +277 -0
- package/research/config-docs/SUMMARY.md +357 -0
- package/research/config-docs/TEST-RESULTS.md +776 -0
- package/research/config-docs/TODO.md +542 -0
- package/research/config-docs/analysis.md +744 -0
- package/research/config-docs/fix-validation.md +502 -0
- package/research/config-docs/help-audit.md +264 -0
- package/research/config-docs/help-system-analysis.md +890 -0
- package/research/dogfood/consolidated-tool-evaluation.md +373 -0
- package/research/dogfood/strategy-a/a-synthesis.md +184 -0
- package/research/dogfood/strategy-a/a1-docs.md +226 -0
- package/research/dogfood/strategy-a/a2-amorphic.md +156 -0
- package/research/dogfood/strategy-a/a3-llm.md +164 -0
- package/research/dogfood/strategy-b/b-synthesis.md +228 -0
- package/research/dogfood/strategy-b/b1-architecture.md +207 -0
- package/research/dogfood/strategy-b/b2-gaps.md +258 -0
- package/research/dogfood/strategy-b/b3-workflows.md +250 -0
- package/research/dogfood/strategy-c/c-synthesis.md +451 -0
- package/research/dogfood/strategy-c/c1-explorer.md +192 -0
- package/research/dogfood/strategy-c/c2-diver-memory.md +145 -0
- package/research/dogfood/strategy-c/c3-diver-control.md +148 -0
- package/research/dogfood/strategy-c/c4-diver-failure.md +151 -0
- package/research/dogfood/strategy-c/c5-diver-execution.md +221 -0
- package/research/dogfood/strategy-c/c6-diver-org.md +221 -0
- package/research/effect-cli-error-handling.md +845 -0
- package/research/effect-errors-as-values.md +943 -0
- package/research/errors-task-analysis/00-consolidated-tasks.md +207 -0
- package/research/errors-task-analysis/cli-commands-analysis.md +909 -0
- package/research/errors-task-analysis/embeddings-analysis.md +709 -0
- package/research/errors-task-analysis/index-search-analysis.md +812 -0
- package/research/frontmatter/COMMENTS-ARE-SKIPPED.md +149 -0
- package/research/frontmatter/LLM-CODE-NAVIGATION.md +276 -0
- package/research/issue-review.md +603 -0
- package/research/llm-summarization/agent-cli-tools-2026.md +1082 -0
- package/research/llm-summarization/alternative-providers-2026.md +1428 -0
- package/research/llm-summarization/anthropic-2026.md +367 -0
- package/research/llm-summarization/claude-cli-integration.md +1706 -0
- package/research/llm-summarization/cli-integration-patterns.md +3155 -0
- package/research/llm-summarization/openai-2026.md +473 -0
- package/research/llm-summarization/openai-compatible-providers-2026.md +1022 -0
- package/research/llm-summarization/opencode-cli-integration.md +1552 -0
- package/research/llm-summarization/prompt-engineering-2026.md +1426 -0
- package/research/llm-summarization/prototype-results.md +56 -0
- package/research/llm-summarization/provider-switching-patterns-2026.md +2153 -0
- package/research/llm-summarization/typescript-llm-libraries-2026.md +2436 -0
- package/research/mdcontext-error-analysis.md +521 -0
- package/research/mdcontext-pudding/00-EXECUTIVE-SUMMARY.md +282 -0
- package/research/mdcontext-pudding/01-index-embed.md +956 -0
- package/research/mdcontext-pudding/02-search-COMMANDS.md +142 -0
- package/research/mdcontext-pudding/02-search-SUMMARY.md +146 -0
- package/research/mdcontext-pudding/02-search.md +970 -0
- package/research/mdcontext-pudding/03-context.md +779 -0
- package/research/mdcontext-pudding/04-navigation-and-analytics.md +803 -0
- package/research/mdcontext-pudding/04-tree.md +704 -0
- package/research/mdcontext-pudding/05-config.md +1038 -0
- package/research/mdcontext-pudding/06-links-summary.txt +87 -0
- package/research/mdcontext-pudding/06-links.md +679 -0
- package/research/mdcontext-pudding/07-stats.md +693 -0
- package/research/mdcontext-pudding/BUG-FIX-PLAN.md +388 -0
- package/research/mdcontext-pudding/P0-BUG-VALIDATION.md +167 -0
- package/research/mdcontext-pudding/README.md +168 -0
- package/research/mdcontext-pudding/TESTING-SUMMARY.md +128 -0
- package/research/npm_publish/011-npm-workflow-research-agent2.md +792 -0
- package/research/npm_publish/012-npm-workflow-research-agent1.md +530 -0
- package/research/npm_publish/013-npm-workflow-research-agent3.md +722 -0
- package/research/npm_publish/014-npm-workflow-synthesis.md +556 -0
- package/research/npm_publish/031-npm-workflow-task-analysis.md +134 -0
- package/research/research-quality-review.md +834 -0
- package/research/semantic-search/002-research-embedding-models.md +490 -0
- package/research/semantic-search/003-research-rag-alternatives.md +523 -0
- package/research/semantic-search/004-research-vector-search.md +841 -0
- package/research/semantic-search/032-research-semantic-search.md +427 -0
- package/research/semantic-search/embedding-text-analysis.md +156 -0
- package/research/semantic-search/multi-word-failure-reproduction.md +171 -0
- package/research/semantic-search/query-processing-analysis.md +207 -0
- package/research/semantic-search/root-cause-and-solution.md +114 -0
- package/research/semantic-search/threshold-validation-report.md +69 -0
- package/research/semantic-search/vector-search-analysis.md +63 -0
- package/research/task-management-2026/00-synthesis-recommendations.md +295 -0
- package/research/task-management-2026/01-ai-workflow-tools.md +416 -0
- package/research/task-management-2026/02-agent-framework-patterns.md +476 -0
- package/research/task-management-2026/03-lightweight-file-based.md +567 -0
- package/research/task-management-2026/04-established-tools-ai-features.md +541 -0
- package/research/task-management-2026/linear/01-core-features-workflow.md +771 -0
- package/research/task-management-2026/linear/02-api-integrations.md +930 -0
- package/research/task-management-2026/linear/03-ai-features.md +368 -0
- package/research/task-management-2026/linear/04-pricing-setup.md +205 -0
- package/research/task-management-2026/linear/05-usage-patterns-best-practices.md +605 -0
- package/research/test-path-issues.md +276 -0
- package/review/ALP-76/1-error-type-design.md +962 -0
- package/review/ALP-76/2-error-handling-patterns.md +906 -0
- package/review/ALP-76/3-error-presentation.md +624 -0
- package/review/ALP-76/4-test-coverage.md +625 -0
- package/review/ALP-76/5-migration-completeness.md +440 -0
- package/review/ALP-76/6-effect-best-practices.md +755 -0
- package/scripts/apply-branch-protection.sh +47 -0
- package/scripts/branch-protection-templates.json +79 -0
- package/scripts/prototype-summarization.ts +346 -0
- package/scripts/rebuild-hnswlib.js +58 -0
- package/scripts/setup-branch-protection.sh +64 -0
- package/src/__tests__/fixtures/semantic-search/multi-word-corpus/.mdcontext/active-provider.json +7 -0
- package/src/__tests__/fixtures/semantic-search/multi-word-corpus/.mdcontext/bm25.json +541 -0
- package/src/__tests__/fixtures/semantic-search/multi-word-corpus/.mdcontext/bm25.meta.json +5 -0
- package/src/__tests__/fixtures/semantic-search/multi-word-corpus/.mdcontext/config.json +8 -0
- package/src/__tests__/fixtures/semantic-search/multi-word-corpus/.mdcontext/embeddings/openai_text-embedding-3-small_512/vectors.bin +0 -0
- package/src/__tests__/fixtures/semantic-search/multi-word-corpus/.mdcontext/embeddings/openai_text-embedding-3-small_512/vectors.meta.bin +0 -0
- package/src/__tests__/fixtures/semantic-search/multi-word-corpus/.mdcontext/indexes/documents.json +60 -0
- package/src/__tests__/fixtures/semantic-search/multi-word-corpus/.mdcontext/indexes/links.json +13 -0
- package/src/__tests__/fixtures/semantic-search/multi-word-corpus/.mdcontext/indexes/sections.json +1197 -0
- package/src/__tests__/fixtures/semantic-search/multi-word-corpus/configuration-management.md +99 -0
- package/src/__tests__/fixtures/semantic-search/multi-word-corpus/distributed-systems.md +92 -0
- package/src/__tests__/fixtures/semantic-search/multi-word-corpus/error-handling.md +78 -0
- package/src/__tests__/fixtures/semantic-search/multi-word-corpus/failure-automation.md +55 -0
- package/src/__tests__/fixtures/semantic-search/multi-word-corpus/job-context.md +69 -0
- package/src/__tests__/fixtures/semantic-search/multi-word-corpus/process-orchestration.md +99 -0
- package/src/cli/argv-preprocessor.test.ts +210 -0
- package/src/cli/argv-preprocessor.ts +202 -0
- package/src/cli/cli.test.ts +627 -0
- package/src/cli/commands/backlinks.ts +54 -0
- package/src/cli/commands/config-cmd.ts +642 -0
- package/src/cli/commands/context.ts +285 -0
- package/src/cli/commands/duplicates.ts +122 -0
- package/src/cli/commands/embeddings.ts +529 -0
- package/src/cli/commands/index-cmd.ts +480 -0
- package/src/cli/commands/index.ts +16 -0
- package/src/cli/commands/links.ts +52 -0
- package/src/cli/commands/search.ts +1281 -0
- package/src/cli/commands/stats.ts +149 -0
- package/src/cli/commands/tree.ts +128 -0
- package/src/cli/config-layer.ts +176 -0
- package/src/cli/error-handler.test.ts +235 -0
- package/src/cli/error-handler.ts +655 -0
- package/src/cli/flag-schemas.ts +341 -0
- package/src/cli/help.ts +588 -0
- package/src/cli/index.ts +9 -0
- package/src/cli/main.ts +435 -0
- package/src/cli/options.ts +41 -0
- package/src/cli/shared-error-handling.ts +199 -0
- package/src/cli/typo-suggester.test.ts +105 -0
- package/src/cli/typo-suggester.ts +130 -0
- package/src/cli/utils.ts +259 -0
- package/src/config/file-provider.test.ts +320 -0
- package/src/config/file-provider.ts +273 -0
- package/src/config/index.ts +72 -0
- package/src/config/integration.test.ts +667 -0
- package/src/config/precedence.test.ts +277 -0
- package/src/config/precedence.ts +451 -0
- package/src/config/schema.test.ts +414 -0
- package/src/config/schema.ts +603 -0
- package/src/config/service.test.ts +320 -0
- package/src/config/service.ts +243 -0
- package/src/config/testing.test.ts +264 -0
- package/src/config/testing.ts +110 -0
- package/src/core/index.ts +1 -0
- package/src/core/types.ts +113 -0
- package/src/duplicates/detector.test.ts +183 -0
- package/src/duplicates/detector.ts +414 -0
- package/src/duplicates/index.ts +18 -0
- package/src/embeddings/embedding-namespace.test.ts +300 -0
- package/src/embeddings/embedding-namespace.ts +947 -0
- package/src/embeddings/heading-boost.test.ts +222 -0
- package/src/embeddings/hnsw-build-options.test.ts +198 -0
- package/src/embeddings/hyde.test.ts +272 -0
- package/src/embeddings/hyde.ts +264 -0
- package/src/embeddings/index.ts +10 -0
- package/src/embeddings/openai-provider.ts +414 -0
- package/src/embeddings/pricing.json +22 -0
- package/src/embeddings/provider-constants.ts +204 -0
- package/src/embeddings/provider-errors.test.ts +967 -0
- package/src/embeddings/provider-errors.ts +565 -0
- package/src/embeddings/provider-factory.test.ts +240 -0
- package/src/embeddings/provider-factory.ts +225 -0
- package/src/embeddings/provider-integration.test.ts +788 -0
- package/src/embeddings/query-preprocessing.test.ts +187 -0
- package/src/embeddings/semantic-search-threshold.test.ts +508 -0
- package/src/embeddings/semantic-search.ts +1270 -0
- package/src/embeddings/types.ts +359 -0
- package/src/embeddings/vector-store.ts +708 -0
- package/src/embeddings/voyage-provider.ts +313 -0
- package/src/errors/errors.test.ts +845 -0
- package/src/errors/index.ts +533 -0
- package/src/index/ignore-patterns.test.ts +354 -0
- package/src/index/ignore-patterns.ts +305 -0
- package/src/index/index.ts +4 -0
- package/src/index/indexer.ts +684 -0
- package/src/index/storage.ts +260 -0
- package/src/index/types.ts +147 -0
- package/src/index/watcher.ts +189 -0
- package/src/index.ts +30 -0
- package/src/integration/search-keyword.test.ts +678 -0
- package/src/mcp/server.ts +612 -0
- package/src/parser/index.ts +1 -0
- package/src/parser/parser.test.ts +291 -0
- package/src/parser/parser.ts +394 -0
- package/src/parser/section-filter.test.ts +277 -0
- package/src/parser/section-filter.ts +392 -0
- package/src/search/__tests__/hybrid-search.test.ts +650 -0
- package/src/search/bm25-store.ts +366 -0
- package/src/search/cross-encoder.test.ts +253 -0
- package/src/search/cross-encoder.ts +406 -0
- package/src/search/fuzzy-search.test.ts +419 -0
- package/src/search/fuzzy-search.ts +273 -0
- package/src/search/hybrid-search.ts +448 -0
- package/src/search/path-matcher.test.ts +276 -0
- package/src/search/path-matcher.ts +33 -0
- package/src/search/query-parser.test.ts +260 -0
- package/src/search/query-parser.ts +319 -0
- package/src/search/searcher.test.ts +280 -0
- package/src/search/searcher.ts +724 -0
- package/src/search/wink-bm25.d.ts +30 -0
- package/src/summarization/cli-providers/claude.ts +202 -0
- package/src/summarization/cli-providers/detection.test.ts +273 -0
- package/src/summarization/cli-providers/detection.ts +118 -0
- package/src/summarization/cli-providers/index.ts +8 -0
- package/src/summarization/cost.test.ts +139 -0
- package/src/summarization/cost.ts +102 -0
- package/src/summarization/error-handler.test.ts +127 -0
- package/src/summarization/error-handler.ts +111 -0
- package/src/summarization/index.ts +102 -0
- package/src/summarization/pipeline.test.ts +498 -0
- package/src/summarization/pipeline.ts +231 -0
- package/src/summarization/prompts.test.ts +269 -0
- package/src/summarization/prompts.ts +133 -0
- package/src/summarization/provider-factory.test.ts +396 -0
- package/src/summarization/provider-factory.ts +178 -0
- package/src/summarization/types.ts +184 -0
- package/src/summarize/budget-bugs.test.ts +620 -0
- package/src/summarize/formatters.ts +419 -0
- package/src/summarize/index.ts +20 -0
- package/src/summarize/summarizer.test.ts +275 -0
- package/src/summarize/summarizer.ts +597 -0
- package/src/summarize/verify-bugs.test.ts +238 -0
- package/src/types/huggingface-transformers.d.ts +66 -0
- package/src/utils/index.ts +1 -0
- package/src/utils/tokens.test.ts +142 -0
- package/src/utils/tokens.ts +186 -0
- package/tests/fixtures/cli/.mdcontext/active-provider.json +7 -0
- package/tests/fixtures/cli/.mdcontext/config.json +8 -0
- package/tests/fixtures/cli/.mdcontext/embeddings/openai_text-embedding-3-small_512/vectors.bin +0 -0
- package/tests/fixtures/cli/.mdcontext/embeddings/openai_text-embedding-3-small_512/vectors.meta.bin +0 -0
- package/tests/fixtures/cli/.mdcontext/indexes/documents.json +33 -0
- package/tests/fixtures/cli/.mdcontext/indexes/links.json +12 -0
- package/tests/fixtures/cli/.mdcontext/indexes/sections.json +247 -0
- package/tests/fixtures/cli/README.md +9 -0
- package/tests/fixtures/cli/api-reference.md +11 -0
- package/tests/fixtures/cli/getting-started.md +11 -0
- package/tests/integration/embed-index.test.ts +712 -0
- package/tests/integration/search-context.test.ts +469 -0
- package/tests/integration/search-semantic.test.ts +522 -0
- package/tsconfig.json +26 -0
- package/vitest.config.ts +16 -0
- package/vitest.setup.ts +12 -0
package/README.md
CHANGED
|
@@ -1,19 +1,442 @@
|
|
|
1
1
|
# mdcontext
|
|
2
2
|
|
|
3
|
-
|
|
3
|
+
**Give LLMs exactly the markdown they need. Nothing more.**
|
|
4
4
|
|
|
5
|
-
|
|
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
|
-
|
|
17
|
+
---
|
|
8
18
|
|
|
9
|
-
|
|
19
|
+
## Why?
|
|
10
20
|
|
|
11
|
-
|
|
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
|
-
|
|
23
|
+
mdcontext extracts *structure* instead of dumping *text*. The result: **80%+ fewer tokens** while preserving everything needed to understand your docs.
|
|
17
24
|
|
|
18
|
-
|
|
19
|
-
-
|
|
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
|
+
}
|