@voidagency/skills 1.0.2 → 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 +39 -378
- package/package.json +4 -44
- package/ThirdPartyNoticeText.txt +0 -12
package/dist/cli.mjs
CHANGED
|
@@ -740,123 +740,7 @@ function filterSkills(skills, inputNames) {
|
|
|
740
740
|
//#region src/agents.ts
|
|
741
741
|
const home = homedir();
|
|
742
742
|
const configHome = xdgConfig ?? join(home, ".config");
|
|
743
|
-
const codexHome = process.env.CODEX_HOME?.trim() || join(home, ".codex");
|
|
744
|
-
const claudeHome = process.env.CLAUDE_CONFIG_DIR?.trim() || join(home, ".claude");
|
|
745
|
-
function getOpenClawGlobalSkillsDir(homeDir = home, pathExists = existsSync) {
|
|
746
|
-
if (pathExists(join(homeDir, ".openclaw"))) return join(homeDir, ".openclaw/skills");
|
|
747
|
-
if (pathExists(join(homeDir, ".clawdbot"))) return join(homeDir, ".clawdbot/skills");
|
|
748
|
-
if (pathExists(join(homeDir, ".moltbot"))) return join(homeDir, ".moltbot/skills");
|
|
749
|
-
return join(homeDir, ".openclaw/skills");
|
|
750
|
-
}
|
|
751
743
|
const agents = {
|
|
752
|
-
amp: {
|
|
753
|
-
name: "amp",
|
|
754
|
-
displayName: "Amp",
|
|
755
|
-
skillsDir: ".agents/skills",
|
|
756
|
-
globalSkillsDir: join(configHome, "agents/skills"),
|
|
757
|
-
detectInstalled: async () => {
|
|
758
|
-
return existsSync(join(configHome, "amp"));
|
|
759
|
-
}
|
|
760
|
-
},
|
|
761
|
-
antigravity: {
|
|
762
|
-
name: "antigravity",
|
|
763
|
-
displayName: "Antigravity",
|
|
764
|
-
skillsDir: ".agent/skills",
|
|
765
|
-
globalSkillsDir: join(home, ".gemini/antigravity/skills"),
|
|
766
|
-
detectInstalled: async () => {
|
|
767
|
-
return existsSync(join(home, ".gemini/antigravity"));
|
|
768
|
-
}
|
|
769
|
-
},
|
|
770
|
-
augment: {
|
|
771
|
-
name: "augment",
|
|
772
|
-
displayName: "Augment",
|
|
773
|
-
skillsDir: ".augment/skills",
|
|
774
|
-
globalSkillsDir: join(home, ".augment/skills"),
|
|
775
|
-
detectInstalled: async () => {
|
|
776
|
-
return existsSync(join(home, ".augment"));
|
|
777
|
-
}
|
|
778
|
-
},
|
|
779
|
-
"claude-code": {
|
|
780
|
-
name: "claude-code",
|
|
781
|
-
displayName: "Claude Code",
|
|
782
|
-
skillsDir: ".claude/skills",
|
|
783
|
-
globalSkillsDir: join(claudeHome, "skills"),
|
|
784
|
-
detectInstalled: async () => {
|
|
785
|
-
return existsSync(claudeHome);
|
|
786
|
-
}
|
|
787
|
-
},
|
|
788
|
-
openclaw: {
|
|
789
|
-
name: "openclaw",
|
|
790
|
-
displayName: "OpenClaw",
|
|
791
|
-
skillsDir: "skills",
|
|
792
|
-
globalSkillsDir: getOpenClawGlobalSkillsDir(),
|
|
793
|
-
detectInstalled: async () => {
|
|
794
|
-
return existsSync(join(home, ".openclaw")) || existsSync(join(home, ".clawdbot")) || existsSync(join(home, ".moltbot"));
|
|
795
|
-
}
|
|
796
|
-
},
|
|
797
|
-
cline: {
|
|
798
|
-
name: "cline",
|
|
799
|
-
displayName: "Cline",
|
|
800
|
-
skillsDir: ".agents/skills",
|
|
801
|
-
globalSkillsDir: join(home, ".agents", "skills"),
|
|
802
|
-
detectInstalled: async () => {
|
|
803
|
-
return existsSync(join(home, ".cline"));
|
|
804
|
-
}
|
|
805
|
-
},
|
|
806
|
-
codebuddy: {
|
|
807
|
-
name: "codebuddy",
|
|
808
|
-
displayName: "CodeBuddy",
|
|
809
|
-
skillsDir: ".codebuddy/skills",
|
|
810
|
-
globalSkillsDir: join(home, ".codebuddy/skills"),
|
|
811
|
-
detectInstalled: async () => {
|
|
812
|
-
return existsSync(join(process.cwd(), ".codebuddy")) || existsSync(join(home, ".codebuddy"));
|
|
813
|
-
}
|
|
814
|
-
},
|
|
815
|
-
codex: {
|
|
816
|
-
name: "codex",
|
|
817
|
-
displayName: "Codex",
|
|
818
|
-
skillsDir: ".agents/skills",
|
|
819
|
-
globalSkillsDir: join(codexHome, "skills"),
|
|
820
|
-
detectInstalled: async () => {
|
|
821
|
-
return existsSync(codexHome) || existsSync("/etc/codex");
|
|
822
|
-
}
|
|
823
|
-
},
|
|
824
|
-
"command-code": {
|
|
825
|
-
name: "command-code",
|
|
826
|
-
displayName: "Command Code",
|
|
827
|
-
skillsDir: ".commandcode/skills",
|
|
828
|
-
globalSkillsDir: join(home, ".commandcode/skills"),
|
|
829
|
-
detectInstalled: async () => {
|
|
830
|
-
return existsSync(join(home, ".commandcode"));
|
|
831
|
-
}
|
|
832
|
-
},
|
|
833
|
-
continue: {
|
|
834
|
-
name: "continue",
|
|
835
|
-
displayName: "Continue",
|
|
836
|
-
skillsDir: ".continue/skills",
|
|
837
|
-
globalSkillsDir: join(home, ".continue/skills"),
|
|
838
|
-
detectInstalled: async () => {
|
|
839
|
-
return existsSync(join(process.cwd(), ".continue")) || existsSync(join(home, ".continue"));
|
|
840
|
-
}
|
|
841
|
-
},
|
|
842
|
-
cortex: {
|
|
843
|
-
name: "cortex",
|
|
844
|
-
displayName: "Cortex Code",
|
|
845
|
-
skillsDir: ".cortex/skills",
|
|
846
|
-
globalSkillsDir: join(home, ".snowflake/cortex/skills"),
|
|
847
|
-
detectInstalled: async () => {
|
|
848
|
-
return existsSync(join(home, ".snowflake/cortex"));
|
|
849
|
-
}
|
|
850
|
-
},
|
|
851
|
-
crush: {
|
|
852
|
-
name: "crush",
|
|
853
|
-
displayName: "Crush",
|
|
854
|
-
skillsDir: ".crush/skills",
|
|
855
|
-
globalSkillsDir: join(home, ".config/crush/skills"),
|
|
856
|
-
detectInstalled: async () => {
|
|
857
|
-
return existsSync(join(home, ".config/crush"));
|
|
858
|
-
}
|
|
859
|
-
},
|
|
860
744
|
cursor: {
|
|
861
745
|
name: "cursor",
|
|
862
746
|
displayName: "Cursor",
|
|
@@ -866,123 +750,6 @@ const agents = {
|
|
|
866
750
|
return existsSync(join(home, ".cursor"));
|
|
867
751
|
}
|
|
868
752
|
},
|
|
869
|
-
droid: {
|
|
870
|
-
name: "droid",
|
|
871
|
-
displayName: "Droid",
|
|
872
|
-
skillsDir: ".factory/skills",
|
|
873
|
-
globalSkillsDir: join(home, ".factory/skills"),
|
|
874
|
-
detectInstalled: async () => {
|
|
875
|
-
return existsSync(join(home, ".factory"));
|
|
876
|
-
}
|
|
877
|
-
},
|
|
878
|
-
"gemini-cli": {
|
|
879
|
-
name: "gemini-cli",
|
|
880
|
-
displayName: "Gemini CLI",
|
|
881
|
-
skillsDir: ".agents/skills",
|
|
882
|
-
globalSkillsDir: join(home, ".gemini/skills"),
|
|
883
|
-
detectInstalled: async () => {
|
|
884
|
-
return existsSync(join(home, ".gemini"));
|
|
885
|
-
}
|
|
886
|
-
},
|
|
887
|
-
"github-copilot": {
|
|
888
|
-
name: "github-copilot",
|
|
889
|
-
displayName: "GitHub Copilot",
|
|
890
|
-
skillsDir: ".agents/skills",
|
|
891
|
-
globalSkillsDir: join(home, ".copilot/skills"),
|
|
892
|
-
detectInstalled: async () => {
|
|
893
|
-
return existsSync(join(home, ".copilot"));
|
|
894
|
-
}
|
|
895
|
-
},
|
|
896
|
-
goose: {
|
|
897
|
-
name: "goose",
|
|
898
|
-
displayName: "Goose",
|
|
899
|
-
skillsDir: ".goose/skills",
|
|
900
|
-
globalSkillsDir: join(configHome, "goose/skills"),
|
|
901
|
-
detectInstalled: async () => {
|
|
902
|
-
return existsSync(join(configHome, "goose"));
|
|
903
|
-
}
|
|
904
|
-
},
|
|
905
|
-
junie: {
|
|
906
|
-
name: "junie",
|
|
907
|
-
displayName: "Junie",
|
|
908
|
-
skillsDir: ".junie/skills",
|
|
909
|
-
globalSkillsDir: join(home, ".junie/skills"),
|
|
910
|
-
detectInstalled: async () => {
|
|
911
|
-
return existsSync(join(home, ".junie"));
|
|
912
|
-
}
|
|
913
|
-
},
|
|
914
|
-
"iflow-cli": {
|
|
915
|
-
name: "iflow-cli",
|
|
916
|
-
displayName: "iFlow CLI",
|
|
917
|
-
skillsDir: ".iflow/skills",
|
|
918
|
-
globalSkillsDir: join(home, ".iflow/skills"),
|
|
919
|
-
detectInstalled: async () => {
|
|
920
|
-
return existsSync(join(home, ".iflow"));
|
|
921
|
-
}
|
|
922
|
-
},
|
|
923
|
-
kilo: {
|
|
924
|
-
name: "kilo",
|
|
925
|
-
displayName: "Kilo Code",
|
|
926
|
-
skillsDir: ".kilocode/skills",
|
|
927
|
-
globalSkillsDir: join(home, ".kilocode/skills"),
|
|
928
|
-
detectInstalled: async () => {
|
|
929
|
-
return existsSync(join(home, ".kilocode"));
|
|
930
|
-
}
|
|
931
|
-
},
|
|
932
|
-
"kimi-cli": {
|
|
933
|
-
name: "kimi-cli",
|
|
934
|
-
displayName: "Kimi Code CLI",
|
|
935
|
-
skillsDir: ".agents/skills",
|
|
936
|
-
globalSkillsDir: join(home, ".config/agents/skills"),
|
|
937
|
-
detectInstalled: async () => {
|
|
938
|
-
return existsSync(join(home, ".kimi"));
|
|
939
|
-
}
|
|
940
|
-
},
|
|
941
|
-
"kiro-cli": {
|
|
942
|
-
name: "kiro-cli",
|
|
943
|
-
displayName: "Kiro CLI",
|
|
944
|
-
skillsDir: ".kiro/skills",
|
|
945
|
-
globalSkillsDir: join(home, ".kiro/skills"),
|
|
946
|
-
detectInstalled: async () => {
|
|
947
|
-
return existsSync(join(home, ".kiro"));
|
|
948
|
-
}
|
|
949
|
-
},
|
|
950
|
-
kode: {
|
|
951
|
-
name: "kode",
|
|
952
|
-
displayName: "Kode",
|
|
953
|
-
skillsDir: ".kode/skills",
|
|
954
|
-
globalSkillsDir: join(home, ".kode/skills"),
|
|
955
|
-
detectInstalled: async () => {
|
|
956
|
-
return existsSync(join(home, ".kode"));
|
|
957
|
-
}
|
|
958
|
-
},
|
|
959
|
-
mcpjam: {
|
|
960
|
-
name: "mcpjam",
|
|
961
|
-
displayName: "MCPJam",
|
|
962
|
-
skillsDir: ".mcpjam/skills",
|
|
963
|
-
globalSkillsDir: join(home, ".mcpjam/skills"),
|
|
964
|
-
detectInstalled: async () => {
|
|
965
|
-
return existsSync(join(home, ".mcpjam"));
|
|
966
|
-
}
|
|
967
|
-
},
|
|
968
|
-
"mistral-vibe": {
|
|
969
|
-
name: "mistral-vibe",
|
|
970
|
-
displayName: "Mistral Vibe",
|
|
971
|
-
skillsDir: ".vibe/skills",
|
|
972
|
-
globalSkillsDir: join(home, ".vibe/skills"),
|
|
973
|
-
detectInstalled: async () => {
|
|
974
|
-
return existsSync(join(home, ".vibe"));
|
|
975
|
-
}
|
|
976
|
-
},
|
|
977
|
-
mux: {
|
|
978
|
-
name: "mux",
|
|
979
|
-
displayName: "Mux",
|
|
980
|
-
skillsDir: ".mux/skills",
|
|
981
|
-
globalSkillsDir: join(home, ".mux/skills"),
|
|
982
|
-
detectInstalled: async () => {
|
|
983
|
-
return existsSync(join(home, ".mux"));
|
|
984
|
-
}
|
|
985
|
-
},
|
|
986
753
|
opencode: {
|
|
987
754
|
name: "opencode",
|
|
988
755
|
displayName: "OpenCode",
|
|
@@ -991,132 +758,6 @@ const agents = {
|
|
|
991
758
|
detectInstalled: async () => {
|
|
992
759
|
return existsSync(join(configHome, "opencode"));
|
|
993
760
|
}
|
|
994
|
-
},
|
|
995
|
-
openhands: {
|
|
996
|
-
name: "openhands",
|
|
997
|
-
displayName: "OpenHands",
|
|
998
|
-
skillsDir: ".openhands/skills",
|
|
999
|
-
globalSkillsDir: join(home, ".openhands/skills"),
|
|
1000
|
-
detectInstalled: async () => {
|
|
1001
|
-
return existsSync(join(home, ".openhands"));
|
|
1002
|
-
}
|
|
1003
|
-
},
|
|
1004
|
-
pi: {
|
|
1005
|
-
name: "pi",
|
|
1006
|
-
displayName: "Pi",
|
|
1007
|
-
skillsDir: ".pi/skills",
|
|
1008
|
-
globalSkillsDir: join(home, ".pi/agent/skills"),
|
|
1009
|
-
detectInstalled: async () => {
|
|
1010
|
-
return existsSync(join(home, ".pi/agent"));
|
|
1011
|
-
}
|
|
1012
|
-
},
|
|
1013
|
-
qoder: {
|
|
1014
|
-
name: "qoder",
|
|
1015
|
-
displayName: "Qoder",
|
|
1016
|
-
skillsDir: ".qoder/skills",
|
|
1017
|
-
globalSkillsDir: join(home, ".qoder/skills"),
|
|
1018
|
-
detectInstalled: async () => {
|
|
1019
|
-
return existsSync(join(home, ".qoder"));
|
|
1020
|
-
}
|
|
1021
|
-
},
|
|
1022
|
-
"qwen-code": {
|
|
1023
|
-
name: "qwen-code",
|
|
1024
|
-
displayName: "Qwen Code",
|
|
1025
|
-
skillsDir: ".qwen/skills",
|
|
1026
|
-
globalSkillsDir: join(home, ".qwen/skills"),
|
|
1027
|
-
detectInstalled: async () => {
|
|
1028
|
-
return existsSync(join(home, ".qwen"));
|
|
1029
|
-
}
|
|
1030
|
-
},
|
|
1031
|
-
replit: {
|
|
1032
|
-
name: "replit",
|
|
1033
|
-
displayName: "Replit",
|
|
1034
|
-
skillsDir: ".agents/skills",
|
|
1035
|
-
globalSkillsDir: join(configHome, "agents/skills"),
|
|
1036
|
-
showInUniversalList: false,
|
|
1037
|
-
detectInstalled: async () => {
|
|
1038
|
-
return existsSync(join(process.cwd(), ".replit"));
|
|
1039
|
-
}
|
|
1040
|
-
},
|
|
1041
|
-
roo: {
|
|
1042
|
-
name: "roo",
|
|
1043
|
-
displayName: "Roo Code",
|
|
1044
|
-
skillsDir: ".roo/skills",
|
|
1045
|
-
globalSkillsDir: join(home, ".roo/skills"),
|
|
1046
|
-
detectInstalled: async () => {
|
|
1047
|
-
return existsSync(join(home, ".roo"));
|
|
1048
|
-
}
|
|
1049
|
-
},
|
|
1050
|
-
trae: {
|
|
1051
|
-
name: "trae",
|
|
1052
|
-
displayName: "Trae",
|
|
1053
|
-
skillsDir: ".trae/skills",
|
|
1054
|
-
globalSkillsDir: join(home, ".trae/skills"),
|
|
1055
|
-
detectInstalled: async () => {
|
|
1056
|
-
return existsSync(join(home, ".trae"));
|
|
1057
|
-
}
|
|
1058
|
-
},
|
|
1059
|
-
"trae-cn": {
|
|
1060
|
-
name: "trae-cn",
|
|
1061
|
-
displayName: "Trae CN",
|
|
1062
|
-
skillsDir: ".trae/skills",
|
|
1063
|
-
globalSkillsDir: join(home, ".trae-cn/skills"),
|
|
1064
|
-
detectInstalled: async () => {
|
|
1065
|
-
return existsSync(join(home, ".trae-cn"));
|
|
1066
|
-
}
|
|
1067
|
-
},
|
|
1068
|
-
windsurf: {
|
|
1069
|
-
name: "windsurf",
|
|
1070
|
-
displayName: "Windsurf",
|
|
1071
|
-
skillsDir: ".windsurf/skills",
|
|
1072
|
-
globalSkillsDir: join(home, ".codeium/windsurf/skills"),
|
|
1073
|
-
detectInstalled: async () => {
|
|
1074
|
-
return existsSync(join(home, ".codeium/windsurf"));
|
|
1075
|
-
}
|
|
1076
|
-
},
|
|
1077
|
-
zencoder: {
|
|
1078
|
-
name: "zencoder",
|
|
1079
|
-
displayName: "Zencoder",
|
|
1080
|
-
skillsDir: ".zencoder/skills",
|
|
1081
|
-
globalSkillsDir: join(home, ".zencoder/skills"),
|
|
1082
|
-
detectInstalled: async () => {
|
|
1083
|
-
return existsSync(join(home, ".zencoder"));
|
|
1084
|
-
}
|
|
1085
|
-
},
|
|
1086
|
-
neovate: {
|
|
1087
|
-
name: "neovate",
|
|
1088
|
-
displayName: "Neovate",
|
|
1089
|
-
skillsDir: ".neovate/skills",
|
|
1090
|
-
globalSkillsDir: join(home, ".neovate/skills"),
|
|
1091
|
-
detectInstalled: async () => {
|
|
1092
|
-
return existsSync(join(home, ".neovate"));
|
|
1093
|
-
}
|
|
1094
|
-
},
|
|
1095
|
-
pochi: {
|
|
1096
|
-
name: "pochi",
|
|
1097
|
-
displayName: "Pochi",
|
|
1098
|
-
skillsDir: ".pochi/skills",
|
|
1099
|
-
globalSkillsDir: join(home, ".pochi/skills"),
|
|
1100
|
-
detectInstalled: async () => {
|
|
1101
|
-
return existsSync(join(home, ".pochi"));
|
|
1102
|
-
}
|
|
1103
|
-
},
|
|
1104
|
-
adal: {
|
|
1105
|
-
name: "adal",
|
|
1106
|
-
displayName: "AdaL",
|
|
1107
|
-
skillsDir: ".adal/skills",
|
|
1108
|
-
globalSkillsDir: join(home, ".adal/skills"),
|
|
1109
|
-
detectInstalled: async () => {
|
|
1110
|
-
return existsSync(join(home, ".adal"));
|
|
1111
|
-
}
|
|
1112
|
-
},
|
|
1113
|
-
universal: {
|
|
1114
|
-
name: "universal",
|
|
1115
|
-
displayName: "Universal",
|
|
1116
|
-
skillsDir: ".agents/skills",
|
|
1117
|
-
globalSkillsDir: join(configHome, "agents/skills"),
|
|
1118
|
-
showInUniversalList: false,
|
|
1119
|
-
detectInstalled: async () => false
|
|
1120
761
|
}
|
|
1121
762
|
};
|
|
1122
763
|
async function detectInstalledAgents() {
|
|
@@ -1127,22 +768,18 @@ async function detectInstalledAgents() {
|
|
|
1127
768
|
}
|
|
1128
769
|
/**
|
|
1129
770
|
* Returns agents that use the universal .agents/skills directory.
|
|
1130
|
-
*
|
|
1131
|
-
* Agents with showInUniversalList: false are excluded.
|
|
771
|
+
* Cursor and OpenCode both use this; they are always shown in the universal list.
|
|
1132
772
|
*/
|
|
1133
773
|
function getUniversalAgents() {
|
|
1134
774
|
return Object.entries(agents).filter(([_, config]) => config.skillsDir === ".agents/skills" && config.showInUniversalList !== false).map(([type]) => type);
|
|
1135
775
|
}
|
|
1136
776
|
/**
|
|
1137
777
|
* Returns agents that use agent-specific skill directories (not universal).
|
|
1138
|
-
*
|
|
778
|
+
* Empty for this fork — we only support Cursor and OpenCode (both use .agents/skills).
|
|
1139
779
|
*/
|
|
1140
780
|
function getNonUniversalAgents() {
|
|
1141
781
|
return Object.entries(agents).filter(([_, config]) => config.skillsDir !== ".agents/skills").map(([type]) => type);
|
|
1142
782
|
}
|
|
1143
|
-
/**
|
|
1144
|
-
* Check if an agent uses the universal .agents/skills directory.
|
|
1145
|
-
*/
|
|
1146
783
|
function isUniversalAgent(type) {
|
|
1147
784
|
return agents[type].skillsDir === ".agents/skills";
|
|
1148
785
|
}
|
|
@@ -2133,7 +1770,7 @@ function createEmptyLocalLock() {
|
|
|
2133
1770
|
}
|
|
2134
1771
|
//#endregion
|
|
2135
1772
|
//#region package.json
|
|
2136
|
-
var version$1 = "1.0.
|
|
1773
|
+
var version$1 = "1.0.3";
|
|
2137
1774
|
//#endregion
|
|
2138
1775
|
//#region src/add.ts
|
|
2139
1776
|
const isCancelled$1 = (value) => typeof value === "symbol";
|
|
@@ -2289,11 +1926,7 @@ async function promptForAgents(message, choices) {
|
|
|
2289
1926
|
lastSelected = await getLastSelectedAgents();
|
|
2290
1927
|
} catch {}
|
|
2291
1928
|
const validAgents = choices.map((c) => c.value);
|
|
2292
|
-
const defaultValues = [
|
|
2293
|
-
"claude-code",
|
|
2294
|
-
"opencode",
|
|
2295
|
-
"codex"
|
|
2296
|
-
].filter((a) => validAgents.includes(a));
|
|
1929
|
+
const defaultValues = ["cursor"].filter((a) => validAgents.includes(a));
|
|
2297
1930
|
let initialValues = [];
|
|
2298
1931
|
if (lastSelected && lastSelected.length > 0) initialValues = lastSelected.filter((a) => validAgents.includes(a));
|
|
2299
1932
|
if (initialValues.length === 0) initialValues = defaultValues;
|
|
@@ -2462,6 +2095,7 @@ async function handleWellKnownSkills(source, url, options, spinner) {
|
|
|
2462
2095
|
if (options.global === void 0 && !options.yes && supportsGlobal) {
|
|
2463
2096
|
const scope = await ve({
|
|
2464
2097
|
message: "Installation scope",
|
|
2098
|
+
initialValue: false,
|
|
2465
2099
|
options: [{
|
|
2466
2100
|
value: false,
|
|
2467
2101
|
label: "Project",
|
|
@@ -2853,6 +2487,7 @@ async function runAdd(args, options = {}) {
|
|
|
2853
2487
|
if (options.global === void 0 && !options.yes && supportsGlobal) {
|
|
2854
2488
|
const scope = await ve({
|
|
2855
2489
|
message: "Installation scope",
|
|
2490
|
+
initialValue: false,
|
|
2856
2491
|
options: [{
|
|
2857
2492
|
value: false,
|
|
2858
2493
|
label: "Project",
|
|
@@ -3130,7 +2765,7 @@ async function promptForFindSkills(options, targetAgents) {
|
|
|
3130
2765
|
if (options?.yes) return;
|
|
3131
2766
|
try {
|
|
3132
2767
|
if (await isPromptDismissed("findSkillsPrompt")) return;
|
|
3133
|
-
if (await isSkillInstalled("find-skills", "
|
|
2768
|
+
if (await isSkillInstalled("find-skills", "cursor", { global: true })) {
|
|
3134
2769
|
await dismissPrompt("findSkillsPrompt");
|
|
3135
2770
|
return;
|
|
3136
2771
|
}
|
|
@@ -3156,11 +2791,11 @@ async function promptForFindSkills(options, targetAgents) {
|
|
|
3156
2791
|
});
|
|
3157
2792
|
} catch {
|
|
3158
2793
|
M.warn("Failed to install find-skills. You can try again with:");
|
|
3159
|
-
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"));
|
|
3160
2795
|
}
|
|
3161
2796
|
} else {
|
|
3162
2797
|
await dismissPrompt("findSkillsPrompt");
|
|
3163
|
-
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"));
|
|
3164
2799
|
}
|
|
3165
2800
|
} catch {}
|
|
3166
2801
|
}
|
|
@@ -3209,8 +2844,9 @@ function parseAddOptions(args) {
|
|
|
3209
2844
|
* Agent repos should contain agent.json: { "skills": ["owner/repo", "owner/repo@skill", ...] }
|
|
3210
2845
|
*/
|
|
3211
2846
|
const AGENT_DEFINITIONS_DIR = "agent-definitions";
|
|
3212
|
-
function getAgentDefinitionsBase() {
|
|
3213
|
-
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);
|
|
3214
2850
|
}
|
|
3215
2851
|
/**
|
|
3216
2852
|
* Sanitize a source string into a safe directory name (e.g. "owner/repo" -> "owner-repo").
|
|
@@ -3286,6 +2922,31 @@ async function runAddAgent(agentSource, options = {}) {
|
|
|
3286
2922
|
const baseSlug = parsed.type === "local" ? slugFromSource(repoDir) : getOwnerRepo(parsed) || slugFromSource(source);
|
|
3287
2923
|
const slug = agentName ? `${baseSlug}-${slugFromSource(agentName)}` : baseSlug;
|
|
3288
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
|
+
};
|
|
3289
2950
|
if (skillsList.length > 0) M.info(`Installing ${skillsList.length} skill(s) from agent manifest...`);
|
|
3290
2951
|
const hasExplicitProvider = (s) => /^(bitbucket:|github:|gitlab:|https?:\/\/)/i.test(String(s).trim());
|
|
3291
2952
|
const resolveSkillSource = (s) => {
|
|
@@ -3299,14 +2960,14 @@ async function runAddAgent(agentSource, options = {}) {
|
|
|
3299
2960
|
const resolved = resolveSkillSource(trimmed);
|
|
3300
2961
|
spinner.start(`Installing skill: ${trimmed}`);
|
|
3301
2962
|
try {
|
|
3302
|
-
await runAdd([resolved],
|
|
2963
|
+
await runAdd([resolved], addOptions);
|
|
3303
2964
|
spinner.stop(`Installed: ${trimmed}`);
|
|
3304
2965
|
} catch (err) {
|
|
3305
2966
|
spinner.stop(`Failed: ${trimmed}`);
|
|
3306
2967
|
M.warn(`Could not install skill ${trimmed}: ${err instanceof Error ? err.message : err}`);
|
|
3307
2968
|
}
|
|
3308
2969
|
}
|
|
3309
|
-
const destDir = join(getAgentDefinitionsBase(), slug);
|
|
2970
|
+
const destDir = join(getAgentDefinitionsBase(installAgentGlobally), slug);
|
|
3310
2971
|
await mkdir(destDir, { recursive: true });
|
|
3311
2972
|
const entries = await readdir(agentDirInRepo, { withFileTypes: true });
|
|
3312
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
|
-
*/
|