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,603 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Effect Config Schema Module
|
|
3
|
+
*
|
|
4
|
+
* Defines all configuration options using Effect's Config combinators.
|
|
5
|
+
* This provides native integration with Effect's ConfigProvider system,
|
|
6
|
+
* enabling compile-time tracking of config requirements through the type system.
|
|
7
|
+
*
|
|
8
|
+
* ## Configuration Structure
|
|
9
|
+
*
|
|
10
|
+
* - index: Settings for the indexing process
|
|
11
|
+
* - search: Settings for search operations
|
|
12
|
+
* - embeddings: Settings for semantic embeddings (OpenAI)
|
|
13
|
+
* - output: Settings for CLI output formatting
|
|
14
|
+
* - paths: Settings for file paths and directories
|
|
15
|
+
*
|
|
16
|
+
* ## Usage
|
|
17
|
+
*
|
|
18
|
+
* ```typescript
|
|
19
|
+
* import { MdContextConfig, IndexConfig } from './config/schema.js'
|
|
20
|
+
* import { Effect } from 'effect'
|
|
21
|
+
*
|
|
22
|
+
* const program = Effect.gen(function* () {
|
|
23
|
+
* const config = yield* MdContextConfig
|
|
24
|
+
* console.log(`Max depth: ${config.index.maxDepth}`)
|
|
25
|
+
* })
|
|
26
|
+
* ```
|
|
27
|
+
*/
|
|
28
|
+
|
|
29
|
+
import { Config, Option } from 'effect'
|
|
30
|
+
|
|
31
|
+
// ============================================================================
|
|
32
|
+
// Index Configuration
|
|
33
|
+
// ============================================================================
|
|
34
|
+
|
|
35
|
+
/**
|
|
36
|
+
* Configuration for the indexing process
|
|
37
|
+
*/
|
|
38
|
+
export const IndexConfig = Config.all({
|
|
39
|
+
/**
|
|
40
|
+
* Maximum directory depth to traverse when indexing
|
|
41
|
+
* Default: 10
|
|
42
|
+
*/
|
|
43
|
+
maxDepth: Config.number('maxDepth').pipe(Config.withDefault(10)),
|
|
44
|
+
|
|
45
|
+
/**
|
|
46
|
+
* Glob patterns to exclude from indexing (comma-separated)
|
|
47
|
+
* Default: ['node_modules', '.git', 'dist', 'build']
|
|
48
|
+
*/
|
|
49
|
+
excludePatterns: Config.array(Config.string(), 'excludePatterns').pipe(
|
|
50
|
+
Config.withDefault(['node_modules', '.git', 'dist', 'build']),
|
|
51
|
+
),
|
|
52
|
+
|
|
53
|
+
/**
|
|
54
|
+
* File extensions to index (comma-separated)
|
|
55
|
+
* Default: ['.md', '.mdx']
|
|
56
|
+
*/
|
|
57
|
+
fileExtensions: Config.array(Config.string(), 'fileExtensions').pipe(
|
|
58
|
+
Config.withDefault(['.md', '.mdx']),
|
|
59
|
+
),
|
|
60
|
+
|
|
61
|
+
/**
|
|
62
|
+
* Whether to follow symlinks when traversing directories
|
|
63
|
+
* Default: false
|
|
64
|
+
*/
|
|
65
|
+
followSymlinks: Config.boolean('followSymlinks').pipe(
|
|
66
|
+
Config.withDefault(false),
|
|
67
|
+
),
|
|
68
|
+
|
|
69
|
+
/**
|
|
70
|
+
* Directory where index files are stored (relative to project root)
|
|
71
|
+
* Default: '.mdcontext'
|
|
72
|
+
*/
|
|
73
|
+
indexDir: Config.string('indexDir').pipe(Config.withDefault('.mdcontext')),
|
|
74
|
+
})
|
|
75
|
+
|
|
76
|
+
/**
|
|
77
|
+
* Inferred type for index configuration
|
|
78
|
+
*/
|
|
79
|
+
export type IndexConfig = Config.Config.Success<typeof IndexConfig>
|
|
80
|
+
|
|
81
|
+
// ============================================================================
|
|
82
|
+
// Search Configuration
|
|
83
|
+
// ============================================================================
|
|
84
|
+
|
|
85
|
+
/**
|
|
86
|
+
* Configuration for search operations
|
|
87
|
+
*/
|
|
88
|
+
export const SearchConfig = Config.all({
|
|
89
|
+
/**
|
|
90
|
+
* Default number of search results to return
|
|
91
|
+
* Default: 10
|
|
92
|
+
*/
|
|
93
|
+
defaultLimit: Config.number('defaultLimit').pipe(Config.withDefault(10)),
|
|
94
|
+
|
|
95
|
+
/**
|
|
96
|
+
* Maximum number of search results allowed
|
|
97
|
+
* Default: 100
|
|
98
|
+
*/
|
|
99
|
+
maxLimit: Config.number('maxLimit').pipe(Config.withDefault(100)),
|
|
100
|
+
|
|
101
|
+
/**
|
|
102
|
+
* Minimum similarity score for semantic search results (0-1)
|
|
103
|
+
* Lower values return more results but may include less relevant matches.
|
|
104
|
+
* Default: 0.35 (captures single-word queries that score 30-40%)
|
|
105
|
+
*/
|
|
106
|
+
minSimilarity: Config.number('minSimilarity').pipe(Config.withDefault(0.35)),
|
|
107
|
+
|
|
108
|
+
/**
|
|
109
|
+
* Whether to include content snippets in search results
|
|
110
|
+
* Default: true
|
|
111
|
+
*/
|
|
112
|
+
includeSnippets: Config.boolean('includeSnippets').pipe(
|
|
113
|
+
Config.withDefault(true),
|
|
114
|
+
),
|
|
115
|
+
|
|
116
|
+
/**
|
|
117
|
+
* Maximum length of content snippets in characters
|
|
118
|
+
* Default: 200
|
|
119
|
+
*/
|
|
120
|
+
snippetLength: Config.number('snippetLength').pipe(Config.withDefault(200)),
|
|
121
|
+
|
|
122
|
+
/**
|
|
123
|
+
* Auto-create semantic index if estimated time is under this threshold (seconds)
|
|
124
|
+
* Default: 10
|
|
125
|
+
*/
|
|
126
|
+
autoIndexThreshold: Config.number('autoIndexThreshold').pipe(
|
|
127
|
+
Config.withDefault(10),
|
|
128
|
+
),
|
|
129
|
+
})
|
|
130
|
+
|
|
131
|
+
/**
|
|
132
|
+
* Inferred type for search configuration
|
|
133
|
+
*/
|
|
134
|
+
export type SearchConfig = Config.Config.Success<typeof SearchConfig>
|
|
135
|
+
|
|
136
|
+
// ============================================================================
|
|
137
|
+
// Embeddings Configuration
|
|
138
|
+
// ============================================================================
|
|
139
|
+
|
|
140
|
+
/**
|
|
141
|
+
* Supported embedding providers
|
|
142
|
+
*
|
|
143
|
+
* - openai: OpenAI's text-embedding-3 models (default)
|
|
144
|
+
* - ollama: Local Ollama server with nomic-embed-text or similar
|
|
145
|
+
* - lm-studio: LM Studio's local embedding server
|
|
146
|
+
* - openrouter: OpenRouter API gateway for multiple providers
|
|
147
|
+
*/
|
|
148
|
+
export type EmbeddingProvider =
|
|
149
|
+
| 'openai'
|
|
150
|
+
| 'ollama'
|
|
151
|
+
| 'lm-studio'
|
|
152
|
+
| 'openrouter'
|
|
153
|
+
| 'voyage'
|
|
154
|
+
|
|
155
|
+
/**
|
|
156
|
+
* Supported OpenAI embedding models
|
|
157
|
+
*/
|
|
158
|
+
export type OpenAIEmbeddingModel =
|
|
159
|
+
| 'text-embedding-3-small'
|
|
160
|
+
| 'text-embedding-3-large'
|
|
161
|
+
| 'text-embedding-ada-002'
|
|
162
|
+
|
|
163
|
+
/**
|
|
164
|
+
* Configuration for semantic embeddings
|
|
165
|
+
*/
|
|
166
|
+
export const EmbeddingsConfig = Config.all({
|
|
167
|
+
/**
|
|
168
|
+
* Embedding provider to use
|
|
169
|
+
* Default: 'openai'
|
|
170
|
+
*/
|
|
171
|
+
provider: Config.literal(
|
|
172
|
+
'openai',
|
|
173
|
+
'ollama',
|
|
174
|
+
'lm-studio',
|
|
175
|
+
'openrouter',
|
|
176
|
+
'voyage',
|
|
177
|
+
)('provider').pipe(Config.withDefault('openai' as const)),
|
|
178
|
+
|
|
179
|
+
/**
|
|
180
|
+
* Custom base URL for the embedding API
|
|
181
|
+
* If not specified, provider-specific defaults are used:
|
|
182
|
+
* - openai: https://api.openai.com/v1
|
|
183
|
+
* - ollama: http://localhost:11434/v1
|
|
184
|
+
* - lm-studio: http://localhost:1234/v1
|
|
185
|
+
* - openrouter: https://openrouter.ai/api/v1
|
|
186
|
+
*/
|
|
187
|
+
baseURL: Config.option(Config.string('baseURL')),
|
|
188
|
+
|
|
189
|
+
/**
|
|
190
|
+
* OpenAI embedding model to use
|
|
191
|
+
* Default: 'text-embedding-3-small'
|
|
192
|
+
*/
|
|
193
|
+
model: Config.string('model').pipe(
|
|
194
|
+
Config.withDefault('text-embedding-3-small'),
|
|
195
|
+
),
|
|
196
|
+
|
|
197
|
+
/**
|
|
198
|
+
* Number of dimensions for embeddings
|
|
199
|
+
* Lower dimensions = faster search, higher = more accuracy
|
|
200
|
+
* Default: 512
|
|
201
|
+
*/
|
|
202
|
+
dimensions: Config.number('dimensions').pipe(Config.withDefault(512)),
|
|
203
|
+
|
|
204
|
+
/**
|
|
205
|
+
* Batch size for embedding API calls
|
|
206
|
+
* Default: 100
|
|
207
|
+
*/
|
|
208
|
+
batchSize: Config.number('batchSize').pipe(Config.withDefault(100)),
|
|
209
|
+
|
|
210
|
+
/**
|
|
211
|
+
* Maximum retries for failed API calls
|
|
212
|
+
* Default: 3
|
|
213
|
+
*/
|
|
214
|
+
maxRetries: Config.number('maxRetries').pipe(Config.withDefault(3)),
|
|
215
|
+
|
|
216
|
+
/**
|
|
217
|
+
* Delay between retries in milliseconds
|
|
218
|
+
* Default: 1000
|
|
219
|
+
*/
|
|
220
|
+
retryDelayMs: Config.number('retryDelayMs').pipe(Config.withDefault(1000)),
|
|
221
|
+
|
|
222
|
+
/**
|
|
223
|
+
* Request timeout in milliseconds
|
|
224
|
+
* Default: 30000 (30 seconds)
|
|
225
|
+
*/
|
|
226
|
+
timeoutMs: Config.number('timeoutMs').pipe(Config.withDefault(30000)),
|
|
227
|
+
|
|
228
|
+
/**
|
|
229
|
+
* OpenAI API key (usually from environment variable)
|
|
230
|
+
* No default - must be provided
|
|
231
|
+
*/
|
|
232
|
+
apiKey: Config.option(Config.string('apiKey')),
|
|
233
|
+
|
|
234
|
+
// HNSW Index Build Parameters
|
|
235
|
+
// These control the vector index structure and affect build time and search quality.
|
|
236
|
+
// Changing these requires rebuilding the index.
|
|
237
|
+
|
|
238
|
+
/**
|
|
239
|
+
* HNSW M parameter: maximum connections per node
|
|
240
|
+
* Higher M = better recall but larger index and slower builds
|
|
241
|
+
* Recommended: 12 (speed), 16 (balanced), 24 (quality)
|
|
242
|
+
* Default: 16
|
|
243
|
+
*/
|
|
244
|
+
hnswM: Config.number('hnswM').pipe(Config.withDefault(16)),
|
|
245
|
+
|
|
246
|
+
/**
|
|
247
|
+
* HNSW efConstruction: construction-time search width
|
|
248
|
+
* Higher values = better index quality but slower builds
|
|
249
|
+
* Recommended: 128 (speed), 200 (balanced), 256 (quality)
|
|
250
|
+
* Default: 200
|
|
251
|
+
*/
|
|
252
|
+
hnswEfConstruction: Config.number('hnswEfConstruction').pipe(
|
|
253
|
+
Config.withDefault(200),
|
|
254
|
+
),
|
|
255
|
+
})
|
|
256
|
+
|
|
257
|
+
/**
|
|
258
|
+
* Inferred type for embeddings configuration
|
|
259
|
+
*/
|
|
260
|
+
export type EmbeddingsConfig = Config.Config.Success<typeof EmbeddingsConfig>
|
|
261
|
+
|
|
262
|
+
// ============================================================================
|
|
263
|
+
// Output Configuration
|
|
264
|
+
// ============================================================================
|
|
265
|
+
|
|
266
|
+
/**
|
|
267
|
+
* Supported output formats
|
|
268
|
+
*/
|
|
269
|
+
export type OutputFormat = 'text' | 'json'
|
|
270
|
+
|
|
271
|
+
/**
|
|
272
|
+
* Configuration for CLI output formatting
|
|
273
|
+
*/
|
|
274
|
+
export const OutputConfig = Config.all({
|
|
275
|
+
/**
|
|
276
|
+
* Default output format
|
|
277
|
+
* Default: 'text'
|
|
278
|
+
*/
|
|
279
|
+
format: Config.literal(
|
|
280
|
+
'text',
|
|
281
|
+
'json',
|
|
282
|
+
)('format').pipe(Config.withDefault('text' as const)),
|
|
283
|
+
|
|
284
|
+
/**
|
|
285
|
+
* Whether to use colors in terminal output
|
|
286
|
+
* Default: true
|
|
287
|
+
*/
|
|
288
|
+
color: Config.boolean('color').pipe(Config.withDefault(true)),
|
|
289
|
+
|
|
290
|
+
/**
|
|
291
|
+
* Whether to pretty-print JSON output
|
|
292
|
+
* Default: true
|
|
293
|
+
*/
|
|
294
|
+
prettyJson: Config.boolean('prettyJson').pipe(Config.withDefault(true)),
|
|
295
|
+
|
|
296
|
+
/**
|
|
297
|
+
* Whether to show verbose output
|
|
298
|
+
* Default: false
|
|
299
|
+
*/
|
|
300
|
+
verbose: Config.boolean('verbose').pipe(Config.withDefault(false)),
|
|
301
|
+
|
|
302
|
+
/**
|
|
303
|
+
* Whether to show debug information
|
|
304
|
+
* Default: false
|
|
305
|
+
*/
|
|
306
|
+
debug: Config.boolean('debug').pipe(Config.withDefault(false)),
|
|
307
|
+
})
|
|
308
|
+
|
|
309
|
+
/**
|
|
310
|
+
* Inferred type for output configuration
|
|
311
|
+
*/
|
|
312
|
+
export type OutputConfig = Config.Config.Success<typeof OutputConfig>
|
|
313
|
+
|
|
314
|
+
// ============================================================================
|
|
315
|
+
// Summarization Configuration
|
|
316
|
+
// ============================================================================
|
|
317
|
+
|
|
318
|
+
/**
|
|
319
|
+
* Configuration for summarization and context assembly
|
|
320
|
+
*/
|
|
321
|
+
export const SummarizationConfig = Config.all({
|
|
322
|
+
/**
|
|
323
|
+
* Token budget for 'brief' compression level
|
|
324
|
+
* Default: 100
|
|
325
|
+
*/
|
|
326
|
+
briefTokenBudget: Config.number('briefTokenBudget').pipe(
|
|
327
|
+
Config.withDefault(100),
|
|
328
|
+
),
|
|
329
|
+
|
|
330
|
+
/**
|
|
331
|
+
* Token budget for 'summary' compression level
|
|
332
|
+
* Default: 500
|
|
333
|
+
*/
|
|
334
|
+
summaryTokenBudget: Config.number('summaryTokenBudget').pipe(
|
|
335
|
+
Config.withDefault(500),
|
|
336
|
+
),
|
|
337
|
+
|
|
338
|
+
/**
|
|
339
|
+
* Target compression ratio for summaries (0-1)
|
|
340
|
+
* Default: 0.3 (30% of original)
|
|
341
|
+
*/
|
|
342
|
+
compressionRatio: Config.number('compressionRatio').pipe(
|
|
343
|
+
Config.withDefault(0.3),
|
|
344
|
+
),
|
|
345
|
+
|
|
346
|
+
/**
|
|
347
|
+
* Minimum tokens for any section summary
|
|
348
|
+
* Default: 20
|
|
349
|
+
*/
|
|
350
|
+
minSectionTokens: Config.number('minSectionTokens').pipe(
|
|
351
|
+
Config.withDefault(20),
|
|
352
|
+
),
|
|
353
|
+
|
|
354
|
+
/**
|
|
355
|
+
* Maximum topics to extract from a document
|
|
356
|
+
* Default: 10
|
|
357
|
+
*/
|
|
358
|
+
maxTopics: Config.number('maxTopics').pipe(Config.withDefault(10)),
|
|
359
|
+
|
|
360
|
+
/**
|
|
361
|
+
* Minimum remaining budget to include partial content
|
|
362
|
+
* Default: 50
|
|
363
|
+
*/
|
|
364
|
+
minPartialBudget: Config.number('minPartialBudget').pipe(
|
|
365
|
+
Config.withDefault(50),
|
|
366
|
+
),
|
|
367
|
+
})
|
|
368
|
+
|
|
369
|
+
/**
|
|
370
|
+
* Inferred type for summarization configuration
|
|
371
|
+
*/
|
|
372
|
+
export type SummarizationConfig = Config.Config.Success<
|
|
373
|
+
typeof SummarizationConfig
|
|
374
|
+
>
|
|
375
|
+
|
|
376
|
+
// ============================================================================
|
|
377
|
+
// AI Summarization Configuration
|
|
378
|
+
// ============================================================================
|
|
379
|
+
|
|
380
|
+
/**
|
|
381
|
+
* Supported AI summarization modes
|
|
382
|
+
*
|
|
383
|
+
* - cli: Use CLI tools like Claude Code, Copilot CLI (free with subscription)
|
|
384
|
+
* - api: Use API providers like DeepSeek, OpenAI (pay-per-use)
|
|
385
|
+
*/
|
|
386
|
+
export type AISummarizationMode = 'cli' | 'api'
|
|
387
|
+
|
|
388
|
+
/**
|
|
389
|
+
* CLI provider names for AI summarization
|
|
390
|
+
*/
|
|
391
|
+
export type CLIProviderName =
|
|
392
|
+
| 'claude'
|
|
393
|
+
| 'copilot'
|
|
394
|
+
| 'cline'
|
|
395
|
+
| 'aider'
|
|
396
|
+
| 'opencode'
|
|
397
|
+
| 'amp'
|
|
398
|
+
|
|
399
|
+
/**
|
|
400
|
+
* API provider names for AI summarization
|
|
401
|
+
*/
|
|
402
|
+
export type APIProviderName =
|
|
403
|
+
| 'deepseek'
|
|
404
|
+
| 'anthropic'
|
|
405
|
+
| 'openai'
|
|
406
|
+
| 'gemini'
|
|
407
|
+
| 'qwen'
|
|
408
|
+
|
|
409
|
+
/**
|
|
410
|
+
* All provider names (CLI + API)
|
|
411
|
+
*/
|
|
412
|
+
export type SummarizationProviderName = CLIProviderName | APIProviderName
|
|
413
|
+
|
|
414
|
+
/**
|
|
415
|
+
* Configuration for AI-powered summarization of search results.
|
|
416
|
+
*
|
|
417
|
+
* This is separate from SummarizationConfig which handles token budgets
|
|
418
|
+
* for context assembly. AISummarizationConfig controls the AI provider
|
|
419
|
+
* used to generate natural language summaries.
|
|
420
|
+
*/
|
|
421
|
+
export const AISummarizationConfig = Config.all({
|
|
422
|
+
/**
|
|
423
|
+
* Summarization mode: 'cli' (free) or 'api' (pay-per-use)
|
|
424
|
+
* Default: 'cli' - prioritize free CLI tools
|
|
425
|
+
*/
|
|
426
|
+
mode: Config.literal(
|
|
427
|
+
'cli',
|
|
428
|
+
'api',
|
|
429
|
+
)('mode').pipe(Config.withDefault('cli' as const)),
|
|
430
|
+
|
|
431
|
+
/**
|
|
432
|
+
* Provider name (e.g., 'claude', 'opencode' for CLI; 'deepseek', 'openai' for API)
|
|
433
|
+
* Default: 'claude' - most common CLI tool
|
|
434
|
+
*/
|
|
435
|
+
provider: Config.literal(
|
|
436
|
+
// CLI providers
|
|
437
|
+
'claude',
|
|
438
|
+
'copilot',
|
|
439
|
+
'cline',
|
|
440
|
+
'aider',
|
|
441
|
+
'opencode',
|
|
442
|
+
'amp',
|
|
443
|
+
// API providers
|
|
444
|
+
'deepseek',
|
|
445
|
+
'anthropic',
|
|
446
|
+
'openai',
|
|
447
|
+
'gemini',
|
|
448
|
+
'qwen',
|
|
449
|
+
)('provider').pipe(Config.withDefault('claude' as const)),
|
|
450
|
+
|
|
451
|
+
/**
|
|
452
|
+
* Model name for API providers (ignored for CLI providers)
|
|
453
|
+
* Default: 'deepseek-chat' - ultra-cheap default
|
|
454
|
+
*/
|
|
455
|
+
model: Config.option(Config.string('model')),
|
|
456
|
+
|
|
457
|
+
/**
|
|
458
|
+
* Enable streaming output
|
|
459
|
+
* Default: false
|
|
460
|
+
*/
|
|
461
|
+
stream: Config.boolean('stream').pipe(Config.withDefault(false)),
|
|
462
|
+
|
|
463
|
+
/**
|
|
464
|
+
* Custom API base URL (for API providers)
|
|
465
|
+
*/
|
|
466
|
+
baseURL: Config.option(Config.string('baseURL')),
|
|
467
|
+
|
|
468
|
+
/**
|
|
469
|
+
* API key (for API providers, usually from environment)
|
|
470
|
+
*/
|
|
471
|
+
apiKey: Config.option(Config.string('apiKey')),
|
|
472
|
+
})
|
|
473
|
+
|
|
474
|
+
/**
|
|
475
|
+
* Inferred type for AI summarization configuration
|
|
476
|
+
*/
|
|
477
|
+
export type AISummarizationConfig = Config.Config.Success<
|
|
478
|
+
typeof AISummarizationConfig
|
|
479
|
+
>
|
|
480
|
+
|
|
481
|
+
// ============================================================================
|
|
482
|
+
// Paths Configuration
|
|
483
|
+
// ============================================================================
|
|
484
|
+
|
|
485
|
+
/**
|
|
486
|
+
* Configuration for file paths and directories
|
|
487
|
+
*/
|
|
488
|
+
export const PathsConfig = Config.all({
|
|
489
|
+
/**
|
|
490
|
+
* Root directory for markdown files (default: current working directory)
|
|
491
|
+
*/
|
|
492
|
+
root: Config.option(Config.string('root')),
|
|
493
|
+
|
|
494
|
+
/**
|
|
495
|
+
* Custom config file path (default: auto-detected)
|
|
496
|
+
*/
|
|
497
|
+
configFile: Config.option(Config.string('configFile')),
|
|
498
|
+
|
|
499
|
+
/**
|
|
500
|
+
* Cache directory for temporary files
|
|
501
|
+
* Default: '.mdcontext/cache'
|
|
502
|
+
*/
|
|
503
|
+
cacheDir: Config.string('cacheDir').pipe(
|
|
504
|
+
Config.withDefault('.mdcontext/cache'),
|
|
505
|
+
),
|
|
506
|
+
})
|
|
507
|
+
|
|
508
|
+
/**
|
|
509
|
+
* Inferred type for paths configuration
|
|
510
|
+
*/
|
|
511
|
+
export type PathsConfig = Config.Config.Success<typeof PathsConfig>
|
|
512
|
+
|
|
513
|
+
// ============================================================================
|
|
514
|
+
// Full Configuration
|
|
515
|
+
// ============================================================================
|
|
516
|
+
|
|
517
|
+
/**
|
|
518
|
+
* Complete mdcontext configuration
|
|
519
|
+
*
|
|
520
|
+
* Combines all configuration sections into a single nested config.
|
|
521
|
+
* Use with Effect's ConfigProvider to load from various sources.
|
|
522
|
+
*/
|
|
523
|
+
export const MdContextConfig = Config.all({
|
|
524
|
+
index: Config.nested(IndexConfig, 'index'),
|
|
525
|
+
search: Config.nested(SearchConfig, 'search'),
|
|
526
|
+
embeddings: Config.nested(EmbeddingsConfig, 'embeddings'),
|
|
527
|
+
summarization: Config.nested(SummarizationConfig, 'summarization'),
|
|
528
|
+
aiSummarization: Config.nested(AISummarizationConfig, 'aiSummarization'),
|
|
529
|
+
output: Config.nested(OutputConfig, 'output'),
|
|
530
|
+
paths: Config.nested(PathsConfig, 'paths'),
|
|
531
|
+
})
|
|
532
|
+
|
|
533
|
+
/**
|
|
534
|
+
* Inferred type for the complete configuration
|
|
535
|
+
*/
|
|
536
|
+
export type MdContextConfig = Config.Config.Success<typeof MdContextConfig>
|
|
537
|
+
|
|
538
|
+
// ============================================================================
|
|
539
|
+
// Default Configuration Values
|
|
540
|
+
// ============================================================================
|
|
541
|
+
|
|
542
|
+
/**
|
|
543
|
+
* Default configuration values as a plain object.
|
|
544
|
+
* Useful for initializing config files or for documentation.
|
|
545
|
+
*/
|
|
546
|
+
export const defaultConfig: MdContextConfig = {
|
|
547
|
+
index: {
|
|
548
|
+
maxDepth: 10,
|
|
549
|
+
excludePatterns: ['node_modules', '.git', 'dist', 'build'],
|
|
550
|
+
fileExtensions: ['.md', '.mdx'],
|
|
551
|
+
followSymlinks: false,
|
|
552
|
+
indexDir: '.mdcontext',
|
|
553
|
+
},
|
|
554
|
+
search: {
|
|
555
|
+
defaultLimit: 10,
|
|
556
|
+
maxLimit: 100,
|
|
557
|
+
minSimilarity: 0.35,
|
|
558
|
+
includeSnippets: true,
|
|
559
|
+
snippetLength: 200,
|
|
560
|
+
autoIndexThreshold: 10,
|
|
561
|
+
},
|
|
562
|
+
embeddings: {
|
|
563
|
+
provider: 'openai',
|
|
564
|
+
baseURL: Option.none(),
|
|
565
|
+
model: 'text-embedding-3-small',
|
|
566
|
+
dimensions: 512,
|
|
567
|
+
batchSize: 100,
|
|
568
|
+
maxRetries: 3,
|
|
569
|
+
retryDelayMs: 1000,
|
|
570
|
+
timeoutMs: 30000,
|
|
571
|
+
apiKey: Option.none(),
|
|
572
|
+
hnswM: 16,
|
|
573
|
+
hnswEfConstruction: 200,
|
|
574
|
+
},
|
|
575
|
+
summarization: {
|
|
576
|
+
briefTokenBudget: 100,
|
|
577
|
+
summaryTokenBudget: 500,
|
|
578
|
+
compressionRatio: 0.3,
|
|
579
|
+
minSectionTokens: 20,
|
|
580
|
+
maxTopics: 10,
|
|
581
|
+
minPartialBudget: 50,
|
|
582
|
+
},
|
|
583
|
+
aiSummarization: {
|
|
584
|
+
mode: 'cli',
|
|
585
|
+
provider: 'claude',
|
|
586
|
+
model: Option.none(),
|
|
587
|
+
stream: false,
|
|
588
|
+
baseURL: Option.none(),
|
|
589
|
+
apiKey: Option.none(),
|
|
590
|
+
},
|
|
591
|
+
output: {
|
|
592
|
+
format: 'text',
|
|
593
|
+
color: true,
|
|
594
|
+
prettyJson: true,
|
|
595
|
+
verbose: false,
|
|
596
|
+
debug: false,
|
|
597
|
+
},
|
|
598
|
+
paths: {
|
|
599
|
+
root: Option.none(),
|
|
600
|
+
configFile: Option.none(),
|
|
601
|
+
cacheDir: '.mdcontext/cache',
|
|
602
|
+
},
|
|
603
|
+
}
|