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,207 @@
1
+ # Consolidated Error Handling Tasks
2
+
3
+ > Prioritized task list for improving mdcontext error handling based on Effect best practices
4
+
5
+ **Created**: 2026-01-22
6
+ **Source Documents**:
7
+
8
+ - `embeddings-analysis.md`
9
+ - `cli-commands-analysis.md`
10
+ - `index-search-analysis.md`
11
+ - `effect-errors-as-values.md`
12
+ - `mdcontext-error-analysis.md`
13
+
14
+ ---
15
+
16
+ ## Executive Summary
17
+
18
+ The mdcontext codebase has significant error handling issues that violate Effect best practices. Key findings across all modules:
19
+
20
+ 1. **Type Safety Loss**: Error information is consistently lost by converting typed errors to generic `Error` objects throughout the codebase. This makes exhaustive error handling impossible and removes compile-time safety.
21
+
22
+ 2. **Mixed Paradigms**: Three different error paradigms are used inconsistently:
23
+ - Effect tagged unions (`ParseError`, `IoError` in `core/types.ts`)
24
+ - JavaScript Error subclasses (`MissingApiKeyError`, `InvalidApiKeyError`)
25
+ - Generic Error objects (`new Error(...)` throughout)
26
+
27
+ 3. **Silent Failures**: Multiple locations use `Effect.catchAll(() => Effect.succeed(null))` or empty `catch` blocks, silently swallowing errors without logging.
28
+
29
+ 4. **Presentation Mixed with Logic**: Error formatting and display (`Console.error`) is embedded in business logic rather than handled at the CLI boundary.
30
+
31
+ 5. **Constructor Throws**: The `OpenAIProvider` constructor throws synchronous exceptions, bypassing Effect's error tracking entirely.
32
+
33
+ 6. **Unused Error Types**: Well-designed error types exist (`EmbedError` in `types.ts`) but are never used.
34
+
35
+ **Impact**: Users experience silent failures, debugging is difficult, and the type system cannot help catch error handling bugs at compile time.
36
+
37
+ ---
38
+
39
+ ## Prioritized Task List
40
+
41
+ ### P0: Critical - Breaking or Severely Impacts UX
42
+
43
+ | ID | Title | Description | Files Affected | Effort | Dependencies |
44
+ | ------- | -------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------ | ------ | ------------ |
45
+ | ERR-001 | Create centralized tagged error types | Define all domain errors using `Data.TaggedError` in a single module. This is the foundation for all other improvements. `z | New: `src/errors/index.ts` | M | None |
46
+ | ERR-002 | Replace constructor throw with factory function | `OpenAIProvider` constructor throws `MissingApiKeyError`, bypassing Effect error tracking. Convert to factory function returning `Effect.Effect<OpenAIProvider, MissingApiKeyError>`. | `src/embeddings/openai-provider.ts` | S | ERR-001 |
47
+ | ERR-003 | Fix silent error swallowing in semantic search | Multiple `catch {}` blocks silently skip files without logging. Users get incomplete results with no indication of failures. | `src/embeddings/semantic-search.ts` (lines 329-332, 532-534) | S | None |
48
+ | ERR-004 | Update Effect.sync to Effect.try for fallible operations | `vector-store.ts` uses `Effect.sync` for operations that can throw (like `addPoint`). Exceptions become untracked defects. | `src/embeddings/vector-store.ts` (lines 99-121, 123-169) | M | ERR-001 |
49
+
50
+ ### P1: High - Significant Improvement, Should Do Soon
51
+
52
+ | ID | Title | Description | Files Affected | Effort | Dependencies |
53
+ | ------- | ---------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------- | ------ | ---------------- |
54
+ | ERR-005 | Create centralized CLI error handler | Build error formatter that maps tagged errors to user-friendly messages with exit codes. All error display should flow through this. | New: `src/cli/error-handler.ts` | M | ERR-001 |
55
+ | ERR-006 | Update main.ts error handling | Replace fragile manual error type inspection (`formatCliError`) with proper `catchTags` pattern using centralized error types. | `src/cli/main.ts` (lines 71-97) | M | ERR-001, ERR-005 |
56
+ | ERR-007 | Convert embedding error classes to TaggedError | `MissingApiKeyError` and `InvalidApiKeyError` extend `Error` instead of `Data.TaggedError`. Cannot use `catchTag` for pattern matching. | `src/embeddings/openai-provider.ts` (lines 24-36) | S | ERR-001 |
57
+ | ERR-008 | Update storage.ts to use typed errors | All storage operations return `Effect.Effect<T, Error>`. Convert to use specific `FileReadError`, `FileWriteError`, `DirectoryCreateError` types. | `src/index/storage.ts` | M | ERR-001 |
58
+ | ERR-009 | Update indexer.ts to use typed errors | `buildIndex` and `walkDirectory` use generic `Error`. Convert to `DirectoryWalkError`, `DocumentParseError` types. | `src/index/indexer.ts` | M | ERR-001 |
59
+ | ERR-010 | Fix context.ts error type loss | `parseFile` errors are mapped to generic `Error` via `Effect.mapError((e) => new Error(...))`. Let typed errors propagate. | `src/cli/commands/context.ts` (lines 85-87) | S | ERR-001 |
60
+ | ERR-011 | Fix tree.ts error type loss | Same pattern as context.ts - `parseFile` errors converted to generic `Error`. | `src/cli/commands/tree.ts` (lines 35-37) | S | ERR-001 |
61
+ | ERR-012 | Add JSON.parse error handling in vector-store | `JSON.parse` can throw but is unwrapped. Corrupted metadata files cause untracked crashes. | `src/embeddings/vector-store.ts` (line 234) | S | ERR-001 |
62
+
63
+ ### P2: Medium
64
+
65
+ | ID | Title | Description | Files Affected | Effort | Dependencies |
66
+ | ------- | ------------------------------------------------ | ---------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------- | ------ | ---------------- |
67
+ | ERR-013 | Remove presentation logic from handleApiKeyError | `handleApiKeyError` mixes error handling with `Console.error` calls. Should only transform errors; formatting belongs at CLI boundary. | `src/embeddings/openai-provider.ts` (lines 130-165) | M | ERR-001, ERR-005 |
68
+ | ERR-014 | Replace catchAll with explicit catchTag | Multiple locations use `Effect.catchAll(() => Effect.succeed(null))` swallowing all errors. Use `catchTag` for specific recoverable errors. | `src/cli/commands/search.ts`, `src/cli/commands/index-cmd.ts` | M | ERR-001 |
69
+ | ERR-015 | Use or remove EmbedError type | `EmbedError` interface exists in `types.ts` but is never used. Either use it or remove dead code. | `src/embeddings/types.ts` (lines 68-82) | S | ERR-001 |
70
+ | ERR-016 | Update semantic-search return types | All functions return `Effect.Effect<A, Error>` instead of specific error unions. Update signatures to reflect actual error types. | `src/embeddings/semantic-search.ts` | M | ERR-001, ERR-007 |
71
+ | ERR-017 | Add typed errors to search module | `search` function returns empty array when index is missing instead of typed `IndexNotFoundError`. Behavior is inconsistent with `getContext`. | `src/search/searcher.ts` (lines 109-111, 197-199) | M | ERR-001 |
72
+ | ERR-018 | Convert walkDirectory to Effect | `walkDirectory` is an async function that can throw, wrapped in `Effect.tryPromise`. Convert to native Effect for better error handling. | `src/index/indexer.ts` | M | ERR-001 |
73
+ | ERR-019 | Add logging for skipped files | Replace silent `continue` statements with `Effect.logWarning` so users know which files were skipped and why. | `src/search/searcher.ts`, `src/embeddings/semantic-search.ts` | S | None |
74
+ | ERR-020 | Fix inconsistent error transformation | `semantic-search.ts:366-375` conditionally preserves some errors while converting others to generic `Error`. Fragile pattern. | `src/embeddings/semantic-search.ts` | S | ERR-001 |
75
+
76
+ ### P3: Low - Polish
77
+
78
+ | ID | Title | Description | Files Affected | Effort | Dependencies |
79
+ | ------- | ----------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------- | ------ | ------------ |
80
+ | ERR-021 | Move error messages to boundary | User-facing error messages like "Index not found. Run 'mdcontext index' first." are embedded in domain code. Should be formatted at CLI boundary. | `src/embeddings/semantic-search.ts`, `src/search/searcher.ts` | M | ERR-005 |
81
+ | ERR-022 | Convert IndexBuildError to TaggedError | `IndexBuildError` is a plain object type, not a proper tagged error class. | `src/index/types.ts` | S | ERR-001 |
82
+ | ERR-023 | Convert inline IoError to TaggedError | Parser returns `{ _tag: 'IoError'; message: string; path: string }` as inline object. Should be proper class. | `src/parser/parser.ts` (lines 369-395) | S | ERR-001 |
83
+ | ERR-024 | Consider Effect Streams for watcher | `watcher.ts` uses callbacks (`onError`) for error handling, escaping Effect's error tracking. Consider Effect Streams for better integration. | `src/index/watcher.ts` | L | ERR-001 |
84
+ | ERR-025 | Add error codes for programmatic handling | Include machine-readable error codes alongside messages for programmatic consumers (scripts, CI). | All error types | M | ERR-001 |
85
+ | ERR-026 | Add unit tests for error types | Verify `_tag` discriminant exists, test `catchTag` works correctly, snapshot test error messages. | New: `tests/errors/` | M | ERR-001 |
86
+
87
+ ---
88
+
89
+ ## Recommended Implementation Order
90
+
91
+ ### Phase 1: Foundation
92
+
93
+ **Goal**: Establish the error type system that all other changes depend on.
94
+
95
+ 1. **ERR-001**: Create `src/errors/index.ts` with all tagged error types
96
+ 2. **ERR-005**: Create `src/cli/error-handler.ts` with formatters
97
+
98
+ **Rationale**: Every other task depends on having proper error types defined. This must come first.
99
+
100
+ ### Phase 2: Critical Fixes
101
+
102
+ **Goal**: Fix the most impactful issues that affect users immediately.
103
+
104
+ 1. **ERR-002**: Fix OpenAI provider constructor throw
105
+ 2. **ERR-003**: Fix silent error swallowing in semantic search
106
+ 3. **ERR-004**: Fix Effect.sync misuse in vector-store
107
+ 4. **ERR-007**: Convert embedding error classes to TaggedError
108
+
109
+ **Rationale**: These cause runtime issues, silent failures, or completely bypass error tracking.
110
+
111
+ ### Phase 3: CLI Integration
112
+
113
+ **Goal**: Connect the error system to user-facing output.
114
+
115
+ 1. **ERR-006**: Update main.ts error handling
116
+ 2. **ERR-010**: Fix context.ts error type loss
117
+ 3. **ERR-011**: Fix tree.ts error type loss
118
+
119
+ **Rationale**: Once error types exist and critical issues are fixed, wire up the CLI for proper error display.
120
+
121
+ ### Phase 4: Module Updates
122
+
123
+ **Goal**: Propagate typed errors through all modules.
124
+
125
+ 1. **ERR-008**: Update storage.ts
126
+ 2. **ERR-009**: Update indexer.ts
127
+ 3. **ERR-012**: Fix JSON.parse in vector-store
128
+ 4. **ERR-016**: Update semantic-search return types
129
+
130
+ **Rationale**: With the foundation in place, systematically update each module.
131
+
132
+ ### Phase 5: Polish
133
+
134
+ **Goal**: Clean up remaining issues and improve developer experience.
135
+
136
+ 1. **ERR-013**: Remove presentation from handleApiKeyError
137
+ 2. **ERR-014**: Replace catchAll with catchTag
138
+ 3. **ERR-015**: Use or remove EmbedError
139
+ 4. **ERR-017**: Add typed errors to search module
140
+ 5. Remaining P2/P3 tasks as time permits
141
+
142
+ ---
143
+
144
+ ## Quick Wins
145
+
146
+ Tasks that are easy (Small effort) and have high impact:
147
+
148
+ | ID | Title | Effort | Impact | Why It's a Quick Win |
149
+ | ------- | ---------------------------------------------- | ------ | ------ | ------------------------------------------------------- |
150
+ | ERR-003 | Fix silent error swallowing in semantic search | S | High | Just add `Effect.logWarning` - no type changes needed |
151
+ | ERR-010 | Fix context.ts error type loss | S | High | Remove `mapError` call - errors already have good types |
152
+ | ERR-011 | Fix tree.ts error type loss | S | High | Same as ERR-010, mirror change |
153
+ | ERR-012 | Add JSON.parse error handling | S | Medium | Wrap single line in `Effect.try` |
154
+ | ERR-019 | Add logging for skipped files | S | Medium | Add `Effect.logWarning` before `continue` statements |
155
+ | ERR-015 | Use or remove EmbedError type | S | Low | Delete unused code or wire it up |
156
+
157
+ **Recommendation**: Start with ERR-003, ERR-010, ERR-011, and ERR-019 before tackling ERR-001. These provide immediate value with minimal risk and no dependencies.
158
+
159
+ ---
160
+
161
+ ## File Change Summary
162
+
163
+ Files requiring the most changes:
164
+
165
+ | File | Task Count | Priority Tasks |
166
+ | ----------------------------------- | ---------- | ---------------------------------- |
167
+ | `src/embeddings/openai-provider.ts` | 4 | ERR-002, ERR-007, ERR-013 |
168
+ | `src/embeddings/semantic-search.ts` | 4 | ERR-003, ERR-016, ERR-020, ERR-021 |
169
+ | `src/embeddings/vector-store.ts` | 2 | ERR-004, ERR-012 |
170
+ | `src/index/storage.ts` | 1 | ERR-008 |
171
+ | `src/index/indexer.ts` | 2 | ERR-009, ERR-018 |
172
+ | `src/search/searcher.ts` | 2 | ERR-017, ERR-019 |
173
+ | `src/cli/main.ts` | 1 | ERR-006 |
174
+ | `src/cli/commands/context.ts` | 1 | ERR-010 |
175
+ | `src/cli/commands/tree.ts` | 1 | ERR-011 |
176
+ | `src/cli/commands/search.ts` | 1 | ERR-014 |
177
+ | `src/cli/commands/index-cmd.ts` | 1 | ERR-014 |
178
+
179
+ New files to create:
180
+
181
+ | File | Purpose | Tasks |
182
+ | -------------------------- | ------------------------------- | ------- |
183
+ | `src/errors/index.ts` | Centralized tagged error types | ERR-001 |
184
+ | `src/cli/error-handler.ts` | Error formatting and exit codes | ERR-005 |
185
+ | `tests/errors/*.test.ts` | Error type unit tests | ERR-026 |
186
+
187
+ ---
188
+
189
+ ## Effort Estimation Key
190
+
191
+ - **S (Small)**: 1-2 hours, localized change
192
+ - **M (Medium)**: 2-4 hours, touches multiple files or requires design decisions
193
+ - **L (Large)**: 4+ hours, significant refactoring or new architecture
194
+
195
+ ---
196
+
197
+ ## Related Documents
198
+
199
+ - [Effect Errors as Values Research](./research/effect-errors-as-values.md)
200
+ - [mdcontext Error Analysis](./research/mdcontext-error-analysis.md)
201
+ - [Embeddings Analysis](./research/errors-task-analysis/embeddings-analysis.md)
202
+ - [CLI Commands Analysis](./research/errors-task-analysis/cli-commands-analysis.md)
203
+ - [Index Search Analysis](./research/errors-task-analysis/index-search-analysis.md)
204
+
205
+ ---
206
+
207
+ _Document created: 2026-01-22_