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
|
@@ -0,0 +1,715 @@
|
|
|
1
|
+
# Configuration System Task Candidates
|
|
2
|
+
|
|
3
|
+
This document outlines implementation tasks for enhancing mdcontext's configuration system, based on research from:
|
|
4
|
+
|
|
5
|
+
- [033-research-configuration-management.md](/Users/alphab/Dev/LLM/DEV/mdcontext/docs/033-research-configuration-management.md)
|
|
6
|
+
- [034-research-effect-cli-config.md](/Users/alphab/Dev/LLM/DEV/mdcontext/docs/034-research-effect-cli-config.md)
|
|
7
|
+
|
|
8
|
+
Tasks are ordered by recommended implementation sequence.
|
|
9
|
+
|
|
10
|
+
---
|
|
11
|
+
|
|
12
|
+
## Phase 1: Foundation
|
|
13
|
+
|
|
14
|
+
### 1.1 Define Configuration Schema with Zod
|
|
15
|
+
|
|
16
|
+
**Priority**: High
|
|
17
|
+
**Effort**: Small
|
|
18
|
+
**Dependencies**: None
|
|
19
|
+
|
|
20
|
+
**Description**:
|
|
21
|
+
Create a Zod schema that defines all configurable options for mdcontext. This schema serves as the single source of truth for configuration shape, types, and defaults.
|
|
22
|
+
|
|
23
|
+
**Why it matters**:
|
|
24
|
+
|
|
25
|
+
- Enables runtime validation with clear error messages
|
|
26
|
+
- Generates TypeScript types automatically (no type/schema drift)
|
|
27
|
+
- Foundation for all subsequent config work
|
|
28
|
+
- Aligns with modern TypeScript ecosystem patterns (Vite, Nuxt, ESLint)
|
|
29
|
+
|
|
30
|
+
**Implementation outline**:
|
|
31
|
+
|
|
32
|
+
```typescript
|
|
33
|
+
// src/config/schema.ts
|
|
34
|
+
import { z } from "zod";
|
|
35
|
+
|
|
36
|
+
export const ConfigSchema = z.object({
|
|
37
|
+
logLevel: z.enum(["debug", "info", "warn", "error"]).default("info"),
|
|
38
|
+
embeddings: z
|
|
39
|
+
.object({
|
|
40
|
+
provider: z.enum(["openai", "none"]).default("none"),
|
|
41
|
+
model: z.string().default("text-embedding-3-small"),
|
|
42
|
+
batchSize: z.number().positive().default(100),
|
|
43
|
+
})
|
|
44
|
+
.default({}),
|
|
45
|
+
search: z
|
|
46
|
+
.object({
|
|
47
|
+
limit: z.number().positive().default(10),
|
|
48
|
+
threshold: z.number().min(0).max(1).default(0.45),
|
|
49
|
+
autoIndexThreshold: z.number().default(10),
|
|
50
|
+
})
|
|
51
|
+
.default({}),
|
|
52
|
+
context: z
|
|
53
|
+
.object({
|
|
54
|
+
defaultTokenBudget: z.number().positive().default(2000),
|
|
55
|
+
})
|
|
56
|
+
.default({}),
|
|
57
|
+
index: z
|
|
58
|
+
.object({
|
|
59
|
+
ignorePatterns: z
|
|
60
|
+
.array(z.string())
|
|
61
|
+
.default(["**/node_modules/**", "**/.git/**"]),
|
|
62
|
+
})
|
|
63
|
+
.default({}),
|
|
64
|
+
});
|
|
65
|
+
|
|
66
|
+
export type Config = z.infer<typeof ConfigSchema>;
|
|
67
|
+
```
|
|
68
|
+
|
|
69
|
+
---
|
|
70
|
+
|
|
71
|
+
### 1.2 Create defineConfig Helper
|
|
72
|
+
|
|
73
|
+
**Priority**: High
|
|
74
|
+
**Effort**: Small
|
|
75
|
+
**Dependencies**: 1.1
|
|
76
|
+
|
|
77
|
+
**Description**:
|
|
78
|
+
Implement a `defineConfig()` helper function that provides type inference for user config files, following the pattern used by Vite, ESLint, and Nuxt.
|
|
79
|
+
|
|
80
|
+
**Why it matters**:
|
|
81
|
+
|
|
82
|
+
- Enables IDE autocomplete in config files without JSON schemas
|
|
83
|
+
- Makes config files self-documenting
|
|
84
|
+
- Industry-standard pattern familiar to developers
|
|
85
|
+
- Improves developer experience significantly
|
|
86
|
+
|
|
87
|
+
**Implementation outline**:
|
|
88
|
+
|
|
89
|
+
```typescript
|
|
90
|
+
// src/config/define.ts
|
|
91
|
+
import type { Config } from "./schema";
|
|
92
|
+
|
|
93
|
+
export function defineConfig(config: Partial<Config>): Partial<Config> {
|
|
94
|
+
return config;
|
|
95
|
+
}
|
|
96
|
+
```
|
|
97
|
+
|
|
98
|
+
**Export from package**:
|
|
99
|
+
|
|
100
|
+
```typescript
|
|
101
|
+
// src/index.ts
|
|
102
|
+
export { defineConfig } from "./config/define";
|
|
103
|
+
export type { Config } from "./config/schema";
|
|
104
|
+
```
|
|
105
|
+
|
|
106
|
+
---
|
|
107
|
+
|
|
108
|
+
### 1.3 Implement Config Loader with c12
|
|
109
|
+
|
|
110
|
+
**Priority**: High
|
|
111
|
+
**Effort**: Medium
|
|
112
|
+
**Dependencies**: 1.1, 1.2
|
|
113
|
+
|
|
114
|
+
**Description**:
|
|
115
|
+
Create a configuration loader using c12 (UnJS) that supports multiple config file formats and locations.
|
|
116
|
+
|
|
117
|
+
**Why it matters**:
|
|
118
|
+
|
|
119
|
+
- Supports TypeScript config files natively (via jiti)
|
|
120
|
+
- Handles multiple formats: `.ts`, `.js`, `.json`, `.yaml`, `.toml`
|
|
121
|
+
- Built-in dotenv support
|
|
122
|
+
- Environment-specific overrides (`$development`, `$production`)
|
|
123
|
+
- Used by Nuxt, Prisma, and other production tools
|
|
124
|
+
|
|
125
|
+
**Implementation outline**:
|
|
126
|
+
|
|
127
|
+
```typescript
|
|
128
|
+
// src/config/loader.ts
|
|
129
|
+
import { loadConfig } from "c12";
|
|
130
|
+
import { ConfigSchema, type Config } from "./schema";
|
|
131
|
+
|
|
132
|
+
export interface LoadConfigResult {
|
|
133
|
+
config: Config;
|
|
134
|
+
configFile?: string;
|
|
135
|
+
layers: Array<{ config: Partial<Config>; configFile?: string }>;
|
|
136
|
+
}
|
|
137
|
+
|
|
138
|
+
export async function loadMdcontextConfig(options?: {
|
|
139
|
+
cwd?: string;
|
|
140
|
+
overrides?: Partial<Config>;
|
|
141
|
+
}): Promise<LoadConfigResult> {
|
|
142
|
+
const {
|
|
143
|
+
config: rawConfig,
|
|
144
|
+
configFile,
|
|
145
|
+
layers,
|
|
146
|
+
} = await loadConfig({
|
|
147
|
+
name: "mdcontext",
|
|
148
|
+
cwd: options?.cwd,
|
|
149
|
+
defaults: ConfigSchema.parse({}),
|
|
150
|
+
overrides: options?.overrides,
|
|
151
|
+
dotenv: true,
|
|
152
|
+
});
|
|
153
|
+
|
|
154
|
+
const config = ConfigSchema.parse(rawConfig);
|
|
155
|
+
return { config, configFile, layers };
|
|
156
|
+
}
|
|
157
|
+
```
|
|
158
|
+
|
|
159
|
+
**New dependencies**:
|
|
160
|
+
|
|
161
|
+
```json
|
|
162
|
+
{
|
|
163
|
+
"dependencies": {
|
|
164
|
+
"c12": "^2.0.0"
|
|
165
|
+
}
|
|
166
|
+
}
|
|
167
|
+
```
|
|
168
|
+
|
|
169
|
+
---
|
|
170
|
+
|
|
171
|
+
## Phase 2: CLI Integration
|
|
172
|
+
|
|
173
|
+
### 2.1 Integrate Config with CLI Commands
|
|
174
|
+
|
|
175
|
+
**Priority**: High
|
|
176
|
+
**Effort**: Medium
|
|
177
|
+
**Dependencies**: 1.3
|
|
178
|
+
|
|
179
|
+
**Description**:
|
|
180
|
+
Modify CLI commands to load and use configuration, with CLI flags taking precedence over config file values.
|
|
181
|
+
|
|
182
|
+
**Why it matters**:
|
|
183
|
+
|
|
184
|
+
- Enables persistent configuration (no need to repeat flags)
|
|
185
|
+
- Maintains CLI flag override capability for one-off changes
|
|
186
|
+
- Creates consistent configuration experience across all commands
|
|
187
|
+
|
|
188
|
+
**Implementation outline**:
|
|
189
|
+
|
|
190
|
+
The precedence order should be:
|
|
191
|
+
|
|
192
|
+
1. CLI flags (highest)
|
|
193
|
+
2. Environment variables
|
|
194
|
+
3. Config file
|
|
195
|
+
4. Defaults (lowest)
|
|
196
|
+
|
|
197
|
+
```typescript
|
|
198
|
+
// Example: search command integration
|
|
199
|
+
const searchCommand = Command.make(
|
|
200
|
+
"search",
|
|
201
|
+
{
|
|
202
|
+
/* existing options */
|
|
203
|
+
},
|
|
204
|
+
(cliOptions) =>
|
|
205
|
+
Effect.gen(function* () {
|
|
206
|
+
const { config } = yield* Effect.promise(() => loadMdcontextConfig());
|
|
207
|
+
|
|
208
|
+
// Merge: CLI flags override config
|
|
209
|
+
const limit = cliOptions.limit ?? config.search.limit;
|
|
210
|
+
const threshold = cliOptions.threshold ?? config.search.threshold;
|
|
211
|
+
|
|
212
|
+
// ... rest of command
|
|
213
|
+
}),
|
|
214
|
+
);
|
|
215
|
+
```
|
|
216
|
+
|
|
217
|
+
---
|
|
218
|
+
|
|
219
|
+
### 2.2 Add --config Flag to CLI
|
|
220
|
+
|
|
221
|
+
**Priority**: Medium
|
|
222
|
+
**Effort**: Small
|
|
223
|
+
**Dependencies**: 2.1
|
|
224
|
+
|
|
225
|
+
**Description**:
|
|
226
|
+
Add a global `--config` / `-c` flag to specify a custom config file path.
|
|
227
|
+
|
|
228
|
+
**Why it matters**:
|
|
229
|
+
|
|
230
|
+
- Allows per-invocation config file selection
|
|
231
|
+
- Enables testing with different configurations
|
|
232
|
+
- Common pattern in CLI tools (ESLint, Prettier, etc.)
|
|
233
|
+
|
|
234
|
+
**Implementation outline**:
|
|
235
|
+
|
|
236
|
+
```typescript
|
|
237
|
+
const configOption = Options.file("config").pipe(
|
|
238
|
+
Options.withAlias("c"),
|
|
239
|
+
Options.withDescription("Path to config file"),
|
|
240
|
+
Options.optional,
|
|
241
|
+
);
|
|
242
|
+
```
|
|
243
|
+
|
|
244
|
+
---
|
|
245
|
+
|
|
246
|
+
### 2.3 Add Config Init Command
|
|
247
|
+
|
|
248
|
+
**Priority**: Low
|
|
249
|
+
**Effort**: Small
|
|
250
|
+
**Dependencies**: 1.2
|
|
251
|
+
|
|
252
|
+
**Description**:
|
|
253
|
+
Create a `mdcontext config init` command that generates a starter config file with sensible defaults.
|
|
254
|
+
|
|
255
|
+
**Why it matters**:
|
|
256
|
+
|
|
257
|
+
- Lowers barrier to config file usage
|
|
258
|
+
- Documents available options by example
|
|
259
|
+
- Common pattern in modern CLI tools
|
|
260
|
+
|
|
261
|
+
**Implementation outline**:
|
|
262
|
+
|
|
263
|
+
```bash
|
|
264
|
+
$ mdcontext config init
|
|
265
|
+
Created mdcontext.config.ts with default settings.
|
|
266
|
+
|
|
267
|
+
$ mdcontext config init --format json
|
|
268
|
+
Created .mdcontextrc with default settings.
|
|
269
|
+
```
|
|
270
|
+
|
|
271
|
+
---
|
|
272
|
+
|
|
273
|
+
## Phase 3: Environment Variables
|
|
274
|
+
|
|
275
|
+
### 3.1 Implement Prefix-Based Environment Variables
|
|
276
|
+
|
|
277
|
+
**Priority**: Medium
|
|
278
|
+
**Effort**: Small
|
|
279
|
+
**Dependencies**: 1.1
|
|
280
|
+
|
|
281
|
+
**Description**:
|
|
282
|
+
Support environment variables with `MDCONTEXT_` prefix that map to config keys.
|
|
283
|
+
|
|
284
|
+
**Why it matters**:
|
|
285
|
+
|
|
286
|
+
- Standard pattern for CLI configuration
|
|
287
|
+
- Enables CI/CD integration without config files
|
|
288
|
+
- Allows secrets to stay out of config files
|
|
289
|
+
- Works well with containerized environments
|
|
290
|
+
|
|
291
|
+
**Implementation outline**:
|
|
292
|
+
|
|
293
|
+
```
|
|
294
|
+
MDCONTEXT_LOG_LEVEL=debug
|
|
295
|
+
MDCONTEXT_EMBEDDINGS_PROVIDER=openai
|
|
296
|
+
MDCONTEXT_SEARCH_LIMIT=20
|
|
297
|
+
```
|
|
298
|
+
|
|
299
|
+
```typescript
|
|
300
|
+
// src/config/env.ts
|
|
301
|
+
import { z } from "zod";
|
|
302
|
+
|
|
303
|
+
const envSchema = z.object({
|
|
304
|
+
MDCONTEXT_LOG_LEVEL: z.enum(["debug", "info", "warn", "error"]).optional(),
|
|
305
|
+
MDCONTEXT_EMBEDDINGS_PROVIDER: z.enum(["openai", "none"]).optional(),
|
|
306
|
+
MDCONTEXT_EMBEDDINGS_MODEL: z.string().optional(),
|
|
307
|
+
MDCONTEXT_SEARCH_LIMIT: z.coerce.number().positive().optional(),
|
|
308
|
+
MDCONTEXT_SEARCH_THRESHOLD: z.coerce.number().min(0).max(1).optional(),
|
|
309
|
+
OPENAI_API_KEY: z.string().optional(),
|
|
310
|
+
});
|
|
311
|
+
|
|
312
|
+
export function loadEnvConfig(): Partial<Config> {
|
|
313
|
+
const env = envSchema.parse(process.env);
|
|
314
|
+
// Map to config structure...
|
|
315
|
+
}
|
|
316
|
+
```
|
|
317
|
+
|
|
318
|
+
---
|
|
319
|
+
|
|
320
|
+
### 3.2 Improve API Key Handling with Redacted
|
|
321
|
+
|
|
322
|
+
**Priority**: Medium
|
|
323
|
+
**Effort**: Small
|
|
324
|
+
**Dependencies**: None (can be done independently)
|
|
325
|
+
|
|
326
|
+
**Description**:
|
|
327
|
+
Use Effect's `Redacted` type for handling sensitive values like API keys, preventing accidental logging.
|
|
328
|
+
|
|
329
|
+
**Why it matters**:
|
|
330
|
+
|
|
331
|
+
- Prevents secrets from appearing in logs or error messages
|
|
332
|
+
- First-class Effect pattern for security
|
|
333
|
+
- Shows `<redacted>` when converted to string
|
|
334
|
+
|
|
335
|
+
**Implementation outline**:
|
|
336
|
+
|
|
337
|
+
```typescript
|
|
338
|
+
import { Config, Redacted } from "effect";
|
|
339
|
+
|
|
340
|
+
// In config loading
|
|
341
|
+
const apiKey = yield * Config.redacted("OPENAI_API_KEY").pipe(Config.optional);
|
|
342
|
+
|
|
343
|
+
// Safe to log
|
|
344
|
+
console.log(`API Key: ${apiKey}`); // "API Key: <redacted>"
|
|
345
|
+
|
|
346
|
+
// Access value only when needed
|
|
347
|
+
const actualKey = Redacted.value(apiKey);
|
|
348
|
+
```
|
|
349
|
+
|
|
350
|
+
---
|
|
351
|
+
|
|
352
|
+
## Phase 4: Validation and Error Messages
|
|
353
|
+
|
|
354
|
+
### 4.1 Implement Friendly Config Validation Errors
|
|
355
|
+
|
|
356
|
+
**Priority**: High
|
|
357
|
+
**Effort**: Medium
|
|
358
|
+
**Dependencies**: 1.1
|
|
359
|
+
|
|
360
|
+
**Description**:
|
|
361
|
+
Create user-friendly error messages when config validation fails, showing what's wrong and how to fix it.
|
|
362
|
+
|
|
363
|
+
**Why it matters**:
|
|
364
|
+
|
|
365
|
+
- Reduces user frustration with config issues
|
|
366
|
+
- Faster debugging of configuration problems
|
|
367
|
+
- Professional CLI experience
|
|
368
|
+
|
|
369
|
+
**Implementation outline**:
|
|
370
|
+
|
|
371
|
+
```
|
|
372
|
+
$ mdcontext search "test"
|
|
373
|
+
|
|
374
|
+
Config Error: Invalid value in mdcontext.config.ts
|
|
375
|
+
|
|
376
|
+
search.threshold: Expected number between 0 and 1, got "high"
|
|
377
|
+
|
|
378
|
+
Hint: Use a decimal value like 0.45, not a string.
|
|
379
|
+
|
|
380
|
+
Location: /path/to/mdcontext.config.ts:12:15
|
|
381
|
+
```
|
|
382
|
+
|
|
383
|
+
```typescript
|
|
384
|
+
// src/config/errors.ts
|
|
385
|
+
export function formatConfigError(
|
|
386
|
+
error: z.ZodError,
|
|
387
|
+
configFile?: string,
|
|
388
|
+
): string {
|
|
389
|
+
// Format Zod errors into friendly messages
|
|
390
|
+
}
|
|
391
|
+
```
|
|
392
|
+
|
|
393
|
+
---
|
|
394
|
+
|
|
395
|
+
### 4.2 Add Config Validation Command
|
|
396
|
+
|
|
397
|
+
**Priority**: Low
|
|
398
|
+
**Effort**: Small
|
|
399
|
+
**Dependencies**: 4.1
|
|
400
|
+
|
|
401
|
+
**Description**:
|
|
402
|
+
Create a `mdcontext config check` command that validates the current configuration and reports any issues.
|
|
403
|
+
|
|
404
|
+
**Why it matters**:
|
|
405
|
+
|
|
406
|
+
- Allows users to verify config before running commands
|
|
407
|
+
- Useful for CI/CD pipelines
|
|
408
|
+
- Documents effective configuration (merged from all sources)
|
|
409
|
+
|
|
410
|
+
**Implementation outline**:
|
|
411
|
+
|
|
412
|
+
```bash
|
|
413
|
+
$ mdcontext config check
|
|
414
|
+
Config loaded from: /path/to/mdcontext.config.ts
|
|
415
|
+
|
|
416
|
+
Effective configuration:
|
|
417
|
+
logLevel: info
|
|
418
|
+
embeddings.provider: openai
|
|
419
|
+
embeddings.model: text-embedding-3-small
|
|
420
|
+
search.limit: 10
|
|
421
|
+
search.threshold: 0.45
|
|
422
|
+
...
|
|
423
|
+
|
|
424
|
+
No issues found.
|
|
425
|
+
```
|
|
426
|
+
|
|
427
|
+
---
|
|
428
|
+
|
|
429
|
+
## Phase 5: Type Safety Improvements
|
|
430
|
+
|
|
431
|
+
### 5.1 Create Effect Layer for Configuration
|
|
432
|
+
|
|
433
|
+
**Priority**: Medium
|
|
434
|
+
**Effort**: Medium
|
|
435
|
+
**Dependencies**: 1.3, Full Effect adoption decision
|
|
436
|
+
|
|
437
|
+
**Description**:
|
|
438
|
+
Wrap configuration in an Effect Layer for dependency injection, enabling cleaner testing and composition.
|
|
439
|
+
|
|
440
|
+
**Why it matters**:
|
|
441
|
+
|
|
442
|
+
- Enables mock config injection for testing
|
|
443
|
+
- Follows Effect best practices
|
|
444
|
+
- Prepares for broader Effect adoption
|
|
445
|
+
- Cleaner separation of concerns
|
|
446
|
+
|
|
447
|
+
**Implementation outline**:
|
|
448
|
+
|
|
449
|
+
```typescript
|
|
450
|
+
// src/config/layer.ts
|
|
451
|
+
import { Context, Layer, Effect } from "effect"
|
|
452
|
+
import type { Config } from "./schema"
|
|
453
|
+
|
|
454
|
+
export class ConfigService extends Context.Tag("ConfigService")<
|
|
455
|
+
ConfigService,
|
|
456
|
+
Config
|
|
457
|
+
>() {}
|
|
458
|
+
|
|
459
|
+
export const ConfigLive = Layer.effect(
|
|
460
|
+
ConfigService,
|
|
461
|
+
Effect.gen(function* () {
|
|
462
|
+
const { config } = yield* Effect.promise(() => loadMdcontextConfig())
|
|
463
|
+
return config
|
|
464
|
+
})
|
|
465
|
+
)
|
|
466
|
+
|
|
467
|
+
// In commands
|
|
468
|
+
const searchCommand = Command.make("search", {...}, (opts) =>
|
|
469
|
+
Effect.gen(function* () {
|
|
470
|
+
const config = yield* ConfigService
|
|
471
|
+
// use config...
|
|
472
|
+
}).pipe(Effect.provide(ConfigLive))
|
|
473
|
+
)
|
|
474
|
+
```
|
|
475
|
+
|
|
476
|
+
---
|
|
477
|
+
|
|
478
|
+
### 5.2 Add Schema-Based Config Type Generation
|
|
479
|
+
|
|
480
|
+
**Priority**: Low
|
|
481
|
+
**Effort**: Small
|
|
482
|
+
**Dependencies**: 1.1
|
|
483
|
+
|
|
484
|
+
**Description**:
|
|
485
|
+
Generate JSON Schema from Zod schema for IDE support in JSON/YAML config files.
|
|
486
|
+
|
|
487
|
+
**Why it matters**:
|
|
488
|
+
|
|
489
|
+
- Enables autocomplete in VS Code for JSON configs
|
|
490
|
+
- Documents all options in a standard format
|
|
491
|
+
- Can be published for external tool integration
|
|
492
|
+
|
|
493
|
+
**Implementation outline**:
|
|
494
|
+
|
|
495
|
+
```typescript
|
|
496
|
+
// scripts/generate-schema.ts
|
|
497
|
+
import { zodToJsonSchema } from "zod-to-json-schema";
|
|
498
|
+
import { ConfigSchema } from "../src/config/schema";
|
|
499
|
+
|
|
500
|
+
const jsonSchema = zodToJsonSchema(ConfigSchema, "MdcontextConfig");
|
|
501
|
+
// Write to schema.json
|
|
502
|
+
```
|
|
503
|
+
|
|
504
|
+
Users can then reference it:
|
|
505
|
+
|
|
506
|
+
```json
|
|
507
|
+
{
|
|
508
|
+
"$schema": "https://raw.githubusercontent.com/user/mdcontext/main/schema.json",
|
|
509
|
+
"logLevel": "debug"
|
|
510
|
+
}
|
|
511
|
+
```
|
|
512
|
+
|
|
513
|
+
---
|
|
514
|
+
|
|
515
|
+
## Phase 6: Testing Infrastructure
|
|
516
|
+
|
|
517
|
+
### 6.1 Add Config Testing Utilities
|
|
518
|
+
|
|
519
|
+
**Priority**: Medium
|
|
520
|
+
**Effort**: Small
|
|
521
|
+
**Dependencies**: 1.3
|
|
522
|
+
|
|
523
|
+
**Description**:
|
|
524
|
+
Create test utilities for providing mock configurations in tests.
|
|
525
|
+
|
|
526
|
+
**Why it matters**:
|
|
527
|
+
|
|
528
|
+
- Enables isolated testing of commands with different configs
|
|
529
|
+
- Reduces test setup boilerplate
|
|
530
|
+
- Makes tests more reliable and deterministic
|
|
531
|
+
|
|
532
|
+
**Implementation outline**:
|
|
533
|
+
|
|
534
|
+
```typescript
|
|
535
|
+
// src/config/testing.ts
|
|
536
|
+
import { ConfigSchema, type Config } from "./schema";
|
|
537
|
+
|
|
538
|
+
export function createTestConfig(overrides: Partial<Config> = {}): Config {
|
|
539
|
+
return ConfigSchema.parse({
|
|
540
|
+
...ConfigSchema.parse({}),
|
|
541
|
+
...overrides,
|
|
542
|
+
});
|
|
543
|
+
}
|
|
544
|
+
|
|
545
|
+
export function withMockConfig(config: Partial<Config>) {
|
|
546
|
+
return Layer.succeed(ConfigService, createTestConfig(config));
|
|
547
|
+
}
|
|
548
|
+
```
|
|
549
|
+
|
|
550
|
+
```typescript
|
|
551
|
+
// In tests
|
|
552
|
+
describe("search command", () => {
|
|
553
|
+
it("respects config limit", async () => {
|
|
554
|
+
const result = await Effect.runPromise(
|
|
555
|
+
searchCommand({ query: "test" }).pipe(
|
|
556
|
+
Effect.provide(withMockConfig({ search: { limit: 5 } })),
|
|
557
|
+
),
|
|
558
|
+
);
|
|
559
|
+
expect(result.length).toBeLessThanOrEqual(5);
|
|
560
|
+
});
|
|
561
|
+
});
|
|
562
|
+
```
|
|
563
|
+
|
|
564
|
+
---
|
|
565
|
+
|
|
566
|
+
### 6.2 Add Config Integration Tests
|
|
567
|
+
|
|
568
|
+
**Priority**: Medium
|
|
569
|
+
**Effort**: Medium
|
|
570
|
+
**Dependencies**: 6.1
|
|
571
|
+
|
|
572
|
+
**Description**:
|
|
573
|
+
Add integration tests that verify config loading from files, environment variables, and CLI flags work together correctly.
|
|
574
|
+
|
|
575
|
+
**Why it matters**:
|
|
576
|
+
|
|
577
|
+
- Ensures precedence order works correctly
|
|
578
|
+
- Validates config merging behavior
|
|
579
|
+
- Catches regressions in config handling
|
|
580
|
+
|
|
581
|
+
**Implementation outline**:
|
|
582
|
+
|
|
583
|
+
```typescript
|
|
584
|
+
describe("config precedence", () => {
|
|
585
|
+
it("CLI flags override config file", async () => {
|
|
586
|
+
// Create temp config file with limit: 10
|
|
587
|
+
// Run with --limit 5
|
|
588
|
+
// Verify limit is 5
|
|
589
|
+
});
|
|
590
|
+
|
|
591
|
+
it("env vars override config file", async () => {
|
|
592
|
+
// Create temp config file with limit: 10
|
|
593
|
+
// Set MDCONTEXT_SEARCH_LIMIT=5
|
|
594
|
+
// Run command
|
|
595
|
+
// Verify limit is 5
|
|
596
|
+
});
|
|
597
|
+
|
|
598
|
+
it("config file overrides defaults", async () => {
|
|
599
|
+
// Create temp config file with limit: 20
|
|
600
|
+
// Run command without flags
|
|
601
|
+
// Verify limit is 20
|
|
602
|
+
});
|
|
603
|
+
});
|
|
604
|
+
```
|
|
605
|
+
|
|
606
|
+
---
|
|
607
|
+
|
|
608
|
+
## Phase 7: Documentation
|
|
609
|
+
|
|
610
|
+
### 7.1 Document Configuration Options
|
|
611
|
+
|
|
612
|
+
**Priority**: High
|
|
613
|
+
**Effort**: Medium
|
|
614
|
+
**Dependencies**: 1.1
|
|
615
|
+
|
|
616
|
+
**Description**:
|
|
617
|
+
Create comprehensive documentation for all configuration options, including examples for different formats.
|
|
618
|
+
|
|
619
|
+
**Why it matters**:
|
|
620
|
+
|
|
621
|
+
- Users can't use features they don't know about
|
|
622
|
+
- Reduces support burden
|
|
623
|
+
- Establishes mdcontext as a professional tool
|
|
624
|
+
|
|
625
|
+
**Implementation outline**:
|
|
626
|
+
|
|
627
|
+
- Add `docs/configuration.md` with:
|
|
628
|
+
- All config options with descriptions
|
|
629
|
+
- TypeScript config example
|
|
630
|
+
- JSON config example
|
|
631
|
+
- Environment variable mapping
|
|
632
|
+
- Precedence explanation
|
|
633
|
+
|
|
634
|
+
---
|
|
635
|
+
|
|
636
|
+
### 7.2 Add Configuration Section to Help Output
|
|
637
|
+
|
|
638
|
+
**Priority**: Low
|
|
639
|
+
**Effort**: Small
|
|
640
|
+
**Dependencies**: 7.1
|
|
641
|
+
|
|
642
|
+
**Description**:
|
|
643
|
+
Update `--help` output to mention configuration file support and point to documentation.
|
|
644
|
+
|
|
645
|
+
**Why it matters**:
|
|
646
|
+
|
|
647
|
+
- Discoverability of config features
|
|
648
|
+
- Consistent with other modern CLI tools
|
|
649
|
+
|
|
650
|
+
**Implementation outline**:
|
|
651
|
+
|
|
652
|
+
```
|
|
653
|
+
CONFIGURATION
|
|
654
|
+
mdcontext reads configuration from (in order of precedence):
|
|
655
|
+
1. CLI flags
|
|
656
|
+
2. Environment variables (MDCONTEXT_*)
|
|
657
|
+
3. Config file (mdcontext.config.ts or .mdcontextrc)
|
|
658
|
+
4. Built-in defaults
|
|
659
|
+
|
|
660
|
+
Run "mdcontext config init" to create a config file.
|
|
661
|
+
See https://github.com/user/mdcontext#configuration for details.
|
|
662
|
+
```
|
|
663
|
+
|
|
664
|
+
---
|
|
665
|
+
|
|
666
|
+
## Summary: Implementation Order
|
|
667
|
+
|
|
668
|
+
| Phase | Tasks | Total Effort | Priority |
|
|
669
|
+
| ---------------------------- | ------------- | ------------ | ----------- |
|
|
670
|
+
| **1. Foundation** | 1.1, 1.2, 1.3 | Medium | High |
|
|
671
|
+
| **2. CLI Integration** | 2.1, 2.2, 2.3 | Medium | High/Medium |
|
|
672
|
+
| **3. Environment Variables** | 3.1, 3.2 | Small | Medium |
|
|
673
|
+
| **4. Validation** | 4.1, 4.2 | Medium | High/Low |
|
|
674
|
+
| **5. Type Safety** | 5.1, 5.2 | Medium | Medium/Low |
|
|
675
|
+
| **6. Testing** | 6.1, 6.2 | Medium | Medium |
|
|
676
|
+
| **7. Documentation** | 7.1, 7.2 | Medium | High/Low |
|
|
677
|
+
|
|
678
|
+
**Recommended MVP**: Tasks 1.1, 1.2, 1.3, 2.1, 4.1, 7.1
|
|
679
|
+
|
|
680
|
+
This provides:
|
|
681
|
+
|
|
682
|
+
- Working config file support
|
|
683
|
+
- CLI integration
|
|
684
|
+
- Good error messages
|
|
685
|
+
- Documentation
|
|
686
|
+
|
|
687
|
+
Everything else can be added incrementally.
|
|
688
|
+
|
|
689
|
+
---
|
|
690
|
+
|
|
691
|
+
## Dependencies Graph
|
|
692
|
+
|
|
693
|
+
```
|
|
694
|
+
1.1 (Schema) ─────┬─► 1.2 (defineConfig) ─► 1.3 (Loader) ─► 2.1 (CLI Integration)
|
|
695
|
+
│ │
|
|
696
|
+
│ ├─► 2.2 (--config flag)
|
|
697
|
+
│ │
|
|
698
|
+
├─► 3.1 (Env Vars) ◄─────────────────────┘
|
|
699
|
+
│
|
|
700
|
+
├─► 4.1 (Validation Errors) ─► 4.2 (config check)
|
|
701
|
+
│
|
|
702
|
+
├─► 5.2 (JSON Schema)
|
|
703
|
+
│
|
|
704
|
+
└─► 7.1 (Documentation)
|
|
705
|
+
|
|
706
|
+
1.3 (Loader) ─────┬─► 5.1 (Effect Layer) ─► 6.1 (Test Utils) ─► 6.2 (Integration Tests)
|
|
707
|
+
│
|
|
708
|
+
└─► 2.3 (config init)
|
|
709
|
+
|
|
710
|
+
3.2 (Redacted) ──── (Independent)
|
|
711
|
+
```
|
|
712
|
+
|
|
713
|
+
---
|
|
714
|
+
|
|
715
|
+
_Created: 2026-01-21_
|