agent-skill-manager 0.1.2__py3-none-any.whl → 0.2.0__py3-none-any.whl
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.
- agent_skill_manager-0.2.0.dist-info/METADATA +388 -0
- agent_skill_manager-0.2.0.dist-info/RECORD +12 -0
- skill_manager/__init__.py +17 -2
- skill_manager/agents.py +226 -38
- skill_manager/cli.py +562 -60
- skill_manager/deployment.py +118 -7
- skill_manager/github.py +155 -6
- skill_manager/metadata.py +7 -5
- skill_manager/removal.py +9 -10
- agent_skill_manager-0.1.2.dist-info/METADATA +0 -271
- agent_skill_manager-0.1.2.dist-info/RECORD +0 -12
- {agent_skill_manager-0.1.2.dist-info → agent_skill_manager-0.2.0.dist-info}/WHEEL +0 -0
- {agent_skill_manager-0.1.2.dist-info → agent_skill_manager-0.2.0.dist-info}/entry_points.txt +0 -0
skill_manager/agents.py
CHANGED
|
@@ -8,77 +8,241 @@ from pathlib import Path
|
|
|
8
8
|
|
|
9
9
|
# Agent configuration mapping
|
|
10
10
|
# Each agent has a name, project-level path, and global path
|
|
11
|
+
# Note: global=None means project-only (no global installation supported)
|
|
11
12
|
AGENTS = {
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
"
|
|
15
|
-
"
|
|
13
|
+
# Amp, Kimi Code CLI
|
|
14
|
+
"amp": {
|
|
15
|
+
"name": "Amp",
|
|
16
|
+
"project": ".agents/skills/",
|
|
17
|
+
"global": "~/.config/agents/skills/",
|
|
18
|
+
},
|
|
19
|
+
"kimi-cli": {
|
|
20
|
+
"name": "Kimi Code CLI",
|
|
21
|
+
"project": ".agents/skills/",
|
|
22
|
+
"global": "~/.config/agents/skills/",
|
|
23
|
+
},
|
|
24
|
+
# Antigravity
|
|
25
|
+
"antigravity": {
|
|
26
|
+
"name": "Antigravity",
|
|
27
|
+
"project": ".agent/skills/",
|
|
28
|
+
"global": "~/.gemini/antigravity/skills/",
|
|
16
29
|
},
|
|
30
|
+
# Augment
|
|
31
|
+
"augment": {
|
|
32
|
+
"name": "Augment",
|
|
33
|
+
"project": ".augment/rules/",
|
|
34
|
+
"global": "~/.augment/rules/",
|
|
35
|
+
},
|
|
36
|
+
# Claude Code
|
|
17
37
|
"claude-code": {
|
|
18
38
|
"name": "Claude Code",
|
|
19
39
|
"project": ".claude/skills/",
|
|
20
40
|
"global": "~/.claude/skills/",
|
|
21
41
|
},
|
|
42
|
+
# OpenClaw
|
|
43
|
+
"openclaw": {
|
|
44
|
+
"name": "OpenClaw",
|
|
45
|
+
"project": "skills/",
|
|
46
|
+
"global": "~/.moltbot/skills/",
|
|
47
|
+
},
|
|
48
|
+
# Cline
|
|
49
|
+
"cline": {
|
|
50
|
+
"name": "Cline",
|
|
51
|
+
"project": ".cline/skills/",
|
|
52
|
+
"global": "~/.cline/skills/",
|
|
53
|
+
},
|
|
54
|
+
# CodeBuddy
|
|
55
|
+
"codebuddy": {
|
|
56
|
+
"name": "CodeBuddy",
|
|
57
|
+
"project": ".codebuddy/skills/",
|
|
58
|
+
"global": "~/.codebuddy/skills/",
|
|
59
|
+
},
|
|
60
|
+
# Codex
|
|
22
61
|
"codex": {
|
|
23
62
|
"name": "Codex",
|
|
24
|
-
"project": ".
|
|
63
|
+
"project": ".agents/skills/",
|
|
25
64
|
"global": "~/.codex/skills/",
|
|
26
65
|
},
|
|
66
|
+
# Command Code
|
|
67
|
+
"command-code": {
|
|
68
|
+
"name": "Command Code",
|
|
69
|
+
"project": ".commandcode/skills/",
|
|
70
|
+
"global": "~/.commandcode/skills/",
|
|
71
|
+
},
|
|
72
|
+
# Continue
|
|
73
|
+
"continue": {
|
|
74
|
+
"name": "Continue",
|
|
75
|
+
"project": ".continue/skills/",
|
|
76
|
+
"global": "~/.continue/skills/",
|
|
77
|
+
},
|
|
78
|
+
# Crush
|
|
79
|
+
"crush": {
|
|
80
|
+
"name": "Crush",
|
|
81
|
+
"project": ".crush/skills/",
|
|
82
|
+
"global": "~/.config/crush/skills/",
|
|
83
|
+
},
|
|
84
|
+
# Cursor
|
|
27
85
|
"cursor": {
|
|
28
86
|
"name": "Cursor",
|
|
29
87
|
"project": ".cursor/skills/",
|
|
30
88
|
"global": "~/.cursor/skills/",
|
|
31
89
|
},
|
|
32
|
-
|
|
33
|
-
|
|
90
|
+
# Droid
|
|
91
|
+
"droid": {
|
|
92
|
+
"name": "Droid",
|
|
93
|
+
"project": ".factory/skills/",
|
|
94
|
+
"global": "~/.factory/skills/",
|
|
95
|
+
},
|
|
96
|
+
# Gemini CLI
|
|
97
|
+
"gemini-cli": {
|
|
98
|
+
"name": "Gemini CLI",
|
|
34
99
|
"project": ".agents/skills/",
|
|
35
|
-
"global": "~/.
|
|
100
|
+
"global": "~/.gemini/skills/",
|
|
36
101
|
},
|
|
102
|
+
# GitHub Copilot
|
|
103
|
+
"github-copilot": {
|
|
104
|
+
"name": "GitHub Copilot",
|
|
105
|
+
"project": ".agents/skills/",
|
|
106
|
+
"global": "~/.copilot/skills/",
|
|
107
|
+
},
|
|
108
|
+
# Goose
|
|
109
|
+
"goose": {
|
|
110
|
+
"name": "Goose",
|
|
111
|
+
"project": ".goose/skills/",
|
|
112
|
+
"global": "~/.config/goose/skills/",
|
|
113
|
+
},
|
|
114
|
+
# Junie
|
|
115
|
+
"junie": {
|
|
116
|
+
"name": "Junie",
|
|
117
|
+
"project": ".junie/skills/",
|
|
118
|
+
"global": "~/.junie/skills/",
|
|
119
|
+
},
|
|
120
|
+
# iFlow CLI
|
|
121
|
+
"iflow-cli": {
|
|
122
|
+
"name": "iFlow CLI",
|
|
123
|
+
"project": ".iflow/skills/",
|
|
124
|
+
"global": "~/.iflow/skills/",
|
|
125
|
+
},
|
|
126
|
+
# Kilo Code
|
|
37
127
|
"kilo": {
|
|
38
128
|
"name": "Kilo Code",
|
|
39
129
|
"project": ".kilocode/skills/",
|
|
40
130
|
"global": "~/.kilocode/skills/",
|
|
41
131
|
},
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
"
|
|
45
|
-
"
|
|
132
|
+
# Kiro CLI
|
|
133
|
+
"kiro-cli": {
|
|
134
|
+
"name": "Kiro CLI",
|
|
135
|
+
"project": ".kiro/skills/",
|
|
136
|
+
"global": "~/.kiro/skills/",
|
|
46
137
|
},
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
"
|
|
50
|
-
"
|
|
138
|
+
# Kode
|
|
139
|
+
"kode": {
|
|
140
|
+
"name": "Kode",
|
|
141
|
+
"project": ".kode/skills/",
|
|
142
|
+
"global": "~/.kode/skills/",
|
|
51
143
|
},
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
"
|
|
55
|
-
"
|
|
144
|
+
# MCPJam
|
|
145
|
+
"mcpjam": {
|
|
146
|
+
"name": "MCPJam",
|
|
147
|
+
"project": ".mcpjam/skills/",
|
|
148
|
+
"global": "~/.mcpjam/skills/",
|
|
56
149
|
},
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
"
|
|
60
|
-
"
|
|
150
|
+
# Mistral Vibe
|
|
151
|
+
"mistral-vibe": {
|
|
152
|
+
"name": "Mistral Vibe",
|
|
153
|
+
"project": ".vibe/skills/",
|
|
154
|
+
"global": "~/.vibe/skills/",
|
|
61
155
|
},
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
"
|
|
65
|
-
"
|
|
156
|
+
# Mux
|
|
157
|
+
"mux": {
|
|
158
|
+
"name": "Mux",
|
|
159
|
+
"project": ".mux/skills/",
|
|
160
|
+
"global": "~/.mux/skills/",
|
|
66
161
|
},
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
"
|
|
70
|
-
"
|
|
162
|
+
# OpenCode
|
|
163
|
+
"opencode": {
|
|
164
|
+
"name": "OpenCode",
|
|
165
|
+
"project": ".agents/skills/",
|
|
166
|
+
"global": "~/.config/opencode/skills/",
|
|
71
167
|
},
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
"
|
|
75
|
-
"
|
|
168
|
+
# OpenHands
|
|
169
|
+
"openhands": {
|
|
170
|
+
"name": "OpenHands",
|
|
171
|
+
"project": ".openhands/skills/",
|
|
172
|
+
"global": "~/.openhands/skills/",
|
|
173
|
+
},
|
|
174
|
+
# Pi
|
|
175
|
+
"pi": {
|
|
176
|
+
"name": "Pi",
|
|
177
|
+
"project": ".pi/skills/",
|
|
178
|
+
"global": "~/.pi/agent/skills/",
|
|
179
|
+
},
|
|
180
|
+
# Qoder
|
|
181
|
+
"qoder": {
|
|
182
|
+
"name": "Qoder",
|
|
183
|
+
"project": ".qoder/skills/",
|
|
184
|
+
"global": "~/.qoder/skills/",
|
|
185
|
+
},
|
|
186
|
+
# Qwen Code
|
|
187
|
+
"qwen-code": {
|
|
188
|
+
"name": "Qwen Code",
|
|
189
|
+
"project": ".qwen/skills/",
|
|
190
|
+
"global": "~/.qwen/skills/",
|
|
76
191
|
},
|
|
192
|
+
# Replit (project-only)
|
|
193
|
+
"replit": {
|
|
194
|
+
"name": "Replit",
|
|
195
|
+
"project": ".agents/skills/",
|
|
196
|
+
"global": None,
|
|
197
|
+
},
|
|
198
|
+
# Roo Code
|
|
199
|
+
"roo": {
|
|
200
|
+
"name": "Roo Code",
|
|
201
|
+
"project": ".roo/skills/",
|
|
202
|
+
"global": "~/.roo/skills/",
|
|
203
|
+
},
|
|
204
|
+
# Trae
|
|
205
|
+
"trae": {
|
|
206
|
+
"name": "Trae",
|
|
207
|
+
"project": ".trae/skills/",
|
|
208
|
+
"global": "~/.trae/skills/",
|
|
209
|
+
},
|
|
210
|
+
# Trae CN
|
|
211
|
+
"trae-cn": {
|
|
212
|
+
"name": "Trae CN",
|
|
213
|
+
"project": ".trae/skills/",
|
|
214
|
+
"global": "~/.trae-cn/skills/",
|
|
215
|
+
},
|
|
216
|
+
# Windsurf
|
|
77
217
|
"windsurf": {
|
|
78
218
|
"name": "Windsurf",
|
|
79
219
|
"project": ".windsurf/skills/",
|
|
80
220
|
"global": "~/.codeium/windsurf/skills/",
|
|
81
221
|
},
|
|
222
|
+
# Zencoder
|
|
223
|
+
"zencoder": {
|
|
224
|
+
"name": "Zencoder",
|
|
225
|
+
"project": ".zencoder/skills/",
|
|
226
|
+
"global": "~/.zencoder/skills/",
|
|
227
|
+
},
|
|
228
|
+
# Neovate
|
|
229
|
+
"neovate": {
|
|
230
|
+
"name": "Neovate",
|
|
231
|
+
"project": ".neovate/skills/",
|
|
232
|
+
"global": "~/.neovate/skills/",
|
|
233
|
+
},
|
|
234
|
+
# Pochi
|
|
235
|
+
"pochi": {
|
|
236
|
+
"name": "Pochi",
|
|
237
|
+
"project": ".pochi/skills/",
|
|
238
|
+
"global": "~/.pochi/skills/",
|
|
239
|
+
},
|
|
240
|
+
# AdaL
|
|
241
|
+
"adal": {
|
|
242
|
+
"name": "AdaL",
|
|
243
|
+
"project": ".adal/skills/",
|
|
244
|
+
"global": "~/.adal/skills/",
|
|
245
|
+
},
|
|
82
246
|
}
|
|
83
247
|
|
|
84
248
|
|
|
@@ -91,7 +255,10 @@ def detect_existing_agents() -> dict[str, Path]:
|
|
|
91
255
|
"""
|
|
92
256
|
existing = {}
|
|
93
257
|
for agent_id, info in AGENTS.items():
|
|
94
|
-
global_path =
|
|
258
|
+
global_path = info.get("global")
|
|
259
|
+
if global_path is None:
|
|
260
|
+
continue
|
|
261
|
+
global_path = Path(global_path).expanduser()
|
|
95
262
|
if global_path.exists():
|
|
96
263
|
existing[agent_id] = global_path
|
|
97
264
|
return existing
|
|
@@ -108,6 +275,9 @@ def get_agent_path(agent_id: str, deployment_type: str = "global", project_root:
|
|
|
108
275
|
|
|
109
276
|
Returns:
|
|
110
277
|
The target path for the agent
|
|
278
|
+
|
|
279
|
+
Raises:
|
|
280
|
+
ValueError: If the agent doesn't support global deployment (global=None)
|
|
111
281
|
"""
|
|
112
282
|
if agent_id not in AGENTS:
|
|
113
283
|
raise ValueError(f"Unknown agent: {agent_id}")
|
|
@@ -115,13 +285,31 @@ def get_agent_path(agent_id: str, deployment_type: str = "global", project_root:
|
|
|
115
285
|
info = AGENTS[agent_id]
|
|
116
286
|
|
|
117
287
|
if deployment_type == "global":
|
|
118
|
-
|
|
288
|
+
global_path = info.get("global")
|
|
289
|
+
if global_path is None:
|
|
290
|
+
raise ValueError(f"Agent '{agent_id}' does not support global deployment (project-only)")
|
|
291
|
+
return Path(global_path).expanduser()
|
|
119
292
|
else:
|
|
120
293
|
if project_root is None:
|
|
121
294
|
project_root = Path.cwd()
|
|
122
295
|
return project_root / info["project"]
|
|
123
296
|
|
|
124
297
|
|
|
298
|
+
def supports_global_deployment(agent_id: str) -> bool:
|
|
299
|
+
"""
|
|
300
|
+
Check if an agent supports global deployment.
|
|
301
|
+
|
|
302
|
+
Args:
|
|
303
|
+
agent_id: The agent identifier
|
|
304
|
+
|
|
305
|
+
Returns:
|
|
306
|
+
True if the agent supports global deployment, False otherwise
|
|
307
|
+
"""
|
|
308
|
+
if agent_id not in AGENTS:
|
|
309
|
+
raise ValueError(f"Unknown agent: {agent_id}")
|
|
310
|
+
return AGENTS[agent_id].get("global") is not None
|
|
311
|
+
|
|
312
|
+
|
|
125
313
|
def get_agent_name(agent_id: str) -> str:
|
|
126
314
|
"""
|
|
127
315
|
Get the display name for an agent.
|