mdcontext 0.1.0 → 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/config.json +9 -9
- package/.claude/settings.local.json +25 -0
- package/.github/workflows/claude-code-review.yml +44 -0
- package/.github/workflows/claude.yml +85 -0
- package/CONTRIBUTING.md +186 -0
- package/NOTES/NOTES +44 -0
- package/README.md +206 -3
- package/biome.json +1 -1
- 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 +85 -89
- 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 +718 -657
- 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 +1533 -1423
- 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.js +4072 -629
- package/dist/index.d.ts +420 -33
- package/dist/index.js +8 -15
- package/dist/mcp/server.js +103 -7
- 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 +44 -5
- package/docs/020-current-implementation.md +8 -8
- package/docs/021-DOGFOODING-FINDINGS.md +1 -1
- package/docs/CONFIG.md +1123 -0
- package/docs/ERRORS.md +383 -0
- package/docs/summarization.md +320 -0
- package/justfile +40 -0
- package/package.json +39 -33
- 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-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/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-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/research-quality-review.md +834 -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/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 +32 -37
- 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 +2 -2
- package/src/cli/cli.test.ts +230 -33
- package/src/cli/commands/config-cmd.ts +642 -0
- package/src/cli/commands/context.ts +97 -9
- package/src/cli/commands/duplicates.ts +122 -0
- package/src/cli/commands/embeddings.ts +529 -0
- package/src/cli/commands/index-cmd.ts +210 -30
- package/src/cli/commands/index.ts +3 -0
- package/src/cli/commands/search.ts +894 -64
- package/src/cli/commands/stats.ts +3 -0
- package/src/cli/commands/tree.ts +26 -5
- 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 +66 -0
- package/src/cli/help.ts +209 -7
- package/src/cli/main.ts +348 -58
- package/src/cli/options.ts +10 -0
- package/src/cli/shared-error-handling.ts +199 -0
- package/src/cli/utils.ts +150 -17
- 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/types.ts +6 -33
- 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 +2 -0
- package/src/embeddings/openai-provider.ts +332 -83
- 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 +780 -93
- package/src/embeddings/types.ts +293 -16
- package/src/embeddings/vector-store.ts +486 -77
- 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/indexer.ts +286 -48
- package/src/index/storage.ts +94 -30
- package/src/index/types.ts +40 -2
- package/src/index/watcher.ts +67 -9
- package/src/index.ts +22 -0
- package/src/integration/search-keyword.test.ts +678 -0
- package/src/mcp/server.ts +135 -6
- package/src/parser/parser.ts +18 -19
- package/src/parser/section-filter.test.ts +277 -0
- package/src/parser/section-filter.ts +125 -3
- 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/searcher.test.ts +99 -1
- package/src/search/searcher.ts +189 -67
- 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/summarizer.ts +104 -35
- package/src/types/huggingface-transformers.d.ts +66 -0
- package/tests/fixtures/cli/.mdcontext/active-provider.json +7 -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 +4 -4
- package/tests/fixtures/cli/.mdcontext/indexes/sections.json +14 -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/vitest.config.ts +1 -6
- package/AGENTS.md +0 -46
- package/tests/fixtures/cli/.mdcontext/vectors.bin +0 -0
- package/tests/fixtures/cli/.mdcontext/vectors.meta.json +0 -1264
package/dist/mcp/server.js
CHANGED
|
@@ -4,13 +4,17 @@ import {
|
|
|
4
4
|
search,
|
|
5
5
|
semanticSearch,
|
|
6
6
|
summarizeFile
|
|
7
|
-
} from "../chunk-
|
|
7
|
+
} from "../chunk-BNXWSZ63.js";
|
|
8
8
|
import {
|
|
9
9
|
buildIndex,
|
|
10
|
+
getIncomingLinks,
|
|
11
|
+
getOutgoingLinks,
|
|
10
12
|
parseFile
|
|
11
|
-
} from "../chunk-
|
|
13
|
+
} from "../chunk-MUJELQQ6.js";
|
|
14
|
+
import "../chunk-7TOWB2XB.js";
|
|
12
15
|
|
|
13
16
|
// src/mcp/server.ts
|
|
17
|
+
import { createRequire } from "module";
|
|
14
18
|
import * as path from "path";
|
|
15
19
|
import { Server } from "@modelcontextprotocol/sdk/server/index.js";
|
|
16
20
|
import { StdioServerTransport } from "@modelcontextprotocol/sdk/server/stdio.js";
|
|
@@ -19,6 +23,9 @@ import {
|
|
|
19
23
|
ListToolsRequestSchema
|
|
20
24
|
} from "@modelcontextprotocol/sdk/types.js";
|
|
21
25
|
import { Effect } from "effect";
|
|
26
|
+
var require2 = createRequire(import.meta.url);
|
|
27
|
+
var packageJson = require2("../../package.json");
|
|
28
|
+
var MCP_VERSION = packageJson.version;
|
|
22
29
|
var tools = [
|
|
23
30
|
{
|
|
24
31
|
name: "md_search",
|
|
@@ -41,8 +48,8 @@ var tools = [
|
|
|
41
48
|
},
|
|
42
49
|
threshold: {
|
|
43
50
|
type: "number",
|
|
44
|
-
description: "Minimum similarity threshold 0-1 (default: 0.
|
|
45
|
-
default: 0.
|
|
51
|
+
description: "Minimum similarity threshold 0-1 (default: 0.35)",
|
|
52
|
+
default: 0.35
|
|
46
53
|
}
|
|
47
54
|
},
|
|
48
55
|
required: ["query"]
|
|
@@ -138,13 +145,41 @@ var tools = [
|
|
|
138
145
|
}
|
|
139
146
|
}
|
|
140
147
|
}
|
|
148
|
+
},
|
|
149
|
+
{
|
|
150
|
+
name: "md_links",
|
|
151
|
+
description: "Get outgoing links from a markdown file. Shows what files this document references/links to.",
|
|
152
|
+
inputSchema: {
|
|
153
|
+
type: "object",
|
|
154
|
+
properties: {
|
|
155
|
+
path: {
|
|
156
|
+
type: "string",
|
|
157
|
+
description: "Path to the markdown file"
|
|
158
|
+
}
|
|
159
|
+
},
|
|
160
|
+
required: ["path"]
|
|
161
|
+
}
|
|
162
|
+
},
|
|
163
|
+
{
|
|
164
|
+
name: "md_backlinks",
|
|
165
|
+
description: "Get incoming links to a markdown file. Shows what files reference/link to this document.",
|
|
166
|
+
inputSchema: {
|
|
167
|
+
type: "object",
|
|
168
|
+
properties: {
|
|
169
|
+
path: {
|
|
170
|
+
type: "string",
|
|
171
|
+
description: "Path to the markdown file"
|
|
172
|
+
}
|
|
173
|
+
},
|
|
174
|
+
required: ["path"]
|
|
175
|
+
}
|
|
141
176
|
}
|
|
142
177
|
];
|
|
143
178
|
var handleMdSearch = async (args, rootPath) => {
|
|
144
179
|
const query = args.query;
|
|
145
180
|
const limit = args.limit ?? 5;
|
|
146
181
|
const pathFilter = args.path_filter;
|
|
147
|
-
const threshold = args.threshold ?? 0.
|
|
182
|
+
const threshold = args.threshold ?? 0.35;
|
|
148
183
|
const result = await Effect.runPromise(
|
|
149
184
|
semanticSearch(rootPath, query, {
|
|
150
185
|
limit,
|
|
@@ -206,7 +241,6 @@ var handleMdStructure = async (args, rootPath) => {
|
|
|
206
241
|
const resolvedPath = path.isAbsolute(filePath) ? filePath : path.join(rootPath, filePath);
|
|
207
242
|
const result = await Effect.runPromise(
|
|
208
243
|
parseFile(resolvedPath).pipe(
|
|
209
|
-
Effect.mapError((e) => new Error(`${e._tag}: ${e.message}`)),
|
|
210
244
|
Effect.catchAll((e) => Effect.succeed({ error: e.message }))
|
|
211
245
|
)
|
|
212
246
|
);
|
|
@@ -319,11 +353,69 @@ var handleMdIndex = async (args, rootPath) => {
|
|
|
319
353
|
]
|
|
320
354
|
};
|
|
321
355
|
};
|
|
356
|
+
var handleMdLinks = async (args, rootPath) => {
|
|
357
|
+
const filePath = args.path;
|
|
358
|
+
const resolvedPath = path.isAbsolute(filePath) ? filePath : path.join(rootPath, filePath);
|
|
359
|
+
const result = await Effect.runPromise(
|
|
360
|
+
getOutgoingLinks(rootPath, resolvedPath).pipe(
|
|
361
|
+
Effect.catchAll((e) => Effect.succeed({ error: e.message }))
|
|
362
|
+
)
|
|
363
|
+
);
|
|
364
|
+
if ("error" in result) {
|
|
365
|
+
return {
|
|
366
|
+
content: [{ type: "text", text: `Error: ${result.error}` }],
|
|
367
|
+
isError: true
|
|
368
|
+
};
|
|
369
|
+
}
|
|
370
|
+
const links = result;
|
|
371
|
+
const relativePath = path.relative(rootPath, resolvedPath);
|
|
372
|
+
return {
|
|
373
|
+
content: [
|
|
374
|
+
{
|
|
375
|
+
type: "text",
|
|
376
|
+
text: links.length > 0 ? `Outgoing links from ${relativePath}:
|
|
377
|
+
|
|
378
|
+
${links.map((l) => ` -> ${l}`).join("\n")}
|
|
379
|
+
|
|
380
|
+
Total: ${links.length} links` : `No outgoing links from ${relativePath}`
|
|
381
|
+
}
|
|
382
|
+
]
|
|
383
|
+
};
|
|
384
|
+
};
|
|
385
|
+
var handleMdBacklinks = async (args, rootPath) => {
|
|
386
|
+
const filePath = args.path;
|
|
387
|
+
const resolvedPath = path.isAbsolute(filePath) ? filePath : path.join(rootPath, filePath);
|
|
388
|
+
const result = await Effect.runPromise(
|
|
389
|
+
getIncomingLinks(rootPath, resolvedPath).pipe(
|
|
390
|
+
Effect.catchAll((e) => Effect.succeed({ error: e.message }))
|
|
391
|
+
)
|
|
392
|
+
);
|
|
393
|
+
if ("error" in result) {
|
|
394
|
+
return {
|
|
395
|
+
content: [{ type: "text", text: `Error: ${result.error}` }],
|
|
396
|
+
isError: true
|
|
397
|
+
};
|
|
398
|
+
}
|
|
399
|
+
const links = result;
|
|
400
|
+
const relativePath = path.relative(rootPath, resolvedPath);
|
|
401
|
+
return {
|
|
402
|
+
content: [
|
|
403
|
+
{
|
|
404
|
+
type: "text",
|
|
405
|
+
text: links.length > 0 ? `Incoming links to ${relativePath}:
|
|
406
|
+
|
|
407
|
+
${links.map((l) => ` <- ${l}`).join("\n")}
|
|
408
|
+
|
|
409
|
+
Total: ${links.length} backlinks` : `No incoming links to ${relativePath}`
|
|
410
|
+
}
|
|
411
|
+
]
|
|
412
|
+
};
|
|
413
|
+
};
|
|
322
414
|
var createServer = (rootPath) => {
|
|
323
415
|
const server = new Server(
|
|
324
416
|
{
|
|
325
417
|
name: "mdcontext-mcp",
|
|
326
|
-
version:
|
|
418
|
+
version: MCP_VERSION
|
|
327
419
|
},
|
|
328
420
|
{
|
|
329
421
|
capabilities: {
|
|
@@ -347,6 +439,10 @@ var createServer = (rootPath) => {
|
|
|
347
439
|
return handleMdKeywordSearch(args ?? {}, rootPath);
|
|
348
440
|
case "md_index":
|
|
349
441
|
return handleMdIndex(args ?? {}, rootPath);
|
|
442
|
+
case "md_links":
|
|
443
|
+
return handleMdLinks(args ?? {}, rootPath);
|
|
444
|
+
case "md_backlinks":
|
|
445
|
+
return handleMdBacklinks(args ?? {}, rootPath);
|
|
350
446
|
default:
|
|
351
447
|
return {
|
|
352
448
|
content: [{ type: "text", text: `Unknown tool: ${name}` }],
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
import {
|
|
2
|
+
AISummarizationConfig,
|
|
3
|
+
EmbeddingsConfig,
|
|
4
|
+
IndexConfig,
|
|
5
|
+
MdContextConfig,
|
|
6
|
+
OutputConfig,
|
|
7
|
+
PathsConfig,
|
|
8
|
+
SearchConfig,
|
|
9
|
+
SummarizationConfig,
|
|
10
|
+
defaultConfig
|
|
11
|
+
} from "./chunk-7TOWB2XB.js";
|
|
12
|
+
export {
|
|
13
|
+
AISummarizationConfig,
|
|
14
|
+
EmbeddingsConfig,
|
|
15
|
+
IndexConfig,
|
|
16
|
+
MdContextConfig,
|
|
17
|
+
OutputConfig,
|
|
18
|
+
PathsConfig,
|
|
19
|
+
SearchConfig,
|
|
20
|
+
SummarizationConfig,
|
|
21
|
+
defaultConfig
|
|
22
|
+
};
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
import {
|
|
2
|
+
defaultConfig,
|
|
3
|
+
EmbeddingsConfig,
|
|
4
|
+
IndexConfig,
|
|
5
|
+
MdContextConfig,
|
|
6
|
+
OutputConfig,
|
|
7
|
+
PathsConfig,
|
|
8
|
+
SearchConfig,
|
|
9
|
+
SummarizationConfig,
|
|
10
|
+
} from "./chunk-LBSDNLEM.js";
|
|
11
|
+
export {
|
|
12
|
+
EmbeddingsConfig,
|
|
13
|
+
IndexConfig,
|
|
14
|
+
MdContextConfig,
|
|
15
|
+
OutputConfig,
|
|
16
|
+
PathsConfig,
|
|
17
|
+
SearchConfig,
|
|
18
|
+
SummarizationConfig,
|
|
19
|
+
defaultConfig,
|
|
20
|
+
};
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
import {
|
|
2
|
+
defaultConfig,
|
|
3
|
+
EmbeddingsConfig,
|
|
4
|
+
IndexConfig,
|
|
5
|
+
MdContextConfig,
|
|
6
|
+
OutputConfig,
|
|
7
|
+
PathsConfig,
|
|
8
|
+
SearchConfig,
|
|
9
|
+
SummarizationConfig,
|
|
10
|
+
} from "./chunk-SJCDV2ST.js";
|
|
11
|
+
export {
|
|
12
|
+
EmbeddingsConfig,
|
|
13
|
+
IndexConfig,
|
|
14
|
+
MdContextConfig,
|
|
15
|
+
OutputConfig,
|
|
16
|
+
PathsConfig,
|
|
17
|
+
SearchConfig,
|
|
18
|
+
SummarizationConfig,
|
|
19
|
+
defaultConfig,
|
|
20
|
+
};
|
package/docs/019-USAGE.md
CHANGED
|
@@ -33,7 +33,9 @@ npx mdcontext --help
|
|
|
33
33
|
**Requirements:**
|
|
34
34
|
|
|
35
35
|
- Node.js 18+
|
|
36
|
-
-
|
|
36
|
+
- Embedding provider for semantic search (see [CONFIG.md](./CONFIG.md) for options):
|
|
37
|
+
- OpenAI or OpenRouter (cloud, requires API key)
|
|
38
|
+
- Ollama or LM Studio (free, local, no API key needed)
|
|
37
39
|
|
|
38
40
|
---
|
|
39
41
|
|
|
@@ -51,8 +53,21 @@ mdcontext tree ./docs/README.md # Document outline
|
|
|
51
53
|
mdcontext context ./docs/README.md
|
|
52
54
|
|
|
53
55
|
# 4. Enable semantic search (optional)
|
|
56
|
+
# Choose ONE provider:
|
|
57
|
+
|
|
58
|
+
# Option A: OpenAI (cloud, requires API key)
|
|
54
59
|
export OPENAI_API_KEY=sk-...
|
|
55
60
|
mdcontext index --embed
|
|
61
|
+
|
|
62
|
+
# Option B: Ollama (free, local, no API key needed)
|
|
63
|
+
ollama serve && ollama pull nomic-embed-text
|
|
64
|
+
mdcontext index --embed --provider ollama --provider-model nomic-embed-text
|
|
65
|
+
|
|
66
|
+
# Option C: LM Studio (free, local, no API key needed)
|
|
67
|
+
# Start LM Studio, load an embedding model, then:
|
|
68
|
+
mdcontext index --embed --provider lm-studio
|
|
69
|
+
|
|
70
|
+
# Then search by meaning:
|
|
56
71
|
mdcontext search "how to authenticate"
|
|
57
72
|
```
|
|
58
73
|
|
|
@@ -527,6 +542,20 @@ mdcontext context -t 1000 a.md b.md c.md
|
|
|
527
542
|
|
|
528
543
|
## Configuration
|
|
529
544
|
|
|
545
|
+
mdcontext supports a layered configuration system with files, environment variables, and CLI flags.
|
|
546
|
+
|
|
547
|
+
**Quick start:**
|
|
548
|
+
|
|
549
|
+
```bash
|
|
550
|
+
# Create a config file
|
|
551
|
+
mdcontext config init
|
|
552
|
+
|
|
553
|
+
# Check current configuration
|
|
554
|
+
mdcontext config check
|
|
555
|
+
```
|
|
556
|
+
|
|
557
|
+
**For full configuration documentation, see [CONFIG.md](./CONFIG.md).**
|
|
558
|
+
|
|
530
559
|
### Index Directory
|
|
531
560
|
|
|
532
561
|
By default, indexes are stored in `.mdcontext/` in your project root:
|
|
@@ -544,9 +573,13 @@ By default, indexes are stored in `.mdcontext/` in your project root:
|
|
|
544
573
|
|
|
545
574
|
### Environment Variables
|
|
546
575
|
|
|
547
|
-
| Variable
|
|
548
|
-
|
|
|
549
|
-
| `OPENAI_API_KEY`
|
|
576
|
+
| Variable | Required | Description |
|
|
577
|
+
| -------------------- | --------------------------- | ------------------------------------ |
|
|
578
|
+
| `OPENAI_API_KEY` | For OpenAI provider | OpenAI API key (cloud provider) |
|
|
579
|
+
| `OPENROUTER_API_KEY` | For OpenRouter provider | OpenRouter API key (cloud provider) |
|
|
580
|
+
| N/A | Ollama / LM Studio | Local providers - no API key needed |
|
|
581
|
+
|
|
582
|
+
All configuration options can also be set via `MDCONTEXT_*` environment variables. See [CONFIG.md](./CONFIG.md#environment-variables) for the complete reference.
|
|
550
583
|
|
|
551
584
|
### Supported File Types
|
|
552
585
|
|
|
@@ -571,8 +604,14 @@ Run `mdcontext index` to build the index first.
|
|
|
571
604
|
|
|
572
605
|
### "Semantic search not available"
|
|
573
606
|
|
|
574
|
-
1. Set
|
|
607
|
+
1. Set up an embedding provider:
|
|
608
|
+
- **OpenAI (cloud):** Set `OPENAI_API_KEY` environment variable
|
|
609
|
+
- **OpenRouter (cloud):** Set `OPENROUTER_API_KEY` environment variable
|
|
610
|
+
- **Ollama (free, local):** Run `ollama serve` (no API key needed)
|
|
611
|
+
- **LM Studio (free, local):** Start the server GUI (no API key needed)
|
|
575
612
|
2. Run `mdcontext index --embed` to build embedding index
|
|
613
|
+
- For local providers: `mdcontext index --embed --provider ollama`
|
|
614
|
+
3. See [CONFIG.md](./CONFIG.md) for detailed provider setup
|
|
576
615
|
|
|
577
616
|
### "File not found in index"
|
|
578
617
|
|
|
@@ -104,7 +104,7 @@ interface VectorEntry {
|
|
|
104
104
|
|
|
105
105
|
- HNSW stores cosine distance (1 - similarity)
|
|
106
106
|
- Search returns `similarity = 1 - distance`
|
|
107
|
-
- Results filtered by threshold (default: 0.
|
|
107
|
+
- Results filtered by threshold (default: 0.35)
|
|
108
108
|
|
|
109
109
|
### 3. Semantic Search (`src/embeddings/semantic-search.ts`)
|
|
110
110
|
|
|
@@ -151,7 +151,7 @@ Document: {documentTitle}
|
|
|
151
151
|
- If < 10 seconds: auto-create silently
|
|
152
152
|
- Otherwise: prompt user for choice
|
|
153
153
|
|
|
154
|
-
**Default Search Threshold**: 0.
|
|
154
|
+
**Default Search Threshold**: 0.35 (raised from 0.3 to filter low-quality matches)
|
|
155
155
|
|
|
156
156
|
## Data Flow
|
|
157
157
|
|
|
@@ -225,7 +225,7 @@ Document: {documentTitle}
|
|
|
225
225
|
▼
|
|
226
226
|
┌─────────────────────────────────────────────────────────────────────────┐
|
|
227
227
|
│ 5. Post-Processing │
|
|
228
|
-
│ - Filter by similarity threshold (default: 0.
|
|
228
|
+
│ - Filter by similarity threshold (default: 0.35) │
|
|
229
229
|
│ - Filter by path pattern (if specified) │
|
|
230
230
|
│ - Truncate to requested limit │
|
|
231
231
|
└──────────────────────────────┬──────────────────────────────────────────┘
|
|
@@ -249,11 +249,11 @@ Located in `.mdcontext/` directory:
|
|
|
249
249
|
|
|
250
250
|
## Current Limitations and Gaps
|
|
251
251
|
|
|
252
|
-
### 1. Single Provider Lock-in
|
|
252
|
+
### 1. ~~Single Provider Lock-in~~ RESOLVED (ALP-215)
|
|
253
253
|
|
|
254
|
-
- **
|
|
255
|
-
- **Impact**:
|
|
256
|
-
- **Code Location**: `
|
|
254
|
+
- **RESOLVED**: Multiple embedding providers now supported (OpenAI, Ollama, LM Studio, OpenRouter)
|
|
255
|
+
- **Impact**: Users can choose local providers for offline capability and cost savings
|
|
256
|
+
- **Code Location**: `provider-factory.ts` handles provider selection based on config
|
|
257
257
|
|
|
258
258
|
### 2. No Incremental Updates
|
|
259
259
|
|
|
@@ -347,7 +347,7 @@ efConstruction: 200 // vector-store.ts
|
|
|
347
347
|
|
|
348
348
|
// Search
|
|
349
349
|
defaultLimit: 10 // search.ts
|
|
350
|
-
defaultThreshold: 0.
|
|
350
|
+
defaultThreshold: 0.35 // search.ts
|
|
351
351
|
autoIndexThreshold: 10 seconds // search.ts
|
|
352
352
|
```
|
|
353
353
|
|
|
@@ -67,7 +67,7 @@ mdcontext search "authentication" ./docs
|
|
|
67
67
|
|
|
68
68
|
**Impact:** Major limitation for discovery. Users searching for concepts/keywords get no results if those words aren't in headings.
|
|
69
69
|
|
|
70
|
-
**Note:** Full semantic search requires OpenAI
|
|
70
|
+
**Note:** Full semantic search requires an embedding provider (OpenAI, Ollama, LM Studio, or OpenRouter) + `--embed` flag. See [CONFIG.md](./CONFIG.md) for free local options. Structural search should at least search content.
|
|
71
71
|
|
|
72
72
|
---
|
|
73
73
|
|