ralph-hero-knowledge-index 0.1.41 → 0.1.42

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 (33) hide show
  1. package/.claude-plugin/plugin.json +1 -1
  2. package/.mcp.json +1 -1
  3. package/README.md +42 -0
  4. package/coverage/coverage-summary.json +2 -2
  5. package/coverage/lcov-report/index.html +19 -19
  6. package/coverage/lcov-report/src/chunker.ts.html +4 -4
  7. package/coverage/lcov-report/src/config.ts.html +1 -1
  8. package/coverage/lcov-report/src/db.ts.html +27 -27
  9. package/coverage/lcov-report/src/embedder.ts.html +3 -3
  10. package/coverage/lcov-report/src/file-scanner.ts.html +1 -1
  11. package/coverage/lcov-report/src/format.ts.html +3 -3
  12. package/coverage/lcov-report/src/generate-indexes.ts.html +1 -1
  13. package/coverage/lcov-report/src/graph-builder.ts.html +2 -2
  14. package/coverage/lcov-report/src/graph-tools.ts.html +15 -15
  15. package/coverage/lcov-report/src/hybrid-search.ts.html +93 -93
  16. package/coverage/lcov-report/src/ignore.ts.html +1 -1
  17. package/coverage/lcov-report/src/index.html +19 -19
  18. package/coverage/lcov-report/src/index.ts.html +479 -50
  19. package/coverage/lcov-report/src/llm-client.ts.html +1 -1
  20. package/coverage/lcov-report/src/parser.ts.html +1 -1
  21. package/coverage/lcov-report/src/reindex.ts.html +1 -1
  22. package/coverage/lcov-report/src/reranker.ts.html +11 -11
  23. package/coverage/lcov-report/src/scripts/index.html +1 -1
  24. package/coverage/lcov-report/src/scripts/verify-tiers.ts.html +1 -1
  25. package/coverage/lcov-report/src/search.ts.html +24 -24
  26. package/coverage/lcov-report/src/traverse.ts.html +2 -2
  27. package/coverage/lcov-report/src/vector-search.ts.html +16 -16
  28. package/coverage/lcov.info +530 -466
  29. package/dist/index.js +110 -0
  30. package/dist/index.js.map +1 -1
  31. package/package.json +1 -1
  32. package/src/__tests__/recall.test.ts +562 -0
  33. package/src/index.ts +143 -0
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "ralph-knowledge",
3
- "version": "0.1.41",
3
+ "version": "0.1.42",
4
4
  "description": "Knowledge graph for ralph-hero: semantic search, relationship traversal, and document indexing across thoughts/ documents. Optional companion to ralph-hero.",
5
5
  "author": {
6
6
  "name": "Chad Dubiel",
package/.mcp.json CHANGED
@@ -2,7 +2,7 @@
2
2
  "mcpServers": {
3
3
  "ralph-knowledge": {
4
4
  "command": "npx",
5
- "args": ["-y", "ralph-hero-knowledge-index@0.1.41"]
5
+ "args": ["-y", "ralph-hero-knowledge-index@0.1.42"]
6
6
  }
7
7
  }
8
8
  }
package/README.md CHANGED
@@ -100,6 +100,48 @@ Patterns behave exactly like `.gitignore`:
100
100
  Directories whose names start with `.` or `_` are also always skipped, as a
101
101
  fast-path before any matcher is consulted.
102
102
 
103
+ ## Choosing between `knowledge_search` and `knowledge_recall`
104
+
105
+ ralph-knowledge exposes two retrieval MCP tools that wrap the same underlying
106
+ hybrid search. They differ on **who decides the tier policy**:
107
+
108
+ | Tool | When to use | Tier handling |
109
+ |------|-------------|---------------|
110
+ | `knowledge_search` | Power-user / explicit path. You know the tier and want full control over `rerank`, `lambda`, `return_diagnostics`, chunk metadata, etc. | You pass `memory_tier` explicitly (`doc`, `raw`, `reflection`, `wiki`, or `any` — default `any`). |
111
+ | `knowledge_recall` | Default for agents and skills. You declare your role and the tool picks the right tiers. | A role-keyed policy fans out one rerank-enabled `hybrid.search()` per tier in the role's list, then merges and re-ranks. |
112
+
113
+ ### Role -> tier policy
114
+
115
+ `knowledge_recall(query, role, ...)` follows this fixed policy map:
116
+
117
+ | Role | Tiers (priority order) | Intent |
118
+ |------|------------------------|--------|
119
+ | `researcher` | `raw`, `reflection`, `doc` | Recovery of unfiltered observations + synthesized insights + curated research. Excludes wiki (we are looking for things the wiki does not already cover). |
120
+ | `planner` | `reflection`, `wiki`, `doc` | Bias toward synthesized insights + canonical curated knowledge; excludes raw observations to keep the planning frame stable. |
121
+ | `implementer` | `wiki`, `doc` | Only canonical references — never raw memory or speculative reflections. Keeps implementations grounded in agreed-upon truth. |
122
+ | `reviewer` | `wiki`, `doc` | Same constraints as implementer — review against the canonical surface, not the raw or speculative tiers. |
123
+ | `triager` | `doc`, `wiki` | Doc-first for issue context, wiki as fallback. |
124
+
125
+ ### Cost notes
126
+
127
+ - `knowledge_recall` always runs the cross-encoder reranker (`rerank=true`)
128
+ because role-aware retrieval is the most context-sensitive call path in the
129
+ surface. Expect a one-time ~0.5-1 s cold-start (ONNX model load on the first
130
+ call after process boot) and ~25-45 ms per (query, doc) pair on warm calls.
131
+ - Each tier sub-query targets <50 ms; a 3-tier fanout totals <150 ms before
132
+ reranking.
133
+ - If a tier sub-query throws (e.g., transient DB lock), `knowledge_recall`
134
+ logs the error to stderr and continues with the remaining tiers — degraded
135
+ results rather than a hard failure.
136
+
137
+ ### Power-user override
138
+
139
+ Skills can mix both tools. For example, `/ralph-hero:plan` calls
140
+ `knowledge_recall(role="planner", ...)` for the default tier-balanced context
141
+ gather, and ALSO calls `knowledge_search(type="research", ...)` for an explicit
142
+ artifact lookup where it needs a precise type filter. Keeping both tools in a
143
+ skill's allowlist is the recommended pattern.
144
+
103
145
  ## Environment variables
104
146
 
105
147
  | Variable | Purpose |
@@ -1,4 +1,4 @@
1
- {"total": {"lines":{"total":1403,"covered":1275,"skipped":0,"pct":90.87},"statements":{"total":1534,"covered":1381,"skipped":0,"pct":90.02},"functions":{"total":208,"covered":191,"skipped":0,"pct":91.82},"branches":{"total":901,"covered":734,"skipped":0,"pct":81.46},"branchesTrue":{"total":0,"covered":0,"skipped":0,"pct":100}}
1
+ {"total": {"lines":{"total":1439,"covered":1305,"skipped":0,"pct":90.68},"statements":{"total":1572,"covered":1412,"skipped":0,"pct":89.82},"functions":{"total":211,"covered":194,"skipped":0,"pct":91.94},"branches":{"total":923,"covered":744,"skipped":0,"pct":80.6},"branchesTrue":{"total":0,"covered":0,"skipped":0,"pct":100}}
2
2
  ,"/home/runner/work/ralph-hero/ralph-hero/plugin/ralph-knowledge/src/chunker.ts": {"lines":{"total":91,"covered":85,"skipped":0,"pct":93.4},"functions":{"total":6,"covered":6,"skipped":0,"pct":100},"statements":{"total":94,"covered":88,"skipped":0,"pct":93.61},"branches":{"total":45,"covered":39,"skipped":0,"pct":86.66}}
3
3
  ,"/home/runner/work/ralph-hero/ralph-hero/plugin/ralph-knowledge/src/config.ts": {"lines":{"total":34,"covered":32,"skipped":0,"pct":94.11},"functions":{"total":5,"covered":5,"skipped":0,"pct":100},"statements":{"total":36,"covered":34,"skipped":0,"pct":94.44},"branches":{"total":31,"covered":31,"skipped":0,"pct":100}}
4
4
  ,"/home/runner/work/ralph-hero/ralph-hero/plugin/ralph-knowledge/src/db.ts": {"lines":{"total":119,"covered":117,"skipped":0,"pct":98.31},"functions":{"total":31,"covered":31,"skipped":0,"pct":100},"statements":{"total":125,"covered":122,"skipped":0,"pct":97.6},"branches":{"total":78,"covered":68,"skipped":0,"pct":87.17}}
@@ -10,7 +10,7 @@
10
10
  ,"/home/runner/work/ralph-hero/ralph-hero/plugin/ralph-knowledge/src/graph-tools.ts": {"lines":{"total":242,"covered":230,"skipped":0,"pct":95.04},"functions":{"total":34,"covered":32,"skipped":0,"pct":94.11},"statements":{"total":257,"covered":243,"skipped":0,"pct":94.55},"branches":{"total":151,"covered":120,"skipped":0,"pct":79.47}}
11
11
  ,"/home/runner/work/ralph-hero/ralph-hero/plugin/ralph-knowledge/src/hybrid-search.ts": {"lines":{"total":174,"covered":173,"skipped":0,"pct":99.42},"functions":{"total":19,"covered":19,"skipped":0,"pct":100},"statements":{"total":203,"covered":195,"skipped":0,"pct":96.05},"branches":{"total":129,"covered":110,"skipped":0,"pct":85.27}}
12
12
  ,"/home/runner/work/ralph-hero/ralph-hero/plugin/ralph-knowledge/src/ignore.ts": {"lines":{"total":17,"covered":16,"skipped":0,"pct":94.11},"functions":{"total":2,"covered":2,"skipped":0,"pct":100},"statements":{"total":19,"covered":18,"skipped":0,"pct":94.73},"branches":{"total":12,"covered":11,"skipped":0,"pct":91.66}}
13
- ,"/home/runner/work/ralph-hero/ralph-hero/plugin/ralph-knowledge/src/index.ts": {"lines":{"total":112,"covered":91,"skipped":0,"pct":81.25},"functions":{"total":16,"covered":13,"skipped":0,"pct":81.25},"statements":{"total":128,"covered":105,"skipped":0,"pct":82.03},"branches":{"total":83,"covered":57,"skipped":0,"pct":68.67}}
13
+ ,"/home/runner/work/ralph-hero/ralph-hero/plugin/ralph-knowledge/src/index.ts": {"lines":{"total":148,"covered":121,"skipped":0,"pct":81.75},"functions":{"total":19,"covered":16,"skipped":0,"pct":84.21},"statements":{"total":166,"covered":136,"skipped":0,"pct":81.92},"branches":{"total":105,"covered":67,"skipped":0,"pct":63.8}}
14
14
  ,"/home/runner/work/ralph-hero/ralph-hero/plugin/ralph-knowledge/src/llm-client.ts": {"lines":{"total":31,"covered":31,"skipped":0,"pct":100},"functions":{"total":6,"covered":5,"skipped":0,"pct":83.33},"statements":{"total":33,"covered":32,"skipped":0,"pct":96.96},"branches":{"total":13,"covered":13,"skipped":0,"pct":100}}
15
15
  ,"/home/runner/work/ralph-hero/ralph-hero/plugin/ralph-knowledge/src/parser.ts": {"lines":{"total":49,"covered":49,"skipped":0,"pct":100},"functions":{"total":5,"covered":5,"skipped":0,"pct":100},"statements":{"total":53,"covered":53,"skipped":0,"pct":100},"branches":{"total":46,"covered":41,"skipped":0,"pct":89.13}}
16
16
  ,"/home/runner/work/ralph-hero/ralph-hero/plugin/ralph-knowledge/src/reindex.ts": {"lines":{"total":194,"covered":157,"skipped":0,"pct":80.92},"functions":{"total":15,"covered":9,"skipped":0,"pct":60},"statements":{"total":209,"covered":164,"skipped":0,"pct":78.46},"branches":{"total":104,"covered":74,"skipped":0,"pct":71.15}}
@@ -23,30 +23,30 @@
23
23
  <div class='clearfix'>
24
24
 
25
25
  <div class='fl pad1y space-right2'>
26
- <span class="strong">90.02% </span>
26
+ <span class="strong">89.82% </span>
27
27
  <span class="quiet">Statements</span>
28
- <span class='fraction'>1381/1534</span>
28
+ <span class='fraction'>1412/1572</span>
29
29
  </div>
30
30
 
31
31
 
32
32
  <div class='fl pad1y space-right2'>
33
- <span class="strong">81.46% </span>
33
+ <span class="strong">80.6% </span>
34
34
  <span class="quiet">Branches</span>
35
- <span class='fraction'>734/901</span>
35
+ <span class='fraction'>744/923</span>
36
36
  </div>
37
37
 
38
38
 
39
39
  <div class='fl pad1y space-right2'>
40
- <span class="strong">91.82% </span>
40
+ <span class="strong">91.94% </span>
41
41
  <span class="quiet">Functions</span>
42
- <span class='fraction'>191/208</span>
42
+ <span class='fraction'>194/211</span>
43
43
  </div>
44
44
 
45
45
 
46
46
  <div class='fl pad1y space-right2'>
47
- <span class="strong">90.87% </span>
47
+ <span class="strong">90.68% </span>
48
48
  <span class="quiet">Lines</span>
49
- <span class='fraction'>1275/1403</span>
49
+ <span class='fraction'>1305/1439</span>
50
50
  </div>
51
51
 
52
52
 
@@ -80,17 +80,17 @@
80
80
  </thead>
81
81
  <tbody><tr>
82
82
  <td class="file high" data-value="src"><a href="src/index.html">src</a></td>
83
- <td data-value="92.06" class="pic high">
84
- <div class="chart"><div class="cover-fill" style="width: 92%"></div><div class="cover-empty" style="width: 8%"></div></div>
83
+ <td data-value="91.8" class="pic high">
84
+ <div class="chart"><div class="cover-fill" style="width: 91%"></div><div class="cover-empty" style="width: 9%"></div></div>
85
85
  </td>
86
- <td data-value="92.06" class="pct high">92.06%</td>
87
- <td data-value="1500" class="abs high">1381/1500</td>
88
- <td data-value="82.75" class="pct high">82.75%</td>
89
- <td data-value="887" class="abs high">734/887</td>
90
- <td data-value="93.17" class="pct high">93.17%</td>
91
- <td data-value="205" class="abs high">191/205</td>
92
- <td data-value="92.99" class="pct high">92.99%</td>
93
- <td data-value="1371" class="abs high">1275/1371</td>
86
+ <td data-value="91.8" class="pct high">91.8%</td>
87
+ <td data-value="1538" class="abs high">1412/1538</td>
88
+ <td data-value="81.84" class="pct high">81.84%</td>
89
+ <td data-value="909" class="abs high">744/909</td>
90
+ <td data-value="93.26" class="pct high">93.26%</td>
91
+ <td data-value="208" class="abs high">194/208</td>
92
+ <td data-value="92.75" class="pct high">92.75%</td>
93
+ <td data-value="1407" class="abs high">1305/1407</td>
94
94
  </tr>
95
95
 
96
96
  <tr>
@@ -116,7 +116,7 @@
116
116
  <div class='footer quiet pad2 space-top1 center small'>
117
117
  Code coverage generated by
118
118
  <a href="https://istanbul.js.org/" target="_blank" rel="noopener noreferrer">istanbul</a>
119
- at 2026-05-13T01:40:01.638Z
119
+ at 2026-05-13T02:34:08.145Z
120
120
  </div>
121
121
  <script src="prettify.js"></script>
122
122
  <script>
@@ -379,9 +379,9 @@
379
379
  <span class="cline-any cline-neutral">&nbsp;</span>
380
380
  <span class="cline-any cline-neutral">&nbsp;</span>
381
381
  <span class="cline-any cline-neutral">&nbsp;</span>
382
- <span class="cline-any cline-yes">5x</span>
383
- <span class="cline-any cline-yes">5x</span>
384
- <span class="cline-any cline-yes">5x</span>
382
+ <span class="cline-any cline-yes">6x</span>
383
+ <span class="cline-any cline-yes">6x</span>
384
+ <span class="cline-any cline-yes">6x</span>
385
385
  <span class="cline-any cline-neutral">&nbsp;</span>
386
386
  <span class="cline-any cline-neutral">&nbsp;</span>
387
387
  <span class="cline-any cline-neutral">&nbsp;</span>
@@ -940,7 +940,7 @@ export function chunkText(text: string, opts: ChunkerOptions = {}): Chunk[] {
940
940
  <div class='footer quiet pad2 space-top1 center small'>
941
941
  Code coverage generated by
942
942
  <a href="https://istanbul.js.org/" target="_blank" rel="noopener noreferrer">istanbul</a>
943
- at 2026-05-13T01:40:01.638Z
943
+ at 2026-05-13T02:34:08.145Z
944
944
  </div>
945
945
  <script src="../prettify.js"></script>
946
946
  <script>
@@ -385,7 +385,7 @@ export function loadConfig(): KnowledgeConfig {
385
385
  <div class='footer quiet pad2 space-top1 center small'>
386
386
  Code coverage generated by
387
387
  <a href="https://istanbul.js.org/" target="_blank" rel="noopener noreferrer">istanbul</a>
388
- at 2026-05-13T01:40:01.638Z
388
+ at 2026-05-13T02:34:08.145Z
389
389
  </div>
390
390
  <script src="../prettify.js"></script>
391
391
  <script>
@@ -705,14 +705,14 @@
705
705
  <span class="cline-any cline-neutral">&nbsp;</span>
706
706
  <span class="cline-any cline-neutral">&nbsp;</span>
707
707
  <span class="cline-any cline-neutral">&nbsp;</span>
708
- <span class="cline-any cline-yes">362x</span>
709
- <span class="cline-any cline-yes">362x</span>
710
- <span class="cline-any cline-yes">362x</span>
711
- <span class="cline-any cline-yes">362x</span>
708
+ <span class="cline-any cline-yes">375x</span>
709
+ <span class="cline-any cline-yes">375x</span>
710
+ <span class="cline-any cline-yes">375x</span>
711
+ <span class="cline-any cline-yes">375x</span>
712
712
  <span class="cline-any cline-neutral">&nbsp;</span>
713
713
  <span class="cline-any cline-neutral">&nbsp;</span>
714
714
  <span class="cline-any cline-neutral">&nbsp;</span>
715
- <span class="cline-any cline-yes">362x</span>
715
+ <span class="cline-any cline-yes">375x</span>
716
716
  <span class="cline-any cline-neutral">&nbsp;</span>
717
717
  <span class="cline-any cline-neutral">&nbsp;</span>
718
718
  <span class="cline-any cline-neutral">&nbsp;</span>
@@ -789,8 +789,8 @@
789
789
  <span class="cline-any cline-neutral">&nbsp;</span>
790
790
  <span class="cline-any cline-neutral">&nbsp;</span>
791
791
  <span class="cline-any cline-neutral">&nbsp;</span>
792
- <span class="cline-any cline-yes">362x</span>
793
- <span class="cline-any cline-yes">362x</span>
792
+ <span class="cline-any cline-yes">375x</span>
793
+ <span class="cline-any cline-yes">375x</span>
794
794
  <span class="cline-any cline-neutral">&nbsp;</span>
795
795
  <span class="cline-any cline-neutral">&nbsp;</span>
796
796
  <span class="cline-any cline-neutral">&nbsp;</span>
@@ -799,14 +799,14 @@
799
799
  <span class="cline-any cline-neutral">&nbsp;</span>
800
800
  <span class="cline-any cline-neutral">&nbsp;</span>
801
801
  <span class="cline-any cline-neutral">&nbsp;</span>
802
- <span class="cline-any cline-yes">362x</span>
803
- <span class="cline-any cline-yes">362x</span>
802
+ <span class="cline-any cline-yes">375x</span>
803
+ <span class="cline-any cline-yes">375x</span>
804
804
  <span class="cline-any cline-neutral">&nbsp;</span>
805
805
  <span class="cline-any cline-neutral">&nbsp;</span>
806
806
  <span class="cline-any cline-neutral">&nbsp;</span>
807
807
  <span class="cline-any cline-neutral">&nbsp;</span>
808
808
  <span class="cline-any cline-neutral">&nbsp;</span>
809
- <span class="cline-any cline-yes">362x</span>
809
+ <span class="cline-any cline-yes">375x</span>
810
810
  <span class="cline-any cline-neutral">&nbsp;</span>
811
811
  <span class="cline-any cline-neutral">&nbsp;</span>
812
812
  <span class="cline-any cline-neutral">&nbsp;</span>
@@ -815,11 +815,11 @@
815
815
  <span class="cline-any cline-neutral">&nbsp;</span>
816
816
  <span class="cline-any cline-neutral">&nbsp;</span>
817
817
  <span class="cline-any cline-neutral">&nbsp;</span>
818
- <span class="cline-any cline-yes">362x</span>
819
- <span class="cline-any cline-yes">362x</span>
818
+ <span class="cline-any cline-yes">375x</span>
819
+ <span class="cline-any cline-yes">375x</span>
820
820
  <span class="cline-any cline-neutral">&nbsp;</span>
821
821
  <span class="cline-any cline-neutral">&nbsp;</span>
822
- <span class="cline-any cline-yes">362x</span>
822
+ <span class="cline-any cline-yes">375x</span>
823
823
  <span class="cline-any cline-yes">1x</span>
824
824
  <span class="cline-any cline-neutral">&nbsp;</span>
825
825
  <span class="cline-any cline-neutral">&nbsp;</span>
@@ -847,8 +847,8 @@
847
847
  <span class="cline-any cline-neutral">&nbsp;</span>
848
848
  <span class="cline-any cline-neutral">&nbsp;</span>
849
849
  <span class="cline-any cline-neutral">&nbsp;</span>
850
- <span class="cline-any cline-yes">362x</span>
851
- <span class="cline-any cline-yes">362x</span>
850
+ <span class="cline-any cline-yes">375x</span>
851
+ <span class="cline-any cline-yes">375x</span>
852
852
  <span class="cline-any cline-neutral">&nbsp;</span>
853
853
  <span class="cline-any cline-yes">2x</span>
854
854
  <span class="cline-any cline-neutral">&nbsp;</span>
@@ -875,11 +875,11 @@
875
875
  <span class="cline-any cline-neutral">&nbsp;</span>
876
876
  <span class="cline-any cline-neutral">&nbsp;</span>
877
877
  <span class="cline-any cline-neutral">&nbsp;</span>
878
- <span class="cline-any cline-yes">938x</span>
878
+ <span class="cline-any cline-yes">967x</span>
879
879
  <span class="cline-any cline-neutral">&nbsp;</span>
880
880
  <span class="cline-any cline-neutral">&nbsp;</span>
881
881
  <span class="cline-any cline-neutral">&nbsp;</span>
882
- <span class="cline-any cline-yes">938x</span>
882
+ <span class="cline-any cline-yes">967x</span>
883
883
  <span class="cline-any cline-neutral">&nbsp;</span>
884
884
  <span class="cline-any cline-neutral">&nbsp;</span>
885
885
  <span class="cline-any cline-neutral">&nbsp;</span>
@@ -901,19 +901,19 @@
901
901
  <span class="cline-any cline-neutral">&nbsp;</span>
902
902
  <span class="cline-any cline-neutral">&nbsp;</span>
903
903
  <span class="cline-any cline-neutral">&nbsp;</span>
904
- <span class="cline-any cline-yes">152x</span>
904
+ <span class="cline-any cline-yes">216x</span>
905
905
  <span class="cline-any cline-neutral">&nbsp;</span>
906
906
  <span class="cline-any cline-neutral">&nbsp;</span>
907
907
  <span class="cline-any cline-neutral">&nbsp;</span>
908
908
  <span class="cline-any cline-neutral">&nbsp;</span>
909
909
  <span class="cline-any cline-neutral">&nbsp;</span>
910
- <span class="cline-any cline-yes">170x</span>
911
- <span class="cline-any cline-yes">170x</span>
912
- <span class="cline-any cline-yes">298x</span>
910
+ <span class="cline-any cline-yes">171x</span>
911
+ <span class="cline-any cline-yes">171x</span>
912
+ <span class="cline-any cline-yes">300x</span>
913
913
  <span class="cline-any cline-neutral">&nbsp;</span>
914
914
  <span class="cline-any cline-neutral">&nbsp;</span>
915
915
  <span class="cline-any cline-neutral">&nbsp;</span>
916
- <span class="cline-any cline-yes">113x</span>
916
+ <span class="cline-any cline-yes">132x</span>
917
917
  <span class="cline-any cline-neutral">&nbsp;</span>
918
918
  <span class="cline-any cline-neutral">&nbsp;</span>
919
919
  <span class="cline-any cline-neutral">&nbsp;</span>
@@ -1134,14 +1134,14 @@
1134
1134
  <span class="cline-any cline-neutral">&nbsp;</span>
1135
1135
  <span class="cline-any cline-neutral">&nbsp;</span>
1136
1136
  <span class="cline-any cline-neutral">&nbsp;</span>
1137
- <span class="cline-any cline-yes">18x</span>
1137
+ <span class="cline-any cline-yes">84x</span>
1138
1138
  <span class="cline-any cline-neutral">&nbsp;</span>
1139
1139
  <span class="cline-any cline-neutral">&nbsp;</span>
1140
- <span class="cline-any cline-yes">180x</span>
1141
- <span class="cline-any cline-yes">18x</span>
1140
+ <span class="cline-any cline-yes">840x</span>
1141
+ <span class="cline-any cline-yes">84x</span>
1142
1142
  <span class="cline-any cline-neutral">&nbsp;</span>
1143
1143
  <span class="cline-any cline-neutral">&nbsp;</span>
1144
- <span class="cline-any cline-yes">18x</span>
1144
+ <span class="cline-any cline-yes">84x</span>
1145
1145
  <span class="cline-any cline-neutral">&nbsp;</span>
1146
1146
  <span class="cline-any cline-neutral">&nbsp;</span>
1147
1147
  <span class="cline-any cline-neutral">&nbsp;</span>
@@ -1711,7 +1711,7 @@ export class KnowledgeDB {
1711
1711
  <div class='footer quiet pad2 space-top1 center small'>
1712
1712
  Code coverage generated by
1713
1713
  <a href="https://istanbul.js.org/" target="_blank" rel="noopener noreferrer">istanbul</a>
1714
- at 2026-05-13T01:40:01.638Z
1714
+ at 2026-05-13T02:34:08.145Z
1715
1715
  </div>
1716
1716
  <script src="../prettify.js"></script>
1717
1717
  <script>
@@ -301,9 +301,9 @@
301
301
  <span class="cline-any cline-neutral">&nbsp;</span>
302
302
  <span class="cline-any cline-neutral">&nbsp;</span>
303
303
  <span class="cline-any cline-neutral">&nbsp;</span>
304
- <span class="cline-any cline-yes">3x</span>
304
+ <span class="cline-any cline-yes">4x</span>
305
305
  <span class="cline-any cline-neutral">&nbsp;</span>
306
- <span class="cline-any cline-yes">3x</span>
306
+ <span class="cline-any cline-yes">4x</span>
307
307
  <span class="cline-any cline-neutral">&nbsp;</span>
308
308
  <span class="cline-any cline-neutral">&nbsp;</span>
309
309
  <span class="cline-any cline-yes">75x</span>
@@ -763,7 +763,7 @@ export function prepareTextForEmbedding(
763
763
  <div class='footer quiet pad2 space-top1 center small'>
764
764
  Code coverage generated by
765
765
  <a href="https://istanbul.js.org/" target="_blank" rel="noopener noreferrer">istanbul</a>
766
- at 2026-05-13T01:40:01.638Z
766
+ at 2026-05-13T02:34:08.145Z
767
767
  </div>
768
768
  <script src="../prettify.js"></script>
769
769
  <script>
@@ -199,7 +199,7 @@ export function findMarkdownFiles(dir: string, matcher?: IgnoreMatcher): string[
199
199
  <div class='footer quiet pad2 space-top1 center small'>
200
200
  Code coverage generated by
201
201
  <a href="https://istanbul.js.org/" target="_blank" rel="noopener noreferrer">istanbul</a>
202
- at 2026-05-13T01:40:01.638Z
202
+ at 2026-05-13T02:34:08.145Z
203
203
  </div>
204
204
  <script src="../prettify.js"></script>
205
205
  <script>
@@ -175,8 +175,8 @@
175
175
  <span class="cline-any cline-neutral">&nbsp;</span>
176
176
  <span class="cline-any cline-neutral">&nbsp;</span>
177
177
  <span class="cline-any cline-neutral">&nbsp;</span>
178
- <span class="cline-any cline-yes">31x</span>
179
- <span class="cline-any cline-yes">19x</span>
178
+ <span class="cline-any cline-yes">41x</span>
179
+ <span class="cline-any cline-yes">29x</span>
180
180
  <span class="cline-any cline-neutral">&nbsp;</span>
181
181
  <span class="cline-any cline-neutral">&nbsp;</span>
182
182
  <span class="cline-any cline-yes">12x</span>
@@ -295,7 +295,7 @@ export function formatTraverseResults(
295
295
  <div class='footer quiet pad2 space-top1 center small'>
296
296
  Code coverage generated by
297
297
  <a href="https://istanbul.js.org/" target="_blank" rel="noopener noreferrer">istanbul</a>
298
- at 2026-05-13T01:40:01.638Z
298
+ at 2026-05-13T02:34:08.145Z
299
299
  </div>
300
300
  <script src="../prettify.js"></script>
301
301
  <script>
@@ -946,7 +946,7 @@ export function generateIndexes(outDir: string, allDocs: ParsedDocument[]): void
946
946
  <div class='footer quiet pad2 space-top1 center small'>
947
947
  Code coverage generated by
948
948
  <a href="https://istanbul.js.org/" target="_blank" rel="noopener noreferrer">istanbul</a>
949
- at 2026-05-13T01:40:01.638Z
949
+ at 2026-05-13T02:34:08.145Z
950
950
  </div>
951
951
  <script src="../prettify.js"></script>
952
952
  <script>
@@ -141,7 +141,7 @@
141
141
  <span class="cline-any cline-neutral">&nbsp;</span>
142
142
  <span class="cline-any cline-neutral">&nbsp;</span>
143
143
  <span class="cline-any cline-neutral">&nbsp;</span>
144
- <span class="cline-any cline-yes">4x</span>
144
+ <span class="cline-any cline-yes">5x</span>
145
145
  <span class="cline-any cline-neutral">&nbsp;</span>
146
146
  <span class="cline-any cline-neutral">&nbsp;</span>
147
147
  <span class="cline-any cline-neutral">&nbsp;</span>
@@ -292,7 +292,7 @@ export class GraphBuilder {
292
292
  <div class='footer quiet pad2 space-top1 center small'>
293
293
  Code coverage generated by
294
294
  <a href="https://istanbul.js.org/" target="_blank" rel="noopener noreferrer">istanbul</a>
295
- at 2026-05-13T01:40:01.638Z
295
+ at 2026-05-13T02:34:08.145Z
296
296
  </div>
297
297
  <script src="../prettify.js"></script>
298
298
  <script>
@@ -991,11 +991,11 @@
991
991
  <span class="cline-any cline-neutral">&nbsp;</span>
992
992
  <span class="cline-any cline-neutral">&nbsp;</span>
993
993
  <span class="cline-any cline-neutral">&nbsp;</span>
994
- <span class="cline-any cline-yes">3x</span>
994
+ <span class="cline-any cline-yes">4x</span>
995
995
  <span class="cline-any cline-neutral">&nbsp;</span>
996
- <span class="cline-any cline-yes">3x</span>
996
+ <span class="cline-any cline-yes">4x</span>
997
997
  <span class="cline-any cline-neutral">&nbsp;</span>
998
- <span class="cline-any cline-yes">3x</span>
998
+ <span class="cline-any cline-yes">4x</span>
999
999
  <span class="cline-any cline-neutral">&nbsp;</span>
1000
1000
  <span class="cline-any cline-neutral">&nbsp;</span>
1001
1001
  <span class="cline-any cline-neutral">&nbsp;</span>
@@ -1015,7 +1015,7 @@
1015
1015
  <span class="cline-any cline-neutral">&nbsp;</span>
1016
1016
  <span class="cline-any cline-neutral">&nbsp;</span>
1017
1017
  <span class="cline-any cline-neutral">&nbsp;</span>
1018
- <span class="cline-any cline-yes">3x</span>
1018
+ <span class="cline-any cline-yes">4x</span>
1019
1019
  <span class="cline-any cline-neutral">&nbsp;</span>
1020
1020
  <span class="cline-any cline-neutral">&nbsp;</span>
1021
1021
  <span class="cline-any cline-neutral">&nbsp;</span>
@@ -1031,7 +1031,7 @@
1031
1031
  <span class="cline-any cline-neutral">&nbsp;</span>
1032
1032
  <span class="cline-any cline-neutral">&nbsp;</span>
1033
1033
  <span class="cline-any cline-neutral">&nbsp;</span>
1034
- <span class="cline-any cline-yes">3x</span>
1034
+ <span class="cline-any cline-yes">4x</span>
1035
1035
  <span class="cline-any cline-neutral">&nbsp;</span>
1036
1036
  <span class="cline-any cline-neutral">&nbsp;</span>
1037
1037
  <span class="cline-any cline-neutral">&nbsp;</span>
@@ -1046,7 +1046,7 @@
1046
1046
  <span class="cline-any cline-neutral">&nbsp;</span>
1047
1047
  <span class="cline-any cline-neutral">&nbsp;</span>
1048
1048
  <span class="cline-any cline-neutral">&nbsp;</span>
1049
- <span class="cline-any cline-yes">3x</span>
1049
+ <span class="cline-any cline-yes">4x</span>
1050
1050
  <span class="cline-any cline-neutral">&nbsp;</span>
1051
1051
  <span class="cline-any cline-neutral">&nbsp;</span>
1052
1052
  <span class="cline-any cline-neutral">&nbsp;</span>
@@ -1054,7 +1054,7 @@
1054
1054
  <span class="cline-any cline-neutral">&nbsp;</span>
1055
1055
  <span class="cline-any cline-neutral">&nbsp;</span>
1056
1056
  <span class="cline-any cline-neutral">&nbsp;</span>
1057
- <span class="cline-any cline-yes">3x</span>
1057
+ <span class="cline-any cline-yes">4x</span>
1058
1058
  <span class="cline-any cline-neutral">&nbsp;</span>
1059
1059
  <span class="cline-any cline-neutral">&nbsp;</span>
1060
1060
  <span class="cline-any cline-neutral">&nbsp;</span>
@@ -1155,7 +1155,7 @@
1155
1155
  <span class="cline-any cline-neutral">&nbsp;</span>
1156
1156
  <span class="cline-any cline-neutral">&nbsp;</span>
1157
1157
  <span class="cline-any cline-neutral">&nbsp;</span>
1158
- <span class="cline-any cline-yes">86x</span>
1158
+ <span class="cline-any cline-yes">99x</span>
1159
1159
  <span class="cline-any cline-neutral">&nbsp;</span>
1160
1160
  <span class="cline-any cline-neutral">&nbsp;</span>
1161
1161
  <span class="cline-any cline-neutral">&nbsp;</span>
@@ -1305,7 +1305,7 @@
1305
1305
  <span class="cline-any cline-neutral">&nbsp;</span>
1306
1306
  <span class="cline-any cline-neutral">&nbsp;</span>
1307
1307
  <span class="cline-any cline-neutral">&nbsp;</span>
1308
- <span class="cline-any cline-yes">86x</span>
1308
+ <span class="cline-any cline-yes">99x</span>
1309
1309
  <span class="cline-any cline-neutral">&nbsp;</span>
1310
1310
  <span class="cline-any cline-neutral">&nbsp;</span>
1311
1311
  <span class="cline-any cline-neutral">&nbsp;</span>
@@ -1431,7 +1431,7 @@
1431
1431
  <span class="cline-any cline-neutral">&nbsp;</span>
1432
1432
  <span class="cline-any cline-neutral">&nbsp;</span>
1433
1433
  <span class="cline-any cline-neutral">&nbsp;</span>
1434
- <span class="cline-any cline-yes">86x</span>
1434
+ <span class="cline-any cline-yes">99x</span>
1435
1435
  <span class="cline-any cline-neutral">&nbsp;</span>
1436
1436
  <span class="cline-any cline-neutral">&nbsp;</span>
1437
1437
  <span class="cline-any cline-neutral">&nbsp;</span>
@@ -1547,7 +1547,7 @@
1547
1547
  <span class="cline-any cline-neutral">&nbsp;</span>
1548
1548
  <span class="cline-any cline-neutral">&nbsp;</span>
1549
1549
  <span class="cline-any cline-neutral">&nbsp;</span>
1550
- <span class="cline-any cline-yes">86x</span>
1550
+ <span class="cline-any cline-yes">99x</span>
1551
1551
  <span class="cline-any cline-neutral">&nbsp;</span>
1552
1552
  <span class="cline-any cline-neutral">&nbsp;</span>
1553
1553
  <span class="cline-any cline-neutral">&nbsp;</span>
@@ -1616,7 +1616,7 @@
1616
1616
  <span class="cline-any cline-neutral">&nbsp;</span>
1617
1617
  <span class="cline-any cline-neutral">&nbsp;</span>
1618
1618
  <span class="cline-any cline-neutral">&nbsp;</span>
1619
- <span class="cline-any cline-yes">86x</span>
1619
+ <span class="cline-any cline-yes">99x</span>
1620
1620
  <span class="cline-any cline-neutral">&nbsp;</span>
1621
1621
  <span class="cline-any cline-neutral">&nbsp;</span>
1622
1622
  <span class="cline-any cline-neutral">&nbsp;</span>
@@ -1701,7 +1701,7 @@
1701
1701
  <span class="cline-any cline-neutral">&nbsp;</span>
1702
1702
  <span class="cline-any cline-neutral">&nbsp;</span>
1703
1703
  <span class="cline-any cline-neutral">&nbsp;</span>
1704
- <span class="cline-any cline-yes">86x</span>
1704
+ <span class="cline-any cline-yes">99x</span>
1705
1705
  <span class="cline-any cline-neutral">&nbsp;</span>
1706
1706
  <span class="cline-any cline-neutral">&nbsp;</span>
1707
1707
  <span class="cline-any cline-neutral">&nbsp;</span>
@@ -1777,7 +1777,7 @@
1777
1777
  <span class="cline-any cline-neutral">&nbsp;</span>
1778
1778
  <span class="cline-any cline-neutral">&nbsp;</span>
1779
1779
  <span class="cline-any cline-neutral">&nbsp;</span>
1780
- <span class="cline-any cline-yes">86x</span>
1780
+ <span class="cline-any cline-yes">99x</span>
1781
1781
  <span class="cline-any cline-neutral">&nbsp;</span>
1782
1782
  <span class="cline-any cline-neutral">&nbsp;</span>
1783
1783
  <span class="cline-any cline-neutral">&nbsp;</span>
@@ -2821,7 +2821,7 @@ export function registerGraphTools(server: McpServer, db: KnowledgeDB): void {
2821
2821
  <div class='footer quiet pad2 space-top1 center small'>
2822
2822
  Code coverage generated by
2823
2823
  <a href="https://istanbul.js.org/" target="_blank" rel="noopener noreferrer">istanbul</a>
2824
- at 2026-05-13T01:40:01.638Z
2824
+ at 2026-05-13T02:34:08.145Z
2825
2825
  </div>
2826
2826
  <script src="../prettify.js"></script>
2827
2827
  <script>