ralph-hero-knowledge-index 0.1.38 → 0.1.39
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/.claude-plugin/plugin.json +1 -1
- package/.mcp.json +1 -1
- package/coverage/coverage-summary.json +3 -3
- package/coverage/lcov-report/chunker.ts.html +1 -1
- package/coverage/lcov-report/config.ts.html +1 -1
- package/coverage/lcov-report/db.ts.html +129 -24
- package/coverage/lcov-report/embedder.ts.html +1 -1
- package/coverage/lcov-report/file-scanner.ts.html +1 -1
- package/coverage/lcov-report/format.ts.html +1 -1
- package/coverage/lcov-report/generate-indexes.ts.html +1 -1
- package/coverage/lcov-report/graph-builder.ts.html +1 -1
- package/coverage/lcov-report/graph-tools.ts.html +1 -1
- package/coverage/lcov-report/hybrid-search.ts.html +1 -1
- package/coverage/lcov-report/ignore.ts.html +1 -1
- package/coverage/lcov-report/index.html +16 -16
- package/coverage/lcov-report/index.ts.html +17 -11
- package/coverage/lcov-report/llm-client.ts.html +1 -1
- package/coverage/lcov-report/parser.ts.html +33 -33
- package/coverage/lcov-report/reindex.ts.html +1 -1
- package/coverage/lcov-report/reranker.ts.html +1 -1
- package/coverage/lcov-report/search.ts.html +2 -2
- package/coverage/lcov-report/traverse.ts.html +1 -1
- package/coverage/lcov-report/vector-search.ts.html +1 -1
- package/coverage/lcov.info +340 -330
- package/dist/db.js +38 -3
- package/dist/db.js.map +1 -1
- package/dist/index.js +7 -5
- package/dist/index.js.map +1 -1
- package/dist/parser.js +5 -5
- package/dist/parser.js.map +1 -1
- package/dist/search.d.ts +1 -1
- package/package.json +1 -1
- package/skills/curate/SKILL.md +275 -0
- package/src/__tests__/db.test.ts +70 -0
- package/src/__tests__/memory-stats.test.ts +9 -9
- package/src/__tests__/parser.test.ts +6 -0
- package/src/db.ts +38 -3
- package/src/index.ts +9 -7
- package/src/parser.ts +5 -5
- package/src/search.ts +1 -1
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "ralph-knowledge",
|
|
3
|
-
"version": "0.1.
|
|
3
|
+
"version": "0.1.39",
|
|
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
|
@@ -1,7 +1,7 @@
|
|
|
1
|
-
{"total": {"lines":{"total":
|
|
1
|
+
{"total": {"lines":{"total":1307,"covered":1218,"skipped":0,"pct":93.19},"statements":{"total":1428,"covered":1317,"skipped":0,"pct":92.22},"functions":{"total":200,"covered":186,"skipped":0,"pct":93},"branches":{"total":842,"covered":698,"skipped":0,"pct":82.89},"branchesTrue":{"total":0,"covered":0,"skipped":0,"pct":"Unknown"}}
|
|
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
|
-
,"/home/runner/work/ralph-hero/ralph-hero/plugin/ralph-knowledge/src/db.ts": {"lines":{"total":
|
|
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}}
|
|
5
5
|
,"/home/runner/work/ralph-hero/ralph-hero/plugin/ralph-knowledge/src/embedder.ts": {"lines":{"total":32,"covered":32,"skipped":0,"pct":100},"functions":{"total":7,"covered":7,"skipped":0,"pct":100},"statements":{"total":35,"covered":35,"skipped":0,"pct":100},"branches":{"total":24,"covered":22,"skipped":0,"pct":91.66}}
|
|
6
6
|
,"/home/runner/work/ralph-hero/ralph-hero/plugin/ralph-knowledge/src/file-scanner.ts": {"lines":{"total":16,"covered":16,"skipped":0,"pct":100},"functions":{"total":2,"covered":2,"skipped":0,"pct":100},"statements":{"total":19,"covered":19,"skipped":0,"pct":100},"branches":{"total":21,"covered":21,"skipped":0,"pct":100}}
|
|
7
7
|
,"/home/runner/work/ralph-hero/ralph-hero/plugin/ralph-knowledge/src/format.ts": {"lines":{"total":6,"covered":6,"skipped":0,"pct":100},"functions":{"total":4,"covered":4,"skipped":0,"pct":100},"statements":{"total":8,"covered":8,"skipped":0,"pct":100},"branches":{"total":6,"covered":6,"skipped":0,"pct":100}}
|
|
@@ -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":
|
|
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}}
|
|
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":153,"covered":120,"skipped":0,"pct":78.43},"functions":{"total":11,"covered":5,"skipped":0,"pct":45.45},"statements":{"total":162,"covered":122,"skipped":0,"pct":75.3},"branches":{"total":73,"covered":46,"skipped":0,"pct":63.01}}
|
|
@@ -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-
|
|
943
|
+
at 2026-05-09T01:59:20.386Z
|
|
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-
|
|
388
|
+
at 2026-05-09T01:59:20.386Z
|
|
389
389
|
</div>
|
|
390
390
|
<script src="prettify.js"></script>
|
|
391
391
|
<script>
|
|
@@ -23,16 +23,16 @@
|
|
|
23
23
|
<div class='clearfix'>
|
|
24
24
|
|
|
25
25
|
<div class='fl pad1y space-right2'>
|
|
26
|
-
<span class="strong">97.
|
|
26
|
+
<span class="strong">97.6% </span>
|
|
27
27
|
<span class="quiet">Statements</span>
|
|
28
|
-
<span class='fraction'>
|
|
28
|
+
<span class='fraction'>122/125</span>
|
|
29
29
|
</div>
|
|
30
30
|
|
|
31
31
|
|
|
32
32
|
<div class='fl pad1y space-right2'>
|
|
33
|
-
<span class="strong">
|
|
33
|
+
<span class="strong">87.17% </span>
|
|
34
34
|
<span class="quiet">Branches</span>
|
|
35
|
-
<span class='fraction'>
|
|
35
|
+
<span class='fraction'>68/78</span>
|
|
36
36
|
</div>
|
|
37
37
|
|
|
38
38
|
|
|
@@ -44,9 +44,9 @@
|
|
|
44
44
|
|
|
45
45
|
|
|
46
46
|
<div class='fl pad1y space-right2'>
|
|
47
|
-
<span class="strong">98.
|
|
47
|
+
<span class="strong">98.31% </span>
|
|
48
48
|
<span class="quiet">Lines</span>
|
|
49
|
-
<span class='fraction'>
|
|
49
|
+
<span class='fraction'>117/119</span>
|
|
50
50
|
</div>
|
|
51
51
|
|
|
52
52
|
|
|
@@ -575,7 +575,42 @@
|
|
|
575
575
|
<a name='L510'></a><a href='#L510'>510</a>
|
|
576
576
|
<a name='L511'></a><a href='#L511'>511</a>
|
|
577
577
|
<a name='L512'></a><a href='#L512'>512</a>
|
|
578
|
-
<a name='L513'></a><a href='#L513'>513</a
|
|
578
|
+
<a name='L513'></a><a href='#L513'>513</a>
|
|
579
|
+
<a name='L514'></a><a href='#L514'>514</a>
|
|
580
|
+
<a name='L515'></a><a href='#L515'>515</a>
|
|
581
|
+
<a name='L516'></a><a href='#L516'>516</a>
|
|
582
|
+
<a name='L517'></a><a href='#L517'>517</a>
|
|
583
|
+
<a name='L518'></a><a href='#L518'>518</a>
|
|
584
|
+
<a name='L519'></a><a href='#L519'>519</a>
|
|
585
|
+
<a name='L520'></a><a href='#L520'>520</a>
|
|
586
|
+
<a name='L521'></a><a href='#L521'>521</a>
|
|
587
|
+
<a name='L522'></a><a href='#L522'>522</a>
|
|
588
|
+
<a name='L523'></a><a href='#L523'>523</a>
|
|
589
|
+
<a name='L524'></a><a href='#L524'>524</a>
|
|
590
|
+
<a name='L525'></a><a href='#L525'>525</a>
|
|
591
|
+
<a name='L526'></a><a href='#L526'>526</a>
|
|
592
|
+
<a name='L527'></a><a href='#L527'>527</a>
|
|
593
|
+
<a name='L528'></a><a href='#L528'>528</a>
|
|
594
|
+
<a name='L529'></a><a href='#L529'>529</a>
|
|
595
|
+
<a name='L530'></a><a href='#L530'>530</a>
|
|
596
|
+
<a name='L531'></a><a href='#L531'>531</a>
|
|
597
|
+
<a name='L532'></a><a href='#L532'>532</a>
|
|
598
|
+
<a name='L533'></a><a href='#L533'>533</a>
|
|
599
|
+
<a name='L534'></a><a href='#L534'>534</a>
|
|
600
|
+
<a name='L535'></a><a href='#L535'>535</a>
|
|
601
|
+
<a name='L536'></a><a href='#L536'>536</a>
|
|
602
|
+
<a name='L537'></a><a href='#L537'>537</a>
|
|
603
|
+
<a name='L538'></a><a href='#L538'>538</a>
|
|
604
|
+
<a name='L539'></a><a href='#L539'>539</a>
|
|
605
|
+
<a name='L540'></a><a href='#L540'>540</a>
|
|
606
|
+
<a name='L541'></a><a href='#L541'>541</a>
|
|
607
|
+
<a name='L542'></a><a href='#L542'>542</a>
|
|
608
|
+
<a name='L543'></a><a href='#L543'>543</a>
|
|
609
|
+
<a name='L544'></a><a href='#L544'>544</a>
|
|
610
|
+
<a name='L545'></a><a href='#L545'>545</a>
|
|
611
|
+
<a name='L546'></a><a href='#L546'>546</a>
|
|
612
|
+
<a name='L547'></a><a href='#L547'>547</a>
|
|
613
|
+
<a name='L548'></a><a href='#L548'>548</a></td><td class="line-coverage quiet"><span class="cline-any cline-neutral"> </span>
|
|
579
614
|
<span class="cline-any cline-neutral"> </span>
|
|
580
615
|
<span class="cline-any cline-neutral"> </span>
|
|
581
616
|
<span class="cline-any cline-neutral"> </span>
|
|
@@ -670,14 +705,14 @@
|
|
|
670
705
|
<span class="cline-any cline-neutral"> </span>
|
|
671
706
|
<span class="cline-any cline-neutral"> </span>
|
|
672
707
|
<span class="cline-any cline-neutral"> </span>
|
|
673
|
-
<span class="cline-any cline-yes">
|
|
674
|
-
<span class="cline-any cline-yes">
|
|
675
|
-
<span class="cline-any cline-yes">
|
|
676
|
-
<span class="cline-any cline-yes">
|
|
708
|
+
<span class="cline-any cline-yes">356x</span>
|
|
709
|
+
<span class="cline-any cline-yes">356x</span>
|
|
710
|
+
<span class="cline-any cline-yes">356x</span>
|
|
711
|
+
<span class="cline-any cline-yes">356x</span>
|
|
677
712
|
<span class="cline-any cline-neutral"> </span>
|
|
678
713
|
<span class="cline-any cline-neutral"> </span>
|
|
679
714
|
<span class="cline-any cline-neutral"> </span>
|
|
680
|
-
<span class="cline-any cline-yes">
|
|
715
|
+
<span class="cline-any cline-yes">356x</span>
|
|
681
716
|
<span class="cline-any cline-neutral"> </span>
|
|
682
717
|
<span class="cline-any cline-neutral"> </span>
|
|
683
718
|
<span class="cline-any cline-neutral"> </span>
|
|
@@ -754,8 +789,8 @@
|
|
|
754
789
|
<span class="cline-any cline-neutral"> </span>
|
|
755
790
|
<span class="cline-any cline-neutral"> </span>
|
|
756
791
|
<span class="cline-any cline-neutral"> </span>
|
|
757
|
-
<span class="cline-any cline-yes">
|
|
758
|
-
<span class="cline-any cline-yes">
|
|
792
|
+
<span class="cline-any cline-yes">356x</span>
|
|
793
|
+
<span class="cline-any cline-yes">356x</span>
|
|
759
794
|
<span class="cline-any cline-neutral"> </span>
|
|
760
795
|
<span class="cline-any cline-neutral"> </span>
|
|
761
796
|
<span class="cline-any cline-neutral"> </span>
|
|
@@ -763,22 +798,57 @@
|
|
|
763
798
|
<span class="cline-any cline-neutral"> </span>
|
|
764
799
|
<span class="cline-any cline-neutral"> </span>
|
|
765
800
|
<span class="cline-any cline-neutral"> </span>
|
|
766
|
-
<span class="cline-any cline-yes">353x</span>
|
|
767
|
-
<span class="cline-any cline-yes">353x</span>
|
|
768
801
|
<span class="cline-any cline-neutral"> </span>
|
|
802
|
+
<span class="cline-any cline-yes">356x</span>
|
|
803
|
+
<span class="cline-any cline-yes">356x</span>
|
|
769
804
|
<span class="cline-any cline-neutral"> </span>
|
|
770
805
|
<span class="cline-any cline-neutral"> </span>
|
|
771
806
|
<span class="cline-any cline-neutral"> </span>
|
|
772
807
|
<span class="cline-any cline-neutral"> </span>
|
|
773
|
-
<span class="cline-any cline-yes">353x</span>
|
|
774
808
|
<span class="cline-any cline-neutral"> </span>
|
|
809
|
+
<span class="cline-any cline-yes">356x</span>
|
|
775
810
|
<span class="cline-any cline-neutral"> </span>
|
|
776
811
|
<span class="cline-any cline-neutral"> </span>
|
|
777
812
|
<span class="cline-any cline-neutral"> </span>
|
|
778
813
|
<span class="cline-any cline-neutral"> </span>
|
|
779
814
|
<span class="cline-any cline-neutral"> </span>
|
|
780
|
-
<span class="cline-any cline-
|
|
781
|
-
<span class="cline-any cline-
|
|
815
|
+
<span class="cline-any cline-neutral"> </span>
|
|
816
|
+
<span class="cline-any cline-neutral"> </span>
|
|
817
|
+
<span class="cline-any cline-neutral"> </span>
|
|
818
|
+
<span class="cline-any cline-yes">356x</span>
|
|
819
|
+
<span class="cline-any cline-yes">356x</span>
|
|
820
|
+
<span class="cline-any cline-neutral"> </span>
|
|
821
|
+
<span class="cline-any cline-neutral"> </span>
|
|
822
|
+
<span class="cline-any cline-yes">356x</span>
|
|
823
|
+
<span class="cline-any cline-yes">1x</span>
|
|
824
|
+
<span class="cline-any cline-neutral"> </span>
|
|
825
|
+
<span class="cline-any cline-neutral"> </span>
|
|
826
|
+
<span class="cline-any cline-neutral"> </span>
|
|
827
|
+
<span class="cline-any cline-neutral"> </span>
|
|
828
|
+
<span class="cline-any cline-neutral"> </span>
|
|
829
|
+
<span class="cline-any cline-neutral"> </span>
|
|
830
|
+
<span class="cline-any cline-neutral"> </span>
|
|
831
|
+
<span class="cline-any cline-neutral"> </span>
|
|
832
|
+
<span class="cline-any cline-neutral"> </span>
|
|
833
|
+
<span class="cline-any cline-neutral"> </span>
|
|
834
|
+
<span class="cline-any cline-neutral"> </span>
|
|
835
|
+
<span class="cline-any cline-neutral"> </span>
|
|
836
|
+
<span class="cline-any cline-neutral"> </span>
|
|
837
|
+
<span class="cline-any cline-neutral"> </span>
|
|
838
|
+
<span class="cline-any cline-neutral"> </span>
|
|
839
|
+
<span class="cline-any cline-neutral"> </span>
|
|
840
|
+
<span class="cline-any cline-neutral"> </span>
|
|
841
|
+
<span class="cline-any cline-neutral"> </span>
|
|
842
|
+
<span class="cline-any cline-neutral"> </span>
|
|
843
|
+
<span class="cline-any cline-neutral"> </span>
|
|
844
|
+
<span class="cline-any cline-neutral"> </span>
|
|
845
|
+
<span class="cline-any cline-neutral"> </span>
|
|
846
|
+
<span class="cline-any cline-neutral"> </span>
|
|
847
|
+
<span class="cline-any cline-neutral"> </span>
|
|
848
|
+
<span class="cline-any cline-neutral"> </span>
|
|
849
|
+
<span class="cline-any cline-neutral"> </span>
|
|
850
|
+
<span class="cline-any cline-yes">356x</span>
|
|
851
|
+
<span class="cline-any cline-yes">356x</span>
|
|
782
852
|
<span class="cline-any cline-neutral"> </span>
|
|
783
853
|
<span class="cline-any cline-yes">2x</span>
|
|
784
854
|
<span class="cline-any cline-neutral"> </span>
|
|
@@ -1084,7 +1154,7 @@
|
|
|
1084
1154
|
<span class="cline-any cline-neutral"> </span>
|
|
1085
1155
|
<span class="cline-any cline-neutral"> </span>
|
|
1086
1156
|
<span class="cline-any cline-neutral"> </span>
|
|
1087
|
-
<span class="cline-any cline-yes">
|
|
1157
|
+
<span class="cline-any cline-yes">91x</span>
|
|
1088
1158
|
<span class="cline-any cline-neutral"> </span>
|
|
1089
1159
|
<span class="cline-any cline-neutral"> </span>
|
|
1090
1160
|
<span class="cline-any cline-neutral"> </span></td><td class="text"><pre class="prettyprint lang-js">import Database from "better-sqlite3";
|
|
@@ -1272,12 +1342,13 @@ export class KnowledgeDB {
|
|
|
1272
1342
|
// Column already exists — expected for new databases
|
|
1273
1343
|
}
|
|
1274
1344
|
|
|
1275
|
-
// Migration: add memory_tier column (schema v3) for databases created before it existed.
|
|
1345
|
+
// Migration: add memory_tier column (schema v3+) for databases created before it existed.
|
|
1276
1346
|
// Uses the same try/catch pattern as is_stub. CHECK constraint restricts values to
|
|
1277
|
-
// 'doc' (existing documents), 'raw' (dream-loop raw memories), 'reflection' (synthesized)
|
|
1347
|
+
// 'doc' (existing documents), 'raw' (dream-loop raw memories), 'reflection' (synthesized),
|
|
1348
|
+
// 'wiki' (curated personal wiki tier — schema v4).
|
|
1278
1349
|
try {
|
|
1279
1350
|
this.db.exec(
|
|
1280
|
-
"ALTER TABLE documents ADD COLUMN memory_tier TEXT NOT NULL DEFAULT 'doc' CHECK(memory_tier IN ('doc','raw','reflection'))"
|
|
1351
|
+
"ALTER TABLE documents ADD COLUMN memory_tier TEXT NOT NULL DEFAULT 'doc' CHECK(memory_tier IN ('doc','raw','reflection','wiki'))"
|
|
1281
1352
|
);
|
|
1282
1353
|
} catch {
|
|
1283
1354
|
// Column already exists — expected for new databases
|
|
@@ -1285,6 +1356,40 @@ export class KnowledgeDB {
|
|
|
1285
1356
|
this.db.exec(
|
|
1286
1357
|
"CREATE INDEX IF NOT EXISTS idx_documents_memory_tier ON documents(memory_tier)"
|
|
1287
1358
|
);
|
|
1359
|
+
|
|
1360
|
+
// Migration v4: expand memory_tier CHECK constraint to allow 'wiki' tier.
|
|
1361
|
+
// SQLite cannot ALTER an existing CHECK constraint; on databases that ran the
|
|
1362
|
+
// earlier v3 migration (CHECK with only 'doc','raw','reflection') the ALTER above
|
|
1363
|
+
// throws "duplicate column" and the old CHECK stays in place. Detect that via
|
|
1364
|
+
// sqlite_master and rebuild the table when 'wiki' is missing from the schema text.
|
|
1365
|
+
try {
|
|
1366
|
+
const tableSchema = this.db
|
|
1367
|
+
.prepare("SELECT sql FROM sqlite_master WHERE type='table' AND name='documents'")
|
|
1368
|
+
.get() as { sql: string } | undefined;
|
|
1369
|
+
if (tableSchema && !tableSchema.sql.includes("'wiki'")) {
|
|
1370
|
+
this.db.exec(`
|
|
1371
|
+
CREATE TABLE documents_v4 (
|
|
1372
|
+
id TEXT PRIMARY KEY,
|
|
1373
|
+
path TEXT,
|
|
1374
|
+
title TEXT,
|
|
1375
|
+
date TEXT,
|
|
1376
|
+
type TEXT,
|
|
1377
|
+
status TEXT,
|
|
1378
|
+
github_issue INTEGER,
|
|
1379
|
+
content TEXT,
|
|
1380
|
+
is_stub INTEGER DEFAULT 0,
|
|
1381
|
+
memory_tier TEXT NOT NULL DEFAULT 'doc' CHECK(memory_tier IN ('doc','raw','reflection','wiki'))
|
|
1382
|
+
);
|
|
1383
|
+
INSERT INTO documents_v4 (id, path, title, date, type, status, github_issue, content, is_stub, memory_tier)
|
|
1384
|
+
SELECT id, path, title, date, type, status, github_issue, content, is_stub, memory_tier FROM documents;
|
|
1385
|
+
DROP TABLE documents;
|
|
1386
|
+
ALTER TABLE documents_v4 RENAME TO documents;
|
|
1387
|
+
CREATE INDEX IF NOT EXISTS idx_documents_memory_tier ON documents(memory_tier);
|
|
1388
|
+
`);
|
|
1389
|
+
}
|
|
1390
|
+
} catch {
|
|
1391
|
+
// Schema introspection failed or table layout already compliant — no-op.
|
|
1392
|
+
}
|
|
1288
1393
|
|
|
1289
1394
|
// Migration: rebuild relationships table for databases created before the
|
|
1290
1395
|
// context column, post_mortem/untyped CHECK types, and target_id FK were added.
|
|
@@ -1606,7 +1711,7 @@ export class KnowledgeDB {
|
|
|
1606
1711
|
<div class='footer quiet pad2 space-top1 center small'>
|
|
1607
1712
|
Code coverage generated by
|
|
1608
1713
|
<a href="https://istanbul.js.org/" target="_blank" rel="noopener noreferrer">istanbul</a>
|
|
1609
|
-
at 2026-05-
|
|
1714
|
+
at 2026-05-09T01:59:20.386Z
|
|
1610
1715
|
</div>
|
|
1611
1716
|
<script src="prettify.js"></script>
|
|
1612
1717
|
<script>
|
|
@@ -547,7 +547,7 @@ export function prepareTextForEmbedding(
|
|
|
547
547
|
<div class='footer quiet pad2 space-top1 center small'>
|
|
548
548
|
Code coverage generated by
|
|
549
549
|
<a href="https://istanbul.js.org/" target="_blank" rel="noopener noreferrer">istanbul</a>
|
|
550
|
-
at 2026-05-
|
|
550
|
+
at 2026-05-09T01:59:20.386Z
|
|
551
551
|
</div>
|
|
552
552
|
<script src="prettify.js"></script>
|
|
553
553
|
<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-
|
|
202
|
+
at 2026-05-09T01:59:20.386Z
|
|
203
203
|
</div>
|
|
204
204
|
<script src="prettify.js"></script>
|
|
205
205
|
<script>
|
|
@@ -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-
|
|
298
|
+
at 2026-05-09T01:59:20.386Z
|
|
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-
|
|
949
|
+
at 2026-05-09T01:59:20.386Z
|
|
950
950
|
</div>
|
|
951
951
|
<script src="prettify.js"></script>
|
|
952
952
|
<script>
|
|
@@ -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-
|
|
295
|
+
at 2026-05-09T01:59:20.386Z
|
|
296
296
|
</div>
|
|
297
297
|
<script src="prettify.js"></script>
|
|
298
298
|
<script>
|
|
@@ -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-
|
|
2824
|
+
at 2026-05-09T01:59:20.386Z
|
|
2825
2825
|
</div>
|
|
2826
2826
|
<script src="prettify.js"></script>
|
|
2827
2827
|
<script>
|
|
@@ -1606,7 +1606,7 @@ export class HybridSearch {
|
|
|
1606
1606
|
<div class='footer quiet pad2 space-top1 center small'>
|
|
1607
1607
|
Code coverage generated by
|
|
1608
1608
|
<a href="https://istanbul.js.org/" target="_blank" rel="noopener noreferrer">istanbul</a>
|
|
1609
|
-
at 2026-05-
|
|
1609
|
+
at 2026-05-09T01:59:20.386Z
|
|
1610
1610
|
</div>
|
|
1611
1611
|
<script src="prettify.js"></script>
|
|
1612
1612
|
<script>
|
|
@@ -316,7 +316,7 @@ export function loadIgnoreForRoot(
|
|
|
316
316
|
<div class='footer quiet pad2 space-top1 center small'>
|
|
317
317
|
Code coverage generated by
|
|
318
318
|
<a href="https://istanbul.js.org/" target="_blank" rel="noopener noreferrer">istanbul</a>
|
|
319
|
-
at 2026-05-
|
|
319
|
+
at 2026-05-09T01:59:20.386Z
|
|
320
320
|
</div>
|
|
321
321
|
<script src="prettify.js"></script>
|
|
322
322
|
<script>
|
|
@@ -23,16 +23,16 @@
|
|
|
23
23
|
<div class='clearfix'>
|
|
24
24
|
|
|
25
25
|
<div class='fl pad1y space-right2'>
|
|
26
|
-
<span class="strong">92.
|
|
26
|
+
<span class="strong">92.22% </span>
|
|
27
27
|
<span class="quiet">Statements</span>
|
|
28
|
-
<span class='fraction'>
|
|
28
|
+
<span class='fraction'>1317/1428</span>
|
|
29
29
|
</div>
|
|
30
30
|
|
|
31
31
|
|
|
32
32
|
<div class='fl pad1y space-right2'>
|
|
33
|
-
<span class="strong">
|
|
33
|
+
<span class="strong">82.89% </span>
|
|
34
34
|
<span class="quiet">Branches</span>
|
|
35
|
-
<span class='fraction'>
|
|
35
|
+
<span class='fraction'>698/842</span>
|
|
36
36
|
</div>
|
|
37
37
|
|
|
38
38
|
|
|
@@ -44,9 +44,9 @@
|
|
|
44
44
|
|
|
45
45
|
|
|
46
46
|
<div class='fl pad1y space-right2'>
|
|
47
|
-
<span class="strong">93.
|
|
47
|
+
<span class="strong">93.19% </span>
|
|
48
48
|
<span class="quiet">Lines</span>
|
|
49
|
-
<span class='fraction'>
|
|
49
|
+
<span class='fraction'>1218/1307</span>
|
|
50
50
|
</div>
|
|
51
51
|
|
|
52
52
|
|
|
@@ -110,17 +110,17 @@
|
|
|
110
110
|
|
|
111
111
|
<tr>
|
|
112
112
|
<td class="file high" data-value="db.ts"><a href="db.ts.html">db.ts</a></td>
|
|
113
|
-
<td data-value="97.
|
|
113
|
+
<td data-value="97.6" class="pic high">
|
|
114
114
|
<div class="chart"><div class="cover-fill" style="width: 97%"></div><div class="cover-empty" style="width: 3%"></div></div>
|
|
115
115
|
</td>
|
|
116
|
-
<td data-value="97.
|
|
117
|
-
<td data-value="
|
|
118
|
-
<td data-value="
|
|
119
|
-
<td data-value="
|
|
116
|
+
<td data-value="97.6" class="pct high">97.6%</td>
|
|
117
|
+
<td data-value="125" class="abs high">122/125</td>
|
|
118
|
+
<td data-value="87.17" class="pct high">87.17%</td>
|
|
119
|
+
<td data-value="78" class="abs high">68/78</td>
|
|
120
120
|
<td data-value="100" class="pct high">100%</td>
|
|
121
121
|
<td data-value="31" class="abs high">31/31</td>
|
|
122
|
-
<td data-value="98.
|
|
123
|
-
<td data-value="
|
|
122
|
+
<td data-value="98.31" class="pct high">98.31%</td>
|
|
123
|
+
<td data-value="119" class="abs high">117/119</td>
|
|
124
124
|
</tr>
|
|
125
125
|
|
|
126
126
|
<tr>
|
|
@@ -250,8 +250,8 @@
|
|
|
250
250
|
</td>
|
|
251
251
|
<td data-value="82.03" class="pct high">82.03%</td>
|
|
252
252
|
<td data-value="128" class="abs high">105/128</td>
|
|
253
|
-
<td data-value="
|
|
254
|
-
<td data-value="
|
|
253
|
+
<td data-value="68.67" class="pct medium">68.67%</td>
|
|
254
|
+
<td data-value="83" class="abs medium">57/83</td>
|
|
255
255
|
<td data-value="81.25" class="pct high">81.25%</td>
|
|
256
256
|
<td data-value="16" class="abs high">13/16</td>
|
|
257
257
|
<td data-value="81.25" class="pct high">81.25%</td>
|
|
@@ -371,7 +371,7 @@
|
|
|
371
371
|
<div class='footer quiet pad2 space-top1 center small'>
|
|
372
372
|
Code coverage generated by
|
|
373
373
|
<a href="https://istanbul.js.org/" target="_blank" rel="noopener noreferrer">istanbul</a>
|
|
374
|
-
at 2026-05-
|
|
374
|
+
at 2026-05-09T01:59:20.386Z
|
|
375
375
|
</div>
|
|
376
376
|
<script src="prettify.js"></script>
|
|
377
377
|
<script>
|
|
@@ -30,9 +30,9 @@
|
|
|
30
30
|
|
|
31
31
|
|
|
32
32
|
<div class='fl pad1y space-right2'>
|
|
33
|
-
<span class="strong">
|
|
33
|
+
<span class="strong">68.67% </span>
|
|
34
34
|
<span class="quiet">Branches</span>
|
|
35
|
-
<span class='fraction'>57/
|
|
35
|
+
<span class='fraction'>57/83</span>
|
|
36
36
|
</div>
|
|
37
37
|
|
|
38
38
|
|
|
@@ -496,7 +496,9 @@
|
|
|
496
496
|
<a name='L431'></a><a href='#L431'>431</a>
|
|
497
497
|
<a name='L432'></a><a href='#L432'>432</a>
|
|
498
498
|
<a name='L433'></a><a href='#L433'>433</a>
|
|
499
|
-
<a name='L434'></a><a href='#L434'>434</a
|
|
499
|
+
<a name='L434'></a><a href='#L434'>434</a>
|
|
500
|
+
<a name='L435'></a><a href='#L435'>435</a>
|
|
501
|
+
<a name='L436'></a><a href='#L436'>436</a></td><td class="line-coverage quiet"><span class="cline-any cline-neutral"> </span>
|
|
500
502
|
<span class="cline-any cline-neutral"> </span>
|
|
501
503
|
<span class="cline-any cline-neutral"> </span>
|
|
502
504
|
<span class="cline-any cline-neutral"> </span>
|
|
@@ -756,12 +758,14 @@
|
|
|
756
758
|
<span class="cline-any cline-neutral"> </span>
|
|
757
759
|
<span class="cline-any cline-neutral"> </span>
|
|
758
760
|
<span class="cline-any cline-neutral"> </span>
|
|
761
|
+
<span class="cline-any cline-neutral"> </span>
|
|
759
762
|
<span class="cline-any cline-yes">11x</span>
|
|
760
763
|
<span class="cline-any cline-neutral"> </span>
|
|
761
764
|
<span class="cline-any cline-neutral"> </span>
|
|
762
765
|
<span class="cline-any cline-neutral"> </span>
|
|
763
766
|
<span class="cline-any cline-neutral"> </span>
|
|
764
767
|
<span class="cline-any cline-neutral"> </span>
|
|
768
|
+
<span class="cline-any cline-neutral"> </span>
|
|
765
769
|
<span class="cline-any cline-yes">11x</span>
|
|
766
770
|
<span class="cline-any cline-yes">11x</span>
|
|
767
771
|
<span class="cline-any cline-neutral"> </span>
|
|
@@ -1034,10 +1038,10 @@ export function createServer(dbPath: string, opts: CreateServerOptions = {}) {
|
|
|
1034
1038
|
includeSuperseded: z.boolean().optional().describe("Include superseded documents (default: false)"),
|
|
1035
1039
|
brief: z.boolean().optional().describe("Return minimal metadata only (default: false)"),
|
|
1036
1040
|
memory_tier: z
|
|
1037
|
-
.enum(["doc", "raw", "reflection", "any"])
|
|
1041
|
+
.enum(["doc", "raw", "reflection", "wiki", "any"])
|
|
1038
1042
|
.optional()
|
|
1039
1043
|
.default("any")
|
|
1040
|
-
.describe("Filter by memory tier: 'doc' (curated), 'raw' (dream-loop ingest), 'reflection' (synthesized), 'any' (default)"),
|
|
1044
|
+
.describe("Filter by memory tier: 'doc' (curated), 'raw' (dream-loop ingest), 'reflection' (synthesized), 'wiki' (personal wiki entries), 'any' (default)"),
|
|
1041
1045
|
return_chunk_meta: z
|
|
1042
1046
|
.boolean()
|
|
1043
1047
|
.optional()
|
|
@@ -1137,7 +1141,7 @@ export function createServer(dbPath: string, opts: CreateServerOptions = {}) {
|
|
|
1137
1141
|
direction: z.enum(["outgoing", "incoming"]).optional().describe("Edge direction (default: outgoing)"),
|
|
1138
1142
|
brief: z.boolean().optional().describe("Return minimal metadata only (default: false)"),
|
|
1139
1143
|
memory_tier: z
|
|
1140
|
-
.enum(["doc", "raw", "reflection", "any"])
|
|
1144
|
+
.enum(["doc", "raw", "reflection", "wiki", "any"])
|
|
1141
1145
|
.optional()
|
|
1142
1146
|
.default("any")
|
|
1143
1147
|
.describe("Filter traversed nodes by memory tier (default: 'any')"),
|
|
@@ -1184,15 +1188,17 @@ export function createServer(dbPath: string, opts: CreateServerOptions = {}) {
|
|
|
1184
1188
|
.get() as { c: number };
|
|
1185
1189
|
const totalDocuments = totalRow.c;
|
|
1186
1190
|
|
|
1187
|
-
const byTier: Record<"doc" | "raw" | "reflection", number> = {
|
|
1191
|
+
const byTier: Record<"doc" | "raw" | "reflection" | "wiki", number> = {
|
|
1188
1192
|
doc: 0,
|
|
1189
1193
|
raw: 0,
|
|
1190
1194
|
reflection: 0,
|
|
1195
|
+
wiki: 0,
|
|
1191
1196
|
};
|
|
1192
|
-
const newSince: Record<"doc" | "raw" | "reflection", number> = {
|
|
1197
|
+
const newSince: Record<"doc" | "raw" | "reflection" | "wiki", number> = {
|
|
1193
1198
|
doc: 0,
|
|
1194
1199
|
raw: 0,
|
|
1195
1200
|
reflection: 0,
|
|
1201
|
+
wiki: 0,
|
|
1196
1202
|
};
|
|
1197
1203
|
|
|
1198
1204
|
if (hasTier) {
|
|
@@ -1205,7 +1211,7 @@ export function createServer(dbPath: string, opts: CreateServerOptions = {}) {
|
|
|
1205
1211
|
)
|
|
1206
1212
|
.all() as Array<{ tier: string; c: number }>;
|
|
1207
1213
|
for (const r of rows) {
|
|
1208
|
-
<span class="missing-if-branch" title="else path not taken" >E</span>if (r.tier === "doc" || r.tier === "raw" || r.tier === "reflection") {
|
|
1214
|
+
<span class="missing-if-branch" title="else path not taken" >E</span>if (r.tier === "doc" || r.tier === "raw" || r.tier === "reflection" || <span class="branch-3 cbranch-no" title="branch not covered" >r.tier === "wiki") {</span>
|
|
1209
1215
|
byTier[r.tier] = r.c;
|
|
1210
1216
|
}
|
|
1211
1217
|
}
|
|
@@ -1218,7 +1224,7 @@ export function createServer(dbPath: string, opts: CreateServerOptions = {}) {
|
|
|
1218
1224
|
)
|
|
1219
1225
|
.all({ since }) as Array<{ tier: string; c: number }>;
|
|
1220
1226
|
for (const r of newRows) {
|
|
1221
|
-
<span class="missing-if-branch" title="else path not taken" >E</span>if (r.tier === "doc" || r.tier === "raw" || r.tier === "reflection") {
|
|
1227
|
+
<span class="missing-if-branch" title="else path not taken" >E</span>if (r.tier === "doc" || r.tier === "raw" || r.tier === "reflection" || <span class="branch-3 cbranch-no" title="branch not covered" >r.tier === "wiki") {</span>
|
|
1222
1228
|
newSince[r.tier] = r.c;
|
|
1223
1229
|
}
|
|
1224
1230
|
}
|
|
@@ -1369,7 +1375,7 @@ server.connect(transport).catch(console.error);
|
|
|
1369
1375
|
<div class='footer quiet pad2 space-top1 center small'>
|
|
1370
1376
|
Code coverage generated by
|
|
1371
1377
|
<a href="https://istanbul.js.org/" target="_blank" rel="noopener noreferrer">istanbul</a>
|
|
1372
|
-
at 2026-05-
|
|
1378
|
+
at 2026-05-09T01:59:20.386Z
|
|
1373
1379
|
</div>
|
|
1374
1380
|
<script src="prettify.js"></script>
|
|
1375
1381
|
<script>
|
|
@@ -478,7 +478,7 @@ export function createLlmClient(opts: LlmClientOptions = {}): LlmClient {
|
|
|
478
478
|
<div class='footer quiet pad2 space-top1 center small'>
|
|
479
479
|
Code coverage generated by
|
|
480
480
|
<a href="https://istanbul.js.org/" target="_blank" rel="noopener noreferrer">istanbul</a>
|
|
481
|
-
at 2026-05-
|
|
481
|
+
at 2026-05-09T01:59:20.386Z
|
|
482
482
|
</div>
|
|
483
483
|
<script src="prettify.js"></script>
|
|
484
484
|
<script>
|