superacli 1.1.13 → 1.1.14
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/.agents/skills/humanenv-usage/SKILL.md +19 -0
- package/AGENTS.md +62 -0
- package/CONTRIBUTING.md +6 -2
- package/cli/plugin-install-guidance.js +25 -11
- package/cli/plugins-registry.js +25 -6
- package/cli/skills-catalog.js +85 -10
- package/coverage/clover.xml +1073 -965
- package/coverage/lcov-report/cli/adapter-schema.js.html +32 -32
- package/coverage/lcov-report/cli/adapters/builtin.js.html +1 -1
- package/coverage/lcov-report/cli/adapters/http.js.html +1 -1
- package/coverage/lcov-report/cli/adapters/index.html +1 -1
- package/coverage/lcov-report/cli/adapters/mcp.js.html +1 -1
- package/coverage/lcov-report/cli/adapters/openapi.js.html +1 -1
- package/coverage/lcov-report/cli/adapters/process.js.html +1 -1
- package/coverage/lcov-report/cli/adapters/shell.js.html +1 -1
- package/coverage/lcov-report/cli/ask.js.html +1 -1
- package/coverage/lcov-report/cli/config.js.html +109 -109
- package/coverage/lcov-report/cli/discover.js.html +1 -1
- package/coverage/lcov-report/cli/executor.js.html +1 -1
- package/coverage/lcov-report/cli/help-json.js.html +1 -1
- package/coverage/lcov-report/cli/index.html +92 -92
- package/coverage/lcov-report/cli/mcp-diagnostics.js.html +1 -1
- package/coverage/lcov-report/cli/mcp-discovery.js.html +1 -1
- package/coverage/lcov-report/cli/mcp-local.js.html +1 -1
- package/coverage/lcov-report/cli/mcp-stdio-jsonrpc.js.html +1 -1
- package/coverage/lcov-report/cli/namespace-passthrough.js.html +1 -1
- package/coverage/lcov-report/cli/plan-runtime.js.html +1 -1
- package/coverage/lcov-report/cli/planner.js.html +1 -1
- package/coverage/lcov-report/cli/plugin-install-guidance.js.html +919 -877
- package/coverage/lcov-report/cli/plugins-command.js.html +452 -452
- package/coverage/lcov-report/cli/plugins-learn.js.html +60 -60
- package/coverage/lcov-report/cli/plugins-manager.js.html +133 -133
- package/coverage/lcov-report/cli/plugins-registry.js.html +105 -48
- package/coverage/lcov-report/cli/plugins-store.js.html +106 -106
- package/coverage/lcov-report/cli/skills-catalog.js.html +366 -141
- package/coverage/lcov-report/cli/skills-mcp.js.html +1 -1
- package/coverage/lcov-report/cli/skills.js.html +1 -1
- package/coverage/lcov-report/index.html +19 -19
- package/coverage/lcov-report/server/app.js.html +1 -1
- package/coverage/lcov-report/server/index.html +1 -1
- package/coverage/lcov-report/server/routes/ask.js.html +1 -1
- package/coverage/lcov-report/server/routes/commands.js.html +1 -1
- package/coverage/lcov-report/server/routes/config.js.html +1 -1
- package/coverage/lcov-report/server/routes/index.html +1 -1
- package/coverage/lcov-report/server/routes/jobs.js.html +1 -1
- package/coverage/lcov-report/server/routes/mcp.js.html +1 -1
- package/coverage/lcov-report/server/routes/plans.js.html +1 -1
- package/coverage/lcov-report/server/routes/plugins.js.html +1 -1
- package/coverage/lcov-report/server/routes/specs.js.html +1 -1
- package/coverage/lcov-report/server/services/configService.js.html +1 -1
- package/coverage/lcov-report/server/services/index.html +1 -1
- package/coverage/lcov-report/server/services/pluginsService.js.html +1 -1
- package/coverage/lcov-report/server/storage/adapter.js.html +1 -1
- package/coverage/lcov-report/server/storage/file.js.html +1 -1
- package/coverage/lcov-report/server/storage/index.html +1 -1
- package/coverage/lcov-report/server/storage/mongo.js.html +1 -1
- package/coverage/lcov.info +1423 -1120
- package/package.json +1 -1
- package/plugins/beads/install-guidance.json +10 -0
- package/plugins/beads/meta.json +5 -0
- package/plugins/codedb/meta.json +5 -0
- package/plugins/codedb/plugin.json +169 -0
- package/plugins/codedb/skills/quickstart/SKILL.md +65 -0
- package/plugins/humanenv/.agents/skills/humanenv-sdk-python-usage/SKILL.md +37 -0
- package/plugins/humanenv/.agents/skills/humanenv-usage/SKILL.md +32 -0
- package/plugins/humanenv/plugin.json +65 -0
- package/plugins/humanenv/skills/quickstart/SKILL.md +95 -0
- package/plugins/mmx/install-guidance.json +10 -0
- package/plugins/mmx/meta.json +5 -0
- package/plugins/mmx/plugin.json +413 -0
- package/plugins/mmx/skills/quickstart/SKILL.md +234 -0
- package/plugins/plugins.json +21 -9
- package/plugins/rtk/README.md +63 -0
- package/plugins/rtk/plugin.json +79 -0
- package/plugins/rtk/skills/quickstart/SKILL.md +78 -0
|
@@ -23,30 +23,30 @@
|
|
|
23
23
|
<div class='clearfix'>
|
|
24
24
|
|
|
25
25
|
<div class='fl pad1y space-right2'>
|
|
26
|
-
<span class="strong">
|
|
26
|
+
<span class="strong">9.35% </span>
|
|
27
27
|
<span class="quiet">Statements</span>
|
|
28
|
-
<span class='fraction'>
|
|
28
|
+
<span class='fraction'>52/556</span>
|
|
29
29
|
</div>
|
|
30
30
|
|
|
31
31
|
|
|
32
32
|
<div class='fl pad1y space-right2'>
|
|
33
|
-
<span class="strong">
|
|
33
|
+
<span class="strong">100% </span>
|
|
34
34
|
<span class="quiet">Branches</span>
|
|
35
|
-
<span class='fraction'>0/
|
|
35
|
+
<span class='fraction'>0/0</span>
|
|
36
36
|
</div>
|
|
37
37
|
|
|
38
38
|
|
|
39
39
|
<div class='fl pad1y space-right2'>
|
|
40
40
|
<span class="strong">0% </span>
|
|
41
41
|
<span class="quiet">Functions</span>
|
|
42
|
-
<span class='fraction'>0/
|
|
42
|
+
<span class='fraction'>0/21</span>
|
|
43
43
|
</div>
|
|
44
44
|
|
|
45
45
|
|
|
46
46
|
<div class='fl pad1y space-right2'>
|
|
47
|
-
<span class="strong">
|
|
47
|
+
<span class="strong">9.35% </span>
|
|
48
48
|
<span class="quiet">Lines</span>
|
|
49
|
-
<span class='fraction'>
|
|
49
|
+
<span class='fraction'>52/556</span>
|
|
50
50
|
</div>
|
|
51
51
|
|
|
52
52
|
|
|
@@ -619,44 +619,28 @@
|
|
|
619
619
|
<a name='L554'></a><a href='#L554'>554</a>
|
|
620
620
|
<a name='L555'></a><a href='#L555'>555</a>
|
|
621
621
|
<a name='L556'></a><a href='#L556'>556</a>
|
|
622
|
-
<a name='L557'></a><a href='#L557'>557</a></td><td class="line-coverage quiet"><span class="cline-any cline-
|
|
623
|
-
<span class="cline-any cline-
|
|
624
|
-
<span class="cline-any cline-
|
|
625
|
-
<span class="cline-any cline-
|
|
626
|
-
<span class="cline-any cline-
|
|
627
|
-
<span class="cline-any cline-
|
|
628
|
-
<span class="cline-any cline-
|
|
629
|
-
<span class="cline-any cline-
|
|
630
|
-
<span class="cline-any cline-
|
|
631
|
-
<span class="cline-any cline-
|
|
632
|
-
<span class="cline-any cline-
|
|
633
|
-
<span class="cline-any cline-
|
|
634
|
-
<span class="cline-any cline-
|
|
635
|
-
<span class="cline-any cline-
|
|
636
|
-
<span class="cline-any cline-
|
|
637
|
-
<span class="cline-any cline-
|
|
638
|
-
<span class="cline-any cline-
|
|
639
|
-
<span class="cline-any cline-
|
|
640
|
-
<span class="cline-any cline-
|
|
641
|
-
<span class="cline-any cline-
|
|
642
|
-
<span class="cline-any cline-
|
|
643
|
-
<span class="cline-any cline-
|
|
644
|
-
<span class="cline-any cline-no"> </span>
|
|
645
|
-
<span class="cline-any cline-no"> </span>
|
|
646
|
-
<span class="cline-any cline-no"> </span>
|
|
647
|
-
<span class="cline-any cline-no"> </span>
|
|
648
|
-
<span class="cline-any cline-no"> </span>
|
|
649
|
-
<span class="cline-any cline-no"> </span>
|
|
650
|
-
<span class="cline-any cline-no"> </span>
|
|
651
|
-
<span class="cline-any cline-no"> </span>
|
|
652
|
-
<span class="cline-any cline-no"> </span>
|
|
653
|
-
<span class="cline-any cline-no"> </span>
|
|
654
|
-
<span class="cline-any cline-no"> </span>
|
|
655
|
-
<span class="cline-any cline-no"> </span>
|
|
656
|
-
<span class="cline-any cline-no"> </span>
|
|
657
|
-
<span class="cline-any cline-no"> </span>
|
|
658
|
-
<span class="cline-any cline-no"> </span>
|
|
659
|
-
<span class="cline-any cline-no"> </span>
|
|
622
|
+
<a name='L557'></a><a href='#L557'>557</a></td><td class="line-coverage quiet"><span class="cline-any cline-yes">1x</span>
|
|
623
|
+
<span class="cline-any cline-yes">1x</span>
|
|
624
|
+
<span class="cline-any cline-yes">1x</span>
|
|
625
|
+
<span class="cline-any cline-yes">1x</span>
|
|
626
|
+
<span class="cline-any cline-yes">1x</span>
|
|
627
|
+
<span class="cline-any cline-yes">1x</span>
|
|
628
|
+
<span class="cline-any cline-yes">1x</span>
|
|
629
|
+
<span class="cline-any cline-yes">1x</span>
|
|
630
|
+
<span class="cline-any cline-yes">1x</span>
|
|
631
|
+
<span class="cline-any cline-yes">1x</span>
|
|
632
|
+
<span class="cline-any cline-yes">1x</span>
|
|
633
|
+
<span class="cline-any cline-yes">1x</span>
|
|
634
|
+
<span class="cline-any cline-yes">1x</span>
|
|
635
|
+
<span class="cline-any cline-yes">1x</span>
|
|
636
|
+
<span class="cline-any cline-yes">1x</span>
|
|
637
|
+
<span class="cline-any cline-yes">1x</span>
|
|
638
|
+
<span class="cline-any cline-yes">1x</span>
|
|
639
|
+
<span class="cline-any cline-yes">1x</span>
|
|
640
|
+
<span class="cline-any cline-yes">1x</span>
|
|
641
|
+
<span class="cline-any cline-yes">1x</span>
|
|
642
|
+
<span class="cline-any cline-yes">1x</span>
|
|
643
|
+
<span class="cline-any cline-yes">1x</span>
|
|
660
644
|
<span class="cline-any cline-no"> </span>
|
|
661
645
|
<span class="cline-any cline-no"> </span>
|
|
662
646
|
<span class="cline-any cline-no"> </span>
|
|
@@ -691,9 +675,11 @@
|
|
|
691
675
|
<span class="cline-any cline-no"> </span>
|
|
692
676
|
<span class="cline-any cline-no"> </span>
|
|
693
677
|
<span class="cline-any cline-no"> </span>
|
|
678
|
+
<span class="cline-any cline-yes">1x</span>
|
|
694
679
|
<span class="cline-any cline-no"> </span>
|
|
695
680
|
<span class="cline-any cline-no"> </span>
|
|
696
681
|
<span class="cline-any cline-no"> </span>
|
|
682
|
+
<span class="cline-any cline-yes">1x</span>
|
|
697
683
|
<span class="cline-any cline-no"> </span>
|
|
698
684
|
<span class="cline-any cline-no"> </span>
|
|
699
685
|
<span class="cline-any cline-no"> </span>
|
|
@@ -701,6 +687,7 @@
|
|
|
701
687
|
<span class="cline-any cline-no"> </span>
|
|
702
688
|
<span class="cline-any cline-no"> </span>
|
|
703
689
|
<span class="cline-any cline-no"> </span>
|
|
690
|
+
<span class="cline-any cline-yes">1x</span>
|
|
704
691
|
<span class="cline-any cline-no"> </span>
|
|
705
692
|
<span class="cline-any cline-no"> </span>
|
|
706
693
|
<span class="cline-any cline-no"> </span>
|
|
@@ -721,6 +708,7 @@
|
|
|
721
708
|
<span class="cline-any cline-no"> </span>
|
|
722
709
|
<span class="cline-any cline-no"> </span>
|
|
723
710
|
<span class="cline-any cline-no"> </span>
|
|
711
|
+
<span class="cline-any cline-yes">1x</span>
|
|
724
712
|
<span class="cline-any cline-no"> </span>
|
|
725
713
|
<span class="cline-any cline-no"> </span>
|
|
726
714
|
<span class="cline-any cline-no"> </span>
|
|
@@ -734,9 +722,11 @@
|
|
|
734
722
|
<span class="cline-any cline-no"> </span>
|
|
735
723
|
<span class="cline-any cline-no"> </span>
|
|
736
724
|
<span class="cline-any cline-no"> </span>
|
|
725
|
+
<span class="cline-any cline-yes">1x</span>
|
|
737
726
|
<span class="cline-any cline-no"> </span>
|
|
738
727
|
<span class="cline-any cline-no"> </span>
|
|
739
728
|
<span class="cline-any cline-no"> </span>
|
|
729
|
+
<span class="cline-any cline-yes">1x</span>
|
|
740
730
|
<span class="cline-any cline-no"> </span>
|
|
741
731
|
<span class="cline-any cline-no"> </span>
|
|
742
732
|
<span class="cline-any cline-no"> </span>
|
|
@@ -793,6 +783,7 @@
|
|
|
793
783
|
<span class="cline-any cline-no"> </span>
|
|
794
784
|
<span class="cline-any cline-no"> </span>
|
|
795
785
|
<span class="cline-any cline-no"> </span>
|
|
786
|
+
<span class="cline-any cline-yes">1x</span>
|
|
796
787
|
<span class="cline-any cline-no"> </span>
|
|
797
788
|
<span class="cline-any cline-no"> </span>
|
|
798
789
|
<span class="cline-any cline-no"> </span>
|
|
@@ -814,6 +805,7 @@
|
|
|
814
805
|
<span class="cline-any cline-no"> </span>
|
|
815
806
|
<span class="cline-any cline-no"> </span>
|
|
816
807
|
<span class="cline-any cline-no"> </span>
|
|
808
|
+
<span class="cline-any cline-yes">1x</span>
|
|
817
809
|
<span class="cline-any cline-no"> </span>
|
|
818
810
|
<span class="cline-any cline-no"> </span>
|
|
819
811
|
<span class="cline-any cline-no"> </span>
|
|
@@ -871,6 +863,7 @@
|
|
|
871
863
|
<span class="cline-any cline-no"> </span>
|
|
872
864
|
<span class="cline-any cline-no"> </span>
|
|
873
865
|
<span class="cline-any cline-no"> </span>
|
|
866
|
+
<span class="cline-any cline-yes">1x</span>
|
|
874
867
|
<span class="cline-any cline-no"> </span>
|
|
875
868
|
<span class="cline-any cline-no"> </span>
|
|
876
869
|
<span class="cline-any cline-no"> </span>
|
|
@@ -880,6 +873,7 @@
|
|
|
880
873
|
<span class="cline-any cline-no"> </span>
|
|
881
874
|
<span class="cline-any cline-no"> </span>
|
|
882
875
|
<span class="cline-any cline-no"> </span>
|
|
876
|
+
<span class="cline-any cline-yes">1x</span>
|
|
883
877
|
<span class="cline-any cline-no"> </span>
|
|
884
878
|
<span class="cline-any cline-no"> </span>
|
|
885
879
|
<span class="cline-any cline-no"> </span>
|
|
@@ -899,6 +893,7 @@
|
|
|
899
893
|
<span class="cline-any cline-no"> </span>
|
|
900
894
|
<span class="cline-any cline-no"> </span>
|
|
901
895
|
<span class="cline-any cline-no"> </span>
|
|
896
|
+
<span class="cline-any cline-yes">1x</span>
|
|
902
897
|
<span class="cline-any cline-no"> </span>
|
|
903
898
|
<span class="cline-any cline-no"> </span>
|
|
904
899
|
<span class="cline-any cline-no"> </span>
|
|
@@ -928,6 +923,7 @@
|
|
|
928
923
|
<span class="cline-any cline-no"> </span>
|
|
929
924
|
<span class="cline-any cline-no"> </span>
|
|
930
925
|
<span class="cline-any cline-no"> </span>
|
|
926
|
+
<span class="cline-any cline-yes">1x</span>
|
|
931
927
|
<span class="cline-any cline-no"> </span>
|
|
932
928
|
<span class="cline-any cline-no"> </span>
|
|
933
929
|
<span class="cline-any cline-no"> </span>
|
|
@@ -935,6 +931,7 @@
|
|
|
935
931
|
<span class="cline-any cline-no"> </span>
|
|
936
932
|
<span class="cline-any cline-no"> </span>
|
|
937
933
|
<span class="cline-any cline-no"> </span>
|
|
934
|
+
<span class="cline-any cline-yes">1x</span>
|
|
938
935
|
<span class="cline-any cline-no"> </span>
|
|
939
936
|
<span class="cline-any cline-no"> </span>
|
|
940
937
|
<span class="cline-any cline-no"> </span>
|
|
@@ -948,6 +945,7 @@
|
|
|
948
945
|
<span class="cline-any cline-no"> </span>
|
|
949
946
|
<span class="cline-any cline-no"> </span>
|
|
950
947
|
<span class="cline-any cline-no"> </span>
|
|
948
|
+
<span class="cline-any cline-yes">1x</span>
|
|
951
949
|
<span class="cline-any cline-no"> </span>
|
|
952
950
|
<span class="cline-any cline-no"> </span>
|
|
953
951
|
<span class="cline-any cline-no"> </span>
|
|
@@ -979,6 +977,7 @@
|
|
|
979
977
|
<span class="cline-any cline-no"> </span>
|
|
980
978
|
<span class="cline-any cline-no"> </span>
|
|
981
979
|
<span class="cline-any cline-no"> </span>
|
|
980
|
+
<span class="cline-any cline-yes">1x</span>
|
|
982
981
|
<span class="cline-any cline-no"> </span>
|
|
983
982
|
<span class="cline-any cline-no"> </span>
|
|
984
983
|
<span class="cline-any cline-no"> </span>
|
|
@@ -1001,6 +1000,7 @@
|
|
|
1001
1000
|
<span class="cline-any cline-no"> </span>
|
|
1002
1001
|
<span class="cline-any cline-no"> </span>
|
|
1003
1002
|
<span class="cline-any cline-no"> </span>
|
|
1003
|
+
<span class="cline-any cline-yes">1x</span>
|
|
1004
1004
|
<span class="cline-any cline-no"> </span>
|
|
1005
1005
|
<span class="cline-any cline-no"> </span>
|
|
1006
1006
|
<span class="cline-any cline-no"> </span>
|
|
@@ -1047,6 +1047,7 @@
|
|
|
1047
1047
|
<span class="cline-any cline-no"> </span>
|
|
1048
1048
|
<span class="cline-any cline-no"> </span>
|
|
1049
1049
|
<span class="cline-any cline-no"> </span>
|
|
1050
|
+
<span class="cline-any cline-yes">1x</span>
|
|
1050
1051
|
<span class="cline-any cline-no"> </span>
|
|
1051
1052
|
<span class="cline-any cline-no"> </span>
|
|
1052
1053
|
<span class="cline-any cline-no"> </span>
|
|
@@ -1056,6 +1057,7 @@
|
|
|
1056
1057
|
<span class="cline-any cline-no"> </span>
|
|
1057
1058
|
<span class="cline-any cline-no"> </span>
|
|
1058
1059
|
<span class="cline-any cline-no"> </span>
|
|
1060
|
+
<span class="cline-any cline-yes">1x</span>
|
|
1059
1061
|
<span class="cline-any cline-no"> </span>
|
|
1060
1062
|
<span class="cline-any cline-no"> </span>
|
|
1061
1063
|
<span class="cline-any cline-no"> </span>
|
|
@@ -1148,6 +1150,7 @@
|
|
|
1148
1150
|
<span class="cline-any cline-no"> </span>
|
|
1149
1151
|
<span class="cline-any cline-no"> </span>
|
|
1150
1152
|
<span class="cline-any cline-no"> </span>
|
|
1153
|
+
<span class="cline-any cline-yes">1x</span>
|
|
1151
1154
|
<span class="cline-any cline-no"> </span>
|
|
1152
1155
|
<span class="cline-any cline-no"> </span>
|
|
1153
1156
|
<span class="cline-any cline-no"> </span>
|
|
@@ -1157,47 +1160,44 @@
|
|
|
1157
1160
|
<span class="cline-any cline-no"> </span>
|
|
1158
1161
|
<span class="cline-any cline-no"> </span>
|
|
1159
1162
|
<span class="cline-any cline-no"> </span>
|
|
1163
|
+
<span class="cline-any cline-yes">1x</span>
|
|
1160
1164
|
<span class="cline-any cline-no"> </span>
|
|
1161
1165
|
<span class="cline-any cline-no"> </span>
|
|
1162
1166
|
<span class="cline-any cline-no"> </span>
|
|
1163
1167
|
<span class="cline-any cline-no"> </span>
|
|
1164
|
-
<span class="cline-any cline-
|
|
1165
|
-
<span class="cline-any cline-
|
|
1166
|
-
<span class="cline-any cline-
|
|
1167
|
-
<span class="cline-any cline-
|
|
1168
|
-
<span class="cline-any cline-
|
|
1169
|
-
<span class="cline-any cline-
|
|
1170
|
-
<span class="cline-any cline-
|
|
1171
|
-
<span class="cline-any cline-
|
|
1172
|
-
<span class="cline-any cline-
|
|
1173
|
-
<span class="cline-any cline-
|
|
1174
|
-
<span class="cline-any cline-
|
|
1175
|
-
|
|
1176
|
-
|
|
1177
|
-
|
|
1178
|
-
|
|
1179
|
-
|
|
1180
|
-
|
|
1181
|
-
|
|
1182
|
-
|
|
1183
|
-
|
|
1184
|
-
|
|
1185
|
-
|
|
1186
|
-
|
|
1187
|
-
|
|
1188
|
-
|
|
1189
|
-
|
|
1190
|
-
|
|
1191
|
-
|
|
1192
|
-
|
|
1193
|
-
|
|
1194
|
-
|
|
1195
|
-
|
|
1196
|
-
<span class="cstat-no" title="statement not covered"
|
|
1197
|
-
<span class="cstat-no" title="statement not covered" > "visual-explainer": path.resolve(__dirname, "..", "plugins", "visual-explainer", "plugin.json")</span>
|
|
1198
|
-
<span class="cstat-no" title="statement not covered" >}</span>
|
|
1199
|
-
<span class="cstat-no" title="statement not covered" ></span>
|
|
1200
|
-
<span class="cstat-no" title="statement not covered" >function validateNodeHook(hook, kind) {</span>
|
|
1168
|
+
<span class="cline-any cline-yes">1x</span>
|
|
1169
|
+
<span class="cline-any cline-yes">1x</span>
|
|
1170
|
+
<span class="cline-any cline-yes">1x</span>
|
|
1171
|
+
<span class="cline-any cline-yes">1x</span>
|
|
1172
|
+
<span class="cline-any cline-yes">1x</span>
|
|
1173
|
+
<span class="cline-any cline-yes">1x</span>
|
|
1174
|
+
<span class="cline-any cline-yes">1x</span>
|
|
1175
|
+
<span class="cline-any cline-yes">1x</span>
|
|
1176
|
+
<span class="cline-any cline-yes">1x</span>
|
|
1177
|
+
<span class="cline-any cline-yes">1x</span>
|
|
1178
|
+
<span class="cline-any cline-neutral"> </span></td><td class="text"><pre class="prettyprint lang-js">const fs = require("fs")
|
|
1179
|
+
const path = require("path")
|
|
1180
|
+
const os = require("os")
|
|
1181
|
+
const { spawnSync } = require("child_process")
|
|
1182
|
+
const { SUPPORTED_ADAPTERS } = require("./adapter-schema")
|
|
1183
|
+
const { getRegistryPlugin } = require("./plugins-registry")
|
|
1184
|
+
const { getPluginInstallGuidance } = require("./plugin-install-guidance")
|
|
1185
|
+
const {
|
|
1186
|
+
readPluginsLock,
|
|
1187
|
+
writePluginsLock,
|
|
1188
|
+
listInstalledPlugins
|
|
1189
|
+
} = require("./plugins-store")
|
|
1190
|
+
|
|
1191
|
+
const BUNDLED_PLUGINS = {
|
|
1192
|
+
beads: path.resolve(__dirname, "..", "plugins", "beads", "plugin.json"),
|
|
1193
|
+
gwc: path.resolve(__dirname, "..", "plugins", "gwc", "plugin.json"),
|
|
1194
|
+
docker: path.resolve(__dirname, "..", "plugins", "docker", "plugin.json"),
|
|
1195
|
+
squirrelscan: path.resolve(__dirname, "..", "plugins", "squirrelscan", "plugin.json"),
|
|
1196
|
+
"agency-agents": path.resolve(__dirname, "..", "plugins", "agency-agents", "plugin.json"),
|
|
1197
|
+
"visual-explainer": path.resolve(__dirname, "..", "plugins", "visual-explainer", "plugin.json")
|
|
1198
|
+
}
|
|
1199
|
+
|
|
1200
|
+
<span class="cstat-no" title="statement not covered" ><span class="fstat-no" title="function not covered" >function validateNodeHook(hook, kind) {</span></span>
|
|
1201
1201
|
<span class="cstat-no" title="statement not covered" > if (!hook) return null</span>
|
|
1202
1202
|
<span class="cstat-no" title="statement not covered" > if (!hook.script || typeof hook.script !== "string") {</span>
|
|
1203
1203
|
<span class="cstat-no" title="statement not covered" > throw Object.assign(new Error(`Invalid plugin manifest: ${kind}.script must be a string`), {</span>
|
|
@@ -1231,20 +1231,20 @@
|
|
|
1231
1231
|
<span class="cstat-no" title="statement not covered" > timeout_ms: timeoutMs</span>
|
|
1232
1232
|
<span class="cstat-no" title="statement not covered" > }</span>
|
|
1233
1233
|
<span class="cstat-no" title="statement not covered" >}</span>
|
|
1234
|
-
|
|
1235
|
-
<span class="cstat-no" title="statement not covered" >function commandKey(cmd) {</span>
|
|
1234
|
+
|
|
1235
|
+
<span class="cstat-no" title="statement not covered" ><span class="fstat-no" title="function not covered" >function commandKey(cmd) {</span></span>
|
|
1236
1236
|
<span class="cstat-no" title="statement not covered" > return `${cmd.namespace}.${cmd.resource}.${cmd.action}`</span>
|
|
1237
1237
|
<span class="cstat-no" title="statement not covered" >}</span>
|
|
1238
|
-
|
|
1239
|
-
<span class="cstat-no" title="statement not covered" >function resolveManifestPath(ref) {</span>
|
|
1238
|
+
|
|
1239
|
+
<span class="cstat-no" title="statement not covered" ><span class="fstat-no" title="function not covered" >function resolveManifestPath(ref) {</span></span>
|
|
1240
1240
|
<span class="cstat-no" title="statement not covered" > const base = BUNDLED_PLUGINS[ref] || path.resolve(ref)</span>
|
|
1241
1241
|
<span class="cstat-no" title="statement not covered" > if (!fs.existsSync(base)) return null</span>
|
|
1242
1242
|
<span class="cstat-no" title="statement not covered" > const st = fs.statSync(base)</span>
|
|
1243
1243
|
<span class="cstat-no" title="statement not covered" > if (st.isDirectory()) return path.join(base, "plugin.json")</span>
|
|
1244
1244
|
<span class="cstat-no" title="statement not covered" > return base</span>
|
|
1245
1245
|
<span class="cstat-no" title="statement not covered" >}</span>
|
|
1246
|
-
|
|
1247
|
-
<span class="cstat-no" title="statement not covered" >function parseManifestFile(manifestPath) {</span>
|
|
1246
|
+
|
|
1247
|
+
<span class="cstat-no" title="statement not covered" ><span class="fstat-no" title="function not covered" >function parseManifestFile(manifestPath) {</span></span>
|
|
1248
1248
|
<span class="cstat-no" title="statement not covered" > let raw</span>
|
|
1249
1249
|
<span class="cstat-no" title="statement not covered" > try {</span>
|
|
1250
1250
|
<span class="cstat-no" title="statement not covered" > raw = JSON.parse(fs.readFileSync(manifestPath, "utf-8"))</span>
|
|
@@ -1264,8 +1264,8 @@
|
|
|
1264
1264
|
<span class="cstat-no" title="statement not covered" > }</span>
|
|
1265
1265
|
<span class="cstat-no" title="statement not covered" > return raw</span>
|
|
1266
1266
|
<span class="cstat-no" title="statement not covered" >}</span>
|
|
1267
|
-
|
|
1268
|
-
<span class="cstat-no" title="statement not covered" >function resolveRepoManifestPath(baseDir, manifestPath) {</span>
|
|
1267
|
+
|
|
1268
|
+
<span class="cstat-no" title="statement not covered" ><span class="fstat-no" title="function not covered" >function resolveRepoManifestPath(baseDir, manifestPath) {</span></span>
|
|
1269
1269
|
<span class="cstat-no" title="statement not covered" > const relative = manifestPath || "plugin.json"</span>
|
|
1270
1270
|
<span class="cstat-no" title="statement not covered" > const candidate = path.resolve(baseDir, relative)</span>
|
|
1271
1271
|
<span class="cstat-no" title="statement not covered" > const normalizedBase = path.resolve(baseDir) + path.sep</span>
|
|
@@ -1278,12 +1278,12 @@
|
|
|
1278
1278
|
<span class="cstat-no" title="statement not covered" > }</span>
|
|
1279
1279
|
<span class="cstat-no" title="statement not covered" > return candidate</span>
|
|
1280
1280
|
<span class="cstat-no" title="statement not covered" >}</span>
|
|
1281
|
-
|
|
1282
|
-
<span class="cstat-no" title="statement not covered" >function noCleanup() {</span>
|
|
1281
|
+
|
|
1282
|
+
<span class="cstat-no" title="statement not covered" ><span class="fstat-no" title="function not covered" >function noCleanup() {</span></span>
|
|
1283
1283
|
<span class="cstat-no" title="statement not covered" > return undefined</span>
|
|
1284
1284
|
<span class="cstat-no" title="statement not covered" >}</span>
|
|
1285
|
-
|
|
1286
|
-
<span class="cstat-no" title="statement not covered" >function loadManifestFromGit(repo, options = {}) {</span>
|
|
1285
|
+
|
|
1286
|
+
<span class="cstat-no" title="statement not covered" ><span class="fstat-no" title="function not covered" >function loadManifestFromGit(repo, options = {}) {</span></span>
|
|
1287
1287
|
<span class="cstat-no" title="statement not covered" > if (!repo || typeof repo !== "string") {</span>
|
|
1288
1288
|
<span class="cstat-no" title="statement not covered" > throw Object.assign(new Error("Missing git repo URL/path for plugin install"), {</span>
|
|
1289
1289
|
<span class="cstat-no" title="statement not covered" > code: 85,</span>
|
|
@@ -1339,8 +1339,8 @@
|
|
|
1339
1339
|
<span class="cstat-no" title="statement not covered" > cleanup: () => fs.rmSync(tmpDir, { recursive: true, force: true })</span>
|
|
1340
1340
|
<span class="cstat-no" title="statement not covered" > }</span>
|
|
1341
1341
|
<span class="cstat-no" title="statement not covered" >}</span>
|
|
1342
|
-
|
|
1343
|
-
<span class="cstat-no" title="statement not covered" >function resolveRegistrySource(name) {</span>
|
|
1342
|
+
|
|
1343
|
+
<span class="cstat-no" title="statement not covered" ><span class="fstat-no" title="function not covered" >function resolveRegistrySource(name) {</span></span>
|
|
1344
1344
|
<span class="cstat-no" title="statement not covered" > const entry = getRegistryPlugin(name)</span>
|
|
1345
1345
|
<span class="cstat-no" title="statement not covered" > if (!entry) return null</span>
|
|
1346
1346
|
<span class="cstat-no" title="statement not covered" ></span>
|
|
@@ -1361,8 +1361,8 @@
|
|
|
1361
1361
|
<span class="cstat-no" title="statement not covered" > manifestPath: path.resolve(__dirname, "..", manifestPath)</span>
|
|
1362
1362
|
<span class="cstat-no" title="statement not covered" > }</span>
|
|
1363
1363
|
<span class="cstat-no" title="statement not covered" >}</span>
|
|
1364
|
-
|
|
1365
|
-
<span class="cstat-no" title="statement not covered" >function loadPluginManifest(ref, options = {}) {</span>
|
|
1364
|
+
|
|
1365
|
+
<span class="cstat-no" title="statement not covered" ><span class="fstat-no" title="function not covered" >function loadPluginManifest(ref, options = {}) {</span></span>
|
|
1366
1366
|
<span class="cstat-no" title="statement not covered" > if (options.git) {</span>
|
|
1367
1367
|
<span class="cstat-no" title="statement not covered" > return loadManifestFromGit(options.git, {</span>
|
|
1368
1368
|
<span class="cstat-no" title="statement not covered" > ref: options.ref,</span>
|
|
@@ -1419,8 +1419,8 @@
|
|
|
1419
1419
|
<span class="cstat-no" title="statement not covered" > cleanup: noCleanup</span>
|
|
1420
1420
|
<span class="cstat-no" title="statement not covered" > }</span>
|
|
1421
1421
|
<span class="cstat-no" title="statement not covered" >}</span>
|
|
1422
|
-
|
|
1423
|
-
<span class="cstat-no" title="statement not covered" >function parsePostInstallResult(stdout) {</span>
|
|
1422
|
+
|
|
1423
|
+
<span class="cstat-no" title="statement not covered" ><span class="fstat-no" title="function not covered" >function parsePostInstallResult(stdout) {</span></span>
|
|
1424
1424
|
<span class="cstat-no" title="statement not covered" > const text = (stdout || "").trim()</span>
|
|
1425
1425
|
<span class="cstat-no" title="statement not covered" > if (!text) return null</span>
|
|
1426
1426
|
<span class="cstat-no" title="statement not covered" > try {</span>
|
|
@@ -1429,8 +1429,8 @@
|
|
|
1429
1429
|
<span class="cstat-no" title="statement not covered" > return { raw: text }</span>
|
|
1430
1430
|
<span class="cstat-no" title="statement not covered" > }</span>
|
|
1431
1431
|
<span class="cstat-no" title="statement not covered" >}</span>
|
|
1432
|
-
|
|
1433
|
-
<span class="cstat-no" title="statement not covered" >function resolveHookScriptPath(manifestDir, script, kind) {</span>
|
|
1432
|
+
|
|
1433
|
+
<span class="cstat-no" title="statement not covered" ><span class="fstat-no" title="function not covered" >function resolveHookScriptPath(manifestDir, script, kind) {</span></span>
|
|
1434
1434
|
<span class="cstat-no" title="statement not covered" > const scriptPath = path.resolve(manifestDir, script)</span>
|
|
1435
1435
|
<span class="cstat-no" title="statement not covered" > const normalizedBase = path.resolve(manifestDir) + path.sep</span>
|
|
1436
1436
|
<span class="cstat-no" title="statement not covered" > if (!scriptPath.startsWith(normalizedBase)) {</span>
|
|
@@ -1449,8 +1449,8 @@
|
|
|
1449
1449
|
<span class="cstat-no" title="statement not covered" > }</span>
|
|
1450
1450
|
<span class="cstat-no" title="statement not covered" > return scriptPath</span>
|
|
1451
1451
|
<span class="cstat-no" title="statement not covered" >}</span>
|
|
1452
|
-
|
|
1453
|
-
<span class="cstat-no" title="statement not covered" >function runNodeHook(pluginName, kind, hook, scriptPath, env = {}) {</span>
|
|
1452
|
+
|
|
1453
|
+
<span class="cstat-no" title="statement not covered" ><span class="fstat-no" title="function not covered" >function runNodeHook(pluginName, kind, hook, scriptPath, env = {}) {</span></span>
|
|
1454
1454
|
<span class="cstat-no" title="statement not covered" > const result = spawnSync("node", [scriptPath], {</span>
|
|
1455
1455
|
<span class="cstat-no" title="statement not covered" > encoding: "utf-8",</span>
|
|
1456
1456
|
<span class="cstat-no" title="statement not covered" > timeout: hook.timeout_ms,</span>
|
|
@@ -1479,16 +1479,16 @@
|
|
|
1479
1479
|
<span class="cstat-no" title="statement not covered" ></span>
|
|
1480
1480
|
<span class="cstat-no" title="statement not covered" > return parsePostInstallResult(result.stdout)</span>
|
|
1481
1481
|
<span class="cstat-no" title="statement not covered" >}</span>
|
|
1482
|
-
|
|
1483
|
-
<span class="cstat-no" title="statement not covered" >function runPostInstall(manifest, manifestPath) {</span>
|
|
1482
|
+
|
|
1483
|
+
<span class="cstat-no" title="statement not covered" ><span class="fstat-no" title="function not covered" >function runPostInstall(manifest, manifestPath) {</span></span>
|
|
1484
1484
|
<span class="cstat-no" title="statement not covered" > const hook = validateNodeHook(manifest.post_install, "post_install")</span>
|
|
1485
1485
|
<span class="cstat-no" title="statement not covered" > if (!hook) return null</span>
|
|
1486
1486
|
<span class="cstat-no" title="statement not covered" > const manifestDir = path.dirname(manifestPath)</span>
|
|
1487
1487
|
<span class="cstat-no" title="statement not covered" > const scriptPath = resolveHookScriptPath(manifestDir, hook.script, "post-install")</span>
|
|
1488
1488
|
<span class="cstat-no" title="statement not covered" > return runNodeHook(manifest.name, "Post-install", hook, scriptPath)</span>
|
|
1489
1489
|
<span class="cstat-no" title="statement not covered" >}</span>
|
|
1490
|
-
|
|
1491
|
-
<span class="cstat-no" title="statement not covered" >function serializeHook(manifestPath, hook, kind) {</span>
|
|
1490
|
+
|
|
1491
|
+
<span class="cstat-no" title="statement not covered" ><span class="fstat-no" title="function not covered" >function serializeHook(manifestPath, hook, kind) {</span></span>
|
|
1492
1492
|
<span class="cstat-no" title="statement not covered" > const validHook = validateNodeHook(hook, kind)</span>
|
|
1493
1493
|
<span class="cstat-no" title="statement not covered" > if (!validHook) return null</span>
|
|
1494
1494
|
<span class="cstat-no" title="statement not covered" > const manifestDir = path.dirname(manifestPath)</span>
|
|
@@ -1501,8 +1501,8 @@
|
|
|
1501
1501
|
<span class="cstat-no" title="statement not covered" > script_source: fs.readFileSync(scriptPath, "utf-8")</span>
|
|
1502
1502
|
<span class="cstat-no" title="statement not covered" > }</span>
|
|
1503
1503
|
<span class="cstat-no" title="statement not covered" >}</span>
|
|
1504
|
-
|
|
1505
|
-
<span class="cstat-no" title="statement not covered" >function runStoredHook(pluginName, kind, storedHook) {</span>
|
|
1504
|
+
|
|
1505
|
+
<span class="cstat-no" title="statement not covered" ><span class="fstat-no" title="function not covered" >function runStoredHook(pluginName, kind, storedHook) {</span></span>
|
|
1506
1506
|
<span class="cstat-no" title="statement not covered" > if (!storedHook) return null</span>
|
|
1507
1507
|
<span class="cstat-no" title="statement not covered" > const runtime = storedHook.runtime || "node"</span>
|
|
1508
1508
|
<span class="cstat-no" title="statement not covered" > if (runtime !== "node") {</span>
|
|
@@ -1533,8 +1533,8 @@
|
|
|
1533
1533
|
<span class="cstat-no" title="statement not covered" > fs.rmSync(tmpDir, { recursive: true, force: true })</span>
|
|
1534
1534
|
<span class="cstat-no" title="statement not covered" > }</span>
|
|
1535
1535
|
<span class="cstat-no" title="statement not covered" >}</span>
|
|
1536
|
-
|
|
1537
|
-
<span class="cstat-no" title="statement not covered" >function checkBinary(binary, args) {</span>
|
|
1536
|
+
|
|
1537
|
+
<span class="cstat-no" title="statement not covered" ><span class="fstat-no" title="function not covered" >function checkBinary(binary, args) {</span></span>
|
|
1538
1538
|
<span class="cstat-no" title="statement not covered" > const r = spawnSync(binary, args || ["--version"], { encoding: "utf-8", timeout: 5000 })</span>
|
|
1539
1539
|
<span class="cstat-no" title="statement not covered" > if (r.error) {</span>
|
|
1540
1540
|
<span class="cstat-no" title="statement not covered" > return {</span>
|
|
@@ -1556,8 +1556,8 @@
|
|
|
1556
1556
|
<span class="cstat-no" title="statement not covered" > message: (r.stdout || "").trim() || "ok"</span>
|
|
1557
1557
|
<span class="cstat-no" title="statement not covered" > }</span>
|
|
1558
1558
|
<span class="cstat-no" title="statement not covered" >}</span>
|
|
1559
|
-
|
|
1560
|
-
<span class="cstat-no" title="statement not covered" >function doctorPlugin(name) {</span>
|
|
1559
|
+
|
|
1560
|
+
<span class="cstat-no" title="statement not covered" ><span class="fstat-no" title="function not covered" >function doctorPlugin(name) {</span></span>
|
|
1561
1561
|
<span class="cstat-no" title="statement not covered" > const plugin = getPlugin(name)</span>
|
|
1562
1562
|
<span class="cstat-no" title="statement not covered" > if (!plugin) {</span>
|
|
1563
1563
|
<span class="cstat-no" title="statement not covered" > throw Object.assign(new Error(`Plugin '${name}' is not installed`), {</span>
|
|
@@ -1603,8 +1603,8 @@
|
|
|
1603
1603
|
<span class="cstat-no" title="statement not covered" > install_guidance: getPluginInstallGuidance(name)</span>
|
|
1604
1604
|
<span class="cstat-no" title="statement not covered" > }</span>
|
|
1605
1605
|
<span class="cstat-no" title="statement not covered" >}</span>
|
|
1606
|
-
|
|
1607
|
-
<span class="cstat-no" title="statement not covered" >function doctorAllPlugins() {</span>
|
|
1606
|
+
|
|
1607
|
+
<span class="cstat-no" title="statement not covered" ><span class="fstat-no" title="function not covered" >function doctorAllPlugins() {</span></span>
|
|
1608
1608
|
<span class="cstat-no" title="statement not covered" > const reports = listInstalledPlugins().map(p => doctorPlugin(p.name))</span>
|
|
1609
1609
|
<span class="cstat-no" title="statement not covered" > return {</span>
|
|
1610
1610
|
<span class="cstat-no" title="statement not covered" > plugins: reports,</span>
|
|
@@ -1613,8 +1613,8 @@
|
|
|
1613
1613
|
<span class="cstat-no" title="statement not covered" > failing_plugins: reports.filter(r => !r.ok).map(r => r.plugin)</span>
|
|
1614
1614
|
<span class="cstat-no" title="statement not covered" > }</span>
|
|
1615
1615
|
<span class="cstat-no" title="statement not covered" >}</span>
|
|
1616
|
-
|
|
1617
|
-
<span class="cstat-no" title="statement not covered" >function installPlugin(ref, options = {}) {</span>
|
|
1616
|
+
|
|
1617
|
+
<span class="cstat-no" title="statement not covered" ><span class="fstat-no" title="function not covered" >function installPlugin(ref, options = {}) {</span></span>
|
|
1618
1618
|
<span class="cstat-no" title="statement not covered" > const onConflict = options.onConflict || "fail"</span>
|
|
1619
1619
|
<span class="cstat-no" title="statement not covered" > if (!["fail", "skip", "replace"].includes(onConflict)) {</span>
|
|
1620
1620
|
<span class="cstat-no" title="statement not covered" > throw Object.assign(new Error("Invalid --on-conflict. Use: fail, skip, replace"), {</span>
|
|
@@ -1706,8 +1706,8 @@
|
|
|
1706
1706
|
<span class="cstat-no" title="statement not covered" > if (typeof loaded.cleanup === "function") loaded.cleanup()</span>
|
|
1707
1707
|
<span class="cstat-no" title="statement not covered" > }</span>
|
|
1708
1708
|
<span class="cstat-no" title="statement not covered" >}</span>
|
|
1709
|
-
|
|
1710
|
-
<span class="cstat-no" title="statement not covered" >function removePlugin(name) {</span>
|
|
1709
|
+
|
|
1710
|
+
<span class="cstat-no" title="statement not covered" ><span class="fstat-no" title="function not covered" >function removePlugin(name) {</span></span>
|
|
1711
1711
|
<span class="cstat-no" title="statement not covered" > const lock = readPluginsLock()</span>
|
|
1712
1712
|
<span class="cstat-no" title="statement not covered" > const plugin = lock.installed[name]</span>
|
|
1713
1713
|
<span class="cstat-no" title="statement not covered" > if (!plugin) return false</span>
|
|
@@ -1716,21 +1716,21 @@
|
|
|
1716
1716
|
<span class="cstat-no" title="statement not covered" > writePluginsLock(lock)</span>
|
|
1717
1717
|
<span class="cstat-no" title="statement not covered" > return true</span>
|
|
1718
1718
|
<span class="cstat-no" title="statement not covered" >}</span>
|
|
1719
|
-
|
|
1720
|
-
<span class="cstat-no" title="statement not covered" >function getPlugin(name) {</span>
|
|
1719
|
+
|
|
1720
|
+
<span class="cstat-no" title="statement not covered" ><span class="fstat-no" title="function not covered" >function getPlugin(name) {</span></span>
|
|
1721
1721
|
<span class="cstat-no" title="statement not covered" > const lock = readPluginsLock()</span>
|
|
1722
1722
|
<span class="cstat-no" title="statement not covered" > return lock.installed[name] || null</span>
|
|
1723
1723
|
<span class="cstat-no" title="statement not covered" >}</span>
|
|
1724
|
-
|
|
1725
|
-
|
|
1726
|
-
|
|
1727
|
-
|
|
1728
|
-
|
|
1729
|
-
|
|
1730
|
-
|
|
1731
|
-
|
|
1732
|
-
|
|
1733
|
-
|
|
1724
|
+
|
|
1725
|
+
module.exports = {
|
|
1726
|
+
installPlugin,
|
|
1727
|
+
removePlugin,
|
|
1728
|
+
getPlugin,
|
|
1729
|
+
listInstalledPlugins,
|
|
1730
|
+
getPluginInstallGuidance,
|
|
1731
|
+
doctorPlugin,
|
|
1732
|
+
doctorAllPlugins
|
|
1733
|
+
}
|
|
1734
1734
|
</pre></td></tr></table></pre>
|
|
1735
1735
|
|
|
1736
1736
|
<div class='push'></div><!-- for sticky footer -->
|
|
@@ -1738,7 +1738,7 @@
|
|
|
1738
1738
|
<div class='footer quiet pad2 space-top1 center small'>
|
|
1739
1739
|
Code coverage generated by
|
|
1740
1740
|
<a href="https://istanbul.js.org/" target="_blank" rel="noopener noreferrer">istanbul</a>
|
|
1741
|
-
at 2026-
|
|
1741
|
+
at 2026-04-10T17:55:25.401Z
|
|
1742
1742
|
</div>
|
|
1743
1743
|
<script src="../prettify.js"></script>
|
|
1744
1744
|
<script>
|