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.
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
- "opencode": {
13
- "name": "OpenCode",
14
- "project": ".opencode/skills/",
15
- "global": "~/.config/opencode/skills/",
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": ".codex/skills/",
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
- "amp": {
33
- "name": "Amp",
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": "~/.config/agents/skills/",
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
- "roo": {
43
- "name": "Roo Code",
44
- "project": ".roo/skills/",
45
- "global": "~/.roo/skills/",
132
+ # Kiro CLI
133
+ "kiro-cli": {
134
+ "name": "Kiro CLI",
135
+ "project": ".kiro/skills/",
136
+ "global": "~/.kiro/skills/",
46
137
  },
47
- "goose": {
48
- "name": "Goose",
49
- "project": ".goose/skills/",
50
- "global": "~/.config/goose/skills/",
138
+ # Kode
139
+ "kode": {
140
+ "name": "Kode",
141
+ "project": ".kode/skills/",
142
+ "global": "~/.kode/skills/",
51
143
  },
52
- "gemini-cli": {
53
- "name": "Gemini CLI",
54
- "project": ".gemini/skills/",
55
- "global": "~/.gemini/skills/",
144
+ # MCPJam
145
+ "mcpjam": {
146
+ "name": "MCPJam",
147
+ "project": ".mcpjam/skills/",
148
+ "global": "~/.mcpjam/skills/",
56
149
  },
57
- "antigravity": {
58
- "name": "Antigravity",
59
- "project": ".agent/skills/",
60
- "global": "~/.gemini/antigravity/skills/",
150
+ # Mistral Vibe
151
+ "mistral-vibe": {
152
+ "name": "Mistral Vibe",
153
+ "project": ".vibe/skills/",
154
+ "global": "~/.vibe/skills/",
61
155
  },
62
- "github-copilot": {
63
- "name": "GitHub Copilot",
64
- "project": ".github/skills/",
65
- "global": "~/.copilot/skills/",
156
+ # Mux
157
+ "mux": {
158
+ "name": "Mux",
159
+ "project": ".mux/skills/",
160
+ "global": "~/.mux/skills/",
66
161
  },
67
- "clawdbot": {
68
- "name": "Clawdbot",
69
- "project": "skills/",
70
- "global": "~/.clawdbot/skills/",
162
+ # OpenCode
163
+ "opencode": {
164
+ "name": "OpenCode",
165
+ "project": ".agents/skills/",
166
+ "global": "~/.config/opencode/skills/",
71
167
  },
72
- "droid": {
73
- "name": "Droid",
74
- "project": ".factory/skills/",
75
- "global": "~/.factory/skills/",
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 = Path(info["global"]).expanduser()
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
- return Path(info["global"]).expanduser()
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.