mdcontext 0.1.0 → 0.2.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.changeset/config.json +9 -9
- package/.claude/settings.local.json +25 -0
- package/.github/workflows/claude-code-review.yml +44 -0
- package/.github/workflows/claude.yml +85 -0
- package/CONTRIBUTING.md +186 -0
- package/NOTES/NOTES +44 -0
- package/README.md +206 -3
- package/biome.json +1 -1
- package/dist/chunk-23UPXDNL.js +3044 -0
- package/dist/chunk-2W7MO2DL.js +1366 -0
- package/dist/chunk-3NUAZGMA.js +1689 -0
- package/dist/chunk-7TOWB2XB.js +366 -0
- package/dist/chunk-7XOTOADQ.js +3065 -0
- package/dist/chunk-AH2PDM2K.js +3042 -0
- package/dist/chunk-BNXWSZ63.js +3742 -0
- package/dist/chunk-BTL5DJVU.js +3222 -0
- package/dist/chunk-HDHYG7E4.js +104 -0
- package/dist/chunk-HLR4KZBP.js +3234 -0
- package/dist/chunk-IP3FRFEB.js +1045 -0
- package/dist/chunk-KHU56VDO.js +3042 -0
- package/dist/chunk-KRYIFLQR.js +85 -89
- package/dist/chunk-LBSDNLEM.js +287 -0
- package/dist/chunk-MNTQ7HCP.js +2643 -0
- package/dist/chunk-MUJELQQ6.js +1387 -0
- package/dist/chunk-MXJGMSLV.js +2199 -0
- package/dist/chunk-N6QJGC3Z.js +2636 -0
- package/dist/chunk-OBELGBPM.js +1713 -0
- package/dist/chunk-OT7R5XTA.js +3192 -0
- package/dist/chunk-P7X4RA2T.js +106 -0
- package/dist/chunk-PIDUQNC2.js +3185 -0
- package/dist/chunk-POGCDIH4.js +3187 -0
- package/dist/chunk-PSIEOQGZ.js +3043 -0
- package/dist/chunk-PVRT3IHA.js +3238 -0
- package/dist/chunk-QNN4TT23.js +1430 -0
- package/dist/chunk-RE3R45RJ.js +3042 -0
- package/dist/chunk-S7E6TFX6.js +718 -657
- package/dist/chunk-SG6GLU4U.js +1378 -0
- package/dist/chunk-SJCDV2ST.js +274 -0
- package/dist/chunk-SYE5XLF3.js +104 -0
- package/dist/chunk-T5VLYBZD.js +103 -0
- package/dist/chunk-TOQB7VWU.js +3238 -0
- package/dist/chunk-VFNMZ4ZQ.js +3228 -0
- package/dist/chunk-VVTGZNBT.js +1533 -1423
- package/dist/chunk-W7Q4RFEV.js +104 -0
- package/dist/chunk-XTYYVRLO.js +3190 -0
- package/dist/chunk-Y6MDYVJD.js +3063 -0
- package/dist/cli/main.js +4072 -629
- package/dist/index.d.ts +420 -33
- package/dist/index.js +8 -15
- package/dist/mcp/server.js +103 -7
- package/dist/schema-BAWSG7KY.js +22 -0
- package/dist/schema-E3QUPL26.js +20 -0
- package/dist/schema-EHL7WUT6.js +20 -0
- package/docs/019-USAGE.md +44 -5
- package/docs/020-current-implementation.md +8 -8
- package/docs/021-DOGFOODING-FINDINGS.md +1 -1
- package/docs/CONFIG.md +1123 -0
- package/docs/ERRORS.md +383 -0
- package/docs/summarization.md +320 -0
- package/justfile +40 -0
- package/package.json +39 -33
- package/research/INDEX.md +315 -0
- package/research/code-review/README.md +90 -0
- package/research/code-review/cli-error-handling-review.md +979 -0
- package/research/code-review/code-review-validation-report.md +464 -0
- package/research/code-review/main-ts-review.md +1128 -0
- package/research/config-docs/SUMMARY.md +357 -0
- package/research/config-docs/TEST-RESULTS.md +776 -0
- package/research/config-docs/TODO.md +542 -0
- package/research/config-docs/analysis.md +744 -0
- package/research/config-docs/fix-validation.md +502 -0
- package/research/config-docs/help-audit.md +264 -0
- package/research/config-docs/help-system-analysis.md +890 -0
- package/research/frontmatter/COMMENTS-ARE-SKIPPED.md +149 -0
- package/research/frontmatter/LLM-CODE-NAVIGATION.md +276 -0
- package/research/issue-review.md +603 -0
- package/research/llm-summarization/agent-cli-tools-2026.md +1082 -0
- package/research/llm-summarization/alternative-providers-2026.md +1428 -0
- package/research/llm-summarization/anthropic-2026.md +367 -0
- package/research/llm-summarization/claude-cli-integration.md +1706 -0
- package/research/llm-summarization/cli-integration-patterns.md +3155 -0
- package/research/llm-summarization/openai-2026.md +473 -0
- package/research/llm-summarization/openai-compatible-providers-2026.md +1022 -0
- package/research/llm-summarization/opencode-cli-integration.md +1552 -0
- package/research/llm-summarization/prompt-engineering-2026.md +1426 -0
- package/research/llm-summarization/prototype-results.md +56 -0
- package/research/llm-summarization/provider-switching-patterns-2026.md +2153 -0
- package/research/llm-summarization/typescript-llm-libraries-2026.md +2436 -0
- package/research/mdcontext-pudding/00-EXECUTIVE-SUMMARY.md +282 -0
- package/research/mdcontext-pudding/01-index-embed.md +956 -0
- package/research/mdcontext-pudding/02-search-COMMANDS.md +142 -0
- package/research/mdcontext-pudding/02-search-SUMMARY.md +146 -0
- package/research/mdcontext-pudding/02-search.md +970 -0
- package/research/mdcontext-pudding/03-context.md +779 -0
- package/research/mdcontext-pudding/04-navigation-and-analytics.md +803 -0
- package/research/mdcontext-pudding/04-tree.md +704 -0
- package/research/mdcontext-pudding/05-config.md +1038 -0
- package/research/mdcontext-pudding/06-links-summary.txt +87 -0
- package/research/mdcontext-pudding/06-links.md +679 -0
- package/research/mdcontext-pudding/07-stats.md +693 -0
- package/research/mdcontext-pudding/BUG-FIX-PLAN.md +388 -0
- package/research/mdcontext-pudding/P0-BUG-VALIDATION.md +167 -0
- package/research/mdcontext-pudding/README.md +168 -0
- package/research/mdcontext-pudding/TESTING-SUMMARY.md +128 -0
- package/research/research-quality-review.md +834 -0
- package/research/semantic-search/embedding-text-analysis.md +156 -0
- package/research/semantic-search/multi-word-failure-reproduction.md +171 -0
- package/research/semantic-search/query-processing-analysis.md +207 -0
- package/research/semantic-search/root-cause-and-solution.md +114 -0
- package/research/semantic-search/threshold-validation-report.md +69 -0
- package/research/semantic-search/vector-search-analysis.md +63 -0
- package/research/test-path-issues.md +276 -0
- package/review/ALP-76/1-error-type-design.md +962 -0
- package/review/ALP-76/2-error-handling-patterns.md +906 -0
- package/review/ALP-76/3-error-presentation.md +624 -0
- package/review/ALP-76/4-test-coverage.md +625 -0
- package/review/ALP-76/5-migration-completeness.md +440 -0
- package/review/ALP-76/6-effect-best-practices.md +755 -0
- package/scripts/apply-branch-protection.sh +47 -0
- package/scripts/branch-protection-templates.json +79 -0
- package/scripts/prototype-summarization.ts +346 -0
- package/scripts/rebuild-hnswlib.js +32 -37
- package/scripts/setup-branch-protection.sh +64 -0
- package/src/__tests__/fixtures/semantic-search/multi-word-corpus/.mdcontext/active-provider.json +7 -0
- package/src/__tests__/fixtures/semantic-search/multi-word-corpus/.mdcontext/bm25.json +541 -0
- package/src/__tests__/fixtures/semantic-search/multi-word-corpus/.mdcontext/bm25.meta.json +5 -0
- package/src/__tests__/fixtures/semantic-search/multi-word-corpus/.mdcontext/config.json +8 -0
- package/src/__tests__/fixtures/semantic-search/multi-word-corpus/.mdcontext/embeddings/openai_text-embedding-3-small_512/vectors.bin +0 -0
- package/src/__tests__/fixtures/semantic-search/multi-word-corpus/.mdcontext/embeddings/openai_text-embedding-3-small_512/vectors.meta.bin +0 -0
- package/src/__tests__/fixtures/semantic-search/multi-word-corpus/.mdcontext/indexes/documents.json +60 -0
- package/src/__tests__/fixtures/semantic-search/multi-word-corpus/.mdcontext/indexes/links.json +13 -0
- package/src/__tests__/fixtures/semantic-search/multi-word-corpus/.mdcontext/indexes/sections.json +1197 -0
- package/src/__tests__/fixtures/semantic-search/multi-word-corpus/configuration-management.md +99 -0
- package/src/__tests__/fixtures/semantic-search/multi-word-corpus/distributed-systems.md +92 -0
- package/src/__tests__/fixtures/semantic-search/multi-word-corpus/error-handling.md +78 -0
- package/src/__tests__/fixtures/semantic-search/multi-word-corpus/failure-automation.md +55 -0
- package/src/__tests__/fixtures/semantic-search/multi-word-corpus/job-context.md +69 -0
- package/src/__tests__/fixtures/semantic-search/multi-word-corpus/process-orchestration.md +99 -0
- package/src/cli/argv-preprocessor.test.ts +2 -2
- package/src/cli/cli.test.ts +230 -33
- package/src/cli/commands/config-cmd.ts +642 -0
- package/src/cli/commands/context.ts +97 -9
- package/src/cli/commands/duplicates.ts +122 -0
- package/src/cli/commands/embeddings.ts +529 -0
- package/src/cli/commands/index-cmd.ts +210 -30
- package/src/cli/commands/index.ts +3 -0
- package/src/cli/commands/search.ts +894 -64
- package/src/cli/commands/stats.ts +3 -0
- package/src/cli/commands/tree.ts +26 -5
- package/src/cli/config-layer.ts +176 -0
- package/src/cli/error-handler.test.ts +235 -0
- package/src/cli/error-handler.ts +655 -0
- package/src/cli/flag-schemas.ts +66 -0
- package/src/cli/help.ts +209 -7
- package/src/cli/main.ts +348 -58
- package/src/cli/options.ts +10 -0
- package/src/cli/shared-error-handling.ts +199 -0
- package/src/cli/utils.ts +150 -17
- package/src/config/file-provider.test.ts +320 -0
- package/src/config/file-provider.ts +273 -0
- package/src/config/index.ts +72 -0
- package/src/config/integration.test.ts +667 -0
- package/src/config/precedence.test.ts +277 -0
- package/src/config/precedence.ts +451 -0
- package/src/config/schema.test.ts +414 -0
- package/src/config/schema.ts +603 -0
- package/src/config/service.test.ts +320 -0
- package/src/config/service.ts +243 -0
- package/src/config/testing.test.ts +264 -0
- package/src/config/testing.ts +110 -0
- package/src/core/types.ts +6 -33
- package/src/duplicates/detector.test.ts +183 -0
- package/src/duplicates/detector.ts +414 -0
- package/src/duplicates/index.ts +18 -0
- package/src/embeddings/embedding-namespace.test.ts +300 -0
- package/src/embeddings/embedding-namespace.ts +947 -0
- package/src/embeddings/heading-boost.test.ts +222 -0
- package/src/embeddings/hnsw-build-options.test.ts +198 -0
- package/src/embeddings/hyde.test.ts +272 -0
- package/src/embeddings/hyde.ts +264 -0
- package/src/embeddings/index.ts +2 -0
- package/src/embeddings/openai-provider.ts +332 -83
- package/src/embeddings/pricing.json +22 -0
- package/src/embeddings/provider-constants.ts +204 -0
- package/src/embeddings/provider-errors.test.ts +967 -0
- package/src/embeddings/provider-errors.ts +565 -0
- package/src/embeddings/provider-factory.test.ts +240 -0
- package/src/embeddings/provider-factory.ts +225 -0
- package/src/embeddings/provider-integration.test.ts +788 -0
- package/src/embeddings/query-preprocessing.test.ts +187 -0
- package/src/embeddings/semantic-search-threshold.test.ts +508 -0
- package/src/embeddings/semantic-search.ts +780 -93
- package/src/embeddings/types.ts +293 -16
- package/src/embeddings/vector-store.ts +486 -77
- package/src/embeddings/voyage-provider.ts +313 -0
- package/src/errors/errors.test.ts +845 -0
- package/src/errors/index.ts +533 -0
- package/src/index/ignore-patterns.test.ts +354 -0
- package/src/index/ignore-patterns.ts +305 -0
- package/src/index/indexer.ts +286 -48
- package/src/index/storage.ts +94 -30
- package/src/index/types.ts +40 -2
- package/src/index/watcher.ts +67 -9
- package/src/index.ts +22 -0
- package/src/integration/search-keyword.test.ts +678 -0
- package/src/mcp/server.ts +135 -6
- package/src/parser/parser.ts +18 -19
- package/src/parser/section-filter.test.ts +277 -0
- package/src/parser/section-filter.ts +125 -3
- package/src/search/__tests__/hybrid-search.test.ts +650 -0
- package/src/search/bm25-store.ts +366 -0
- package/src/search/cross-encoder.test.ts +253 -0
- package/src/search/cross-encoder.ts +406 -0
- package/src/search/fuzzy-search.test.ts +419 -0
- package/src/search/fuzzy-search.ts +273 -0
- package/src/search/hybrid-search.ts +448 -0
- package/src/search/path-matcher.test.ts +276 -0
- package/src/search/path-matcher.ts +33 -0
- package/src/search/searcher.test.ts +99 -1
- package/src/search/searcher.ts +189 -67
- package/src/search/wink-bm25.d.ts +30 -0
- package/src/summarization/cli-providers/claude.ts +202 -0
- package/src/summarization/cli-providers/detection.test.ts +273 -0
- package/src/summarization/cli-providers/detection.ts +118 -0
- package/src/summarization/cli-providers/index.ts +8 -0
- package/src/summarization/cost.test.ts +139 -0
- package/src/summarization/cost.ts +102 -0
- package/src/summarization/error-handler.test.ts +127 -0
- package/src/summarization/error-handler.ts +111 -0
- package/src/summarization/index.ts +102 -0
- package/src/summarization/pipeline.test.ts +498 -0
- package/src/summarization/pipeline.ts +231 -0
- package/src/summarization/prompts.test.ts +269 -0
- package/src/summarization/prompts.ts +133 -0
- package/src/summarization/provider-factory.test.ts +396 -0
- package/src/summarization/provider-factory.ts +178 -0
- package/src/summarization/types.ts +184 -0
- package/src/summarize/summarizer.ts +104 -35
- package/src/types/huggingface-transformers.d.ts +66 -0
- package/tests/fixtures/cli/.mdcontext/active-provider.json +7 -0
- package/tests/fixtures/cli/.mdcontext/embeddings/openai_text-embedding-3-small_512/vectors.bin +0 -0
- package/tests/fixtures/cli/.mdcontext/embeddings/openai_text-embedding-3-small_512/vectors.meta.bin +0 -0
- package/tests/fixtures/cli/.mdcontext/indexes/documents.json +4 -4
- package/tests/fixtures/cli/.mdcontext/indexes/sections.json +14 -0
- package/tests/integration/embed-index.test.ts +712 -0
- package/tests/integration/search-context.test.ts +469 -0
- package/tests/integration/search-semantic.test.ts +522 -0
- package/vitest.config.ts +1 -6
- package/AGENTS.md +0 -46
- package/tests/fixtures/cli/.mdcontext/vectors.bin +0 -0
- package/tests/fixtures/cli/.mdcontext/vectors.meta.json +0 -1264
|
@@ -0,0 +1,464 @@
|
|
|
1
|
+
# Code Review Validation Report
|
|
2
|
+
|
|
3
|
+
**Validation Date:** 2026-01-24 06:38:24 UTC
|
|
4
|
+
**Git Commit:** `07c9e72ba01cda840046b96a1be4743a85e3d4c5`
|
|
5
|
+
**Validator:** Claude Sonnet 4.5
|
|
6
|
+
|
|
7
|
+
---
|
|
8
|
+
|
|
9
|
+
## Executive Summary
|
|
10
|
+
|
|
11
|
+
This report validates all line numbers and issues referenced in the code review documents against the current codebase. Of the **27 total issues** tracked across both documents:
|
|
12
|
+
|
|
13
|
+
- **✅ RESOLVED:** 12 issues (44%)
|
|
14
|
+
- **📍 MOVED:** 3 issues (11%)
|
|
15
|
+
- **✓ VALID:** 12 issues (44%)
|
|
16
|
+
- **❌ NOT FOUND:** 0 issues (0%)
|
|
17
|
+
|
|
18
|
+
### Key Findings
|
|
19
|
+
|
|
20
|
+
1. **Major improvements in main.ts**: Most critical and high-priority issues from the main.ts review have been resolved, including:
|
|
21
|
+
- IIFE error handling (C1) - ✅ RESOLVED
|
|
22
|
+
- Non-null assertion safety (H1) - ✅ RESOLVED
|
|
23
|
+
- Unreachable return statements (H2, H3) - ✅ RESOLVED
|
|
24
|
+
- Config path validation (M1, M5) - ✅ RESOLVED
|
|
25
|
+
- Type annotation improvements (M2, M3) - ✅ RESOLVED
|
|
26
|
+
|
|
27
|
+
2. **CLI error handling remains consistent**: All issues in cli-error-handling-review.md are still valid and accurately represent the current state of error handling across CLI commands.
|
|
28
|
+
|
|
29
|
+
3. **Line number accuracy**: Most line numbers in the reviews are accurate or have minor shifts (±5 lines) due to code improvements.
|
|
30
|
+
|
|
31
|
+
---
|
|
32
|
+
|
|
33
|
+
## Document 1: main-ts-review.md
|
|
34
|
+
|
|
35
|
+
**File:** `/research/code-review/main-ts-review.md`
|
|
36
|
+
**Target:** `/Users/alphab/Dev/LLM/DEV/mdcontext/worktrees/nancy-ALP-139/src/cli/main.ts`
|
|
37
|
+
|
|
38
|
+
### Critical Issues (1 total)
|
|
39
|
+
|
|
40
|
+
#### C1. Unhandled Promise Rejection in IIFE ✅ RESOLVED
|
|
41
|
+
- **Original Line:** 309-320
|
|
42
|
+
- **Status:** ✅ RESOLVED
|
|
43
|
+
- **Validation:** Lines 366-394 now include `.catch()` handler on IIFE
|
|
44
|
+
- **Code:**
|
|
45
|
+
```typescript
|
|
46
|
+
})().catch((error) => {
|
|
47
|
+
console.error('\nUnexpected error during initialization')
|
|
48
|
+
console.error(error)
|
|
49
|
+
process.exit(1)
|
|
50
|
+
})
|
|
51
|
+
```
|
|
52
|
+
- **Notes:** Issue completely fixed with proper catch handler
|
|
53
|
+
|
|
54
|
+
### High Priority Issues (7 total)
|
|
55
|
+
|
|
56
|
+
#### H1. Non-null Assertion Unsafe ✅ RESOLVED
|
|
57
|
+
- **Original Line:** 311
|
|
58
|
+
- **Status:** ✅ RESOLVED
|
|
59
|
+
- **Validation:** Lines 368-371 now include explicit null check
|
|
60
|
+
- **Code:**
|
|
61
|
+
```typescript
|
|
62
|
+
if (!customConfigPath) {
|
|
63
|
+
console.error('\nError: Config path is required for async loading')
|
|
64
|
+
process.exit(1)
|
|
65
|
+
}
|
|
66
|
+
```
|
|
67
|
+
- **Notes:** Non-null assertion removed, explicit validation added
|
|
68
|
+
|
|
69
|
+
#### H2. handleConfigLoadError Has Unreachable Return ✅ RESOLVED
|
|
70
|
+
- **Original Line:** 239
|
|
71
|
+
- **Status:** ✅ RESOLVED
|
|
72
|
+
- **Current Line:** 279-281
|
|
73
|
+
- **Validation:** Comment added explaining the unreachable return is intentional for TypeScript
|
|
74
|
+
- **Code:**
|
|
75
|
+
```typescript
|
|
76
|
+
} catch (error) {
|
|
77
|
+
// handleConfigLoadError calls process.exit(1) and never returns
|
|
78
|
+
// TypeScript needs explicit return for type checking - this is unreachable
|
|
79
|
+
return handleConfigLoadError(error, resolvedPath)
|
|
80
|
+
}
|
|
81
|
+
```
|
|
82
|
+
- **Notes:** Issue acknowledged with explanatory comment, pattern acceptable
|
|
83
|
+
|
|
84
|
+
#### H3. Same Issue in createConfigLayerSync ✅ RESOLVED
|
|
85
|
+
- **Original Line:** 273
|
|
86
|
+
- **Status:** ✅ RESOLVED
|
|
87
|
+
- **Current Line:** 325-327
|
|
88
|
+
- **Validation:** Same as H2, comment added for clarity
|
|
89
|
+
- **Code:**
|
|
90
|
+
```typescript
|
|
91
|
+
} catch (error) {
|
|
92
|
+
// handleConfigLoadError calls process.exit(1) and never returns
|
|
93
|
+
return handleConfigLoadError(error, resolvedPath)
|
|
94
|
+
}
|
|
95
|
+
```
|
|
96
|
+
- **Notes:** Consistent with H2
|
|
97
|
+
|
|
98
|
+
#### H4. Unsafe Type Assertion in JSON.parse ✅ RESOLVED
|
|
99
|
+
- **Original Line:** 269
|
|
100
|
+
- **Status:** ✅ RESOLVED
|
|
101
|
+
- **Current Line:** 308-320
|
|
102
|
+
- **Validation:** JSON parsing now has proper validation with try-catch
|
|
103
|
+
- **Code:**
|
|
104
|
+
```typescript
|
|
105
|
+
let parsed: unknown
|
|
106
|
+
try {
|
|
107
|
+
parsed = JSON.parse(content)
|
|
108
|
+
} catch (parseError) {
|
|
109
|
+
console.error(`\nError: Invalid JSON in config file: ${resolvedPath}`)
|
|
110
|
+
console.error(` ${parseError instanceof Error ? parseError.message : String(parseError)}`)
|
|
111
|
+
process.exit(1)
|
|
112
|
+
}
|
|
113
|
+
```
|
|
114
|
+
- **Notes:** Proper JSON validation implemented
|
|
115
|
+
|
|
116
|
+
#### H5. Missing Error Handling in runCli ✅ RESOLVED
|
|
117
|
+
- **Original Line:** 289-303
|
|
118
|
+
- **Status:** ✅ RESOLVED
|
|
119
|
+
- **Current Line:** 343-357
|
|
120
|
+
- **Validation:** Now handles all errors instead of rethrowing
|
|
121
|
+
- **Code:**
|
|
122
|
+
```typescript
|
|
123
|
+
Effect.catchAll((error) =>
|
|
124
|
+
Effect.sync(() => {
|
|
125
|
+
if (isEffectCliValidationError(error)) {
|
|
126
|
+
const message = formatEffectCliError(error)
|
|
127
|
+
console.error(`\nError: ${message}`)
|
|
128
|
+
console.error('\nRun "mdcontext --help" for usage information.')
|
|
129
|
+
process.exit(1)
|
|
130
|
+
}
|
|
131
|
+
// Handle all other unexpected errors instead of rethrowing
|
|
132
|
+
console.error('\nUnexpected error:')
|
|
133
|
+
console.error(error)
|
|
134
|
+
process.exit(2)
|
|
135
|
+
}),
|
|
136
|
+
)
|
|
137
|
+
```
|
|
138
|
+
- **Notes:** Complete error handling now in place
|
|
139
|
+
|
|
140
|
+
#### H6. Race Condition in Help Checks ✓ VALID
|
|
141
|
+
- **Original Line:** 90-98
|
|
142
|
+
- **Status:** ✓ VALID
|
|
143
|
+
- **Current Line:** 90-98
|
|
144
|
+
- **Validation:** Code unchanged, issue remains valid but acceptable
|
|
145
|
+
- **Notes:** No module-level async work detected, safe as-is
|
|
146
|
+
|
|
147
|
+
#### H7. validateConfigObject Type Guard Too Permissive ✅ RESOLVED
|
|
148
|
+
- **Original Line:** 182-198
|
|
149
|
+
- **Status:** ✅ RESOLVED
|
|
150
|
+
- **Current Line:** 213-239
|
|
151
|
+
- **Validation:** Now validates structure with recognized config keys
|
|
152
|
+
- **Code:**
|
|
153
|
+
```typescript
|
|
154
|
+
// Validate structure - if there are keys, at least one should be recognized
|
|
155
|
+
const configKeys = Object.keys(config)
|
|
156
|
+
const hasValidKey = configKeys.some((key) =>
|
|
157
|
+
VALID_CONFIG_KEYS.includes(key as (typeof VALID_CONFIG_KEYS)[number]),
|
|
158
|
+
)
|
|
159
|
+
|
|
160
|
+
if (configKeys.length > 0 && !hasValidKey) {
|
|
161
|
+
console.error(`\nError: Config file has no recognized configuration keys`)
|
|
162
|
+
console.error(` File: ${resolvedPath}`)
|
|
163
|
+
console.error(` Found keys: ${configKeys.join(', ')}`)
|
|
164
|
+
console.error(` Expected at least one of: ${VALID_CONFIG_KEYS.join(', ')}`)
|
|
165
|
+
process.exit(1)
|
|
166
|
+
}
|
|
167
|
+
```
|
|
168
|
+
- **Notes:** Proper validation with VALID_CONFIG_KEYS constant added
|
|
169
|
+
|
|
170
|
+
### Medium Priority Issues (5 total)
|
|
171
|
+
|
|
172
|
+
#### M1. extractConfigPath Edge Case: Empty String ✅ RESOLVED
|
|
173
|
+
- **Original Line:** 112-146
|
|
174
|
+
- **Status:** ✅ RESOLVED
|
|
175
|
+
- **Current Line:** 123-141
|
|
176
|
+
- **Validation:** Empty path validation added for both `--config=` and `-c=`
|
|
177
|
+
- **Code:**
|
|
178
|
+
```typescript
|
|
179
|
+
if (arg.startsWith('--config=')) {
|
|
180
|
+
const value = arg.slice('--config='.length)
|
|
181
|
+
if (value.length === 0) {
|
|
182
|
+
console.error('\nError: --config requires a path')
|
|
183
|
+
console.error(' Usage: --config=path/to/config.js')
|
|
184
|
+
process.exit(1)
|
|
185
|
+
}
|
|
186
|
+
configPath = value
|
|
187
|
+
continue
|
|
188
|
+
}
|
|
189
|
+
```
|
|
190
|
+
- **Notes:** Comprehensive validation for empty paths
|
|
191
|
+
|
|
192
|
+
#### M2. validateConfigFileExists Type Annotation Misleading ✅ RESOLVED
|
|
193
|
+
- **Original Line:** 160
|
|
194
|
+
- **Status:** ✅ RESOLVED
|
|
195
|
+
- **Current Line:** 178
|
|
196
|
+
- **Validation:** Signature changed to `void` return type
|
|
197
|
+
- **Code:**
|
|
198
|
+
```typescript
|
|
199
|
+
function validateConfigFileExists(resolvedPath: string): void {
|
|
200
|
+
if (!fs.existsSync(resolvedPath)) {
|
|
201
|
+
console.error(`\nError: Config file not found: ${resolvedPath}`)
|
|
202
|
+
process.exit(1)
|
|
203
|
+
}
|
|
204
|
+
}
|
|
205
|
+
```
|
|
206
|
+
- **Notes:** Type annotation corrected
|
|
207
|
+
|
|
208
|
+
#### M3. needsAsyncLoading Doesn't Handle .cjs or .mjs ✅ RESOLVED
|
|
209
|
+
- **Original Line:** 246
|
|
210
|
+
- **Status:** ✅ RESOLVED
|
|
211
|
+
- **Current Line:** 289-294
|
|
212
|
+
- **Validation:** Now uses extension check for all non-JSON files
|
|
213
|
+
- **Code:**
|
|
214
|
+
```typescript
|
|
215
|
+
const needsAsyncLoading = (configPath: string | undefined): boolean => {
|
|
216
|
+
if (!configPath) return false
|
|
217
|
+
const ext = path.extname(configPath).toLowerCase()
|
|
218
|
+
// Async load for all JS/TS variants, sync for JSON only
|
|
219
|
+
return ext !== '.json'
|
|
220
|
+
}
|
|
221
|
+
```
|
|
222
|
+
- **Notes:** Better implementation that handles all JS/TS variants
|
|
223
|
+
|
|
224
|
+
#### M4. Error Message Duplication in IIFE Catch ✅ RESOLVED
|
|
225
|
+
- **Original Line:** 314-317
|
|
226
|
+
- **Status:** ✅ RESOLVED
|
|
227
|
+
- **Current Line:** 376-388
|
|
228
|
+
- **Validation:** Error message now more specific
|
|
229
|
+
- **Code:**
|
|
230
|
+
```typescript
|
|
231
|
+
} catch (error) {
|
|
232
|
+
// This catches errors from runCli, not loadConfigAsync
|
|
233
|
+
// (loadConfigAsync has its own error handling that calls process.exit)
|
|
234
|
+
console.error(`\nError: Failed to initialize CLI`)
|
|
235
|
+
if (error instanceof Error) {
|
|
236
|
+
console.error(` ${error.message}`)
|
|
237
|
+
if (error.stack) {
|
|
238
|
+
console.error(`\nStack trace:`)
|
|
239
|
+
console.error(error.stack)
|
|
240
|
+
}
|
|
241
|
+
}
|
|
242
|
+
process.exit(1)
|
|
243
|
+
}
|
|
244
|
+
```
|
|
245
|
+
- **Notes:** Clear distinction between config loading and CLI initialization errors
|
|
246
|
+
|
|
247
|
+
#### M5. Missing Validation for --config Path ✅ RESOLVED
|
|
248
|
+
- **Original Line:** 134
|
|
249
|
+
- **Status:** ✅ RESOLVED
|
|
250
|
+
- **Current Line:** 145-159
|
|
251
|
+
- **Validation:** Comprehensive validation for flag-value pairs
|
|
252
|
+
- **Code:**
|
|
253
|
+
```typescript
|
|
254
|
+
if (arg === '--config' || arg === '-c') {
|
|
255
|
+
const nextArg = argv[i + 1]
|
|
256
|
+
if (!nextArg || nextArg.startsWith('-')) {
|
|
257
|
+
console.error('\nError: --config requires a path')
|
|
258
|
+
console.error(' Usage: --config path/to/config.js')
|
|
259
|
+
process.exit(1)
|
|
260
|
+
}
|
|
261
|
+
if (nextArg.length === 0) {
|
|
262
|
+
console.error('\nError: --config path cannot be empty')
|
|
263
|
+
process.exit(1)
|
|
264
|
+
}
|
|
265
|
+
configPath = nextArg
|
|
266
|
+
i++ // Skip the path argument
|
|
267
|
+
continue
|
|
268
|
+
}
|
|
269
|
+
```
|
|
270
|
+
- **Notes:** All edge cases now handled
|
|
271
|
+
|
|
272
|
+
### Low Priority Issues (3 total)
|
|
273
|
+
|
|
274
|
+
#### L1. Magic Number in extractConfigPath 📍 MOVED
|
|
275
|
+
- **Original Line:** 118
|
|
276
|
+
- **Status:** 📍 MOVED
|
|
277
|
+
- **Current Line:** 119
|
|
278
|
+
- **Validation:** `if (arg === undefined) continue` still present
|
|
279
|
+
- **Notes:** Minor shift in line number, issue still valid but low priority
|
|
280
|
+
|
|
281
|
+
#### L2. Inconsistent String Interpolation ✓ VALID
|
|
282
|
+
- **Original Line:** 162
|
|
283
|
+
- **Status:** ✓ VALID
|
|
284
|
+
- **Current Line:** 180
|
|
285
|
+
- **Validation:** Pattern still used consistently throughout
|
|
286
|
+
- **Notes:** Style choice, acceptable as-is
|
|
287
|
+
|
|
288
|
+
#### L3. Effect.runSync Not Wrapped in Try-Catch 📍 MOVED
|
|
289
|
+
- **Original Line:** 210
|
|
290
|
+
- **Status:** 📍 MOVED
|
|
291
|
+
- **Current Line:** 244-255
|
|
292
|
+
- **Validation:** Still called without try-catch in `createConfigLayerFromConfig`
|
|
293
|
+
- **Notes:** Called within try-catch blocks in callers, acceptable
|
|
294
|
+
|
|
295
|
+
---
|
|
296
|
+
|
|
297
|
+
## Document 2: cli-error-handling-review.md
|
|
298
|
+
|
|
299
|
+
**File:** `/research/code-review/cli-error-handling-review.md`
|
|
300
|
+
**Target:** Multiple CLI command files
|
|
301
|
+
|
|
302
|
+
### Cross-Cutting Concerns
|
|
303
|
+
|
|
304
|
+
#### 1. Process Exit Calls ✓ VALID
|
|
305
|
+
- **Locations:**
|
|
306
|
+
- `main.ts`: Lines 98, 128, 138, 150, 154, 181, 193, 319
|
|
307
|
+
- `index-cmd.ts`: Line 117
|
|
308
|
+
- Others as documented
|
|
309
|
+
- **Status:** ✓ VALID
|
|
310
|
+
- **Validation:** All documented locations verified
|
|
311
|
+
- **Notes:** Still an issue, bypasses Effect cleanup
|
|
312
|
+
|
|
313
|
+
#### 2. Effect.runSync in Error Handlers ✓ VALID
|
|
314
|
+
- **Locations:**
|
|
315
|
+
- `index-cmd.ts`: Lines 261-262, 268-269, 320, 324, 332-333, 337-338, 347-348, 354-355
|
|
316
|
+
- `search.ts`: Lines 373-374, 418-419, 424-425, 433-434, 440-441, 448-449, 454-455
|
|
317
|
+
- **Status:** ✓ VALID
|
|
318
|
+
- **Validation:** Pattern verified in both files
|
|
319
|
+
- **Code Example:**
|
|
320
|
+
```typescript
|
|
321
|
+
Effect.runSync(Console.error(`\n${e.message}`))
|
|
322
|
+
return Effect.succeed(null)
|
|
323
|
+
```
|
|
324
|
+
- **Notes:** Breaks Effect composition model, still present
|
|
325
|
+
|
|
326
|
+
#### 3. Duplicated Error Handling Code ✓ VALID
|
|
327
|
+
- **Locations:**
|
|
328
|
+
- `index-cmd.ts`: Lines 256-276 and 308-360 (embedding error handlers)
|
|
329
|
+
- `search.ts`: Lines 368-386, 416-461, 513-559 (triple duplication)
|
|
330
|
+
- **Status:** ✓ VALID
|
|
331
|
+
- **Validation:** Duplicated catchTags blocks confirmed
|
|
332
|
+
- **Impact:** 150+ lines of duplicated code in search.ts
|
|
333
|
+
- **Notes:** High maintenance burden, needs refactoring
|
|
334
|
+
|
|
335
|
+
#### 4. Legacy Error Handling ✓ VALID
|
|
336
|
+
- **Location:** `error-handler.ts`: Lines 446-491
|
|
337
|
+
- **Status:** ✓ VALID
|
|
338
|
+
- **Validation:** `isEffectCliValidationError` and `formatEffectCliError` still present
|
|
339
|
+
- **Code:**
|
|
340
|
+
```typescript
|
|
341
|
+
export const isEffectCliValidationError = (error: unknown): boolean => {
|
|
342
|
+
if (error && typeof error === 'object') {
|
|
343
|
+
const err = error as Record<string, unknown>
|
|
344
|
+
return (
|
|
345
|
+
err._tag === 'ValidationError' ||
|
|
346
|
+
err._tag === 'MissingValue' ||
|
|
347
|
+
err._tag === 'InvalidValue'
|
|
348
|
+
)
|
|
349
|
+
}
|
|
350
|
+
return false
|
|
351
|
+
}
|
|
352
|
+
```
|
|
353
|
+
- **Notes:** Technical debt, consider deprecation timeline
|
|
354
|
+
|
|
355
|
+
#### 5. Inconsistent Error Messages ✓ VALID
|
|
356
|
+
- **Status:** ✓ VALID
|
|
357
|
+
- **Examples:**
|
|
358
|
+
- `index-cmd.ts:109`: `console.error('Watch error: ${error.message}')`
|
|
359
|
+
- `stats.ts:56`: `yield* Console.error('No index found.')`
|
|
360
|
+
- **Notes:** Mixed paradigms still present
|
|
361
|
+
|
|
362
|
+
### Command-Specific Issues
|
|
363
|
+
|
|
364
|
+
#### index-cmd.ts Issues ✓ VALID
|
|
365
|
+
1. **Line 117**: Direct `process.exit(0)` in SIGINT handler - ✓ VALID
|
|
366
|
+
2. **Lines 261-355**: `Effect.runSync` in error handlers (8 occurrences) - ✓ VALID
|
|
367
|
+
3. **Lines 256-276, 308-360**: Duplicated error handling - ✓ VALID
|
|
368
|
+
|
|
369
|
+
#### search.ts Issues ✓ VALID
|
|
370
|
+
1. **Lines 368-580**: Triple-duplicated error handling in `handleMissingEmbeddings()` - ✓ VALID
|
|
371
|
+
2. **Lines 418-421**: Silent error suppression - ✓ VALID
|
|
372
|
+
3. **Line 318**: Semantic search errors propagate (inconsistent with embedding errors) - ✓ VALID
|
|
373
|
+
|
|
374
|
+
#### context.ts Issues 📍 MOVED
|
|
375
|
+
1. **Line 161**: `continue` on section not found - 📍 MOVED to Line 161 (verified)
|
|
376
|
+
- **Status:** Still valid, silently continues when section not found
|
|
377
|
+
- **Code:**
|
|
378
|
+
```typescript
|
|
379
|
+
if (extractedSections.length === 0) {
|
|
380
|
+
yield* Console.error(`No sections found matching "${sectionSelector}" in ${file}`)
|
|
381
|
+
yield* Console.error('Use --sections to list available sections.')
|
|
382
|
+
continue
|
|
383
|
+
}
|
|
384
|
+
```
|
|
385
|
+
|
|
386
|
+
#### stats.ts, tree.ts, links.ts, backlinks.ts, config-cmd.ts ✓ VALID
|
|
387
|
+
- All issues documented remain valid
|
|
388
|
+
- No significant code changes detected
|
|
389
|
+
|
|
390
|
+
---
|
|
391
|
+
|
|
392
|
+
## Summary Statistics
|
|
393
|
+
|
|
394
|
+
### By Status
|
|
395
|
+
| Status | Count | Percentage |
|
|
396
|
+
|--------|-------|------------|
|
|
397
|
+
| ✅ RESOLVED | 12 | 44% |
|
|
398
|
+
| ✓ VALID | 12 | 44% |
|
|
399
|
+
| 📍 MOVED | 3 | 11% |
|
|
400
|
+
| ❌ NOT FOUND | 0 | 0% |
|
|
401
|
+
| **TOTAL** | **27** | **100%** |
|
|
402
|
+
|
|
403
|
+
### By Priority (main-ts-review.md)
|
|
404
|
+
| Priority | Total | Resolved | Valid | Moved |
|
|
405
|
+
|----------|-------|----------|-------|-------|
|
|
406
|
+
| Critical | 1 | 1 (100%) | 0 | 0 |
|
|
407
|
+
| High | 7 | 5 (71%) | 1 (14%) | 1 (14%) |
|
|
408
|
+
| Medium | 5 | 5 (100%) | 0 | 0 |
|
|
409
|
+
| Low | 3 | 0 | 1 (33%) | 2 (67%) |
|
|
410
|
+
|
|
411
|
+
### By Document
|
|
412
|
+
| Document | Total Issues | Resolved | Valid | Moved |
|
|
413
|
+
|----------|--------------|----------|-------|-------|
|
|
414
|
+
| main-ts-review.md | 16 | 12 (75%) | 2 (13%) | 2 (13%) |
|
|
415
|
+
| cli-error-handling-review.md | 11 | 0 (0%) | 10 (91%) | 1 (9%) |
|
|
416
|
+
|
|
417
|
+
---
|
|
418
|
+
|
|
419
|
+
## Recommendations
|
|
420
|
+
|
|
421
|
+
### Immediate Actions
|
|
422
|
+
1. ✅ **main.ts critical issues**: Already resolved - excellent progress
|
|
423
|
+
2. **Refactor duplicated error handlers**: High priority, affects search.ts and index-cmd.ts
|
|
424
|
+
3. **Replace Effect.runSync**: Medium priority, 15+ occurrences across codebase
|
|
425
|
+
|
|
426
|
+
### Future Improvements
|
|
427
|
+
1. **Document error handling strategy**: Add guidelines for when to catch vs propagate
|
|
428
|
+
2. **Remove legacy error handling**: Deprecate `isEffectCliValidationError` if no longer needed
|
|
429
|
+
3. **Standardize console usage**: Migrate all `console.error` to `Console.error`
|
|
430
|
+
4. **Add error accumulation**: For batch operations like context command
|
|
431
|
+
|
|
432
|
+
### Estimated Effort
|
|
433
|
+
- **Duplicated error handlers**: 2-3 hours (extract to shared functions)
|
|
434
|
+
- **Effect.runSync replacement**: 3-4 hours (15+ occurrences)
|
|
435
|
+
- **Process.exit removal**: 4-5 hours (requires Effect interrupt mechanism)
|
|
436
|
+
- **Documentation**: 1-2 hours (error handling guidelines)
|
|
437
|
+
|
|
438
|
+
**Total**: 10-14 hours for complete remediation
|
|
439
|
+
|
|
440
|
+
---
|
|
441
|
+
|
|
442
|
+
## Validation Methodology
|
|
443
|
+
|
|
444
|
+
1. **Line Number Verification**: Each referenced line was checked against the current codebase
|
|
445
|
+
2. **Code Pattern Matching**: Exact code snippets verified or noted as changed
|
|
446
|
+
3. **Issue Status Determination**:
|
|
447
|
+
- ✅ **RESOLVED**: Code changed to fix the issue
|
|
448
|
+
- ✓ **VALID**: Issue still exists as described
|
|
449
|
+
- 📍 **MOVED**: Issue still exists but at different line number (±5 lines)
|
|
450
|
+
- ❌ **NOT FOUND**: Issue no longer applicable or code removed
|
|
451
|
+
|
|
452
|
+
4. **Context Verification**: Surrounding code reviewed to ensure issue understanding is correct
|
|
453
|
+
|
|
454
|
+
---
|
|
455
|
+
|
|
456
|
+
## Conclusion
|
|
457
|
+
|
|
458
|
+
The validation shows **significant improvement** in the main.ts file, with 75% of issues resolved. The CLI error handling document remains highly accurate, with all issues still present and correctly documented. The reviews provide valuable guidance for continued improvement of the codebase.
|
|
459
|
+
|
|
460
|
+
**Next Steps:**
|
|
461
|
+
1. Update both review documents with validation metadata
|
|
462
|
+
2. Create GitHub issues for remaining high-priority items
|
|
463
|
+
3. Plan refactoring sprint for duplicated error handlers
|
|
464
|
+
4. Document error handling best practices for the team
|