mdcontext 0.0.1 → 0.2.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (337) hide show
  1. package/.changeset/README.md +28 -0
  2. package/.changeset/config.json +11 -0
  3. package/.claude/settings.local.json +25 -0
  4. package/.github/workflows/ci.yml +83 -0
  5. package/.github/workflows/claude-code-review.yml +44 -0
  6. package/.github/workflows/claude.yml +85 -0
  7. package/.github/workflows/release.yml +113 -0
  8. package/.tldrignore +112 -0
  9. package/BACKLOG.md +338 -0
  10. package/CONTRIBUTING.md +186 -0
  11. package/NOTES/NOTES +44 -0
  12. package/README.md +434 -11
  13. package/biome.json +36 -0
  14. package/cspell.config.yaml +14 -0
  15. package/dist/chunk-23UPXDNL.js +3044 -0
  16. package/dist/chunk-2W7MO2DL.js +1366 -0
  17. package/dist/chunk-3NUAZGMA.js +1689 -0
  18. package/dist/chunk-7TOWB2XB.js +366 -0
  19. package/dist/chunk-7XOTOADQ.js +3065 -0
  20. package/dist/chunk-AH2PDM2K.js +3042 -0
  21. package/dist/chunk-BNXWSZ63.js +3742 -0
  22. package/dist/chunk-BTL5DJVU.js +3222 -0
  23. package/dist/chunk-HDHYG7E4.js +104 -0
  24. package/dist/chunk-HLR4KZBP.js +3234 -0
  25. package/dist/chunk-IP3FRFEB.js +1045 -0
  26. package/dist/chunk-KHU56VDO.js +3042 -0
  27. package/dist/chunk-KRYIFLQR.js +88 -0
  28. package/dist/chunk-LBSDNLEM.js +287 -0
  29. package/dist/chunk-MNTQ7HCP.js +2643 -0
  30. package/dist/chunk-MUJELQQ6.js +1387 -0
  31. package/dist/chunk-MXJGMSLV.js +2199 -0
  32. package/dist/chunk-N6QJGC3Z.js +2636 -0
  33. package/dist/chunk-OBELGBPM.js +1713 -0
  34. package/dist/chunk-OT7R5XTA.js +3192 -0
  35. package/dist/chunk-P7X4RA2T.js +106 -0
  36. package/dist/chunk-PIDUQNC2.js +3185 -0
  37. package/dist/chunk-POGCDIH4.js +3187 -0
  38. package/dist/chunk-PSIEOQGZ.js +3043 -0
  39. package/dist/chunk-PVRT3IHA.js +3238 -0
  40. package/dist/chunk-QNN4TT23.js +1430 -0
  41. package/dist/chunk-RE3R45RJ.js +3042 -0
  42. package/dist/chunk-S7E6TFX6.js +803 -0
  43. package/dist/chunk-SG6GLU4U.js +1378 -0
  44. package/dist/chunk-SJCDV2ST.js +274 -0
  45. package/dist/chunk-SYE5XLF3.js +104 -0
  46. package/dist/chunk-T5VLYBZD.js +103 -0
  47. package/dist/chunk-TOQB7VWU.js +3238 -0
  48. package/dist/chunk-VFNMZ4ZQ.js +3228 -0
  49. package/dist/chunk-VVTGZNBT.js +1629 -0
  50. package/dist/chunk-W7Q4RFEV.js +104 -0
  51. package/dist/chunk-XTYYVRLO.js +3190 -0
  52. package/dist/chunk-Y6MDYVJD.js +3063 -0
  53. package/dist/cli/main.d.ts +1 -0
  54. package/dist/cli/main.js +5458 -0
  55. package/dist/index.d.ts +653 -0
  56. package/dist/index.js +79 -0
  57. package/dist/mcp/server.d.ts +1 -0
  58. package/dist/mcp/server.js +472 -0
  59. package/dist/schema-BAWSG7KY.js +22 -0
  60. package/dist/schema-E3QUPL26.js +20 -0
  61. package/dist/schema-EHL7WUT6.js +20 -0
  62. package/docs/019-USAGE.md +625 -0
  63. package/docs/020-current-implementation.md +364 -0
  64. package/docs/021-DOGFOODING-FINDINGS.md +175 -0
  65. package/docs/BACKLOG.md +80 -0
  66. package/docs/CONFIG.md +1123 -0
  67. package/docs/DESIGN.md +439 -0
  68. package/docs/ERRORS.md +383 -0
  69. package/docs/PROJECT.md +88 -0
  70. package/docs/ROADMAP.md +407 -0
  71. package/docs/summarization.md +320 -0
  72. package/docs/test-links.md +9 -0
  73. package/justfile +40 -0
  74. package/package.json +74 -9
  75. package/pnpm-workspace.yaml +5 -0
  76. package/research/INDEX.md +315 -0
  77. package/research/code-review/README.md +90 -0
  78. package/research/code-review/cli-error-handling-review.md +979 -0
  79. package/research/code-review/code-review-validation-report.md +464 -0
  80. package/research/code-review/main-ts-review.md +1128 -0
  81. package/research/config-analysis/01-current-implementation.md +470 -0
  82. package/research/config-analysis/02-strategy-recommendation.md +428 -0
  83. package/research/config-analysis/03-task-candidates.md +715 -0
  84. package/research/config-analysis/033-research-configuration-management.md +828 -0
  85. package/research/config-analysis/034-research-effect-cli-config.md +1504 -0
  86. package/research/config-analysis/04-consolidated-task-candidates.md +277 -0
  87. package/research/config-docs/SUMMARY.md +357 -0
  88. package/research/config-docs/TEST-RESULTS.md +776 -0
  89. package/research/config-docs/TODO.md +542 -0
  90. package/research/config-docs/analysis.md +744 -0
  91. package/research/config-docs/fix-validation.md +502 -0
  92. package/research/config-docs/help-audit.md +264 -0
  93. package/research/config-docs/help-system-analysis.md +890 -0
  94. package/research/dogfood/consolidated-tool-evaluation.md +373 -0
  95. package/research/dogfood/strategy-a/a-synthesis.md +184 -0
  96. package/research/dogfood/strategy-a/a1-docs.md +226 -0
  97. package/research/dogfood/strategy-a/a2-amorphic.md +156 -0
  98. package/research/dogfood/strategy-a/a3-llm.md +164 -0
  99. package/research/dogfood/strategy-b/b-synthesis.md +228 -0
  100. package/research/dogfood/strategy-b/b1-architecture.md +207 -0
  101. package/research/dogfood/strategy-b/b2-gaps.md +258 -0
  102. package/research/dogfood/strategy-b/b3-workflows.md +250 -0
  103. package/research/dogfood/strategy-c/c-synthesis.md +451 -0
  104. package/research/dogfood/strategy-c/c1-explorer.md +192 -0
  105. package/research/dogfood/strategy-c/c2-diver-memory.md +145 -0
  106. package/research/dogfood/strategy-c/c3-diver-control.md +148 -0
  107. package/research/dogfood/strategy-c/c4-diver-failure.md +151 -0
  108. package/research/dogfood/strategy-c/c5-diver-execution.md +221 -0
  109. package/research/dogfood/strategy-c/c6-diver-org.md +221 -0
  110. package/research/effect-cli-error-handling.md +845 -0
  111. package/research/effect-errors-as-values.md +943 -0
  112. package/research/errors-task-analysis/00-consolidated-tasks.md +207 -0
  113. package/research/errors-task-analysis/cli-commands-analysis.md +909 -0
  114. package/research/errors-task-analysis/embeddings-analysis.md +709 -0
  115. package/research/errors-task-analysis/index-search-analysis.md +812 -0
  116. package/research/frontmatter/COMMENTS-ARE-SKIPPED.md +149 -0
  117. package/research/frontmatter/LLM-CODE-NAVIGATION.md +276 -0
  118. package/research/issue-review.md +603 -0
  119. package/research/llm-summarization/agent-cli-tools-2026.md +1082 -0
  120. package/research/llm-summarization/alternative-providers-2026.md +1428 -0
  121. package/research/llm-summarization/anthropic-2026.md +367 -0
  122. package/research/llm-summarization/claude-cli-integration.md +1706 -0
  123. package/research/llm-summarization/cli-integration-patterns.md +3155 -0
  124. package/research/llm-summarization/openai-2026.md +473 -0
  125. package/research/llm-summarization/openai-compatible-providers-2026.md +1022 -0
  126. package/research/llm-summarization/opencode-cli-integration.md +1552 -0
  127. package/research/llm-summarization/prompt-engineering-2026.md +1426 -0
  128. package/research/llm-summarization/prototype-results.md +56 -0
  129. package/research/llm-summarization/provider-switching-patterns-2026.md +2153 -0
  130. package/research/llm-summarization/typescript-llm-libraries-2026.md +2436 -0
  131. package/research/mdcontext-error-analysis.md +521 -0
  132. package/research/mdcontext-pudding/00-EXECUTIVE-SUMMARY.md +282 -0
  133. package/research/mdcontext-pudding/01-index-embed.md +956 -0
  134. package/research/mdcontext-pudding/02-search-COMMANDS.md +142 -0
  135. package/research/mdcontext-pudding/02-search-SUMMARY.md +146 -0
  136. package/research/mdcontext-pudding/02-search.md +970 -0
  137. package/research/mdcontext-pudding/03-context.md +779 -0
  138. package/research/mdcontext-pudding/04-navigation-and-analytics.md +803 -0
  139. package/research/mdcontext-pudding/04-tree.md +704 -0
  140. package/research/mdcontext-pudding/05-config.md +1038 -0
  141. package/research/mdcontext-pudding/06-links-summary.txt +87 -0
  142. package/research/mdcontext-pudding/06-links.md +679 -0
  143. package/research/mdcontext-pudding/07-stats.md +693 -0
  144. package/research/mdcontext-pudding/BUG-FIX-PLAN.md +388 -0
  145. package/research/mdcontext-pudding/P0-BUG-VALIDATION.md +167 -0
  146. package/research/mdcontext-pudding/README.md +168 -0
  147. package/research/mdcontext-pudding/TESTING-SUMMARY.md +128 -0
  148. package/research/npm_publish/011-npm-workflow-research-agent2.md +792 -0
  149. package/research/npm_publish/012-npm-workflow-research-agent1.md +530 -0
  150. package/research/npm_publish/013-npm-workflow-research-agent3.md +722 -0
  151. package/research/npm_publish/014-npm-workflow-synthesis.md +556 -0
  152. package/research/npm_publish/031-npm-workflow-task-analysis.md +134 -0
  153. package/research/research-quality-review.md +834 -0
  154. package/research/semantic-search/002-research-embedding-models.md +490 -0
  155. package/research/semantic-search/003-research-rag-alternatives.md +523 -0
  156. package/research/semantic-search/004-research-vector-search.md +841 -0
  157. package/research/semantic-search/032-research-semantic-search.md +427 -0
  158. package/research/semantic-search/embedding-text-analysis.md +156 -0
  159. package/research/semantic-search/multi-word-failure-reproduction.md +171 -0
  160. package/research/semantic-search/query-processing-analysis.md +207 -0
  161. package/research/semantic-search/root-cause-and-solution.md +114 -0
  162. package/research/semantic-search/threshold-validation-report.md +69 -0
  163. package/research/semantic-search/vector-search-analysis.md +63 -0
  164. package/research/task-management-2026/00-synthesis-recommendations.md +295 -0
  165. package/research/task-management-2026/01-ai-workflow-tools.md +416 -0
  166. package/research/task-management-2026/02-agent-framework-patterns.md +476 -0
  167. package/research/task-management-2026/03-lightweight-file-based.md +567 -0
  168. package/research/task-management-2026/04-established-tools-ai-features.md +541 -0
  169. package/research/task-management-2026/linear/01-core-features-workflow.md +771 -0
  170. package/research/task-management-2026/linear/02-api-integrations.md +930 -0
  171. package/research/task-management-2026/linear/03-ai-features.md +368 -0
  172. package/research/task-management-2026/linear/04-pricing-setup.md +205 -0
  173. package/research/task-management-2026/linear/05-usage-patterns-best-practices.md +605 -0
  174. package/research/test-path-issues.md +276 -0
  175. package/review/ALP-76/1-error-type-design.md +962 -0
  176. package/review/ALP-76/2-error-handling-patterns.md +906 -0
  177. package/review/ALP-76/3-error-presentation.md +624 -0
  178. package/review/ALP-76/4-test-coverage.md +625 -0
  179. package/review/ALP-76/5-migration-completeness.md +440 -0
  180. package/review/ALP-76/6-effect-best-practices.md +755 -0
  181. package/scripts/apply-branch-protection.sh +47 -0
  182. package/scripts/branch-protection-templates.json +79 -0
  183. package/scripts/prototype-summarization.ts +346 -0
  184. package/scripts/rebuild-hnswlib.js +58 -0
  185. package/scripts/setup-branch-protection.sh +64 -0
  186. package/src/__tests__/fixtures/semantic-search/multi-word-corpus/.mdcontext/active-provider.json +7 -0
  187. package/src/__tests__/fixtures/semantic-search/multi-word-corpus/.mdcontext/bm25.json +541 -0
  188. package/src/__tests__/fixtures/semantic-search/multi-word-corpus/.mdcontext/bm25.meta.json +5 -0
  189. package/src/__tests__/fixtures/semantic-search/multi-word-corpus/.mdcontext/config.json +8 -0
  190. package/src/__tests__/fixtures/semantic-search/multi-word-corpus/.mdcontext/embeddings/openai_text-embedding-3-small_512/vectors.bin +0 -0
  191. package/src/__tests__/fixtures/semantic-search/multi-word-corpus/.mdcontext/embeddings/openai_text-embedding-3-small_512/vectors.meta.bin +0 -0
  192. package/src/__tests__/fixtures/semantic-search/multi-word-corpus/.mdcontext/indexes/documents.json +60 -0
  193. package/src/__tests__/fixtures/semantic-search/multi-word-corpus/.mdcontext/indexes/links.json +13 -0
  194. package/src/__tests__/fixtures/semantic-search/multi-word-corpus/.mdcontext/indexes/sections.json +1197 -0
  195. package/src/__tests__/fixtures/semantic-search/multi-word-corpus/configuration-management.md +99 -0
  196. package/src/__tests__/fixtures/semantic-search/multi-word-corpus/distributed-systems.md +92 -0
  197. package/src/__tests__/fixtures/semantic-search/multi-word-corpus/error-handling.md +78 -0
  198. package/src/__tests__/fixtures/semantic-search/multi-word-corpus/failure-automation.md +55 -0
  199. package/src/__tests__/fixtures/semantic-search/multi-word-corpus/job-context.md +69 -0
  200. package/src/__tests__/fixtures/semantic-search/multi-word-corpus/process-orchestration.md +99 -0
  201. package/src/cli/argv-preprocessor.test.ts +210 -0
  202. package/src/cli/argv-preprocessor.ts +202 -0
  203. package/src/cli/cli.test.ts +627 -0
  204. package/src/cli/commands/backlinks.ts +54 -0
  205. package/src/cli/commands/config-cmd.ts +642 -0
  206. package/src/cli/commands/context.ts +285 -0
  207. package/src/cli/commands/duplicates.ts +122 -0
  208. package/src/cli/commands/embeddings.ts +529 -0
  209. package/src/cli/commands/index-cmd.ts +480 -0
  210. package/src/cli/commands/index.ts +16 -0
  211. package/src/cli/commands/links.ts +52 -0
  212. package/src/cli/commands/search.ts +1281 -0
  213. package/src/cli/commands/stats.ts +149 -0
  214. package/src/cli/commands/tree.ts +128 -0
  215. package/src/cli/config-layer.ts +176 -0
  216. package/src/cli/error-handler.test.ts +235 -0
  217. package/src/cli/error-handler.ts +655 -0
  218. package/src/cli/flag-schemas.ts +341 -0
  219. package/src/cli/help.ts +588 -0
  220. package/src/cli/index.ts +9 -0
  221. package/src/cli/main.ts +435 -0
  222. package/src/cli/options.ts +41 -0
  223. package/src/cli/shared-error-handling.ts +199 -0
  224. package/src/cli/typo-suggester.test.ts +105 -0
  225. package/src/cli/typo-suggester.ts +130 -0
  226. package/src/cli/utils.ts +259 -0
  227. package/src/config/file-provider.test.ts +320 -0
  228. package/src/config/file-provider.ts +273 -0
  229. package/src/config/index.ts +72 -0
  230. package/src/config/integration.test.ts +667 -0
  231. package/src/config/precedence.test.ts +277 -0
  232. package/src/config/precedence.ts +451 -0
  233. package/src/config/schema.test.ts +414 -0
  234. package/src/config/schema.ts +603 -0
  235. package/src/config/service.test.ts +320 -0
  236. package/src/config/service.ts +243 -0
  237. package/src/config/testing.test.ts +264 -0
  238. package/src/config/testing.ts +110 -0
  239. package/src/core/index.ts +1 -0
  240. package/src/core/types.ts +113 -0
  241. package/src/duplicates/detector.test.ts +183 -0
  242. package/src/duplicates/detector.ts +414 -0
  243. package/src/duplicates/index.ts +18 -0
  244. package/src/embeddings/embedding-namespace.test.ts +300 -0
  245. package/src/embeddings/embedding-namespace.ts +947 -0
  246. package/src/embeddings/heading-boost.test.ts +222 -0
  247. package/src/embeddings/hnsw-build-options.test.ts +198 -0
  248. package/src/embeddings/hyde.test.ts +272 -0
  249. package/src/embeddings/hyde.ts +264 -0
  250. package/src/embeddings/index.ts +10 -0
  251. package/src/embeddings/openai-provider.ts +414 -0
  252. package/src/embeddings/pricing.json +22 -0
  253. package/src/embeddings/provider-constants.ts +204 -0
  254. package/src/embeddings/provider-errors.test.ts +967 -0
  255. package/src/embeddings/provider-errors.ts +565 -0
  256. package/src/embeddings/provider-factory.test.ts +240 -0
  257. package/src/embeddings/provider-factory.ts +225 -0
  258. package/src/embeddings/provider-integration.test.ts +788 -0
  259. package/src/embeddings/query-preprocessing.test.ts +187 -0
  260. package/src/embeddings/semantic-search-threshold.test.ts +508 -0
  261. package/src/embeddings/semantic-search.ts +1270 -0
  262. package/src/embeddings/types.ts +359 -0
  263. package/src/embeddings/vector-store.ts +708 -0
  264. package/src/embeddings/voyage-provider.ts +313 -0
  265. package/src/errors/errors.test.ts +845 -0
  266. package/src/errors/index.ts +533 -0
  267. package/src/index/ignore-patterns.test.ts +354 -0
  268. package/src/index/ignore-patterns.ts +305 -0
  269. package/src/index/index.ts +4 -0
  270. package/src/index/indexer.ts +684 -0
  271. package/src/index/storage.ts +260 -0
  272. package/src/index/types.ts +147 -0
  273. package/src/index/watcher.ts +189 -0
  274. package/src/index.ts +30 -0
  275. package/src/integration/search-keyword.test.ts +678 -0
  276. package/src/mcp/server.ts +612 -0
  277. package/src/parser/index.ts +1 -0
  278. package/src/parser/parser.test.ts +291 -0
  279. package/src/parser/parser.ts +394 -0
  280. package/src/parser/section-filter.test.ts +277 -0
  281. package/src/parser/section-filter.ts +392 -0
  282. package/src/search/__tests__/hybrid-search.test.ts +650 -0
  283. package/src/search/bm25-store.ts +366 -0
  284. package/src/search/cross-encoder.test.ts +253 -0
  285. package/src/search/cross-encoder.ts +406 -0
  286. package/src/search/fuzzy-search.test.ts +419 -0
  287. package/src/search/fuzzy-search.ts +273 -0
  288. package/src/search/hybrid-search.ts +448 -0
  289. package/src/search/path-matcher.test.ts +276 -0
  290. package/src/search/path-matcher.ts +33 -0
  291. package/src/search/query-parser.test.ts +260 -0
  292. package/src/search/query-parser.ts +319 -0
  293. package/src/search/searcher.test.ts +280 -0
  294. package/src/search/searcher.ts +724 -0
  295. package/src/search/wink-bm25.d.ts +30 -0
  296. package/src/summarization/cli-providers/claude.ts +202 -0
  297. package/src/summarization/cli-providers/detection.test.ts +273 -0
  298. package/src/summarization/cli-providers/detection.ts +118 -0
  299. package/src/summarization/cli-providers/index.ts +8 -0
  300. package/src/summarization/cost.test.ts +139 -0
  301. package/src/summarization/cost.ts +102 -0
  302. package/src/summarization/error-handler.test.ts +127 -0
  303. package/src/summarization/error-handler.ts +111 -0
  304. package/src/summarization/index.ts +102 -0
  305. package/src/summarization/pipeline.test.ts +498 -0
  306. package/src/summarization/pipeline.ts +231 -0
  307. package/src/summarization/prompts.test.ts +269 -0
  308. package/src/summarization/prompts.ts +133 -0
  309. package/src/summarization/provider-factory.test.ts +396 -0
  310. package/src/summarization/provider-factory.ts +178 -0
  311. package/src/summarization/types.ts +184 -0
  312. package/src/summarize/budget-bugs.test.ts +620 -0
  313. package/src/summarize/formatters.ts +419 -0
  314. package/src/summarize/index.ts +20 -0
  315. package/src/summarize/summarizer.test.ts +275 -0
  316. package/src/summarize/summarizer.ts +597 -0
  317. package/src/summarize/verify-bugs.test.ts +238 -0
  318. package/src/types/huggingface-transformers.d.ts +66 -0
  319. package/src/utils/index.ts +1 -0
  320. package/src/utils/tokens.test.ts +142 -0
  321. package/src/utils/tokens.ts +186 -0
  322. package/tests/fixtures/cli/.mdcontext/active-provider.json +7 -0
  323. package/tests/fixtures/cli/.mdcontext/config.json +8 -0
  324. package/tests/fixtures/cli/.mdcontext/embeddings/openai_text-embedding-3-small_512/vectors.bin +0 -0
  325. package/tests/fixtures/cli/.mdcontext/embeddings/openai_text-embedding-3-small_512/vectors.meta.bin +0 -0
  326. package/tests/fixtures/cli/.mdcontext/indexes/documents.json +33 -0
  327. package/tests/fixtures/cli/.mdcontext/indexes/links.json +12 -0
  328. package/tests/fixtures/cli/.mdcontext/indexes/sections.json +247 -0
  329. package/tests/fixtures/cli/README.md +9 -0
  330. package/tests/fixtures/cli/api-reference.md +11 -0
  331. package/tests/fixtures/cli/getting-started.md +11 -0
  332. package/tests/integration/embed-index.test.ts +712 -0
  333. package/tests/integration/search-context.test.ts +469 -0
  334. package/tests/integration/search-semantic.test.ts +522 -0
  335. package/tsconfig.json +26 -0
  336. package/vitest.config.ts +16 -0
  337. package/vitest.setup.ts +12 -0
@@ -0,0 +1,428 @@
1
+ # Configuration and CLI Strategy Recommendation for mdcontext
2
+
3
+ ## Executive Summary
4
+
5
+ This document synthesizes research from two approaches to CLI and configuration management for the mdcontext project:
6
+
7
+ 1. **Traditional Stack**: c12/citty/Zod (UnJS ecosystem)
8
+ 2. **Effect Stack**: @effect/cli, Effect Config, Layers
9
+
10
+ **Recommendation**: Adopt the **Effect ecosystem** for CLI and configuration management, contingent on a broader commitment to Effect as the application's foundational paradigm. If Effect adoption is uncertain or limited, the **c12/citty/Zod stack** provides a pragmatic, lower-risk alternative.
11
+
12
+ ---
13
+
14
+ ## Decision Matrix
15
+
16
+ | Criterion | Weight | c12/citty/Zod | Effect Ecosystem | Notes |
17
+ | ----------------------------- | ------ | ------------- | ---------------- | ---------------------------------------- |
18
+ | **Learning Curve** | 15% | 9/10 | 5/10 | Effect requires paradigm shift |
19
+ | **Team Adoption** | 15% | 8/10 | 5/10 | UnJS is more approachable |
20
+ | **Type Safety** | 20% | 7/10 | 10/10 | Effect provides exhaustive type tracking |
21
+ | **Developer Experience** | 15% | 8/10 | 8/10 | Both excellent once learned |
22
+ | **Testing Patterns** | 10% | 6/10 | 9/10 | Effect Layers excel at DI/mocking |
23
+ | **Migration Complexity** | 10% | 8/10 | 4/10 | Effect requires significant rewrite |
24
+ | **Long-term Maintainability** | 10% | 7/10 | 9/10 | Effect's structure scales better |
25
+ | **Ecosystem Momentum** | 5% | 8/10 | 7/10 | Both growing; UnJS more mature |
26
+ | **Weighted Score** | 100% | **7.5/10** | **7.3/10** | Slight edge to traditional |
27
+
28
+ The scores are close, indicating this is a strategic choice rather than a clear technical winner.
29
+
30
+ ---
31
+
32
+ ## Detailed Comparison
33
+
34
+ ### 1. Learning Curve and Team Adoption
35
+
36
+ #### c12/citty/Zod Stack
37
+
38
+ - **Time to productivity**: 1-2 days
39
+ - **Prerequisite knowledge**: Basic TypeScript, familiar async/await patterns
40
+ - **Documentation quality**: Excellent, extensive UnJS ecosystem docs
41
+ - **Community resources**: Many examples from Nuxt, Nitro, and other UnJS projects
42
+
43
+ #### Effect Ecosystem
44
+
45
+ - **Time to productivity**: 1-2 weeks for basic patterns, months for mastery
46
+ - **Prerequisite knowledge**: Functional programming concepts, Effect core (generators, services, layers)
47
+ - **Documentation quality**: Good and improving; steeper initial ramp
48
+ - **Community resources**: Growing Discord community, Effect.website docs
49
+
50
+ **Verdict**: c12/citty/Zod is significantly easier for onboarding new contributors. Effect requires commitment to learning a new paradigm but pays dividends for complex applications.
51
+
52
+ ---
53
+
54
+ ### 2. Type Safety and Developer Experience
55
+
56
+ #### c12/citty/Zod Stack
57
+
58
+ ```typescript
59
+ // Good type safety with Zod inference
60
+ const ConfigSchema = z.object({
61
+ logLevel: z.enum(["debug", "info", "warn", "error"]).default("info"),
62
+ port: z.coerce.number().default(3000),
63
+ });
64
+
65
+ type Config = z.infer<typeof ConfigSchema>; // Fully typed
66
+
67
+ // defineConfig provides IDE autocomplete
68
+ export default defineConfig({
69
+ logLevel: "debug", // Autocomplete works
70
+ });
71
+ ```
72
+
73
+ - Types are inferred from Zod schemas
74
+ - `defineConfig` pattern provides excellent IDE support
75
+ - Runtime validation catches configuration errors
76
+ - Error messages from Zod are clear and actionable
77
+
78
+ #### Effect Ecosystem
79
+
80
+ ```typescript
81
+ // Superior type tracking through Effect types
82
+ const program = Effect.gen(function* () {
83
+ const port = yield* Config.number("PORT"); // Effect<number, ConfigError>
84
+ const host = yield* Config.string("HOST"); // Effect<string, ConfigError>
85
+ return { host, port };
86
+ }); // Effect<{host: string, port: number}, ConfigError>
87
+
88
+ // Errors are tracked in the type system
89
+ // Dependencies are tracked through R (Requirements) type
90
+ ```
91
+
92
+ - Full effect tracking: success type, error type, and requirements
93
+ - ConfigError types distinguish missing vs. invalid configuration
94
+ - Layer dependencies are compile-time verified
95
+ - Exhaustive pattern matching on errors
96
+
97
+ **Verdict**: Effect provides superior type safety by tracking errors and dependencies in the type system. Zod provides "good enough" type safety for most use cases with less cognitive overhead.
98
+
99
+ ---
100
+
101
+ ### 3. Testing Patterns
102
+
103
+ #### c12/citty/Zod Stack
104
+
105
+ ```typescript
106
+ // Testing requires manual mocking
107
+ import { vi } from "vitest";
108
+ import { loadConfig } from "c12";
109
+
110
+ vi.mock("c12", () => ({
111
+ loadConfig: vi.fn().mockResolvedValue({
112
+ config: { logLevel: "debug", port: 3000 },
113
+ configFile: "/mock/path",
114
+ }),
115
+ }));
116
+
117
+ // Tests need to manage mock state
118
+ afterEach(() => {
119
+ vi.clearAllMocks();
120
+ });
121
+ ```
122
+
123
+ - Standard vitest/jest mocking patterns
124
+ - Environment variables need process.env manipulation
125
+ - Test isolation requires careful mock management
126
+ - No built-in pattern for dependency injection
127
+
128
+ #### Effect Ecosystem
129
+
130
+ ```typescript
131
+ // Testing with Layer replacement
132
+ const TestConfigProvider = Layer.setConfigProvider(
133
+ ConfigProvider.fromMap(
134
+ new Map([
135
+ ["LOG_LEVEL", "debug"],
136
+ ["PORT", "3000"],
137
+ ]),
138
+ ),
139
+ );
140
+
141
+ const TestAppConfig = Layer.succeed(AppConfig, {
142
+ logLevel: "debug",
143
+ port: 3000,
144
+ });
145
+
146
+ // Test with injected dependencies
147
+ const result = await Effect.runPromise(
148
+ program.pipe(Effect.provide(TestAppConfig)),
149
+ );
150
+ ```
151
+
152
+ - Layer system enables clean dependency injection
153
+ - Test layers can be composed and reused
154
+ - No global mock pollution
155
+ - Built-in support for mocking at service boundaries
156
+
157
+ **Verdict**: Effect's Layer system provides superior testing ergonomics, especially for integration tests and complex service graphs. The c12 approach works but requires more boilerplate.
158
+
159
+ ---
160
+
161
+ ### 4. Migration Complexity from Current State
162
+
163
+ #### To c12/citty/Zod
164
+
165
+ Migration steps:
166
+
167
+ 1. Add c12 and Zod dependencies
168
+ 2. Define Zod schema for configuration
169
+ 3. Create `defineConfig` helper
170
+ 4. Replace current config loading with c12
171
+ 5. Add citty for CLI if not using another solution
172
+
173
+ **Estimated effort**: 1-2 days for basic implementation
174
+ **Risk level**: Low - incremental migration possible
175
+
176
+ #### To Effect Ecosystem
177
+
178
+ Migration steps:
179
+
180
+ 1. Add Effect core and platform packages
181
+ 2. Learn Effect fundamentals (generators, Effects, services)
182
+ 3. Rewrite configuration as ConfigProvider/Layer pattern
183
+ 4. Migrate CLI to @effect/cli
184
+ 5. Refactor dependent code to consume Effect services
185
+ 6. Update error handling throughout
186
+
187
+ **Estimated effort**: 1-2 weeks minimum, ongoing learning
188
+ **Risk level**: High - requires comprehensive rewrite
189
+
190
+ **Verdict**: c12/citty/Zod allows incremental adoption. Effect is an all-or-nothing paradigm shift.
191
+
192
+ ---
193
+
194
+ ### 5. Long-term Maintainability
195
+
196
+ #### c12/citty/Zod Stack
197
+
198
+ - **Pros**:
199
+ - Familiar patterns for most TypeScript developers
200
+ - Easy to onboard new team members
201
+ - Smaller dependency footprint
202
+ - UnJS ecosystem is stable and production-proven (Nuxt, Nitro)
203
+
204
+ - **Cons**:
205
+ - Error handling remains ad-hoc (try/catch)
206
+ - Dependency injection must be implemented manually
207
+ - Configuration precedence logic can become complex
208
+ - Less structured approach to service composition
209
+
210
+ #### Effect Ecosystem
211
+
212
+ - **Pros**:
213
+ - Enforced structure through type system
214
+ - Error handling is explicit and composable
215
+ - Resource management via Scope prevents leaks
216
+ - Service dependencies are compile-time verified
217
+ - Excellent for large, complex applications
218
+
219
+ - **Cons**:
220
+ - Requires ongoing Effect expertise
221
+ - Fewer developers familiar with paradigm
222
+ - Bundle size considerations
223
+ - Breaking changes possible as Effect evolves (though now stable)
224
+
225
+ **Verdict**: Effect provides stronger architectural guarantees for long-term maintenance but requires sustained investment in the paradigm.
226
+
227
+ ---
228
+
229
+ ### 6. Ecosystem Momentum
230
+
231
+ #### c12/citty/Zod (UnJS)
232
+
233
+ - **Adoption**: Nuxt (100k+ GitHub stars), Nitro, many production deployments
234
+ - **Maintenance**: UnJS is actively maintained by Nuxt team
235
+ - **Growth**: Stable, mature ecosystem
236
+ - **Industry trend**: TypeScript config files (`defineConfig`) are the 2026 standard
237
+
238
+ #### Effect Ecosystem
239
+
240
+ - **Adoption**: Growing rapidly in TypeScript community
241
+ - **Maintenance**: Effect Solutions (commercial entity) supports development
242
+ - **Growth**: Accelerating; VS Code extension, create-effect-app, growing Discord
243
+ - **Industry trend**: Functional Effect systems gaining traction (Scala ZIO, etc.)
244
+
245
+ **Verdict**: UnJS is more established; Effect is growing faster from a smaller base. Both are viable long-term.
246
+
247
+ ---
248
+
249
+ ## Recommendation
250
+
251
+ ### Primary Recommendation: Effect Ecosystem
252
+
253
+ **Adopt Effect** if the following conditions are met:
254
+
255
+ 1. **mdcontext is committed to Effect** for its core functionality (not just CLI/config)
256
+ 2. **Team is willing to invest** in learning the Effect paradigm (1-2 weeks ramp-up)
257
+ 3. **Application complexity warrants it** (multiple services, complex error handling, resource management)
258
+
259
+ **Rationale**:
260
+
261
+ - Unified paradigm from CLI to core logic to file operations
262
+ - Superior long-term maintainability through type-enforced architecture
263
+ - Testing is cleaner with Layer-based dependency injection
264
+ - The Effect ecosystem provides @effect/platform for file operations that mdcontext will need
265
+ - Effect's ConfigProvider + Config module handles the precedence hierarchy elegantly
266
+
267
+ ### Fallback Recommendation: c12/citty/Zod Stack
268
+
269
+ **Adopt the traditional stack** if:
270
+
271
+ 1. **Effect adoption is uncertain** or limited to specific modules
272
+ 2. **Rapid iteration is priority** over architectural purity
273
+ 3. **Contributor accessibility** is important (open source considerations)
274
+ 4. **Bundle size matters** for distribution
275
+
276
+ **Rationale**:
277
+
278
+ - Faster time to implementation
279
+ - Lower barrier for contributors
280
+ - Production-proven in the UnJS ecosystem
281
+ - Allows Effect to be adopted incrementally for core logic only
282
+
283
+ ---
284
+
285
+ ## Implementation Roadmap
286
+
287
+ ### If Choosing Effect
288
+
289
+ **Phase 1: Foundation (Week 1)**
290
+
291
+ ```
292
+ - Set up @effect/cli for basic command structure
293
+ - Implement Config service with Layer
294
+ - Create basic commands (init, build, watch)
295
+ - Set up test infrastructure with Layer mocking
296
+ ```
297
+
298
+ **Phase 2: Integration (Week 2)**
299
+
300
+ ```
301
+ - Add @effect/platform for file system operations
302
+ - Implement configuration file support (mdcontext.config.ts)
303
+ - Add environment variable precedence
304
+ - Build out service layer for core functionality
305
+ ```
306
+
307
+ **Phase 3: Polish (Week 3+)**
308
+
309
+ ```
310
+ - Add shell completion generation
311
+ - Implement wizard mode for complex commands
312
+ - Add comprehensive error handling with ConfigError
313
+ - Performance optimization
314
+ ```
315
+
316
+ ### If Choosing c12/citty/Zod
317
+
318
+ **Phase 1: Config System (Day 1-2)**
319
+
320
+ ```
321
+ - Define Zod schema for configuration
322
+ - Set up c12 loader with defineConfig helper
323
+ - Implement precedence: CLI > env > file > defaults
324
+ - Create configuration module with proper types
325
+ ```
326
+
327
+ **Phase 2: CLI Implementation (Day 3-4)**
328
+
329
+ ```
330
+ - Set up citty with command structure
331
+ - Integrate configuration loading
332
+ - Add help and version commands
333
+ - Implement core commands
334
+ ```
335
+
336
+ **Phase 3: Integration (Day 5+)**
337
+
338
+ ```
339
+ - Add watch mode with file system integration
340
+ - Implement error handling patterns
341
+ - Add testing infrastructure
342
+ - Documentation
343
+ ```
344
+
345
+ ---
346
+
347
+ ## Appendix: Key Code Patterns
348
+
349
+ ### Effect Pattern: Config Service Layer
350
+
351
+ ```typescript
352
+ import { Context, Effect, Layer, Config } from "effect";
353
+
354
+ class AppConfig extends Context.Tag("AppConfig")<
355
+ AppConfig,
356
+ {
357
+ readonly logLevel: "debug" | "info" | "warn" | "error";
358
+ readonly port: number;
359
+ readonly apiKey: string | undefined;
360
+ }
361
+ >() {}
362
+
363
+ const AppConfigLive = Layer.effect(
364
+ AppConfig,
365
+ Effect.gen(function* () {
366
+ const logLevel = yield* Config.literal("LOG_LEVEL")(
367
+ "debug",
368
+ "info",
369
+ "warn",
370
+ "error",
371
+ ).pipe(Config.withDefault("info"));
372
+ const port = yield* Config.number("PORT").pipe(Config.withDefault(3000));
373
+ const apiKey = yield* Config.string("API_KEY").pipe(Config.optional);
374
+ return {
375
+ logLevel,
376
+ port,
377
+ apiKey: apiKey._tag === "Some" ? apiKey.value : undefined,
378
+ };
379
+ }),
380
+ );
381
+ ```
382
+
383
+ ### c12/Zod Pattern: Config Loader
384
+
385
+ ```typescript
386
+ import { loadConfig } from "c12";
387
+ import { z } from "zod";
388
+
389
+ const ConfigSchema = z.object({
390
+ logLevel: z.enum(["debug", "info", "warn", "error"]).default("info"),
391
+ port: z.coerce.number().default(3000),
392
+ apiKey: z.string().optional(),
393
+ });
394
+
395
+ export type Config = z.infer<typeof ConfigSchema>;
396
+
397
+ export async function loadMdcontextConfig(overrides?: Partial<Config>) {
398
+ const { config } = await loadConfig({
399
+ name: "mdcontext",
400
+ defaults: ConfigSchema.parse({}),
401
+ overrides,
402
+ dotenv: true,
403
+ globalRc: true,
404
+ });
405
+ return ConfigSchema.parse(config);
406
+ }
407
+ ```
408
+
409
+ ---
410
+
411
+ ## References
412
+
413
+ ### Source Documents
414
+
415
+ - `/Users/alphab/Dev/LLM/DEV/mdcontext/docs/033-research-configuration-management.md`
416
+ - `/Users/alphab/Dev/LLM/DEV/mdcontext/docs/034-research-effect-cli-config.md`
417
+
418
+ ### Key Libraries
419
+
420
+ - [c12 - Smart Configuration Loader](https://github.com/unjs/c12)
421
+ - [citty - CLI Builder](https://github.com/unjs/citty)
422
+ - [Zod - Schema Validation](https://zod.dev/)
423
+ - [@effect/cli](https://github.com/Effect-TS/effect/tree/main/packages/cli)
424
+ - [Effect Configuration](https://effect.website/docs/configuration/)
425
+
426
+ ---
427
+
428
+ _Analysis completed: 2026-01-21_