@voidagency/skills 1.0.1 → 1.0.3
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/dist/cli.mjs +57 -380
- package/package.json +4 -44
- package/ThirdPartyNoticeText.txt +0 -12
package/dist/cli.mjs
CHANGED
|
@@ -96,9 +96,25 @@ function parseSource(input) {
|
|
|
96
96
|
const githubPrefixMatch = input.match(/^github:(.+)$/);
|
|
97
97
|
if (githubPrefixMatch) return parseSource(githubPrefixMatch[1]);
|
|
98
98
|
const gitlabPrefixMatch = input.match(/^gitlab:(.+)$/);
|
|
99
|
-
if (gitlabPrefixMatch)
|
|
99
|
+
if (gitlabPrefixMatch) {
|
|
100
|
+
const rest = gitlabPrefixMatch[1];
|
|
101
|
+
const atIdx = rest.lastIndexOf("@");
|
|
102
|
+
const repoPart = atIdx > 0 ? rest.slice(0, atIdx).trim() : rest;
|
|
103
|
+
const skillPart = atIdx > 0 ? rest.slice(atIdx + 1).trim() : void 0;
|
|
104
|
+
const result = parseSource(`https://gitlab.com/${repoPart}`);
|
|
105
|
+
if (skillPart) result.skillFilter = skillPart;
|
|
106
|
+
return result;
|
|
107
|
+
}
|
|
100
108
|
const bitbucketPrefixMatch = input.match(/^bitbucket:(.+)$/);
|
|
101
|
-
if (bitbucketPrefixMatch)
|
|
109
|
+
if (bitbucketPrefixMatch) {
|
|
110
|
+
const rest = bitbucketPrefixMatch[1];
|
|
111
|
+
const atIdx = rest.lastIndexOf("@");
|
|
112
|
+
const repoPart = atIdx > 0 ? rest.slice(0, atIdx).trim() : rest;
|
|
113
|
+
const skillPart = atIdx > 0 ? rest.slice(atIdx + 1).trim() : void 0;
|
|
114
|
+
const result = parseSource(`https://bitbucket.org/${repoPart}`);
|
|
115
|
+
if (skillPart) result.skillFilter = skillPart;
|
|
116
|
+
return result;
|
|
117
|
+
}
|
|
102
118
|
const atIdx = input.lastIndexOf("@");
|
|
103
119
|
if (atIdx > 0) {
|
|
104
120
|
const pathPart = input.slice(0, atIdx).trim();
|
|
@@ -724,123 +740,7 @@ function filterSkills(skills, inputNames) {
|
|
|
724
740
|
//#region src/agents.ts
|
|
725
741
|
const home = homedir();
|
|
726
742
|
const configHome = xdgConfig ?? join(home, ".config");
|
|
727
|
-
const codexHome = process.env.CODEX_HOME?.trim() || join(home, ".codex");
|
|
728
|
-
const claudeHome = process.env.CLAUDE_CONFIG_DIR?.trim() || join(home, ".claude");
|
|
729
|
-
function getOpenClawGlobalSkillsDir(homeDir = home, pathExists = existsSync) {
|
|
730
|
-
if (pathExists(join(homeDir, ".openclaw"))) return join(homeDir, ".openclaw/skills");
|
|
731
|
-
if (pathExists(join(homeDir, ".clawdbot"))) return join(homeDir, ".clawdbot/skills");
|
|
732
|
-
if (pathExists(join(homeDir, ".moltbot"))) return join(homeDir, ".moltbot/skills");
|
|
733
|
-
return join(homeDir, ".openclaw/skills");
|
|
734
|
-
}
|
|
735
743
|
const agents = {
|
|
736
|
-
amp: {
|
|
737
|
-
name: "amp",
|
|
738
|
-
displayName: "Amp",
|
|
739
|
-
skillsDir: ".agents/skills",
|
|
740
|
-
globalSkillsDir: join(configHome, "agents/skills"),
|
|
741
|
-
detectInstalled: async () => {
|
|
742
|
-
return existsSync(join(configHome, "amp"));
|
|
743
|
-
}
|
|
744
|
-
},
|
|
745
|
-
antigravity: {
|
|
746
|
-
name: "antigravity",
|
|
747
|
-
displayName: "Antigravity",
|
|
748
|
-
skillsDir: ".agent/skills",
|
|
749
|
-
globalSkillsDir: join(home, ".gemini/antigravity/skills"),
|
|
750
|
-
detectInstalled: async () => {
|
|
751
|
-
return existsSync(join(home, ".gemini/antigravity"));
|
|
752
|
-
}
|
|
753
|
-
},
|
|
754
|
-
augment: {
|
|
755
|
-
name: "augment",
|
|
756
|
-
displayName: "Augment",
|
|
757
|
-
skillsDir: ".augment/skills",
|
|
758
|
-
globalSkillsDir: join(home, ".augment/skills"),
|
|
759
|
-
detectInstalled: async () => {
|
|
760
|
-
return existsSync(join(home, ".augment"));
|
|
761
|
-
}
|
|
762
|
-
},
|
|
763
|
-
"claude-code": {
|
|
764
|
-
name: "claude-code",
|
|
765
|
-
displayName: "Claude Code",
|
|
766
|
-
skillsDir: ".claude/skills",
|
|
767
|
-
globalSkillsDir: join(claudeHome, "skills"),
|
|
768
|
-
detectInstalled: async () => {
|
|
769
|
-
return existsSync(claudeHome);
|
|
770
|
-
}
|
|
771
|
-
},
|
|
772
|
-
openclaw: {
|
|
773
|
-
name: "openclaw",
|
|
774
|
-
displayName: "OpenClaw",
|
|
775
|
-
skillsDir: "skills",
|
|
776
|
-
globalSkillsDir: getOpenClawGlobalSkillsDir(),
|
|
777
|
-
detectInstalled: async () => {
|
|
778
|
-
return existsSync(join(home, ".openclaw")) || existsSync(join(home, ".clawdbot")) || existsSync(join(home, ".moltbot"));
|
|
779
|
-
}
|
|
780
|
-
},
|
|
781
|
-
cline: {
|
|
782
|
-
name: "cline",
|
|
783
|
-
displayName: "Cline",
|
|
784
|
-
skillsDir: ".agents/skills",
|
|
785
|
-
globalSkillsDir: join(home, ".agents", "skills"),
|
|
786
|
-
detectInstalled: async () => {
|
|
787
|
-
return existsSync(join(home, ".cline"));
|
|
788
|
-
}
|
|
789
|
-
},
|
|
790
|
-
codebuddy: {
|
|
791
|
-
name: "codebuddy",
|
|
792
|
-
displayName: "CodeBuddy",
|
|
793
|
-
skillsDir: ".codebuddy/skills",
|
|
794
|
-
globalSkillsDir: join(home, ".codebuddy/skills"),
|
|
795
|
-
detectInstalled: async () => {
|
|
796
|
-
return existsSync(join(process.cwd(), ".codebuddy")) || existsSync(join(home, ".codebuddy"));
|
|
797
|
-
}
|
|
798
|
-
},
|
|
799
|
-
codex: {
|
|
800
|
-
name: "codex",
|
|
801
|
-
displayName: "Codex",
|
|
802
|
-
skillsDir: ".agents/skills",
|
|
803
|
-
globalSkillsDir: join(codexHome, "skills"),
|
|
804
|
-
detectInstalled: async () => {
|
|
805
|
-
return existsSync(codexHome) || existsSync("/etc/codex");
|
|
806
|
-
}
|
|
807
|
-
},
|
|
808
|
-
"command-code": {
|
|
809
|
-
name: "command-code",
|
|
810
|
-
displayName: "Command Code",
|
|
811
|
-
skillsDir: ".commandcode/skills",
|
|
812
|
-
globalSkillsDir: join(home, ".commandcode/skills"),
|
|
813
|
-
detectInstalled: async () => {
|
|
814
|
-
return existsSync(join(home, ".commandcode"));
|
|
815
|
-
}
|
|
816
|
-
},
|
|
817
|
-
continue: {
|
|
818
|
-
name: "continue",
|
|
819
|
-
displayName: "Continue",
|
|
820
|
-
skillsDir: ".continue/skills",
|
|
821
|
-
globalSkillsDir: join(home, ".continue/skills"),
|
|
822
|
-
detectInstalled: async () => {
|
|
823
|
-
return existsSync(join(process.cwd(), ".continue")) || existsSync(join(home, ".continue"));
|
|
824
|
-
}
|
|
825
|
-
},
|
|
826
|
-
cortex: {
|
|
827
|
-
name: "cortex",
|
|
828
|
-
displayName: "Cortex Code",
|
|
829
|
-
skillsDir: ".cortex/skills",
|
|
830
|
-
globalSkillsDir: join(home, ".snowflake/cortex/skills"),
|
|
831
|
-
detectInstalled: async () => {
|
|
832
|
-
return existsSync(join(home, ".snowflake/cortex"));
|
|
833
|
-
}
|
|
834
|
-
},
|
|
835
|
-
crush: {
|
|
836
|
-
name: "crush",
|
|
837
|
-
displayName: "Crush",
|
|
838
|
-
skillsDir: ".crush/skills",
|
|
839
|
-
globalSkillsDir: join(home, ".config/crush/skills"),
|
|
840
|
-
detectInstalled: async () => {
|
|
841
|
-
return existsSync(join(home, ".config/crush"));
|
|
842
|
-
}
|
|
843
|
-
},
|
|
844
744
|
cursor: {
|
|
845
745
|
name: "cursor",
|
|
846
746
|
displayName: "Cursor",
|
|
@@ -850,123 +750,6 @@ const agents = {
|
|
|
850
750
|
return existsSync(join(home, ".cursor"));
|
|
851
751
|
}
|
|
852
752
|
},
|
|
853
|
-
droid: {
|
|
854
|
-
name: "droid",
|
|
855
|
-
displayName: "Droid",
|
|
856
|
-
skillsDir: ".factory/skills",
|
|
857
|
-
globalSkillsDir: join(home, ".factory/skills"),
|
|
858
|
-
detectInstalled: async () => {
|
|
859
|
-
return existsSync(join(home, ".factory"));
|
|
860
|
-
}
|
|
861
|
-
},
|
|
862
|
-
"gemini-cli": {
|
|
863
|
-
name: "gemini-cli",
|
|
864
|
-
displayName: "Gemini CLI",
|
|
865
|
-
skillsDir: ".agents/skills",
|
|
866
|
-
globalSkillsDir: join(home, ".gemini/skills"),
|
|
867
|
-
detectInstalled: async () => {
|
|
868
|
-
return existsSync(join(home, ".gemini"));
|
|
869
|
-
}
|
|
870
|
-
},
|
|
871
|
-
"github-copilot": {
|
|
872
|
-
name: "github-copilot",
|
|
873
|
-
displayName: "GitHub Copilot",
|
|
874
|
-
skillsDir: ".agents/skills",
|
|
875
|
-
globalSkillsDir: join(home, ".copilot/skills"),
|
|
876
|
-
detectInstalled: async () => {
|
|
877
|
-
return existsSync(join(home, ".copilot"));
|
|
878
|
-
}
|
|
879
|
-
},
|
|
880
|
-
goose: {
|
|
881
|
-
name: "goose",
|
|
882
|
-
displayName: "Goose",
|
|
883
|
-
skillsDir: ".goose/skills",
|
|
884
|
-
globalSkillsDir: join(configHome, "goose/skills"),
|
|
885
|
-
detectInstalled: async () => {
|
|
886
|
-
return existsSync(join(configHome, "goose"));
|
|
887
|
-
}
|
|
888
|
-
},
|
|
889
|
-
junie: {
|
|
890
|
-
name: "junie",
|
|
891
|
-
displayName: "Junie",
|
|
892
|
-
skillsDir: ".junie/skills",
|
|
893
|
-
globalSkillsDir: join(home, ".junie/skills"),
|
|
894
|
-
detectInstalled: async () => {
|
|
895
|
-
return existsSync(join(home, ".junie"));
|
|
896
|
-
}
|
|
897
|
-
},
|
|
898
|
-
"iflow-cli": {
|
|
899
|
-
name: "iflow-cli",
|
|
900
|
-
displayName: "iFlow CLI",
|
|
901
|
-
skillsDir: ".iflow/skills",
|
|
902
|
-
globalSkillsDir: join(home, ".iflow/skills"),
|
|
903
|
-
detectInstalled: async () => {
|
|
904
|
-
return existsSync(join(home, ".iflow"));
|
|
905
|
-
}
|
|
906
|
-
},
|
|
907
|
-
kilo: {
|
|
908
|
-
name: "kilo",
|
|
909
|
-
displayName: "Kilo Code",
|
|
910
|
-
skillsDir: ".kilocode/skills",
|
|
911
|
-
globalSkillsDir: join(home, ".kilocode/skills"),
|
|
912
|
-
detectInstalled: async () => {
|
|
913
|
-
return existsSync(join(home, ".kilocode"));
|
|
914
|
-
}
|
|
915
|
-
},
|
|
916
|
-
"kimi-cli": {
|
|
917
|
-
name: "kimi-cli",
|
|
918
|
-
displayName: "Kimi Code CLI",
|
|
919
|
-
skillsDir: ".agents/skills",
|
|
920
|
-
globalSkillsDir: join(home, ".config/agents/skills"),
|
|
921
|
-
detectInstalled: async () => {
|
|
922
|
-
return existsSync(join(home, ".kimi"));
|
|
923
|
-
}
|
|
924
|
-
},
|
|
925
|
-
"kiro-cli": {
|
|
926
|
-
name: "kiro-cli",
|
|
927
|
-
displayName: "Kiro CLI",
|
|
928
|
-
skillsDir: ".kiro/skills",
|
|
929
|
-
globalSkillsDir: join(home, ".kiro/skills"),
|
|
930
|
-
detectInstalled: async () => {
|
|
931
|
-
return existsSync(join(home, ".kiro"));
|
|
932
|
-
}
|
|
933
|
-
},
|
|
934
|
-
kode: {
|
|
935
|
-
name: "kode",
|
|
936
|
-
displayName: "Kode",
|
|
937
|
-
skillsDir: ".kode/skills",
|
|
938
|
-
globalSkillsDir: join(home, ".kode/skills"),
|
|
939
|
-
detectInstalled: async () => {
|
|
940
|
-
return existsSync(join(home, ".kode"));
|
|
941
|
-
}
|
|
942
|
-
},
|
|
943
|
-
mcpjam: {
|
|
944
|
-
name: "mcpjam",
|
|
945
|
-
displayName: "MCPJam",
|
|
946
|
-
skillsDir: ".mcpjam/skills",
|
|
947
|
-
globalSkillsDir: join(home, ".mcpjam/skills"),
|
|
948
|
-
detectInstalled: async () => {
|
|
949
|
-
return existsSync(join(home, ".mcpjam"));
|
|
950
|
-
}
|
|
951
|
-
},
|
|
952
|
-
"mistral-vibe": {
|
|
953
|
-
name: "mistral-vibe",
|
|
954
|
-
displayName: "Mistral Vibe",
|
|
955
|
-
skillsDir: ".vibe/skills",
|
|
956
|
-
globalSkillsDir: join(home, ".vibe/skills"),
|
|
957
|
-
detectInstalled: async () => {
|
|
958
|
-
return existsSync(join(home, ".vibe"));
|
|
959
|
-
}
|
|
960
|
-
},
|
|
961
|
-
mux: {
|
|
962
|
-
name: "mux",
|
|
963
|
-
displayName: "Mux",
|
|
964
|
-
skillsDir: ".mux/skills",
|
|
965
|
-
globalSkillsDir: join(home, ".mux/skills"),
|
|
966
|
-
detectInstalled: async () => {
|
|
967
|
-
return existsSync(join(home, ".mux"));
|
|
968
|
-
}
|
|
969
|
-
},
|
|
970
753
|
opencode: {
|
|
971
754
|
name: "opencode",
|
|
972
755
|
displayName: "OpenCode",
|
|
@@ -975,132 +758,6 @@ const agents = {
|
|
|
975
758
|
detectInstalled: async () => {
|
|
976
759
|
return existsSync(join(configHome, "opencode"));
|
|
977
760
|
}
|
|
978
|
-
},
|
|
979
|
-
openhands: {
|
|
980
|
-
name: "openhands",
|
|
981
|
-
displayName: "OpenHands",
|
|
982
|
-
skillsDir: ".openhands/skills",
|
|
983
|
-
globalSkillsDir: join(home, ".openhands/skills"),
|
|
984
|
-
detectInstalled: async () => {
|
|
985
|
-
return existsSync(join(home, ".openhands"));
|
|
986
|
-
}
|
|
987
|
-
},
|
|
988
|
-
pi: {
|
|
989
|
-
name: "pi",
|
|
990
|
-
displayName: "Pi",
|
|
991
|
-
skillsDir: ".pi/skills",
|
|
992
|
-
globalSkillsDir: join(home, ".pi/agent/skills"),
|
|
993
|
-
detectInstalled: async () => {
|
|
994
|
-
return existsSync(join(home, ".pi/agent"));
|
|
995
|
-
}
|
|
996
|
-
},
|
|
997
|
-
qoder: {
|
|
998
|
-
name: "qoder",
|
|
999
|
-
displayName: "Qoder",
|
|
1000
|
-
skillsDir: ".qoder/skills",
|
|
1001
|
-
globalSkillsDir: join(home, ".qoder/skills"),
|
|
1002
|
-
detectInstalled: async () => {
|
|
1003
|
-
return existsSync(join(home, ".qoder"));
|
|
1004
|
-
}
|
|
1005
|
-
},
|
|
1006
|
-
"qwen-code": {
|
|
1007
|
-
name: "qwen-code",
|
|
1008
|
-
displayName: "Qwen Code",
|
|
1009
|
-
skillsDir: ".qwen/skills",
|
|
1010
|
-
globalSkillsDir: join(home, ".qwen/skills"),
|
|
1011
|
-
detectInstalled: async () => {
|
|
1012
|
-
return existsSync(join(home, ".qwen"));
|
|
1013
|
-
}
|
|
1014
|
-
},
|
|
1015
|
-
replit: {
|
|
1016
|
-
name: "replit",
|
|
1017
|
-
displayName: "Replit",
|
|
1018
|
-
skillsDir: ".agents/skills",
|
|
1019
|
-
globalSkillsDir: join(configHome, "agents/skills"),
|
|
1020
|
-
showInUniversalList: false,
|
|
1021
|
-
detectInstalled: async () => {
|
|
1022
|
-
return existsSync(join(process.cwd(), ".replit"));
|
|
1023
|
-
}
|
|
1024
|
-
},
|
|
1025
|
-
roo: {
|
|
1026
|
-
name: "roo",
|
|
1027
|
-
displayName: "Roo Code",
|
|
1028
|
-
skillsDir: ".roo/skills",
|
|
1029
|
-
globalSkillsDir: join(home, ".roo/skills"),
|
|
1030
|
-
detectInstalled: async () => {
|
|
1031
|
-
return existsSync(join(home, ".roo"));
|
|
1032
|
-
}
|
|
1033
|
-
},
|
|
1034
|
-
trae: {
|
|
1035
|
-
name: "trae",
|
|
1036
|
-
displayName: "Trae",
|
|
1037
|
-
skillsDir: ".trae/skills",
|
|
1038
|
-
globalSkillsDir: join(home, ".trae/skills"),
|
|
1039
|
-
detectInstalled: async () => {
|
|
1040
|
-
return existsSync(join(home, ".trae"));
|
|
1041
|
-
}
|
|
1042
|
-
},
|
|
1043
|
-
"trae-cn": {
|
|
1044
|
-
name: "trae-cn",
|
|
1045
|
-
displayName: "Trae CN",
|
|
1046
|
-
skillsDir: ".trae/skills",
|
|
1047
|
-
globalSkillsDir: join(home, ".trae-cn/skills"),
|
|
1048
|
-
detectInstalled: async () => {
|
|
1049
|
-
return existsSync(join(home, ".trae-cn"));
|
|
1050
|
-
}
|
|
1051
|
-
},
|
|
1052
|
-
windsurf: {
|
|
1053
|
-
name: "windsurf",
|
|
1054
|
-
displayName: "Windsurf",
|
|
1055
|
-
skillsDir: ".windsurf/skills",
|
|
1056
|
-
globalSkillsDir: join(home, ".codeium/windsurf/skills"),
|
|
1057
|
-
detectInstalled: async () => {
|
|
1058
|
-
return existsSync(join(home, ".codeium/windsurf"));
|
|
1059
|
-
}
|
|
1060
|
-
},
|
|
1061
|
-
zencoder: {
|
|
1062
|
-
name: "zencoder",
|
|
1063
|
-
displayName: "Zencoder",
|
|
1064
|
-
skillsDir: ".zencoder/skills",
|
|
1065
|
-
globalSkillsDir: join(home, ".zencoder/skills"),
|
|
1066
|
-
detectInstalled: async () => {
|
|
1067
|
-
return existsSync(join(home, ".zencoder"));
|
|
1068
|
-
}
|
|
1069
|
-
},
|
|
1070
|
-
neovate: {
|
|
1071
|
-
name: "neovate",
|
|
1072
|
-
displayName: "Neovate",
|
|
1073
|
-
skillsDir: ".neovate/skills",
|
|
1074
|
-
globalSkillsDir: join(home, ".neovate/skills"),
|
|
1075
|
-
detectInstalled: async () => {
|
|
1076
|
-
return existsSync(join(home, ".neovate"));
|
|
1077
|
-
}
|
|
1078
|
-
},
|
|
1079
|
-
pochi: {
|
|
1080
|
-
name: "pochi",
|
|
1081
|
-
displayName: "Pochi",
|
|
1082
|
-
skillsDir: ".pochi/skills",
|
|
1083
|
-
globalSkillsDir: join(home, ".pochi/skills"),
|
|
1084
|
-
detectInstalled: async () => {
|
|
1085
|
-
return existsSync(join(home, ".pochi"));
|
|
1086
|
-
}
|
|
1087
|
-
},
|
|
1088
|
-
adal: {
|
|
1089
|
-
name: "adal",
|
|
1090
|
-
displayName: "AdaL",
|
|
1091
|
-
skillsDir: ".adal/skills",
|
|
1092
|
-
globalSkillsDir: join(home, ".adal/skills"),
|
|
1093
|
-
detectInstalled: async () => {
|
|
1094
|
-
return existsSync(join(home, ".adal"));
|
|
1095
|
-
}
|
|
1096
|
-
},
|
|
1097
|
-
universal: {
|
|
1098
|
-
name: "universal",
|
|
1099
|
-
displayName: "Universal",
|
|
1100
|
-
skillsDir: ".agents/skills",
|
|
1101
|
-
globalSkillsDir: join(configHome, "agents/skills"),
|
|
1102
|
-
showInUniversalList: false,
|
|
1103
|
-
detectInstalled: async () => false
|
|
1104
761
|
}
|
|
1105
762
|
};
|
|
1106
763
|
async function detectInstalledAgents() {
|
|
@@ -1111,22 +768,18 @@ async function detectInstalledAgents() {
|
|
|
1111
768
|
}
|
|
1112
769
|
/**
|
|
1113
770
|
* Returns agents that use the universal .agents/skills directory.
|
|
1114
|
-
*
|
|
1115
|
-
* Agents with showInUniversalList: false are excluded.
|
|
771
|
+
* Cursor and OpenCode both use this; they are always shown in the universal list.
|
|
1116
772
|
*/
|
|
1117
773
|
function getUniversalAgents() {
|
|
1118
774
|
return Object.entries(agents).filter(([_, config]) => config.skillsDir === ".agents/skills" && config.showInUniversalList !== false).map(([type]) => type);
|
|
1119
775
|
}
|
|
1120
776
|
/**
|
|
1121
777
|
* Returns agents that use agent-specific skill directories (not universal).
|
|
1122
|
-
*
|
|
778
|
+
* Empty for this fork — we only support Cursor and OpenCode (both use .agents/skills).
|
|
1123
779
|
*/
|
|
1124
780
|
function getNonUniversalAgents() {
|
|
1125
781
|
return Object.entries(agents).filter(([_, config]) => config.skillsDir !== ".agents/skills").map(([type]) => type);
|
|
1126
782
|
}
|
|
1127
|
-
/**
|
|
1128
|
-
* Check if an agent uses the universal .agents/skills directory.
|
|
1129
|
-
*/
|
|
1130
783
|
function isUniversalAgent(type) {
|
|
1131
784
|
return agents[type].skillsDir === ".agents/skills";
|
|
1132
785
|
}
|
|
@@ -2117,7 +1770,7 @@ function createEmptyLocalLock() {
|
|
|
2117
1770
|
}
|
|
2118
1771
|
//#endregion
|
|
2119
1772
|
//#region package.json
|
|
2120
|
-
var version$1 = "1.0.
|
|
1773
|
+
var version$1 = "1.0.3";
|
|
2121
1774
|
//#endregion
|
|
2122
1775
|
//#region src/add.ts
|
|
2123
1776
|
const isCancelled$1 = (value) => typeof value === "symbol";
|
|
@@ -2273,11 +1926,7 @@ async function promptForAgents(message, choices) {
|
|
|
2273
1926
|
lastSelected = await getLastSelectedAgents();
|
|
2274
1927
|
} catch {}
|
|
2275
1928
|
const validAgents = choices.map((c) => c.value);
|
|
2276
|
-
const defaultValues = [
|
|
2277
|
-
"claude-code",
|
|
2278
|
-
"opencode",
|
|
2279
|
-
"codex"
|
|
2280
|
-
].filter((a) => validAgents.includes(a));
|
|
1929
|
+
const defaultValues = ["cursor"].filter((a) => validAgents.includes(a));
|
|
2281
1930
|
let initialValues = [];
|
|
2282
1931
|
if (lastSelected && lastSelected.length > 0) initialValues = lastSelected.filter((a) => validAgents.includes(a));
|
|
2283
1932
|
if (initialValues.length === 0) initialValues = defaultValues;
|
|
@@ -2446,6 +2095,7 @@ async function handleWellKnownSkills(source, url, options, spinner) {
|
|
|
2446
2095
|
if (options.global === void 0 && !options.yes && supportsGlobal) {
|
|
2447
2096
|
const scope = await ve({
|
|
2448
2097
|
message: "Installation scope",
|
|
2098
|
+
initialValue: false,
|
|
2449
2099
|
options: [{
|
|
2450
2100
|
value: false,
|
|
2451
2101
|
label: "Project",
|
|
@@ -2837,6 +2487,7 @@ async function runAdd(args, options = {}) {
|
|
|
2837
2487
|
if (options.global === void 0 && !options.yes && supportsGlobal) {
|
|
2838
2488
|
const scope = await ve({
|
|
2839
2489
|
message: "Installation scope",
|
|
2490
|
+
initialValue: false,
|
|
2840
2491
|
options: [{
|
|
2841
2492
|
value: false,
|
|
2842
2493
|
label: "Project",
|
|
@@ -3114,7 +2765,7 @@ async function promptForFindSkills(options, targetAgents) {
|
|
|
3114
2765
|
if (options?.yes) return;
|
|
3115
2766
|
try {
|
|
3116
2767
|
if (await isPromptDismissed("findSkillsPrompt")) return;
|
|
3117
|
-
if (await isSkillInstalled("find-skills", "
|
|
2768
|
+
if (await isSkillInstalled("find-skills", "cursor", { global: true })) {
|
|
3118
2769
|
await dismissPrompt("findSkillsPrompt");
|
|
3119
2770
|
return;
|
|
3120
2771
|
}
|
|
@@ -3140,11 +2791,11 @@ async function promptForFindSkills(options, targetAgents) {
|
|
|
3140
2791
|
});
|
|
3141
2792
|
} catch {
|
|
3142
2793
|
M.warn("Failed to install find-skills. You can try again with:");
|
|
3143
|
-
M.message(import_picocolors.default.dim(" npx @voidagency/skills add
|
|
2794
|
+
M.message(import_picocolors.default.dim(" npx @voidagency/skills add bitbucket:adminvoid/skills@find-skills -g -y"));
|
|
3144
2795
|
}
|
|
3145
2796
|
} else {
|
|
3146
2797
|
await dismissPrompt("findSkillsPrompt");
|
|
3147
|
-
M.message(import_picocolors.default.dim("You can install it later with: npx @voidagency/skills add
|
|
2798
|
+
M.message(import_picocolors.default.dim("You can install it later with: npx @voidagency/skills add bitbucket:adminvoid/skills@find-skills"));
|
|
3148
2799
|
}
|
|
3149
2800
|
} catch {}
|
|
3150
2801
|
}
|
|
@@ -3193,8 +2844,9 @@ function parseAddOptions(args) {
|
|
|
3193
2844
|
* Agent repos should contain agent.json: { "skills": ["owner/repo", "owner/repo@skill", ...] }
|
|
3194
2845
|
*/
|
|
3195
2846
|
const AGENT_DEFINITIONS_DIR = "agent-definitions";
|
|
3196
|
-
function getAgentDefinitionsBase() {
|
|
3197
|
-
return join(homedir(), AGENTS_DIR$2, AGENT_DEFINITIONS_DIR);
|
|
2847
|
+
function getAgentDefinitionsBase(global) {
|
|
2848
|
+
if (global) return join(homedir(), AGENTS_DIR$2, AGENT_DEFINITIONS_DIR);
|
|
2849
|
+
return join(process.cwd(), AGENTS_DIR$2, AGENT_DEFINITIONS_DIR);
|
|
3198
2850
|
}
|
|
3199
2851
|
/**
|
|
3200
2852
|
* Sanitize a source string into a safe directory name (e.g. "owner/repo" -> "owner-repo").
|
|
@@ -3270,6 +2922,31 @@ async function runAddAgent(agentSource, options = {}) {
|
|
|
3270
2922
|
const baseSlug = parsed.type === "local" ? slugFromSource(repoDir) : getOwnerRepo(parsed) || slugFromSource(source);
|
|
3271
2923
|
const slug = agentName ? `${baseSlug}-${slugFromSource(agentName)}` : baseSlug;
|
|
3272
2924
|
const skillsList = Array.isArray(manifest.skills) ? manifest.skills : [];
|
|
2925
|
+
let installAgentGlobally = options.global ?? false;
|
|
2926
|
+
if (options.global === void 0 && !options.yes) {
|
|
2927
|
+
const scope = await ve({
|
|
2928
|
+
message: "Installation scope",
|
|
2929
|
+
initialValue: false,
|
|
2930
|
+
options: [{
|
|
2931
|
+
value: false,
|
|
2932
|
+
label: "Project",
|
|
2933
|
+
hint: "Current directory (committed with your project)"
|
|
2934
|
+
}, {
|
|
2935
|
+
value: true,
|
|
2936
|
+
label: "Global",
|
|
2937
|
+
hint: "Home directory (available across all projects)"
|
|
2938
|
+
}]
|
|
2939
|
+
});
|
|
2940
|
+
if (pD(scope)) {
|
|
2941
|
+
xe("Installation cancelled");
|
|
2942
|
+
process.exit(0);
|
|
2943
|
+
}
|
|
2944
|
+
installAgentGlobally = scope;
|
|
2945
|
+
}
|
|
2946
|
+
const addOptions = {
|
|
2947
|
+
...options,
|
|
2948
|
+
global: installAgentGlobally
|
|
2949
|
+
};
|
|
3273
2950
|
if (skillsList.length > 0) M.info(`Installing ${skillsList.length} skill(s) from agent manifest...`);
|
|
3274
2951
|
const hasExplicitProvider = (s) => /^(bitbucket:|github:|gitlab:|https?:\/\/)/i.test(String(s).trim());
|
|
3275
2952
|
const resolveSkillSource = (s) => {
|
|
@@ -3283,14 +2960,14 @@ async function runAddAgent(agentSource, options = {}) {
|
|
|
3283
2960
|
const resolved = resolveSkillSource(trimmed);
|
|
3284
2961
|
spinner.start(`Installing skill: ${trimmed}`);
|
|
3285
2962
|
try {
|
|
3286
|
-
await runAdd([resolved],
|
|
2963
|
+
await runAdd([resolved], addOptions);
|
|
3287
2964
|
spinner.stop(`Installed: ${trimmed}`);
|
|
3288
2965
|
} catch (err) {
|
|
3289
2966
|
spinner.stop(`Failed: ${trimmed}`);
|
|
3290
2967
|
M.warn(`Could not install skill ${trimmed}: ${err instanceof Error ? err.message : err}`);
|
|
3291
2968
|
}
|
|
3292
2969
|
}
|
|
3293
|
-
const destDir = join(getAgentDefinitionsBase(), slug);
|
|
2970
|
+
const destDir = join(getAgentDefinitionsBase(installAgentGlobally), slug);
|
|
3294
2971
|
await mkdir(destDir, { recursive: true });
|
|
3295
2972
|
const entries = await readdir(agentDirInRepo, { withFileTypes: true });
|
|
3296
2973
|
for (const ent of entries) await cp(join(agentDirInRepo, ent.name), join(destDir, ent.name), { recursive: ent.isDirectory() });
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@voidagency/skills",
|
|
3
|
-
"version": "1.0.
|
|
3
|
+
"version": "1.0.3",
|
|
4
4
|
"description": "Void Agency skills and agents CLI — install from GitHub or Bitbucket",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"bin": {
|
|
@@ -10,8 +10,7 @@
|
|
|
10
10
|
"files": [
|
|
11
11
|
"dist",
|
|
12
12
|
"bin",
|
|
13
|
-
"README.md"
|
|
14
|
-
"ThirdPartyNoticeText.txt"
|
|
13
|
+
"README.md"
|
|
15
14
|
],
|
|
16
15
|
"scripts": {
|
|
17
16
|
"build": "node --experimental-strip-types scripts/generate-licenses.ts && obuild",
|
|
@@ -33,50 +32,11 @@
|
|
|
33
32
|
},
|
|
34
33
|
"keywords": [
|
|
35
34
|
"cli",
|
|
36
|
-
"agent-skills",
|
|
37
35
|
"skills",
|
|
38
|
-
"ai-agents",
|
|
39
|
-
"amp",
|
|
40
|
-
"antigravity",
|
|
41
|
-
"augment",
|
|
42
|
-
"claude-code",
|
|
43
|
-
"openclaw",
|
|
44
|
-
"cline",
|
|
45
|
-
"codebuddy",
|
|
46
|
-
"codex",
|
|
47
|
-
"command-code",
|
|
48
|
-
"continue",
|
|
49
|
-
"cortex",
|
|
50
|
-
"crush",
|
|
51
36
|
"cursor",
|
|
52
|
-
"droid",
|
|
53
|
-
"gemini-cli",
|
|
54
|
-
"github-copilot",
|
|
55
|
-
"goose",
|
|
56
|
-
"junie",
|
|
57
|
-
"iflow-cli",
|
|
58
|
-
"kilo",
|
|
59
|
-
"kimi-cli",
|
|
60
|
-
"kiro-cli",
|
|
61
|
-
"kode",
|
|
62
|
-
"mcpjam",
|
|
63
|
-
"mistral-vibe",
|
|
64
|
-
"mux",
|
|
65
37
|
"opencode",
|
|
66
|
-
"
|
|
67
|
-
"
|
|
68
|
-
"qoder",
|
|
69
|
-
"qwen-code",
|
|
70
|
-
"replit",
|
|
71
|
-
"roo",
|
|
72
|
-
"trae",
|
|
73
|
-
"trae-cn",
|
|
74
|
-
"windsurf",
|
|
75
|
-
"zencoder",
|
|
76
|
-
"neovate",
|
|
77
|
-
"pochi",
|
|
78
|
-
"adal",
|
|
79
|
-
"universal"
|
|
38
|
+
"ai-agents",
|
|
39
|
+
"agent-skills"
|
|
80
40
|
],
|
|
81
41
|
"repository": {
|
|
82
42
|
"type": "git",
|
package/ThirdPartyNoticeText.txt
DELETED
|
@@ -1,12 +0,0 @@
|
|
|
1
|
-
/*!----------------- Skills CLI ThirdPartyNotices -------------------------------------------------------
|
|
2
|
-
|
|
3
|
-
The Skills CLI incorporates third party material from the projects listed below.
|
|
4
|
-
The original copyright notice and the license under which this material was received
|
|
5
|
-
are set forth below. These licenses and notices are provided for informational purposes only.
|
|
6
|
-
|
|
7
|
-
---------------------------------------------
|
|
8
|
-
Third Party Code Components
|
|
9
|
-
--------------------------------------------
|
|
10
|
-
|
|
11
|
-
================================================================================
|
|
12
|
-
*/
|